Bläddra i källkod

表结构更新

0027005599 2 år sedan
förälder
incheckning
0f572e0218

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

@@ -45,4 +45,26 @@ public class Constant {
     public static final String OR = "||";
 
     public static final Integer WARING_EVENT_ATTR_ID = -1;
+    //
+    public static final String PROJECT_CODE_KEY = "project_code";
+    public static final String PROJECT_NAME_KEY = "project_name";
+    //医保编码的key
+    public static final String MEDICAL_PROJECT_CODE_KEY = "medical_project_code";
+    //医保名称的key
+    public static final String MEDICAL_PROJECT_NAME_KEY = "medical_project_name";
+    //医院诊断编码的key
+    public static final String DIAGNOSE_CODE_KEY = "diagnose_code";
+    //医院诊断名称的key
+    public static final String DIAGNOSE_NAME_KEY = "diagnose_name";
+    //医保诊断编码的key
+    public static final String MEDICAL_DIAGNOSE_CODE_KEY = "medical_diagnose_code";
+    //医保诊断名称的key
+    public static final String MEDICAL_DIAGNOSE_NAME_KEY = "medical_diagnose_name";
+    //医院和医保字段转换缓存key
+    public static final String HIS_MEDICAL_DICT_KEY = "HIS_MEDICAL_DICT_KEY";
+
+    //医保中心编码和名称的映射关系
+    public static final String MEDICAL_CODE_NAME_KEY = "MEDICAL_CODE_NAME_KEY";
+    public static final String PROJECT_TYPE_KEY = "project_type";
+//    public static final String PROJECT_CODE_KEY = "project_code";
 }

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

@@ -4,11 +4,21 @@ package org.jeecg.modules.medical.entity;
  * 医嘱明细接口入参
  */
 public class AdviceDetailsVO {
-    private String project_code;		//char	项目编码,正常情况必填,特殊情况,如生化全套等没有医保编码,可放空。
-    private String hospital_code;//	true	char	院内项目编码
+    private String project_code;//char	项目编码,正常情况必填,特殊情况,如生化全套等没有医保编码,可放空。
+    private String hospital_code;
     private String project_name;//	true	char	项目名称
+    private String project_type;//项目类型 药品、耗材、诊疗
+    private String medical_project_code;//医保项目编码
+    private String medical_project_name;//医保项目名称
     private String recipe_no;//		char	处方号
     private String invoice_project;//	true	char	发票项目编码
+
+    /**
+     * 费用类别
+     * 床位费、诊查费、检查费、化验费、治疗费、手术费、护理费、卫生材料费、西药费、中药饮片费、
+     * 中成药费、一般诊疗费、挂号费、其他费;如果目前费用类别与此统计口径有差异,按照目前费用类别提取
+     */
+    private String expense_category;
     private String dose_form;//		char	剂型
     private String medical_specification;//		char	规格
     private Double price;//	true	float	单价,必须使用数值型,如”12.5”
@@ -20,4 +30,8 @@ public class AdviceDetailsVO {
     private String single_dose_unit;//		char	单次用药量剂量单位(项目为药品时非空)
     private Integer dose_day;//		float	药量天数(项目为药品时非空),依据医嘱服药要求,所配药品患者可以服用的天数,必须使用数值型,如”5”
     private String take_frequence;//		char	服用频次
+    private String medical_insurance_mark; //医保标志
+    private String inspection_site;//检查部位
+    private String order_catalog;//医嘱大类
+    private String order_type;//医嘱类别
 }

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

@@ -108,6 +108,14 @@ public class AfterwardsAuditDetail implements Serializable {
 	@Excel(name = "项目名称", width = 15)
     @ApiModelProperty(value = "项目名称")
     private java.lang.String proejctName;
+    /**项目编码*/
+    @Excel(name = "医保项目编码", width = 15)
+    @ApiModelProperty(value = "医保项目编码")
+    private java.lang.String medicalProejctCode;
+    /**项目名称*/
+    @Excel(name = "医保项目名称", width = 15)
+    @ApiModelProperty(value = "医保项目名称")
+    private java.lang.String medicalProejctName;
 	/**规则处理结果*/
 	@Excel(name = "规则处理结果", width = 15)
     @ApiModelProperty(value = "规则处理结果")

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

@@ -5,6 +5,7 @@ import java.io.UnsupportedEncodingException;
 import java.util.Date;
 import java.math.BigDecimal;
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableLogic;
@@ -132,4 +133,7 @@ public class MidIncidentAudit implements Serializable {
     @DateTimeFormat(pattern= "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "更新时间")
     private java.util.Date updateTime;
+
+    @TableField(exist = false)
+    private java.lang.String interfName;
 }

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

@@ -33,7 +33,7 @@ public class MidIncidentAuditDetail implements Serializable {
     private static final long serialVersionUID = 1L;
 
 	/**主键ID*/
-	@TableId(type = IdType.ASSIGN_ID)
+	@TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "主键ID")
     private java.lang.Integer id;
 	/**医保规则ID*/
@@ -108,6 +108,15 @@ public class MidIncidentAuditDetail implements Serializable {
 	@Excel(name = "项目名称", width = 15)
     @ApiModelProperty(value = "项目名称")
     private java.lang.String proejctName;
+
+    /**项目编码*/
+    @Excel(name = "医保项目编码", width = 15)
+    @ApiModelProperty(value = "医保项目编码")
+    private java.lang.String medicalProejctCode;
+    /**项目名称*/
+    @Excel(name = "医保项目名称", width = 15)
+    @ApiModelProperty(value = "医保项目名称")
+    private java.lang.String medicalProejctName;
 	/**规则处理结果*/
 	@Excel(name = "规则处理结果", width = 15)
     @ApiModelProperty(value = "规则处理结果")

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

@@ -17,6 +17,7 @@ import org.jeecg.modules.medical.entity.FactorCondRela;
 import org.jeecg.modules.medical.entity.FactorEnchance;
 import org.jeecg.modules.medical.entity.MedicalInsRuleInfo;
 import org.jeecg.modules.medical.entity.MidIncidentAudit;
+import org.jeecg.modules.medical.entity.MidIncidentAuditDetail;
 import org.jeecg.modules.medical.entity.MidIncidentWarningVO;
 import org.jeecg.modules.medical.ruleengine.dict.DictUtil;
 import org.jeecg.modules.medical.service.IEventAttrService;
@@ -75,7 +76,7 @@ public class FactorEnchangeFactory {
 
 
 
-    public boolean runFactorEnchange(Integer medicalInfoRuleInfoId, MedicalInsRuleInfo medicalInsRuleInfo, Map<String, Object> localMap, List<Integer> factorEnchanceIdList, List<FactorEnchance> factorEnchanceList) {
+    public boolean runFactorEnchange(Integer medicalInfoRuleInfoId, MedicalInsRuleInfo medicalInsRuleInfo, MidIncidentAudit midIncidentAudit, Map<String, Object> localMap, List<Integer> factorEnchanceIdList, List<FactorEnchance> factorEnchanceList) {
         Map<Integer, FactorEnchance> factorEnchanceMap = factorEnchanceList.stream().collect(Collectors.toMap(FactorEnchance::getId, v -> v, (v1, v2) -> v1));
         boolean result = true;
         for (Integer factorEnchanceId : factorEnchanceIdList) {
@@ -113,7 +114,7 @@ public class FactorEnchangeFactory {
                     result = setLogicalExpressionResultByFactorEnchance(localMap, ioTypeMap, factorEnchance, medicalInsRuleInfo);
                     if(Constant.WARING_EVENT_ATTR_ID == factorEnchance.getEventAttrId()){
                         if(result){
-
+                            insertMidWarningDetail(localMap, medicalInsRuleInfo, midIncidentAudit);
                         }
                     }else {
                         localMap.put(factorEnchance.getEventAttrId().toString(), result);
@@ -135,23 +136,38 @@ public class FactorEnchangeFactory {
         return result;
     }
 
-    public void insertMidWarning(MedicalInsRuleInfo medicalInsRuleInfo){
+    public void insertMidWarningDetail(Map<String,Object> itemMap, MedicalInsRuleInfo medicalInsRuleInfo,MidIncidentAudit midIncidentAudit){
         MidIncidentWarningVO midIncidentWarningVO = RuleEngine.midIncidentWarningVOThreadLocal.get();
-        MidIncidentAudit midIncidentAudit = new MidIncidentAudit();
-        midIncidentAudit.setMedicalDeptCode(midIncidentWarningVO.getMedical_dept_code());
-        midIncidentAudit.setMedicalDeptName(midIncidentWarningVO.getMedical_dept_name());
+        MidIncidentAuditDetail midIncidentAuditDetail = new MidIncidentAuditDetail();
+        midIncidentAuditDetail.setMedicalDeptCode(midIncidentWarningVO.getMedical_dept_code());
+        midIncidentAuditDetail.setMedicalDeptName(midIncidentWarningVO.getMedical_dept_name());
         Date date = new Date(System.currentTimeMillis());
-        midIncidentAudit.setCreateTime(date);
-        midIncidentAudit.setDoctorName(midIncidentWarningVO.getDoctor_name());
-        midIncidentAudit.setDoctorId(midIncidentWarningVO.getDoctor_code());
-        midIncidentAudit.setPatientId(midIncidentWarningVO.getPatient_id());
-        midIncidentAudit.setPatientName(midIncidentWarningVO.getPatient_name());
-        midIncidentAudit.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
-        midIncidentAudit.setNoticeType("事中预警");
+        midIncidentAuditDetail.setCreateTime(date);
+        midIncidentAuditDetail.setDoctorName(midIncidentWarningVO.getDoctor_name());
+        midIncidentAuditDetail.setDoctorId(midIncidentWarningVO.getDoctor_code());
+        midIncidentAuditDetail.setPatientId(midIncidentWarningVO.getPatient_id());
+        midIncidentAuditDetail.setPatientName(midIncidentWarningVO.getPatient_name());
+        midIncidentAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
+        midIncidentAuditDetail.setNoticeType("事中预警");
+        midIncidentAuditDetail.setMedicalInsRuleInfoCode(medicalInsRuleInfo.getRuleCode());
+        midIncidentAuditDetail.setMedicalInsRuleInfoId(medicalInsRuleInfo.getId());
+        midIncidentAuditDetail.setMedicalInsRuleInfoName(medicalInsRuleInfo.getRuleName());
+        midIncidentAuditDetail.setDescription(medicalInsRuleInfo.getDescription());
+        midIncidentAuditDetail.setProejctCode(itemMap.get(Constant.PROJECT_CODE_KEY).toString());
+        midIncidentAuditDetail.setProejctName(itemMap.get(Constant.PROJECT_NAME_KEY).toString());
+        midIncidentAuditDetail.setMedicalProejctCode(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY).toString());
+        midIncidentAuditDetail.setMedicalProejctName(itemMap.get(Constant.MEDICAL_PROJECT_NAME_KEY).toString());
+        midIncidentAuditDetail.setOutpatientNumber(midIncidentAudit.getOutpatientNumber());
+        midIncidentAuditDetail.setPrescriptionNumber(midIncidentAudit.getPrescriptionNumber());
+        midIncidentAuditDetail.setProjectType(itemMap.getOrDefault(Constant.PROJECT_TYPE_KEY,"default").toString());
+        midIncidentAuditDetail.setViolationLevel(medicalInsRuleInfo.getViolationLevel());
+        midIncidentAuditDetail.setTreatmentType(medicalInsRuleInfo.getTreatmentType());
         midIncidentAuditService.save(midIncidentAudit);
     }
 
 
+
+
     /**
      * 逻辑表达式
      *
@@ -170,18 +186,16 @@ public class FactorEnchangeFactory {
                 result = false;
             }
             for (FactorCondRela factorCondRela : factorCondRelaList) {
-                if (StringUtils.isNotBlank(factorCondRela.getCondStr())) {
-
-                    Boolean resultTemp = (Boolean) spelUtil.runSpelExpression(localMap, factorCondRela.getCondStr());
-                    if (Constant.AND.equals(factorEnchance.getExtAttr1())) {
-                        result = resultTemp && result;
-                    } else {
-                        result = resultTemp || result;
-                    }
-
-
-                }else{
-
+                if (!StringUtils.isNotBlank(factorCondRela.getCondStr())) {
+                    log.error("未正常生成表达式");
+                    String condStr = spelUtil.getSPELString(factorCondRela, enchanceAttrMap);
+                    factorCondRela.setCondStr(condStr);
+                }
+                Boolean resultTemp = (Boolean) spelUtil.runSpelExpression(localMap, factorCondRela.getCondStr());
+                if (Constant.AND.equals(factorEnchance.getExtAttr1())) {
+                    result = resultTemp && result;
+                } else {
+                    result = resultTemp || result;
                 }
             }
             return result;

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

@@ -1,6 +1,7 @@
 package org.jeecg.modules.medical.ruleengine;
 
 import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -14,6 +15,7 @@ import org.jeecg.modules.medical.entity.MidIncidentAudit;
 import org.jeecg.modules.medical.entity.MidIncidentWarningVO;
 import org.jeecg.modules.medical.entity.RuleAttr;
 import org.jeecg.modules.medical.entity.RuleFactorRela;
+import org.jeecg.modules.medical.ruleengine.dict.DictUtil;
 import org.jeecg.modules.medical.ruleengine.plugin.InterfItemListPlugin;
 import org.jeecg.modules.medical.service.IEventAttrService;
 import org.jeecg.modules.medical.service.IFactorAttrRelaService;
@@ -33,8 +35,10 @@ import javax.annotation.PostConstruct;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -67,9 +71,16 @@ public class RuleEngine {
     InterfItemListPlugin interfItemListPlugin;
     @Autowired
     IMidIncidentAuditService midIncidentAuditService;
+    @Autowired
+    DictUtil dictUtil;
 
     public static ThreadLocal<MidIncidentWarningVO> midIncidentWarningVOThreadLocal = new ThreadLocal<>();
 
+    public static Map<String, Set<Integer>> itemCodeAndRuleIdMap = new HashMap<>();
+    public static Map<String,List<RuleAttr>> interfRuleAttrList = new HashMap<>();
+
+
+
     @PostConstruct
     public void initMedicalInsRule() {
         List<MedicalInsRuleInfo> medicalInsRuleInfoList = medicalInsRuleInfoService.lambdaQuery().eq(MedicalInsRuleInfo::getState, Constant.EFF_STATE).list();
@@ -95,13 +106,32 @@ public class RuleEngine {
             }
         }
         try {
+
             MemeryPageUtil.batchDeal(medicalInsRuleInfoIdList, 1000, pageDataList -> {
                 List<MedicalInsRuleProject> medicalInsRuleProjectList = medicalInsRuleProjectService.lambdaQuery().in(MedicalInsRuleProject::getMedicineInsRuleInfoId, pageDataList).list();
                 if (CollectionUtil.isNotEmpty(medicalInsRuleProjectList)) {
                     MedicalInsRuleProject medicalInsRuleProject = null;
                     for (int index = 0; index < medicalInsRuleProjectList.size(); index++) {
                         medicalInsRuleProject = medicalInsRuleProjectList.get(index);
-                        setMIDProjectCodeToRedis(medicalInsRuleProject);
+                        if(StringUtils.isNotBlank(medicalInsRuleProject.getProejctCode())) {
+                            if (itemCodeAndRuleIdMap.containsKey(medicalInsRuleProject.getProejctCode())) {
+                                itemCodeAndRuleIdMap.get(medicalInsRuleProject.getProejctCode()).add(medicalInsRuleProject.getMedicineInsRuleInfoId());
+                            } else {
+                                Set<Integer> ruleIdSet = new HashSet<>();
+                                ruleIdSet.add(medicalInsRuleProject.getMedicineInsRuleInfoId());
+                                itemCodeAndRuleIdMap.put(medicalInsRuleProject.getProejctCode(), ruleIdSet);
+                            }
+                        }
+                        if(StringUtils.isNotBlank(medicalInsRuleProject.getCorrelationProjectCode())) {
+                            if (itemCodeAndRuleIdMap.containsKey(medicalInsRuleProject.getCorrelationProjectCode())) {
+                                itemCodeAndRuleIdMap.get(medicalInsRuleProject.getCorrelationProjectCode()).add(medicalInsRuleProject.getMedicineInsRuleInfoId());
+                            } else {
+                                Set<Integer> ruleIdSet = new HashSet<>();
+                                ruleIdSet.add(medicalInsRuleProject.getMedicineInsRuleInfoId());
+                                itemCodeAndRuleIdMap.put(medicalInsRuleProject.getCorrelationProjectCode(), ruleIdSet);
+                            }
+                        }
+//                        setMIDProjectCodeToRedis(medicalInsRuleProject);
                     }
                 }
             });
@@ -109,6 +139,12 @@ public class RuleEngine {
             log.error(e.getMessage(), e);
         }
 
+        List<RuleAttr> ruleAttrList = ruleAttrService.lambdaQuery().list();
+        interfRuleAttrList = ruleAttrList.stream().collect(Collectors.groupingBy(RuleAttr::getInterfName));
+//        for(Map.Entry<String,List<RuleAttr>> map : interfRuleAttrList.entrySet()){
+//            redisTemplate.opsForValue().append(map.getKey(), JSON.toJSONString(map.getValue()));
+//        }
+
     }
 
     /**
@@ -126,6 +162,7 @@ public class RuleEngine {
 
     public Integer getMIDMedicalId(String itemCode) {
         Object medicineInsRuleId = redisTemplate.opsForHash().get(Constant.MEDICAL_RULE_CACHE_KEY, itemCode);
+//        redisTemplate.opsForSet().add(Constant.MEDICAL_RULE_CACHE_KEY)
         if (null != medicineInsRuleId) {
             return (Integer) medicineInsRuleId;
         }
@@ -135,12 +172,18 @@ public class RuleEngine {
     public Result dealMidInterfaceEngin(String intefName, Map<String, Object> paramMap, MidIncidentWarningVO midIncidentWarningVO) {
         midIncidentWarningVOThreadLocal.set(midIncidentWarningVO);
         try {
-            List<RuleAttr> ruleAttrList = ruleAttrService.lambdaQuery().eq(RuleAttr::getInterfName, intefName).list();
-            List<Integer> medicalInsRuleInfoIdList = getMedicalInsRuleInfoIdByIntef(intefName, paramMap, ruleAttrList);
+            List<RuleAttr> ruleAttrList = interfRuleAttrList.get(intefName);
+            if(null == ruleAttrList){
+                return Result.error("接口:"+intefName+" 未配置 对应的规则属性");
+            }
             List<Map<String, Object>> itemList = interfItemListPlugin.findProIntersection(paramMap, ruleAttrList);
 
+            MidIncidentAudit midIncidentAudit = insertMidWarning(midIncidentWarningVO);
+            midIncidentAudit.setInterfName(intefName);
             for (Map<String, Object> itemMap : itemList) {
-                runEngine(itemMap, medicalInsRuleInfoIdList);
+                dictUtil.transferItemMap(itemMap);
+                Set<Integer> medicalInsRuleInfoIdList = itemCodeAndRuleIdMap.get(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY));
+                runEngine(itemMap, medicalInsRuleInfoIdList,midIncidentAudit);
             }
         }finally {
             midIncidentWarningVOThreadLocal.remove();
@@ -149,8 +192,7 @@ public class RuleEngine {
         return Result.ok();
     }
 
-    public void insertMidWarning(){
-        MidIncidentWarningVO midIncidentWarningVO = RuleEngine.midIncidentWarningVOThreadLocal.get();
+    public MidIncidentAudit insertMidWarning(MidIncidentWarningVO midIncidentWarningVO){
         MidIncidentAudit midIncidentAudit = new MidIncidentAudit();
         midIncidentAudit.setMedicalDeptCode(midIncidentWarningVO.getMedical_dept_code());
         midIncidentAudit.setMedicalDeptName(midIncidentWarningVO.getMedical_dept_name());
@@ -164,12 +206,13 @@ public class RuleEngine {
         midIncidentAudit.setPrescriptionNumber(midIncidentWarningVO.getDoctor_advice_no());
         midIncidentAudit.setNoticeType("事中预警");
         midIncidentAuditService.save(midIncidentAudit);
+        return midIncidentAudit;
     }
 
     public List<Integer> getMedicalInsRuleInfoIdByIntef(String intefName, Map<String, Object> paramMap, List<RuleAttr> ruleAttrList) {
 
         List<Integer> medicalIdList = new ArrayList<>();
-
+        Map<String,List<Integer>> itemCodeAndRuleIdMap = new HashMap<>();
         for (RuleAttr ruleAttr : ruleAttrList) {
             String itemCode = null;
             if (StringUtils.isNotBlank(ruleAttr.getAttrPath())) {
@@ -223,7 +266,7 @@ public class RuleEngine {
      *
      * @param paramMap
      */
-    public void runEngine(Map<String, Object> paramMap, List<Integer> medicalInsRuleInfoIdList) {
+    public void runEngine(Map<String, Object> paramMap, Set<Integer> medicalInsRuleInfoIdList,MidIncidentAudit midIncidentAudit) {
         LambdaQueryWrapper<RuleFactorRela> query = new LambdaQueryWrapper<RuleFactorRela>();
         query.eq(RuleFactorRela::getDelFlag, CommonConstant.DEL_FLAG_0);
         query.in(RuleFactorRela::getMedicalInsRuleInfoId, medicalInsRuleInfoIdList);
@@ -240,7 +283,7 @@ public class RuleEngine {
                 MedicalInsRuleInfo medicalInsRuleInfo = medicalInsRuleInfoService.getById(medicalRuleInsInfoId);
                 List<FactorEnchance> factorEnchanceListTemp = enchanceTypeMap.get(medicalRuleInsInfoId);
 
-                factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, paramMap, factorEnchangeIdList, factorEnchanceListTemp);
+                factorEnchangeFactory.runFactorEnchange(medicalRuleInsInfoId, medicalInsRuleInfo, midIncidentAudit, paramMap, factorEnchangeIdList, factorEnchanceListTemp);
             }
         }
     }

+ 31 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/dict/DictUtil.java

@@ -2,6 +2,7 @@ package org.jeecg.modules.medical.ruleengine.dict;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.medical.Constant;
 import org.jeecg.modules.medical.entity.FactorEnchance;
 import org.jeecg.modules.medical.ruleengine.MedicalEnum;
 import org.jeecg.modules.medical.service.IMedicineService;
@@ -82,4 +83,34 @@ public class DictUtil {
             localMap.put(outEventAttrId.toString(), value);
         }
     }
+
+    /**
+     * 转换医保和
+     * @param itemMap
+     */
+    public void transferItemMap(Map<String,Object> itemMap){
+        Object projectCode = itemMap.get(Constant.PROJECT_CODE_KEY);
+        if(null !=projectCode){
+            Object value = redisTemplate.opsForHash().get(Constant.HIS_MEDICAL_DICT_KEY, projectCode.toString());
+            if(value == null){
+                log.error("字段未配置该项目编码映射的医保记录,项目:{}",itemMap);
+            }else{
+                itemMap.put(Constant.MEDICAL_PROJECT_CODE_KEY, value);
+                Object name = redisTemplate.opsForHash().get(Constant.MEDICAL_CODE_NAME_KEY, projectCode.toString());
+                itemMap.put(Constant.MEDICAL_PROJECT_NAME_KEY, name);
+            }
+        }
+
+        Object diagnoseCode = itemMap.get(Constant.DIAGNOSE_CODE_KEY);
+        if(null !=diagnoseCode){
+            Object value = redisTemplate.opsForHash().get(Constant.HIS_MEDICAL_DICT_KEY, diagnoseCode.toString());
+            if(value == null){
+                log.error("字段未配置该诊断编码映射的医保记录,项目:{}",itemMap);
+            }else{
+                itemMap.put(Constant.MEDICAL_DIAGNOSE_CODE_KEY, value);
+                Object name = redisTemplate.opsForHash().get(Constant.MEDICAL_CODE_NAME_KEY, diagnoseCode.toString());
+                itemMap.put(Constant.MEDICAL_PROJECT_NAME_KEY, name);
+            }
+        }
+    }
 }

+ 9 - 6
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/plugin/InterfItemListPlugin.java

@@ -40,12 +40,11 @@ public class InterfItemListPlugin {
                 }else if(value instanceof Map){
                     Map<String,Object> pathValueMap = (Map) value;
                     Object itemCodeTemp = pathValueMap.get(attrName);
+                    if(null == itemCodeTemp) {
+                        continue;
+                    }
                     if(CollectionUtil.isEmpty(itemList)){
-                        if(null != itemCodeTemp) {
-                            Map<String,Object> itemTempMap = new HashMap<>();
-                            itemTempMap.put(attrName, itemCodeTemp);
-                            itemList.add(itemTempMap);
-                        }
+                        itemList.add(pathValueMap);
                     }else {
                         setItemToList(itemList, itemCodeTemp, attrName);
                     }
@@ -65,13 +64,17 @@ public class InterfItemListPlugin {
             for(Map<String,Object> itemTempMap : itemTempList){
                 temMap = new HashMap<>();
                 temMap.putAll(itemMap);
-                temMap.put(attrName, itemTempMap.get(attrName));
+                temMap.putAll(itemTempMap);
                 resultList.add(temMap);
             }
         }
         return resultList;
     }
 
+    public void setItemToEmptyList(List<Map<String,Object>> itemList, Map<String,Object> paramMap){
+        itemList.add(paramMap);
+    }
+
     public void setItemToList(List<Map<String,Object>> itemList, Object itemName, String attrName){
         for(Map<String,Object> itemMap : itemList){
             itemMap.put(attrName, itemName);