Переглянути джерело

Merge remote-tracking branch 'origin/debug' into debug

kongwz 4 роки тому
батько
коміт
4074e8d1ee
21 змінених файлів з 655 додано та 39 видалено
  1. 25 0
      cdssman-service/src/main/java/com/diagbot/dto/ConceptCollectionDTO.java
  2. 1 0
      cdssman-service/src/main/java/com/diagbot/dto/KlRuleByIdSubDTO.java
  3. 36 14
      cdssman-service/src/main/java/com/diagbot/entity/KlRuleCondition.java
  4. 6 2
      cdssman-service/src/main/java/com/diagbot/entity/MappingConfig.java
  5. 8 8
      cdssman-service/src/main/java/com/diagbot/entity/wrapper/MappingConfigWrapper.java
  6. 23 1
      cdssman-service/src/main/java/com/diagbot/enums/LexiconEnum.java
  7. 315 0
      cdssman-service/src/main/java/com/diagbot/facade/KlConceptCollectionFacade.java
  8. 7 2
      cdssman-service/src/main/java/com/diagbot/mapper/KlRelationMapper.java
  9. 6 0
      cdssman-service/src/main/java/com/diagbot/service/KlRelationService.java
  10. 11 4
      cdssman-service/src/main/java/com/diagbot/service/impl/KlRelationServiceImpl.java
  11. 15 0
      cdssman-service/src/main/java/com/diagbot/vo/ConceptCollectionBaseVO.java
  12. 29 0
      cdssman-service/src/main/java/com/diagbot/vo/ConceptCollectionPageVO.java
  13. 16 0
      cdssman-service/src/main/java/com/diagbot/vo/ConceptCollectionSaveVO.java
  14. 1 0
      cdssman-service/src/main/java/com/diagbot/vo/KlRuleInfoSaveSubVO.java
  15. 4 4
      cdssman-service/src/main/java/com/diagbot/web/ConceptInfoController.java
  16. 81 0
      cdssman-service/src/main/java/com/diagbot/web/KlConceptCollectionController.java
  17. 2 1
      cdssman-service/src/main/resources/mapper/HospitalInfoMapper.xml
  18. 54 0
      cdssman-service/src/main/resources/mapper/KlRelationMapper.xml
  19. 5 1
      common/src/main/java/com/diagbot/biz/push/entity/Item.java
  20. 5 1
      common/src/main/java/com/diagbot/biz/push/entity/Lis.java
  21. 5 1
      common/src/main/java/com/diagbot/biz/push/entity/Pacs.java

+ 25 - 0
cdssman-service/src/main/java/com/diagbot/dto/ConceptCollectionDTO.java

@@ -0,0 +1,25 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/8/6 9:43
+ */
+@Data
+public class ConceptCollectionDTO {
+    private Long collectionId;
+    private String collectionLibName;
+    private Integer collectionLibType;
+    @ApiModelProperty(hidden = true)
+    private Integer collectionStatus;
+    private String collectionRemark;
+    private Long relationId;
+    @ApiModelProperty(hidden = true)
+    private String concatConceptLibName;
+    private Integer conceptLibType;
+    @ApiModelProperty(hidden = true)
+    private Integer conceptStatus;
+}

+ 1 - 0
cdssman-service/src/main/java/com/diagbot/dto/KlRuleByIdSubDTO.java

@@ -28,4 +28,5 @@ public class KlRuleByIdSubDTO {
     private String subEqOperator;//等于域比较符
     private String subEqValue;//等于域值
     private String subEqUnit;//等于域单位
+    private String subMsg;
 }

+ 36 - 14
cdssman-service/src/main/java/com/diagbot/entity/KlRuleCondition.java

@@ -11,8 +11,8 @@ import java.util.Date;
  * 规则条件表
  * </p>
  *
- * @author zhaops
- * @since 2021-03-01
+ * @author zhoutg
+ * @since 2021-07-27
  */
 public class KlRuleCondition implements Serializable {
 
@@ -50,7 +50,7 @@ public class KlRuleCondition implements Serializable {
     private String modifier;
 
     /**
-     * 提示概念id
+     * 规则主表id
      */
     private Long ruleId;
 
@@ -60,10 +60,15 @@ public class KlRuleCondition implements Serializable {
     private Integer groupType;
 
     /**
-     * 提示概念id
+     * 基础规则id
      */
     private Long ruleBaseId;
 
+    /**
+     * 附加信息
+     */
+    private String msg;
+
     public Long getId() {
         return id;
     }
@@ -71,6 +76,7 @@ public class KlRuleCondition implements Serializable {
     public void setId(Long id) {
         this.id = id;
     }
+
     public String getIsDeleted() {
         return isDeleted;
     }
@@ -78,6 +84,7 @@ public class KlRuleCondition implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
+
     public Date getGmtCreate() {
         return gmtCreate;
     }
@@ -85,6 +92,7 @@ public class KlRuleCondition implements Serializable {
     public void setGmtCreate(Date gmtCreate) {
         this.gmtCreate = gmtCreate;
     }
+
     public Date getGmtModified() {
         return gmtModified;
     }
@@ -92,6 +100,7 @@ public class KlRuleCondition implements Serializable {
     public void setGmtModified(Date gmtModified) {
         this.gmtModified = gmtModified;
     }
+
     public String getCreator() {
         return creator;
     }
@@ -99,6 +108,7 @@ public class KlRuleCondition implements Serializable {
     public void setCreator(String creator) {
         this.creator = creator;
     }
+
     public String getModifier() {
         return modifier;
     }
@@ -106,6 +116,7 @@ public class KlRuleCondition implements Serializable {
     public void setModifier(String modifier) {
         this.modifier = modifier;
     }
+
     public Long getRuleId() {
         return ruleId;
     }
@@ -113,6 +124,7 @@ public class KlRuleCondition implements Serializable {
     public void setRuleId(Long ruleId) {
         this.ruleId = ruleId;
     }
+
     public Integer getGroupType() {
         return groupType;
     }
@@ -120,6 +132,7 @@ public class KlRuleCondition implements Serializable {
     public void setGroupType(Integer groupType) {
         this.groupType = groupType;
     }
+
     public Long getRuleBaseId() {
         return ruleBaseId;
     }
@@ -128,18 +141,27 @@ public class KlRuleCondition implements Serializable {
         this.ruleBaseId = ruleBaseId;
     }
 
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
     @Override
     public String toString() {
         return "KlRuleCondition{" +
-            "id=" + id +
-            ", isDeleted=" + isDeleted +
-            ", gmtCreate=" + gmtCreate +
-            ", gmtModified=" + gmtModified +
-            ", creator=" + creator +
-            ", modifier=" + modifier +
-            ", ruleId=" + ruleId +
-            ", groupType=" + groupType +
-            ", ruleBaseId=" + ruleBaseId +
-        "}";
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", ruleId=" + ruleId +
+                ", groupType=" + groupType +
+                ", ruleBaseId=" + ruleBaseId +
+                ", msg=" + msg +
+                "}";
     }
 }

+ 6 - 2
cdssman-service/src/main/java/com/diagbot/entity/MappingConfig.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.diagbot.util.StringUtil;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -19,6 +21,7 @@ import java.util.Objects;
  * @author zhaops
  * @since 2021-06-09
  */
+@EqualsAndHashCode
 @TableName("tran_mapping_config")
 public class MappingConfig implements Serializable {
 
@@ -84,6 +87,7 @@ public class MappingConfig implements Serializable {
     /**
      * 医学标准术语id
      */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Long conceptId;
 
     /**
@@ -257,7 +261,7 @@ public class MappingConfig implements Serializable {
                 "}";
     }
 
-    @Override
+    /*@Override
     public boolean equals(Object o) {
         if (this == o) {
             return true;
@@ -283,7 +287,7 @@ public class MappingConfig implements Serializable {
     @Override
     public int hashCode() {
         return Objects.hash(id, isDeleted, hospitalId, type, hisName, hisCode, hisDetailName, conceptId, formConceptId, isMatch);
-    }
+    }*/
 
     public static boolean nonNull(MappingConfig o) {
         return !(o == null

+ 8 - 8
cdssman-service/src/main/java/com/diagbot/entity/wrapper/MappingConfigWrapper.java

@@ -2,24 +2,24 @@ package com.diagbot.entity.wrapper;
 
 import com.diagbot.entity.MappingConfig;
 import com.diagbot.util.StringUtil;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.Objects;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
 
 /**
  * @Description:
  * @Author:zhaops
  * @time: 2021/6/10 19:27
  */
-@Getter
-@Setter
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
 public class MappingConfigWrapper extends MappingConfig {
     private String uniqueName;
     private String form;
     private String code;
 
-    @Override
+   /* @Override
     public boolean equals(Object o) {
         if (this == o) {
             return true;
@@ -37,7 +37,7 @@ public class MappingConfigWrapper extends MappingConfig {
     @Override
     public int hashCode() {
         return Objects.hash(uniqueName, form, code) + super.hashCode();
-    }
+    }*/
 
     public static boolean nonNull(MappingConfigWrapper o) {
         return !(o == null

+ 23 - 1
cdssman-service/src/main/java/com/diagbot/enums/LexiconEnum.java

@@ -48,6 +48,27 @@ public enum LexiconEnum implements KeyedNamed {
     SymptomClass(305,"症状类别"),
     OperationClass(306,"手术和操作类别"),
     DisSysType(307,"疾病系统分类"),
+    DiseaseCollection(308,"疾病集合"),
+    MedicineCollection(309,"药品通用名集合"),
+    FormCollection(310,"药品剂型集合"),
+    SymptomCollection(311,"症状集合"),
+    VitalCollection(312,"体格检查项目集合"),
+    VitalResultCollection(313,"体格检查结果集合"),
+    OperationCollection(314,"手术和操作集合"),
+    LisNameCollection(315,"实验室检查套餐集合"),
+    PacsNameCollection(316,"辅助检查项目集合"),
+    PacsSubNameCollection(317,"辅助检查子项目集合"),
+    PacsDescribeCollection(318,"辅助检查描述集合"),
+    PacsResultCollection(319,"辅助检查结果集合"),
+    AnesthesiaCollection(320,"麻醉集合"),
+    DeptCollection(321,"科室集合"),
+    FoodCollection(322,"食物集合"),
+    AllergenCollection(323,"其他过敏原集合"),
+    DeviceCollection(324,"医疗器械及物品集合"),
+    PartCollection(325,"部位集合"),
+    TcmdiseaseCollection(326,"中医疾病集合"),
+    TcmsyndromeCollection(327,"中医证候集合"),
+    InducementCollection(328,"诱因集合"),
     ICD10ClassNode(400,"ICD10疾病类别根节点"),
     DeptDiseaseNode(401,"科室疾病类别根节点"),
     MedChemClassNode(402,"药品化学物质类别根节点"),
@@ -58,7 +79,8 @@ public enum LexiconEnum implements KeyedNamed {
     OperationClassNode(407,"手术和操作类别根节点"),
     LisClassNode(408,"实验室检查类别根节点"),
     PacsClassNode(409,"辅助检查类别根节点"),
-    Age(410,"年龄");
+    Age(410,"年龄"),
+    Law(130,"政策法规");
 
 
     @Setter

+ 315 - 0
cdssman-service/src/main/java/com/diagbot/facade/KlConceptCollectionFacade.java

@@ -0,0 +1,315 @@
+package com.diagbot.facade;
+
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.ConceptCollectionDTO;
+import com.diagbot.dto.DictionaryInfoDTO;
+import com.diagbot.entity.KlConcept;
+import com.diagbot.entity.KlLibraryInfo;
+import com.diagbot.entity.KlRelation;
+import com.diagbot.entity.KlRelationOrder;
+import com.diagbot.entity.KlRule;
+import com.diagbot.entity.KlRuleBase;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.LexiconEnum;
+import com.diagbot.enums.StatusEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.KlRelationOrderService;
+import com.diagbot.service.KlRelationService;
+import com.diagbot.service.KlRuleConditionService;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.UserUtils;
+import com.diagbot.vo.ConceptCollectionBaseVO;
+import com.diagbot.vo.ConceptCollectionPageVO;
+import com.diagbot.vo.ConceptCollectionSaveVO;
+import com.diagbot.vo.IdVO;
+import com.google.common.collect.Lists;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.SystemUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/8/5 17:25
+ */
+@Component
+public class KlConceptCollectionFacade {
+    @Autowired
+    KlConceptFacade klConceptFacade;
+    @Autowired
+    KlLibraryInfoFacade klLibraryInfoFacade;
+    @Autowired
+            @Qualifier("klRelationServiceImpl")
+    KlRelationService klRelationService;
+    @Autowired
+    KlRelationFacade klRelationFacade;
+    @Autowired
+    @Qualifier("klRelationOrderServiceImpl")
+    KlRelationOrderService klRelationOrderService;
+    @Autowired
+    KlRelationOrderFacade klRelationOrderFacade;
+
+    @Autowired
+    KlDictionaryInfoFacade klDictionaryInfoFacade;
+    @Autowired
+    KlRuleFacade klRuleFacade;
+    @Autowired
+    KlRuleBaseFacade klRuleBaseFacade;
+    @Autowired
+    KlRuleConditionService klRuleConditionService;
+
+    /**
+     * 获取术语集合列表
+     *
+     * @param conceptCollectionPageVO
+     * @return
+     */
+    public IPage<ConceptCollectionDTO> getConceptCollectionPage(ConceptCollectionPageVO conceptCollectionPageVO) {
+        if (conceptCollectionPageVO.getCollectionLibType() == null
+                || conceptCollectionPageVO.getCollectionLibType().equals(0)) {
+            conceptCollectionPageVO.setCollectionLibType(null);
+        }
+
+        return klRelationFacade.getConceptCollectionPage(conceptCollectionPageVO);
+    }
+
+
+    /**
+     * 保存(新增和修改)
+     * @param conceptCollectionSaveVO
+     * @return
+     */
+    @DSTransactional
+    public Boolean saveOrUpdateRecord(ConceptCollectionSaveVO conceptCollectionSaveVO) {
+        Map<Long, List<DictionaryInfoDTO>> allDictionaryMap = klDictionaryInfoFacade.getListByGroupType();
+        List<DictionaryInfoDTO> dictionary = allDictionaryMap.get(61L);
+        Map<String, String> dictionaryMap
+                = dictionary.stream().collect(Collectors.toMap(DictionaryInfoDTO::getName, DictionaryInfoDTO::getVal));
+        if (null == conceptCollectionSaveVO.getCollectionId()) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "术语集合不允许为空,保存失败");
+        }
+        if (ListUtil.isEmpty(conceptCollectionSaveVO.getConcepts())) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "基础术语列表不允许为空,保存失败");
+        }
+
+        KlConcept collection = klConceptFacade.getById(conceptCollectionSaveVO.getCollectionId());
+        if (null == collection) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "术语集合不存在,保存失败");
+        } else if (collection.getStatus().equals(StatusEnum.Disable.getKey())) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "集合已禁用,保存失败");
+        } else if (!collection.getLibName().equals(conceptCollectionSaveVO.getCollectionLibName())) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "术语集合名称不允许修改,保存失败");
+        }
+
+        //校验术语集合和基础术语类型是否对应
+        String dicVal = dictionaryMap.get(LexiconEnum.getName(conceptCollectionSaveVO.getCollectionLibType()));
+        if (StringUtils.isBlank(dicVal)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "术语集合和基础术语关联字典未维护,请维护字典");
+        }
+        Integer conceptLibType = Integer.valueOf(dicVal.split("-")[2]);
+        for (ConceptCollectionBaseVO concept : conceptCollectionSaveVO.concepts) {
+            if (!concept.getConceptLibType().equals(conceptLibType)) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
+                        "集合【" + LexiconEnum.getName(conceptCollectionSaveVO.getCollectionLibType())
+                                + "】和基础术语【" + LexiconEnum.getName(conceptLibType) + "】不是对应关系,保存失败");
+            }
+        }
+
+        //检验基础术语是否存在
+        //过滤已禁用基础术语
+        List<Long> conceptIds = conceptCollectionSaveVO.concepts.stream()
+                .map(ConceptCollectionBaseVO::getConceptId)
+                .collect(Collectors.toList());
+        List<KlConcept> concepts = klConceptFacade.list(new QueryWrapper<KlConcept>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("status", StatusEnum.Enable.getKey())
+                .in("id", conceptIds));
+
+        if (ListUtil.isEmpty(concepts)) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "基础术语不存在或已禁用");
+        }
+        List<Long> saveConceptIds = concepts.stream().map(KlConcept::getId).collect(Collectors.toList());
+
+        //删除已有记录
+        List<KlRelation> relationList = klRelationFacade.list(new QueryWrapper<KlRelation>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("start_id", collection.getId())
+                .eq("relation_id", 600));
+
+        if (ListUtil.isNotEmpty(relationList)) {
+            List<Long> tRelationIds = relationList.stream().map(KlRelation::getId).collect(Collectors.toList());
+
+            //删除管理记录
+            klRelationFacade.remove(new QueryWrapper<KlRelation>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("start_id", collection.getId())
+                    .eq("relation_id", 600));
+            klRelationOrderFacade.remove(new QueryWrapper<KlRelationOrder>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .in("t_relation_id", tRelationIds));
+        }
+
+        //保存
+        Date now = new Date();
+        String useId = UserUtils.getCurrentPrincipleID();
+        List<KlRelation> saveList = Lists.newLinkedList();
+        for (ConceptCollectionBaseVO concept : conceptCollectionSaveVO.concepts) {
+            if (!saveConceptIds.contains(concept.getConceptId())) {
+                continue;
+            }
+            KlRelation klRelation = new KlRelation();
+            klRelation.setStartId(collection.getId());
+            klRelation.setEndId(concept.getConceptId());
+            klRelation.setRelationId(600);
+
+            klRelation.setCreator(useId);
+            klRelation.setModifier(useId);
+            klRelation.setGmtCreate(now);
+            klRelation.setGmtModified(now);
+
+            saveList.add(klRelation);
+        }
+        klRelationService.saveOrUpdateBatch(saveList);
+
+        List<KlRelationOrder> saveOrderList = Lists.newLinkedList();
+        Integer orderNo = 1;
+        for (KlRelation klRelation : saveList) {
+            KlRelationOrder klRelationOrder = new KlRelationOrder();
+            klRelationOrder.settRelationId(klRelation.getId());
+            klRelationOrder.setOrderNo(orderNo++);
+
+            klRelationOrder.setCreator(useId);
+            klRelationOrder.setModifier(useId);
+            klRelationOrder.setGmtCreate(now);
+            klRelationOrder.setGmtModified(now);
+
+            saveOrderList.add(klRelationOrder);
+        }
+        klRelationOrderService.saveOrUpdateBatch(saveOrderList);
+
+        return true;
+    }
+
+    /**
+     * 根据术语集合id获取集合相关信息
+     *
+     * @param idVO
+     * @return
+     */
+    public ConceptCollectionSaveVO getRecordById(IdVO idVO) {
+        ConceptCollectionSaveVO retItem = new ConceptCollectionSaveVO();
+        KlConcept collection = klConceptFacade.getById(idVO.getId());
+        if (null == collection) {
+            return null;
+        }
+        retItem.setCollectionId(idVO.getId());
+        retItem.setCollectionLibName(collection.getLibName());
+        retItem.setCollectionLibType(collection.getLibType());
+        //remark
+        KlLibraryInfo libraryInfo = klLibraryInfoFacade.getOne(new QueryWrapper<KlLibraryInfo>()
+                .eq("concept_id", collection.getId())
+                .eq("is_concept", 1));
+        if (null != libraryInfo) {
+            retItem.setCollectionRemark(libraryInfo.getRemark());
+        }
+
+        List<KlRelation> relationList = klRelationFacade.list(new QueryWrapper<KlRelation>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("start_id", idVO.getId())
+                .eq("relation_id", 600));
+
+        if (ListUtil.isEmpty(relationList)) {
+            return retItem;
+        }
+
+        Map<Long, KlRelation> relationMap = relationList.stream().collect(Collectors.toMap(KlRelation::getId, v -> v));
+        List<Long> conceptIds = relationList.stream().map(KlRelation::getEndId).collect(Collectors.toList());
+        List<Long> relationIds = relationList.stream().map(KlRelation::getId).collect(Collectors.toList());
+        List<KlRelationOrder> relationOrderList = klRelationOrderFacade.list(new QueryWrapper<KlRelationOrder>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .in("t_relation_id", relationIds)
+                .orderByAsc("order_no"));
+
+        List<KlConcept> conceptList = klConceptFacade.list(new QueryWrapper<KlConcept>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("status", StatusEnum.Enable.getKey())
+                .in("id", conceptIds));
+        Map<Long, KlConcept> conceptMap = conceptList.stream().collect(Collectors.toMap(KlConcept::getId, v -> v));
+
+        List<ConceptCollectionBaseVO> subConceptList = Lists.newLinkedList();
+        if (ListUtil.isNotEmpty(relationOrderList)) {
+            for (KlRelationOrder order : relationOrderList) {
+                KlConcept concept = conceptMap.get(relationMap.get(order.gettRelationId()).getEndId());
+                if (null != concept) {
+                    ConceptCollectionBaseVO conceptVO = new ConceptCollectionBaseVO();
+                    conceptVO.setConceptId(concept.getId());
+                    conceptVO.setConceptLibName(concept.getLibName());
+                    conceptVO.setConceptLibType(concept.getLibType());
+                    subConceptList.add(conceptVO);
+                }
+            }
+        } else {
+            for (KlConcept concept : conceptList) {
+                ConceptCollectionBaseVO conceptVO = new ConceptCollectionBaseVO();
+                conceptVO.setConceptId(concept.getId());
+                conceptVO.setConceptLibName(concept.getLibName());
+                conceptVO.setConceptLibType(concept.getLibType());
+                subConceptList.add(conceptVO);
+            }
+        }
+
+        retItem.setConcepts(subConceptList);
+
+        return retItem;
+    }
+
+    /**
+     * 删除术语集合关联关系
+     *
+     * @param idVO
+     * @return
+     */
+    public Boolean deleteById(IdVO idVO) {
+        KlConcept collection = klConceptFacade.getById(idVO.getId());
+        if (null == collection) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "术语集合不存在");
+        }
+
+        //校验术语集合是否被使用
+        List<KlRule> ruleList = klRuleFacade.list(new QueryWrapper<KlRule>()
+                .eq("concept_id", collection.getId()));
+        if (ListUtil.isNotEmpty(ruleList)) {
+            throw new CommonException(CommonErrorCode.FAIL, "删除失败,【" + collection.getLibName() + "】已在规则中使用");
+        }
+        List<KlRuleBase> baseRuleList = klRuleBaseFacade.list(new QueryWrapper<KlRuleBase>()
+                .eq("concept_id", collection.getId()));
+        if (ListUtil.isNotEmpty(baseRuleList)) {
+            throw new CommonException(CommonErrorCode.FAIL, "删除失败,【" + collection.getLibName() + "】已在规则中使用");
+        }
+
+        List<KlRelation> relationList = klRelationFacade.list(new QueryWrapper<KlRelation>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("start_id", idVO.getId())
+                .eq("relation_id", 600));
+
+        if (ListUtil.isEmpty(relationList)) {
+            return true;
+        }
+
+        List<Long> relationIds = relationList.stream().map(KlRelation::getId).collect(Collectors.toList());
+
+        klRelationFacade.remove(new QueryWrapper<KlRelation>().in("id", relationIds));
+        klRelationOrderFacade.remove(new QueryWrapper<KlRelationOrder>().in("t_relation_id", relationIds));
+        return true;
+    }
+}

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

@@ -1,11 +1,14 @@
 package com.diagbot.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.ConceptCollectionDTO;
 import com.diagbot.dto.GetAllForRelationDTO;
 import com.diagbot.dto.RelationDTO;
 import com.diagbot.dto.RelationNameDTO;
 import com.diagbot.dto.RelationNodeDTO;
 import com.diagbot.entity.KlRelation;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.vo.ConceptCollectionPageVO;
 import com.diagbot.vo.DisNameFindVO;
 import com.diagbot.vo.KlRelationVO;
 import com.diagbot.vo.RelationVO;
@@ -26,13 +29,15 @@ import java.util.List;
  * @since 2021-03-01
  */
 public interface KlRelationMapper extends BaseMapper<KlRelation> {
-    List<RelationNodeDTO> getRelationNodeDTOs(@Param(value="conceptId")Long conceptId, @Param(value="relationId")Long relationId, @Param(value="endTypeId")Long endTypeId);
+    List<RelationNodeDTO> getRelationNodeDTOs(@Param(value = "conceptId") Long conceptId, @Param(value = "relationId") Long relationId, @Param(value = "endTypeId") Long endTypeId);
 
     List<MedClassMedDTO> getMedClassMedList();
 
     List<RelationDTO> getRelations(RelationVO relationVO);
 
-    List<RelationNameDTO> getRelationNameDTOs(@Param(value="conceptIds")List<Long> conceptIds,@Param(value="relationId")Integer relationId);
+    List<RelationNameDTO> getRelationNameDTOs(@Param(value = "conceptIds") List<Long> conceptIds, @Param(value = "relationId") Integer relationId);
 
     List<GetAllForRelationDTO> findDisNameAll(DisNameFindVO disNameFindVO);
+
+    IPage<ConceptCollectionDTO> getConceptCollectionPage(@Param("conceptCollectionPageVO") ConceptCollectionPageVO conceptCollectionPageVO);
 }

+ 6 - 0
cdssman-service/src/main/java/com/diagbot/service/KlRelationService.java

@@ -1,15 +1,19 @@
 package com.diagbot.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.ConceptCollectionDTO;
 import com.diagbot.dto.GetAllForRelationDTO;
 import com.diagbot.dto.MedClassMedDTO;
 import com.diagbot.dto.RelationDTO;
 import com.diagbot.dto.RelationNameDTO;
 import com.diagbot.entity.KlRelation;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.ConceptCollectionPageVO;
 import com.diagbot.vo.DisNameFindVO;
 import com.diagbot.vo.KlRelationVO;
 import com.diagbot.vo.RelationVO;
 import io.swagger.models.auth.In;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -29,4 +33,6 @@ public interface KlRelationService extends IService<KlRelation> {
     List<RelationNameDTO> getRelationNameDTOs(List<Long> conceptIds, Integer relationId);
 
     List<GetAllForRelationDTO> findDisNameAll(DisNameFindVO disNameFindVO);
+
+    IPage<ConceptCollectionDTO> getConceptCollectionPage(@Param("conceptCollectionPageVO") ConceptCollectionPageVO conceptCollectionPageVO);
 }

+ 11 - 4
cdssman-service/src/main/java/com/diagbot/service/impl/KlRelationServiceImpl.java

@@ -1,7 +1,9 @@
 package com.diagbot.service.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.ConceptCollectionDTO;
 import com.diagbot.dto.GetAllForRelationDTO;
 import com.diagbot.dto.MedClassMedDTO;
 import com.diagbot.dto.RelationDTO;
@@ -9,8 +11,8 @@ import com.diagbot.dto.RelationNameDTO;
 import com.diagbot.entity.KlRelation;
 import com.diagbot.mapper.KlRelationMapper;
 import com.diagbot.service.KlRelationService;
+import com.diagbot.vo.ConceptCollectionPageVO;
 import com.diagbot.vo.DisNameFindVO;
-import com.diagbot.vo.KlRelationVO;
 import com.diagbot.vo.RelationVO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
@@ -32,17 +34,22 @@ public class KlRelationServiceImpl extends ServiceImpl<KlRelationMapper, KlRelat
         return baseMapper.getMedClassMedList();
     }
 
-    public List<RelationDTO> getRelations(RelationVO relationVO){
+    public List<RelationDTO> getRelations(RelationVO relationVO) {
         return baseMapper.getRelations(relationVO);
     }
 
     @Override
-    public List<RelationNameDTO> getRelationNameDTOs(List<Long> conceptIds,Integer relationId) {
-        return baseMapper.getRelationNameDTOs(conceptIds,relationId);
+    public List<RelationNameDTO> getRelationNameDTOs(List<Long> conceptIds, Integer relationId) {
+        return baseMapper.getRelationNameDTOs(conceptIds, relationId);
     }
 
     @Override
     public List<GetAllForRelationDTO> findDisNameAll(DisNameFindVO disNameFindVO) {
         return baseMapper.findDisNameAll(disNameFindVO);
     }
+
+    @Override
+    public IPage<ConceptCollectionDTO> getConceptCollectionPage(@Param("conceptCollectionPageVO") ConceptCollectionPageVO conceptCollectionPageVO) {
+        return baseMapper.getConceptCollectionPage(conceptCollectionPageVO);
+    }
 }

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

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/8/6 15:03
+ */
+@Data
+public class ConceptCollectionBaseVO {
+    private Long conceptId;
+    private String conceptLibName;
+    private Integer conceptLibType;
+}

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

@@ -0,0 +1,29 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Data;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/8/6 13:15
+ */
+@Data
+public class ConceptCollectionPageVO extends Page {
+    /**
+     * 术语集合名称
+     */
+    private String collectionLibName;
+    /**
+     * 术语集合类型
+     */
+    private Integer collectionLibType;
+    /**
+     * 说明
+     */
+    private String collectionRemark;
+    /**
+     * 基础术语名称
+     */
+    private String conceptLibName;
+}

+ 16 - 0
cdssman-service/src/main/java/com/diagbot/vo/ConceptCollectionSaveVO.java

@@ -0,0 +1,16 @@
+package com.diagbot.vo;
+
+import com.diagbot.dto.ConceptCollectionDTO;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/8/6 14:57
+ */
+@Data
+public class ConceptCollectionSaveVO extends ConceptCollectionDTO {
+    public List<ConceptCollectionBaseVO> concepts;
+}

+ 1 - 0
cdssman-service/src/main/java/com/diagbot/vo/KlRuleInfoSaveSubVO.java

@@ -27,4 +27,5 @@ public class KlRuleInfoSaveSubVO {
     private String subEqOperator;//等于域比较符
     private String subEqValue;//等于域值
     private String subEqUnit;//等于域单位
+    private String subMsg;
 }

+ 4 - 4
cdssman-service/src/main/java/com/diagbot/web/ConceptInfoController.java

@@ -42,7 +42,7 @@ public class ConceptInfoController {
     private KlConceptStaticFacade klConceptStaticFacade;
 
     @ApiOperation(value = "医学术语检索-新增静态知识[zhaops]",
-            notes = "types: 类型(多选):0-全部、1-诊断、2-药品、3-检验、5-检查、6-手术和操作、8-量表、9-护理、10-法律法规 <br>" +
+            notes = "types: 类型(多选):0-全部、1-诊断、2-药品、3-检验、5-检查、6-手术和操作、8-量表、9-护理、10-政策法规 <br>" +
                     "inputStr: 检索内容<br>")
     @PostMapping("/staticKnowledgeIndexWithoutInfo")
     @SysLogger("staticKnowledgeIndexWithoutInfo")
@@ -53,7 +53,7 @@ public class ConceptInfoController {
     }
 
     @ApiOperation(value = "获取静态知识列表[zhaops]",
-            notes = "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验明细、5-检查、6-手术和操作、8-量表、9-护理、10-法律法规 <br>" +
+            notes = "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验明细、5-检查、6-手术和操作、8-量表、9-护理、10-政策法规 <br>" +
                     "name: 术语名称<br>" +
                     "status: 启用状态:1-启用、0-禁用<br>")
     @PostMapping("/getPage")
@@ -66,7 +66,7 @@ public class ConceptInfoController {
     @ApiOperation(value = "保存静态知识-新增或修改[zhaops]",
             notes = "id: id <br>" +
                     "name: 术语名称 <br>" +
-                    "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-法律法规  <br>" +
+                    "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-政策法规  <br>" +
                     "clinicalPathwayName: 临床路径名称<br>" +
                     "noticeName: 注意事项名称<br>" +
                     "source:数据来源:0-医院端、1-云平台,默认0 <br>" +
@@ -93,7 +93,7 @@ public class ConceptInfoController {
 
     @ApiOperation(value = "静态知识是否存在[zhaops]",
             notes = "name: 术语名称 <br>" +
-                    "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验明细、5-检查、6-手术和操作、8-量表、9-护理、10-法律法规 <br>")
+                    "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验明细、5-检查、6-手术和操作、8-量表、9-护理、10-政策法规 <br>")
     @PostMapping("/isExist")
     @SysLogger("isExist")
     public RespDTO<Boolean> isExist(@Valid @RequestBody KlConceptStaticVO klConceptStaticVO) {

+ 81 - 0
cdssman-service/src/main/java/com/diagbot/web/KlConceptCollectionController.java

@@ -0,0 +1,81 @@
+package com.diagbot.web;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.ConceptCollectionDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.KlConceptCollectionFacade;
+import com.diagbot.vo.ConceptCollectionPageVO;
+import com.diagbot.vo.ConceptCollectionSaveVO;
+import com.diagbot.vo.IdVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/8/6 14:37
+ */
+@RestController
+@RequestMapping("/kl/conceptCollection")
+@Api(value = "术语集合维护相关API", tags = { "术语集合维护相关API" })
+@SuppressWarnings("unchecked")
+public class KlConceptCollectionController {
+
+    @Autowired
+    private KlConceptCollectionFacade klConceptCollectionFacade;
+
+    @ApiOperation(value = "获取术语集合列表[zhaops]",
+            notes = "collectionLibName:术语集合名称 <br>" +
+                    "collectionLibType: 术语集合类型 <br>" +
+                    "conceptLibName: 术语集合类型 <br>" +
+                    "collectionRemark: 基础术语名称 <br>")
+    @PostMapping("/getPage")
+    @SysLogger("getPage")
+    public RespDTO<IPage<ConceptCollectionDTO>> getPage(@Valid @RequestBody ConceptCollectionPageVO conceptCollectionPageVO) {
+        IPage<ConceptCollectionDTO> data = klConceptCollectionFacade.getConceptCollectionPage(conceptCollectionPageVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "保存(新增or修改)[zhaops]",
+            notes = "collectionId:术语集合Id,必填 <br>" +
+                    "collectionLibType: 术语集合类型,必填 <br>" +
+                    "collectionLibName:术语集合名称 <br>" +
+                    "relationId: 关系类型 <br>" +
+                    "conceptLibType: 术语集合类型 <br>" +
+                    "collectionRemark: 基础术语名称 <br>" +
+                    "conceptId: 基础术语id,必填 <br>" +
+                    "conceptLibType: 基础术语类型,必填 <br>" +
+                    "conceptLibName: 基础术语名称 <br>")
+    @PostMapping("/saveOrUpdateRecord")
+    @SysLogger("saveOrUpdateRecord")
+    public RespDTO<Boolean> saveOrUpdateRecord(@Valid @RequestBody ConceptCollectionSaveVO conceptCollectionSaveVO) {
+        Boolean data = klConceptCollectionFacade.saveOrUpdateRecord(conceptCollectionSaveVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "根据术语集合id获取集合相关信息[zhaops]",
+            notes = "id: 术语集合id <br>")
+    @PostMapping("/getRecordById")
+    @SysLogger("getRecordById")
+    public RespDTO<ConceptCollectionSaveVO> getRecordById(@Valid @RequestBody IdVO idVO) {
+        ConceptCollectionSaveVO data = klConceptCollectionFacade.getRecordById(idVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "根据术语集合id删除术语集合关联关系[zhaops]",
+            notes = "id: 术语集合id <br>")
+    @PostMapping("/deleteById")
+    @SysLogger("deleteById")
+    public RespDTO<Boolean> deleteById(@Valid @RequestBody IdVO idVO) {
+        Boolean data = klConceptCollectionFacade.deleteById(idVO);
+        return RespDTO.onSuc(data);
+    }
+}

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

@@ -80,6 +80,7 @@
         <if test="hospitalInfoPageVO.name!=null and hospitalInfoPageVO.name!=''">
             AND a.name Like concat("%",#{hospitalInfoPageVO.name},"%")
         </if>
-        order by a.gmt_create asc
+        order by a.gmt_create asc,
+        a.id ASC
     </select>
 </mapper>

+ 54 - 0
cdssman-service/src/main/resources/mapper/KlRelationMapper.xml

@@ -200,4 +200,58 @@
 
     </select>
 
+    <select id="getConceptCollectionPage" resultType="com.diagbot.dto.ConceptCollectionDTO">
+        SELECT
+        t1.*,
+        t4.id AS conceptId,
+        group_concat( t4.lib_name ) AS concatConceptLibName,
+        t4.lib_type AS conceptLibType,
+        t4.STATUS  AS conceptStatus
+        FROM
+        (
+        SELECT
+        a.id AS collectionId,
+        a.lib_name AS collectionLibName,
+        a.lib_type AS collectionLibType,
+        a.lib_id AS collectionLibId,
+        a.`status` AS collectionStatus,
+        b.remark AS collectionRemark
+        FROM
+        kl_concept a,
+        kl_library_info b
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND a.id = b.concept_id
+        AND a.`status` = 1
+        AND b.is_concept = 1
+        <if test="conceptCollectionPageVO.collectionLibType!=null">
+            AND  a.lib_type = #{conceptCollectionPageVO.collectionLibType}
+        </if>
+        <if test="conceptCollectionPageVO.collectionLibType==null">
+            AND  a.lib_type between 308 and 328
+        </if>
+        <if test="conceptCollectionPageVO.collectionLibName != null and conceptCollectionPageVO.collectionLibName != ''">
+            AND a.lib_name LIKE concat('%',#{conceptCollectionPageVO.collectionLibName},'%')
+        </if>
+        <if test="conceptCollectionPageVO.collectionRemark != null and conceptCollectionPageVO.collectionRemark != ''">
+            AND b.remark LIKE concat('%',#{conceptCollectionPageVO.collectionRemark},'%')
+        </if>
+        ) t1,
+        kl_relation t2,
+        kl_relation_order t3,
+        kl_concept t4
+        WHERE
+        t1.collectionId = t2.start_id
+        AND t3.t_relation_id = t2.id
+        AND t2.relation_id = 600
+        AND t2.end_id = t4.id
+        AND t4.is_deleted = 'N'
+        AND t4.`status` = 1
+        <if test="conceptCollectionPageVO.conceptLibName != null and conceptCollectionPageVO.conceptLibName != ''">
+            AND t4.lib_name LIKE concat('%',#{conceptCollectionPageVO.conceptLibName},'%')
+        </if>
+        GROUP BY
+        t1.collectionId
+    </select>
 </mapper>

+ 5 - 1
common/src/main/java/com/diagbot/biz/push/entity/Item.java

@@ -20,9 +20,13 @@ public class Item {
      */
     private String uniqueName;
     /**
-     * 结果时间
+     * 开单时间
      */
     private String dateValue;
+    /**
+     * 出报告时间
+     */
+    private String finishDateValue;
     /**
      * 频次
      */

+ 5 - 1
common/src/main/java/com/diagbot/biz/push/entity/Lis.java

@@ -44,9 +44,13 @@ public class Lis {
      */
     private String otherValue;
     /**
-     * 结果时间
+     * 开单时间
      */
     private String dateValue;
+    /**
+     * 出报告时间
+     */
+    private String finishDateValue;
     /**
      * 数据来源(0:内部数据,1:外部数据)
      */

+ 5 - 1
common/src/main/java/com/diagbot/biz/push/entity/Pacs.java

@@ -28,9 +28,13 @@ public class Pacs {
      */
     private String result;
     /**
-     * 结果时间
+     * 开单时间
      */
     private String dateValue;
+    /**
+     * 出报告时间
+     */
+    private String finishDateValue;
     /**
      * 频次
      */