Quellcode durchsuchen

事后日志优化
事后监管体系规则跑数据

0027005599 vor 2 Jahren
Ursprung
Commit
8bd3cb042b
16 geänderte Dateien mit 489 neuen und 67 gelöschten Zeilen
  1. 16 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/Constant.java
  2. 55 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/SystemEventAttrConstant.java
  3. 25 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/CommonUtil.java
  4. 1 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/AdviceDetailsVO.java
  5. 3 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/AfterIncidentDetailLog.java
  6. 1 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/MidIncidentAudit.java
  7. 2 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/MidIncidentVisitDetailLog.java
  8. 2 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/MidIncidentVisitLog.java
  9. 114 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/AfterAdvanceJob.java
  10. 5 5
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/AfterStaticisJob.java
  11. 8 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/AfterDealTask.java
  12. 0 3
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/FactorEnchangeFactory.java
  13. 84 39
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/RuleEngine.java
  14. 62 15
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/SPELUtil.java
  15. 62 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/plugin/GroupbyProjectCodeNumPlugin.java
  16. 49 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/plugin/NursingNameSetPlugin.java

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

@@ -189,4 +189,20 @@ public class Constant {
      * SPEL引擎执行日志
      */
     public static final String SPEL_LOG = "SPEL_LOG";
+
+    /**
+     * 规则年龄单位为天的字典key
+     */
+    public static final String DICT_NURSING_NAME_LIST_KEY = "NURSING_NAME_LIST";
+
+    /**
+     * 离院方式临时数据配置
+     */
+    public static final String DICT_DISCHARGE_STATUS_LIST_KEY = "DICT_DISCHARGE_STATUS_LIST";
+
+
+    /**
+     * 事后监管提醒类规则id列表
+     */
+    public static final String DICT_AFTER_ADVANCE_RULE_ID_LIST_KEY = "AFTER_ADVANCE_RULE_ID_LIST";
 }

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

@@ -37,16 +37,27 @@ public class SystemEventAttrConstant {
      * 医保项目编码 eventAttrId: 998
      */
     public static final String MEDICAL_PROJECT_CODE_KEY = "medical_project_code";
+
+    /**
+     * 医保项目名称
+     */
+    public static final String MEDICAL_PROJECT_NAME_KEY = "medical_project_name";
     /**
      * 医保诊断编码 eventAttrId:997
      */
     public static final String MEDICAL_DIAGNOSE_CODE_KEY = "medical_diagnose_code";
 
     /**
-     * 医保项目编码 eventAttrId: 993
+     * 医保项目编码列表 eventAttrId: 993
      */
     public static final String MEDICAL_PROJECT_CODE_LSIT = "medicalProjectCodeList";
 
+    /**
+     * 医保项目名称列表
+     */
+    public static final String MEDICAL_PROJECT_NAME_LIST = "medicalProjectNameList";
+
+
     /**
      * 医院项目编码 eventAttrId: 992
      */
@@ -148,7 +159,7 @@ public class SystemEventAttrConstant {
     public static final String EXPENSE_CATEGORY_GROUP = "expense_category_group";
 
     /**
-     * 费用类别项目
+     * 费用类别项目-HIS接口医疗收费项目类别
      */
     public static final String EXPENSE_CATEGORY = "expense_category";
 
@@ -156,4 +167,46 @@ public class SystemEventAttrConstant {
      * HIS接口患者年龄(天数)key
      */
     public static final String PATIENTAGEDAYS = "patientAgeDays";
+
+    /**
+     * 芗城医院级别key
+     */
+    public static final String XC_HOSP_LEVEL = "xc_hosp_level";
+
+    /**
+     * 项目使用时间key
+     */
+    public static final String PROJECT_USE_TIME = "project_use_time";
+
+
+
+    /**
+     * 同一个时间,同一个项目项目数量
+     */
+    public static final String SAME_TIME_SAME_CODE_NUM = "sameTimeProjectNum";
+
+    /**
+     * 同一个时间,一起开出的项目编码列表
+     */
+    public static final String SAME_TIME_SAME_CODE_List = "sameTimeProjectList";
+
+
+    /**
+     * 所有住院明细的项目编码数量
+     */
+    public static final String SAME_CODE_NUM = "sameCodeNum";
+
+    /**
+     * 仅有I级护理病例统计	临时变量 10080
+     */
+    public static final String NURSINGNAMELIST = "nursingNameList";
+
+
+    /**
+     * 仅有I级护理病例统计	临时变量 10081
+     */
+    public static final String TEMP_DISCHARGE_STATUS = "temp_discharge_status_list";
+
+
 }
+

+ 25 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/CommonUtil.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.medical.common;
 
+import cn.hutool.core.date.DateUtil;
 import org.jeecg.common.util.SpringContextUtils;
 import org.jeecg.modules.medical.Constant;
 import org.jeecg.modules.medical.ruleengine.RuleEngine;
@@ -8,6 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
+import java.util.Date;
+
 public class CommonUtil {
     @Autowired
     static RedisTemplate redisTemplate = (RedisTemplate) SpringContextUtils.getBean("redisTemplate");
@@ -43,4 +46,26 @@ public class CommonUtil {
         }
         return true;
     }
+
+
+    public static String getProjectUseDay(Object projectUseTime){
+        if(null == projectUseTime){
+            return null;
+        }
+        if(projectUseTime instanceof String){
+            String projectUseTimeStr  = (String) projectUseTime;
+            if(projectUseTimeStr.length()>15){
+                return projectUseTimeStr.substring(0, 10);
+            }
+        }else if(projectUseTime instanceof Date){
+            Date projectUseTimeDate = (Date) projectUseTime;
+            return DateUtil.formatDate(projectUseTimeDate);
+        }
+        return projectUseTime.toString();
+    }
+
+    public static void main(String[] args) {
+        String day = "2023-11-09 19:10:11";
+        System.out.println(getProjectUseDay(day));
+    }
 }

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

@@ -4,7 +4,6 @@ import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.Positive;
-import java.util.List;
 
 /**
  * 医嘱明细接口入参
@@ -13,7 +12,7 @@ import java.util.List;
 public class AdviceDetailsVO {
     @NotBlank(message = "医院项目编码不能为空")
     private String project_code;//char	项目编码,正常情况必填,特殊情况,如生化全套等没有医保编码,可放空。
-//    private String hospital_code;//院内项目编码
+    //    private String hospital_code;//院内项目编码
     @NotBlank(message = "医院项目名称不能为空")
     private String project_name;//	true	char	项目名称
     @NotBlank(message = "医院项目类型不能为空 1:药品、2:耗材、3:诊疗、4:手术")

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

@@ -270,6 +270,8 @@ public class AfterIncidentDetailLog implements Serializable {
     private java.lang.Integer doseDay;
     @Excel(name = "项目使用时间", width = 15)
     @ApiModelProperty(value = "项目使用时间")
+    @JsonFormat(timezone = "GMT+8",pattern =  "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern= "yyyy-MM-dd HH:mm:ss")
     @JsonProperty("project_use_time")
     @JSONField(name = "project_use_time")
     private Date projectUseTime;
@@ -285,7 +287,7 @@ public class AfterIncidentDetailLog implements Serializable {
     @JsonProperty("medical_insurance_mark")
     @JSONField(name = "medical_insurance_mark")
     private java.lang.String medicalInsuranceMark;
-    @JsonProperty("total_amount")
+    @JsonProperty("totoal_amount")
     @JSONField(name = "total_amount")
     private java.lang.Double totalAmount;
 	/**检查部位*/

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

@@ -165,6 +165,7 @@ public class MidIncidentAudit implements Serializable {
 	@Excel(name = "审核状态", width = 15)
     @ApiModelProperty(value = "审核状态")
     private java.lang.String checkState;
+
 	/**创建人*/
     @ApiModelProperty(value = "创建人")
     private java.lang.String createBy;

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

@@ -201,6 +201,8 @@ public class MidIncidentVisitDetailLog implements Serializable {
 	@Excel(name = "医嘱类别", width = 15)
     @ApiModelProperty(value = "医嘱类别")
     private java.lang.String orderType;
+
+    private java.lang.String errorDescription;
 	/**创建人*/
     @ApiModelProperty(value = "创建人")
     private java.lang.String createBy;

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

@@ -133,6 +133,8 @@ public class MidIncidentVisitLog implements Serializable {
 	@Excel(name = "诊断编码", width = 15)
     @ApiModelProperty(value = "诊断编码")
     private java.lang.String diagnoses;
+
+    private String description;
 	/**创建时间*/
 	@JsonFormat(timezone = "GMT+8",pattern =  "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern= "yyyy-MM-dd HH:mm:ss")

+ 114 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/AfterAdvanceJob.java

@@ -0,0 +1,114 @@
+package org.jeecg.modules.medical.job;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.vo.DictModel;
+import org.jeecg.modules.medical.Constant;
+import org.jeecg.modules.medical.SystemEventAttrConstant;
+import org.jeecg.modules.medical.entity.AdvanceWarningAudit;
+import org.jeecg.modules.medical.entity.AfterIncidentDetailLog;
+import org.jeecg.modules.medical.entity.AfterIncidentLog;
+import org.jeecg.modules.medical.entity.MedicalInsRuleInfo;
+import org.jeecg.modules.medical.ruleengine.RuleEngine;
+import org.jeecg.modules.medical.ruleengine.dict.DictUtil;
+import org.jeecg.modules.medical.service.IAfterIncidentDetailLogService;
+import org.jeecg.modules.medical.service.IAfterIncidentLogService;
+import org.jeecg.modules.medical.service.IMedicalInsRuleInfoService;
+import org.jeecg.modules.system.service.ISysDictService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 事后提醒类规则
+ * 执行频率:每天跑前一天数据
+ */
+@Slf4j
+public class AfterAdvanceJob implements Job {
+
+
+    @Autowired
+    IMedicalInsRuleInfoService medicalInsRuleInfoService;
+    @Autowired
+    ISysDictService sysDictService;
+    @Autowired
+    RuleEngine ruleEngine;
+
+    @Autowired
+    IAfterIncidentLogService afterIncidentLogService;
+    @Autowired
+    IAfterIncidentDetailLogService afterIncidentDetailLogService;
+    @Autowired
+    DictUtil dictUtil;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        Date yesday = DateUtil.yesterday();
+        Date yesdayStartTime = DateUtil.beginOfDay(yesday);
+        Date yesDayEndTime = DateUtil.endOfDay(yesday);
+        List<DictModel> ruleIdDictList = sysDictService.getDictItems(Constant.DICT_AFTER_ADVANCE_RULE_ID_LIST_KEY);
+        List<Integer> ruleIdList = new ArrayList<>();
+        if (CollectionUtil.isEmpty(ruleIdList)) {
+            log.error("未配置事后提醒类规则id");
+        }
+        for (DictModel dictModel : ruleIdDictList) {
+            ruleIdList.add(Integer.parseInt(dictModel.getValue()));
+        }
+
+        log.info("开始处理事后监管规则:{} 开始时间:{} 结束时间:{}", ruleIdDictList, yesdayStartTime, yesDayEndTime);
+        Long count = afterIncidentLogService.lambdaQuery().le(AfterIncidentLog::getCreateTime, yesDayEndTime).ge(AfterIncidentLog::getCreateTime, yesdayStartTime).count();
+        if (count <= 0) {
+            log.info("开始时间:{} 结束时间:{} 未查询到数据", ruleIdDictList, yesdayStartTime, yesDayEndTime);
+        }
+        int pageSize = 1000;
+        int pageNum = count.intValue() / pageSize;
+        int modNum = count.intValue() % pageSize;
+        if (modNum > 0) {
+            pageNum = pageNum + 1;
+        }
+        for (int i = 1; i <= pageNum; i++) {
+
+            IPage page = new Page(i, pageSize);
+            log.info("开始处理页码:{} 记录", i);
+            List<AfterIncidentLog> afterIncidentLogList = afterIncidentLogService.lambdaQuery().le(AfterIncidentLog::getCreateTime, yesDayEndTime).ge(AfterIncidentLog::getCreateTime, yesdayStartTime).page(page).getRecords();
+
+
+            for (AfterIncidentLog afterIncidentLog : afterIncidentLogList) {
+                List<AfterIncidentDetailLog> afterIncidentDetailLogList = afterIncidentDetailLogService.lambdaQuery().eq(AfterIncidentDetailLog::getAfterIncidentLogId, afterIncidentLog.getId()).list();
+                if(CollectionUtil.isEmpty(afterIncidentDetailLogList)){
+                    log.error("事后监管提醒类型规则数据异常,未查询到事后日志明细数据, after_incident_log_id:{}", afterIncidentLog.getId());
+                    continue;
+                }
+                AfterIncidentDetailLog afterIncidentDetailLog = afterIncidentDetailLogList.get(0);
+                dictUtil.transferAfterIncidentWarning(afterIncidentDetailLog);
+                String oneJsonStr = JSON.toJSONString(afterIncidentDetailLog);
+                log.info("事后处理日志:{}", oneJsonStr);
+                JSONObject itemMap = JSON.parseObject(oneJsonStr);
+                String jsonStr = JSON.toJSONString(afterIncidentDetailLogList);
+                List<Map> itemList = JSON.parseArray(jsonStr, Map.class);
+                List<Map<String, Object>> realItemList = new ArrayList<>();
+                for (Map itemMapTemp : itemList) {
+                    realItemList.add(itemMapTemp);
+                }
+                itemMap.put(SystemEventAttrConstant.ADVICE_DETAILS_LIST_KEY, itemList);
+                ruleEngine.dealAfterAdvance(afterIncidentLog, itemMap, ruleIdList, realItemList);
+            }
+        }
+
+
+    }
+
+
+}

+ 5 - 5
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/AfterStaticisJob.java

@@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.modules.medical.Constant;
 import org.jeecg.modules.medical.entity.MedicalInsRuleInfo;
+import org.jeecg.modules.medical.ruleengine.AfterDealTask;
 import org.jeecg.modules.medical.ruleengine.RuleEngine;
 import org.jeecg.modules.medical.service.IAfterStatisticsService;
 import org.jeecg.modules.medical.service.IMedicalInsRuleInfoService;
@@ -33,6 +34,8 @@ public class AfterStaticisJob implements Job {
     ISysDictService sysDictService;
     @Autowired
     RuleEngine ruleEngine;
+    @Autowired
+    AfterDealTask afterDealTask;
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
@@ -74,7 +77,7 @@ public class AfterStaticisJob implements Job {
             }
             if (CollectionUtil.isNotEmpty(medicalInsRuleInfoList)) {
                 for (MedicalInsRuleInfo medicalInsRuleInfo : medicalInsRuleInfoList) {
-                    statictisRuleByRuleEngine(medicalInsRuleInfo);
+                    afterDealTask.statictisRuleByRuleEngine(medicalInsRuleInfo);
                 }
             } else {
                 log.error("统计指标监测类未查询到对应的有效规则:{}", categoryList);
@@ -87,8 +90,5 @@ public class AfterStaticisJob implements Job {
 
     }
 
-    @Async("commonTaskAsyncPool")
-    public void statictisRuleByRuleEngine(MedicalInsRuleInfo medicalInsRuleInfo) {
-        ruleEngine.runStatictisEngine(new HashMap<>(), medicalInsRuleInfo);
-    }
+
 }

+ 8 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/AfterDealTask.java

@@ -7,16 +7,19 @@ import org.jeecg.modules.medical.Constant;
 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.MedicalInsRuleInfo;
 import org.jeecg.modules.medical.service.IAfterIncidentDetailLogService;
 import org.jeecg.modules.medical.service.IAfterIncidentLogService;
 import org.jeecg.modules.medical.threadpool.AfterRunRuleEngineCallable;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
@@ -80,4 +83,9 @@ public class AfterDealTask {
                 .set(AfterIncidentLog::getDescription, errorMsg)
                 .eq(AfterIncidentLog::getId, afterIncidentLog.getId()).update();
     }
+
+    @Async("commonTaskAsyncPool")
+    public void statictisRuleByRuleEngine(MedicalInsRuleInfo medicalInsRuleInfo) {
+        ruleEngine.runStatictisEngine(new HashMap<>(), medicalInsRuleInfo);
+    }
 }

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

@@ -233,9 +233,6 @@ 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<>();
-            QueryWrapper queryWrapper = new QueryWrapper();
-            queryWrapper.eq("afterwards_audit_id", afterwardsAudit.getId());
-            afterwardsAuditDetailService.remove(queryWrapper);
             Date date = new Date(System.currentTimeMillis());
             for (Map<String, Object> otherMap : itemList) {
                 AfterwardsAuditDetail afterwardsAuditDetail = new AfterwardsAuditDetail();

+ 84 - 39
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/RuleEngine.java

@@ -494,7 +494,7 @@ public class RuleEngine {
 //                MedicalInsRuleInfo medicalInsRuleInfo = medicalInsRuleInfoService.getById(medicalRuleInsInfoId);
                 MedicalInsRuleInfo medicalInsRuleInfo = allMedicalMap.get(medicalRuleInsInfoId);
                 paramMap.put(SystemEventAttrConstant.PRE_ADVANCEWARNINGAUDIT_ID_KEY, advanceWarningAudit.getId());
-                runAdvanceWaringEngine(paramMap, medicalInsRuleInfo, advanceWarningAudit);
+                runAdvanceWaringEngine(paramMap, medicalInsRuleInfo, advanceWarningAudit, null);
             }
 
             sendJson.put("id", advanceWarningAudit.getId());
@@ -505,6 +505,29 @@ public class RuleEngine {
         return Result.ok(sendJson);
     }
 
+
+    public void dealAfterAdvance(AfterIncidentLog afterIncidentLog,Map<String,Object> paramMap, List<Integer> ruleIdList, List<Map<String, Object>> itemList) {
+        if (CollectionUtil.isEmpty(ruleIdList)) {
+            log.error("事后提醒未配置对应的提醒规则");
+            return;
+        }
+        try {
+//            String jsonStr = JSON.toJSONString(afterIncidentLog);
+//            log.info("事后提醒接收报文:{}", jsonStr);
+//            JSONObject paramMap = JSON.parseObject(jsonStr);
+            AfterwardsAudit afterwardsAudit = queryOrAddAfterWarning(afterIncidentLog);
+            for (Integer medicalRuleInsInfoId : ruleIdList) {
+                MedicalInsRuleInfo medicalInsRuleInfo = allMedicalMap.get(medicalRuleInsInfoId);
+                boolean auditFlag = runAdvanceWaringEngine(paramMap, medicalInsRuleInfo, afterwardsAudit, itemList);
+                if (Constant.VALIDATION_HANDER_METHOD_RETURN.equals(medicalInsRuleInfo.getViolationHandingMethod()) && auditFlag) {
+                    log.info("提醒完成 入库完成 事后工单:{}", afterwardsAudit);
+                }
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+    }
+
     /**
      * 事前提醒接口
      *
@@ -527,7 +550,7 @@ public class RuleEngine {
             for (Integer medicalRuleInsInfoId : advanceWaringRuleIdList) {
                 MedicalInsRuleInfo medicalInsRuleInfo = medicalInsRuleInfoService.getById(medicalRuleInsInfoId);
                 paramMap.put(SystemEventAttrConstant.PRE_ADVANCEWARNINGAUDIT_ID_KEY, advanceWarningAudit.getId());
-                runAdvanceWaringEngine(paramMap, medicalInsRuleInfo, advanceWarningAudit);
+                runAdvanceWaringEngine(paramMap, medicalInsRuleInfo, advanceWarningAudit, null);
             }
             JSONObject sendJson = new JSONObject();
             sendJson.put("id", advanceWarningAudit.getId());
@@ -845,14 +868,18 @@ public class RuleEngine {
      * 把当前明细记录的主单下的所有项目编码设置到当前项目记录
      */
     public void setItemCodeListToItemMap(List<Map<String, Object>> itemList, Map<String, Object> itemMap) {
-        List<String> medicalProjectCodeList = new ArrayList<>();
+        Set<String> medicalProjectCodeList = new HashSet<>();
+        Set<String> medicalProjectNameList = new HashSet<>();
         for (Map<String, Object> itemTempMap : itemList) {
             Object medicalProjectCode = itemTempMap.get(SystemEventAttrConstant.MEDICAL_PROJECT_CODE_KEY);
+            Object medicalProjectName = itemTempMap.get(SystemEventAttrConstant.MEDICAL_PROJECT_NAME_KEY);
             if (null != medicalProjectCode) {
                 medicalProjectCodeList.add(medicalProjectCode.toString());
+                medicalProjectNameList.add(medicalProjectName.toString());
             }
         }
-        itemMap.put(SystemEventAttrConstant.MEDICAL_PROJECT_CODE_LSIT, medicalProjectCodeList);
+        itemMap.put(SystemEventAttrConstant.MEDICAL_PROJECT_NAME_LIST, new ArrayList<>(medicalProjectNameList));
+        itemMap.put(SystemEventAttrConstant.MEDICAL_PROJECT_CODE_LSIT, new ArrayList<>(medicalProjectCodeList));
     }
 
 
@@ -1052,6 +1079,13 @@ public class RuleEngine {
         return midIncidentAudit;
     }
 
+    public AfterwardsAudit queryOrAddAfterWarning(AfterIncidentLog afterIncidentLog) {
+        List<AfterwardsAudit> afterwardsAuditList = afterwardsAuditService.lambdaQuery().eq(AfterwardsAudit::getPrescriptionNumber, afterIncidentLog.getDoctorAdviceNo()).list();
+        if (CollectionUtil.isEmpty(afterwardsAuditList)) {
+            return insertAfterWarning(afterIncidentLog);
+        }
+        return afterwardsAuditList.get(0);
+    }
 
     public AfterwardsAudit insertAfterWarning(AfterIncidentLog afterIncidentLog) {
         AfterwardsAudit afterwardsAudit = new AfterwardsAudit();
@@ -1106,25 +1140,33 @@ public class RuleEngine {
      *
      * @param paramMap
      */
-    public void runAdvanceWaringEngine(Map<String, Object> paramMap, MedicalInsRuleInfo medicalInsRuleInfo, Object audit) {
+    public boolean runAdvanceWaringEngine(Map<String, Object> paramMap, MedicalInsRuleInfo medicalInsRuleInfo, Object audit, List<Map<String, Object>> itemList) {
         if (null == medicalInsRuleInfo) {
             log.error("未有对应的规则,接口数据:{}", paramMap);
-            return;
+            return false;
         }
         Integer medicalRuleInsInfoId = medicalInsRuleInfo.getId();
         List<RuleFactorRela> ruleFactorRelaList = ruleIdAndFatorEnchanceIdMap.get(medicalRuleInsInfoId);
         List<FactorEnchance> factorEnchanceList = allEnchanceTypeMap.get(medicalRuleInsInfoId);
-        try {
-            paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_ID, medicalRuleInsInfoId);
-            paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_CODE, medicalInsRuleInfo.getRuleCode());
-            paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_NAME, medicalInsRuleInfo.getRuleName());
-            paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_DESC, medicalInsRuleInfo.getDescription());
-            factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, audit, paramMap, ruleFactorRelaList, factorEnchanceList, null);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
+        if (CollectionUtil.isEmpty(factorEnchanceList)) {
+            log.error("提醒规则id:{} 对应的规则处理逻辑源表factor_enchance 数据丢失", medicalInsRuleInfo.getId());
+            return false;
+        }
+        if (CollectionUtil.isNotEmpty(ruleFactorRelaList)) {
+            try {
+                paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_ID, medicalRuleInsInfoId);
+                paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_CODE, medicalInsRuleInfo.getRuleCode());
+                paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_NAME, medicalInsRuleInfo.getRuleName());
+                paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_DESC, medicalInsRuleInfo.getDescription());
+                return factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, audit, paramMap, ruleFactorRelaList, factorEnchanceList, itemList);
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+            }
+        } else {
+            log.error("提醒规则id:{} 未配置对应的规则逻辑", medicalInsRuleInfo.getId());
         }
 
-
+        return false;
     }
 
     /**
@@ -1132,37 +1174,36 @@ public class RuleEngine {
      *
      * @param paramMap
      */
-    public void runStatictisEngine(Map<String, Object> paramMap, MedicalInsRuleInfo medicalInsRuleInfo) {
+    public boolean runStatictisEngine(Map<String, Object> paramMap, MedicalInsRuleInfo medicalInsRuleInfo) {
         if (null == medicalInsRuleInfo) {
             log.error("未有对应的规则,接口数据:{}", paramMap);
-            return;
+            return false;
         }
-        LambdaQueryWrapper<RuleFactorRela> query = new LambdaQueryWrapper<RuleFactorRela>();
-        query.eq(RuleFactorRela::getDelFlag, CommonConstant.DEL_FLAG_0);
-        query.eq(RuleFactorRela::getMedicalInsRuleInfoId, medicalInsRuleInfo.getId());
-        query.orderByAsc(RuleFactorRela::getSeqNum);
-        List<RuleFactorRela> ruleFactorRelaList = ruleFactorRelaService.list(query);
+        Integer medicalRuleInsInfoId = medicalInsRuleInfo.getId();
+        List<RuleFactorRela> ruleFactorRelaList = ruleIdAndFatorEnchanceIdMap.get(medicalRuleInsInfoId);
 
         if (CollectionUtil.isNotEmpty(ruleFactorRelaList)) {
-            Set<Integer> factorEnchangeIdList = ruleFactorRelaList.stream().map(RuleFactorRela::getFactorEnhanceId).collect(Collectors.toSet());
-            List<FactorEnchance> factorEnchanceList = factorEnchanceService.listByIds(factorEnchangeIdList);
-            Map<Integer, List<FactorEnchance>> enchanceTypeMap = factorEnchanceList.stream().collect(Collectors.groupingBy(FactorEnchance::getFactorCatalog));
-            for (Integer medicalRuleInsInfoId : enchanceTypeMap.keySet()) {
-                try {
-                    List<FactorEnchance> factorEnchanceListTemp = enchanceTypeMap.get(medicalRuleInsInfoId);
-                    paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_ID, medicalRuleInsInfoId);
-                    paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_CODE, medicalInsRuleInfo.getRuleCode());
-                    paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_NAME, medicalInsRuleInfo.getRuleName());
-                    boolean auditFlag = factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, null, paramMap, ruleFactorRelaList, factorEnchanceListTemp, null);
-                    if (Constant.VALIDATION_HANDER_METHOD_RETURN.equals(medicalInsRuleInfo.getViolationHandingMethod()) && auditFlag) {
-                        log.error("事后统计数据:{} 规则名:{} 触发诊断类规则,直接全金额,后续规则无需再跑", paramMap, medicalInsRuleInfo);
-                        return;
-                    }
-                } catch (Exception e) {
-                    log.error(e.getMessage(), e);
+            try {
+                List<FactorEnchance> factorEnchanceListTemp = allEnchanceTypeMap.get(medicalRuleInsInfoId);
+                if (CollectionUtil.isEmpty(factorEnchanceListTemp)) {
+                    log.error("提醒规则id:{} 对应的规则处理逻辑源表factor_enchance 数据丢失", medicalInsRuleInfo.getId());
+                    return false;
                 }
+                paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_ID, medicalRuleInsInfoId);
+                paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_CODE, medicalInsRuleInfo.getRuleCode());
+                paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_NAME, medicalInsRuleInfo.getRuleName());
+                boolean auditFlag = factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, null, paramMap, ruleFactorRelaList, factorEnchanceListTemp, null);
+                return auditFlag;
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
             }
+        } else {
+            log.error("该医保规则ID:{} 未有配置医保规则处理流程-请到规则配置页面进行配置", medicalRuleInsInfoId);
+            paramMap.put(Constant.SPEL_LOG, "该医保规则ID:" + medicalRuleInsInfoId + "未有配置医保规则处理流程-请到规则配置页面进行配置");
         }
+
+        return false;
+
     }
 
 
@@ -1179,6 +1220,10 @@ public class RuleEngine {
         if (allEnchanceTypeMap.containsKey(medicalRuleInsInfoId)) {
             MedicalInsRuleInfo medicalInsRuleInfo = allMedicalMap.get(medicalRuleInsInfoId);
             List<FactorEnchance> factorEnchanceListTemp = allEnchanceTypeMap.get(medicalRuleInsInfoId);
+            if (CollectionUtil.isEmpty(factorEnchanceListTemp)) {
+                log.error("提醒规则id:{} 对应的规则处理逻辑源表factor_enchance 数据丢失", medicalInsRuleInfo.getId());
+                return false;
+            }
             paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_ID, medicalRuleInsInfoId);
             paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_CODE, medicalInsRuleInfo.getRuleCode());
             paramMap.put(SystemEventAttrConstant.MEDICAL_INS_RULE_INFO_NAME, medicalInsRuleInfo.getRuleName());
@@ -1189,7 +1234,7 @@ public class RuleEngine {
             return auditFlag;
         } else {
             log.error("该医保规则ID:{} 未有配置医保规则处理流程-请到规则配置页面进行配置", medicalRuleInsInfoId);
-            paramMap.put(Constant.SPEL_LOG, "该医保规则ID:"+medicalRuleInsInfoId+"未有配置医保规则处理流程-请到规则配置页面进行配置");
+            paramMap.put(Constant.SPEL_LOG, "该医保规则ID:" + medicalRuleInsInfoId + "未有配置医保规则处理流程-请到规则配置页面进行配置");
         }
         return false;
     }

+ 62 - 15
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/SPELUtil.java

@@ -1,10 +1,12 @@
 package org.jeecg.modules.medical.ruleengine;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.jeecg.modules.medical.ColumnTypeEnum;
 import org.jeecg.modules.medical.Constant;
+import org.jeecg.modules.medical.common.CommonUtil;
 import org.jeecg.modules.medical.entity.EventAttr;
 import org.jeecg.modules.medical.entity.FactorCondRela;
 import org.jeecg.modules.medical.service.IEventAttrService;
@@ -18,6 +20,7 @@ import org.springframework.stereotype.Component;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -80,7 +83,7 @@ public class SPELUtil {
                     spelStr = "#isMemberLeftObject(#" + refEventAttr.getEnName() + ",#" + eventAttr.getEnName() + ")";
                 }
             } else {
-                log.error("factorCondRelaId:{} 配置的包含关系使用了不恰当的要素类型", factorCondRela.getId());
+                spelStr = "#isMemberObjectAndObject(#" + eventAttr.getEnName() + ",#" + refEventAttr.getEnName() + ")";
             }
 
         } else if (OperaterEnum.NOTMEMER == operaterEnum) {
@@ -105,7 +108,7 @@ public class SPELUtil {
                     spelStr = "!#isMemberLeftObject(#" + refEventAttr.getEnName() + ",#" + eventAttr.getEnName() + ")";
                 }
             } else {
-                log.error("factorCondRelaId:{} 配置的包含关系使用了不恰当的要素类型", factorCondRela.getId());
+                spelStr = "!#isMemberObjectAndObject(#" + eventAttr.getEnName() + ",#" + refEventAttr.getEnName() + ")";
             }
         } else {
             if (1 == factorCondRela.getRefAttrType()) {
@@ -291,6 +294,22 @@ public class SPELUtil {
         return false;
     }
 
+    /**
+     * 简单类型比对
+     * @param srcObj
+     * @param memberObj
+     * @return
+     */
+    public static Boolean isMemberObjectAndObject(Object srcObj, Object memberObj) {
+
+        if (null != srcObj && null != memberObj) {
+            boolean srcFlag = srcObj.toString().contains(memberObj.toString());
+
+            return srcFlag;
+        }
+        return false;
+    }
+
 
     public static Boolean isMemberLeftObject(Object inValue, List<Object> memberList) {
 
@@ -316,6 +335,12 @@ public class SPELUtil {
         return false;
     }
 
+    /**
+     * 列表包含
+     * @param lList 左边是作为源列表
+     * @param rList 右边是作为被包含的列表
+     * @return
+     */
     public static Boolean isMemberListAndList(List<Object> lList, List<Object> rList) {
         if (CollectionUtil.isEmpty(rList) || CollectionUtil.isEmpty(lList)) {
             return false;
@@ -358,6 +383,21 @@ public class SPELUtil {
         return false;
     }
 
+    public static String getProjectUseDay(Object projectUseTime){
+        if(null == projectUseTime){
+            return null;
+        }
+        if(projectUseTime instanceof String){
+            String projectUseTimeStr  = (String) projectUseTime;
+            if(projectUseTimeStr.length()>15){
+                return projectUseTimeStr.substring(0, 10);
+            }
+        }else if(projectUseTime instanceof Date){
+            Date projectUseTimeDate = (Date) projectUseTime;
+            return DateUtil.formatDate(projectUseTimeDate);
+        }
+        return projectUseTime.toString();
+    }
 
     public static void main(String[] args) {
         SPELUtil spelUtil = new SPELUtil();
@@ -379,19 +419,26 @@ public class SPELUtil {
 ////        String condStr = "#isMemberLeftObject(#medical_diagnose_code,#medical_ins_medicalDiagnoseCodeList) && #change_class<>#medical_ins_changeClass";
 //        String condStr = "#isMemberListAndList(#medical_diagnose_code,#medical_ins_medicalDiagnoseCodeList) ";
 
-        Map<String, Object> itemMap1 = new HashMap<>();
-        itemMap1.put("medical_diagnose_code", Arrays.asList("1", "2", "3"));
-        itemMap1.put("medical_ins_medicalDiagnoseCodeList", Arrays.asList("3", "5", "6"));
-        Set<String> nameSet = new HashSet<>();
-        nameSet.add("medical_diagnose_code");
-        nameSet.add("medical_ins_medicalDiagnoseCodeList");
-        String condStr = "#isMemberListAndList(#medical_diagnose_code,#medical_ins_medicalDiagnoseCodeList)";
-        try {
-            System.out.println(spelUtil.runSpelExpression(itemMap1, condStr, nameSet));
-        } catch (Exception e) {
-            e.printStackTrace();
-            log.error(e.getMessage(), e);
-        }
+//        Map<String, Object> itemMap1 = new HashMap<>();
+//        itemMap1.put("medical_diagnose_code", Arrays.asList("1", "2", "3"));
+//        itemMap1.put("medical_ins_medicalDiagnoseCodeList", Arrays.asList("3", "5", "6"));
+//        Set<String> nameSet = new HashSet<>();
+//        nameSet.add("medical_diagnose_code");
+//        nameSet.add("medical_ins_medicalDiagnoseCodeList");
+//        String condStr = "#isMemberListAndList(#medical_diagnose_code,#medical_ins_medicalDiagnoseCodeList)";
+//        try {
+//            System.out.println(spelUtil.runSpelExpression(itemMap1, condStr, nameSet));
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            log.error(e.getMessage(), e);
+//        }
+
+        String day = "2023-11-09 19:10:11";
+        Date now = new Date();
+        System.out.println(getProjectUseDay(now));
+
+        String s = "234sdfsafasdf423";
+        System.out.println(isMemberObjectAndObject(s, "safasd"));
 //        String test ="A0123123";
 //        System.out.println(isNumeric(test));
 //        String[] rolesArr = new String []{"correlationMedicalDiagnoseCode","111"};

+ 62 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/plugin/GroupbyProjectCodeNumPlugin.java

@@ -0,0 +1,62 @@
+package org.jeecg.modules.medical.ruleengine.plugin;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.medical.SystemEventAttrConstant;
+import org.jeecg.modules.medical.common.CommonUtil;
+import org.jeecg.modules.medical.entity.FactorAttrRela;
+import org.jeecg.modules.medical.entity.FactorEnchance;
+import org.jeecg.modules.medical.ruleengine.PluginInterface;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 同一项目使用时间对同一种项目编码统计数量,并设置
+ * 同一时间,收集对应的项目编码,并设置列表
+ */
+@Slf4j
+@Component("groupbyProjectCodeNumPlugin")
+public class GroupbyProjectCodeNumPlugin implements PluginInterface {
+    @Override
+    public void plugin(Map<String, Object> localMap, Map<Integer, List<FactorAttrRela>> ioTypeMap, FactorEnchance factorEnchance, Integer medicalInsRuleInfoId) {
+        try {
+            Object adviceList = localMap.get(SystemEventAttrConstant.ADVICE_DETAILS_LIST_KEY);
+            if (null != adviceList) {
+                List<String> projectCodeList = new ArrayList<>();
+                List<Map<String, Object>> adviceMapList = (List<Map<String, Object>>) adviceList;
+                int projectNum = 0;
+                int sumProjectNum = 0;
+                Object srcProjectUseTime = localMap.get(SystemEventAttrConstant.PROJECT_USE_TIME);
+                Object srcProjectUseDay = CommonUtil.getProjectUseDay(srcProjectUseTime);
+                Object srcProjectCode = localMap.getOrDefault(SystemEventAttrConstant.MEDICAL_PROJECT_CODE_KEY, "").toString();
+                if (null == srcProjectCode || null == srcProjectUseTime) {
+                    localMap.put(SystemEventAttrConstant.SAME_TIME_SAME_CODE_NUM, 0);
+                    return;
+                }
+                for (Map<String, Object> adviceMap : adviceMapList) {
+                    String projectCode = adviceMap.getOrDefault(SystemEventAttrConstant.MEDICAL_PROJECT_CODE_KEY, "").toString();
+                    Object projectUseTime = adviceMap.get(SystemEventAttrConstant.PROJECT_USE_TIME);
+                    String projectUseDay = CommonUtil.getProjectUseDay(projectUseTime);
+                    Integer quaity = (Integer) adviceMap.getOrDefault(SystemEventAttrConstant.QUANTITY, 1);
+                    if (StringUtils.isNotBlank(projectCode) && null != projectUseTime && projectCode.equals(srcProjectCode) && srcProjectUseDay.equals(projectUseDay)) {
+                        projectNum = projectNum + quaity;
+                        projectCodeList.add(projectCode);
+                    }
+                    if (StringUtils.isNotBlank(projectCode) && projectCode.equals(srcProjectCode)) {
+                        sumProjectNum = sumProjectNum + quaity;
+
+                    }
+
+                }
+                localMap.put(SystemEventAttrConstant.SAME_TIME_SAME_CODE_NUM, projectNum);
+                localMap.put(SystemEventAttrConstant.SAME_TIME_SAME_CODE_List, projectCodeList);
+                localMap.put(SystemEventAttrConstant.SAME_CODE_NUM, sumProjectNum);
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+    }
+}

+ 49 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/plugin/NursingNameSetPlugin.java

@@ -0,0 +1,49 @@
+package org.jeecg.modules.medical.ruleengine.plugin;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.common.system.vo.DictModel;
+import org.jeecg.modules.medical.Constant;
+import org.jeecg.modules.medical.SystemEventAttrConstant;
+import org.jeecg.modules.medical.common.CommonUtil;
+import org.jeecg.modules.medical.entity.FactorAttrRela;
+import org.jeecg.modules.medical.entity.FactorEnchance;
+import org.jeecg.modules.medical.ruleengine.PluginInterface;
+import org.jeecg.modules.system.service.ISysDictService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 仅有I级护理病例统计名称列表 读取字段配置
+ *
+ */
+@Slf4j
+@Component("nursingNameSetPlugin")
+public class NursingNameSetPlugin implements PluginInterface {
+    @Autowired
+    ISysDictService sysDictService;
+    @Override
+    public void plugin(Map<String, Object> localMap, Map<Integer, List<FactorAttrRela>> ioTypeMap, FactorEnchance factorEnchance, Integer medicalInsRuleInfoId) {
+        try {
+
+            List<DictModel> dictModelList = sysDictService.getDictItems(Constant.DICT_NURSING_NAME_LIST_KEY);
+            List<DictModel> dischargeStatusDictModelList = sysDictService.getDictItems(Constant.DICT_DISCHARGE_STATUS_LIST_KEY);
+            List<String> nursingNameList = new ArrayList<>();
+            List<String> dischargeStatusList = new ArrayList<>();
+            for(DictModel dictModel : dictModelList){
+                nursingNameList.add(dictModel.getText());
+            }
+            for(DictModel dictModel : dischargeStatusDictModelList){
+                dischargeStatusList.add(dictModel.getValue());
+            }
+            localMap.put(SystemEventAttrConstant.NURSINGNAMELIST, nursingNameList);
+            localMap.put(SystemEventAttrConstant.TEMP_DISCHARGE_STATUS, dischargeStatusList);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+    }
+}