Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/develop' into dev/auto_20211209

zhaops 3 gadi atpakaļ
vecāks
revīzija
33c1f2c619
48 mainītis faili ar 2105 papildinājumiem un 590 dzēšanām
  1. 8 0
      cdssman-service/src/main/java/com/diagbot/client/CdssCoreClient.java
  2. 12 0
      cdssman-service/src/main/java/com/diagbot/client/hystrix/CdssCoreHystrix.java
  3. 15 0
      cdssman-service/src/main/java/com/diagbot/dto/KlDiseaseDTO.java
  4. 28 0
      cdssman-service/src/main/java/com/diagbot/dto/RuleBaseDTO.java
  5. 24 0
      cdssman-service/src/main/java/com/diagbot/dto/RuleConditionDTO.java
  6. 9 29
      cdssman-service/src/main/java/com/diagbot/dto/RuleDTO.java
  7. 41 0
      cdssman-service/src/main/java/com/diagbot/dto/RuleGetDTO.java
  8. 19 0
      cdssman-service/src/main/java/com/diagbot/dto/RuleQueryDTO.java
  9. 12 0
      cdssman-service/src/main/java/com/diagbot/dto/StaticKnowledgeIndexDTO.java
  10. 20 5
      cdssman-service/src/main/java/com/diagbot/entity/KlDisease.java
  11. 0 427
      cdssman-service/src/main/java/com/diagbot/facade/ConceptInfoFacade.java
  12. 16 0
      cdssman-service/src/main/java/com/diagbot/facade/KlRuleFacade.java
  13. 20 20
      cdssman-service/src/main/java/com/diagbot/facade/MedRuleConvertFacade.java
  14. 2 2
      cdssman-service/src/main/java/com/diagbot/facade/RuleTestFacade.java
  15. 29 0
      cdssman-service/src/main/java/com/diagbot/facade/TermImportFacade.java
  16. 33 33
      cdssman-service/src/main/java/com/diagbot/facade/UnUsedMappingFacade.java
  17. 2 2
      cdssman-service/src/main/java/com/diagbot/mapper/KlRuleMapper.java
  18. 2 2
      cdssman-service/src/main/java/com/diagbot/service/KlRuleService.java
  19. 2 2
      cdssman-service/src/main/java/com/diagbot/service/impl/KlRuleServiceImpl.java
  20. 15 0
      cdssman-service/src/main/java/com/diagbot/vo/KlDiseaseVO.java
  21. 29 0
      cdssman-service/src/main/java/com/diagbot/vo/RuleQueryKeyVO.java
  22. 27 0
      cdssman-service/src/main/java/com/diagbot/vo/RuleQueryVO.java
  23. 3 0
      cdssman-service/src/main/java/com/diagbot/web/KlConceptController.java
  24. 29 2
      cdssman-service/src/main/java/com/diagbot/web/KlRuleController.java
  25. 3 0
      cdssman-service/src/main/resources/mapper/KlDiseaseMapper.xml
  26. 1 1
      cdssman-service/src/main/resources/mapper/KlRuleMapper.xml
  27. 2 2
      cdssman-service/src/test/java/com/diagbot/CodeGeneration.java
  28. 10 4
      common/pom.xml
  29. 57 20
      common/src/main/java/com/diagbot/util/AgeUtil.java
  30. 60 37
      common/src/main/java/com/diagbot/util/Cn2SpellUtil.java
  31. 20 0
      docs/043.20211220邵逸夫预问诊定制版/prec_init.sql
  32. 249 0
      prec-service/src/main/java/com/diagbot/dto/GetInquiryDetailSyfDTO.java
  33. 208 0
      prec-service/src/main/java/com/diagbot/dto/HisInquirySyfDTO.java
  34. 60 0
      prec-service/src/main/java/com/diagbot/dto/InquiryDetailFlatSyfDTO.java
  35. 20 0
      prec-service/src/main/java/com/diagbot/dto/RecordCheckSyfDTO.java
  36. 35 0
      prec-service/src/main/java/com/diagbot/dto/ScaleDTO.java
  37. 85 0
      prec-service/src/main/java/com/diagbot/entity/Scale.java
  38. 477 0
      prec-service/src/main/java/com/diagbot/facade/InquiryInfoSyfFacade.java
  39. 13 0
      prec-service/src/main/java/com/diagbot/facade/InquiryScaleFacade.java
  40. 16 0
      prec-service/src/main/java/com/diagbot/mapper/ScaleMapper.java
  41. 16 0
      prec-service/src/main/java/com/diagbot/service/ScaleService.java
  42. 20 0
      prec-service/src/main/java/com/diagbot/service/impl/ScaleServiceImpl.java
  43. 22 0
      prec-service/src/main/java/com/diagbot/vo/GetScaleVO.java
  44. 33 0
      prec-service/src/main/java/com/diagbot/vo/SaveInquiryScaleSyfVO.java
  45. 198 0
      prec-service/src/main/java/com/diagbot/vo/SaveInquirySyfVO.java
  46. 80 0
      prec-service/src/main/java/com/diagbot/web/InquiryInfoSYFController.java
  47. 21 0
      prec-service/src/main/resources/mapper/ScaleMapper.xml
  48. 2 2
      prec-service/src/test/java/com/diagbot/CodeGeneration.java

+ 8 - 0
cdssman-service/src/main/java/com/diagbot/client/CdssCoreClient.java

@@ -224,4 +224,12 @@ public interface CdssCoreClient {
     //在集合业务中,搜索术语
     @PostMapping("/klDisease/searchCollectionConceptVO")
     RespDTO<List<GetAllForRelationDTO>> searchCollectionConcept(SearchCollectionConceptVO searchCollectionConceptVO);
+
+    //查询所有有效的规则
+    @PostMapping("/klRule/getRulePage")
+    RespDTO<Page<RuleQueryDTO>> getRulePage(@RequestBody RuleQueryVO ruleQueryVO);
+
+    //根据录入内容查询有效规则的明细
+    @PostMapping("/klRule/getRuleDetail")
+    RespDTO<RuleDTO> getRuleDetail(@RequestBody @Valid RuleQueryKeyVO ruleQueryKeyVO);
 }

+ 12 - 0
cdssman-service/src/main/java/com/diagbot/client/hystrix/CdssCoreHystrix.java

@@ -308,4 +308,16 @@ public class CdssCoreHystrix implements CdssCoreClient {
         log.error("【hystrix】调用{}异常", "searchConceptRuleClass");
         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;
+    }
 }

+ 15 - 0
cdssman-service/src/main/java/com/diagbot/dto/KlDiseaseDTO.java

@@ -29,6 +29,21 @@ public class KlDiseaseDTO implements Serializable {
      */
     private String icd10Code;
 
+    /**
+     * 国临名称
+     */
+    private String guoname;
+
+    /**
+     * 国临编码
+     */
+    private String guocode;
+
+    /**
+     * 国临拼音
+     */
+    private String guospell;
+
     /**
      * 病程
      */

+ 28 - 0
cdssman-service/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 = "";
+}

+ 24 - 0
cdssman-service/src/main/java/com/diagbot/dto/RuleConditionDTO.java

@@ -0,0 +1,24 @@
+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" }, includeFieldNames = false)
+public class RuleConditionDTO {
+    private Integer hasSubCond;
+    private String ruleGroup;
+    private String msg;
+    private String description;
+    private List<RuleBaseDTO> ruleBaseDTOList = new ArrayList<>();
+}

+ 9 - 29
cdssman-service/src/main/java/com/diagbot/dto/RuleDTO.java

@@ -3,39 +3,19 @@ package com.diagbot.dto;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * @Description:
- * @Author:zhaops
- * @time: 2021/3/1 15:40
+ * @author: gaodm
+ * @time: 2021/2/3 16:34
  */
 @Getter
 @Setter
 public class RuleDTO {
-    private Long ruleOrderNo;
+    private String libName;
+    private Integer libType;
     private Integer ruleType;
-    private Integer ruleLibType;
-    private String ruleLibTypeName;
-    private String ruleLibName;
-    private Long ruleId;
-    private Long ruleConceptId;
-    private String ruleDescription;
-    private Integer hasSubCond;
-    private String ruleMsg;
-    private Integer groupType;
-    private Long ruleBaseId;
-    private String ruleBaseDescription;
-    private String ruleBaseEqOperator;
-    private String ruleBaseEqUnit;
-    private String ruleBaseEqValue;
-    private String ruleBaseMaxOperator;
-    private String ruleBaseMaxUnit;
-    private Double ruleBaseMaxValue;
-    private String ruleBaseMinOperator;
-    private String ruleBaseMinUnit;
-    private Double ruleBaseMinValue;
-    private Integer ruleBaseType;
-    private Long ruleBaseConceptId;
-    private String ruleBaseLibName;
-    private Integer ruleBaseLibType;
-    private String ruleBaseLibTypeName;
-}
+    private List<RuleConditionDTO> ruleConditionDTOList = new ArrayList<>();
+}

+ 41 - 0
cdssman-service/src/main/java/com/diagbot/dto/RuleGetDTO.java

@@ -0,0 +1,41 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/3/1 15:40
+ */
+@Getter
+@Setter
+public class RuleGetDTO {
+    private Long ruleOrderNo;
+    private Integer ruleType;
+    private Integer ruleLibType;
+    private String ruleLibTypeName;
+    private String ruleLibName;
+    private Long ruleId;
+    private Long ruleConceptId;
+    private String ruleDescription;
+    private Integer hasSubCond;
+    private String ruleMsg;
+    private Integer groupType;
+    private Long ruleBaseId;
+    private String ruleBaseDescription;
+    private String ruleBaseEqOperator;
+    private String ruleBaseEqUnit;
+    private String ruleBaseEqValue;
+    private String ruleBaseMaxOperator;
+    private String ruleBaseMaxUnit;
+    private Double ruleBaseMaxValue;
+    private String ruleBaseMinOperator;
+    private String ruleBaseMinUnit;
+    private Double ruleBaseMinValue;
+    private Integer ruleBaseType;
+    private Long ruleBaseConceptId;
+    private String ruleBaseLibName;
+    private Integer ruleBaseLibType;
+    private String ruleBaseLibTypeName;
+}

+ 19 - 0
cdssman-service/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;
+}

+ 12 - 0
cdssman-service/src/main/java/com/diagbot/dto/StaticKnowledgeIndexDTO.java

@@ -19,6 +19,18 @@ public class StaticKnowledgeIndexDTO {
      * 术语名称
      */
     private String name;
+    /**
+     * 编码
+     */
+    private String code;
+    /**
+     * 国临版编码
+     */
+    private String guocode;
+    /**
+     * 国临版名称
+     */
+    private String guoname;
     /**
      * 词性
      */

+ 20 - 5
cdssman-service/src/main/java/com/diagbot/entity/KlDisease.java

@@ -13,7 +13,7 @@ import java.util.Date;
  * </p>
  *
  * @author zhoutg
- * @since 2021-05-11
+ * @since 2022-03-03
  */
 @Data
 public class KlDisease implements Serializable {
@@ -66,6 +66,21 @@ public class KlDisease implements Serializable {
      */
     private String icd10Code;
 
+    /**
+     * 国临名称
+     */
+    private String guoname;
+
+    /**
+     * 国临编码
+     */
+    private String guocode;
+
+    /**
+     * 国临拼音
+     */
+    private String guospell;
+
     /**
      * 病程
      */
@@ -167,14 +182,14 @@ public class KlDisease implements Serializable {
     private String enName;
 
     /**
-     * 肿瘤细胞类型
+     * 形态学分类代码
      */
-    private String tumorCellType;
+    private String morphology;
 
     /**
-     * 形态学分类代码
+     * 肿瘤细胞类型
      */
-    private String morphology;
+    private String tumorCellType;
 
     /**
      * 备注

+ 0 - 427
cdssman-service/src/main/java/com/diagbot/facade/ConceptInfoFacade.java

@@ -1,46 +1,15 @@
 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.RespDTO;
-import com.diagbot.dto.StaticKnowledgeIndexDTO;
 import com.diagbot.entity.ConceptDetail;
 import com.diagbot.entity.ConceptInfo;
 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.UserUtils;
-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.StaticKnowledgeIndexVO;
 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;
 
 /**
@@ -50,15 +19,8 @@ import java.util.stream.Collectors;
  */
 @Component
 public class ConceptInfoFacade extends ConceptInfoServiceImpl {
-    @Autowired
-    private CdssCoreClient cdssCoreClient;
-    @Autowired
-    private DictionaryFacade dictionaryFacade;
     @Autowired
     private ConceptDetailFacade conceptDetailFacade;
-    @Autowired
-    @Qualifier("conceptDetailServiceImpl")
-    private ConceptDetailService conceptDetailService;
 
     /**
      * 获取全静态知识
@@ -84,393 +46,4 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
         });
         return infoList;
     }
-
-    /**
-     * 返回不带静态知识的检索结果
-     *
-     * @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())
-                        .in("name", conNameList)
-                        .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.getName().equals("检验")) {
-                    //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.getName().equals("检查")) {
-                    //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 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 conceptInfoPageVO
-     * @return
-     */
-    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 = UserUtils.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");
-        Map<String, Integer> dicStaticTypeNameValMap =
-                EntityUtil.makeMapWithKeyValue(dicStaticTypeList, "name", "val");
-        //术语类型转换
-        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 = UserUtils.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");
-        Map<String, Integer> dicStaticTypeNameValMap =
-                EntityUtil.makeMapWithKeyValue(dicStaticTypeList, "name", "val");
-        //术语类型转换
-        String typeName = convertTypeName(dicStaticTypeValNameMap.get(Integer.valueOf(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;
-    }
 }

+ 16 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlRuleFacade.java

@@ -7,6 +7,8 @@ import com.diagbot.client.UserServiceClient;
 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.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.KlRuleServiceImpl;
@@ -17,6 +19,8 @@ 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;
 
@@ -82,4 +86,16 @@ public class KlRuleFacade extends KlRuleServiceImpl {
         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;
+    }
 }

+ 20 - 20
cdssman-service/src/main/java/com/diagbot/facade/MedRuleConvertFacade.java

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.dto.BillMsg;
 import com.diagbot.dto.MedClassMedDTO;
-import com.diagbot.dto.RuleDTO;
+import com.diagbot.dto.RuleGetDTO;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.entity.KlRuleBase;
 import com.diagbot.entity.ResultRule;
@@ -68,7 +68,7 @@ public class MedRuleConvertFacade {
      */
     public List<ResultRule> billConvert(Long hospitalId, Long caseId) {
         List<ResultRule> retList = Lists.newLinkedList();
-        List<RuleDTO> groupList = Lists.newLinkedList();
+        List<RuleGetDTO> groupList = Lists.newLinkedList();
         List<ResultRule> inputList = Lists.newLinkedList();
         List<ResultRule> medicineList = Lists.newLinkedList();
         List<ResultRule> containsDiseaseList = Lists.newLinkedList();
@@ -118,7 +118,7 @@ public class MedRuleConvertFacade {
                 }));
             }
         }
-        List<RuleDTO> list = klRuleFacade.getRules(ruleVO);
+        List<RuleGetDTO> list = klRuleFacade.getRules(ruleVO);
 
         if (ListUtil.isEmpty(list)) {
             return retList;
@@ -142,30 +142,30 @@ public class MedRuleConvertFacade {
             list = highrisk_operation_distinct(list);
         }
 
-        Map<String, List<RuleDTO>> map = list
+        Map<String, List<RuleGetDTO>> map = list
                 .stream()
                 .collect(Collectors.groupingBy(k -> k.getRuleId() + "_" + k.getGroupType()));
 
         Long ruleOrderNo = 1L;
-        for (Map.Entry<String, List<RuleDTO>> entry : map.entrySet()) {
+        for (Map.Entry<String, List<RuleGetDTO>> entry : map.entrySet()) {
             //多个条件的痛ruleOrderNo
-            for (RuleDTO item : entry.getValue()) {
+            for (RuleGetDTO item : entry.getValue()) {
                 item.setRuleOrderNo(ruleOrderNo);
                 groupList.add(item);
             }
             ruleOrderNo++;
         }
         groupList = groupList.stream()
-                .sorted(Comparator.comparing(RuleDTO::getRuleOrderNo).thenComparing(RuleDTO::getGroupType))
+                .sorted(Comparator.comparing(RuleGetDTO::getRuleOrderNo).thenComparing(RuleGetDTO::getGroupType))
                 .collect(Collectors.toList());
 
-        Map<Long, List<RuleDTO>> groupMap = groupList
+        Map<Long, List<RuleGetDTO>> groupMap = groupList
                 .stream()
-                .collect(Collectors.groupingBy(RuleDTO::getRuleOrderNo));
-        for (Map.Entry<Long, List<RuleDTO>> entry : groupMap.entrySet()) {
+                .collect(Collectors.groupingBy(RuleGetDTO::getRuleOrderNo));
+        for (Map.Entry<Long, List<RuleGetDTO>> entry : groupMap.entrySet()) {
             Map<Integer, List<ResultRule>> tempMap = new HashMap<>();
             Integer num = 1;
-            for (RuleDTO record : entry.getValue()) {
+            for (RuleGetDTO record : entry.getValue()) {
                 System.out.println(FastJsonUtils.getBeanToJson(record));
                 List<ResultRule> tempList = Lists.newLinkedList();
 
@@ -786,8 +786,8 @@ public class MedRuleConvertFacade {
      * @param list
      * @return
      */
-    public List<RuleDTO> highrisk_operation_distinct(List<RuleDTO> list) {
-        List<RuleDTO> retList = Lists.newLinkedList();
+    public List<RuleGetDTO> highrisk_operation_distinct(List<RuleGetDTO> list) {
+        List<RuleGetDTO> retList = Lists.newLinkedList();
 
         if (ListUtil.isEmpty(list)) {
             return list;
@@ -799,7 +799,7 @@ public class MedRuleConvertFacade {
                 .collect(Collectors.toList()));
 
         //带子条件的规则
-        List<RuleDTO> listWithCond = list.stream()
+        List<RuleGetDTO> listWithCond = list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1))
                 .collect(Collectors.toList());
         if (ListUtil.isEmpty(listWithCond)) {
@@ -826,13 +826,13 @@ public class MedRuleConvertFacade {
                         + v.getEqValue() + "_"
                         + v.getEqUnit()));
 
-        Map<Long, List<RuleDTO>> ruleIdMap = listWithCond.stream()
-                .collect(Collectors.groupingBy(RuleDTO::getRuleId));
-        Map<Long, Map<String, RuleDTO>> baseNestMap = new HashMap<>();
+        Map<Long, List<RuleGetDTO>> ruleIdMap = listWithCond.stream()
+                .collect(Collectors.groupingBy(RuleGetDTO::getRuleId));
+        Map<Long, Map<String, RuleGetDTO>> baseNestMap = new HashMap<>();
         Map<Long, String> baseCondMap = new HashMap<>();
-        for (Map.Entry<Long, List<RuleDTO>> entry : ruleIdMap.entrySet()) {
-            Map<String, RuleDTO> subMap = new HashMap<>();
-            for (RuleDTO result : entry.getValue()) {
+        for (Map.Entry<Long, List<RuleGetDTO>> entry : ruleIdMap.entrySet()) {
+            Map<String, RuleGetDTO> subMap = new HashMap<>();
+            for (RuleGetDTO result : entry.getValue()) {
                 subMap.put(ruleBaseMap.get(result.getRuleBaseId()), result);
             }
             baseNestMap.put(entry.getKey(), subMap);

+ 2 - 2
cdssman-service/src/main/java/com/diagbot/facade/RuleTestFacade.java

@@ -4,7 +4,7 @@ import com.diagbot.aggregate.RuleTestAggregate;
 import com.diagbot.client.CdssCoreClient;
 import com.diagbot.dto.IndexBatchDTO;
 import com.diagbot.dto.RespDTO;
-import com.diagbot.dto.RuleDTO;
+import com.diagbot.dto.RuleGetDTO;
 import com.diagbot.entity.DiseaseConfig;
 import com.diagbot.entity.DrugConfig;
 import com.diagbot.entity.LisConfig;
@@ -241,7 +241,7 @@ public class RuleTestFacade {
     public void exportExcel(HttpServletResponse response, HospitalIdVO hospitalIdVO) {
         Long hospitalId = hospitalIdVO.getHospitalId();
 
-        List<RuleDTO> list = klRuleFacade.getRules(new RuleVO());
+        List<RuleGetDTO> list = klRuleFacade.getRules(new RuleVO());
 
         List<MappingConfigWrapper> lisConfigList = mappingConfigFacade.getListByHospitalIdAndType(hospitalId, ConceptTypeEnum.LisPack.getKey());
         List<MappingConfigWrapper> pacsConfigList = mappingConfigFacade.getListByHospitalIdAndType(hospitalId, ConceptTypeEnum.Pacs.getKey());

+ 29 - 0
cdssman-service/src/main/java/com/diagbot/facade/TermImportFacade.java

@@ -7,6 +7,7 @@ import com.diagbot.dto.ExportConceptAllDTO;
 import com.diagbot.dto.ExportConceptModeDTO;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.entity.KlConceptCommon;
+import com.diagbot.entity.KlDisease;
 import com.diagbot.entity.KlLexicon;
 import com.diagbot.entity.KlLibraryInfo;
 import com.diagbot.enums.IsDeleteEnum;
@@ -298,6 +299,7 @@ public class TermImportFacade {
             }
         }
         res = klLibraryInfoService.saveBatch(libraryInfosSub);
+        List<Long> conceptIds = new ArrayList<>();
         //年龄
         List<KlConceptCommon> conceptCommonList = new ArrayList<>();
         for (Map.Entry<String, ImportConceptAllVO> entry : conceptListMap.entrySet()) {
@@ -315,14 +317,41 @@ public class TermImportFacade {
                     conceptCommon.setGmtCreate(now);
                     conceptCommon.setGmtModified(now);
                     conceptCommonList.add(conceptCommon);
+                    conceptIds.add(klConcept.getId());
                 }
             }
 
 
         }
         res = klConceptCommonService.saveBatch(conceptCommonList);
+        //疾病表
+        if (ListUtil.isNotEmpty(conceptIds)) {
+            QueryWrapper<KlDisease> klDisease = new QueryWrapper<>();
+            klDisease.lambda().eq(KlDisease::getIsDeleted, IsDeleteEnum.N.getKey())
+                    .in(KlDisease::getConceptId, conceptIds);
+            List<KlDisease> list = klDiseaseFacade.list(klDisease);
+            List<Long> diseaseConceptId = list.stream().map(ac -> ac.getConceptId()).collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(diseaseConceptId)) {
+                conceptIds.retainAll(diseaseConceptId);
+            }
+            List<KlDisease> klDiseaseData = new ArrayList<>();
+            for (Long id : conceptIds) {
+                KlDisease data = new KlDisease();
+                data.setConceptId(id);
+                data.setCreator(UserUtils.getCurrentPrincipleID());
+                data.setModifier(UserUtils.getCurrentPrincipleID());
+                data.setGmtCreate(now);
+                data.setGmtModified(now);
+                klDiseaseData.add(data);
+            }
+
+            res = klDiseaseService.saveBatch(klDiseaseData);
+        }
+
+
     }
 
+
     public void exportTemplateAll(HttpServletResponse response) {
         //类型数据
         QueryWrapper<KlLexicon> klLexiconQuer = new QueryWrapper<>();

+ 33 - 33
cdssman-service/src/main/java/com/diagbot/facade/UnUsedMappingFacade.java

@@ -2,7 +2,7 @@
 package com.diagbot.facade;
 
 import com.diagbot.dto.MedClassMedDTO;
-import com.diagbot.dto.RuleDTO;
+import com.diagbot.dto.RuleGetDTO;
 import com.diagbot.enums.LexiconEnum;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.EntityUtil;
@@ -57,7 +57,7 @@ public class UnUsedMappingFacade {
      * @param list
      * @return
      */
-    public Map<String, List<String>> usedNames(List<RuleDTO> list) {
+    public Map<String, List<String>> usedNames(List<RuleGetDTO> list) {
         Map<String, List<String>> retMap = new HashMap<>();
 
         if (ListUtil.isEmpty(list)) {
@@ -65,31 +65,31 @@ public class UnUsedMappingFacade {
         }
         List<String> lisNames = list.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.LisName.getKey()) || i.getRuleLibType().equals(LexiconEnum.LisSubName.getKey()))
-                .map(RuleDTO::getRuleLibName)
+                .map(RuleGetDTO::getRuleLibName)
                 .collect(Collectors.toList());
         lisNames.addAll(list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.LisName.getKey()) || i.getRuleBaseLibType().equals(LexiconEnum.LisSubName.getKey())))
-                .map(RuleDTO::getRuleBaseLibName)
+                .map(RuleGetDTO::getRuleBaseLibName)
                 .collect(Collectors.toList()));
         lisNames = lisNames.stream().distinct().collect(Collectors.toList());
 
         List<String> pacsNames = list.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.PacsName.getKey()) || i.getRuleLibType().equals(LexiconEnum.PacsSubName.getKey()))
-                .map(RuleDTO::getRuleLibName)
+                .map(RuleGetDTO::getRuleLibName)
                 .collect(Collectors.toList());
         pacsNames.addAll(list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.PacsName.getKey()) || i.getRuleBaseLibType().equals(LexiconEnum.PacsSubName.getKey())))
-                .map(RuleDTO::getRuleBaseLibName)
+                .map(RuleGetDTO::getRuleBaseLibName)
                 .collect(Collectors.toList()));
         pacsNames = pacsNames.stream().distinct().collect(Collectors.toList());
 
         List<String> diseaseNames = list.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.Disease.getKey()))
-                .map(RuleDTO::getRuleLibName)
+                .map(RuleGetDTO::getRuleLibName)
                 .collect(Collectors.toList());
         diseaseNames.addAll(list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.Disease.getKey())))
-                .map(RuleDTO::getRuleBaseLibName)
+                .map(RuleGetDTO::getRuleBaseLibName)
                 .collect(Collectors.toList()));
         diseaseNames = diseaseNames.stream().distinct().collect(Collectors.toList());
 
@@ -99,8 +99,8 @@ public class UnUsedMappingFacade {
                 medClassMedList.stream().collect(Collectors.groupingBy(MedClassMedDTO::getMedClassLibName,
                         HashMap::new,
                         Collectors.mapping(MedClassMedDTO::getMedLibName, Collectors.toList())));
-        List<RuleDTO> medList = Lists.newLinkedList();
-        for (RuleDTO result : list) {
+        List<RuleGetDTO> medList = Lists.newLinkedList();
+        for (RuleGetDTO result : list) {
             if (result.getHasSubCond() != null && result.getHasSubCond().equals(1)) {
                 if (result.getRuleBaseLibType().equals(LexiconEnum.MedChemClass.getKey())
                         || result.getRuleBaseLibType().equals(LexiconEnum.MedZhiLiaoClass.getKey())
@@ -108,7 +108,7 @@ public class UnUsedMappingFacade {
                     List<String> medicines = medClassMedMap.get(result.getRuleBaseLibName());
                     if (ListUtil.isNotEmpty(medicines)) {
                         for (String med : medicines) {
-                            RuleDTO medResult = new RuleDTO();
+                            RuleGetDTO medResult = new RuleGetDTO();
                             BeanUtil.copyProperties(result, medResult);
                             medResult.setRuleBaseLibName(med);
                             medResult.setRuleBaseLibType(LexiconEnum.Medicine.getKey());
@@ -128,31 +128,31 @@ public class UnUsedMappingFacade {
 
         List<String> drugNames = medList.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.Medicine.getKey()))
-                .map(RuleDTO::getRuleLibName)
+                .map(RuleGetDTO::getRuleLibName)
                 .collect(Collectors.toList());
         drugNames.addAll(medList.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.Medicine.getKey())))
-                .map(RuleDTO::getRuleBaseLibName)
+                .map(RuleGetDTO::getRuleBaseLibName)
                 .collect(Collectors.toList()));
         drugNames = drugNames.stream().distinct().collect(Collectors.toList());
 
         List<String> operationNames = list.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.Operation.getKey()))
-                .map(RuleDTO::getRuleLibName)
+                .map(RuleGetDTO::getRuleLibName)
                 .collect(Collectors.toList());
         operationNames.addAll(list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.Operation.getKey())))
-                .map(RuleDTO::getRuleBaseLibName)
+                .map(RuleGetDTO::getRuleBaseLibName)
                 .collect(Collectors.toList()));
         operationNames = operationNames.stream().distinct().collect(Collectors.toList());
 
         List<String> transfusionNames = list.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.Transfusion.getKey()))
-                .map(RuleDTO::getRuleLibName)
+                .map(RuleGetDTO::getRuleLibName)
                 .collect(Collectors.toList());
         transfusionNames.addAll(list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.Transfusion.getKey())))
-                .map(RuleDTO::getRuleBaseLibName)
+                .map(RuleGetDTO::getRuleBaseLibName)
                 .collect(Collectors.toList()));
         transfusionNames = transfusionNames.stream().distinct().collect(Collectors.toList());
 
@@ -171,7 +171,7 @@ public class UnUsedMappingFacade {
      * @param list
      * @return
      */
-    public Map<String, List<Long>> usedConceptIds(List<RuleDTO> list) {
+    public Map<String, List<Long>> usedConceptIds(List<RuleGetDTO> list) {
         Map<String, List<Long>> retMap = new HashMap<>();
 
         if (ListUtil.isEmpty(list)) {
@@ -179,31 +179,31 @@ public class UnUsedMappingFacade {
         }
         List<Long> lisIds = list.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.LisName.getKey()) || i.getRuleLibType().equals(LexiconEnum.LisSubName.getKey()))
-                .map(RuleDTO::getRuleConceptId)
+                .map(RuleGetDTO::getRuleConceptId)
                 .collect(Collectors.toList());
         lisIds.addAll(list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.LisName.getKey()) || i.getRuleBaseLibType().equals(LexiconEnum.LisSubName.getKey())))
-                .map(RuleDTO::getRuleBaseConceptId)
+                .map(RuleGetDTO::getRuleBaseConceptId)
                 .collect(Collectors.toList()));
         lisIds = lisIds.stream().distinct().collect(Collectors.toList());
 
         List<Long> pacsIds = list.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.PacsName.getKey()) || i.getRuleLibType().equals(LexiconEnum.PacsSubName.getKey()))
-                .map(RuleDTO::getRuleConceptId)
+                .map(RuleGetDTO::getRuleConceptId)
                 .collect(Collectors.toList());
         pacsIds.addAll(list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.PacsName.getKey()) || i.getRuleBaseLibType().equals(LexiconEnum.PacsSubName.getKey())))
-                .map(RuleDTO::getRuleBaseConceptId)
+                .map(RuleGetDTO::getRuleBaseConceptId)
                 .collect(Collectors.toList()));
         pacsIds = pacsIds.stream().distinct().collect(Collectors.toList());
 
         List<Long> diseaseIds = list.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.Disease.getKey()))
-                .map(RuleDTO::getRuleConceptId)
+                .map(RuleGetDTO::getRuleConceptId)
                 .collect(Collectors.toList());
         diseaseIds.addAll(list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.Disease.getKey())))
-                .map(RuleDTO::getRuleBaseConceptId)
+                .map(RuleGetDTO::getRuleBaseConceptId)
                 .collect(Collectors.toList()));
         diseaseIds = diseaseIds.stream().distinct().collect(Collectors.toList());
 
@@ -213,8 +213,8 @@ public class UnUsedMappingFacade {
                 medClassMedList.stream().collect(Collectors.groupingBy(MedClassMedDTO::getMedClassLibName,
                         HashMap::new,
                         Collectors.mapping(MedClassMedDTO::getMedLibName, Collectors.toList())));
-        List<RuleDTO> medList = Lists.newLinkedList();
-        for (RuleDTO result : list) {
+        List<RuleGetDTO> medList = Lists.newLinkedList();
+        for (RuleGetDTO result : list) {
             if (result.getHasSubCond() != null && result.getHasSubCond().equals(1)) {
                 if (result.getRuleBaseLibType().equals(LexiconEnum.MedChemClass.getKey())
                         || result.getRuleBaseLibType().equals(LexiconEnum.MedZhiLiaoClass.getKey())
@@ -222,7 +222,7 @@ public class UnUsedMappingFacade {
                     List<String> medicines = medClassMedMap.get(result.getRuleBaseLibName());
                     if (ListUtil.isNotEmpty(medicines)) {
                         for (String med : medicines) {
-                            RuleDTO medResult = new RuleDTO();
+                            RuleGetDTO medResult = new RuleGetDTO();
                             BeanUtil.copyProperties(result, medResult);
                             medResult.setRuleBaseLibName(med);
                             medResult.setRuleBaseLibType(LexiconEnum.Medicine.getKey());
@@ -242,31 +242,31 @@ public class UnUsedMappingFacade {
 
         List<Long> drugIds = medList.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.Medicine.getKey()))
-                .map(RuleDTO::getRuleConceptId)
+                .map(RuleGetDTO::getRuleConceptId)
                 .collect(Collectors.toList());
         drugIds.addAll(medList.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.Medicine.getKey())))
-                .map(RuleDTO::getRuleBaseConceptId)
+                .map(RuleGetDTO::getRuleBaseConceptId)
                 .collect(Collectors.toList()));
         drugIds = drugIds.stream().distinct().collect(Collectors.toList());
 
         List<Long> operationIds = list.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.Operation.getKey()))
-                .map(RuleDTO::getRuleConceptId)
+                .map(RuleGetDTO::getRuleConceptId)
                 .collect(Collectors.toList());
         operationIds.addAll(list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.Operation.getKey())))
-                .map(RuleDTO::getRuleBaseConceptId)
+                .map(RuleGetDTO::getRuleBaseConceptId)
                 .collect(Collectors.toList()));
         operationIds = operationIds.stream().distinct().collect(Collectors.toList());
 
         List<Long> transfusionIds = list.stream()
                 .filter(i -> i.getRuleLibType().equals(LexiconEnum.Transfusion.getKey()))
-                .map(RuleDTO::getRuleConceptId)
+                .map(RuleGetDTO::getRuleConceptId)
                 .collect(Collectors.toList());
         transfusionIds.addAll(list.stream()
                 .filter(i -> i.getHasSubCond() != null && i.getHasSubCond().equals(1) && (i.getRuleBaseLibType().equals(LexiconEnum.Transfusion.getKey())))
-                .map(RuleDTO::getRuleBaseConceptId)
+                .map(RuleGetDTO::getRuleBaseConceptId)
                 .collect(Collectors.toList()));
         transfusionIds = transfusionIds.stream().distinct().collect(Collectors.toList());
 

+ 2 - 2
cdssman-service/src/main/java/com/diagbot/mapper/KlRuleMapper.java

@@ -1,6 +1,6 @@
 package com.diagbot.mapper;
 
-import com.diagbot.dto.RuleDTO;
+import com.diagbot.dto.RuleGetDTO;
 import com.diagbot.entity.KlRule;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.diagbot.vo.RuleVO;
@@ -16,5 +16,5 @@ import java.util.List;
  * @since 2021-03-01
  */
 public interface KlRuleMapper extends BaseMapper<KlRule> {
-    List<RuleDTO> getRules(RuleVO ruleVO);
+    List<RuleGetDTO> getRules(RuleVO ruleVO);
 }

+ 2 - 2
cdssman-service/src/main/java/com/diagbot/service/KlRuleService.java

@@ -1,7 +1,7 @@
 package com.diagbot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.diagbot.dto.RuleDTO;
+import com.diagbot.dto.RuleGetDTO;
 import com.diagbot.entity.KlRule;
 import com.diagbot.vo.RuleVO;
 
@@ -16,5 +16,5 @@ import java.util.List;
  * @since 2021-03-01
  */
 public interface KlRuleService extends IService<KlRule> {
-    List<RuleDTO> getRules(RuleVO ruleVO);
+    List<RuleGetDTO> getRules(RuleVO ruleVO);
 }

+ 2 - 2
cdssman-service/src/main/java/com/diagbot/service/impl/KlRuleServiceImpl.java

@@ -2,7 +2,7 @@ package com.diagbot.service.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.diagbot.dto.RuleDTO;
+import com.diagbot.dto.RuleGetDTO;
 import com.diagbot.entity.KlRule;
 import com.diagbot.mapper.KlRuleMapper;
 import com.diagbot.service.KlRuleService;
@@ -22,7 +22,7 @@ import java.util.List;
 @Service
 @DS("med")
 public class KlRuleServiceImpl extends ServiceImpl<KlRuleMapper, KlRule> implements KlRuleService {
-    public List<RuleDTO> getRules(RuleVO ruleVO) {
+    public List<RuleGetDTO> getRules(RuleVO ruleVO) {
         return baseMapper.getRules(ruleVO);
     }
 }

+ 15 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlDiseaseVO.java

@@ -25,6 +25,21 @@ public class KlDiseaseVO implements Serializable {
      */
     private String icd10Code;
 
+    /**
+     * 国临名称
+     */
+    private String guoname;
+
+    /**
+     * 国临编码
+     */
+    private String guocode;
+
+    /**
+     * 国临拼音
+     */
+    private String guospell;
+
     /**
      * 病程
      */

+ 29 - 0
cdssman-service/src/main/java/com/diagbot/vo/RuleQueryKeyVO.java

@@ -0,0 +1,29 @@
+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;
+}

+ 27 - 0
cdssman-service/src/main/java/com/diagbot/vo/RuleQueryVO.java

@@ -0,0 +1,27 @@
+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;
+}

+ 3 - 0
cdssman-service/src/main/java/com/diagbot/web/KlConceptController.java

@@ -72,6 +72,9 @@ public class KlConceptController {
                     "<br>" +
                     "【klDiseaseVO:疾病扩展信息】\n" +
                     "icd10Code:ICD10编号\n" +
+                    "guoname:国临名称\n" +
+                    "guocode:国临编码\n" +
+                    "guospell:国临拼音\n" +
                     "course:病程\n" +
                     "inducement:诱因\n" +
                     "foodProhibition:饮食禁忌\n" +

+ 29 - 2
cdssman-service/src/main/java/com/diagbot/web/KlRuleController.java

@@ -1,19 +1,21 @@
 package com.diagbot.web;
 
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.KlRuleByIdParDTO;
 import com.diagbot.dto.KlRuleInfoDTO;
 import com.diagbot.dto.RespDTO;
-import com.diagbot.enums.StatusEnum;
+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;
@@ -86,4 +88,29 @@ public class KlRuleController {
         return RespDTO.onSuc(klRuleFacade.startRuleInfos(klRuleSatartOrdisaVO));
     }
 
+    @ApiOperation(value = "查询所有有效的规则[by:gaodm]",
+            notes = "libName: 医学标准术语<br>" +
+                    "libType: 术语类型<br>" +
+                    "ruleType: 规则类型<br>" +
+                    "description: 规则名称<br>" +
+                    "baseLibName: 基础医学标准术语<br>" +
+                    "baseLibType: 基础规则术语类型")
+    @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: 基础规则术语类型")
+    @PostMapping("/getRuleDetail")
+    @SysLogger("getRuleDetail")
+    public RespDTO<RuleDTO> getRuleDetail(@RequestBody @Valid RuleQueryKeyVO ruleQueryKeyVO) {
+        return RespDTO.onSuc(klRuleFacade.getRuleDetail(ruleQueryKeyVO));
+    }
 }

+ 3 - 0
cdssman-service/src/main/resources/mapper/KlDiseaseMapper.xml

@@ -13,6 +13,9 @@
         <result column="concept_id" property="conceptId" />
         <result column="dept_id" property="deptId" />
         <result column="icd10_code" property="icd10Code" />
+        <result column="guoname" property="guoname" />
+        <result column="guocode" property="guocode" />
+        <result column="guospell" property="guospell" />
         <result column="course" property="course" />
         <result column="inducement" property="inducement" />
         <result column="food_prohibition" property="foodProhibition" />

+ 1 - 1
cdssman-service/src/main/resources/mapper/KlRuleMapper.xml

@@ -18,7 +18,7 @@
         <result column="msg" property="msg" />
     </resultMap>
 
-    <select id="getRules" resultType="com.diagbot.dto.RuleDTO">
+    <select id="getRules" resultType="com.diagbot.dto.RuleGetDTO">
         SELECT
         t1.rule_type AS ruleType,
         t1.lib_type AS ruleLibType,

+ 2 - 2
cdssman-service/src/test/java/com/diagbot/CodeGeneration.java

@@ -49,14 +49,14 @@ public class CodeGeneration {
         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
         dsc.setUsername("root");
         dsc.setPassword("lantone");
-        dsc.setUrl("jdbc:mysql://192.168.2.236:3306/cdss?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8");
+        dsc.setUrl("jdbc:mysql://192.168.2.236:3306/med_2021?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8");
         mpg.setDataSource(dsc);
 
         // 策略配置
         StrategyConfig strategy = new StrategyConfig();
         //strategy.setTablePrefix(new String[] { "test" });// 此处可以修改为您的表前缀
         strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
-        strategy.setInclude(new String[] { "tran_hospital_relation"}); // 需要生成的表
+        strategy.setInclude(new String[] { "kl_disease"}); // 需要生成的表
 
         strategy.setSuperServiceClass(null);
         strategy.setSuperServiceImplClass(null);

+ 10 - 4
common/pom.xml

@@ -107,11 +107,17 @@
             <scope>compile</scope>
         </dependency>
 
+<!--        <dependency>-->
+<!--            <groupId>com.belerweb</groupId>-->
+<!--            <artifactId>pinyin4j</artifactId>-->
+<!--            <version>2.5.1</version>-->
+<!--            <scope>compile</scope>-->
+<!--        </dependency>-->
+
         <dependency>
-            <groupId>com.belerweb</groupId>
-            <artifactId>pinyin4j</artifactId>
-            <version>2.5.1</version>
-            <scope>compile</scope>
+            <groupId>com.github.promeg</groupId>
+            <artifactId>tinypinyin</artifactId>
+            <version>2.0.3</version>
         </dependency>
 
         <dependency>

+ 57 - 20
common/src/main/java/com/diagbot/util/AgeUtil.java

@@ -20,9 +20,10 @@ public class AgeUtil {
      */
     public static Double convertAge(String ageStr) {
         try {
+            String year = "", month = "", day = "";
             // 防止程序出错
             if (StringUtil.isEmpty(ageStr)) {
-                return 20.0;
+                return 1.0;
             }
             // 数值,当成年龄处理
             if (isNumbers(ageStr)) {
@@ -32,30 +33,44 @@ public class AgeUtil {
             if (ageDay(ageStr)) {
                 return getConvertDouble(ageStr, 1, 365);
             }
+            // X±日、X±天、X日±、X天±
+            if (ageSymbolDay(ageStr)) {
+                return getConvertDouble(ageStr, 2, 365);
+            }
             // X岁
             if (ageYear(ageStr)) {
                 return Double.parseDouble(ageStr.substring(0, ageStr.length() - 1));
             }
             // 3岁7个月 | 3岁7月
-            if (ageSuiYue(ageStr)) {
-                String[] ageArr = new String[2];
-                int indexSui = ageStr.indexOf("岁");
-                ageArr[0] = ageStr.substring(0, indexSui);
+            if (ageYearMonth(ageStr)) {
+                int indexYear = ageStr.indexOf("岁");
+                year = ageStr.substring(0, indexYear);
                 if (ageStr.endsWith("个月")) { // 3岁7个月
-                    ageArr[1] = ageStr.substring(indexSui + 1, ageStr.indexOf("个月"));
+                    month = ageStr.substring(indexYear + 1, ageStr.indexOf("个月"));
                 } else { // 3岁7月
-                    ageArr[1] = ageStr.substring(indexSui + 1, ageStr.indexOf("月"));
+                    month = ageStr.substring(indexYear + 1, ageStr.indexOf("月"));
                 }
-                return Double.parseDouble(ageArr[0]) + getHalfUp(Double.parseDouble(ageArr[1]) / 12);
+                return Double.parseDouble(year) + getHalfUp(Double.parseDouble(month) / 12);
             }
             // X月|X个月
-            if (ageYue(ageStr)) {
+            if (ageMonth(ageStr)) {
                 if (ageStr.endsWith("个月")) {
                     return getConvertDouble(ageStr, 2, 12);
                 } else {
                     return getConvertDouble(ageStr, 1, 12);
                 }
             }
+            // X月Y天|X个月Y天
+            if (ageMonthDay(ageStr)) {
+                if (ageStr.contains("个月")) {
+                    month = ageStr.substring(0, ageStr.indexOf("个月"));
+                    day = ageStr.substring(ageStr.indexOf("个月") + 2, ageStr.indexOf("天"));
+                } else {
+                    month = ageStr.substring(0, ageStr.indexOf("月"));
+                    day = ageStr.substring(ageStr.indexOf("月") + 1, ageStr.indexOf("天"));
+                }
+                return getHalfUp((Double.parseDouble(month) +  (Double.parseDouble(day) / 30))/ (12));
+            }
             // X小时|时
             if (ageHour(ageStr)) {
                 if (ageStr.endsWith("小时")) {
@@ -93,9 +108,9 @@ public class AgeUtil {
             }
         } catch (Exception e) {
             e.printStackTrace();
-            return 20.0;
+            return 1.0;
         }
-        return 20.0;
+        return 1.0;
     }
 
     /**
@@ -132,29 +147,51 @@ public class AgeUtil {
     }
 
     /**
-     * 判断年龄字符串:x月|x个月
+     * 判断年龄字符串:X月|X个月
      *
      * @param str
      * @return
      */
-    public static boolean ageYue(String str) {
+    public static boolean ageMonth(String str) {
         String regex = NUMBER_REGEX + "(个)?月";
         return str.matches(regex);
     }
 
     /**
-     * 判断年龄字符串:x天|x日
+     * 判断年龄字符串:X月Y天|X个月Y天
+     *
+     * @param str
+     * @return
+     */
+    public static boolean ageMonthDay(String str) {
+        String regex = NUMBER_REGEX + "(个)?月" + NUMBER_REGEX + "天";
+        return str.matches(regex);
+    }
+
+    /**
+     * 判断年龄字符串:X天|X日
      *
      * @param str
      * @return
      */
     public static boolean ageDay(String str) {
-        String regex = NUMBER_REGEX + "[天|日]";
+        String regex = NUMBER_REGEX + "[天日]";
+        return str.matches(regex);
+    }
+
+    /**
+     * 判断年龄字符串:X±日、X±天、X日±、X天±
+     *
+     * @param str
+     * @return
+     */
+    public static boolean ageSymbolDay(String str) {
+        String regex = NUMBER_REGEX + "[+-][天日]" + "|" +  NUMBER_REGEX + "[天日][+-]";
         return str.matches(regex);
     }
 
     /**
-     * 判断年龄字符串:x岁
+     * 判断年龄字符串:X
      *
      * @param str
      * @return
@@ -165,7 +202,7 @@ public class AgeUtil {
     }
 
     /**
-     * 判断年龄字符串:x小时|时
+     * 判断年龄字符串:X小时|时
      *
      * @param str
      * @return
@@ -181,7 +218,7 @@ public class AgeUtil {
      * @param str
      * @return
      */
-    public static boolean ageSuiYue(String str) {
+    public static boolean ageYearMonth(String str) {
         String regex = "[0-9]{1,3}岁[0-9]{1,2}个{0,1}月";
         return str.matches(regex);
     }
@@ -198,7 +235,7 @@ public class AgeUtil {
     }
 
     public static void main(String[] args) {
-        String s = "50.天";
-        System.out.println(ageDay(s));
+        String s = "天+";
+        System.out.println(convertAge(s));
     }
 }

+ 60 - 37
common/src/main/java/com/diagbot/util/Cn2SpellUtil.java

@@ -1,9 +1,10 @@
 package com.diagbot.util;
 
-import net.sourceforge.pinyin4j.PinyinHelper;
-import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
-import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
-import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import com.github.promeg.pinyinhelper.Pinyin;
+import com.github.promeg.pinyinhelper.PinyinMapDict;
+
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @Description: 汉字转拼音
@@ -12,6 +13,31 @@ import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  */
 public class Cn2SpellUtil {
 
+    private Cn2SpellUtil() {
+
+    }
+
+    //调用类时自动加载字典
+    static{
+        init();
+    }
+
+    //字典设置
+    public static void init() {
+        Pinyin.init(Pinyin.newConfig()
+                .with(new PinyinMapDict() {
+                    @Override
+                    public Map<String, String[]> mapping() {
+                        HashMap<String, String[]> map = new HashMap<String, String[]>();
+                        map.put("", new String[] { "HE" });
+                        map.put("𬌗", new String[] { "HE" });
+                        map.put("", new String[] { "MU" });
+                        map.put("𧿹", new String[] { "MU" });
+                        return map;
+                    }
+                }));
+    }
+
     /**
      * 汉字转换位汉语拼音首字母,英文字符不变
      *
@@ -20,20 +46,15 @@ public class Cn2SpellUtil {
      */
     public static String converterToFirstSpell(String chines) {
         String pinyinName = "";
-        char[] nameChar = chines.toCharArray();
-        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
-        defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
-        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
-        for (int i = 0; i < nameChar.length; i++) {
-            if (nameChar[i] > 128) {
-                try {
-                    pinyinName +=
-                            PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);
-                } catch (Exception e) {
-                    e.printStackTrace();
+        String pinyinRes = Pinyin.toPinyin(chines, "*××*");
+        if (StringUtil.isNotBlank(pinyinRes)){
+            String[] nameChar = pinyinRes.split("\\*××\\*");
+            for (int i = 0; i < nameChar.length; i++) {
+                if (StringUtil.isNotBlank(nameChar[i])) {
+                    pinyinName += nameChar[i].charAt(0);
+                } else {
+                    pinyinName += nameChar[i];
                 }
-            } else {
-                pinyinName += nameChar[i];
             }
         }
         return pinyinName;
@@ -46,7 +67,7 @@ public class Cn2SpellUtil {
      * @return 拼音(大写)
      */
     public static String converterToSpell(String chines) {
-        return converterToSpellByCaseType(chines, HanyuPinyinCaseType.UPPERCASE);
+        return converterToSpellByCaseType(chines, 1);
     }
 
     /**
@@ -56,7 +77,7 @@ public class Cn2SpellUtil {
      * @return 拼音(小写)
      */
     public static String converterToSpellLow(String chines) {
-        return converterToSpellByCaseType(chines, HanyuPinyinCaseType.LOWERCASE);
+        return converterToSpellByCaseType(chines, 2);
     }
 
     /**
@@ -65,29 +86,31 @@ public class Cn2SpellUtil {
      * @param chines 汉字
      * @return 拼音
      */
-    private static String converterToSpellByCaseType(String chines, HanyuPinyinCaseType caseType) {
+    private static String converterToSpellByCaseType(String chines, Integer caseType) {
         String pinyinName = "";
-        char[] nameChar = chines.toCharArray();
-        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
-        defaultFormat.setCaseType(caseType);
-        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
-        for (int i = 0; i < nameChar.length; i++) {
-            if (nameChar[i] > 128) {
-                try {
-                    pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0];
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            } else {
-                pinyinName += nameChar[i];
-            }
+        if (caseType.equals(2)) {
+            pinyinName = Pinyin.toPinyin(chines, "").toLowerCase();
+        } else {
+            pinyinName = Pinyin.toPinyin(chines, "");
         }
         return pinyinName;
     }
 
     public static void main(String[] args) {
-        System.out.println(converterToFirstSpell("欢迎来到Java世界"));
-        System.out.println(converterToSpell("欢迎来到Java世界"));
-        System.out.println(converterToSpellLow("欢迎来到Java世界"));
+        System.out.println("================首字母================");
+        System.out.println(Cn2SpellUtil.converterToFirstSpell("欢迎来到Java世界"));
+        System.out.println(Cn2SpellUtil.converterToFirstSpell("11β-羟化酶缺陷症#11-羟化酶缺陷"));
+        System.out.println(Cn2SpellUtil.converterToFirstSpell("-"));
+        System.out.println(Cn2SpellUtil.converterToFirstSpell("𬌗-𧿹"));
+        System.out.println("================大写全拼================");
+        System.out.println(Cn2SpellUtil.converterToSpell("欢迎来到Java世界"));
+        System.out.println(Cn2SpellUtil.converterToSpell("11β-羟化酶缺陷症#11-羟化酶缺陷"));
+        System.out.println(Cn2SpellUtil.converterToSpell("-"));
+        System.out.println(Cn2SpellUtil.converterToSpell("𬌗-𧿹"));
+        System.out.println("================小写全拼================");
+        System.out.println(Cn2SpellUtil.converterToSpellLow("欢迎来到Java世界"));
+        System.out.println(Cn2SpellUtil.converterToSpellLow("11β-羟化酶缺陷症#11-羟化酶缺陷"));
+        System.out.println(Cn2SpellUtil.converterToSpellLow("-"));
+        System.out.println(Cn2SpellUtil.converterToSpellLow("𬌗-𧿹"));
     }
 }

+ 20 - 0
docs/043.20211220邵逸夫预问诊定制版/prec_init.sql

@@ -0,0 +1,20 @@
+USE `sys-prec`;
+
+DROP TABLE IF EXISTS `prec_scale`;
+CREATE TABLE `prec_scale` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `inquiry_id` bigint(20) NOT NULL COMMENT '问诊记录id',
+  `scale_name` varchar(255) NOT NULL DEFAULT '' COMMENT '量表名称',
+  `score` varchar(255) NOT NULL DEFAULT '' COMMENT '得分',
+  `result` varchar(255) NOT NULL DEFAULT '' COMMENT '结果',
+  `data_json` text COMMENT 'json数据',
+  `remark` varchar(300) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `inquiry_id` (`inquiry_id`) USING BTREE,
+  KEY `scale_name` (`scale_name`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='量表';

+ 249 - 0
prec-service/src/main/java/com/diagbot/dto/GetInquiryDetailSyfDTO.java

@@ -0,0 +1,249 @@
+package com.diagbot.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: rengb
+ * @time: 2018/11/19 18:56
+ */
+@ApiModel(value="病历详情接口出参")
+@Getter
+@Setter
+public class GetInquiryDetailSyfDTO {
+	
+	/**
+	 * 病历id
+	 */
+	@ApiModelProperty(value="病历id")
+	private Long id;
+	
+	/**
+	 * 就诊日期
+	 */
+	@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+	@ApiModelProperty(value="就诊日期")
+	private Date inquiryDate;
+	
+	/**
+	 * 就诊时间
+	 */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+	@ApiModelProperty(value="就诊时间")
+	private Date inquiryTime;
+
+    /**
+     * 病历创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value="病历创建时间")
+    private Date gmtCreate;
+
+    /**
+     * 病历更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value="病历更新时间")
+    private Date gmtModified;
+	
+	/**
+     * 医院id
+     */
+	@ApiModelProperty(value="医院id")
+    private Long hospitalId;
+
+    /**
+     * 医院编码
+     */
+    @ApiModelProperty(value="医院编码")
+    private String hospitalCode;
+
+    /**
+     * 医院名称
+     */
+    @ApiModelProperty(value="医院名称")
+    private String hospitalName;
+
+    /**
+     * 子医院id
+     */
+    @ApiModelProperty(value="子医院id")
+    private Long sonHospitalId;
+
+    /**
+     * 子医院code
+     */
+    @ApiModelProperty(value="子医院code")
+    private String sonHospitalCode;
+
+    /**
+     * 子医院名称
+     */
+    @ApiModelProperty(value="子医院名称")
+    private String sonHospitalName;
+
+    /**
+     * 医院科室id
+     */
+    @ApiModelProperty(value="医院科室id")
+    private Long hospitalDeptId;
+
+    /**
+     * 医院科室编码
+     */
+    @ApiModelProperty(value="医院科室编码")
+    private String hospitalDeptCode;
+
+    /**
+     * 医院科室名称
+     */
+    @ApiModelProperty(value="医院科室名称")
+    private String hospitalDeptName;
+
+    /**
+     * 医生id
+     */
+    @ApiModelProperty(value="医生id")
+    private Long doctorId;
+
+    /**
+     * 医生编码
+     */
+    @ApiModelProperty(value="医生编码")
+    private String doctorCode;
+
+    /**
+     * 医生姓名
+     */
+    @ApiModelProperty(value="医生姓名")
+    private String doctorName;
+
+    /**
+     * 患者id
+     */
+    @ApiModelProperty(value="患者id")
+    private Long patientId;
+
+    /**
+     * 患者编号
+     */
+    @ApiModelProperty(value="患者编号")
+    private String patientCode;
+
+    /**
+     * 患者姓名
+     */
+    @ApiModelProperty(value="患者姓名")
+    private String patientName;
+
+    /**
+     * 患者性别:1男2女
+     */
+    @ApiModelProperty(value="患者性别:1男2女")
+    private Integer patientSex;
+    
+    /**
+     * 患者性别信息
+     */
+    @ApiModelProperty(value="患者性别信息")
+    private String patientSexMsg;
+
+    /**
+     * 患者联系电话
+     */
+    @ApiModelProperty(value="患者联系电话")
+    private String patientPhone;
+
+    /**
+     * 患者出生日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @ApiModelProperty(value="患者出生日期")
+    private Date patientBirthday;
+    
+    /**
+     * 患者年龄
+     */
+	@ApiModelProperty(value="患者年龄")
+    private Integer patientAge;
+
+    /**
+     * 患者病历号
+     */
+    @ApiModelProperty(value="患者病历号")
+    private String patientIdNo;
+
+    /**
+     * 就诊序列号
+     */
+    @ApiModelProperty(value="就诊序列号")
+    private String inquiryCode;
+
+    /**
+     * 就诊状态(0待接诊,1接诊中,2完成接诊)
+     */
+    @ApiModelProperty(value="就诊状态(0待接诊,1接诊中,2完成接诊)")
+    private Integer regVisitedState;
+
+    /**
+     * 分类(1:门诊,2:住院)
+     */
+    @ApiModelProperty(value="分类(1:门诊,2:住院)")
+    private Integer type;
+
+    /**
+     * 内容JSON字符串
+     */
+    @ApiModelProperty(value="内容JSON字符串")
+    private String dataJson;
+    
+    /**
+     * 主诉
+     */
+    @ApiModelProperty(value="主诉")
+    private String chiefComplaint;
+    
+    /**
+     * 现病史
+     */
+    @ApiModelProperty(value="现病史")
+    private String xbs;
+    
+    /**
+     * 其他史
+     */
+    @ApiModelProperty(value="其他史")
+    private String qts;
+    
+    /**
+     * 补充内容
+     */
+    @ApiModelProperty(value="补充内容")
+    private String supplement;
+	
+    /**
+     * 儿童体质辨识测试
+     */
+    @ApiModelProperty(value="儿童体质辨识测试")
+    private String physicalRes;
+	
+    /**
+     * 最近一次报告图
+     */
+    @ApiModelProperty(value="最近一次报告图")
+	private List<GetInquiryDetailImgDTO> imageList;
+
+    /**
+     * 量表结果
+     */
+    @ApiModelProperty(value = "量表结果")
+    private List<ScaleDTO> scaleList;
+	
+}

+ 208 - 0
prec-service/src/main/java/com/diagbot/dto/HisInquirySyfDTO.java

@@ -0,0 +1,208 @@
+package com.diagbot.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2018/11/19 18:56
+ */
+@ApiModel(value="历史病历列表接口出参")
+@Getter
+@Setter
+public class HisInquirySyfDTO {
+	
+	/**
+	 * 病历id
+	 */
+	@ApiModelProperty(value="病历id")
+	private Long id;
+	
+	/**
+	 * 创建时间
+	 */
+	private Date gmtCreate;
+
+	/**
+	 * 修改时间
+	 */
+	private Date gmtModified;
+	
+	/**
+	 * 就诊日期
+	 */
+	@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+	@ApiModelProperty(value="就诊日期")
+	private Date inquiryDate;
+	
+	/**
+	 * 就诊时间
+	 */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+	@ApiModelProperty(value="就诊时间")
+	private Date inquiryTime;
+	
+	/**
+     * 医院id
+     */
+	@ApiModelProperty(value="医院id")
+    private Long hospitalId;
+
+    /**
+     * 医院编码
+     */
+    @ApiModelProperty(value="医院编码")
+    private String hospitalCode;
+
+    /**
+     * 医院名称
+     */
+    @ApiModelProperty(value="医院名称")
+    private String hospitalName;
+
+    /**
+     * 子医院id
+     */
+    @ApiModelProperty(value="子医院id")
+    private Long sonHospitalId;
+
+    /**
+     * 子医院code
+     */
+    @ApiModelProperty(value="子医院code")
+    private String sonHospitalCode;
+
+    /**
+     * 子医院名称
+     */
+    @ApiModelProperty(value="子医院名称")
+    private String sonHospitalName;
+
+    /**
+     * 医院科室id
+     */
+    @ApiModelProperty(value="医院科室id")
+    private Long hospitalDeptId;
+
+    /**
+     * 医院科室编码
+     */
+    @ApiModelProperty(value="医院科室编码")
+    private String hospitalDeptCode;
+
+    /**
+     * 医院科室名称
+     */
+    @ApiModelProperty(value="医院科室名称")
+    private String hospitalDeptName;
+
+    /**
+     * 医生id
+     */
+    @ApiModelProperty(value="医生id")
+    private Long doctorId;
+
+    /**
+     * 医生编码
+     */
+    @ApiModelProperty(value="医生编码")
+    private String doctorCode;
+
+    /**
+     * 医生姓名
+     */
+    @ApiModelProperty(value="医生姓名")
+    private String doctorName;
+
+    /**
+     * 患者id
+     */
+    @ApiModelProperty(value="患者id")
+    private Long patientId;
+
+    /**
+     * 患者编号
+     */
+    @ApiModelProperty(value="患者编号")
+    private String patientCode;
+
+    /**
+     * 患者姓名
+     */
+    @ApiModelProperty(value="患者姓名")
+    private String patientName;
+
+    /**
+     * 患者性别:1男2女
+     */
+    @ApiModelProperty(value="患者性别:1男2女")
+    private Integer patientSex;
+    
+    /**
+     * 患者性别信息
+     */
+    @ApiModelProperty(value="患者性别信息")
+    private String patientSexMsg;
+
+    /**
+     * 患者联系电话
+     */
+    @ApiModelProperty(value="患者联系电话")
+    private String patientPhone;
+
+    /**
+     * 患者出生日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @ApiModelProperty(value="患者出生日期")
+    private Date patientBirthday;
+    
+    /**
+     * 患者年龄
+     */
+	@ApiModelProperty(value="患者年龄")
+    private Integer patientAge;
+
+    /**
+     * 患者病历号
+     */
+    @ApiModelProperty(value="患者病历号")
+    private String patientIdNo;
+
+    /**
+     * 就诊序列号
+     */
+    @ApiModelProperty(value="就诊序列号")
+    private String inquiryCode;
+
+    /**
+     * 就诊状态(0待接诊,1接诊中,2完成接诊)
+     */
+    @ApiModelProperty(value="就诊状态(0待接诊,1接诊中,2完成接诊)")
+    private Integer regVisitedState;
+
+    /**
+     * 分类(1:门诊,2:住院)
+     */
+    @ApiModelProperty(value="分类(1:门诊,2:住院)")
+    private Integer type;
+
+    /**
+     * 内容JSON字符串
+     */
+    @ApiModelProperty(value="内容JSON字符串")
+    private String dataJson;
+
+    /**
+     * 详情
+     */
+    @ApiModelProperty(value="详情")
+	private InquiryDetailFlatSyfDTO detail;
+
+}

+ 60 - 0
prec-service/src/main/java/com/diagbot/dto/InquiryDetailFlatSyfDTO.java

@@ -0,0 +1,60 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2019/12/3 13:44
+ */
+@Getter
+@Setter
+public class InquiryDetailFlatSyfDTO {
+
+    /**
+     * 主诉
+     */
+    @ApiModelProperty(value = "主诉")
+    private String chiefComplaint;
+
+    /**
+     * 现病史
+     */
+    @ApiModelProperty(value = "现病史")
+    private String xbs;
+
+    /**
+     * 其他史
+     */
+    @ApiModelProperty(value = "其他史")
+    private String qts;
+
+    /**
+     * 补充内容
+     */
+    @ApiModelProperty(value = "补充内容")
+    private String supplement;
+
+    /**
+     * 儿童体质辨识测试
+     */
+    @ApiModelProperty(value = "儿童体质辨识测试")
+    private String physicalRes;
+
+    /**
+     * 最近一次报告图
+     */
+    @ApiModelProperty(value = "最近一次报告图")
+    private List<GetInquiryDetailImgDTO> imageList;
+
+    /**
+     * 量表结果
+     */
+    @ApiModelProperty(value = "量表结果")
+    private List<ScaleDTO> scaleList;
+
+}

+ 20 - 0
prec-service/src/main/java/com/diagbot/dto/RecordCheckSyfDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+/**
+ * @Description:
+ * @author: 周铁钢
+ * @time: 2018/11/19 18:56
+ */
+@Data
+public class RecordCheckSyfDTO {
+
+	// 预问诊条数
+	private long detailCount = 0;
+	// 量表条数
+	private long scaleCount = 0;
+	// 儿童体质辨识表
+	private long physicalCount = 0;
+		
+}

+ 35 - 0
prec-service/src/main/java/com/diagbot/dto/ScaleDTO.java

@@ -0,0 +1,35 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+/**
+ * <p>
+ * 量表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-12-20
+ */
+@Data
+public class ScaleDTO {
+
+    /**
+     * 量表名称
+     */
+    private String scaleName;
+
+    /**
+     * 得分
+     */
+    private String score;
+
+    /**
+     * 结果
+     */
+    private String result;
+
+    /**
+     * json数据
+     */
+    private String dataJson;
+}

+ 85 - 0
prec-service/src/main/java/com/diagbot/entity/Scale.java

@@ -0,0 +1,85 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 量表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-12-20
+ */
+@TableName("prec_scale")
+@Data
+public class Scale implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 问诊记录id
+     */
+    private Long inquiryId;
+
+    /**
+     * 量表名称
+     */
+    private String scaleName;
+
+    /**
+     * 得分
+     */
+    private String score;
+
+    /**
+     * 结果
+     */
+    private String result;
+
+    /**
+     * json数据
+     */
+    private String dataJson;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 477 - 0
prec-service/src/main/java/com/diagbot/facade/InquiryInfoSyfFacade.java

@@ -0,0 +1,477 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.client.TranServiceClient;
+import com.diagbot.dto.GetInquiryDetailImgDTO;
+import com.diagbot.dto.GetInquiryDetailSyfDTO;
+import com.diagbot.dto.HisInquirySyfDTO;
+import com.diagbot.dto.InquiryDetailFlatSyfDTO;
+import com.diagbot.dto.RecordCheckSyfDTO;
+import com.diagbot.dto.SaveInquiryDTO;
+import com.diagbot.dto.ScaleDTO;
+import com.diagbot.entity.InquiryDetail;
+import com.diagbot.entity.InquiryEvaluator;
+import com.diagbot.entity.InquiryInfo;
+import com.diagbot.entity.InquiryReport;
+import com.diagbot.entity.Scale;
+import com.diagbot.enums.InquiryQuotedTypeEnum;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.SexEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.impl.InquiryDetailServiceImpl;
+import com.diagbot.service.impl.InquiryInfoServiceImpl;
+import com.diagbot.service.impl.InquiryReportServiceImpl;
+import com.diagbot.service.impl.ScaleServiceImpl;
+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.vo.GetInquiryDetailVO;
+import com.diagbot.vo.GetScaleVO;
+import com.diagbot.vo.HisInquirysVO;
+import com.diagbot.vo.RecordCheckVO;
+import com.diagbot.vo.SaveInquirySyfVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author: zhoutg
+ * @time: 2018/8/6 9:11
+ */
+@Component
+public class InquiryInfoSyfFacade extends InquiryInfoServiceImpl {
+
+    @Value("${imageUrl.prefix}")
+    private String imageUrlPrefix;
+
+    @Autowired
+    private InquiryDetailFacade inquiryDetailFacade;
+    @Autowired
+    private InquiryReportFacade inquiryReportFacade;
+    @Autowired
+    private InquiryEvaluatorFacade inquiryEvaluatorFacade;
+    @Autowired
+    @Qualifier("inquiryDetailServiceImpl")
+    private InquiryDetailServiceImpl inquiryDetailServiceImpl;
+    @Autowired
+    @Qualifier("inquiryReportServiceImpl")
+    private InquiryReportServiceImpl inquiryReportServiceImpl;
+    @Autowired
+    @Qualifier("scaleServiceImpl")
+    private ScaleServiceImpl scaleServiceImpl;
+    @Autowired
+    private TranServiceClient tranServiceClient;
+    @Autowired
+    private InquiryQuoteFacade inquiryQuoteFacade;
+    @Autowired
+    private SysSetFacade sysSetFacade;
+    @Autowired
+    private InquiryScaleFacade inquiryScaleFacade;
+
+    /**
+     * 问诊记录保存
+     *
+     * @param saveInquirySyfVO
+     * @return
+     */
+    public SaveInquiryDTO saveInquiry(SaveInquirySyfVO saveInquirySyfVO) {
+        SaveInquiryDTO saveInquiryDTO = new SaveInquiryDTO();
+        Date now = DateUtil.now();
+
+        QueryWrapper<InquiryInfo> inquiryInfoQe = new QueryWrapper<>();
+        inquiryInfoQe.eq("is_deleted", IsDeleteEnum.N.getKey());
+        inquiryInfoQe.eq("hospital_dept_id", saveInquirySyfVO.getHospitalDeptId());
+        inquiryInfoQe.eq("hospital_id", saveInquirySyfVO.getHospitalId());
+        inquiryInfoQe.eq("patient_id", saveInquirySyfVO.getPatientId());
+        inquiryInfoQe.eq("is_quoted", 0);
+        inquiryInfoQe.eq(saveInquirySyfVO.getSonHospitalId() != null,
+                "son_hospital_id", saveInquirySyfVO.getSonHospitalId());
+        inquiryInfoQe.eq(saveInquirySyfVO.getDoctorId() != null,
+                "doctor_id", saveInquirySyfVO.getDoctorId());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(saveInquirySyfVO.getInquiryCode()),
+                "inquiry_code", saveInquirySyfVO.getInquiryCode());
+        inquiryInfoQe.orderByDesc("gmt_modified");
+        InquiryInfo inquiryInfo = this.getOne(inquiryInfoQe, false);
+
+        if (inquiryInfo == null) {
+            inquiryInfo = new InquiryInfo();
+            inquiryInfo.setGmtCreate(now);
+        } else {
+            QueryWrapper<InquiryDetail> inquiryDetailQe = new QueryWrapper<>();
+            inquiryDetailQe.eq("inquiry_id", inquiryInfo.getId());
+            inquiryDetailFacade.remove(inquiryDetailQe);
+
+            QueryWrapper<InquiryReport> inquiryReportQe = new QueryWrapper<>();
+            inquiryReportQe.eq("inquiry_id", inquiryInfo.getId());
+            inquiryReportFacade.remove(inquiryReportQe);
+
+            QueryWrapper<Scale> scaleQe = new QueryWrapper<>();
+            scaleQe.eq("inquiry_id", inquiryInfo.getId());
+            inquiryScaleFacade.remove(scaleQe);
+        }
+
+        BeanUtil.copyProperties(saveInquirySyfVO, inquiryInfo);
+        inquiryInfo.setGmtModified(now);
+        saveOrUpdate(inquiryInfo);
+
+        Long inquiryId = inquiryInfo.getId();
+
+        // 问诊明细
+        List<InquiryDetail> inquiryDetailList = BeanUtil.listCopyTo(saveInquirySyfVO.getDetailList(), InquiryDetail.class);
+        inquiryDetailList.forEach(i -> {
+            i.setInquiryId(inquiryId);
+            i.setGmtCreate(now);
+            i.setGmtModified(now);
+        });
+        inquiryDetailServiceImpl.saveBatch(inquiryDetailList);
+
+        // 治疗报告
+        List<InquiryReport> inquiryReportList = BeanUtil.listCopyTo(saveInquirySyfVO.getReportList(), InquiryReport.class);
+        inquiryReportList.forEach(i -> {
+            i.setInquiryId(inquiryId);
+            i.setNarrowImage("0");
+            i.setGmtCreate(now);
+            i.setGmtModified(now);
+        });
+        inquiryReportServiceImpl.saveBatch(inquiryReportList);
+
+        // 量表
+        List<Scale> scaleList = BeanUtil.listCopyTo(saveInquirySyfVO.getScaleList(), Scale.class);
+        scaleList.forEach(i -> {
+            i.setInquiryId(inquiryId);
+            i.setGmtCreate(now);
+            i.setGmtModified(now);
+        });
+        scaleServiceImpl.saveBatch(scaleList);
+
+        saveInquiryDTO.setInquiryId(inquiryId);
+        return saveInquiryDTO;
+    }
+
+    /**
+     * 问诊记录检查确认
+     *
+     * @param recordCheckVO
+     * @return
+     */
+    public RecordCheckSyfDTO recordCheck(RecordCheckVO recordCheckVO) {
+        RecordCheckSyfDTO recordCheckSyfDTO = new RecordCheckSyfDTO();
+        QueryWrapper<InquiryInfo> inquiryInfoQe = new QueryWrapper<>();
+        inquiryInfoQe.eq("is_deleted", IsDeleteEnum.N.getKey());
+        inquiryInfoQe.eq("hospital_id", recordCheckVO.getHospitalId());
+        inquiryInfoQe.eq("hospital_dept_id", recordCheckVO.getHospitalDeptId());
+        inquiryInfoQe.eq("doctor_id", recordCheckVO.getDoctorId());
+        inquiryInfoQe.eq("patient_id", recordCheckVO.getPatientId());
+        inquiryInfoQe.eq("inquiry_code", recordCheckVO.getInquiryCode());
+        InquiryInfo inquiryInfo = this.getOne(inquiryInfoQe, false);
+
+        if (inquiryInfo == null) {
+            return recordCheckSyfDTO;
+        } else {
+            QueryWrapper<InquiryDetail> inquiryDetailQe = new QueryWrapper<>();
+            inquiryDetailQe.eq("inquiry_id", inquiryInfo.getId());
+            recordCheckSyfDTO.setDetailCount(inquiryDetailFacade.count(inquiryDetailQe));
+
+            QueryWrapper<InquiryEvaluator> inquiryEvaluatorQe = new QueryWrapper<>();
+            inquiryEvaluatorQe.eq("inquiry_id", inquiryInfo.getId());
+            recordCheckSyfDTO.setPhysicalCount(inquiryEvaluatorFacade.count(inquiryEvaluatorQe));
+
+            QueryWrapper<Scale> inquiryScaleQe = new QueryWrapper<>();
+            inquiryScaleQe.eq("inquiry_id", inquiryInfo.getId());
+            recordCheckSyfDTO.setScaleCount(inquiryScaleFacade.count(inquiryScaleQe));
+        }
+        return recordCheckSyfDTO;
+    }
+
+    /**
+     * 历史病历列表
+     *
+     * @param hisInquirysVO
+     * @return
+     */
+    public List<HisInquirySyfDTO> hisInquirys(HisInquirysVO hisInquirysVO) {
+        if (StringUtil.isBlank(hisInquirysVO.getHospitalCode())) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "医院信息(医院id或者医院编码)必传!");
+        }
+
+        QueryWrapper<InquiryInfo> inquiryInfoQe = new QueryWrapper<InquiryInfo>();
+        inquiryInfoQe.eq("is_deleted", IsDeleteEnum.N.getKey());
+        inquiryInfoQe.eq(!sysSetFacade.isQuoteShow(hisInquirysVO.getHospitalCode()),
+                "is_quoted", InquiryQuotedTypeEnum.Disable.getKey());
+        inquiryInfoQe.eq(hisInquirysVO.getHospitalId() != null,
+                "hospital_id", hisInquirysVO.getHospitalId());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(hisInquirysVO.getHospitalCode()),
+                "hospital_code", hisInquirysVO.getHospitalCode());
+
+        if (StringUtil.isNotBlank(hisInquirysVO.getSonHospitalCode())) {
+            inquiryInfoQe.and(qe ->
+                    qe.eq("son_hospital_code", hisInquirysVO.getSonHospitalCode())
+                            .or()
+                            .eq("son_hospital_code", "")
+                            .or()
+                            .isNull("son_hospital_code"));
+        }
+
+        inquiryInfoQe.eq(hisInquirysVO.getHospitalDeptId() != null,
+                "hospital_dept_id", hisInquirysVO.getHospitalDeptId());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(hisInquirysVO.getHospitalDeptCode()),
+                "hospital_dept_code", hisInquirysVO.getHospitalDeptCode());
+        inquiryInfoQe.eq(hisInquirysVO.getDoctorId() != null,
+                "doctor_id", hisInquirysVO.getDoctorId());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(hisInquirysVO.getDoctorCode()),
+                "doctor_code", hisInquirysVO.getDoctorCode());
+        inquiryInfoQe.eq(hisInquirysVO.getPatientId() != null,
+                "patient_id", hisInquirysVO.getPatientId());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(hisInquirysVO.getPatientCode()),
+                "patient_code", hisInquirysVO.getPatientCode());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(hisInquirysVO.getPatientIdNo()),
+                "patient_id_no", hisInquirysVO.getPatientIdNo());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(hisInquirysVO.getPatientName()),
+                "patient_name", hisInquirysVO.getPatientName());
+        inquiryInfoQe.eq(hisInquirysVO.getType() != null,
+                "type", hisInquirysVO.getType());
+        String day = DateUtil.formatDateTime(DateUtil.getFirstTimeOfDay(DateUtil.addDay(DateUtil.now(),
+                -hisInquirysVO.getDayLimit())));
+        inquiryInfoQe.ge("gmt_modified", day);
+
+        inquiryInfoQe.ge(hisInquirysVO.getStartDate() != null,
+                "gmt_create", hisInquirysVO.getStartDate());
+        inquiryInfoQe.le(hisInquirysVO.getEndDate() != null,
+                "gmt_create", hisInquirysVO.getEndDate());
+
+        if (hisInquirysVO.getOrderType() == null || hisInquirysVO.getOrderType() == 1) {
+            inquiryInfoQe.orderByDesc("gmt_modified");
+        } else if (hisInquirysVO.getOrderType() == 2) {
+            inquiryInfoQe.orderByAsc("gmt_modified");
+        } else if (hisInquirysVO.getOrderType() == 3) {
+            inquiryInfoQe.orderByDesc("inquiry_code");
+        } else if (hisInquirysVO.getOrderType() == 4) {
+            inquiryInfoQe.orderByAsc("inquiry_code");
+        } else {
+            inquiryInfoQe.orderByDesc("gmt_modified");
+        }
+
+        List<HisInquirySyfDTO> hisInquiryDTOList = BeanUtil.listCopyTo(list(inquiryInfoQe), HisInquirySyfDTO.class);
+        hisInquiryDTOList.forEach(i -> {
+            i.setPatientSexMsg(SexEnum.getName(i.getPatientSex()));
+            i.setInquiryDate(i.getGmtModified());
+            i.setInquiryTime(i.getGmtModified());
+            i.setPatientAge(DateUtil.yearCompare(i.getPatientBirthday(), DateUtil.now()));
+        });
+
+        if (ListUtil.isNotEmpty(hisInquiryDTOList) && hisInquirysVO.getIsHaveDetail() == 1) {
+            List<Long> inquiryIdList = hisInquiryDTOList.stream().map(i -> i.getId()).collect(Collectors.toList());
+
+            QueryWrapper<InquiryDetail> inquiryDetailQe = new QueryWrapper<>();
+            inquiryDetailQe.in("inquiry_id", inquiryIdList);
+            Map<Long, List<InquiryDetail>> inquiryDetailListMap = inquiryDetailFacade.list(inquiryDetailQe)
+                    .stream().collect(Collectors.groupingBy(InquiryDetail::getInquiryId));
+
+            QueryWrapper<InquiryReport> inquiryReportQe = new QueryWrapper<>();
+            inquiryReportQe.in("inquiry_id", inquiryIdList);
+            Map<Long, List<InquiryReport>> inquiryReportListMap = inquiryReportFacade.list(inquiryReportQe)
+                    .stream().collect(Collectors.groupingBy(InquiryReport::getInquiryId));
+
+            QueryWrapper<InquiryEvaluator> inquiryEvaluatorQe = new QueryWrapper<>();
+            inquiryEvaluatorQe.in("inquiry_id", inquiryIdList);
+            Map<Long, List<InquiryEvaluator>> inquiryEvaluatorListMap = inquiryEvaluatorFacade.list(inquiryEvaluatorQe)
+                    .stream().collect(Collectors.groupingBy(InquiryEvaluator::getInquiryId));
+
+            hisInquiryDTOList.forEach(i -> {
+                i.setDetail(getInquiryDetailFlat(inquiryDetailListMap.get(i.getId()),
+                        inquiryReportListMap.get(i.getId()),
+                        inquiryEvaluatorListMap.get(i.getId()), null));
+            });
+        }
+
+        return hisInquiryDTOList;
+    }
+
+    /**
+     * 病历详情
+     *
+     * @param getInquiryDetailVO
+     * @return
+     */
+    public GetInquiryDetailSyfDTO getInquiryDetail(GetInquiryDetailVO getInquiryDetailVO) {
+        if (StringUtil.isBlank(getInquiryDetailVO.getHospitalCode())) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "医院信息(医院id或者医院编码)必传!");
+        }
+        /*if (getInquiryDetailVO.getHospitalDeptId() == null && StringUtil.isBlank(getInquiryDetailVO.getHospitalDeptCode())) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "科室信息(科室id或者科室编码)必传!");
+        }
+        if (getInquiryDetailVO.getDoctorId() == null && StringUtil.isBlank(getInquiryDetailVO.getDoctorCode())) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "医生信息(医生id或者医生编码)必传!");
+        }*/
+        if (getInquiryDetailVO.getPatientId() == null
+                && StringUtil.isBlank(getInquiryDetailVO.getPatientCode())
+                && (StringUtil.isBlank(getInquiryDetailVO.getPatientIdNo())
+                || StringUtil.isBlank(getInquiryDetailVO.getPatientName()))) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "患者信息(患者id或者患者编码或者患者病历号)必传!");
+        }
+
+        QueryWrapper<InquiryInfo> inquiryInfoQe = new QueryWrapper<InquiryInfo>();
+        inquiryInfoQe.eq(getInquiryDetailVO.getInquiryId() != null,
+                "id", getInquiryDetailVO.getInquiryId());
+        inquiryInfoQe.eq("is_deleted", IsDeleteEnum.N.getKey());
+        inquiryInfoQe.eq(!sysSetFacade.isQuoteShow(getInquiryDetailVO.getHospitalCode()),
+                "is_quoted", InquiryQuotedTypeEnum.Disable.getKey());
+        inquiryInfoQe.eq(getInquiryDetailVO.getHospitalId() != null,
+                "hospital_id", getInquiryDetailVO.getHospitalId());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(getInquiryDetailVO.getHospitalCode()),
+                "hospital_code", getInquiryDetailVO.getHospitalCode());
+
+        if (StringUtil.isNotBlank(getInquiryDetailVO.getSonHospitalCode())) {
+            inquiryInfoQe.and(qe ->
+                    qe.eq("son_hospital_code", getInquiryDetailVO.getSonHospitalCode())
+                            .or()
+                            .eq("son_hospital_code", "")
+                            .or()
+                            .isNull("son_hospital_code"));
+        }
+
+        inquiryInfoQe.eq(getInquiryDetailVO.getHospitalDeptId() != null,
+                "hospital_dept_id", getInquiryDetailVO.getHospitalDeptId());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(getInquiryDetailVO.getHospitalDeptCode()),
+                "hospital_dept_code", getInquiryDetailVO.getHospitalDeptCode());
+        inquiryInfoQe.eq(getInquiryDetailVO.getDoctorId() != null,
+                "doctor_id", getInquiryDetailVO.getDoctorId());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(getInquiryDetailVO.getDoctorCode()),
+                "doctor_code", getInquiryDetailVO.getDoctorCode());
+        inquiryInfoQe.eq(getInquiryDetailVO.getPatientId() != null,
+                "patient_id", getInquiryDetailVO.getPatientId());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(getInquiryDetailVO.getPatientCode()),
+                "patient_code", getInquiryDetailVO.getPatientCode());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(getInquiryDetailVO.getPatientIdNo()),
+                "patient_id_no", getInquiryDetailVO.getPatientIdNo());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(getInquiryDetailVO.getPatientName()),
+                "patient_name", getInquiryDetailVO.getPatientName());
+        inquiryInfoQe.eq(StringUtil.isNotBlank(getInquiryDetailVO.getInquiryCode()),
+                "inquiry_code", getInquiryDetailVO.getInquiryCode());
+        String day = DateUtil.formatDateTime(DateUtil.getFirstTimeOfDay(DateUtil.addDay(DateUtil.now(),
+                -getInquiryDetailVO.getDayLimit())));
+        inquiryInfoQe.ge("gmt_modified", day);
+        inquiryInfoQe.orderByDesc("gmt_modified");
+
+        InquiryInfo inquiryInfo = this.getOne(inquiryInfoQe, false);
+        if (inquiryInfo == null) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该病历不存在!");
+        }
+
+        QueryWrapper<InquiryDetail> inquiryDetailQe = new QueryWrapper<>();
+        inquiryDetailQe.eq("inquiry_id", inquiryInfo.getId());
+        List<InquiryDetail> inquiryDetailList = inquiryDetailFacade.list(inquiryDetailQe);
+
+        QueryWrapper<InquiryReport> inquiryReportQe = new QueryWrapper<>();
+        inquiryReportQe.eq("inquiry_id", inquiryInfo.getId());
+        List<InquiryReport> inquiryReportList = inquiryReportFacade.list(inquiryReportQe);
+
+        QueryWrapper<InquiryEvaluator> inquiryEvaluatorQe = new QueryWrapper<>();
+        inquiryEvaluatorQe.eq("inquiry_id", inquiryInfo.getId());
+        inquiryEvaluatorQe.orderByDesc("gmt_modified");
+        inquiryEvaluatorQe.last("limit 0,1");
+        List<InquiryEvaluator> inquiryEvaluatorList = inquiryEvaluatorFacade.list(inquiryEvaluatorQe);
+
+        QueryWrapper<Scale> scaleQe = new QueryWrapper<>();
+        scaleQe.eq("inquiry_id", inquiryInfo.getId());
+        List<Scale> scaleList = inquiryScaleFacade.list(scaleQe);
+
+        GetInquiryDetailSyfDTO getInquiryDetailDTO = new GetInquiryDetailSyfDTO();
+        BeanUtil.copyProperties(inquiryInfo, getInquiryDetailDTO);
+        getInquiryDetailDTO.setPatientSexMsg(SexEnum.getName(inquiryInfo.getPatientSex()));
+        getInquiryDetailDTO.setInquiryDate(inquiryInfo.getGmtModified());
+        getInquiryDetailDTO.setInquiryTime(inquiryInfo.getGmtModified());
+        getInquiryDetailDTO.setPatientAge(DateUtil.yearCompare(inquiryInfo.getPatientBirthday(), DateUtil.now()));
+
+        BeanUtil.copyProperties(
+                getInquiryDetailFlat(inquiryDetailList, inquiryReportList, inquiryEvaluatorList, scaleList),
+                getInquiryDetailDTO);
+
+        return getInquiryDetailDTO;
+    }
+
+    /**
+     * 获取预问诊病历详情
+     *
+     * @param inquiryDetailList    病历明细
+     * @param inquiryReportList    报告图
+     * @param inquiryEvaluatorList 体质辨识
+     * @param scaleList            量表结果
+     * @return
+     */
+    private InquiryDetailFlatSyfDTO getInquiryDetailFlat(List<InquiryDetail> inquiryDetailList,
+                                                         List<InquiryReport> inquiryReportList,
+                                                         List<InquiryEvaluator> inquiryEvaluatorList,
+                                                         List<Scale> scaleList) {
+        InquiryDetailFlatSyfDTO inquiryDetailFlatSyfDTO = new InquiryDetailFlatSyfDTO();
+
+        if (ListUtil.isNotEmpty(inquiryDetailList)) {
+            Map<Integer, InquiryDetail> inquiryDetailMap
+                    = EntityUtil.makeEntityMap(inquiryDetailList, "type");
+            if (null != inquiryDetailMap.get(1)) {
+                inquiryDetailFlatSyfDTO.setChiefComplaint(inquiryDetailMap.get(1).getContentValue());
+            }
+            if (null != inquiryDetailMap.get(2)) {
+                inquiryDetailFlatSyfDTO.setXbs(inquiryDetailMap.get(2).getContentValue());
+            }
+            if (null != inquiryDetailMap.get(3)) {
+                inquiryDetailFlatSyfDTO.setQts(inquiryDetailMap.get(3).getContentValue());
+            }
+            if (null != inquiryDetailMap.get(4)) {
+                inquiryDetailFlatSyfDTO.setSupplement(inquiryDetailMap.get(4).getContentValue());
+            }
+        }
+        inquiryDetailFlatSyfDTO.setPhysicalRes(
+                ListUtil.isNotEmpty(inquiryEvaluatorList) ?
+                        inquiryEvaluatorList.stream()
+                                .max(Comparator.comparing(InquiryEvaluator::getGmtModified))
+                                .map(i -> i.getPhysicalRes())
+                                .get() :
+                        null
+        );
+        if (ListUtil.isNotEmpty(inquiryReportList)) {
+            inquiryReportList.stream()
+                    .sorted(Comparator.comparing(InquiryReport::getOrderNum))
+                    .forEach(inquiryReport -> {
+                        if (StringUtil.isNotBlank(inquiryReport.getOriginalImage())) {
+                            inquiryReport.setOriginalImage(imageUrlPrefix + inquiryReport.getOriginalImage());
+                        }
+                    });
+            inquiryDetailFlatSyfDTO.setImageList(BeanUtil.listCopyTo(inquiryReportList, GetInquiryDetailImgDTO.class));
+        }
+        if (ListUtil.isNotEmpty(scaleList)) {
+            inquiryDetailFlatSyfDTO.setScaleList(BeanUtil.listCopyTo(scaleList, ScaleDTO.class));
+        }
+        return inquiryDetailFlatSyfDTO;
+    }
+
+    /**
+     * 获取量表数据
+     *
+     * @param getScaleVO
+     * @return
+     */
+    public ScaleDTO getScale(GetScaleVO getScaleVO) {
+        ScaleDTO scaleDTO = new ScaleDTO();
+        Scale scale = inquiryScaleFacade.getOne(new QueryWrapper<Scale>().lambda()
+                .eq(Scale::getIsDeleted, IsDeleteEnum.N.getKey())
+                .eq(Scale::getInquiryId, getScaleVO.getInquiryId())
+                .eq(Scale::getScaleName, getScaleVO.getScaleName()), false);
+        if (scale == null) {
+            return null;
+        }
+        BeanUtil.copyProperties(scale, scaleDTO);
+        return scaleDTO;
+    }
+
+}

+ 13 - 0
prec-service/src/main/java/com/diagbot/facade/InquiryScaleFacade.java

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.ScaleServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author: zhoutg
+ * @time: 2018/8/6 9:11
+ */
+@Component
+public class InquiryScaleFacade extends ScaleServiceImpl {
+
+}

+ 16 - 0
prec-service/src/main/java/com/diagbot/mapper/ScaleMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.Scale;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 量表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-12-20
+ */
+public interface ScaleMapper extends BaseMapper<Scale> {
+
+}

+ 16 - 0
prec-service/src/main/java/com/diagbot/service/ScaleService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.Scale;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 量表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-12-20
+ */
+public interface ScaleService extends IService<Scale> {
+
+}

+ 20 - 0
prec-service/src/main/java/com/diagbot/service/impl/ScaleServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.Scale;
+import com.diagbot.mapper.ScaleMapper;
+import com.diagbot.service.ScaleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 量表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2021-12-20
+ */
+@Service
+public class ScaleServiceImpl extends ServiceImpl<ScaleMapper, Scale> implements ScaleService {
+
+}

+ 22 - 0
prec-service/src/main/java/com/diagbot/vo/GetScaleVO.java

@@ -0,0 +1,22 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2018/11/19 18:58
+ */
+@Data
+public class GetScaleVO {
+	
+	/**
+     * 问诊记录id
+     */
+    private Long inquiryId;
+
+    /**
+     * 量表名称
+     */
+    private String scaleName;
+}

+ 33 - 0
prec-service/src/main/java/com/diagbot/vo/SaveInquiryScaleSyfVO.java

@@ -0,0 +1,33 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+/**
+ * @Description
+ * @author zhoutg
+ * @time 2018年11月23日下午2:29:43
+ */
+@Data
+public class SaveInquiryScaleSyfVO {
+
+    /**
+     * 量表名称
+     */
+    private String scaleName;
+
+    /**
+     * 得分
+     */
+    private String score;
+
+    /**
+     * 结果
+     */
+    private String result;
+
+    /**
+     * json数据
+     */
+    private String dataJson;
+
+}

+ 198 - 0
prec-service/src/main/java/com/diagbot/vo/SaveInquirySyfVO.java

@@ -0,0 +1,198 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.validator.constraints.Range;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @description: 
+ * @author: zhoutg
+ * @date: 2021/12/20 16:56
+ */
+@ApiModel(value="问诊记录保存接口传参")
+@Getter
+@Setter
+public class SaveInquirySyfVO {
+	
+	/**
+     * 医院id
+     */
+	@ApiModelProperty(value="医院id",required=true)
+	@NotNull(message="医院id必传")
+    private Long hospitalId;
+	
+	/**
+     * 医院编码
+     */
+	@ApiModelProperty(value="医院编码",required=true)
+	@NotBlank(message="医院编码必传")
+    private String hospitalCode;
+
+    /**
+     * 医院名称
+     */
+	@ApiModelProperty(value="医院名称",required=true)
+	@NotBlank(message="医院名称必传")
+    private String hospitalName;
+
+	/**
+	 * 子医院id
+	 */
+	@ApiModelProperty(value="子医院id")
+	private Long sonHospitalId;
+
+	/**
+	 * 子医院编码
+	 */
+	@ApiModelProperty(value="子医院编码")
+	private String sonHospitalCode;
+
+	/**
+	 * 子医院名称
+	 */
+	@ApiModelProperty(value="子医院名称")
+	private String sonHospitalName;
+
+    /**
+     * 医院科室id
+     */
+	@ApiModelProperty(value="科室id",required=true)
+	@NotNull(message="科室id必传")
+    private Long hospitalDeptId;
+	
+	/**
+     * 医院科室编码
+     */
+	@ApiModelProperty(value="医院科室编码",required=true)
+	@NotBlank(message="医院科室编码必传")
+    private String hospitalDeptCode;
+
+    /**
+     * 医院科室名称
+     */
+	@ApiModelProperty(value="医院科室名称",required=true)
+	@NotBlank(message="医院科室名称必传")
+    private String hospitalDeptName;
+
+    /**
+     * 医生id
+     */
+	@ApiModelProperty(value="医生id")
+    private Long doctorId;
+	
+	/**
+     * 医生编码
+     */
+	@ApiModelProperty(value="医生编码")
+    private String doctorCode;
+
+    /**
+     * 医生姓名
+     */
+	@ApiModelProperty(value="医生姓名")
+    private String doctorName;
+
+    /**
+     * 患者id
+     */
+	@ApiModelProperty(value="患者id",required=true)
+	@NotNull(message="患者id必传")
+    private Long patientId;
+	
+	/**
+     * 患者编号
+     */
+	@ApiModelProperty(value="患者编号",required=true)
+	@NotBlank(message="患者编号必传")
+    private String patientCode;
+
+    /**
+     * 患者姓名
+     */
+	@ApiModelProperty(value="患者姓名",required=true)
+	@NotBlank(message="患者姓名必传")
+    private String patientName;
+
+    /**
+     * 患者性别:1男2女
+     */
+	@ApiModelProperty(value="患者性别:1男2女")
+    private Integer patientSex;
+
+    /**
+     * 患者联系电话
+     */
+	@ApiModelProperty(value="患者联系电话")
+    private String patientPhone;
+
+    /**
+     * 患者出生日期
+     */
+	@ApiModelProperty(value="患者出生日期,格式为:2018-11-28 17:25",required=true)
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+	@NotNull(message="患者出生日期必传")
+    private Date patientBirthday;
+    
+    /**
+     * 患者证件号码(病历号)
+     */
+	@ApiModelProperty(value="患者证件号码(病历号)",required=true)
+	@NotBlank(message="患者证件号码(病历号)必传")
+    private String patientIdNo;
+
+    /**
+     * 就诊序列号
+     */
+	@ApiModelProperty(value="就诊序列号")
+    private String inquiryCode;
+
+    /**
+     * 就诊状态(0待接诊,1接诊中,2完成接诊)
+     */
+	@ApiModelProperty(value="就诊状态(0待接诊,1接诊中,2完成接诊)")
+	@Range(min=0,max=2,message="就诊状态必须是0、1、2")
+	private Integer regVisitedState=1;
+
+    /**
+     * 病历分类(1:门诊,2:住院)
+     */
+	@ApiModelProperty(value="病历分类(1:门诊,2:住院)")
+	@Range(min=1,max=2,message="病历分类必须是1、2")
+    private Integer type=1;
+
+    /**
+     * 内容JSON字符串
+     */
+	@ApiModelProperty(value="内容JSON字符串",required=true)
+    @NotBlank(message="内容JSON字符串必传")
+    private String dataJson;
+    
+	/**
+	 * 问诊明细
+	 */
+    @Valid
+    @ApiModelProperty(value="问诊明细",required=true)
+    private List<SaveInquiryDetailVO> detailList;
+    
+	/**
+	 * 治疗报告图片集合
+	 */
+    @ApiModelProperty(value="治疗报告图片集合")
+    private List<SaveInquiryReportVO> reportList;
+
+	/**
+	 * 量表列表
+	 */
+	@ApiModelProperty(value="量表列表")
+	private List<SaveInquiryScaleSyfVO> scaleList;
+    
+}

+ 80 - 0
prec-service/src/main/java/com/diagbot/web/InquiryInfoSYFController.java

@@ -0,0 +1,80 @@
+package com.diagbot.web;
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.GetInquiryDetailSyfDTO;
+import com.diagbot.dto.HisInquirySyfDTO;
+import com.diagbot.dto.RecordCheckSyfDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.SaveInquiryDTO;
+import com.diagbot.dto.ScaleDTO;
+import com.diagbot.facade.InquiryInfoSyfFacade;
+import com.diagbot.vo.GetInquiryDetailVO;
+import com.diagbot.vo.GetScaleVO;
+import com.diagbot.vo.HisInquirysVO;
+import com.diagbot.vo.RecordCheckVO;
+import com.diagbot.vo.SaveInquirySyfVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * @description: 邵逸夫加入量表定制
+ * @author: zhoutg
+ * @date: 2021/12/20 16:39
+ */
+@RestController
+@RequestMapping("/inquiryInfoSyf")
+@Api(value = "邵逸夫智能预问诊-问诊记录API", tags = { "邵逸夫智能预问诊-问诊记录API" })
+@SuppressWarnings("unchecked")
+public class InquiryInfoSYFController {
+
+    @Autowired
+    InquiryInfoSyfFacade inquiryInfoSyfFacade;
+
+    @ApiOperation(value = "问诊记录保存[by:zhoutg]")
+    @PostMapping("/saveInquiry")
+    @SysLogger("saveInquiry")
+    @Transactional
+    public RespDTO<SaveInquiryDTO> saveInquiry(@Valid @RequestBody SaveInquirySyfVO saveInquirySyfVO) {
+        return RespDTO.onSuc(inquiryInfoSyfFacade.saveInquiry(saveInquirySyfVO));
+    }
+
+    @ApiOperation(value = "历史病历列表(医院对接用)[by:zhoutg]")
+    @PostMapping("/hisInquirys")
+    @SysLogger("hisInquirys")
+    public RespDTO<List<HisInquirySyfDTO>> hisInquirys(@Valid @RequestBody HisInquirysVO hisInquirysVO) {
+        return RespDTO.onSuc(inquiryInfoSyfFacade.hisInquirys(hisInquirysVO));
+    }
+
+    @ApiOperation(value = "病历详情(医院对接用)[by:zhoutg]")
+    @PostMapping("/getInquiryDetail")
+    @SysLogger("getInquiryDetail")
+    public RespDTO<GetInquiryDetailSyfDTO> getInquiryDetail(@Valid @RequestBody GetInquiryDetailVO getInquiryDetailVO) {
+        return RespDTO.onSuc(inquiryInfoSyfFacade.getInquiryDetail(getInquiryDetailVO));
+    }
+
+    @ApiOperation(value = "问诊记录检查确认[by:zhoutg]")
+    @PostMapping("/recordCheck")
+    @SysLogger("recordCheck")
+    public RespDTO<RecordCheckSyfDTO> recordCheck(@Valid @RequestBody RecordCheckVO recordCheckVO) {
+        return RespDTO.onSuc(inquiryInfoSyfFacade.recordCheck(recordCheckVO));
+    }
+
+    @ApiOperation(value = "获取量表结果[by:zhoutg]",
+            notes = "inquiryId:病历id<br>" +
+                    "scaleName:量表名称")
+    @PostMapping("/getScale")
+    @SysLogger("getScale")
+    public RespDTO<ScaleDTO> getScale(@RequestBody GetScaleVO getScaleVO) {
+        return RespDTO.onSuc(inquiryInfoSyfFacade.getScale(getScaleVO));
+    }
+
+}

+ 21 - 0
prec-service/src/main/resources/mapper/ScaleMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.ScaleMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.Scale">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="inquiry_id" property="inquiryId" />
+        <result column="scale_name" property="scaleName" />
+        <result column="score" property="score" />
+        <result column="result" property="result" />
+        <result column="data_json" property="dataJson" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 2 - 2
prec-service/src/test/java/com/diagbot/CodeGeneration.java

@@ -34,7 +34,7 @@ public class CodeGeneration {
         gc.setEnableCache(false);// XML 二级缓存
         gc.setBaseResultMap(true);// XML ResultMap
         gc.setBaseColumnList(false);// XML columList
-        gc.setAuthor("gaodm");// 作者
+        gc.setAuthor("zhoutg");// 作者
         gc.setDateType(DateType.ONLY_DATE);
 
         // 自定义文件命名,注意 %s 会自动填充表实体属性!
@@ -58,7 +58,7 @@ public class CodeGeneration {
         StrategyConfig strategy = new StrategyConfig();
         strategy.setTablePrefix(new String[] { "prec_" });// 此处可以修改为您的表前缀
         strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
-        strategy.setInclude(new String[] { "prec_inquiry_quote" }); // 需要生成的表
+        strategy.setInclude(new String[] { "prec_scale" }); // 需要生成的表
 
         strategy.setSuperServiceClass(null);
         strategy.setSuperServiceImplClass(null);