Browse Source

推送逻辑修改,选中诊断推送治疗相关

zhoutg 4 years atrás
parent
commit
5459a30062

+ 6 - 1
src/main/java/com/diagbot/facade/ConceptInfoFacade.java

@@ -5,7 +5,9 @@ import com.diagbot.dto.ReverseDTO;
 import com.diagbot.entity.ConceptInfo;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.ConceptInfoServiceImpl;
+import com.diagbot.util.ListUtil;
 import com.diagbot.vo.ReverseVO;
+import com.google.common.collect.Lists;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -42,6 +44,9 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
      * @return
      */
     public List<ReverseDTO> getReverseFac(ReverseVO reverseVO) {
-        return this.getReverse(reverseVO);
+        if (reverseVO != null && ListUtil.isNotEmpty(reverseVO.getRelationType())) {
+            return this.getReverse(reverseVO);
+        }
+        return Lists.newArrayList();
     }
 }

+ 65 - 11
src/main/java/com/diagbot/process/PushProcess.java

@@ -61,6 +61,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -374,6 +375,8 @@ public class PushProcess {
 
     /**
      * 根据诊断反推(根据性别和年龄过滤,并根据界面已有信息过滤,根据长度截取)
+     *  推送逻辑:第一诊断查询其他推送项(除去治疗相关),选中诊断查询治疗相关的推送项
+     *  治疗相关:药品、手术、护理、一般治疗
      *
      * @param pushDTO
      * @param pushVo
@@ -381,30 +384,77 @@ public class PushProcess {
      * @return
      */
     public void process(PushDTO pushDTO, PushVO pushVo, WordCrfDTO wordCrfDTO) {
-        // 一般治疗——界面下的第一个诊断
-        if (wordCrfDTO.getDiseaseName() != null) {
+        // 一般治疗由界面选中诊断diseaseName获取。core服务处理,这里只返回结构体
+        Item selectDis = wordCrfDTO.getDiseaseName(); // 选中诊断
+        Boolean hasDiseaseNameFlag = hasDiseaseName(selectDis);
+        String selectDisName = hasDiseaseNameFlag ? selectDis.getUniqueName() : "";
+        if (hasDiseaseNameFlag) {
             TreatDTO treatDTO = new TreatDTO();
-            BeanUtil.copyProperties(wordCrfDTO.getDiseaseName(), treatDTO);
+            BeanUtil.copyProperties(selectDis, treatDTO);
             pushDTO.getTreat().add(treatDTO);
         }
-        // 生成反推的入参
+        // 标识选中诊断和第一诊断名称是否相同。这里做了优化处理,如果第一诊断和选中诊断相同,反推只需查询一次
+        Boolean diseaseNameEqFirstFirstFlag = false;
+        if (hasDiseaseNameFlag && ListUtil.isNotEmpty(wordCrfDTO.getDiag())
+                && selectDisName.equals(wordCrfDTO.getDiag().get(0).getUniqueName())) {
+            diseaseNameEqFirstFirstFlag = true;
+        }
+
+        // 第一诊断反推
         List<String> ruleTypeList = Lists.newArrayList(pushVo.getFeatureType().split(",")); // 需要获取的类型
         Map<String, List<PushBaseDTO>> dis = pushDTO.getDis();
-        ReverseVO reverseVO = generateReverseVO(wordCrfDTO, ruleTypeList, dis);
+        ReverseVO reverseVO = generateReverseVO(wordCrfDTO, ruleTypeList, dis, diseaseNameEqFirstFirstFlag);
+
+        // 输出调试信息
         if (StringUtil.isBlank(reverseVO.getLibName())) {
-            pushDTO.getDebug().put("反推诊断", "无"); // 调试信息
+            pushDTO.getDebug().put("第一诊断推送其他信息", "无"); // 调试信息
             return;
         } else {
-            pushDTO.getDebug().put("反推诊断", reverseVO.getLibName()); // 调试信息
+            pushDTO.getDebug().put("第一诊断推送其他信息", reverseVO.getLibName()); // 调试信息
         }
-        // 查询数据
+        if (StringUtil.isBlank(selectDisName)) {
+            pushDTO.getDebug().put("选中诊断推送【一般治疗、药品、手术、护理】", "无"); // 调试信息
+            return;
+        } else {
+            pushDTO.getDebug().put("选中诊断推送【一般治疗、药品、手术、护理】", selectDisName); // 调试信息
+        }
+
         List<ReverseDTO> reverseDTOList = conceptInfoFacade.getReverseFac(reverseVO);
+        // 选中诊断反推
+        if (hasDiseaseNameFlag && !diseaseNameEqFirstFirstFlag) {
+            reverseVO.setLibName(selectDisName);
+            // 关联类型
+            List<Integer> relationType = new ArrayList<>();
+            if (ruleTypeList.contains("8")) {
+                relationType.add(RelationshipEnum.R506.getKey()); // 药品
+            }
+            if (ruleTypeList.contains("9")) {
+                relationType.add(RelationshipEnum.R507.getKey()); // 手术
+            }
+            reverseVO.setRelationType(relationType);
+            List<ReverseDTO> reverseDTOList1 = conceptInfoFacade.getReverseFac(reverseVO);
+            reverseDTOList.addAll(reverseDTOList1);
+        }
+
         // 获取各个类型的界面过滤元素
         Map<String, List<String>> filterMap = getFilterMap(wordCrfDTO);
         // 设置推送信息(过滤已有)
         setPushItem(pushDTO, ruleTypeList, filterMap, reverseDTOList, pushVo.getLength());
     }
 
+    /**
+     * 是否有选中诊断
+     *
+     * @param item
+     * @return
+     */
+    public Boolean hasDiseaseName(Item item) {
+        if (item != null && StringUtil.isNotBlank(item.getUniqueName())) {
+            return true;
+        }
+        return false;
+    }
+
     /**
      * 根据诊断依据推送疾病总入口
      *
@@ -723,7 +773,7 @@ public class PushProcess {
      * @param dis
      * @return
      */
-    public ReverseVO generateReverseVO(WordCrfDTO wordCrfDTO, List<String> ruleTypeList, Map<String, List<PushBaseDTO>> dis) {
+    public ReverseVO generateReverseVO(WordCrfDTO wordCrfDTO, List<String> ruleTypeList, Map<String, List<PushBaseDTO>> dis, boolean flag) {
         ReverseVO reverseVO = new ReverseVO();
         String disName = "";
         // 按以下顺序获取一个诊断: 下的诊断->可能诊断第一个
@@ -760,10 +810,14 @@ public class PushProcess {
                 relationType.add(RelationshipEnum.R508.getKey()); // 鉴别诊断
             }
             if (ruleTypeList.contains("8")) {
-                relationType.add(RelationshipEnum.R506.getKey()); // 药品
+                if (flag) {
+                    relationType.add(RelationshipEnum.R506.getKey()); // 药品
+                }
             }
             if (ruleTypeList.contains("9")) {
-                relationType.add(RelationshipEnum.R507.getKey()); // 手术
+                if (flag) {
+                    relationType.add(RelationshipEnum.R507.getKey()); // 手术
+                }
             }
             if (ruleTypeList.contains("11")) {
                 relationType.add(RelationshipEnum.R509.getKey()); // 量表