Kaynağa Gözat

Merge branch 'dev/nurseRule20220329' into debug

zhoutg 3 yıl önce
ebeveyn
işleme
8674fd4893
34 değiştirilmiş dosya ile 613 ekleme ve 965 silme
  1. 24 17
      src/main/java/com/diagbot/aggregate/AssembleAggregate.java
  2. 33 0
      src/main/java/com/diagbot/aggregate/AssemblePushAggregate.java
  3. 13 19
      src/main/java/com/diagbot/client/CdssCoreClient.java
  4. 19 18
      src/main/java/com/diagbot/client/hystrix/CdssCoreHystrix.java
  5. 3 0
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  6. 3 0
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  7. 4 0
      src/main/java/com/diagbot/dto/BillMsg.java
  8. 2 0
      src/main/java/com/diagbot/dto/IndicationDTO.java
  9. 22 0
      src/main/java/com/diagbot/dto/KlRuleByIdGroupDTO.java
  10. 1 1
      src/main/java/com/diagbot/dto/KlRuleByIdParDTO.java
  11. 19 0
      src/main/java/com/diagbot/dto/KlRuleStaticSubDTO.java
  12. 4 0
      src/main/java/com/diagbot/dto/PushDTO.java
  13. 12 0
      src/main/java/com/diagbot/dto/PushExtDTO.java
  14. 28 0
      src/main/java/com/diagbot/dto/RuleBaseDTO.java
  15. 25 0
      src/main/java/com/diagbot/dto/RuleConditionDTO.java
  16. 21 0
      src/main/java/com/diagbot/dto/RuleDTO.java
  17. 19 0
      src/main/java/com/diagbot/dto/RuleQueryDTO.java
  18. 8 0
      src/main/java/com/diagbot/dto/StaticKnowledgeIndexDTO.java
  19. 8 842
      src/main/java/com/diagbot/facade/ConceptInfoFacade.java
  20. 3 1
      src/main/java/com/diagbot/facade/KlConceptStaticFacade.java
  21. 17 0
      src/main/java/com/diagbot/facade/KlRuleFacade.java
  22. 62 35
      src/main/java/com/diagbot/facade/PlanDetailFacade.java
  23. 26 27
      src/main/java/com/diagbot/facade/PlanFacade.java
  24. 76 2
      src/main/java/com/diagbot/facade/PushFacade.java
  25. 1 1
      src/main/java/com/diagbot/vo/HospitalPlanDetailSaveVO.java
  26. 23 0
      src/main/java/com/diagbot/vo/KlRuleInfoSaveGroupVO.java
  27. 1 1
      src/main/java/com/diagbot/vo/KlRuleInfoSaveVO.java
  28. 31 0
      src/main/java/com/diagbot/vo/RuleQueryKeyVO.java
  29. 29 0
      src/main/java/com/diagbot/vo/RuleQueryVO.java
  30. 23 0
      src/main/java/com/diagbot/vo/RuleStaticSubVO.java
  31. 5 0
      src/main/java/com/diagbot/vo/StaticKnowledgeIndexVO.java
  32. 1 1
      src/main/java/com/diagbot/web/KlDictionaryConller.java
  33. 30 0
      src/main/java/com/diagbot/web/KlRuleController.java
  34. 17 0
      src/main/java/com/diagbot/web/PushController.java

+ 24 - 17
src/main/java/com/diagbot/aggregate/AssembleAggregate.java

@@ -460,34 +460,41 @@ public class AssembleAggregate {
                     Map<String, Map<String, List<String>>> subMap = configMap.get(name);
                     if (subMap.containsKey(hisDetailName)) {
                         if (type.equals(ConceptTypeEnum.Drug.getKey())) {
-                            for (Map.Entry<String, List<String>> thirdEntry : subMap.get(hisDetailName).entrySet()) {
-                                if (ListUtil.isNotEmpty(thirdEntry.getValue())) {
-                                    for (String form : thirdEntry.getValue()) {
+                            if (MapUtils.isNotEmpty(subMap.get(hisDetailName))) {
+                                for (Map.Entry<String, List<String>> thirdEntry : subMap.get(hisDetailName).entrySet()) {
+                                    if (ListUtil.isNotEmpty(thirdEntry.getValue())) {
+                                        for (String form : thirdEntry.getValue()) {
+                                            T o = (T) item.getClass().newInstance();
+                                            BeanUtil.copyProperties(item, o);
+                                            Method setUniqueName = o.getClass().getMethod("setUniqueName", String.class);
+                                            setUniqueName.invoke(o, thirdEntry.getKey());
+                                            Method setForm = o.getClass().getMethod("setForm", String.class);
+                                            setForm.invoke(o, form);
+                                            retList.add(o);
+                                        }
+                                    } else {
                                         T o = (T) item.getClass().newInstance();
                                         BeanUtil.copyProperties(item, o);
                                         Method setUniqueName = o.getClass().getMethod("setUniqueName", String.class);
                                         setUniqueName.invoke(o, thirdEntry.getKey());
-                                        Method setForm = o.getClass().getMethod("setForm", String.class);
-                                        setForm.invoke(o, form);
                                         retList.add(o);
                                     }
-                                } else {
+                                }
+                            } else {
+                                retList.add(item);
+                            }
+                        } else {
+                            List<String> standNames = new ArrayList<>(subMap.get(hisDetailName).keySet());
+                            if (ListUtil.isNotEmpty(standNames)) {
+                                for (String stdName : standNames) {
                                     T o = (T) item.getClass().newInstance();
                                     BeanUtil.copyProperties(item, o);
                                     Method setUniqueName = o.getClass().getMethod("setUniqueName", String.class);
-                                    setUniqueName.invoke(o, thirdEntry.getKey());
+                                    setUniqueName.invoke(o, stdName);
                                     retList.add(o);
                                 }
-                            }
-
-                        } else {
-                            List<String> standNames = new ArrayList<>(subMap.get(hisDetailName).keySet());
-                            for (String stdName : standNames) {
-                                T o = (T) item.getClass().newInstance();
-                                BeanUtil.copyProperties(item, o);
-                                Method setUniqueName = o.getClass().getMethod("setUniqueName", String.class);
-                                setUniqueName.invoke(o, stdName);
-                                retList.add(o);
+                            } else {
+                                retList.add(item);
                             }
                         }
                     } else {

+ 33 - 0
src/main/java/com/diagbot/aggregate/AssemblePushAggregate.java

@@ -40,6 +40,7 @@ public class AssemblePushAggregate {
             @DataConsumer("retLis") List<PushBaseDTO> retLis,
             @DataConsumer("retPacs") List<PushBaseDTO> retPacs,
             @DataConsumer("retDiagMap") Map<String, List<PushBaseDTO>> retDiagMap,
+            @DataConsumer("retClickPosDis") List<PushBaseDTO> retClickPosDis,
             @DataConsumer("retOperation") List<PushBaseDTO> retOperation,
             @DataConsumer("retDrug") List<PushBaseDTO> retDrug,
             @DataConsumer("retScale") List<PushScaleDTO> retScale,
@@ -56,6 +57,10 @@ public class AssemblePushAggregate {
         if (MapUtils.isNotEmpty(retDiagMap)) {
             data.setDis(retDiagMap);
         }
+        //可点击可能诊断
+        if (ListUtil.isNotEmpty(retClickPosDis)) {
+            data.setClickPosDis(retClickPosDis);
+        }
         //手术
         if (ListUtil.isNotEmpty(retOperation)) {
             data.setOperations(retOperation);
@@ -167,6 +172,34 @@ public class AssemblePushAggregate {
         return retMap;
     }
 
+    @DataProvider("retClickPosDis")
+    public List<PushBaseDTO> retClickPosDis(@InvokeParameter("pushDTO") PushDTO data,
+                                            @InvokeParameter("hospitalId") Long hospitalId) {
+        //可点击可能诊断
+        List<PushBaseDTO> retClickPosDis = new ArrayList<>();
+        if (ListUtil.isNotEmpty(data.getClickPosDis())) {
+            retClickPosDis = data.getClickPosDis();
+            List<String> uniqueNameList = retClickPosDis.stream()
+                    .map(i -> i.getName())
+                    .collect(Collectors.toList());
+            Map<String, Map<String, Map<String, List<String>>>> uniqueNameMap
+                    = mappingConfigFacade.groupByUniqueNameWithName(uniqueNameList, ConceptTypeEnum.Disease.getKey(), hospitalId, StatusEnum.Enable.getKey());
+
+            if (uniqueNameMap != null && uniqueNameMap.size() > 0) {
+                retClickPosDis.forEach(item -> {
+                    if (uniqueNameMap.get(item.getName()) != null) {
+                        item.setHisNameList(uniqueNameMap.get(item.getName())
+                                .values().stream()
+                                .map(i -> i.keySet())
+                                .flatMap(Collection::stream)
+                                .collect(Collectors.toList()));
+                    }
+                });
+            }
+        }
+        return retClickPosDis;
+    }
+
     @DataProvider("retOperation")
     public List<PushBaseDTO> retOperation(@InvokeParameter("pushDTO") PushDTO data,
                                           @InvokeParameter("hospitalId") Long hospitalId) {

+ 13 - 19
src/main/java/com/diagbot/client/CdssCoreClient.java

@@ -2,24 +2,7 @@ package com.diagbot.client;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.client.hystrix.CdssCoreHystrix;
-import com.diagbot.dto.ConceptDetailDTO;
-import com.diagbot.dto.ConceptScaleDTO;
-import com.diagbot.dto.DictionaryInfoDTO;
-import com.diagbot.dto.GetAllForRelationDTO;
-import com.diagbot.dto.IndexBatchDTO;
-import com.diagbot.dto.IndicationDTO;
-import com.diagbot.dto.KlConceptStaticDTO;
-import com.diagbot.dto.KlRuleByIdParDTO;
-import com.diagbot.dto.KlRuleInfoDTO;
-import com.diagbot.dto.KllisDetailDTO;
-import com.diagbot.dto.PushDTO;
-import com.diagbot.dto.PushPlanDTO;
-import com.diagbot.dto.RespDTO;
-import com.diagbot.dto.RetrievalDTO;
-import com.diagbot.dto.StaticKnowledgeDTO;
-import com.diagbot.dto.StaticKnowledgeIndexDTO;
-import com.diagbot.dto.StaticKnowledgeIndexPageDTO;
-import com.diagbot.dto.TermConceptDTO;
+import com.diagbot.dto.*;
 import com.diagbot.entity.KlRuleMenuWrapper;
 import com.diagbot.vo.*;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -44,6 +27,9 @@ public interface CdssCoreClient {
     @PostMapping("/core/push")
     RespDTO<PushDTO> push(@RequestBody @Valid PushVO pushVo);
 
+    @PostMapping("/core/pushByDisease")
+    RespDTO<PushExtDTO> pushByDisease(@RequestBody @Valid PushVO pushVo);
+
     /**
      * 推送持续检验检查计划
      */
@@ -267,4 +253,12 @@ public interface CdssCoreClient {
 
     @PostMapping("/term/termMatching")
     public RespDTO<List<TermConceptDTO>> getTermMatching(@Valid @RequestBody TermMatchingVO termMatchingVO);
-}
+
+    //查询所有有效的规则
+    @PostMapping("/klRule/getRulePage")
+    RespDTO<Page<RuleQueryDTO>> getRulePage(@RequestBody RuleQueryVO ruleQueryVO);
+
+    //根据录入内容查询有效规则的明细
+    @PostMapping("/klRule/getRuleDetail")
+    RespDTO<RuleDTO> getRuleDetail(@RequestBody @Valid RuleQueryKeyVO ruleQueryKeyVO);
+}

+ 19 - 18
src/main/java/com/diagbot/client/hystrix/CdssCoreHystrix.java

@@ -2,24 +2,7 @@ package com.diagbot.client.hystrix;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.client.CdssCoreClient;
-import com.diagbot.dto.ConceptDetailDTO;
-import com.diagbot.dto.ConceptScaleDTO;
-import com.diagbot.dto.DictionaryInfoDTO;
-import com.diagbot.dto.GetAllForRelationDTO;
-import com.diagbot.dto.IndexBatchDTO;
-import com.diagbot.dto.IndicationDTO;
-import com.diagbot.dto.KlConceptStaticDTO;
-import com.diagbot.dto.KlRuleByIdParDTO;
-import com.diagbot.dto.KlRuleInfoDTO;
-import com.diagbot.dto.KllisDetailDTO;
-import com.diagbot.dto.PushDTO;
-import com.diagbot.dto.PushPlanDTO;
-import com.diagbot.dto.RespDTO;
-import com.diagbot.dto.RetrievalDTO;
-import com.diagbot.dto.StaticKnowledgeDTO;
-import com.diagbot.dto.StaticKnowledgeIndexDTO;
-import com.diagbot.dto.StaticKnowledgeIndexPageDTO;
-import com.diagbot.dto.TermConceptDTO;
+import com.diagbot.dto.*;
 import com.diagbot.entity.KlRuleMenuWrapper;
 import com.diagbot.vo.*;
 import lombok.extern.slf4j.Slf4j;
@@ -51,6 +34,12 @@ public class CdssCoreHystrix implements CdssCoreClient {
         return null;
     }
 
+    @Override
+    public RespDTO<PushExtDTO> pushByDisease(@RequestBody @Valid PushVO pushVo) {
+        log.error("【hystrix】调用{}异常", "pushByDisease");
+        return null;
+    }
+
     /**
      * 推送持续检验检查计划
      */
@@ -354,4 +343,16 @@ public class CdssCoreHystrix implements CdssCoreClient {
         log.error("【hystrix】调用{}异常", "getTermMatching");
         return null;
     }
+
+    @Override
+    public RespDTO<Page<RuleQueryDTO>> getRulePage(@RequestBody RuleQueryVO ruleQueryVO) {
+        log.error("【hystrix】调用{}异常", "getRulePage");
+        return null;
+    }
+
+    @Override
+    public RespDTO<RuleDTO> getRuleDetail(@RequestBody @Valid RuleQueryKeyVO ruleQueryKeyVO) {
+        log.error("【hystrix】调用{}异常", "getRuleDetail");
+        return null;
+    }
 }

+ 3 - 0
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -78,6 +78,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/sys/tokenPermission/delPermission").permitAll()
                 .antMatchers("/sys/tokenPermission/getPermission").permitAll()
                 .antMatchers("/sys/push/push").permitAll()
+                .antMatchers("/sys/push/pushByDisease").permitAll()
                 .antMatchers("/sys/push/pushApi").permitAll()
                 .antMatchers("/sys/push/indicationPush").permitAll()
                 .antMatchers("/sys/push/indicationExtPush").permitAll()
@@ -137,6 +138,8 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/term/termMatching").permitAll()
                 .antMatchers("/sys/mr/testIndication").permitAll()
                 .antMatchers("/test/logTest").permitAll()
+                .antMatchers("/klRule/getRulePage").permitAll()
+                .antMatchers("/klRule/getRuleDetail").permitAll()
                 .antMatchers("/**").authenticated();
         //                .antMatchers("/**").permitAll();
     }

+ 3 - 0
src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -121,6 +121,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/sys/tokenPermission/delPermission", request)
                 || matchers("/sys/tokenPermission/getPermission", request)
                 || matchers("/sys/push/push", request)
+                || matchers("/sys/push/pushByDisease", request)
                 || matchers("/sys/push/pushApi", request)
                 || matchers("/sys/push/indicationPush", request)
                 || matchers("/sys/push/indicationExtPush", request)
@@ -179,6 +180,8 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/term/termMatching", request)
                 || matchers("/sys/mr/testIndication", request)
                 || matchers("/test/logTest", request)
+                || matchers("/klRule/getRulePage", request)
+                || matchers("/klRule/getRuleDetail", request)
                 || matchers("/", request)) {
             return true;
         }

+ 4 - 0
src/main/java/com/diagbot/dto/BillMsg.java

@@ -2,6 +2,8 @@ package com.diagbot.dto;
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @description: 开单合理性提示语
  * @author: zhoutg
@@ -22,4 +24,6 @@ public class BillMsg {
     private String content;
     // 类型
     private String type;
+    // 相关的静态知识
+    private List<String> staticList;
 }

+ 2 - 0
src/main/java/com/diagbot/dto/IndicationDTO.java

@@ -22,6 +22,8 @@ public class IndicationDTO {
     private List<BillMsg> highRiskList = new ArrayList<>();
     // 其他提醒
     private List<BillMsg> otherList = new ArrayList<>();
+    // 护理提醒
+    private List<BillMsg> nurseList = new ArrayList<>();
     // 记录调试信息
     private Map<String, Object> debug = new LinkedHashMap<>();
 }

+ 22 - 0
src/main/java/com/diagbot/dto/KlRuleByIdGroupDTO.java

@@ -0,0 +1,22 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: wangfeng
+ * @time: 2022-03-30 11:30
+ */
+@Setter
+@Getter
+public class KlRuleByIdGroupDTO {
+
+    private Integer groupType;
+
+    private List<KlRuleStaticSubDTO> KlRuleStaticSub;
+
+    private List<KlRuleByIdSubDTO> klRuleByIdSub;
+}

+ 1 - 1
src/main/java/com/diagbot/dto/KlRuleByIdParDTO.java

@@ -23,5 +23,5 @@ public class KlRuleByIdParDTO {
     private Integer parStatus;//启用状态(0:禁用,1:启用)
     private String parLenName;
     private String parLenCode;
-    private List<KlRuleByIdSubDTO>  klRuleByIdSub;
+    private List<KlRuleByIdGroupDTO> klRuleByIdGroup;
 }

+ 19 - 0
src/main/java/com/diagbot/dto/KlRuleStaticSubDTO.java

@@ -0,0 +1,19 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangfeng
+ * @time: 2022-03-30 11:30
+ */
+@Setter
+@Getter
+public class KlRuleStaticSubDTO {
+    private Long ruleId;
+    private Integer groupType;
+    private Long conceptId;
+    private String name;
+    private Integer ordeNo;
+}

+ 4 - 0
src/main/java/com/diagbot/dto/PushDTO.java

@@ -35,6 +35,10 @@ public class PushDTO {
     private List<PushBaseDTO> nurse = Lists.newArrayList();
     //诊断
     private Map<String, List<PushBaseDTO>> dis;
+    // 可点击可能诊断
+    private List<PushBaseDTO> clickPosDis = Lists.newArrayList();
+    // 可点击下的诊断
+    private List<PushBaseDTO> clickAffDis = Lists.newArrayList();
     //一般治疗
     private List<TreatDTO> treat = new ArrayList<>();
     //推送量表

+ 12 - 0
src/main/java/com/diagbot/dto/PushExtDTO.java

@@ -0,0 +1,12 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+/**
+ * @description: 推送扩展类
+ * @author: zhoutg
+ * @date: 2022/3/21 9:33
+ */
+@Data
+public class PushExtDTO extends PushDTO {
+}

+ 28 - 0
src/main/java/com/diagbot/dto/RuleBaseDTO.java

@@ -0,0 +1,28 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2021/2/3 16:25
+ */
+@Getter
+@Setter
+@ToString(includeFieldNames = false)
+public class RuleBaseDTO {
+    private String baseLibName = "";
+    private Integer baseLibType = 0;
+    private Integer baseType = 0;
+    private String baseMinOperator = "";
+    private String baseMinValue = "";
+    private String baseMinUnit = "";
+    private String baseMaxOperator = "";
+    private String baseMaxValue = "";
+    private String baseMaxUnit = "";
+    private String baseEqOperator = "";
+    private String baseEqValue = "";
+    private String baseEqUnit = "";
+}

+ 25 - 0
src/main/java/com/diagbot/dto/RuleConditionDTO.java

@@ -0,0 +1,25 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2021/2/3 16:32
+ */
+@Getter
+@Setter
+@ToString(exclude = { "ruleGroup", "msg", "description", "names" }, includeFieldNames = false)
+public class RuleConditionDTO {
+    private Integer hasSubCond;
+    private String ruleGroup;
+    private String msg;
+    private String description;
+    private List<String> names = new ArrayList<>(); //静态信息名称列表
+    private List<RuleBaseDTO> ruleBaseDTOList = new ArrayList<>();
+}

+ 21 - 0
src/main/java/com/diagbot/dto/RuleDTO.java

@@ -0,0 +1,21 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2021/2/3 16:34
+ */
+@Getter
+@Setter
+public class RuleDTO {
+    private String libName;
+    private Integer libType;
+    private Integer ruleType;
+    private List<RuleConditionDTO> ruleConditionDTOList = new ArrayList<>();
+}

+ 19 - 0
src/main/java/com/diagbot/dto/RuleQueryDTO.java

@@ -0,0 +1,19 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2021/12/30 13:21
+ */
+@Getter
+@Setter
+public class RuleQueryDTO {
+    private String libName;
+    private Integer libType;
+    private String libTypeName;
+    private Integer ruleType;
+    private String ruleTypeName;
+}

+ 8 - 0
src/main/java/com/diagbot/dto/StaticKnowledgeIndexDTO.java

@@ -23,6 +23,14 @@ public class StaticKnowledgeIndexDTO {
      * 编码
      */
     private String code;
+    /**
+     * 国临版编码
+     */
+    private String guocode;
+    /**
+     * 国临版名称
+     */
+    private String guoname;
     /**
      * 词性
      */

+ 8 - 842
src/main/java/com/diagbot/facade/ConceptInfoFacade.java

@@ -1,53 +1,26 @@
 package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.client.CdssCoreClient;
-import com.diagbot.dto.ConceptDetailDTO;
-import com.diagbot.dto.ConceptInfoDTO;
-import com.diagbot.dto.DictionaryInfoDTO;
 import com.diagbot.dto.GetAllForRelationDTO;
 import com.diagbot.dto.RespDTO;
-import com.diagbot.dto.StaticKnowledgeDTO;
-import com.diagbot.dto.StaticKnowledgeDetailDTO;
-import com.diagbot.dto.StaticKnowledgeHISDTO;
-import com.diagbot.dto.StaticKnowledgeIndexDTO;
 import com.diagbot.entity.ConceptDetail;
 import com.diagbot.entity.ConceptInfo;
 import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.StatusEnum;
-import com.diagbot.exception.CommonErrorCode;
-import com.diagbot.exception.CommonException;
-import com.diagbot.service.ConceptDetailService;
 import com.diagbot.service.impl.ConceptInfoServiceImpl;
-import com.diagbot.util.BeanUtil;
-import com.diagbot.util.DateUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
-import com.diagbot.util.SysUserUtils;
-import com.diagbot.vo.ChangeStatusVO;
-import com.diagbot.vo.ConceptDetailVO;
-import com.diagbot.vo.ConceptInfoPageVO;
-import com.diagbot.vo.ConceptInfoVO;
 import com.diagbot.vo.HasStaticKnowledgeVO;
-import com.diagbot.vo.IdVO;
 import com.diagbot.vo.SearchConceptVO;
 import com.diagbot.vo.StaticKnowledgeHISVO;
-import com.diagbot.vo.StaticKnowledgeIndexVO;
-import com.diagbot.vo.StaticKnowledgeNameVO;
-import com.diagbot.vo.StaticKnowledgeVO;
 import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -62,541 +35,10 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
     @Autowired
     private CdssCoreClient cdssCoreClient;
     @Autowired
-    private DictionaryFacade dictionaryFacade;
-    @Autowired
     private ConceptDetailFacade conceptDetailFacade;
     @Autowired
-    @Qualifier("conceptDetailServiceImpl")
-    private ConceptDetailService conceptDetailService;
-    @Autowired
     private MappingConfigFacade mappingConfigFacade;
 
-    /**
-     * 返回带静态知识的检索结果
-     *
-     * @param staticKnowledgeIndexVO
-     * @return
-     */
-    public List<StaticKnowledgeIndexDTO> staticKnowledgeIndexWithInfo(StaticKnowledgeIndexVO staticKnowledgeIndexVO) {
-        staticKnowledgeIndexVO.setHasInfo(1);
-        List<StaticKnowledgeIndexDTO> staticKnowledgeIndexDTOList = staticKnowledgeIndex(staticKnowledgeIndexVO);
-        //过滤没有静态知识的检索结果
-        staticKnowledgeIndexDTOList = staticKnowledgeIndexDTOList
-                .stream()
-                .filter(i -> (i.getHasInfo().equals(1))
-                        && (i.getHasStaticKnowledge().equals(1)
-                        || i.getHasClinicalPathway().equals(1)
-                        || i.getHasNotice().equals(1)))
-                .collect(Collectors.toList());
-        return staticKnowledgeIndexDTOList;
-    }
-
-    /**
-     * 返回不带静态知识的检索结果
-     *
-     * @param staticKnowledgeIndexVO
-     * @return
-     */
-    public List<StaticKnowledgeIndexDTO> staticKnowledgeIndexWithoutInfo(StaticKnowledgeIndexVO staticKnowledgeIndexVO) {
-        staticKnowledgeIndexVO.setHasInfo(0);
-        List<StaticKnowledgeIndexDTO> staticKnowledgeIndexDTOList = staticKnowledgeIndex(staticKnowledgeIndexVO);
-        //过滤没有静态知识的检索结果
-        staticKnowledgeIndexDTOList = staticKnowledgeIndexDTOList
-                .stream()
-                .filter(i -> i.getHasInfo().equals(0))
-                .collect(Collectors.toList());
-        return staticKnowledgeIndexDTOList;
-    }
-
-    /**
-     * 医学知识(静态信息)检索
-     *
-     * @param staticKnowledgeIndexVO
-     * @return
-     */
-    public List<StaticKnowledgeIndexDTO> staticKnowledgeIndex(StaticKnowledgeIndexVO staticKnowledgeIndexVO) {
-        List<StaticKnowledgeIndexDTO> retList = Lists.newLinkedList();
-        //静态知识检索顺序
-        List<DictionaryInfoDTO> dicStaticIndexList = dictionaryFacade.getListByGroupType(7);
-        //页面术语类型和图谱映射
-        List<DictionaryInfoDTO> dicTypeMappingList = dictionaryFacade.getListByGroupType(8);
-        //静态知识类型
-        List<DictionaryInfoDTO> dicStaticTypeList = dictionaryFacade.getListByGroupType(10);
-
-        List<StaticKnowledgeIndexDTO> staticKnowledgeIndexDTOList = Lists.newLinkedList();
-        RespDTO<List<StaticKnowledgeIndexDTO>> respDTO = cdssCoreClient.staticKnowledgeIndex(staticKnowledgeIndexVO);
-        RespDTOUtil.respNGDealCover(respDTO, "检索失败");
-        staticKnowledgeIndexDTOList = respDTO.data;
-        if (ListUtil.isNotEmpty(staticKnowledgeIndexDTOList)) {
-            //typeName转换
-            staticKnowledgeIndexDTOList.forEach(item -> {
-                item.setTypeName(convertTypeName(item.getTypeName(), 2, dicTypeMappingList));
-            });
-            if (staticKnowledgeIndexVO.getHasInfo().equals(1)) {
-                //是否有静态知识
-                List<String> conNameList = staticKnowledgeIndexDTOList
-                        .stream()
-                        .map(i -> i.getName())
-                        .collect(Collectors.toList());
-                QueryWrapper<ConceptInfo> conceptInfoQueryWrapper = new QueryWrapper<>();
-                conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey());
-                conceptInfoQueryWrapper.in("name", conNameList);
-                conceptInfoQueryWrapper.eq("status", StatusEnum.Enable.getKey());
-                List<ConceptInfo> conceptInfoList = this.list(conceptInfoQueryWrapper);
-                if (ListUtil.isNotEmpty(conceptInfoList)) {
-                    //typeName转换
-                    conceptInfoList.forEach(item -> {
-                        item.setType(convertTypeName(item.getType(), 2, dicTypeMappingList));
-                    });
-                    Map<String, ConceptInfo> infoMap
-                            = EntityUtil.makeEntityMapByKeys(conceptInfoList, "_", "name", "type");
-                    for (StaticKnowledgeIndexDTO item : staticKnowledgeIndexDTOList) {
-                        if (infoMap.containsKey(item.getName() + "_" + item.getTypeName())) {
-                            item.setId(infoMap.get(item.getName() + "_" + item.getTypeName()).getId());
-                        }
-                    }
-                    List<Long> conceptIdList = conceptInfoList.stream()
-                            .map(i -> i.getId())
-                            .collect(Collectors.toList());
-                    if (ListUtil.isNotEmpty(conceptIdList)) {
-                        QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
-                        conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey());
-                        conceptDetailQueryWrapper.in("concept_id", conceptIdList);
-                        List<ConceptDetail> conceptDetailList = conceptDetailFacade.list(conceptDetailQueryWrapper);
-                        Map<Long, List<ConceptDetail>> detailMap
-                                = EntityUtil.makeEntityListMap(conceptDetailList, "conceptId");
-                        for (StaticKnowledgeIndexDTO item : staticKnowledgeIndexDTOList) {
-                            if (item.getId() == null
-                                    || !detailMap.containsKey(item.getId())) {
-                                item.setHasInfo(0);
-                                item.setHasStaticKnowledge(0);
-                                item.setHasClinicalPathway(0);
-                                item.setHasNotice((0));
-                                item.setHasTreatInfo(0);
-                                continue;
-                            }
-                            for (ConceptDetail detail : detailMap.get(item.getId())) {
-                                item.setHasInfo(1);
-                                List<String> contentTypeList = Arrays.asList(detail.getContentType().split(","));
-                                if (contentTypeList.contains("1")) {
-                                    item.setHasStaticKnowledge(1);
-                                }
-                                if (contentTypeList.contains("2")) {
-                                    item.setHasNotice(1);
-                                }
-                                if (contentTypeList.contains("3")) {
-                                    item.setHasClinicalPathway(1);
-                                }
-                                if (contentTypeList.contains("4")) {
-                                    item.setHasTreatInfo(1);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-            //排序
-            Map<String, List<StaticKnowledgeIndexDTO>> map
-                    = EntityUtil.makeEntityListMap(staticKnowledgeIndexDTOList, "typeName");
-            Map<Integer, String> staticTypeDicMap =
-                    EntityUtil.makeMapWithKeyValue(dicStaticTypeList, "val", "name");
-            for (DictionaryInfoDTO dic : dicStaticIndexList) {
-                if (dic.getVal().equals("3")) {//检验
-                    //3-检验套餐、4-检验细项
-                    if (map.containsKey(staticTypeDicMap.get("3"))) {
-                        retList.addAll(map.get(staticTypeDicMap.get("3")));
-                    }
-                    if (map.containsKey(staticTypeDicMap.get("4"))) {
-                        retList.addAll(map.get(staticTypeDicMap.get("4")));
-                    }
-                } else if (dic.getVal().equals("5")) {//检查
-                    //5-检查、6-检查子项
-                    if (map.containsKey(staticTypeDicMap.get("5"))) {
-                        retList.addAll(map.get(staticTypeDicMap.get("5")));
-                    }
-                    if (map.containsKey(staticTypeDicMap.get("6"))) {
-                        retList.addAll(map.get(staticTypeDicMap.get("6")));
-                    }
-                } else if (map.containsKey(dic.getName())) {
-                    retList.addAll(map.get(dic.getName()));
-                }
-            }
-        }
-        return retList;
-    }
-
-
-    /**
-     * 页面获取静态知识
-     *
-     * @param staticKnowledgeVO
-     * @return
-     */
-    public StaticKnowledgeDTO getStaticKnowledge(StaticKnowledgeVO staticKnowledgeVO) {
-        StaticKnowledgeDTO staticKnowledgeDTO = new StaticKnowledgeDTO();
-        List<DictionaryInfoDTO> dicStaticTypeList = dictionaryFacade.getListByGroupType(10);
-        Map<String, String> dicStaticTypeValNameMap =
-                EntityUtil.makeMapWithKeyValue(dicStaticTypeList, "val", "name");
-        String typeName = dicStaticTypeValNameMap.get(staticKnowledgeVO.getType().toString());
-        List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
-        typeName = convertTypeName(typeName, 1, dicList);
-
-        QueryWrapper<ConceptInfo> conceptInfoQueryWrapper = new QueryWrapper<>();
-        conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("name", staticKnowledgeVO.getName())
-                .eq("status", StatusEnum.Enable.getKey())
-                .eq("type", typeName);
-        ConceptInfo conceptInfo = this.getOne(conceptInfoQueryWrapper, false);
-
-        if (conceptInfo == null) {
-            StaticKnowledgeNameVO superName = new StaticKnowledgeNameVO();
-            if (typeName.equals("实验室检查名称")) {
-                StaticKnowledgeNameVO staticKnowledgeNameVO = new StaticKnowledgeNameVO();
-                staticKnowledgeNameVO.setName(staticKnowledgeVO.getName());
-                staticKnowledgeNameVO.setType(staticKnowledgeVO.getType());
-                RespDTO<StaticKnowledgeNameVO> respDTO = cdssCoreClient.getSuperName(staticKnowledgeNameVO);
-                if (RespDTOUtil.respIsOK(respDTO)) {
-                    superName = respDTO.data;
-                }
-            } else if (typeName.equals("辅助检查名称")) {
-                StaticKnowledgeNameVO staticKnowledgeNameVO = new StaticKnowledgeNameVO();
-                staticKnowledgeNameVO.setName(staticKnowledgeVO.getName());
-                staticKnowledgeNameVO.setType(6);
-                RespDTO<StaticKnowledgeNameVO> respDTO = cdssCoreClient.getSuperName(staticKnowledgeNameVO);
-                if (RespDTOUtil.respIsOK(respDTO)) {
-                    superName = respDTO.data;
-                }
-            } else {
-                throw new CommonException(CommonErrorCode.IS_EXISTS, "缺少静态信息");
-            }
-            typeName = dicStaticTypeValNameMap.get(superName.getType().toString());
-            typeName = convertTypeName(typeName, 1, dicList);
-
-            conceptInfoQueryWrapper = new QueryWrapper<>();
-            conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("name", superName.getName())
-                    .eq("status", StatusEnum.Enable.getKey())
-                    .eq("type", typeName);
-            conceptInfo = this.getOne(conceptInfoQueryWrapper, false);
-
-            if (conceptInfo == null) {
-                throw new CommonException(CommonErrorCode.IS_EXISTS, "缺少静态信息");
-            }
-        }
-
-        BeanUtil.copyProperties(conceptInfo, staticKnowledgeDTO);
-        Long conceptId = conceptInfo.getId();
-        QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
-        conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("concept_id", conceptId);
-        if (ListUtil.isNotEmpty(staticKnowledgeVO.getContentTypes())) {
-            String sql = "";
-            for (Integer contentType : staticKnowledgeVO.getContentTypes()) {
-                if (contentType.equals(0)) {
-                    sql = "";
-                    break;
-                }
-                if (StringUtil.isNotBlank(sql)) {
-                    sql += " or ";
-                }
-                sql += "find_in_set(" + contentType + ",content_type)";
-            }
-            if (StringUtil.isNotBlank(sql)) {
-                sql = "(" + sql + ")";
-                conceptDetailQueryWrapper.apply(sql);
-            }
-        }
-        conceptDetailQueryWrapper.orderByAsc("order_no");
-        List<ConceptDetail> conceptDetailList = conceptDetailFacade.list(conceptDetailQueryWrapper);
-        List<StaticKnowledgeDetailDTO> detailList
-                = BeanUtil.listCopyTo(conceptDetailList, StaticKnowledgeDetailDTO.class);
-        List<StaticKnowledgeDetailDTO> introduceList = detailList
-                .stream()
-                .filter(i -> Arrays.asList(i.getContentType().split(",")).contains("1"))
-                .collect(Collectors.toList());
-        List<StaticKnowledgeDetailDTO> noticeList = detailList
-                .stream()
-                .filter(i -> Arrays.asList(i.getContentType().split(",")).contains("2"))
-                .collect(Collectors.toList());
-        List<StaticKnowledgeDetailDTO> clinicalPathwayList = detailList
-                .stream()
-                .filter(i -> Arrays.asList(i.getContentType().split(",")).contains("3"))
-                .collect(Collectors.toList());
-        List<StaticKnowledgeDetailDTO> treatInfoList = detailList
-                .stream()
-                .filter(i -> Arrays.asList(i.getContentType().split(",")).contains("4"))
-                .collect(Collectors.toList());
-        Map<String, List<StaticKnowledgeDetailDTO>> detailMap = new HashMap<>();
-        if (ListUtil.isEmpty(staticKnowledgeVO.getContentTypes()) || staticKnowledgeVO.getContentTypes().contains(0)) {
-            if (ListUtil.isNotEmpty(introduceList)) {
-                detailMap.put("静态知识", introduceList);
-            }
-            if (ListUtil.isNotEmpty(noticeList)) {
-                detailMap.put("注意事项", noticeList);
-            }
-            if (ListUtil.isNotEmpty(clinicalPathwayList)) {
-                detailMap.put("临床路径", clinicalPathwayList);
-            }
-            if (ListUtil.isNotEmpty(treatInfoList)) {
-                detailMap.put("治疗方案", treatInfoList);
-            }
-        } else {
-            if (ListUtil.isNotEmpty(introduceList) && staticKnowledgeVO.getContentTypes().contains(1)) {
-                detailMap.put("静态知识", introduceList);
-            }
-            if (ListUtil.isNotEmpty(noticeList) && staticKnowledgeVO.getContentTypes().contains(2)) {
-                detailMap.put("注意事项", noticeList);
-            }
-            if (ListUtil.isNotEmpty(clinicalPathwayList) && staticKnowledgeVO.getContentTypes().contains(3)) {
-                detailMap.put("临床路径", clinicalPathwayList);
-            }
-            if (ListUtil.isNotEmpty(treatInfoList) && staticKnowledgeVO.getContentTypes().contains(4)) {
-                detailMap.put("治疗方案", treatInfoList);
-            }
-        }
-        staticKnowledgeDTO.setDetails(detailMap);
-        return staticKnowledgeDTO;
-    }
-
-    /**
-     * 医院端获取静态知识(对接)
-     *
-     * @param staticKnowledgeHISVO
-     * @return
-     */
-    public List<StaticKnowledgeHISDTO> getStaticKnowledgeForHIS(StaticKnowledgeHISVO staticKnowledgeHISVO) {
-
-        List<StaticKnowledgeHISDTO> retList = Lists.newArrayList();
-        List<DictionaryInfoDTO> dicStaticTypeList = dictionaryFacade.getListByGroupType(10);
-        List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
-        Map<String, String> dicStaticTypeValNameMap =
-                EntityUtil.makeMapWithKeyValue(dicStaticTypeList, "val", "name");
-
-        List<String> typeNames = ListUtil.newArrayList();
-        List<Integer> types = ListUtil.newArrayList();
-        types.add(staticKnowledgeHISVO.getType());
-        if (staticKnowledgeHISVO.getType().equals(3)) {
-            types.add(4);
-        } else if (staticKnowledgeHISVO.getType().equals(4)) {
-            types.add(3);
-        }
-        if (staticKnowledgeHISVO.getType().equals(5)) {
-            types.add(6);
-        } else if (staticKnowledgeHISVO.getType().equals(6)) {
-            types.add(5);
-        }
-
-
-        for (Integer type : types) {
-            String typeName = dicStaticTypeValNameMap.get(type.toString());
-            typeName = convertTypeName(typeName, 1, dicList);
-            typeNames.add(typeName);
-        }
-
-        //术语映射
-        List<String> uniqueNameList = getUniqueNames(staticKnowledgeHISVO);
-        if (ListUtil.isEmpty(uniqueNameList)) {
-            return retList;
-        }
-        QueryWrapper<ConceptInfo> conceptInfoQueryWrapper = new QueryWrapper<>();
-        conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .in("name", uniqueNameList)
-                .eq("status", StatusEnum.Enable.getKey())
-                .in("type", typeNames);
-        List<ConceptInfo> conceptList = this.list(conceptInfoQueryWrapper);
-        List<ConceptInfo> conceptInfoList = Lists.newLinkedList();
-        if (staticKnowledgeHISVO.getType().equals(3)) {
-            conceptInfoList.addAll(conceptList.stream().filter(i -> i.getType().equals("实验室检查套餐名")).collect(Collectors.toList()));
-            for (ConceptInfo info : conceptList) {
-                if (info.getType().equals("实验室检查名称")
-                        && ListUtil.isEmpty(conceptInfoList.stream().filter(i -> i.getName().equals(info.getName())).collect(Collectors.toList()))) {
-                    conceptInfoList.add(info);
-                }
-            }
-        }
-        if (staticKnowledgeHISVO.getType().equals(4)) {
-            conceptInfoList.addAll(conceptList.stream().filter(i -> i.getType().equals("实验室检查名称")).collect(Collectors.toList()));
-            for (ConceptInfo info : conceptList) {
-                if (info.getType().equals("实验室检查套餐名")
-                        && ListUtil.isEmpty(conceptInfoList.stream().filter(i -> i.getName().equals(info.getName())).collect(Collectors.toList()))) {
-                    conceptInfoList.add(info);
-                }
-            }
-        } else {
-            conceptInfoList.addAll(conceptList);
-        }
-
-        List<String> existUniqueNameList = Lists.newLinkedList();
-
-        if (ListUtil.isNotEmpty(conceptInfoList)) {
-            existUniqueNameList.addAll(conceptInfoList
-                    .stream()
-                    .map(i -> i.getName())
-                    .collect(Collectors.toList()));
-        }
-
-        //未匹配到静态知识
-        List<String> notExistUniqueNameList = Lists.newLinkedList();
-        uniqueNameList.forEach(name -> {
-            if (!existUniqueNameList.contains(name)) {
-                notExistUniqueNameList.add(name);
-            }
-        });
-
-        //获取上级静态知识
-        if (ListUtil.isNotEmpty(notExistUniqueNameList)) {
-            List<StaticKnowledgeNameVO> paramNames = Lists.newLinkedList();
-            List<StaticKnowledgeNameVO> superNames = Lists.newLinkedList();
-            for (String name : notExistUniqueNameList) {
-                StaticKnowledgeNameVO paramName = new StaticKnowledgeNameVO();
-                paramName.setName(name);
-                if (staticKnowledgeHISVO.getType().equals(3)) {
-                    paramName.setType(4);
-                } else if (staticKnowledgeHISVO.getType().equals(5)) {
-                    paramName.setType(6);
-                } else {
-                    paramName.setType(staticKnowledgeHISVO.getType());
-                }
-                paramNames.add(paramName);
-            }
-            RespDTO<List<StaticKnowledgeNameVO>> respDTO = cdssCoreClient.getSuperNameBatch(paramNames);
-            if (RespDTOUtil.respIsOK(respDTO)) {
-                superNames = respDTO.data;
-            }
-            if (ListUtil.isNotEmpty(superNames)) {
-                List<String> superNameList = superNames.stream().map(i -> i.getName()).distinct().collect(Collectors.toList());
-                List<Integer> superTypes = superNames.stream().map(i -> i.getType()).distinct().collect(Collectors.toList());
-                List<String> superTypeNames = Lists.newLinkedList();
-                for (Integer type : superTypes) {
-                    String typeName = dicStaticTypeValNameMap.get(type.toString());
-                    typeName = convertTypeName(typeName, 1, dicList);
-                    superTypeNames.add(typeName);
-                }
-                conceptInfoQueryWrapper = new QueryWrapper<>();
-                conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .in("name", superNameList)
-                        .eq("status", StatusEnum.Enable.getKey())
-                        .in("type", superTypeNames);
-                List<ConceptInfo> superConceptInfoList = this.list(conceptInfoQueryWrapper);
-                if (ListUtil.isNotEmpty(superConceptInfoList)) {
-                    conceptInfoList.addAll(superConceptInfoList);
-                }
-            }
-        }
-
-        conceptInfoList = conceptInfoList.stream().distinct().collect(Collectors.toList());
-
-        if (ListUtil.isEmpty(conceptInfoList)) {
-            return retList;
-        }
-
-        retList = BeanUtil.listCopyTo(conceptInfoList, StaticKnowledgeHISDTO.class);
-        List<Long> conceptIdList = conceptInfoList.stream().map(i -> i.getId()).collect(Collectors.toList());
-        QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
-        conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .in("concept_id", conceptIdList);
-        if (ListUtil.isNotEmpty(staticKnowledgeHISVO.getContentTypes())) {
-            String sql = "";
-            for (Integer contentType : staticKnowledgeHISVO.getContentTypes()) {
-                if (contentType.equals(0)) {
-                    sql = "";
-                    break;
-                }
-                if (StringUtil.isNotBlank(sql)) {
-                    sql += " or ";
-                }
-                sql += "find_in_set(" + contentType + ",content_type)";
-            }
-            if (StringUtil.isNotBlank(sql)) {
-                sql = "(" + sql + ")";
-            }
-            conceptDetailQueryWrapper.apply(sql);
-        }
-        conceptDetailQueryWrapper.orderByAsc("concept_id", "order_no");
-        List<ConceptDetail> conceptDetailList = conceptDetailFacade.list(conceptDetailQueryWrapper);
-        List<StaticKnowledgeDetailDTO> detailList
-                = BeanUtil.listCopyTo(conceptDetailList, StaticKnowledgeDetailDTO.class);
-        Map<Long, List<StaticKnowledgeDetailDTO>> conceptMap
-                = EntityUtil.makeEntityListMap(detailList, "conceptId");
-        for (StaticKnowledgeHISDTO staticKnowledgeDTO : retList) {
-            staticKnowledgeDTO.setHisName(staticKnowledgeHISVO.getHisName());
-            staticKnowledgeDTO.setHisDetailName(staticKnowledgeHISVO.getHisDetailName());
-            List<StaticKnowledgeDetailDTO> subDetailList = conceptMap.get(staticKnowledgeDTO.getId());
-            if (ListUtil.isNotEmpty(subDetailList)) {
-                List<StaticKnowledgeDetailDTO> introduceList = subDetailList
-                        .stream()
-                        .filter(i -> Arrays.asList(i.getContentType().split(",")).contains("1"))
-                        .collect(Collectors.toList());
-                List<StaticKnowledgeDetailDTO> noticeList = subDetailList
-                        .stream()
-                        .filter(i -> Arrays.asList(i.getContentType().split(",")).contains("2"))
-                        .collect(Collectors.toList());
-                List<StaticKnowledgeDetailDTO> clinicalPathwayList = subDetailList
-                        .stream()
-                        .filter(i -> Arrays.asList(i.getContentType().split(",")).contains("3"))
-                        .collect(Collectors.toList());
-                List<StaticKnowledgeDetailDTO> treatInfoList = subDetailList
-                        .stream()
-                        .filter(i -> Arrays.asList(i.getContentType().split(",")).contains("4"))
-                        .collect(Collectors.toList());
-                Map<String, List<StaticKnowledgeDetailDTO>> subDetailMap = new HashMap<>();
-                if (ListUtil.isEmpty(staticKnowledgeHISVO.getContentTypes()) || staticKnowledgeHISVO.getContentTypes().contains(0)) {
-                    if (ListUtil.isNotEmpty(introduceList)) {
-                        subDetailMap.put("静态知识", introduceList);
-                    }
-                    if (ListUtil.isNotEmpty(noticeList)) {
-                        subDetailMap.put("注意事项", noticeList);
-                    }
-                    if (ListUtil.isNotEmpty(clinicalPathwayList)) {
-                        subDetailMap.put("临床路径", clinicalPathwayList);
-                    }
-                    if (ListUtil.isNotEmpty(treatInfoList)) {
-                        subDetailMap.put("治疗方案", treatInfoList);
-                    }
-                } else {
-                    if (ListUtil.isNotEmpty(introduceList) && staticKnowledgeHISVO.getContentTypes().contains(1)) {
-                        subDetailMap.put("静态知识", introduceList);
-                    }
-                    if (ListUtil.isNotEmpty(noticeList) && staticKnowledgeHISVO.getContentTypes().contains(2)) {
-                        subDetailMap.put("注意事项", noticeList);
-                    }
-                    if (ListUtil.isNotEmpty(clinicalPathwayList) && staticKnowledgeHISVO.getContentTypes().contains(3)) {
-                        subDetailMap.put("临床路径", clinicalPathwayList);
-                    }
-                    if (ListUtil.isNotEmpty(treatInfoList) && staticKnowledgeHISVO.getContentTypes().contains(4)) {
-                        subDetailMap.put("治疗方案", treatInfoList);
-                    }
-                }
-                staticKnowledgeDTO.setDetails(subDetailMap);
-            }
-        }
-        return retList;
-    }
-
-    /**
-     * 页面术语类型和图谱标签名称相互转换
-     *
-     * @param typeName
-     * @param flag     1-页面术语类型转图谱标签名称,2- 图谱标签名称转页面术语类型
-     * @param dicList
-     * @return
-     */
-    public String convertTypeName(String typeName, Integer flag, List<DictionaryInfoDTO> dicList) {
-        if (ListUtil.isNotEmpty(dicList)) {
-            Map<String, String> nameValMap = new HashMap<>();
-            if (flag.equals(1)) {
-                nameValMap = EntityUtil.makeMapWithKeyValue(dicList, "name", "val");
-            } else if (flag.equals(2)) {
-                nameValMap = EntityUtil.makeMapWithKeyValue(dicList, "val", "name");
-            }
-            if (nameValMap.containsKey(typeName)) {
-                return nameValMap.get(typeName);
-            }
-        }
-        return typeName;
-    }
-
     /**
      * @param staticKnowledgeHISVO
      * @return
@@ -608,7 +50,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             case 1:
                 Map<String, Map<String, Map<String, List<String>>>> disConfigMap
                         = mappingConfigFacade.groupByHisNameWithName(ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }),
-                        ConceptTypeEnum.Disease.getKey(), hospitalId,StatusEnum.Enable.getKey());
+                        ConceptTypeEnum.Disease.getKey(), hospitalId, StatusEnum.Enable.getKey());
                 if (disConfigMap != null
                         && disConfigMap.get(staticKnowledgeHISVO.getHisName()) != null) {
                     nameList = disConfigMap.get(staticKnowledgeHISVO.getHisName())
@@ -620,7 +62,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             case 2:
                 Map<String, Map<String, Map<String, List<String>>>> drugConfigMap
                         = mappingConfigFacade.groupByHisNameWithName(ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }),
-                        ConceptTypeEnum.Drug.getKey(), hospitalId,StatusEnum.Enable.getKey());
+                        ConceptTypeEnum.Drug.getKey(), hospitalId, StatusEnum.Enable.getKey());
                 if (drugConfigMap != null
                         && drugConfigMap.get(staticKnowledgeHISVO.getHisName()) != null) {
                     nameList = drugConfigMap.get(staticKnowledgeHISVO.getHisName())
@@ -633,7 +75,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             case 4:
                 Map<String, Map<String, Map<String, List<String>>>> lisConfigMap
                         = mappingConfigFacade.groupByHisNameWithName(ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }),
-                        ConceptTypeEnum.LisPack.getKey(), hospitalId,StatusEnum.Enable.getKey());
+                        ConceptTypeEnum.LisPack.getKey(), hospitalId, StatusEnum.Enable.getKey());
                 if (lisConfigMap != null) {
                     if (StringUtil.isBlank(staticKnowledgeHISVO.getHisDetailName())) {
                         staticKnowledgeHISVO.setHisDetailName("");
@@ -652,7 +94,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             case 6:
                 Map<String, Map<String, Map<String, List<String>>>> pacsConfigMap
                         = mappingConfigFacade.groupByHisNameWithName(ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }),
-                        ConceptTypeEnum.Pacs.getKey(), hospitalId,StatusEnum.Enable.getKey());
+                        ConceptTypeEnum.Pacs.getKey(), hospitalId, StatusEnum.Enable.getKey());
                 if (pacsConfigMap != null
                         && pacsConfigMap.get(staticKnowledgeHISVO.getHisName()) != null) {
                     nameList = pacsConfigMap.get(staticKnowledgeHISVO.getHisName())
@@ -664,7 +106,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             case 7:
                 Map<String, Map<String, Map<String, List<String>>>> operationConfigMap
                         = mappingConfigFacade.groupByHisNameWithName(ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }),
-                        ConceptTypeEnum.Operation.getKey(), hospitalId,StatusEnum.Enable.getKey());
+                        ConceptTypeEnum.Operation.getKey(), hospitalId, StatusEnum.Enable.getKey());
                 if (operationConfigMap != null &&
                         operationConfigMap.get(staticKnowledgeHISVO.getHisName()) != null) {
                     nameList = operationConfigMap.get(staticKnowledgeHISVO.getHisName())
@@ -676,7 +118,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             case 8:
                 Map<String, Map<String, Map<String, List<String>>>> scaleConfigMap
                         = mappingConfigFacade.groupByHisNameWithName(ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }),
-                        ConceptTypeEnum.Scale.getKey(), hospitalId,StatusEnum.Enable.getKey());
+                        ConceptTypeEnum.Scale.getKey(), hospitalId, StatusEnum.Enable.getKey());
                 if (scaleConfigMap != null &&
                         scaleConfigMap.get(staticKnowledgeHISVO.getHisName()) != null) {
                     nameList = scaleConfigMap.get(staticKnowledgeHISVO.getHisName())
@@ -688,7 +130,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             case 9:
                 Map<String, Map<String, Map<String, List<String>>>> nurseConfigMap
                         = mappingConfigFacade.groupByHisNameWithName(ListUtil.arrayToList(new String[] { staticKnowledgeHISVO.getHisName() }),
-                        ConceptTypeEnum.Nurse.getKey(), hospitalId,StatusEnum.Enable.getKey());
+                        ConceptTypeEnum.Nurse.getKey(), hospitalId, StatusEnum.Enable.getKey());
                 if (nurseConfigMap != null &&
                         nurseConfigMap.get(staticKnowledgeHISVO.getHisName()) != null) {
                     nameList = nurseConfigMap.get(staticKnowledgeHISVO.getHisName())
@@ -710,285 +152,9 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
         return nameList;
     }
 
-    /**
-     * 列表
-     *
-     * @param conceptInfoPageVO
-     * @return
-     */
-    @Override
-    public IPage<ConceptInfoDTO> getPage(ConceptInfoPageVO conceptInfoPageVO) {
-        List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
-        List<DictionaryInfoDTO> dicStaticTypeList = dictionaryFacade.getListByGroupType(10);
-        Map<Integer, String> dicStaticTypeValNameMap =
-                EntityUtil.makeMapWithKeyValue(dicStaticTypeList, "val", "name");
-        Map<String, Integer> dicStaticTypeNameValMap =
-                EntityUtil.makeMapWithKeyValue(dicStaticTypeList, "name", "val");
-        if (StringUtil.isNotBlank(conceptInfoPageVO.getType())) {
-            String typeName
-                    = convertTypeName(dicStaticTypeValNameMap.get(conceptInfoPageVO.getType()), 1, dicList);
-            conceptInfoPageVO.setTypeName(typeName);
-        }
-        IPage<ConceptInfoDTO> page = super.getPage(conceptInfoPageVO);
-        List<ConceptInfoDTO> records = page.getRecords();
-        if (ListUtil.isNotEmpty(records)) {
-            records.forEach(record -> {
-                String typeName = convertTypeName(record.getType(), 2, dicList);
-                record.setTypeName(typeName);
-                record.setType(String.valueOf(dicStaticTypeNameValMap.get(typeName)));
-            });
-        }
-        page.setRecords(records);
-        return page;
-    }
-
-    /**
-     * 保存记录(新增or修改)
-     *
-     * @param conceptInfoVO
-     * @return
-     */
-    public Boolean saveOrUpdateRecord(ConceptInfoVO conceptInfoVO) {
-        String userId = SysUserUtils.getCurrentPrincipleID();
-        Date now = DateUtil.now();
-        //术语类型映射
-        List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
-        //静态知识类型
-        List<DictionaryInfoDTO> dicStaticTypeList = dictionaryFacade.getListByGroupType(10);
-        Map<Integer, String> dicStaticTypeValNameMap =
-                EntityUtil.makeMapWithKeyValue(dicStaticTypeList, "val", "name");
-        //术语类型转换
-        String typeName = convertTypeName(dicStaticTypeValNameMap.get(conceptInfoVO.getType()), 1, dicList);
-        conceptInfoVO.setTypeName(typeName);
-        ConceptInfo conceptInfo = new ConceptInfo();
-
-        if (conceptInfoVO.getId() != null) {
-            conceptInfo = this.getById(conceptInfoVO.getId());
-            if (conceptInfo != null
-                    && !conceptInfo.getName().equals(conceptInfoVO.getName())) {
-                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "标准术语名称不允许修改");
-            }
-        } else {
-            QueryWrapper<ConceptInfo> conceptInfoQueryWrapper = new QueryWrapper<>();
-            conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("name", conceptInfoVO.getName())
-                    .eq("type", typeName);
-            conceptInfo = this.getOne(conceptInfoQueryWrapper, false);
-            //术语不存在,保存术语信息
-            if (conceptInfo == null) {
-                conceptInfo = new ConceptInfo();
-                conceptInfo.setCreator(userId);
-                conceptInfo.setGmtCreate(now);
-            }
-        }
-        conceptInfo.setName(conceptInfoVO.getName());
-        conceptInfo.setClinicalPathwayName(conceptInfoVO.getClinicalPathwayName());
-        conceptInfo.setNoticeName(conceptInfoVO.getNoticeName());
-        conceptInfo.setType(typeName);
-        conceptInfo.setModifier(userId);
-        conceptInfo.setGmtModified(now);
-
-        //是否包含静态信息
-        List<ConceptDetail> oldDetails = null;
-        QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
-        if (conceptInfo.getId() != null) {
-            conceptDetailQueryWrapper.eq("concept_id", conceptInfo.getId());
-            conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey());
-            oldDetails = conceptDetailFacade.list(conceptDetailQueryWrapper);
-        }
-        if (conceptInfoVO.getId() == null
-                && ListUtil.isNotEmpty(oldDetails)) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "静态信息已添加,不允许重复添加");
-        }
-        if (ListUtil.isEmpty(oldDetails)
-                && ListUtil.isNotEmpty(conceptInfoVO.getDetails())) {
-            //TODO 更新图谱是否有静态信息
-            HasStaticKnowledgeVO hasStaticKnowledgeVO = new HasStaticKnowledgeVO();
-            hasStaticKnowledgeVO.setName(conceptInfoVO.getName());
-            hasStaticKnowledgeVO.setType(typeName);
-            hasStaticKnowledgeVO.setHasInfo(1);
-            RespDTO<Boolean> respDTO = cdssCoreClient.updateHasInfoStatus(hasStaticKnowledgeVO);
-            //更新失败
-            if (RespDTOUtil.respIsNG(respDTO)) {
-                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "图谱更新静态知识状态失败");
-            }
-        }
-
-        //删除已有静态信息
-        if (conceptInfo.getId() != null) {
-            conceptDetailFacade.remove(conceptDetailQueryWrapper);
-        }
-
-        //更新术语信息
-        this.saveOrUpdate(conceptInfo);
-
-        //插入新的静态信息
-        List<ConceptDetail> conceptDetailList = Lists.newLinkedList();
-        if (ListUtil.isNotEmpty(conceptInfoVO.getDetails())) {
-            for (ConceptDetailVO detailVO : conceptInfoVO.getDetails()) {
-                ConceptDetail conceptDetail = new ConceptDetail();
-                BeanUtil.copyProperties(detailVO, conceptDetail);
-                conceptDetail.setConceptId(conceptInfo.getId());
-                conceptDetail.setCreator(userId);
-                conceptDetail.setGmtCreate(now);
-                conceptDetail.setModifier(userId);
-                conceptDetail.setGmtModified(now);
-                conceptDetailList.add(conceptDetail);
-            }
-            conceptDetailService.saveBatch(conceptDetailList);
-        }
-        return true;
-    }
-
-    /**
-     * 启用禁用
-     *
-     * @param changeStatusVO
-     * @return
-     */
-    public Boolean changeStatus(ChangeStatusVO changeStatusVO) {
-        String userId = SysUserUtils.getCurrentPrincipleID();
-        Date now = DateUtil.now();
-        //更新主表
-        UpdateWrapper<ConceptInfo> conceptInfoUpdateWrapper = new UpdateWrapper<>();
-        conceptInfoUpdateWrapper.eq("id", changeStatusVO.getId())
-                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .set("gmt_modified", now)
-                .set("modifier", userId)
-                .set("status", changeStatusVO.getStatus());
-        this.update(conceptInfoUpdateWrapper);
-        //更新明细表
-        UpdateWrapper<ConceptDetail> conceptDetailUpdateWrapper = new UpdateWrapper<>();
-        conceptDetailUpdateWrapper.eq("concept_id", changeStatusVO.getId())
-                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .set("gmt_modified", now)
-                .set("modifier", userId);
-        conceptDetailService.update(conceptDetailUpdateWrapper);
-        return true;
-    }
-
-    /**
-     * 是否已存在
-     *
-     * @param conceptInfoVO
-     * @return
-     */
-    public Boolean isExist(ConceptInfoVO conceptInfoVO) {
-        List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
-        //静态知识类型
-        List<DictionaryInfoDTO> dicStaticTypeList = dictionaryFacade.getListByGroupType(10);
-        Map<Integer, String> dicStaticTypeValNameMap =
-                EntityUtil.makeMapWithKeyValue(dicStaticTypeList, "val", "name");
-        //术语类型转换
-        String typeName = convertTypeName(dicStaticTypeValNameMap.get(conceptInfoVO.getType()), 1, dicList);
-        conceptInfoVO.setTypeName(typeName);
-        QueryWrapper<ConceptInfo> conceptInfoQueryWrapper = new QueryWrapper<>();
-        conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("name", conceptInfoVO.getName())
-                .eq("type", typeName);
-        ConceptInfo conceptInfo = this.getOne(conceptInfoQueryWrapper, false);
-        if (conceptInfo == null) {
-            return false;
-        }
-        QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
-        conceptDetailQueryWrapper.eq("concept_id", conceptInfo.getId())
-                .eq("is_deleted", IsDeleteEnum.N.getKey());
-        List<ConceptDetail> conceptDetailList = conceptDetailService.list(conceptDetailQueryWrapper);
-        if (ListUtil.isEmpty(conceptDetailList)) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * 根据术语id获取静态信息
-     *
-     * @param idVO
-     * @return
-     */
-    public ConceptInfoDTO getRecordById(IdVO idVO) {
-        List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
-        //静态知识类型
-        List<DictionaryInfoDTO> dicStaticTypeList = dictionaryFacade.getListByGroupType(10);
-        Map<Integer, String> dicStaticTypeValNameMap =
-                EntityUtil.makeMapWithKeyValue(dicStaticTypeList, "val", "name");
-        Map<String, Integer> dicStaticTypeNameValMap =
-                EntityUtil.makeMapWithKeyValue(dicStaticTypeList, "name", "val");
-        ConceptInfoDTO conceptInfoDTO = new ConceptInfoDTO();
-        ConceptInfo conceptInfo = this.getById(idVO.getId());
-        if (conceptInfo == null) {
-            return null;
-        }
-        BeanUtil.copyProperties(conceptInfo, conceptInfoDTO);
-        QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
-        conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("concept_id", idVO.getId())
-                .orderByAsc("order_no");
-        List<ConceptDetail> conceptDetailList = conceptDetailFacade.list(conceptDetailQueryWrapper);
-        if (ListUtil.isNotEmpty(conceptDetailList)) {
-            List<ConceptDetailDTO> details = BeanUtil.listCopyTo(conceptDetailList, ConceptDetailDTO.class);
-            conceptInfoDTO.setDetails(details);
-            //启用状态、修改人、修改时间为明细的内容
-            String typeName = convertTypeName(conceptInfoDTO.getType(), 2, dicList);
-            conceptInfoDTO.setTypeName(typeName);
-            conceptInfoDTO.setType(String.valueOf(dicStaticTypeNameValMap.get(typeName)));
-            conceptInfoDTO.setModifier(conceptDetailList.get(0).getModifier());
-            conceptInfoDTO.setGmtModified(conceptDetailList.get(0).getGmtModified());
-        }
-        return conceptInfoDTO;
-    }
-
-    /**
-     * 获取静态知识map Map<name_type,List<ConceptDetail>>
-     *
-     * @param nameList
-     * @return
-     */
-    public Map<String, List<ConceptDetail>> getDetailByConcept(List<String> nameList, List<Integer> contentTypes) {
-        Map<String, List<ConceptDetail>> retMap = new HashMap<>();
-        List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
-        QueryWrapper<ConceptInfo> conceptInfoQueryWrapper = new QueryWrapper<>();
-        conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("status", 1);
-        if (ListUtil.isNotEmpty(nameList)) {
-            conceptInfoQueryWrapper.in("name", nameList);
-        }
-        List<ConceptInfo> conceptInfoList = this.list(conceptInfoQueryWrapper);
-        Map<Long, ConceptInfo> conceptMap = EntityUtil.makeEntityMap(conceptInfoList, "id");
-
-        if (ListUtil.isNotEmpty(conceptInfoList)) {
-            List<Long> conceptIds = conceptInfoList.stream()
-                    .map(i -> i.getId())
-                    .collect(Collectors.toList());
-
-            QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
-            conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .in("concept_id", conceptIds);
-            if (ListUtil.isNotEmpty(contentTypes)) {
-                conceptDetailQueryWrapper.and(sql -> {
-                    for (int i = 0; i < contentTypes.size(); i++) {
-                        if (i > 0) {
-                            sql.or();
-                        }
-                        sql.apply("find_in_set({0},content_type)", contentTypes.get(i));
-                    }
-                });
-            }
-            List<ConceptDetail> conceptDetailList = conceptDetailFacade.list(conceptDetailQueryWrapper);
-            Map<Long, List<ConceptDetail>> detailMap
-                    = EntityUtil.makeEntityListMap(conceptDetailList, "conceptId");
-
-            for (Map.Entry<Long, ConceptInfo> entry : conceptMap.entrySet()) {
-                if (detailMap.containsKey(entry.getKey())) {
-                    retMap.put(entry.getValue().getName() + "_" + convertTypeName(entry.getValue().getType(), 2, dicList), detailMap.get(entry.getKey()));
-                }
-            }
-        }
-        return retMap;
-    }
-
     /**
      * 批量更新静态知识标志
+     *
      * @return
      */
     public Boolean updateHasInfoStatusBatch() {

+ 3 - 1
src/main/java/com/diagbot/facade/KlConceptStaticFacade.java

@@ -17,6 +17,7 @@ import com.diagbot.exception.CommonException;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
+import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
 import com.diagbot.vo.ChangeStatusVO;
 import com.diagbot.vo.IdVO;
@@ -88,7 +89,8 @@ public class KlConceptStaticFacade {
      */
     public StaticKnowledgeDTO getStaticKnowledge(StaticKnowledgeVO staticKnowledgeVO) {
         ScaleStaticAllVO scaleStaticAllVO = new ScaleStaticAllVO();
-        if (staticKnowledgeVO.getType() == 8) {
+        if (staticKnowledgeVO.getType() == 8
+                && StringUtil.isNotBlank(staticKnowledgeVO.getMrId())) {
             PushJoinVO mr = mrFacade.getMr(staticKnowledgeVO.getMrId());
             if (null != mr) {
                 SearchData searchData = new SearchData();

+ 17 - 0
src/main/java/com/diagbot/facade/KlRuleFacade.java

@@ -1,16 +1,21 @@
 package com.diagbot.facade;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.client.CdssCoreClient;
 import com.diagbot.dto.KlRuleByIdParDTO;
 import com.diagbot.dto.KlRuleInfoDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.RuleDTO;
+import com.diagbot.dto.RuleQueryDTO;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.vo.KlRuleByIdVO;
 import com.diagbot.vo.KlRuleInfoClearVO;
 import com.diagbot.vo.KlRuleInfoSaveVO;
 import com.diagbot.vo.KlRuleInfoVO;
 import com.diagbot.vo.KlRuleSatartOrdisaVO;
+import com.diagbot.vo.RuleQueryKeyVO;
+import com.diagbot.vo.RuleQueryVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -62,4 +67,16 @@ public class KlRuleFacade {
         RespDTOUtil.respNGDeal(booleanRespDTO, "启用规则失败");
         return booleanRespDTO.data;
     }
+
+    public Page<RuleQueryDTO> getRulePage(RuleQueryVO ruleQueryVO) {
+        RespDTO<Page<RuleQueryDTO>> rulepageRespDTO = cdssCoreClient.getRulePage(ruleQueryVO);
+        RespDTOUtil.respNGDeal(rulepageRespDTO, "查询所有有效的规则失败");
+        return rulepageRespDTO.data;
+    }
+
+    public RuleDTO getRuleDetail(RuleQueryKeyVO ruleQueryKeyVO) {
+        RespDTO<RuleDTO> ruleDTORespDTO = cdssCoreClient.getRuleDetail(ruleQueryKeyVO);
+        RespDTOUtil.respNGDeal(ruleDTORespDTO, "查询规则明细失败");
+        return ruleDTORespDTO.data;
+    }
 }

+ 62 - 35
src/main/java/com/diagbot/facade/PlanDetailFacade.java

@@ -12,6 +12,7 @@ import com.diagbot.service.PlanDetailService;
 import com.diagbot.service.impl.PlanDetailServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
@@ -21,7 +22,6 @@ import com.diagbot.vo.HospitalSetVO;
 import com.diagbot.vo.PlanDetailCancelVO;
 import com.diagbot.vo.PlanDetailRevStopVO;
 import com.diagbot.vo.PlanDetailSaveVO;
-import com.diagbot.vo.PlanDetailSubSaveVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -29,7 +29,6 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * @author wangfeng
@@ -49,29 +48,38 @@ public class PlanDetailFacade extends PlanDetailServiceImpl {
                 .eq("hospital_id", hospitalSetVO.getHospitalId())
                 .eq(StringUtil.isNotBlank(hospitalSetVO.getCode()), "code", hospitalSetVO.getCode())
                 .in("plan_id", hospitalSetVO.getPlanId())
-                .orderByAsc("plan_id", "order_no","id");
+                .orderByAsc("plan_id", "order_no", "id");
         List<PlanDetail> sysSetData = list(sysSetInfo);
         List<PlanDetailDTO> sysSetInfoData = BeanUtil.listCopyTo(sysSetData, PlanDetailDTO.class);
-        List<PlanDetailDTO> planDetailParent = new ArrayList<>();//父级数据
-        List<PlanDetailDTO> planDetailSub = new ArrayList<>();//子级数据
-        //分离数据,-1分父级菜单
-        for (PlanDetailDTO dataDeta : sysSetInfoData) {
-            if (dataDeta.getParentId() == (-1)) {
-                planDetailParent.add(dataDeta);
-            } else {
-                planDetailSub.add(dataDeta);
+        //添加菜单信息
+        Map<Long, List<PlanDetailDTO>> menuMap = EntityUtil.makeEntityListMap(sysSetInfoData, "parentId");
+        List<PlanDetailDTO> menuRes = menuMap.get(-1L);
+        if (ListUtil.isNotEmpty(menuRes)) {
+            for (PlanDetailDTO bean : menuRes) {
+                getSonMenu(bean, menuMap);
             }
         }
-        //把子级数据,放在父级下
-        Map<Long, List<PlanDetailDTO>> mapParentId = planDetailSub.stream().collect(Collectors.groupingBy(PlanDetailDTO::getParentId));
-        for (Long key : mapParentId.keySet()) {
-            for (PlanDetailDTO sysPlanInfos : planDetailParent) {
-                if (sysPlanInfos.getId().equals(key)) {
-                    sysPlanInfos.setPlanDetails(mapParentId.get(key));
-                }
+        return menuRes;
+    }
+
+    /**
+     * 递归获取菜单结构
+     *
+     * @param menu    当前菜单
+     * @param menuMap 菜单集
+     * @return 菜单结构
+     */
+    public List<PlanDetailDTO> getSonMenu(PlanDetailDTO menu,
+                                          Map<Long, List<PlanDetailDTO>> menuMap) {
+        List<PlanDetailDTO> res = new ArrayList<>();
+        List<PlanDetailDTO> list = menuMap.get(menu.getId());
+        if (ListUtil.isNotEmpty(list)) {
+            menu.setPlanDetails(list);
+            for (PlanDetailDTO bean : list) {
+                getSonMenu(bean, menuMap);
             }
         }
-        return planDetailParent;
+        return res;
     }
 
     public List<PlanDetailDTO> getByPlanIds(List<Long> planIds) {
@@ -111,24 +119,43 @@ public class PlanDetailFacade extends PlanDetailServiceImpl {
             planDetails.setModifier(SysUserUtils.getCurrentPrincipleID());
             planDetails.setGmtModified(now);
             planDetailService.save(planDetails);
-            List<PlanDetailSubSaveVO> data = planDetailSave.getPlanDetailSub();
-            if(ListUtil.isNotEmpty(data)){
-                List<PlanDetail> planDetailList = new ArrayList<>();
-                //再保存子类
-                for (PlanDetailSubSaveVO planDetailVO : data) {
-                    if(planDetailVO.getCode()!=null){
-                        PlanDetail planDetail = new PlanDetail();
-                        BeanUtil.copyProperties(planDetailVO, planDetail);
-                        planDetail.setPlanId(planDetailSaveVO.getPlanId());
-                        planDetail.setParentId(planDetails.getId());
-                        planDetail.setGmtCreate(now);
-                        planDetail.setCreator(SysUserUtils.getCurrentPrincipleID());
-                        planDetail.setModifier(SysUserUtils.getCurrentPrincipleID());
-                        planDetail.setGmtModified(now);
-                        planDetailList.add(planDetail);
+            List<HospitalPlanDetailSaveVO> data = planDetailSave.getPlanDetailSub();
+            if (ListUtil.isNotEmpty(data)) {
+                // List<PlanDetail> planDetailList = new ArrayList<>();
+                //再保存子类第二层
+                for (HospitalPlanDetailSaveVO planDetailVO : data) {
+                    if (planDetailVO.getCode() != null) {
+                        PlanDetail planDetail2 = new PlanDetail();
+                        BeanUtil.copyProperties(planDetailVO, planDetail2);
+                        planDetail2.setPlanId(planDetailSaveVO.getPlanId());
+                        planDetail2.setParentId(planDetails.getId());
+                        planDetail2.setGmtCreate(now);
+                        planDetail2.setCreator(UserUtils.getCurrentPrincipleID());
+                        planDetail2.setModifier(UserUtils.getCurrentPrincipleID());
+                        planDetail2.setGmtModified(now);
+                        planDetailService.save(planDetail2);
+                        List<HospitalPlanDetailSaveVO> data3 = planDetailVO.getPlanDetailSub();
+                        if (ListUtil.isNotEmpty(data3)) {
+                            List<PlanDetail> planDetailList = new ArrayList<>();
+                            //最后保存子类第三层
+                            for (HospitalPlanDetailSaveVO planDetail : data3) {
+                                if (planDetail.getCode() != null) {
+                                    PlanDetail planDetailVO3 = new PlanDetail();
+                                    BeanUtil.copyProperties(planDetail, planDetailVO3);
+                                    planDetailVO3.setPlanId(planDetailSaveVO.getPlanId());
+                                    planDetailVO3.setParentId(planDetail2.getId());
+                                    planDetailVO3.setGmtCreate(now);
+                                    planDetailVO3.setCreator(UserUtils.getCurrentPrincipleID());
+                                    planDetailVO3.setModifier(UserUtils.getCurrentPrincipleID());
+                                    planDetailVO3.setGmtModified(now);
+                                    planDetailList.add(planDetailVO3);
+                                }
+                            }
+                            res = planDetailService.saveBatch(planDetailList);
+                        }
                     }
                 }
-                res = planDetailService.saveBatch(planDetailList);
+                // res = planDetailService.saveBatch(planDetailList);
             }
         }
 

+ 26 - 27
src/main/java/com/diagbot/facade/PlanFacade.java

@@ -29,7 +29,6 @@ import com.diagbot.vo.HospitalPlanVO;
 import com.diagbot.vo.HospitalSetVO;
 import com.diagbot.vo.PlanDetailCancelVO;
 import com.diagbot.vo.PlanDetailSaveVO;
-import com.diagbot.vo.PlanDetailSubSaveVO;
 import com.diagbot.vo.PlanRevStopVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -145,21 +144,32 @@ public class PlanFacade extends PlanServiceImpl {
                 HospitalPlanDetailSaveVO dataNew = new HospitalPlanDetailSaveVO();
                 BeanUtil.copyProperties(data, dataNew);
                 dataNew.setPlanId(planId);
-                List<PlanDetailSubSaveVO> planDetailSubNew = new ArrayList<>();
-                List<PlanDetailSubSaveVO> planDetailSub = data.getPlanDetailSub();
-                if (ListUtil.isNotEmpty(planDetailSub)) {
-                    for (PlanDetailSubSaveVO dataSub : planDetailSub) {
-                        PlanDetailSubSaveVO dataSubNew = new PlanDetailSubSaveVO();
+                List<HospitalPlanDetailSaveVO> planDetailSubNew2 = new ArrayList<>();
+                List<HospitalPlanDetailSaveVO> planDetailSub2 = data.getPlanDetailSub();
+                if (ListUtil.isNotEmpty(planDetailSub2)) {
+                    for (HospitalPlanDetailSaveVO dataSub : planDetailSub2) {
+                        List<HospitalPlanDetailSaveVO> planDetailSubNew3 = new ArrayList<>();
+                        List<HospitalPlanDetailSaveVO> planDetailSub3 = dataSub.getPlanDetailSub();
+                        if (ListUtil.isNotEmpty(planDetailSub3)) {
+                            for (HospitalPlanDetailSaveVO dataSub3 : planDetailSub3) {
+                                HospitalPlanDetailSaveVO dataSubNew3 = new HospitalPlanDetailSaveVO();
+                                BeanUtil.copyProperties(dataSub3, dataSubNew3);
+                                dataSubNew3.setPlanId(planId);
+                                planDetailSubNew3.add(dataSubNew3);
+                            }
+                        }
+                        HospitalPlanDetailSaveVO dataSubNew = new HospitalPlanDetailSaveVO();
                         BeanUtil.copyProperties(dataSub, dataSubNew);
                         dataSubNew.setPlanId(planId);
-                        planDetailSubNew.add(dataSubNew);
+                        dataSubNew.setPlanDetailSub(planDetailSubNew3);
+                        planDetailSubNew2.add(dataSubNew);
                     }
-                    dataNew.setPlanDetailSub(planDetailSubNew);
+                    dataNew.setPlanDetailSub(planDetailSubNew2);
+
                 }
                 planDetailParentNew.add(dataNew);
             }
         }
-
         planDetailSaveVO.setPlanDetailParent(planDetailParentNew);
         res = sysSetFacade.savePlanDetail(planDetailSaveVO);
         return res;
@@ -179,29 +189,18 @@ public class PlanFacade extends PlanServiceImpl {
             // 获取明细信息
             List<PlanDetailDTO> PlanDetailDatas = sysSetFacade.getByPlanIds(ids);
             List<PlanDetailDTO> sysSetInfoData = BeanUtil.listCopyTo(PlanDetailDatas, PlanDetailDTO.class);
-            List<PlanDetailDTO> planDetailParent = new ArrayList<>();//父级数据
-            List<PlanDetailDTO> planDetailSub = new ArrayList<>();//子级数据
-            //分离数据,-1分父级菜单
-            for (PlanDetailDTO dataDeta : sysSetInfoData) {
-                if (dataDeta.getParentId() == (-1)) {
-                    planDetailParent.add(dataDeta);
-                } else {
-                    planDetailSub.add(dataDeta);
-                }
-            }
-            //把子级数据,放在父级下
-            Map<Long, List<PlanDetailDTO>> mapParentId = planDetailSub.stream().collect(Collectors.groupingBy(PlanDetailDTO::getParentId));
-            for (Long key : mapParentId.keySet()) {
-                for (PlanDetailDTO sysPlanInfos : planDetailParent) {
-                    if (sysPlanInfos.getId().equals(key)) {
-                        sysPlanInfos.setPlanDetails(mapParentId.get(key));
-                    }
+            //添加菜单信息
+            Map<Long, List<PlanDetailDTO>> menuMap = EntityUtil.makeEntityListMap(sysSetInfoData, "parentId");
+            List<PlanDetailDTO> menuRes = menuMap.get(-1L);
+            if (ListUtil.isNotEmpty(menuRes)) {
+                for (PlanDetailDTO bean : menuRes) {
+                    sysSetFacade.getSonMenu(bean, menuMap);
                 }
             }
 
             Map<Long, List<PlanDetailDTO>> map = new HashMap<>();
             // 获取所有用户开通的产品信息
-            map = EntityUtil.makeEntityListMap(planDetailParent, "planId");
+            map = EntityUtil.makeEntityListMap(menuRes, "planId");
             if (map.size() > 0) {
                 for (PlanInfoPageDTO planInfo : planInfos) {
                     List<PlanDetailDTO> planDetails = map.get(planInfo.getId());

+ 76 - 2
src/main/java/com/diagbot/facade/PushFacade.java

@@ -8,6 +8,7 @@ import com.diagbot.dto.DictionaryInfoDTO;
 import com.diagbot.dto.IndicationDTO;
 import com.diagbot.dto.PushBaseDTO;
 import com.diagbot.dto.PushDTO;
+import com.diagbot.dto.PushExtDTO;
 import com.diagbot.dto.PushPlanDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.TreatDTO;
@@ -55,6 +56,10 @@ public class PushFacade {
      * @param pushVO
      */
     public PushDTO push(PushVO pushVO) {
+        List<String> featureTypes = StringUtil.isNotBlank(pushVO.getFeatureType())
+                ? Arrays.asList(pushVO.getFeatureType().split(","))
+                : Lists.newArrayList();
+
         if (pushVO.getDiseaseName() != null
                 && StringUtil.isBlank(pushVO.getDiseaseName().getName())
                 && StringUtil.isBlank(pushVO.getDiseaseName().getUniqueName())) {
@@ -71,6 +76,7 @@ public class PushFacade {
         //------------------测试数据开始------------------
         //  PushDTO data = testDataPush();
         //------------------测试数据结束------------------
+
         //出参映射
         data = assembleFacade.assemblePushDTO(data, pushVO.getHospitalId());
         //是否有静态信息
@@ -80,7 +86,9 @@ public class PushFacade {
         }
         //一般治疗
         if (data != null) {
-            data.setTreat(retGeneraTreat(data, pushVO.getHospitalId()));
+            if (ListUtil.isNotEmpty(featureTypes) && featureTypes.contains("10")) {
+                data.setTreat(retGeneraTreat(data, pushVO.getHospitalId()));
+            }
         }
         return data;
     }
@@ -112,7 +120,7 @@ public class PushFacade {
         if (indicationDTO != null) {
             if (ListUtil.isNotEmpty(indicationDTO.getBillMsgList()) || ListUtil.isNotEmpty(indicationDTO.getHighRiskList())
                     || ListUtil.isNotEmpty(indicationDTO.getCriticalValList()) || ListUtil.isNotEmpty(indicationDTO.getOtherList()))
-            return mrFacade.createIndicationMr(indicationDTO);
+                return mrFacade.createIndicationMr(indicationDTO);
         }
         return "";
     }
@@ -135,6 +143,50 @@ public class PushFacade {
         return pushPlanDTO;
     }
 
+    /**
+     * 点击诊断推送
+     *
+     * @param pushVO
+     * @return
+     */
+    public PushExtDTO pushByDisease(PushVO pushVO) {
+        List<String> featureTypes = StringUtil.isNotBlank(pushVO.getFeatureType())
+                ? Arrays.asList(pushVO.getFeatureType().split(","))
+                : Lists.newArrayList();
+
+        if (pushVO.getDiseaseName() != null
+                && StringUtil.isBlank(pushVO.getDiseaseName().getName())
+                && StringUtil.isBlank(pushVO.getDiseaseName().getUniqueName())) {
+            pushVO.setDiseaseName(null);
+        }
+        SearchData searchData = new SearchData();
+        BeanUtil.copyProperties(pushVO, searchData);
+        //入参映射
+        searchData = assembleFacade.assembleData(searchData);
+        BeanUtil.copyProperties(searchData, pushVO);
+        RespDTO<PushExtDTO> resp = cdssCoreClient.pushByDisease(pushVO);
+        RespDTOUtil.respNGDeal(resp, "远程调用推理接口失败");
+        PushExtDTO data = resp.data;
+        PushDTO pushDTO = new PushDTO();
+        BeanUtil.copyProperties(data, pushDTO);
+
+        //出参映射
+        pushDTO = assembleFacade.assemblePushDTO(pushDTO, pushVO.getHospitalId());
+        //是否有静态信息
+        if (pushVO.getGetStaticKnowledge() != null
+                && pushVO.getGetStaticKnowledge().equals(1)) {
+            pushDTO = getStaticKnoledge(pushDTO);
+        }
+        //一般治疗
+        if (data != null) {
+            if (ListUtil.isNotEmpty(featureTypes) && featureTypes.contains("10")) {
+                data.setTreat(retGeneraTreat(data, pushVO.getHospitalId()));
+            }
+        }
+        BeanUtil.copyProperties(pushDTO, data);
+        return data;
+    }
+
     /**
      * 推理结果标志是否包含静态知识
      *
@@ -162,6 +214,12 @@ public class PushFacade {
                 }
             }
         }
+        if (ListUtil.isNotEmpty(pushDTO.getClickPosDis())) {
+            conceptBaseList.addAll(pushDTO.getClickPosDis());
+        }
+        if (ListUtil.isNotEmpty(pushDTO.getClickAffDis())) {
+            conceptBaseList.addAll(pushDTO.getClickAffDis());
+        }
         if (ListUtil.isNotEmpty(pushDTO.getMedicines())) {
             conceptBaseList.addAll(pushDTO.getMedicines());
         }
@@ -200,6 +258,22 @@ public class PushFacade {
                     }
                 }
             }
+            if (ListUtil.isNotEmpty(pushDTO.getClickPosDis())) {
+                pushDTO.getClickPosDis().forEach(item -> {
+                    item.setType(1);
+                    if (conceptDetailMap.containsKey(item.getName() + "_" + dicStaticTypeValNameMap.get("1"))) {
+                        item.setHasInfo(1);
+                    }
+                });
+            }
+            if (ListUtil.isNotEmpty(pushDTO.getClickAffDis())) {
+                pushDTO.getClickAffDis().forEach(item -> {
+                    item.setType(1);
+                    if (conceptDetailMap.containsKey(item.getName() + "_" + dicStaticTypeValNameMap.get("1"))) {
+                        item.setHasInfo(1);
+                    }
+                });
+            }
             if (ListUtil.isNotEmpty(pushDTO.getLis())) {
                 pushDTO.getLis().forEach(item -> {
                     item.setType(3);

+ 1 - 1
src/main/java/com/diagbot/vo/HospitalPlanDetailSaveVO.java

@@ -52,5 +52,5 @@ public class HospitalPlanDetailSaveVO {
      */
     private String remark;
 
-    private List<PlanDetailSubSaveVO> planDetailSub;
+    private List<HospitalPlanDetailSaveVO> planDetailSub;
 }

+ 23 - 0
src/main/java/com/diagbot/vo/KlRuleInfoSaveGroupVO.java

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: wangfeng
+ * @time: 2022-03-30 11:32
+ */
+@Setter
+@Getter
+public class KlRuleInfoSaveGroupVO {
+
+    private Integer groupType;//规则组别
+
+    private List<KlRuleInfoSaveSubVO> klRuleInfoSaveSub;//规则明细条目
+
+
+    private List<RuleStaticSubVO> ruleStatic;//关联静态知识
+}

+ 1 - 1
src/main/java/com/diagbot/vo/KlRuleInfoSaveVO.java

@@ -32,5 +32,5 @@ public class KlRuleInfoSaveVO {
         private String parLenName;
         private String parLenCode;*/
     private String modifier;
-    private List<KlRuleInfoSaveSubVO> klRuleInfoSaveSub;
+    private List<KlRuleInfoSaveGroupVO> klRuleInfoSaveGroup;
 }

+ 31 - 0
src/main/java/com/diagbot/vo/RuleQueryKeyVO.java

@@ -0,0 +1,31 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2021/12/30 13:21
+ */
+@Getter
+@Setter
+public class RuleQueryKeyVO {
+    @NotBlank(message = "医学标准术语不可为空")
+    private String libName;
+    @NotNull(message = "术语类型不可为空")
+    private Integer libType;
+    @NotNull(message = "规则类型不可为空")
+    private Integer ruleType;
+    //规则名称
+    private String description;
+    //基础医学标准术语
+    private String baseLibName;
+    //基础规则术语类型
+    private Integer baseLibType;
+    //关联静态信息名称
+    private String staticName;
+}

+ 29 - 0
src/main/java/com/diagbot/vo/RuleQueryVO.java

@@ -0,0 +1,29 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2021/12/30 13:21
+ */
+@Getter
+@Setter
+public class RuleQueryVO extends Page {
+    //医学标准术语
+    private String libName;
+    //术语类型
+    private Integer libType;
+    //规则类型
+    private Integer ruleType;
+    //规则名称
+    private String description;
+    //基础医学标准术语
+    private String baseLibName;
+    //基础规则术语类型
+    private Integer baseLibType;
+    //关联静态信息名称
+    private String staticName;
+}

+ 23 - 0
src/main/java/com/diagbot/vo/RuleStaticSubVO.java

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangfeng
+ * @time: 2022-03-30 11:32
+ */
+@Setter
+@Getter
+public class RuleStaticSubVO {
+    /**
+     * 静态信息概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 显示顺序
+     */
+    private Integer orderNo;
+}

+ 5 - 0
src/main/java/com/diagbot/vo/StaticKnowledgeIndexVO.java

@@ -32,4 +32,9 @@ public class StaticKnowledgeIndexVO {
      */
     @ApiModelProperty(hidden = true)
     private Integer hasInfo;
+
+    /**
+     * 去重id
+     */
+    private List<Long> notInIds;
 }

+ 1 - 1
src/main/java/com/diagbot/web/KlDictionaryConller.java

@@ -16,7 +16,7 @@ import java.util.Map;
 
 /**
  * @author wangfeng
- * @Description:
+ * @Description: 远程调用获取med_2021字典信息
  * @date 2021-03-17 13:14
  */
 @RestController

+ 30 - 0
src/main/java/com/diagbot/web/KlRuleController.java

@@ -6,12 +6,16 @@ import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.KlRuleByIdParDTO;
 import com.diagbot.dto.KlRuleInfoDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.RuleDTO;
+import com.diagbot.dto.RuleQueryDTO;
 import com.diagbot.facade.KlRuleFacade;
 import com.diagbot.vo.KlRuleByIdVO;
 import com.diagbot.vo.KlRuleInfoClearVO;
 import com.diagbot.vo.KlRuleInfoSaveVO;
 import com.diagbot.vo.KlRuleInfoVO;
 import com.diagbot.vo.KlRuleSatartOrdisaVO;
+import com.diagbot.vo.RuleQueryKeyVO;
+import com.diagbot.vo.RuleQueryVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -84,4 +88,30 @@ public class KlRuleController {
         return RespDTO.onSuc(klRuleFacade.startRuleInfos(klRuleSatartOrdisaVO));
     }
 
+    @ApiOperation(value = "查询所有有效的规则[by:gaodm]",
+            notes = "libName: 医学标准术语<br>" +
+                    "libType: 术语类型<br>" +
+                    "ruleType: 规则类型<br>" +
+                    "description: 规则名称<br>" +
+                    "baseLibType: 基础规则术语类型<br>" +
+                    "staticName: 关联静态信息名称")
+    @PostMapping("/getRulePage")
+    @SysLogger("getRulePage")
+    public RespDTO<Page<RuleQueryDTO>> getRulePage(@RequestBody RuleQueryVO ruleQueryVO) {
+        return RespDTO.onSuc(klRuleFacade.getRulePage(ruleQueryVO));
+    }
+
+    @ApiOperation(value = "根据录入内容查询有效规则的明细[by:zhoutg]",
+            notes = "libName: 医学标准术语<br>" +
+                    "libType: 术语类型<br>" +
+                    "ruleType: 规则类型<br>" +
+                    "description: 规则名称<br>" +
+                    "baseLibName: 基础医学标准术语<br>" +
+                    "baseLibType: 基础规则术语类型<br>" +
+                    "staticName: 关联静态信息名称")
+    @PostMapping("/getRuleDetail")
+    @SysLogger("getRuleDetail")
+    public RespDTO<RuleDTO> getRuleDetail(@RequestBody @Valid RuleQueryKeyVO ruleQueryKeyVO) {
+        return RespDTO.onSuc(klRuleFacade.getRuleDetail(ruleQueryKeyVO));
+    }
 }

+ 17 - 0
src/main/java/com/diagbot/web/PushController.java

@@ -4,6 +4,7 @@ import com.diagbot.annotation.SysLogger;
 import com.diagbot.annotation.TokenAuth;
 import com.diagbot.dto.IndicationDTO;
 import com.diagbot.dto.PushDTO;
+import com.diagbot.dto.PushExtDTO;
 import com.diagbot.dto.PushPlanDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.PushFacade;
@@ -83,4 +84,20 @@ public class PushController {
         PushPlanDTO pushPlanDTO = pushFacade.pushPlan(pushPlanVO);
         return RespDTO.onSuc(pushPlanDTO);
     }
+
+    @ApiOperation(value = "点击诊断推送API[zhoutg]", notes =
+            "diseaseName:点击诊断<br>" +
+                    "age:年龄<br>" +
+                    "sex:性别<br>" +
+                    "length:截取长度<br>" +
+                    "featureType 类型(多选必填),1:症状,4:查体结果,5:检验,6:检查," +
+                    "7:诊断,8:药品,9:手术,10:一般治疗, 12:量表,13:护理<br>" +
+                    "注意:11:管理评估,22:指标推送 这2个类型原5.0系统已占")
+    @PostMapping("/pushByDisease")
+    public RespDTO<PushExtDTO> pushByDisease(@RequestBody PushVO pushVO) {
+        pushVO.setGetStaticKnowledge(1);
+        PushExtDTO pushExtDTO = pushFacade.pushByDisease(pushVO);
+        return RespDTO.onSuc(pushExtDTO);
+    }
+
 }