0027005599 2 жил өмнө
parent
commit
f6c9efe1e6

+ 2 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/SystemEventAttrConstant.java

@@ -219,5 +219,7 @@ public class SystemEventAttrConstant {
      * his接口性别属性
      */
     public static final String PATIENT_GENDER_KEY = "patient_gender";
+
+    public static final String HIS_CHANGE_CLASS = "change_class";
 }
 

+ 125 - 193
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/FactorEnchangeFactory.java

@@ -100,7 +100,6 @@ public class FactorEnchangeFactory {
         List<FactorCondRela> factorCondRelaList = factorCondRelaService.lambdaQuery().orderByAsc(FactorCondRela::getSeqNum).list();
         factorCondRelaMap = factorCondRelaList.stream().collect(Collectors.groupingBy(FactorCondRela::getFactorEnhanceId));
         LambdaQueryWrapper<FactorAttrRela> queryWrapper = new LambdaQueryWrapper();
-//        queryWrapper.eq(FactorAttrRela::getFactorEnhanceId, factorEnchanceId);
         queryWrapper.orderByAsc(FactorAttrRela::getSeqNum);
         List<FactorAttrRela> factorAttrRelaList = factorAttrRelaService.list(queryWrapper);
 
@@ -180,18 +179,11 @@ public class FactorEnchangeFactory {
     }
 
     public Map<Integer, List<FactorAttrRela>> getIoMap(Integer factorEnchanceId) {
-//        LambdaQueryWrapper<FactorAttrRela> queryWrapper = new LambdaQueryWrapper();
-//        queryWrapper.eq(FactorAttrRela::getFactorEnhanceId, factorEnchanceId);
-//        queryWrapper.orderByAsc(FactorAttrRela::getSeqNum);
         List<FactorAttrRela> factorAttrRelaList = factorEnhanceIdAndListMap.get(factorEnchanceId);
-//        Map<Integer, List<FactorAttrRela>> ioTypeMap = new HashMap<>();
-//        if (CollectionUtil.isNotEmpty(factorAttrRelaList)) {
         if (CollectionUtil.isEmpty(factorAttrRelaList)) {
             return new HashMap<>();
         }
         Map<Integer, List<FactorAttrRela>> ioTypeMap = factorAttrRelaList.stream().collect(Collectors.groupingBy(FactorAttrRela::getIoType));
-//        }
-
         return ioTypeMap;
     }
 
@@ -245,52 +237,11 @@ public class FactorEnchangeFactory {
         if (Constant.VALIDATION_HANDER_METHOD_RETURN.equals(medicalInsRuleInfo.getViolationHandingMethod())) {
             afterwardsAuditService.lambdaUpdate().set(AfterwardsAudit::getAmount, afterwardsAudit.getAmount()).eq(AfterwardsAudit::getId, afterwardsAudit.getId()).update();
             List<AfterwardsAuditDetail> afterwardsAuditDetailList = new ArrayList<>();
-            Date date = new Date(System.currentTimeMillis());
             for (Map<String, Object> otherMap : itemList) {
-                AfterwardsAuditDetail afterwardsAuditDetail = new AfterwardsAuditDetail();
-                Double amount = (Double) otherMap.getOrDefault(Constant.AMOUNT_KEY, 0.0);
-                afterwardsAuditDetail.setAmount(amount);
-                afterwardsAuditDetail.setProejctCode(otherMap.get(Constant.PROJECT_CODE_KEY).toString());
-                afterwardsAuditDetail.setProejctName(otherMap.get(Constant.PROJECT_NAME_KEY).toString());
-                afterwardsAuditDetail.setMedicalProjectCode(otherMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
-                afterwardsAuditDetail.setMedicalProjectName(otherMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
-                afterwardsAuditDetail.setProjectType(otherMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
-                afterwardsAuditDetail.setMedicalDeptCode(afterwardsAudit.getMedicalDeptCode());
-                afterwardsAuditDetail.setMedicalDeptName(afterwardsAudit.getMedicalDeptName());
-
-                afterwardsAuditDetail.setCreateTime(date);
-                afterwardsAuditDetail.setDoctorName(afterwardsAudit.getDoctorName());
-                afterwardsAuditDetail.setDoctorId(afterwardsAudit.getDoctorId());
-                afterwardsAuditDetail.setPatientId(afterwardsAudit.getPatientId());
-                afterwardsAuditDetail.setPatientName(afterwardsAudit.getPatientName());
-                afterwardsAuditDetail.setTreatmentType(itemMap.getOrDefault("VISIT_TYPE", "1").toString());
-                afterwardsAuditDetail.setNoticeType("after");
-                afterwardsAuditDetail.setMedicalInsRuleInfoCode(medicalInsRuleInfo.getRuleCode());
-                afterwardsAuditDetail.setMedicalInsRuleInfoId(medicalInsRuleInfo.getId());
-                afterwardsAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
-                String desc = getDesc(medicalInsRuleInfo, itemMap);
-                afterwardsAuditDetail.setDescription(desc);
-                afterwardsAuditDetail.setOutpatientNumber(afterwardsAudit.getOutpatientNumber());
-                afterwardsAuditDetail.setPrescriptionNumber(afterwardsAudit.getPrescriptionNumber());
-
-                afterwardsAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
-                afterwardsAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
-                afterwardsAuditDetail.setAfterwardsAuditId(afterwardsAudit.getId());
-                Object priceObj = otherMap.get(SystemEventAttrConstant.PRICE);
-                if (priceObj != null) {
-                    afterwardsAuditDetail.setPrice(new BigDecimal(priceObj.toString()));
-                }
-                Object projectUseTime = otherMap.get(SystemEventAttrConstant.PROJECT_USE_TIME);
-
-                String projectUseTimeStr = CommonUtil.getProjectUseTime(projectUseTime);
-                afterwardsAuditDetail.setProjectUseTime(projectUseTimeStr);
-
+                AfterwardsAuditDetail afterwardsAuditDetail = getAfterDetailByMap(otherMap, afterwardsAudit, medicalInsRuleInfo);
                 afterwardsAuditDetail.setUseDay((Integer) itemMap.getOrDefault(SystemEventAttrConstant.USE_DAY, 1));
                 afterwardsAuditDetail.setPatientAge(itemMap.getOrDefault(SystemEventAttrConstant.PATIENT_AGE_KEY, "1").toString());
                 afterwardsAuditDetail.setPatientGender(itemMap.getOrDefault(SystemEventAttrConstant.PATIENT_GENDER_KEY, "3").toString());
-                afterwardsAuditDetail.setCreateBy("auto");
-                afterwardsAuditDetail.setQuantity(otherMap.get(SystemEventAttrConstant.QUANTITY) != null ? Integer.parseInt(otherMap.get(SystemEventAttrConstant.QUANTITY).toString()) : 1);
-                afterwardsAuditDetail.setMedicalInsuranceMark(otherMap.get(Constant.MEDICAL_INSURANCE_MARK_KEY) != null ? otherMap.get(Constant.MEDICAL_INSURANCE_MARK_KEY).toString() : "0");
                 afterwardsAuditDetail.setAfterIncidentDetailLogId((Integer) itemMap.get(SystemEventAttrConstant.ITEMMAP_AFTER_INCIDENT_DETAIL_LOG_ID));
                 afterwardsAuditDetail.setMedicalInsRuleInfoId((Integer) itemMap.get(SystemEventAttrConstant.MEDICAL_INS_RULE_PROJECT_ID));
                 afterwardsAuditDetailList.add(afterwardsAuditDetail);
@@ -298,167 +249,86 @@ public class FactorEnchangeFactory {
             }
             afterwardsAuditDetailService.saveBatch(afterwardsAuditDetailList);
         } else {
-            BigDecimal amount = (BigDecimal) itemMap.getOrDefault(Constant.AMOUNT_KEY, new BigDecimal(0));
-            AfterwardsAuditDetail afterwardsAuditDetail = new AfterwardsAuditDetail();
-            afterwardsAuditDetail.setProejctCode(itemMap.get(Constant.PROJECT_CODE_KEY).toString());
-            afterwardsAuditDetail.setProejctName(itemMap.get(Constant.PROJECT_NAME_KEY).toString());
-            afterwardsAuditDetail.setMedicalProjectCode(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
-            afterwardsAuditDetail.setMedicalProjectName(itemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
-            afterwardsAuditDetail.setProjectType(itemMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
-            afterwardsAuditDetail.setAmount(amount.doubleValue());
-
-            afterwardsAuditDetail.setMedicalDeptCode(afterwardsAudit.getMedicalDeptCode());
-            afterwardsAuditDetail.setMedicalDeptName(afterwardsAudit.getMedicalDeptName());
-            Date date = new Date(System.currentTimeMillis());
-            afterwardsAuditDetail.setCreateTime(date);
-            afterwardsAuditDetail.setDoctorName(afterwardsAudit.getDoctorName());
-            afterwardsAuditDetail.setDoctorId(afterwardsAudit.getDoctorId());
-            afterwardsAuditDetail.setPatientId(afterwardsAudit.getPatientId());
-            afterwardsAuditDetail.setPatientName(afterwardsAudit.getPatientName());
-            afterwardsAuditDetail.setTreatmentType(itemMap.getOrDefault("VISIT_TYPE", "1").toString());
-            afterwardsAuditDetail.setNoticeType("after");
-            afterwardsAuditDetail.setMedicalInsRuleInfoCode(medicalInsRuleInfo.getRuleCode());
-            afterwardsAuditDetail.setMedicalInsRuleInfoId(medicalInsRuleInfo.getId());
-            afterwardsAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
-            String desc = getDesc(medicalInsRuleInfo, itemMap);
-            afterwardsAuditDetail.setDescription(desc);
-            afterwardsAuditDetail.setOutpatientNumber(afterwardsAudit.getOutpatientNumber());
-            afterwardsAuditDetail.setPrescriptionNumber(afterwardsAudit.getPrescriptionNumber());
-//            afterwardsAuditDetail.setReminderLevel();
-            afterwardsAuditDetail.setCreateBy("auto");
-            Object projectUseTime = itemMap.get(SystemEventAttrConstant.PROJECT_USE_TIME);
-
-            String projectUseTimeStr = CommonUtil.getProjectUseTime(projectUseTime);
-            afterwardsAuditDetail.setProjectUseTime(projectUseTimeStr);
-
-            afterwardsAuditDetail.setPatientAge(itemMap.getOrDefault(SystemEventAttrConstant.PATIENT_AGE_KEY, "1").toString());
-            afterwardsAuditDetail.setPatientGender(itemMap.getOrDefault(SystemEventAttrConstant.PATIENT_GENDER_KEY, "3").toString());
-            afterwardsAuditDetail.setUseDay((Integer) itemMap.getOrDefault(SystemEventAttrConstant.USE_DAY, 1));
-            afterwardsAuditDetail.setQuantity(itemMap.get(SystemEventAttrConstant.QUANTITY) != null ? Integer.parseInt(itemMap.get(SystemEventAttrConstant.QUANTITY).toString()) : 1);
-            afterwardsAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
-            afterwardsAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
-            afterwardsAuditDetail.setAfterwardsAuditId(afterwardsAudit.getId());
-            afterwardsAuditDetail.setMedicalInsuranceMark(itemMap.get(Constant.MEDICAL_INSURANCE_MARK_KEY) != null ? itemMap.get(Constant.MEDICAL_INSURANCE_MARK_KEY).toString() : "0");
-            afterwardsAuditDetail.setPrice(itemMap.get(SystemEventAttrConstant.PRICE) != null ? new BigDecimal(itemMap.get(SystemEventAttrConstant.PRICE).toString()) : null);
-            afterwardsAuditDetail.setMedicalRuleProjectId((Integer) itemMap.get(SystemEventAttrConstant.MEDICAL_INS_RULE_PROJECT_ID));
-            afterwardsAuditDetail.setAfterIncidentDetailLogId((Integer) itemMap.get(SystemEventAttrConstant.ITEMMAP_AFTER_INCIDENT_DETAIL_LOG_ID));
-            afterwardsAuditService.lambdaUpdate().setSql("amount = amount +" + amount.doubleValue()).eq(AfterwardsAudit::getId, afterwardsAudit.getId()).update();
+            AfterwardsAuditDetail afterwardsAuditDetail = getAfterDetailByMap(itemMap, afterwardsAudit, medicalInsRuleInfo);
+            afterwardsAuditService.lambdaUpdate().setSql("amount = amount +" + afterwardsAuditDetail.getAmount().doubleValue()).eq(AfterwardsAudit::getId, afterwardsAudit.getId()).update();
             afterwardsAuditDetailService.save(afterwardsAuditDetail);
         }
 
 
     }
 
-    public void insertMidWarningDetail(Map<String, Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo, MidIncidentAudit midIncidentAudit, List<Map<String, Object>> itemList) {
+    public AfterwardsAuditDetail getAfterDetailByMap(Map<String,Object> itemMap,AfterwardsAudit afterwardsAudit, MedicalInsRuleInfo medicalInsRuleInfo){
+        BigDecimal amount = (BigDecimal) itemMap.getOrDefault(Constant.AMOUNT_KEY, new BigDecimal(0));
+        AfterwardsAuditDetail afterwardsAuditDetail = new AfterwardsAuditDetail();
+        afterwardsAuditDetail.setProejctCode(itemMap.get(Constant.PROJECT_CODE_KEY).toString());
+        afterwardsAuditDetail.setProejctName(itemMap.get(Constant.PROJECT_NAME_KEY).toString());
+        afterwardsAuditDetail.setMedicalProjectCode(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
+        afterwardsAuditDetail.setMedicalProjectName(itemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
+        afterwardsAuditDetail.setProjectType(itemMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
+        afterwardsAuditDetail.setAmount(amount.doubleValue());
+
+        afterwardsAuditDetail.setMedicalDeptCode(afterwardsAudit.getMedicalDeptCode());
+        afterwardsAuditDetail.setMedicalDeptName(afterwardsAudit.getMedicalDeptName());
+        Date date = new Date(System.currentTimeMillis());
+        afterwardsAuditDetail.setCreateTime(date);
+        afterwardsAuditDetail.setDoctorName(afterwardsAudit.getDoctorName());
+        afterwardsAuditDetail.setDoctorId(afterwardsAudit.getDoctorId());
+        afterwardsAuditDetail.setPatientId(afterwardsAudit.getPatientId());
+        afterwardsAuditDetail.setPatientName(afterwardsAudit.getPatientName());
+        afterwardsAuditDetail.setTreatmentType(itemMap.getOrDefault("VISIT_TYPE", "1").toString());
+        afterwardsAuditDetail.setNoticeType("after");
+        afterwardsAuditDetail.setMedicalInsRuleInfoCode(medicalInsRuleInfo.getRuleCode());
+        afterwardsAuditDetail.setMedicalInsRuleInfoId(medicalInsRuleInfo.getId());
+        afterwardsAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
+        String desc = getDesc(medicalInsRuleInfo, itemMap);
+        afterwardsAuditDetail.setDescription(desc);
+        afterwardsAuditDetail.setOutpatientNumber(afterwardsAudit.getOutpatientNumber());
+        afterwardsAuditDetail.setPrescriptionNumber(afterwardsAudit.getPrescriptionNumber());
+//            afterwardsAuditDetail.setReminderLevel();
+        afterwardsAuditDetail.setCreateBy("auto");
+        Object projectUseTime = itemMap.get(SystemEventAttrConstant.PROJECT_USE_TIME);
+
+        String projectUseTimeStr = CommonUtil.getProjectUseTime(projectUseTime);
+        afterwardsAuditDetail.setProjectUseTime(projectUseTimeStr);
+
+        afterwardsAuditDetail.setPatientAge(itemMap.getOrDefault(SystemEventAttrConstant.PATIENT_AGE_KEY, "1").toString());
+        afterwardsAuditDetail.setPatientGender(itemMap.getOrDefault(SystemEventAttrConstant.PATIENT_GENDER_KEY, "3").toString());
+        afterwardsAuditDetail.setUseDay((Integer) itemMap.getOrDefault(SystemEventAttrConstant.USE_DAY, 1));
+        afterwardsAuditDetail.setQuantity(itemMap.get(SystemEventAttrConstant.QUANTITY) != null ? Integer.parseInt(itemMap.get(SystemEventAttrConstant.QUANTITY).toString()) : 1);
+        afterwardsAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
+        afterwardsAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
+        afterwardsAuditDetail.setAfterwardsAuditId(afterwardsAudit.getId());
+        afterwardsAuditDetail.setMedicalInsuranceMark(itemMap.get(Constant.MEDICAL_INSURANCE_MARK_KEY) != null ? itemMap.get(Constant.MEDICAL_INSURANCE_MARK_KEY).toString() : "0");
+        afterwardsAuditDetail.setPrice(itemMap.get(SystemEventAttrConstant.PRICE) != null ? new BigDecimal(itemMap.get(SystemEventAttrConstant.PRICE).toString()) : null);
+        afterwardsAuditDetail.setMedicalRuleProjectId((Integer) itemMap.get(SystemEventAttrConstant.MEDICAL_INS_RULE_PROJECT_ID));
+        afterwardsAuditDetail.setAfterIncidentDetailLogId((Integer) itemMap.get(SystemEventAttrConstant.ITEMMAP_AFTER_INCIDENT_DETAIL_LOG_ID));
+        return afterwardsAuditDetail;
+    }
 
+    public void insertMidWarningDetail(Map<String, Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo, MidIncidentAudit midIncidentAudit, List<Map<String, Object>> itemList) {
         if (Constant.VALIDATION_HANDER_METHOD_RETURN.equals(medicalInsRuleInfo.getViolationHandingMethod())) {
             midIncidentAuditService.lambdaUpdate().set(MidIncidentAudit::getAmount, midIncidentAudit.getAmount()).eq(MidIncidentAudit::getId, midIncidentAudit.getId()).update();
             List<MidIncidentAuditDetail> otherList = new ArrayList();
             for (Map<String, Object> otherItemMap : itemList) {
-                MidIncidentAuditDetail midIncidentAuditDetail = new MidIncidentAuditDetail();
-                midIncidentAuditDetail.setMedicalDeptCode(itemMap.get("medical_dept_code").toString());
-                midIncidentAuditDetail.setMedicalDeptName(itemMap.get("medical_dept_name").toString());
-                Date date = new Date(System.currentTimeMillis());
-                midIncidentAuditDetail.setCreateTime(date);
-                midIncidentAuditDetail.setDoctorName(itemMap.get("doctor_name").toString());
-                midIncidentAuditDetail.setDoctorId(itemMap.get("doctor_code").toString());
-                midIncidentAuditDetail.setPatientId(itemMap.get("patient_id").toString());
-                midIncidentAuditDetail.setPatientName(itemMap.get("patient_name").toString());
-                String treatmentType = medicalInsRuleInfo.getTreatmentType();
-                if (otherItemMap.containsKey("visit_type")) {
-                    treatmentType = otherItemMap.get("visit_type").toString();
+                MidIncidentAuditDetail midIncidentAuditDetail = getMidDetailByMap(midIncidentAudit, otherItemMap, medicalInsRuleInfo);
+                Object expenseCategory = itemMap.getOrDefault(SystemEventAttrConstant.EXPENSE_CATEGORY, "");
+                if (null != expenseCategory) {
+                    midIncidentAuditDetail.setExpenseCategory(expenseCategory.toString());
                 }
-                midIncidentAuditDetail.setTreatmentType(treatmentType);
-                midIncidentAuditDetail.setNoticeType("middle");
-                midIncidentAuditDetail.setMedicalInsRuleInfoCode(medicalInsRuleInfo.getRuleCode());
-                midIncidentAuditDetail.setMedicalInsRuleInfoId(medicalInsRuleInfo.getId());
-                midIncidentAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
-                String desc = getDesc(medicalInsRuleInfo, itemMap);
-                if (otherItemMap.containsKey(Constant.PROJECT_CODE_KEY)) {
-                    midIncidentAuditDetail.setProejctCode(otherItemMap.get(Constant.PROJECT_CODE_KEY).toString());
-                    midIncidentAuditDetail.setProejctName(otherItemMap.get(Constant.PROJECT_NAME_KEY).toString());
-                    midIncidentAuditDetail.setMedicalProjectCode(otherItemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
-                    midIncidentAuditDetail.setMedicalProjectName(otherItemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
-                    midIncidentAuditDetail.setProjectType(otherItemMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
+                Object changeClass = itemMap.getOrDefault(SystemEventAttrConstant.HIS_CHANGE_CLASS, "");
+                if (null != changeClass) {
+                    midIncidentAuditDetail.setChangeClass(changeClass.toString());
+                }
+                Object spelLog = itemMap.get(Constant.SPEL_LOG);
+                if (null != spelLog) {
+                    midIncidentAuditDetail.setErrorDescription(spelLog.toString());
                 }
-
-                midIncidentAuditDetail.setDescription(desc);
-                midIncidentAuditDetail.setOutpatientNumber(midIncidentAudit.getOutpatientNumber());
-                midIncidentAuditDetail.setPrescriptionNumber(midIncidentAudit.getPrescriptionNumber());
-                midIncidentAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
-                midIncidentAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
-                midIncidentAuditDetail.setMidIncidentAuditId(midIncidentAudit.getId());
-
-                BigDecimal otherAmount = (BigDecimal) otherItemMap.getOrDefault(Constant.AMOUNT_KEY, 0);
-                midIncidentAuditDetail.setAmount(otherAmount.doubleValue());
-
-
-                midIncidentAuditDetail.setDoseDay((Integer) otherItemMap.getOrDefault(SystemEventAttrConstant.DOSE_DAY, 0));
-                midIncidentAuditDetail.setPrice((BigDecimal) otherItemMap.getOrDefault(SystemEventAttrConstant.PRICE, 0));
-                midIncidentAuditDetail.setDoseForm((String) otherItemMap.getOrDefault(SystemEventAttrConstant.DOSE_FORM, ""));
-                midIncidentAuditDetail.setTakeFrequence((String) otherItemMap.getOrDefault(SystemEventAttrConstant.TAKE_FREQUENCE, ""));
-                midIncidentAuditDetail.setSingleDoseNumber((Integer) otherItemMap.getOrDefault(SystemEventAttrConstant.SINGLE_DOSE_NUMBER, 0));
-                midIncidentAuditDetail.setSingleDoseUnit((String) otherItemMap.getOrDefault(SystemEventAttrConstant.SINGLE_DOSE_UNIT, ""));
-                midIncidentAuditDetail.setMedicalSpecification((String) otherItemMap.getOrDefault(SystemEventAttrConstant.MEDICAL_SPECIFICATION, ""));
-                midIncidentAuditDetail.setMedicalNumber((Float) otherItemMap.getOrDefault(SystemEventAttrConstant.QUANTITY, 0));
-                midIncidentAuditDetail.setDoseUnit((String) otherItemMap.getOrDefault(SystemEventAttrConstant.DOSE_UNIT, ""));
-                midIncidentAuditDetail.setUseDay((Integer) otherItemMap.getOrDefault(SystemEventAttrConstant.USE_DAY, 0));
                 otherList.add(midIncidentAuditDetail);
             }
             midIncidentAuditDetailService.saveBatch(otherList);
         } else {
-            MidIncidentAuditDetail midIncidentAuditDetail = new MidIncidentAuditDetail();
-            midIncidentAuditDetail.setAmount(midIncidentAudit.getAmount());
-            midIncidentAuditDetail.setMedicalDeptCode(itemMap.get("medical_dept_code").toString());
-            midIncidentAuditDetail.setMedicalDeptName(itemMap.get("medical_dept_name").toString());
-            Date date = new Date(System.currentTimeMillis());
-            midIncidentAuditDetail.setCreateTime(date);
-            midIncidentAuditDetail.setDoctorName(itemMap.get("doctor_name").toString());
-            midIncidentAuditDetail.setDoctorId(itemMap.get("doctor_code").toString());
-            midIncidentAuditDetail.setPatientId(itemMap.get("patient_id").toString());
-            midIncidentAuditDetail.setPatientName(itemMap.get("patient_name").toString());
-            String treatmentType = medicalInsRuleInfo.getTreatmentType();
-            if (itemMap.containsKey("visit_type")) {
-                treatmentType = itemMap.get("visit_type").toString();
-            }
-            midIncidentAuditDetail.setTreatmentType(treatmentType);
-            midIncidentAuditDetail.setNoticeType("middle");
-            midIncidentAuditDetail.setMedicalInsRuleInfoCode(medicalInsRuleInfo.getRuleCode());
-            midIncidentAuditDetail.setMedicalInsRuleInfoId(medicalInsRuleInfo.getId());
-            midIncidentAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
-            String desc = getDesc(medicalInsRuleInfo, itemMap);
-            midIncidentAuditDetail.setDescription(desc);
-            midIncidentAuditDetail.setOutpatientNumber(midIncidentAudit.getOutpatientNumber());
-            midIncidentAuditDetail.setPrescriptionNumber(midIncidentAudit.getPrescriptionNumber());
-            midIncidentAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
-            midIncidentAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
-            midIncidentAuditDetail.setMidIncidentAuditId(midIncidentAudit.getId());
-            midIncidentAuditDetail.setProejctCode(itemMap.get(Constant.PROJECT_CODE_KEY).toString());
-            midIncidentAuditDetail.setProejctName(itemMap.get(Constant.PROJECT_NAME_KEY).toString());
-            midIncidentAuditDetail.setMedicalProjectCode(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
-            midIncidentAuditDetail.setMedicalProjectName(itemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
-            midIncidentAuditDetail.setDoseDay(Integer.parseInt(itemMap.getOrDefault(SystemEventAttrConstant.DOSE_DAY, 0).toString()));
-            BigDecimal price = new BigDecimal(itemMap.getOrDefault(SystemEventAttrConstant.PRICE, "0").toString());
-            midIncidentAuditDetail.setPrice(price);
-            midIncidentAuditDetail.setDoseForm((String) itemMap.getOrDefault(SystemEventAttrConstant.DOSE_FORM, ""));
-            midIncidentAuditDetail.setTakeFrequence((String) itemMap.getOrDefault(SystemEventAttrConstant.TAKE_FREQUENCE, ""));
-            Integer singleDoseNum = Integer.parseInt(itemMap.getOrDefault(SystemEventAttrConstant.SINGLE_DOSE_NUMBER, "0").toString());
-            midIncidentAuditDetail.setSingleDoseNumber(singleDoseNum);
-            midIncidentAuditDetail.setSingleDoseUnit((String) itemMap.getOrDefault(SystemEventAttrConstant.SINGLE_DOSE_UNIT, ""));
-            midIncidentAuditDetail.setMedicalSpecification((String) itemMap.getOrDefault(SystemEventAttrConstant.MEDICAL_SPECIFICATION, ""));
-            Float quantity = Float.parseFloat(itemMap.getOrDefault(SystemEventAttrConstant.QUANTITY, "1").toString());
-            midIncidentAuditDetail.setMedicalNumber(quantity);
-            midIncidentAuditDetail.setDoseUnit((String) itemMap.getOrDefault(SystemEventAttrConstant.DOSE_UNIT, ""));
-            Integer useDay = Integer.parseInt(itemMap.getOrDefault(SystemEventAttrConstant.USE_DAY, "1").toString());
-            midIncidentAuditDetail.setUseDay(useDay);
-            midIncidentAuditDetail.setProjectType(itemMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
-            midIncidentAuditDetail.setMedicalRuleProjectId((Integer) itemMap.get(SystemEventAttrConstant.MEDICAL_INS_RULE_PROJECT_ID));
-            Object spelLog = itemMap.get(Constant.SPEL_LOG);
-            if(null != spelLog) {
-                midIncidentAuditDetail.setErrorDescription(spelLog.toString());
-            }
+            MidIncidentAuditDetail midIncidentAuditDetail = getMidDetailByMap(midIncidentAudit, itemMap, medicalInsRuleInfo);
             Double amount = (Double) itemMap.getOrDefault(Constant.AMOUNT_KEY, 0.0);
-
             midIncidentAuditService.lambdaUpdate().setSql("amount = amount +" + amount.doubleValue()).eq(MidIncidentAudit::getId, midIncidentAudit.getId()).update();
             midIncidentAuditDetailService.save(midIncidentAuditDetail);
         }
@@ -466,6 +336,68 @@ public class FactorEnchangeFactory {
 
     }
 
+    public MidIncidentAuditDetail getMidDetailByMap(MidIncidentAudit midIncidentAudit, Map<String, Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo) {
+        MidIncidentAuditDetail midIncidentAuditDetail = new MidIncidentAuditDetail();
+        midIncidentAuditDetail.setAmount(midIncidentAudit.getAmount());
+        midIncidentAuditDetail.setMedicalDeptCode(itemMap.get("medical_dept_code").toString());
+        midIncidentAuditDetail.setMedicalDeptName(itemMap.get("medical_dept_name").toString());
+        Date date = new Date(System.currentTimeMillis());
+        midIncidentAuditDetail.setCreateTime(date);
+        midIncidentAuditDetail.setDoctorName(itemMap.get("doctor_name").toString());
+        midIncidentAuditDetail.setDoctorId(itemMap.get("doctor_code").toString());
+        midIncidentAuditDetail.setPatientId(itemMap.get("patient_id").toString());
+        midIncidentAuditDetail.setPatientName(itemMap.get("patient_name").toString());
+        String treatmentType = medicalInsRuleInfo.getTreatmentType();
+        if (itemMap.containsKey("visit_type")) {
+            treatmentType = itemMap.get("visit_type").toString();
+        }
+        midIncidentAuditDetail.setTreatmentType(treatmentType);
+        midIncidentAuditDetail.setNoticeType("middle");
+        midIncidentAuditDetail.setMedicalInsRuleInfoCode(medicalInsRuleInfo.getRuleCode());
+        midIncidentAuditDetail.setMedicalInsRuleInfoId(medicalInsRuleInfo.getId());
+        midIncidentAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
+        String desc = getDesc(medicalInsRuleInfo, itemMap);
+        midIncidentAuditDetail.setDescription(desc);
+        midIncidentAuditDetail.setOutpatientNumber(midIncidentAudit.getOutpatientNumber());
+        midIncidentAuditDetail.setPrescriptionNumber(midIncidentAudit.getPrescriptionNumber());
+        midIncidentAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
+        midIncidentAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
+        midIncidentAuditDetail.setMidIncidentAuditId(midIncidentAudit.getId());
+        midIncidentAuditDetail.setProejctCode(itemMap.get(Constant.PROJECT_CODE_KEY).toString());
+        midIncidentAuditDetail.setProejctName(itemMap.get(Constant.PROJECT_NAME_KEY).toString());
+        midIncidentAuditDetail.setMedicalProjectCode(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
+        midIncidentAuditDetail.setMedicalProjectName(itemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
+        midIncidentAuditDetail.setDoseDay(Integer.parseInt(itemMap.getOrDefault(SystemEventAttrConstant.DOSE_DAY, 0).toString()));
+        BigDecimal price = new BigDecimal(itemMap.getOrDefault(SystemEventAttrConstant.PRICE, "0").toString());
+        midIncidentAuditDetail.setPrice(price);
+        midIncidentAuditDetail.setDoseForm((String) itemMap.getOrDefault(SystemEventAttrConstant.DOSE_FORM, ""));
+        midIncidentAuditDetail.setTakeFrequence((String) itemMap.getOrDefault(SystemEventAttrConstant.TAKE_FREQUENCE, ""));
+        Integer singleDoseNum = Integer.parseInt(itemMap.getOrDefault(SystemEventAttrConstant.SINGLE_DOSE_NUMBER, "0").toString());
+        midIncidentAuditDetail.setSingleDoseNumber(singleDoseNum);
+        midIncidentAuditDetail.setSingleDoseUnit((String) itemMap.getOrDefault(SystemEventAttrConstant.SINGLE_DOSE_UNIT, ""));
+        midIncidentAuditDetail.setMedicalSpecification((String) itemMap.getOrDefault(SystemEventAttrConstant.MEDICAL_SPECIFICATION, ""));
+        Float quantity = Float.parseFloat(itemMap.getOrDefault(SystemEventAttrConstant.QUANTITY, "1").toString());
+        midIncidentAuditDetail.setMedicalNumber(quantity);
+        midIncidentAuditDetail.setDoseUnit((String) itemMap.getOrDefault(SystemEventAttrConstant.DOSE_UNIT, ""));
+        Integer useDay = Integer.parseInt(itemMap.getOrDefault(SystemEventAttrConstant.USE_DAY, "1").toString());
+        midIncidentAuditDetail.setUseDay(useDay);
+        midIncidentAuditDetail.setProjectType(itemMap.getOrDefault(Constant.PROJECT_TYPE_KEY, "default").toString());
+        midIncidentAuditDetail.setMedicalRuleProjectId((Integer) itemMap.get(SystemEventAttrConstant.MEDICAL_INS_RULE_PROJECT_ID));
+        Object expenseCategory = itemMap.getOrDefault(SystemEventAttrConstant.EXPENSE_CATEGORY, "");
+        if (null != expenseCategory) {
+            midIncidentAuditDetail.setExpenseCategory(expenseCategory.toString());
+        }
+        Object changeClass = itemMap.getOrDefault(SystemEventAttrConstant.HIS_CHANGE_CLASS, "");
+        if (null != changeClass) {
+            midIncidentAuditDetail.setChangeClass(changeClass.toString());
+        }
+        Object spelLog = itemMap.get(Constant.SPEL_LOG);
+        if (null != spelLog) {
+            midIncidentAuditDetail.setErrorDescription(spelLog.toString());
+        }
+        return midIncidentAuditDetail;
+    }
+
     public String getDesc(MedicalInsRuleInfo medicalInsRuleInfo, Map<String, Object> itemMap) {
         String desc = medicalInsRuleInfo.getViolationDesc();
         Object descObject = redisTemplate.opsForHash().get(Constant.PROJECT_VOLIDATION_DESC_KEY + medicalInsRuleInfo.getId(), itemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());