浏览代码

回退,作废流程

0027005599 2 年之前
父节点
当前提交
659abf6e8a

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/Constant.java

@@ -220,4 +220,9 @@ public class Constant {
      * 同步任务同步开始条件
      */
     public static final String JOB_CONTINUE_PARAM = "JOB_CONTINUE_PARAM";
+
+    /**
+     * 回退记录的状态
+     */
+    public static final String HIS_BACK_STATE = "BACK";
 }

+ 55 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/afterwaring/BackDetailToHis.java

@@ -0,0 +1,55 @@
+package org.jeecg.modules.medical.afterwaring;
+
+import cn.hutool.core.collection.CollectionUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.medical.Constant;
+import org.jeecg.modules.medical.entity.AfterIncidentLog;
+import org.jeecg.modules.medical.entity.AfterwardsAudit;
+import org.jeecg.modules.medical.entity.AfterwardsAuditDetail;
+import org.jeecg.modules.medical.service.IAfterIncidentLogService;
+import org.jeecg.modules.medical.service.IAfterwardsAuditDetailService;
+import org.jeecg.modules.medical.service.IAfterwardsAuditService;
+import org.jeecg.modules.medical.service.IAfterwardsIncidentAuditDiagnoseService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 备份明细记录到历史表
+ */
+@Slf4j
+@Component
+public class BackDetailToHis {
+    @Autowired
+    IAfterwardsAuditService afterwardsAuditService;
+    @Autowired
+    IAfterwardsAuditDetailService afterwardsAuditDetailService;
+    @Autowired
+    IAfterwardsIncidentAuditDiagnoseService afterwardsIncidentAuditDiagnoseService;
+    @Autowired
+    IAfterIncidentLogService afterIncidentLogService;
+
+    /**
+     * 作废,冲销流程
+     *
+     * @param backHisId
+     */
+    public void updateAfterwardsBillBack(String backHisId,String newHisId) {
+        if (StringUtils.isNotBlank(backHisId)) {
+            String zyh = null;
+            List<AfterIncidentLog> afterIncidentLogList = afterIncidentLogService.lambdaQuery().eq(AfterIncidentLog::getHisid, backHisId).list();
+            if(CollectionUtil.isNotEmpty(afterIncidentLogList)){
+                zyh = afterIncidentLogList.get(0).getVisitNo();
+            }else{
+                log.error("冲销记录未查询到hisid的处理记录:{}", backHisId);
+                return;
+            }
+            afterwardsAuditDetailService.lambdaUpdate().set(AfterwardsAuditDetail::getBackState, Constant.HIS_BACK_STATE).set(AfterwardsAuditDetail::getBackNewHisid, newHisId)
+                    .eq(AfterwardsAuditDetail::getOutpatientNumber, zyh);
+            afterwardsAuditService.lambdaUpdate().set(AfterwardsAudit::getBackState, Constant.HIS_BACK_STATE).set(AfterwardsAudit::getBackNewHisid, newHisId)
+                    .eq(AfterwardsAudit::getOutpatientNumber, zyh);
+        }
+    }
+}

+ 10 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/AfterwardsAudit.java

@@ -196,4 +196,14 @@ public class AfterwardsAudit implements Serializable {
     @ApiModelProperty(value = "审核次数")
     private Integer auditNumber;
 
+    /**
+     * 冲销和作废的状态
+     */
+    private String backState;
+
+    /**
+     * 新的hisid
+     */
+    private String backNewHisid;
+
 }

+ 10 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/AfterwardsAuditDetail.java

@@ -198,4 +198,14 @@ public class AfterwardsAuditDetail implements Serializable {
     @ApiModelProperty(value = "医生处理意见")
     private String feedbackResult;
 
+    /**
+     * 冲销和作废的状态
+     */
+    private String backState;
+
+    /**
+     * 新的hisid
+     */
+    private String backNewHisid;
+
 }

+ 37 - 11
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/AfterWaringLogJob.java

@@ -4,9 +4,11 @@ import cn.hutool.core.collection.CollectionUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.jeecg.modules.medical.Constant;
+import org.jeecg.modules.medical.afterwaring.BackDetailToHis;
 import org.jeecg.modules.medical.common.CommonUtil;
 import org.jeecg.modules.medical.entity.AfterIncidentDetailLog;
 import org.jeecg.modules.medical.entity.AfterIncidentLog;
+import org.jeecg.modules.medical.entity.AfterwardsAudit;
 import org.jeecg.modules.medical.entity.HospitalizatioSettleDetail;
 import org.jeecg.modules.medical.entity.MasterAdmissionBill;
 import org.jeecg.modules.medical.ruleengine.RuleEngine;
@@ -24,8 +26,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
-import java.util.Locale;
+import java.util.Map;
 
 /**
  * 事后监管任务生成-住院就诊类型
@@ -46,6 +50,8 @@ public class AfterWaringLogJob implements Job {
     IOutpatientSettleBillService outpatientSettleBillService;
     @Autowired
     ISysUserService sysUserService;
+    @Autowired
+    BackDetailToHis backDetailToHis;
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
@@ -63,9 +69,12 @@ public class AfterWaringLogJob implements Job {
             log.error("住院结算主单为:{} 未更新到处理状态", masterAdmissionBill.getId());
             return;
         }
-
+        if(StringUtils.isNotBlank(masterAdmissionBill.getBackReceiptNo())){
+            backDetailToHis.updateAfterwardsBillBack(masterAdmissionBill.getBackReceiptNo(), masterAdmissionBill.getHisid());
+        }
         AfterIncidentLog afterIncidentLog = afterIncidentLogService.addAfterIncidentLog(masterAdmissionBill);
         List<HospitalizatioSettleDetail> hospitalizatioSettleDetails = hospitalizatioSettleDetailService.lambdaQuery().eq(HospitalizatioSettleDetail::getHisid, masterAdmissionBill.getHisid()).list();
+        sumDetail(hospitalizatioSettleDetails);
         List<AfterIncidentDetailLog> afterIncidentDetailLogList = new ArrayList<>();
         AfterIncidentDetailLog afterIncidentDetailLog = null;
         List<SysUser> sysUserList = sysUserService.lambdaQuery().eq(SysUser::getDoctorId, afterIncidentLog.getDoctorId()).list();
@@ -109,7 +118,7 @@ public class AfterWaringLogJob implements Job {
             afterIncidentDetailLog.setChangeClass(hospitalizatioSettleDetail.getPType());
 //            afterIncidentDetailLog.setInspectionSite();
             afterIncidentDetailLog.setOutHospDate(masterAdmissionBill.getDischargeDate());
-            if(StringUtils.isNotBlank(masterAdmissionBill.getDischargeDiseaseIdMain())) {
+            if (StringUtils.isNotBlank(masterAdmissionBill.getDischargeDiseaseIdMain())) {
                 afterIncidentDetailLog.setDiagnoseCodeStr(masterAdmissionBill.getDischargeDiseaseIdMain().trim());
                 afterIncidentDetailLog.setDiagnoseNameStr(masterAdmissionBill.getDischargeDiseaseNameMain());
             }
@@ -144,17 +153,34 @@ public class AfterWaringLogJob implements Job {
         masterAdmissionBillService.lambdaUpdate().set(MasterAdmissionBill::getState, Constant.SUCCESS).eq(MasterAdmissionBill::getId, masterAdmissionBill.getId()).update();
     }
 
-
     /**
-     * 作废,冲销流程
-     * @param masterAdmissionBill
+     * 抵扣负条数记录
+     * @param detailList
      */
-    public void checkBillInv(MasterAdmissionBill masterAdmissionBill){
-        if(StringUtils.isNotBlank(masterAdmissionBill.getBackReceiptNo())){
-            List<AfterIncidentLog> afterIncidentLogList = afterIncidentLogService.lambdaQuery().eq(AfterIncidentLog::getHisid, masterAdmissionBill.getHisid()).list();
-            List<AfterIncidentDetailLog> afterIncidentDetailLogList = afterIncidentDetailLogService.lambdaQuery().eq(AfterIncidentDetailLog::getVisitNo, masterAdmissionBill.getZyh()).list();
-
+    public void sumDetail(List<HospitalizatioSettleDetail> detailList) {
+        Map<String, HospitalizatioSettleDetail> projectCodeHospMap = new HashMap<>();
+        Iterator<HospitalizatioSettleDetail> hospIterator = detailList.iterator();
+        boolean haveSubFlag = false;
+        while (hospIterator.hasNext()) {
+            HospitalizatioSettleDetail hospitalizatioSettleDetail = hospIterator.next();
+            if (hospitalizatioSettleDetail.getNum() < 0) {
+                projectCodeHospMap.put(hospitalizatioSettleDetail.getItemId() + "_" + Math.abs(hospitalizatioSettleDetail.getNum()), hospitalizatioSettleDetail);
+                hospIterator.remove();
+                haveSubFlag = true;
+            }
+        }
+        if (haveSubFlag) {
+            Iterator<HospitalizatioSettleDetail> newHospIterator = detailList.iterator();
+            while (newHospIterator.hasNext()) {
+                HospitalizatioSettleDetail hospitalizatioSettleDetail = newHospIterator.next();
+                String itemIdAndNumKey = hospitalizatioSettleDetail.getItemId() + "_" + hospitalizatioSettleDetail.getNum();
+                if (projectCodeHospMap.containsKey(itemIdAndNumKey)) {
+                    newHospIterator.remove();
+                }
+            }
         }
     }
 
+
+
 }

+ 52 - 55
jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/MidAuditDataTest.java

@@ -1,7 +1,6 @@
 package org.jeecg;
 
 import cn.hutool.core.collection.CollectionUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.jeecg.common.util.DateUtils;
@@ -10,7 +9,6 @@ import org.jeecg.modules.medical.entity.AfterwardsAudit;
 import org.jeecg.modules.medical.entity.AfterwardsAuditDetail;
 import org.jeecg.modules.medical.entity.AfterwardsIncidentAuditDiagnose;
 import org.jeecg.modules.medical.entity.MedicalInsRuleInfo;
-import org.jeecg.modules.medical.entity.MedicalInsRuleProject;
 import org.jeecg.modules.medical.entity.MidIncidentAudit;
 import org.jeecg.modules.medical.entity.MidIncidentAuditDetail;
 import org.jeecg.modules.medical.entity.MidIncidentAuditDiagnose;
@@ -50,7 +48,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * @author soft01
@@ -120,8 +117,8 @@ public class MidAuditDataTest {
     IMidIncidentAuditDetailService midIncidentAuditDetailService;
     @Autowired
     IMidIncidentAuditDiagnoseService midIncidentAuditDiagnoseService;
-    @Autowired
-//    IMidIncidentAuditDiagnoseService midIncidentAuditDiagnoseService;
+
+
     @Test
     public void testJob() {
         try {
@@ -132,16 +129,16 @@ public class MidAuditDataTest {
     }
 
     @Test
-    public void genMidDiag(){
+    public void genMidDiag() {
         List<MidIncidentAudit> midIncidentAuditList = midIncidentAuditService.lambdaQuery().list();
         log.info("进入查询,数据条数:{}", midIncidentAuditList.size());
 
         List<MidIncidentAuditDiagnose> midIncidentAuditDiagnoseList = new ArrayList<>();
         MidIncidentAuditDiagnose midIncidentAuditDiagnose = null;
-        for(MidIncidentAudit midIncidentAudit : midIncidentAuditList){
+        for (MidIncidentAudit midIncidentAudit : midIncidentAuditList) {
             midIncidentAuditDiagnose = new MidIncidentAuditDiagnose();
             List<SttlMasterBill> sttlMasterBills = sttlMasterBillService.lambdaQuery().eq(SttlMasterBill::getJsdjh, midIncidentAudit.getPrescriptionNumber()).list();
-            if(CollectionUtil.isEmpty(sttlMasterBills)){
+            if (CollectionUtil.isEmpty(sttlMasterBills)) {
                 continue;
             }
             SttlMasterBill sttlMasterBill = sttlMasterBills.get(0);
@@ -161,16 +158,16 @@ public class MidAuditDataTest {
 
 
     @Test
-    public void genAfterDiag(){
+    public void genAfterDiag() {
         List<AfterwardsAudit> midIncidentAuditList = afterwardsAuditService.lambdaQuery().list();
         log.info("进入查询,数据条数:{}", midIncidentAuditList.size());
 
         List<AfterwardsIncidentAuditDiagnose> midIncidentAuditDiagnoseList = new ArrayList<>();
         AfterwardsIncidentAuditDiagnose midIncidentAuditDiagnose = null;
-        for(AfterwardsAudit afterwardsAudit : midIncidentAuditList){
+        for (AfterwardsAudit afterwardsAudit : midIncidentAuditList) {
             midIncidentAuditDiagnose = new AfterwardsIncidentAuditDiagnose();
             List<SttlMasterBill> sttlMasterBills = sttlMasterBillService.lambdaQuery().eq(SttlMasterBill::getJsdjh, afterwardsAudit.getPrescriptionNumber()).list();
-            if(CollectionUtil.isEmpty(sttlMasterBills)){
+            if (CollectionUtil.isEmpty(sttlMasterBills)) {
                 continue;
             }
             SttlMasterBill sttlMasterBill = sttlMasterBills.get(0);
@@ -188,20 +185,20 @@ public class MidAuditDataTest {
         afterwardsIncidentAuditDiagnoseService.saveBatch(midIncidentAuditDiagnoseList, 1000);
     }
 
-//    @Test
-    public void getAfterToMid(){
+    //    @Test
+    public void getAfterToMid() {
         log.info("进入查询");
         List<AfterwardsAudit> afterwardsAuditList = afterwardsAuditService.lambdaQuery().list();
         log.info("数据条数:{}", afterwardsAuditList.size());
         MidIncidentAudit midIncidentAudit = new MidIncidentAudit();
         List<MidIncidentAudit> midIncidentAuditList = new ArrayList<>();
-        for(AfterwardsAudit audit : afterwardsAuditList){
+        for (AfterwardsAudit audit : afterwardsAuditList) {
             SttlMasterBill sttlMasterBill = sttlMasterBillService.lambdaQuery().eq(SttlMasterBill::getJsdjh, audit.getPrescriptionNumber()).one();
-            if(null == sttlMasterBill){
+            if (null == sttlMasterBill) {
                 continue;
             }
             Long count = afterwardsAuditDetailService.lambdaQuery().eq(AfterwardsAuditDetail::getAfterwardsAuditId, audit.getId()).isNotNull(AfterwardsAuditDetail::getMedicalInsRuleInfoId).count();
-            if(null == count || count<=0){
+            if (null == count || count <= 0) {
                 continue;
             }
             midIncidentAudit = new MidIncidentAudit();
@@ -242,7 +239,7 @@ public class MidAuditDataTest {
         List<MidIncidentAudit> midIncidentAuditList = midIncidentAuditService.lambdaQuery().ne(MidIncidentAudit::getId, 45).list();
 
 
-        for(MidIncidentAudit midIncidentAudit : midIncidentAuditList){
+        for (MidIncidentAudit midIncidentAudit : midIncidentAuditList) {
 //            QueryWrapper<MedicalInsRuleProject> mrPQueryWrapper = new QueryWrapper();
 //            medicalInsRuleInfoService.lambdaQuery().last()
 
@@ -250,7 +247,7 @@ public class MidAuditDataTest {
             List<AfterwardsAuditDetail> afterwardsAuditDetails = afterwardsAuditDetailService.lambdaQuery().eq(AfterwardsAuditDetail::getPrescriptionNumber, midIncidentAudit.getPrescriptionNumber()).list();
             List<MidIncidentAuditDetail> midIncidentAuditDetails = new ArrayList<>();
             MidIncidentAuditDetail midIncidentAuditDetail = null;
-            for(AfterwardsAuditDetail afterwardsAuditDetail : afterwardsAuditDetails){
+            for (AfterwardsAuditDetail afterwardsAuditDetail : afterwardsAuditDetails) {
 //                String lastSql = "INSTR("+afterwardsAuditDetail.getMedicalProjectCode()+",project_code)";
 //                List<MedicalInsRuleProject> medicalInsRuleProjectList = medicalInsRuleProjectService.lambdaQuery().eq(MedicalInsRuleProject::getState, Constant.EFF_STATE).last(lastSql).list();
 //                if (!CollectionUtil.isNotEmpty(medicalInsRuleProjectList)) {
@@ -258,45 +255,45 @@ public class MidAuditDataTest {
 //                    continue;
 //                }
 
-                SttlMasterDetailBill sttlMasterDetailBill   = sttlMasterDetailBillService.lambdaQuery().eq(SttlMasterDetailBill::getJsdjh, afterwardsAuditDetail.getPrescriptionNumber()).eq(SttlMasterDetailBill::getYbxmbm, afterwardsAuditDetail.getMedicalProjectCode()).list().get(0);
+                SttlMasterDetailBill sttlMasterDetailBill = sttlMasterDetailBillService.lambdaQuery().eq(SttlMasterDetailBill::getJsdjh, afterwardsAuditDetail.getPrescriptionNumber()).eq(SttlMasterDetailBill::getYbxmbm, afterwardsAuditDetail.getMedicalProjectCode()).list().get(0);
 //                for(SttlMasterDetailBill sttlMasterDetailBill : sttlMasterDetailBillList) {
-                    midIncidentAuditDetail = new MidIncidentAuditDetail();
-                    midIncidentAuditDetail.setMidIncidentAuditId(midIncidentAudit.getId());
+                midIncidentAuditDetail = new MidIncidentAuditDetail();
+                midIncidentAuditDetail.setMidIncidentAuditId(midIncidentAudit.getId());
 
-                    midIncidentAuditDetail.setUseDay(Integer.parseInt(sttlMasterDetailBill.get用药天数()));
+                midIncidentAuditDetail.setUseDay(Integer.parseInt(sttlMasterDetailBill.get用药天数()));
 //                midIncidentAuditDetail.setDoseUnit(sttlMasterDetailBill.get)
-                    midIncidentAuditDetail.setMedicalNumber(afterwardsAuditDetail.getQuantity().floatValue());
-                    midIncidentAuditDetail.setPrice(afterwardsAuditDetail.getPrice());
+                midIncidentAuditDetail.setMedicalNumber(afterwardsAuditDetail.getQuantity().floatValue());
+                midIncidentAuditDetail.setPrice(afterwardsAuditDetail.getPrice());
 //                midIncidentAuditDetail.setSingleDoseNumber()
-                    midIncidentAuditDetail.setAmount(afterwardsAuditDetail.getAmount());
-                    midIncidentAuditDetail.setMedicalProjectName(afterwardsAuditDetail.getMedicalProjectName());
-                    midIncidentAuditDetail.setMedicalProjectCode(afterwardsAuditDetail.getMedicalProjectCode());
-                    midIncidentAuditDetail.setTreatmentType("1");
-                    midIncidentAuditDetail.setNoticeType("middle");
-                    midIncidentAuditDetail.setMedicalInsRuleInfoId(afterwardsAuditDetail.getMedicalInsRuleInfoId());
-                    midIncidentAuditDetail.setMedicalInsRuleInfoName(afterwardsAuditDetail.getMedicalInsRuleInfoName());
-                    midIncidentAuditDetail.setMedicalInsRuleInfoCode(afterwardsAuditDetail.getMedicalInsRuleInfoCode());
+                midIncidentAuditDetail.setAmount(afterwardsAuditDetail.getAmount());
+                midIncidentAuditDetail.setMedicalProjectName(afterwardsAuditDetail.getMedicalProjectName());
+                midIncidentAuditDetail.setMedicalProjectCode(afterwardsAuditDetail.getMedicalProjectCode());
+                midIncidentAuditDetail.setTreatmentType("1");
+                midIncidentAuditDetail.setNoticeType("middle");
+                midIncidentAuditDetail.setMedicalInsRuleInfoId(afterwardsAuditDetail.getMedicalInsRuleInfoId());
+                midIncidentAuditDetail.setMedicalInsRuleInfoName(afterwardsAuditDetail.getMedicalInsRuleInfoName());
+                midIncidentAuditDetail.setMedicalInsRuleInfoCode(afterwardsAuditDetail.getMedicalInsRuleInfoCode());
 //                midIncidentAuditDetail.getAmount()-Math.random();
 
-                    midIncidentAuditDetail.setErrorRelativelyManyAmt(new BigDecimal(getRandom(midIncidentAuditDetail.getAmount())));
-                    midIncidentAuditDetail.setErrorRelativelyFewAmt(new BigDecimal(0));
-                    midIncidentAuditDetail.setOutpatientNumber(afterwardsAuditDetail.getOutpatientNumber());
-                    midIncidentAuditDetail.setPrescriptionNumber(afterwardsAuditDetail.getPrescriptionNumber());
-                    midIncidentAuditDetail.setPatientId(afterwardsAuditDetail.getPatientId());
-                    midIncidentAuditDetail.setPatientName(afterwardsAuditDetail.getPatientName());
-                    midIncidentAuditDetail.setProjectType(afterwardsAuditDetail.getProjectType());
-                    midIncidentAuditDetail.setViolationLevel(afterwardsAuditDetail.getViolationLevel());
-                    midIncidentAuditDetail.setReminderLevel("0");
-                    midIncidentAuditDetail.setDescription(afterwardsAuditDetail.getDescription());
-                    midIncidentAuditDetail.setCreateTime(new Date());
-                    midIncidentAuditDetail.setMedicalInsuranceMark("1");
-                    midIncidentAuditDetail.setMedicalDeptCode(afterwardsAuditDetail.getMedicalDeptCode());
-                    midIncidentAuditDetail.setMedicalDeptName(afterwardsAuditDetail.getMedicalDeptName());
-                    midIncidentAuditDetail.setProejctCode(afterwardsAuditDetail.getMedicalProjectCode());
-                    midIncidentAuditDetail.setProejctName(afterwardsAuditDetail.getMedicalProjectName());
-                    midIncidentAuditDetail.setDoctorId(afterwardsAuditDetail.getDoctorId());
-                    midIncidentAuditDetail.setDoctorName(afterwardsAuditDetail.getDoctorName());
-                    midIncidentAuditDetails.add(midIncidentAuditDetail);
+                midIncidentAuditDetail.setErrorRelativelyManyAmt(new BigDecimal(getRandom(midIncidentAuditDetail.getAmount())));
+                midIncidentAuditDetail.setErrorRelativelyFewAmt(new BigDecimal(0));
+                midIncidentAuditDetail.setOutpatientNumber(afterwardsAuditDetail.getOutpatientNumber());
+                midIncidentAuditDetail.setPrescriptionNumber(afterwardsAuditDetail.getPrescriptionNumber());
+                midIncidentAuditDetail.setPatientId(afterwardsAuditDetail.getPatientId());
+                midIncidentAuditDetail.setPatientName(afterwardsAuditDetail.getPatientName());
+                midIncidentAuditDetail.setProjectType(afterwardsAuditDetail.getProjectType());
+                midIncidentAuditDetail.setViolationLevel(afterwardsAuditDetail.getViolationLevel());
+                midIncidentAuditDetail.setReminderLevel("0");
+                midIncidentAuditDetail.setDescription(afterwardsAuditDetail.getDescription());
+                midIncidentAuditDetail.setCreateTime(new Date());
+                midIncidentAuditDetail.setMedicalInsuranceMark("1");
+                midIncidentAuditDetail.setMedicalDeptCode(afterwardsAuditDetail.getMedicalDeptCode());
+                midIncidentAuditDetail.setMedicalDeptName(afterwardsAuditDetail.getMedicalDeptName());
+                midIncidentAuditDetail.setProejctCode(afterwardsAuditDetail.getMedicalProjectCode());
+                midIncidentAuditDetail.setProejctName(afterwardsAuditDetail.getMedicalProjectName());
+                midIncidentAuditDetail.setDoctorId(afterwardsAuditDetail.getDoctorId());
+                midIncidentAuditDetail.setDoctorName(afterwardsAuditDetail.getDoctorName());
+                midIncidentAuditDetails.add(midIncidentAuditDetail);
 
 //                }
             }
@@ -338,8 +335,8 @@ public class MidAuditDataTest {
             Set<Integer> medicalRuleInfoIdSet = RuleEngine.itemCodeAndRuleIdMap.get(projectCode);
             if (CollectionUtil.isEmpty(medicalRuleInfoIdSet)) {
                 log.info("医保编码未匹配到规则:{}", projectCode);
-                if(!codeDataMap.containsKey(projectCode)){
-                    ruleEngine.genItemCodeAndRuleIdMapTest(projectCode, afterwardsAuditDetail, medicalInsRuleInfoList, medicalMap,codeDataMap);
+                if (!codeDataMap.containsKey(projectCode)) {
+                    ruleEngine.genItemCodeAndRuleIdMapTest(projectCode, afterwardsAuditDetail, medicalInsRuleInfoList, medicalMap, codeDataMap);
                 }
 
             } else {
@@ -547,9 +544,9 @@ public class MidAuditDataTest {
 
     private static double getRandom(Double src) {
         Random a = new Random();
-        if (src.intValue()>0) {
+        if (src.intValue() > 0) {
             int i = a.nextInt(src.intValue());
-            return src -i;
+            return src - i;
         }
 
         return 0;

+ 67 - 25
jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/TestMain.java

@@ -2,11 +2,14 @@ package org.jeecg;
 
 import cn.hutool.core.bean.BeanUtil;
 import org.jeecg.modules.medical.entity.AdviceDetailsVO;
+import org.jeecg.modules.medical.entity.HospitalizatioSettleDetail;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 
 import java.time.Period;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.regex.Pattern;
@@ -41,34 +44,73 @@ public class TestMain {
 
 //        Pattern p=Pattern.compile("^ABC");
 //        p.pattern();//返回 \
-        System.out.println(Pattern.matches("^ABC.", "ABCA"));
-
-
-        String ageString = "3年2月4日";
-        ageString = ageString.replace("年","Y");
-        ageString = ageString.replace("月","M");
-        ageString = ageString.replace("周","W");
-        ageString = ageString.replace("日","D");
-
-        // 将年龄字符串解析为Period对象
-        Period agePeriod = Period.parse("P" + ageString);
-
-        // 获取年龄的总天数
-        int ageInDays = agePeriod.getYears() * 365 + agePeriod.getMonths() * 30 + agePeriod.getDays();
-
-        System.out.println("年龄为 " + ageString + " 的人的天数为 " + ageInDays + " 天");
+//        System.out.println(Pattern.matches("^ABC.", "ABCA"));
+//
+//
+//        String ageString = "3年2月4日";
+//        ageString = ageString.replace("年","Y");
+//        ageString = ageString.replace("月","M");
+//        ageString = ageString.replace("周","W");
+//        ageString = ageString.replace("日","D");
+//
+//        // 将年龄字符串解析为Period对象
+//        Period agePeriod = Period.parse("P" + ageString);
+//
+//        // 获取年龄的总天数
+//        int ageInDays = agePeriod.getYears() * 365 + agePeriod.getMonths() * 30 + agePeriod.getDays();
+//
+//        System.out.println("年龄为 " + ageString + " 的人的天数为 " + ageInDays + " 天");
+//
+//        List<Map<String,Object>> detailMapList = new ArrayList<>();
+//        List<AdviceDetailsVO> adviceDetailsVOList = new ArrayList<>();
+//        AdviceDetailsVO adviceDetailsVO = new AdviceDetailsVO();
+//        adviceDetailsVOList.add(adviceDetailsVO);
+//        adviceDetailsVO.setMedical_project_name("123123");
+//        adviceDetailsVO.setDose_day(1);
+//        for(AdviceDetailsVO adviceDetailsVOTemp : adviceDetailsVOList){
+//            detailMapList.add(BeanUtil.beanToMap(adviceDetailsVOTemp));
+//        }
+//        System.out.println(detailMapList);
+        List<HospitalizatioSettleDetail> detailList = new ArrayList<>();
+        HospitalizatioSettleDetail hospitalizatioSettleDetail = new HospitalizatioSettleDetail();
+        hospitalizatioSettleDetail.setNum(5);
+        hospitalizatioSettleDetail.setCost(100.0);
+        hospitalizatioSettleDetail.setItemId("123");
+        detailList.add(hospitalizatioSettleDetail);
+        HospitalizatioSettleDetail hospitalizatioSettleDetail1 = new HospitalizatioSettleDetail();
+        hospitalizatioSettleDetail1.setNum(-5);
+        hospitalizatioSettleDetail1.setCost(100.0);
+        hospitalizatioSettleDetail1.setItemId("123");
+        detailList.add(hospitalizatioSettleDetail1);
 
-        List<Map<String,Object>> detailMapList = new ArrayList<>();
-        List<AdviceDetailsVO> adviceDetailsVOList = new ArrayList<>();
-        AdviceDetailsVO adviceDetailsVO = new AdviceDetailsVO();
-        adviceDetailsVOList.add(adviceDetailsVO);
-        adviceDetailsVO.setMedical_project_name("123123");
-        adviceDetailsVO.setDose_day(1);
-        for(AdviceDetailsVO adviceDetailsVOTemp : adviceDetailsVOList){
-            detailMapList.add(BeanUtil.beanToMap(adviceDetailsVOTemp));
+        HospitalizatioSettleDetail hospitalizatioSettleDetail2 = new HospitalizatioSettleDetail();
+        hospitalizatioSettleDetail2.setNum(1);
+        hospitalizatioSettleDetail2.setCost(200.0);
+        hospitalizatioSettleDetail2.setItemId("xxxx");
+        detailList.add(hospitalizatioSettleDetail2);
+        Map<String, HospitalizatioSettleDetail> projectCodeHospMap = new HashMap<>();
+        Iterator<HospitalizatioSettleDetail> hospIterator = detailList.iterator();
+        boolean haveSubFlag = false;
+        while (hospIterator.hasNext()) {
+            HospitalizatioSettleDetail hospitalizatioSettleDetailTemp = hospIterator.next();
+            if (hospitalizatioSettleDetailTemp.getNum() < 0) {
+                projectCodeHospMap.put(hospitalizatioSettleDetailTemp.getItemId() + "_" + Math.abs(hospitalizatioSettleDetailTemp.getNum()), hospitalizatioSettleDetailTemp);
+                hospIterator.remove();
+                haveSubFlag = true;
+            }
+        }
+        if (haveSubFlag) {
+            Iterator<HospitalizatioSettleDetail> newHospIterator = detailList.iterator();
+            while (newHospIterator.hasNext()) {
+                HospitalizatioSettleDetail hospitalizatioSettleDetailTemp = newHospIterator.next();
+                String itemIdAndNumKey = hospitalizatioSettleDetailTemp.getItemId() + "_" + hospitalizatioSettleDetailTemp.getNum();
+                if (projectCodeHospMap.containsKey(itemIdAndNumKey)) {
+                    newHospIterator.remove();
+                }
+            }
         }
-        System.out.println(detailMapList);
 
+        System.out.println(detailList);
     }
 
     private static HttpHeaders getHeaders() {