Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

lenovodn 2 лет назад
Родитель
Сommit
fa3b5c9560
18 измененных файлов с 456 добавлено и 41 удалено
  1. 4 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/AuditInfoResponse.java
  2. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/AuditRequestBO.java
  3. 4 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/DeptAuditRequestBO.java
  4. 6 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/DoctorViolationRequest.java
  5. 26 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/InpatientSettlementDetailResponse.java
  6. 62 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/InpatientSettlementMasterResponse.java
  7. 50 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/MedicalInsuranceProjectDetailsResponse.java
  8. 32 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/PatientInfoResponse.java
  9. 1 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/enums/AfterwardsAuditStatusEnum.java
  10. 59 26
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/controller/AfterwardsAuditController.java
  11. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/MidIncidentWarningVO.java
  12. 16 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/AfterwardsAuditMapper.java
  13. 64 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/xml/AfterwardsAuditMapper.xml
  14. 24 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/projectcache/HisMedicalProjectCache.java
  15. 24 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IAfterwardsAuditService.java
  16. 7 3
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IMedicalDoctorAppealRecordService.java
  17. 57 6
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/AfterwardsAuditServiceImpl.java
  18. 18 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/MedicalDoctorAppealRecordServiceImpl.java

+ 4 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/AuditInfoResponse.java

@@ -79,5 +79,9 @@ public class AuditInfoResponse implements Serializable {
     @ApiModelProperty(value = "审核状态: wait=待分配; process=处理中; finish=已完成")
     private java.lang.String checkState;
 
+    @ApiModelProperty(value = "审核状态;dept_audit_wait=等待科室处理;doctor_appeal=医生申诉")
+    private String status;
+    @ApiModelProperty(value = "审核次数")
+    private Integer auditNumber;
 
 }

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/AuditRequestBO.java

@@ -22,5 +22,5 @@ public class AuditRequestBO implements Serializable {
     private String id;
     @NotBlank(message = "审核状态不可为空")
     @ApiModelProperty(value = "审核状态;wait=待审核 pass=系统问题,直接过,violation=直接违规; issue_review=下发复核") //TODO 暂定3种,后面在枚举中,或者字典
-    private String checkState;
+    protected String checkState;
 }

+ 4 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/DeptAuditRequestBO.java

@@ -27,4 +27,8 @@ public class DeptAuditRequestBO extends AuditRequestBO{
     @NotBlank(message = "必须上传图片")
     @ApiModelProperty(value = "审核照片组,中间用逗号分割")
     private String imgPaths;
+
+//    @NotBlank(message = "审核状态不可为空")
+//    @ApiModelProperty(value = "审核状态:appeal=申诉;agree_audit=同意审核结果")
+//    private String checkState;
 }

+ 6 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/DoctorViolationRequest.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
 import java.io.Serializable;
 
 /**
@@ -22,6 +23,11 @@ public class DoctorViolationRequest implements Serializable {
     @ApiModelProperty(value = "患者姓名")
     private String patientName;
 
+    @NotBlank(message = "违规医生编码不可为空")
+    @ApiModelProperty(value = "违规医生编码")
+    private String doctorId;
+
+    @NotBlank(message = "审核状态不可为空")
     @ApiModelProperty(value = "审核状态: wait=待分配; process=处理中; finish=已完成")
     private java.lang.String checkState;
 

+ 26 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/InpatientSettlementDetailResponse.java

@@ -0,0 +1,26 @@
+package org.jeecg.modules.medical.common.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author soft01
+ * @time 2023/5/28 11:14
+ * @description '住院结算明细'
+ * @parentProject medical-java
+ */
+@ApiModel("住院结算明细")
+@Data
+public class InpatientSettlementDetailResponse implements Serializable {
+
+    @ApiModelProperty("患者信息")
+    private PatientInfoResponse patientInfo;
+
+    @ApiModelProperty("医保项目明细")
+    private List<MedicalInsuranceProjectDetailsResponse> hospitalizationSettleDetailResponse;
+
+}

+ 62 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/InpatientSettlementMasterResponse.java

@@ -0,0 +1,62 @@
+package org.jeecg.modules.medical.common.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author soft01
+ * @time 2023/5/28 16:07
+ * @description '这里描写类的用途'
+ * @parentProject medical-java
+ */
+@ApiModel(value = "住院结算主单响应")
+@Data
+public class InpatientSettlementMasterResponse implements Serializable {
+
+    @ApiModelProperty(value = "主键id")
+    private Integer id;
+
+    @ApiModelProperty(value = "住院号")
+    private String zyh;
+
+    @ApiModelProperty(value = "患者姓名")
+    private String patientName;
+
+    @ApiModelProperty(value = "个人编码")
+    private String personalCode;
+
+    @ApiModelProperty(value = "患者性别")
+    private String gender;
+
+    @ApiModelProperty(value = "出生日期,计算年龄")
+    private Date dateOfBirth;
+
+    @ApiModelProperty(value = "险种类型")
+    private String insuranceType;
+
+    @ApiModelProperty(value = "医保支付方式")
+    private String paymentMethod;
+
+    @ApiModelProperty(value = "出院科室")
+    private String dischargeDepartment;
+
+    @ApiModelProperty(value = "入院日期")
+    private Date admissionDate;
+
+    @ApiModelProperty(value = "住院天数")
+    private Integer lengthOfStay;
+
+    @ApiModelProperty(value = "基金支付金额")
+    private BigDecimal fundPaymentAmount;
+
+    @ApiModelProperty(value = "全自付金额-------图稿是个人支付金额要确认")
+    private BigDecimal totalPersonalPaymentAmount;
+
+    @ApiModelProperty(value = "医疗总发生费用")
+    private BigDecimal totalMedicalExpenses;
+}

+ 50 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/MedicalInsuranceProjectDetailsResponse.java

@@ -0,0 +1,50 @@
+package org.jeecg.modules.medical.common.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author soft01
+ * @time 2023/5/28 11:26
+ * @description '这里描写类的用途'
+ * @parentProject medical-java
+ */
+@ApiModel(value = "医保项目明细")
+@Data
+public class MedicalInsuranceProjectDetailsResponse implements Serializable {
+
+    @ApiModelProperty(value = "项目使用时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "科室名称")
+    private String dischargeDeptName;
+
+    @ApiModelProperty(value = "费用类别")
+    private String pCategory;
+
+    @ApiModelProperty(value = "医保项目编码")
+    private String itemId;
+
+    @ApiModelProperty(value = "医保项目名称")
+    private String itemName;
+
+    @ApiModelProperty(value = "规格")
+    private String drugSpec;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal unitPrice;
+
+    @ApiModelProperty(value = "数量")
+    private Integer num;
+
+    @ApiModelProperty(value = "发生金额")
+    private BigDecimal cost;
+
+    @ApiModelProperty(value = "支付列表")
+    private String pType;
+}

+ 32 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/PatientInfoResponse.java

@@ -0,0 +1,32 @@
+package org.jeecg.modules.medical.common.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author soft01
+ * @time 2023/5/28 11:17
+ * @description '患者信息响应'
+ * @parentProject medical-java
+ */
+public class PatientInfoResponse implements Serializable {
+
+    @ApiModelProperty(value = "住院号")
+    private String admissionNumber;
+
+    @ApiModelProperty(value = "患者姓名")
+    private String patientName;
+
+    @ApiModelProperty(value = "个人编码")
+    private String personalCode;
+
+    @ApiModelProperty(value = "结算单据号")
+    private String settlementBillNumber;
+
+    @ApiModelProperty(value = "总发生金额")
+    private BigDecimal totalAmount;
+
+
+}

+ 1 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/enums/AfterwardsAuditStatusEnum.java

@@ -23,6 +23,7 @@ public enum AfterwardsAuditStatusEnum {
     issue_review("issue_review", "下发复核"),
     agree_audit("agree_audit", "医生同意审核结果")
     ,
+    appeal("appeal", "科室/医生申诉"),
 
 
     // 下发复核状态

+ 59 - 26
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/controller/AfterwardsAuditController.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
@@ -19,6 +18,7 @@ import org.jeecg.modules.medical.common.bo.*;
 import org.jeecg.modules.medical.common.enums.AfterwardsAuditStatusEnum;
 import org.jeecg.modules.medical.entity.AfterwardsAudit;
 import org.jeecg.modules.medical.entity.AfterwardsAuditDetail;
+import org.jeecg.modules.medical.entity.MedicalDoctorAppealRecord;
 import org.jeecg.modules.medical.service.IAfterwardsAuditService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.ObjectUtils;
@@ -64,33 +64,12 @@ public class AfterwardsAuditController extends JeecgController<AfterwardsAudit,
 		 return Result.OK(pageList);
 	 }
 
-	 @ApiOperation(value = "审核端-获取审核详细信息")
-	 @GetMapping(value = "/audit/info")
-	 public Result<AuditInfoResponse> loadAuditInfo(HttpServletRequest request, @RequestParam("id") Integer id) {
-		 LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-//		 String loginUserName = JwtUtil.getUserNameByToken(request);
-		 if (null == loginUser) {
-			 log.error("当前用户未登录");
-			 throw new JeecgBootException("用户未登录"); // "登录已过期,请重新登录"
-		 }
-		 AuditInfoResponse result = afterwardsAuditService.loadAuditInfo(id);
-		 return Result.OK(result);
-	 }
 
-	 @ApiOperation(value = "审核端-诊断信息")
-	 @GetMapping(value = "/audit/diagnostic/info")
-	 public Result<List<DiagnosticInfoResponse>> loadDiagnosticInformation(HttpServletRequest request, @RequestParam("id") Integer id) {
-		 LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-		 if (null == loginUser) {
-			 log.error("当前用户未登录");
-			 throw new JeecgBootException("用户未登录"); // "登录已过期,请重新登录"
-		 }
-		List<DiagnosticInfoResponse> result = afterwardsAuditService.loadDiagnosticInfo(id);
-		return Result.OK(result);
-	 }
+
+
 
 	 @ApiOperation(value = "审核端-医嘱信息")
-	 @GetMapping(value = "/audit/")
+	 @GetMapping(value = "/audit/medicalorder/info")
 	 public Result<List<MedicalOrderInfoResponse>> loadMedicalOrderInfoResponseInfo(HttpServletRequest request, @RequestParam("id") Integer id) {
 		 LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 		 if (null == loginUser) {
@@ -101,6 +80,46 @@ public class AfterwardsAuditController extends JeecgController<AfterwardsAudit,
 		 return Result.OK(result);
 	 }
 
+	@ApiOperation(value = "审核端-医院结算明细")
+	@GetMapping(value = "/audit/settlement/detail")
+	public Result<InpatientSettlementDetailResponse> loadInpatientSettlementDetail(HttpServletRequest request, @RequestParam("id") Integer id) {
+		InpatientSettlementDetailResponse result = afterwardsAuditService.loadInpatientSettlementDetail(id);
+		return Result.OK("获取成功", result);
+	}
+
+	@ApiOperation(value = "审核端-患者住院结算主单")
+	@GetMapping(value = "/audit/settlement/master")
+	public Result<List<InpatientSettlementMasterResponse>> loadInpatientSettlementMaster(HttpServletRequest request, @RequestParam("id") Integer id) {
+		List<InpatientSettlementMasterResponse> result = afterwardsAuditService.loadInpatientSettlementMaster(id);
+		return Result.OK("获取成功", result);
+	}
+
+
+	@ApiOperation(value = "审核端-诊断信息")
+	@GetMapping(value = "/audit/diagnostic/info")
+	public Result<List<DiagnosticInfoResponse>> loadDiagnosticInformation(HttpServletRequest request, @RequestParam("id") Integer id) {
+		LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		if (null == loginUser) {
+			log.error("当前用户未登录");
+			throw new JeecgBootException("用户未登录"); // "登录已过期,请重新登录"
+		}
+		List<DiagnosticInfoResponse> result = afterwardsAuditService.loadDiagnosticInfo(id);
+		return Result.OK(result);
+	}
+
+	@ApiOperation(value = "审核端-获取审核详细信息")
+	@GetMapping(value = "/audit/info")
+	public Result<AuditInfoResponse> loadAuditInfo(HttpServletRequest request, @RequestParam("id") Integer id) {
+		LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+//		 String loginUserName = JwtUtil.getUserNameByToken(request);
+		if (null == loginUser) {
+			log.error("当前用户未登录");
+			throw new JeecgBootException("用户未登录"); // "登录已过期,请重新登录"
+		}
+		AuditInfoResponse result = afterwardsAuditService.loadAuditInfo(id);
+		return Result.OK(result);
+	}
+
 	 @ApiOperation(value = "审核端-发起审核", notes = "审核端-发起审核")
 	 @PostMapping(value = "/audit")
 	 public Result<String> audit(HttpServletRequest request, @RequestBody @Valid AuditRequestBO param) {
@@ -128,6 +147,7 @@ public class AfterwardsAuditController extends JeecgController<AfterwardsAudit,
 		afterwardsAudit.setOutpatientNumber(param.getAdmissionNumber());
 		afterwardsAudit.setPatientId(param.getPatientName());
 		afterwardsAudit.setCheckState(param.getCheckState());
+		afterwardsAudit.setDoctorId(param.getDoctorId());
 		QueryWrapper<AfterwardsAudit> queryWrapper = QueryGenerator.initQueryWrapper(afterwardsAudit, req.getParameterMap());
 		Page<AfterwardsAudit> page = new Page<>(pageNo, pageSize);
 		IPage<AfterwardsAudit> violations = afterwardsAuditService.getDoctorViolations(page, queryWrapper, loginUser);
@@ -145,7 +165,7 @@ public class AfterwardsAuditController extends JeecgController<AfterwardsAudit,
 	 	return Result.OK("获取成功", result);
 	 }
 
-	 @ApiModelProperty(value = "科室端,复核", notes = "科室端,复核")
+	 @ApiOperation(value = "科室端,复核", notes = "科室端,复核")
 	 @PostMapping(value = "/dept/audit")
 	 public Result<?> deptAudit(HttpServletRequest request, @RequestBody @Valid DeptAuditRequestBO param) {
 		 LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
@@ -157,6 +177,19 @@ public class AfterwardsAuditController extends JeecgController<AfterwardsAudit,
 		 return Result.OK("请求成功");
 	 }
 
+	 @ApiOperation(value = "科室端,查看复核记录", notes = "科室端-查看复核记录")
+	 @GetMapping(value = "/appeal/record/list")
+	 public Result<List<MedicalDoctorAppealRecord>> loadAppeal(Integer id) {
+		 LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		 if (null == loginUser) {
+			 log.error("当前用户未登录");
+			 throw new JeecgBootException("用户未登录"); // "登录已过期,请重新登录"
+		 }
+		 List<MedicalDoctorAppealRecord> record = afterwardsAuditService.loadAppealRecord(id, loginUser);
+		 return Result.OK(record);
+	 }
+
+
 	/**
 	 * 分页列表查询
 	 *

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/MidIncidentWarningVO.java

@@ -23,7 +23,7 @@ public class MidIncidentWarningVO {
     private String medical_dept_code;//科室编码
     @NotBlank(message = "科室名称不能为空")
     private String medical_dept_name;//科室名称
-    @NotBlank(message = "就诊类型不能为空")
+    @NotBlank(message = "就诊类型不能为空(1:住院、2:门诊)")
     private String visit_type;//就诊类型(1住院、2门诊)
     /**
      * 险种类别

+ 16 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/AfterwardsAuditMapper.java

@@ -69,4 +69,20 @@ public interface AfterwardsAuditMapper extends BaseMapper<AfterwardsAudit> {
     List<DiagnosticInfoResponse> loadDiagnosticInfo(@Param("id") Integer id);
 
     List<MedicalOrderInfoResponse> loadMedicalOrderInfo(@Param("id") Integer id);
+
+    /**
+     * 查询患者信息
+     * @param id
+     * @return
+     */
+    PatientInfoResponse loadInpatientSettlementInfo(@Param("id") Integer id);
+
+    /**
+     * 事后结算工单id,查询医保明细
+     * @param id
+     * @return
+     */
+    List<MedicalInsuranceProjectDetailsResponse> loadMedicalInsuranceProjectDetails(@Param("id") Integer id);
+
+    List<InpatientSettlementMasterResponse> loadInpatientSettlementMaster(@Param("id") Integer id);
 }

+ 64 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/xml/AfterwardsAuditMapper.xml

@@ -183,7 +183,11 @@
             ad.visit_time as visitTime,
             ad.medical_insurance as medicalInsurance,
             ad.doctor_name as doctorName,
-            ad.medical_dept_name as medicalDeptName
+            ad.medical_dept_name as medicalDeptName,
+            ad.`status` as status,
+            ad.medical_dept_code,
+            ad.doctor_id,
+            ad.check_state
         FROM afterwards_audit as ad
                  LEFT JOIN his_patient as his on ad.patient_id = his.patient_no
         WHERE ad.id = #{id,jdbcType=INTEGER};
@@ -251,4 +255,63 @@
         WHERE
             ad.id = #{id, jdbcType=INTEGER}
     </select>
+
+    <!-- loadInpatientSettlementInfo 查询方法 -->
+    <select id="loadInpatientSettlementInfo" resultType="org.jeecg.modules.medical.common.bo.PatientInfoResponse">
+        SELECT
+            a.id,
+            a.outpatient_number AS admissionNumber, -- 住院号
+            a.patient_name AS patientName, -- 患者姓名
+            a.patient_id AS personalCode, -- 个人编码
+            mab.hisid AS settlementBillNumber, -- 结算单据号
+            mab.medfee_sumamt AS totalAmount -- 总发生金额
+        FROM
+            afterwards_audit AS a
+                LEFT JOIN master_admission_bill AS mab ON mab.zyh = a.outpatient_number
+        WHERE
+            a.id = #{id, jdbcType=INTEGER}
+
+    </select>
+    <select id="loadMedicalInsuranceProjectDetails"
+            resultType="org.jeecg.modules.medical.common.bo.MedicalInsuranceProjectDetailsResponse">
+        SELECT
+            create_time AS createTime, -- "项目使用时间"
+            discharge_dept_name AS dischargeDeptName, -- "科室名称"
+            p_category AS pCategory, -- "费用类别"
+            item_id AS itemId, -- "医保项目编码"
+            item_name AS itemName, -- "医保项目名称"
+            drug_spec AS drugSpec, -- "规格"
+            unit_price AS unitPrice, -- "单价"
+            num AS num, -- "数量"
+            cost AS cost, -- "发生金额"
+            p_type AS pType -- "支付列表"
+        FROM
+            hospitalizatio_settle_detail
+        WHERE
+            zyh = (SELECT outpatient_number FROM afterwards_audit AS ad WHERE ad.id = #{id,jdbcType=INTEGER})
+    </select>
+
+    <!-- 根据事后工单id 查询结算主单数据 -->
+    <select id="loadInpatientSettlementMaster"
+            resultType="org.jeecg.modules.medical.common.bo.InpatientSettlementMasterResponse">
+        SELECT
+            ad.id,
+            ad.outpatient_number AS zyh,  -- 住院号
+            ad.patient_name AS patientName,  -- 患者姓名
+            ad.patient_id AS personalCode,  -- 个人编码
+            his.gender AS gender,  -- 患者性别
+            his.birthday AS dateOfBirth,  -- 出生日期,计算年龄
+            mab.benefit_type AS insuranceType,  -- 险种类型
+            mab.yb_pay_type AS paymentMethod,  -- 医保支付方式
+            mab.discharge_dept_name AS dischargeDepartment,  -- 出院科室
+            mab.admission_date AS admissionDate,  -- 入院日期
+            mab.zyts AS lengthOfStay,  -- 住院天数
+            mab.fund_pay_sumamt AS fundPaymentAmount,  -- 基金支付金额
+            mab.fulamt_ownpay_amt AS totalPersonalPaymentAmount,  -- 全自付金额-------图稿是个人支付金额要确认
+            mab.medfee_sumamt AS totalMedicalExpenses  -- 医疗总发生费用
+        FROM afterwards_audit AS ad
+                 LEFT JOIN master_admission_bill AS mab ON ad.outpatient_number = mab.zyh
+                 LEFT JOIN his_patient AS his ON ad.patient_id = his.patient_no
+        WHERE ad.id = #{id,jdbcType=INTEGER}
+    </select>
 </mapper>

+ 24 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/projectcache/HisMedicalProjectCache.java

@@ -3,9 +3,11 @@ package org.jeecg.modules.medical.ruleengine.projectcache;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.medical.Constant;
+import org.jeecg.modules.medical.entity.DiagnoseItems;
 import org.jeecg.modules.medical.entity.MaterialItems;
 import org.jeecg.modules.medical.entity.MedicalInsuranceDrugs;
 import org.jeecg.modules.medical.entity.TreatmentItems;
+import org.jeecg.modules.medical.service.IDiagnosesService;
 import org.jeecg.modules.medical.service.IMaterialItemsService;
 import org.jeecg.modules.medical.service.IMedicalInsuranceDrugsService;
 import org.jeecg.modules.medical.service.ITreatmentItemsService;
@@ -29,6 +31,8 @@ public class HisMedicalProjectCache {
     ITreatmentItemsService treatmentItemsService;
     @Autowired
     IMaterialItemsService materialItemsService;
+    @Autowired
+    IDiagnosesService diagnosesService;
 
     @PostConstruct
     public void initHisMedicalProjectCache(){
@@ -40,7 +44,7 @@ public class HisMedicalProjectCache {
             if (modNum > 0) {
                 pageNum = pageNum + 1;
             }
-            for (int i = 0; i < pageNum; i++) {
+            for (int i = 1; i <= pageNum; i++) {
                 IPage page = new Page(i, 1000);
                 List<MedicalInsuranceDrugs> medicalInsuranceDrugsList = medicalInsuranceDrugsService.page(page).getRecords();
                 for (MedicalInsuranceDrugs medicalInsuranceDrugs : medicalInsuranceDrugsList) {
@@ -56,7 +60,7 @@ public class HisMedicalProjectCache {
             if (modNum > 0) {
                 pageNum = pageNum + 1;
             }
-            for (int i = 0; i < pageNum; i++) {
+            for (int i = 1; i <= pageNum; i++) {
                 IPage page = new Page(i, 1000);
                 List<TreatmentItems> treatmentItemsList = treatmentItemsService.page(page).getRecords();
                 for (TreatmentItems treatmentItems : treatmentItemsList) {
@@ -82,5 +86,23 @@ public class HisMedicalProjectCache {
                 }
             }
         }
+
+
+        count = diagnosesService.count();
+        if(count>0) {
+            long pageNum = count / 1000;
+            long modNum = count % 1000;
+            if (modNum > 0) {
+                pageNum = pageNum + 1;
+            }
+            for (int i = 1; i <= pageNum; i++) {
+                IPage page = new Page(i, 1000);
+                List<DiagnoseItems> diagnoseItemsList = diagnosesService.page(page).getRecords();
+                for (DiagnoseItems diagnoseItems : diagnoseItemsList) {
+                    redisTemplate.opsForHash().put(Constant.HIS_MEDICAL_DICT_KEY, diagnoseItems.getDiagnoseCode(), diagnoseItems.getMedicalDiagnoseCode());
+                    redisTemplate.opsForHash().put(Constant.MEDICAL_CODE_NAME_KEY, diagnoseItems.getMedicalDiagnoseCode(), diagnoseItems.getMedicalDiagnoseName());
+                }
+            }
+        }
     }
 }

+ 24 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IAfterwardsAuditService.java

@@ -8,6 +8,7 @@ import org.jeecg.modules.medical.common.bo.*;
 import org.jeecg.modules.medical.entity.AfterwardsAudit;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.medical.entity.AfterwardsAuditDetail;
+import org.jeecg.modules.medical.entity.MedicalDoctorAppealRecord;
 
 import java.util.List;
 
@@ -77,9 +78,31 @@ public interface IAfterwardsAuditService extends IService<AfterwardsAudit> {
 
     /**
      * 获取医生违规列表
-     * @param pageNo
+     * @param page
      * @param queryWrapper
      * @return
      */
     IPage<AfterwardsAudit> getDoctorViolations(Page<AfterwardsAudit> page, QueryWrapper<AfterwardsAudit> queryWrapper, LoginUser loginUser);
+
+    /**
+     * 获取住院结算明细
+     * @param id 事后审核工单id
+     * @return
+     */
+    InpatientSettlementDetailResponse loadInpatientSettlementDetail(Integer id);
+
+    /**
+     * 根据事后审核工单id, 查询审核申诉记录表
+     * @param id        事后审核工单id
+     * @param loginUser 当前登录用户信息
+     * @return
+     */
+    List<MedicalDoctorAppealRecord> loadAppealRecord(Integer id, LoginUser loginUser);
+
+    /**
+     * 根据事后审核工单id,查询住院结算主单
+     * @param id 事后审核工单id
+     * @return
+     */
+    List<InpatientSettlementMasterResponse> loadInpatientSettlementMaster(Integer id);
 }

+ 7 - 3
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IMedicalDoctorAppealRecordService.java

@@ -3,6 +3,8 @@ package org.jeecg.modules.medical.service;
 import org.jeecg.modules.medical.entity.MedicalDoctorAppealRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: 科室申诉资料记录表
  * @Author: jeecg-boot
@@ -14,10 +16,12 @@ public interface IMedicalDoctorAppealRecordService extends IService<MedicalDocto
 
     /**
      * 根据条件,获取最大的审核次数
-     * @param id
-     * @param medicalDeptCode
-     * @param doctorId
+     * @param id 事后审核工单id
+     * @param medicalDeptCode 科室编码
+     * @param doctorId 医生编码
      * @return
      */
     MedicalDoctorAppealRecord loadMaxAppealNumber(Integer id, String medicalDeptCode, String doctorId);
+
+    List<MedicalDoctorAppealRecord> loadAppealRecord(Integer id, String medicalDeptCode);
 }

+ 57 - 6
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/AfterwardsAuditServiceImpl.java

@@ -1,6 +1,5 @@
 package org.jeecg.modules.medical.service.impl;
 
-import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -8,7 +7,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.checkerframework.checker.units.qual.A;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.medical.common.bo.*;
@@ -252,9 +250,16 @@ public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMappe
         appealRecord.setDoctorId(audit.getDoctorId());
         appealRecord.setDoctorName(audit.getDoctorName());
         appealRecord.setAfterwardsAuditId(audit.getId());
+
+        AfterwardsAuditStatusEnum enums = AfterwardsAuditStatusEnum.findEnums(param.getCheckState());
+        if (null == enums) {
+            log.error("不支持的审核状态={}", param.getCheckState());
+            throw new JeecgBootException("不支持的审核状态,请检查");
+        }
+
         // 2.开始校验处理状态
-        switch (param.getCheckState()) {
-            case "appeal": //申诉
+        switch (enums) {
+            case appeal: //"appeal": //申诉
                 appealRecord.setDescription(param.getDescription());
                 appealRecord.setImgPath(param.getImgPaths());
 
@@ -266,7 +271,7 @@ public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMappe
                 audit.setUpdateTime(new Date());
                 audit.setUpdateBy(loginUser.getId());
                 break;
-            case "agree_audit": // 同意审核结果
+            case agree_audit: // "agree_audit": // 同意审核结果
                 audit.setCheckBy(audit.getPreCheckBy()); //下一个审核人员为 下发给科室的人员继续审核
                 audit.setPreCheckBy(loginUser.getId()); // 上一个审核人员为当前审核人员
                 audit.setPreAuditTime(new Date()); // 上一个审查时间,是当前时间
@@ -311,6 +316,9 @@ public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMappe
     @Override
     public AuditInfoResponse loadAuditInfo(Integer id) {
         AuditInfoResponse result = baseMapper.loadAuditInfo(id);
+        if (ObjectUtils.nullSafeEquals(result.getCheckState(), AfterwardsAuditStatusEnum.wait.getStatus())) {
+            result.setStatus(AfterwardsAuditStatusEnum.wait.getStatus());
+        }
         if (null == result) {
             log.error("根据事后审核工单id={},获取不到事后审核工单信息", id);
             throw new JeecgBootException("找不到审核工单信息");
@@ -318,6 +326,14 @@ public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMappe
         if (null != result.getBirthday()) {
             // TODO 计算年龄
         }
+        int appealNumber = 0;
+        // 查询一下审核次数
+        MedicalDoctorAppealRecord appealRecord = appealRecordService.loadMaxAppealNumber(id, result.getMedicalDeptCode(), result.getDoctorId());
+        if (null != appealRecord && appealRecord.getAppealNumber() != null) {
+            appealNumber = appealRecord.getAppealNumber();
+        }
+        result.setAuditNumber(appealNumber);
+
         //获取违规的detail数据
         List<AuditInfoListResponse> auditInfoListResponseList = baseMapper.loadAuditInfoList(id);
         if (!CollectionUtils.isEmpty(auditInfoListResponseList)) {
@@ -381,8 +397,43 @@ public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMappe
             log.error("找不到登录用户信息={},的医生编码信息,请检查", loginUser.getUsername());
             throw new JeecgBootException("找不到登录用户的医生编码(医生id)信息,请检查!");
         }
-        queryWrapper.eq("doctor_id", userByName.getDoctorId());
+//        queryWrapper.eq("doctor_id", userByName.getDoctorId());
         queryWrapper.eq("medical_dept_code", medicalDeptCode);
         return this.page(page, queryWrapper);
     }
+
+    @Override
+    public InpatientSettlementDetailResponse loadInpatientSettlementDetail(Integer id) {
+        // 获取患者信息
+        PatientInfoResponse patientInfo = baseMapper.loadInpatientSettlementInfo(id);
+        // 获取医保项目明细
+        List<MedicalInsuranceProjectDetailsResponse> medicalInsuranceProjects  = baseMapper.loadMedicalInsuranceProjectDetails(id);
+        InpatientSettlementDetailResponse r = new InpatientSettlementDetailResponse();
+        r.setPatientInfo(patientInfo);
+        r.setHospitalizationSettleDetailResponse(medicalInsuranceProjects);
+        return r;
+    }
+
+    @Override
+    public List<MedicalDoctorAppealRecord> loadAppealRecord(Integer id, LoginUser loginUser) {
+        // 根据当前登录,先获取到医生面板
+        SysDepart sysDepart = baseMapper.loadUserDept(loginUser.getUsername());
+        if (null == sysDepart) {
+            log.error("找不到当前医生的科室,请检查");
+            throw new JeecgBootException("找不到当前医生的科室,请检查!");
+        }
+        // 当前登录科室/医生端的科室code
+        String medicalDeptCode = sysDepart.getMedicalDeptCode();
+        return appealRecordService.loadAppealRecord(id, medicalDeptCode);
+    }
+
+    /**
+     * 根据事后审核工单id,查询住院结算主单
+     * @param id 事后审核工单id
+     * @return
+     */
+    @Override
+    public List<InpatientSettlementMasterResponse> loadInpatientSettlementMaster(Integer id) {
+        return baseMapper.loadInpatientSettlementMaster(id);
+    }
 }

+ 18 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/MedicalDoctorAppealRecordServiceImpl.java

@@ -1,11 +1,17 @@
 package org.jeecg.modules.medical.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.jeecg.modules.medical.entity.MedicalDoctorAppealRecord;
 import org.jeecg.modules.medical.mapper.MedicalDoctorAppealRecordMapper;
 import org.jeecg.modules.medical.service.IMedicalDoctorAppealRecordService;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.util.CollectionUtils;
+
+import javax.imageio.stream.MemoryCacheImageInputStream;
+import java.util.List;
 
 /**
  * @Description: 科室申诉资料记录表
@@ -20,4 +26,16 @@ public class MedicalDoctorAppealRecordServiceImpl extends ServiceImpl<MedicalDoc
     public MedicalDoctorAppealRecord loadMaxAppealNumber(Integer afterwardsAuditId, String medicalDeptCode, String doctorId) {
         return baseMapper.loadMaxAppealNumber(afterwardsAuditId, medicalDeptCode, doctorId);
     }
+
+    @Override
+    public List<MedicalDoctorAppealRecord> loadAppealRecord(Integer id, String medicalDeptCode) {
+        LambdaQueryWrapper<MedicalDoctorAppealRecord> queryWrapper = Wrappers.<MedicalDoctorAppealRecord>lambdaQuery()
+                .eq(MedicalDoctorAppealRecord::getAfterwardsAuditId, id)
+                .eq(MedicalDoctorAppealRecord::getMedicalDeptCode, medicalDeptCode);
+        List<MedicalDoctorAppealRecord> list = this.list(queryWrapper);
+        if (CollectionUtils.isEmpty(list)) {
+            return null;
+        }
+        return list;
+    }
 }