Browse Source

Merge branch 'dev/cdssman20200727_init' into debug

gaodm 4 years ago
parent
commit
896103c046
72 changed files with 2798 additions and 333 deletions
  1. 10 0
      cdssman-service/src/main/java/com/diagbot/client/CdssCoreClient.java
  2. 13 0
      cdssman-service/src/main/java/com/diagbot/client/hystrix/CdssCoreHystrix.java
  3. 5 1
      cdssman-service/src/main/java/com/diagbot/dto/ConceptInfoDTO.java
  4. 24 0
      cdssman-service/src/main/java/com/diagbot/dto/ConceptMappingDTO.java
  5. 9 0
      cdssman-service/src/main/java/com/diagbot/dto/PlanInfoPagesDTO.java
  6. 2 0
      cdssman-service/src/main/java/com/diagbot/dto/UserRoleInfoFindDTO.java
  7. 14 0
      cdssman-service/src/main/java/com/diagbot/entity/ConceptInfo.java
  8. 56 26
      cdssman-service/src/main/java/com/diagbot/entity/DeptConfig.java
  9. 51 23
      cdssman-service/src/main/java/com/diagbot/entity/DiseaseConfig.java
  10. 68 22
      cdssman-service/src/main/java/com/diagbot/entity/DrugConfig.java
  11. 3 0
      cdssman-service/src/main/java/com/diagbot/entity/HospitalInfo.java
  12. 56 26
      cdssman-service/src/main/java/com/diagbot/entity/LisConfig.java
  13. 51 23
      cdssman-service/src/main/java/com/diagbot/entity/OperationConfig.java
  14. 49 21
      cdssman-service/src/main/java/com/diagbot/entity/PacsConfig.java
  15. 30 11
      cdssman-service/src/main/java/com/diagbot/entity/TransfusionConfig.java
  16. 10 9
      cdssman-service/src/main/java/com/diagbot/enums/ConceptTypeEnum.java
  17. 45 0
      cdssman-service/src/main/java/com/diagbot/enums/DisclaimerCodeEnum.java
  18. 68 0
      cdssman-service/src/main/java/com/diagbot/enums/StaticTypeEnum.java
  19. 110 73
      cdssman-service/src/main/java/com/diagbot/facade/ConceptInfoFacade.java
  20. 158 3
      cdssman-service/src/main/java/com/diagbot/facade/DeptConfigFacade.java
  21. 153 3
      cdssman-service/src/main/java/com/diagbot/facade/DiseaseConfigFacade.java
  22. 356 11
      cdssman-service/src/main/java/com/diagbot/facade/DrugConfigFacade.java
  23. 30 0
      cdssman-service/src/main/java/com/diagbot/facade/EnumsDataFacade.java
  24. 156 0
      cdssman-service/src/main/java/com/diagbot/facade/HospitalInfoFacade.java
  25. 182 3
      cdssman-service/src/main/java/com/diagbot/facade/LisConfigFacade.java
  26. 152 3
      cdssman-service/src/main/java/com/diagbot/facade/OperationConfigFacade.java
  27. 152 3
      cdssman-service/src/main/java/com/diagbot/facade/PacsConfigFacade.java
  28. 18 14
      cdssman-service/src/main/java/com/diagbot/facade/PlanDetailFacade.java
  29. 111 22
      cdssman-service/src/main/java/com/diagbot/facade/PlanFacade.java
  30. 155 6
      cdssman-service/src/main/java/com/diagbot/facade/TransfusionConfigFacade.java
  31. 14 2
      cdssman-service/src/main/java/com/diagbot/facade/UserRoleFacade.java
  32. 11 0
      cdssman-service/src/main/java/com/diagbot/mapper/HospitalInfoMapper.java
  33. 20 0
      cdssman-service/src/main/java/com/diagbot/service/EnumsDataService.java
  34. 12 1
      cdssman-service/src/main/java/com/diagbot/service/HospitalInfoService.java
  35. 31 0
      cdssman-service/src/main/java/com/diagbot/service/impl/EnumsDataServiceImpl.java
  36. 13 0
      cdssman-service/src/main/java/com/diagbot/service/impl/HospitalInfoServiceImpl.java
  37. 1 1
      cdssman-service/src/main/java/com/diagbot/vo/ChangeStatusVO.java
  38. 1 1
      cdssman-service/src/main/java/com/diagbot/vo/ConceptInfoPageVO.java
  39. 20 0
      cdssman-service/src/main/java/com/diagbot/vo/ConceptVO.java
  40. 6 1
      cdssman-service/src/main/java/com/diagbot/vo/HospitalPlanCancelVO.java
  41. 1 0
      cdssman-service/src/main/java/com/diagbot/vo/HospitalPlanDetailSaveVO.java
  42. 20 0
      cdssman-service/src/main/java/com/diagbot/vo/HospitalPlanIdVO.java
  43. 11 1
      cdssman-service/src/main/java/com/diagbot/vo/HospitalPlanSaveVO.java
  44. 20 0
      cdssman-service/src/main/java/com/diagbot/vo/HospitalSaveVO.java
  45. 10 1
      cdssman-service/src/main/java/com/diagbot/vo/StaticKnowledgeIndexVO.java
  46. 13 0
      cdssman-service/src/main/java/com/diagbot/web/DeptConfigController.java
  47. 14 1
      cdssman-service/src/main/java/com/diagbot/web/DiseaseConfigController.java
  48. 14 0
      cdssman-service/src/main/java/com/diagbot/web/DrugConfigController.java
  49. 35 0
      cdssman-service/src/main/java/com/diagbot/web/EnumsController.java
  50. 25 0
      cdssman-service/src/main/java/com/diagbot/web/HospitalInfoController.java
  51. 13 0
      cdssman-service/src/main/java/com/diagbot/web/LisConfigController.java
  52. 13 0
      cdssman-service/src/main/java/com/diagbot/web/OperationConfigController.java
  53. 13 0
      cdssman-service/src/main/java/com/diagbot/web/PacsConfigController.java
  54. 8 0
      cdssman-service/src/main/java/com/diagbot/web/PlanController.java
  55. 13 0
      cdssman-service/src/main/java/com/diagbot/web/TransfusionConfigController.java
  56. 12 8
      cdssman-service/src/main/resources/mapper/ConceptInfoMapper.xml
  57. 1 0
      cdssman-service/src/main/resources/mapper/DeptConfigMapper.xml
  58. 1 0
      cdssman-service/src/main/resources/mapper/DiseaseConfigMapper.xml
  59. 2 0
      cdssman-service/src/main/resources/mapper/DrugConfigMapper.xml
  60. 30 0
      cdssman-service/src/main/resources/mapper/HospitalInfoMapper.xml
  61. 1 0
      cdssman-service/src/main/resources/mapper/LisConfigMapper.xml
  62. 1 0
      cdssman-service/src/main/resources/mapper/OperationConfigMapper.xml
  63. 1 0
      cdssman-service/src/main/resources/mapper/PacsConfigMapper.xml
  64. 22 11
      cdssman-service/src/main/resources/mapper/PlanMapper.xml
  65. 1 0
      cdssman-service/src/main/resources/mapper/TransfusionConfigMapper.xml
  66. 23 2
      common/src/main/java/com/diagbot/util/Cn2SpellUtil.java
  67. 3 0
      config-server/src/main/resources/shared/cdssman-service-dev.yml
  68. 3 0
      config-server/src/main/resources/shared/cdssman-service-local.yml
  69. 3 0
      config-server/src/main/resources/shared/cdssman-service-pre.yml
  70. 3 0
      config-server/src/main/resources/shared/cdssman-service-pro.yml
  71. 7 0
      config-server/src/main/resources/shared/cdssman-service-test.yml
  72. 35 0
      docs/040.20201016CDSS朗通云平台相关脚本/user_init.sql

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

@@ -3,6 +3,7 @@ package com.diagbot.client;
 import com.diagbot.client.hystrix.CdssCoreHystrix;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.StaticKnowledgeIndexDTO;
+import com.diagbot.vo.ConceptVO;
 import com.diagbot.vo.HasStaticKnowledgeVO;
 import com.diagbot.vo.StaticKnowledgeIndexVO;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -36,4 +37,13 @@ public interface CdssCoreClient {
      */
     @PostMapping("/staticKnowledge/updateHasInfoStatus")
     RespDTO<Boolean> updateHasInfoStatus(@Valid @RequestBody HasStaticKnowledgeVO hasStaticKnowledgeVO);
+
+    /**
+     * 术语批量校验
+     *
+     * @param conceptVO
+     * @return
+     */
+    @PostMapping("/retrieval/getConceptNames")
+    RespDTO<List<String>> getConceptNames(@Valid @RequestBody ConceptVO conceptVO);
 }

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

@@ -3,6 +3,7 @@ package com.diagbot.client.hystrix;
 import com.diagbot.client.CdssCoreClient;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.StaticKnowledgeIndexDTO;
+import com.diagbot.vo.ConceptVO;
 import com.diagbot.vo.HasStaticKnowledgeVO;
 import com.diagbot.vo.StaticKnowledgeIndexVO;
 import lombok.extern.slf4j.Slf4j;
@@ -43,4 +44,16 @@ public class CdssCoreHystrix implements CdssCoreClient {
         log.error("【hystrix】调用{}异常", "updateHasInfoStatus");
         return null;
     }
+
+    /**
+     * 术语批量校验
+     *
+     * @param conceptVO
+     * @return
+     */
+    @Override
+    public RespDTO<List<String>> getConceptNames(@Valid @RequestBody ConceptVO conceptVO) {
+        log.error("【hystrix】调用{}异常", "getConceptNames");
+        return null;
+    }
 }

+ 5 - 1
cdssman-service/src/main/java/com/diagbot/dto/ConceptInfoDTO.java

@@ -22,6 +22,10 @@ public class ConceptInfoDTO {
      * 术语名称
      */
     private String name;
+    /**
+     * 关联标题
+     */
+    private String title;
     /**
      * 术语类型(词性)
      */
@@ -49,7 +53,7 @@ public class ConceptInfoDTO {
     /**
      * 启用状态
      */
-    private String isDeleted;
+    private Integer status;
     /**
      * 明细
      */

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

@@ -0,0 +1,24 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/10/13 9:52
+ */
+@Getter
+@Setter
+public class ConceptMappingDTO {
+    private String name;
+    private Long hospitalId;
+    private Integer connect;
+    private Integer lisNum = 0;
+    private Integer deptNum = 0;
+    private Integer drugNum = 0;
+    private Integer pacsNum = 0;
+    private Integer diseaseNum = 0;
+    private Integer operationNum = 0;
+    private Integer transfusionNum = 0;
+}

+ 9 - 0
cdssman-service/src/main/java/com/diagbot/dto/PlanInfoPagesDTO.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -19,12 +20,20 @@ public class PlanInfoPagesDTO {
      * 医院编码
      */
     private Long hospitalId;
+
+    private String hospitalName;
     /**
      * 方案编号
      */
     private String planName;
 
     private String planCode;
+
+    private Integer planStatus;
+
+    private Date gmtCreate;
+
+    private String planDetail;
     /**
      * 备注
      */

+ 2 - 0
cdssman-service/src/main/java/com/diagbot/dto/UserRoleInfoFindDTO.java

@@ -36,4 +36,6 @@ public class UserRoleInfoFindDTO {
 
     private Long hospitalId;
 
+    private String hospitalName;
+
 }

+ 14 - 0
cdssman-service/src/main/java/com/diagbot/entity/ConceptInfo.java

@@ -71,6 +71,11 @@ public class ConceptInfo implements Serializable {
      */
     private String noticeName;
 
+    /**
+     * 启用状态(0:禁用,1:启用)
+     */
+    private Integer status;
+
     public Long getId() {
         return id;
     }
@@ -151,6 +156,14 @@ public class ConceptInfo implements Serializable {
         this.noticeName = noticeName;
     }
 
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
     @Override
     public String toString() {
         return "ConceptInfo{" +
@@ -164,6 +177,7 @@ public class ConceptInfo implements Serializable {
                 ", type=" + type +
                 ", clinicalPathwayName=" + clinicalPathwayName +
                 ", noticeName=" + noticeName +
+                ", status=" + status +
                 "}";
     }
 }

+ 56 - 26
cdssman-service/src/main/java/com/diagbot/entity/DeptConfig.java

@@ -6,9 +6,9 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * <p>
@@ -57,33 +57,32 @@ public class DeptConfig implements Serializable {
     /**
      * 医院id
      */
-    @NotNull(message = "请输入医院id")
     private Long hospitalId;
 
     /**
-     * 医院项目名称
+     * 医院科室名称
      */
-    @Excel(name="HIS名称", width = 40)
-    @NotBlank(message = "请输入医院端项目名称")
+    @Excel(name = "医院科室名称", width = 40, orderNum = "2", isImportField = "true")
+    @NotBlank(message = "请输入医院科室名称")
     private String hisName;
 
     /**
-     * 医院项目编码
+     * 医院科室编码
      */
-    @Excel(name = "HIS编码", width = 40)
+    @Excel(name = "医院科室编码", width = 40, orderNum = "1", isImportField = "true")
     private String hisCode;
 
     /**
-     * 标准名称
+     * 标准科室名称
      */
-    @Excel(name = "标准名称", width = 40)
-    @NotBlank(message = "请输入标准术语名称")
+    @Excel(name = "标准科室名称", width = 40, orderNum = "4", isImportField = "true")
+    @NotBlank(message = "请输入标准科室名称")
     private String uniqueName;
 
     /**
-     * 标准编码
+     * 对应项编码
      */
-    @Excel(name="标准编码", width = 40)
+    //@Excel(name = "对应项编码", width = 40, orderNum = "3")
     private String uniqueCode;
 
     public Long getId() {
@@ -93,6 +92,7 @@ public class DeptConfig implements Serializable {
     public void setId(Long id) {
         this.id = id;
     }
+
     public String getIsDeleted() {
         return isDeleted;
     }
@@ -100,6 +100,7 @@ public class DeptConfig implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
+
     public Date getGmtCreate() {
         return gmtCreate;
     }
@@ -107,6 +108,7 @@ public class DeptConfig implements Serializable {
     public void setGmtCreate(Date gmtCreate) {
         this.gmtCreate = gmtCreate;
     }
+
     public Date getGmtModified() {
         return gmtModified;
     }
@@ -114,6 +116,7 @@ public class DeptConfig implements Serializable {
     public void setGmtModified(Date gmtModified) {
         this.gmtModified = gmtModified;
     }
+
     public String getCreator() {
         return creator;
     }
@@ -121,6 +124,7 @@ public class DeptConfig implements Serializable {
     public void setCreator(String creator) {
         this.creator = creator;
     }
+
     public String getModifier() {
         return modifier;
     }
@@ -128,6 +132,7 @@ public class DeptConfig implements Serializable {
     public void setModifier(String modifier) {
         this.modifier = modifier;
     }
+
     public Long getHospitalId() {
         return hospitalId;
     }
@@ -135,6 +140,7 @@ public class DeptConfig implements Serializable {
     public void setHospitalId(Long hospitalId) {
         this.hospitalId = hospitalId;
     }
+
     public String getHisName() {
         return hisName;
     }
@@ -142,6 +148,7 @@ public class DeptConfig implements Serializable {
     public void setHisName(String hisName) {
         this.hisName = hisName;
     }
+
     public String getHisCode() {
         return hisCode;
     }
@@ -149,6 +156,7 @@ public class DeptConfig implements Serializable {
     public void setHisCode(String hisCode) {
         this.hisCode = hisCode;
     }
+
     public String getUniqueName() {
         return uniqueName;
     }
@@ -156,6 +164,7 @@ public class DeptConfig implements Serializable {
     public void setUniqueName(String uniqueName) {
         this.uniqueName = uniqueName;
     }
+
     public String getUniqueCode() {
         return uniqueCode;
     }
@@ -167,17 +176,38 @@ public class DeptConfig implements Serializable {
     @Override
     public String toString() {
         return "DeptConfig{" +
-            "id=" + id +
-            ", isDeleted=" + isDeleted +
-            ", gmtCreate=" + gmtCreate +
-            ", gmtModified=" + gmtModified +
-            ", creator=" + creator +
-            ", modifier=" + modifier +
-            ", hospitalId=" + hospitalId +
-            ", hisName=" + hisName +
-            ", hisCode=" + hisCode +
-            ", uniqueName=" + uniqueName +
-            ", uniqueCode=" + uniqueCode +
-        "}";
-    }
-}
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", hospitalId=" + hospitalId +
+                ", hisName=" + hisName +
+                ", hisCode=" + hisCode +
+                ", uniqueName=" + uniqueName +
+                ", uniqueCode=" + uniqueCode +
+                "}";
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        DeptConfig deptConfig = (DeptConfig) o;
+        return Objects.equals(id, deptConfig.id)
+                && Objects.equals(isDeleted, deptConfig.isDeleted)
+                && Objects.equals(hospitalId, deptConfig.hospitalId)
+                && Objects.equals(hisName, deptConfig.hisName)
+                && Objects.equals(hisCode, deptConfig.hisCode)
+                && Objects.equals(uniqueName, deptConfig.uniqueName)
+                && Objects.equals(uniqueCode, deptConfig.uniqueCode);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, isDeleted, hospitalId, hisName, hisCode, uniqueName, uniqueCode);
+    }
+}

+ 51 - 23
cdssman-service/src/main/java/com/diagbot/entity/DiseaseConfig.java

@@ -6,9 +6,9 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * <p>
@@ -57,27 +57,26 @@ public class DiseaseConfig implements Serializable {
     /**
      * 医院id
      */
-    @NotNull(message = "请输入医院id")
     private Long hospitalId;
 
     /**
-     * his名称
+     * 医院诊断名称
      */
-    @Excel(name="HIS名称", width = 40)
-    @NotBlank(message = "请输入医院端项目名称")
+    @Excel(name = "医院诊断名称", width = 40, orderNum = "1", isImportField = "true")
+    @NotBlank(message = "请输入医院诊断名称")
     private String hisName;
 
     /**
-     * 标准名
+     * 标准诊断
      */
-    @Excel(name = "标准名称", width = 40)
-    @NotBlank(message = "请输入标准术语名称")
+    @Excel(name = "标准诊断名称", width = 40, orderNum = "3", isImportField = "true")
+    @NotBlank(message = "请输入标准诊断名称")
     private String uniqueName;
 
     /**
-     * ICD编码
+     * ICD-10编码
      */
-    @Excel(name="ICD编码", width = 40)
+    @Excel(name = "ICD-10编码", width = 40, orderNum = "2", isImportField = "true")
     private String icdCode;
 
     public Long getId() {
@@ -87,6 +86,7 @@ public class DiseaseConfig implements Serializable {
     public void setId(Long id) {
         this.id = id;
     }
+
     public String getIsDeleted() {
         return isDeleted;
     }
@@ -94,6 +94,7 @@ public class DiseaseConfig implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
+
     public Date getGmtCreate() {
         return gmtCreate;
     }
@@ -101,6 +102,7 @@ public class DiseaseConfig implements Serializable {
     public void setGmtCreate(Date gmtCreate) {
         this.gmtCreate = gmtCreate;
     }
+
     public Date getGmtModified() {
         return gmtModified;
     }
@@ -108,6 +110,7 @@ public class DiseaseConfig implements Serializable {
     public void setGmtModified(Date gmtModified) {
         this.gmtModified = gmtModified;
     }
+
     public String getCreator() {
         return creator;
     }
@@ -115,6 +118,7 @@ public class DiseaseConfig implements Serializable {
     public void setCreator(String creator) {
         this.creator = creator;
     }
+
     public String getModifier() {
         return modifier;
     }
@@ -122,6 +126,7 @@ public class DiseaseConfig implements Serializable {
     public void setModifier(String modifier) {
         this.modifier = modifier;
     }
+
     public Long getHospitalId() {
         return hospitalId;
     }
@@ -129,6 +134,7 @@ public class DiseaseConfig implements Serializable {
     public void setHospitalId(Long hospitalId) {
         this.hospitalId = hospitalId;
     }
+
     public String getHisName() {
         return hisName;
     }
@@ -136,6 +142,7 @@ public class DiseaseConfig implements Serializable {
     public void setHisName(String hisName) {
         this.hisName = hisName;
     }
+
     public String getUniqueName() {
         return uniqueName;
     }
@@ -143,6 +150,7 @@ public class DiseaseConfig implements Serializable {
     public void setUniqueName(String uniqueName) {
         this.uniqueName = uniqueName;
     }
+
     public String getIcdCode() {
         return icdCode;
     }
@@ -154,16 +162,36 @@ public class DiseaseConfig implements Serializable {
     @Override
     public String toString() {
         return "DiseaseConfig{" +
-            "id=" + id +
-            ", isDeleted=" + isDeleted +
-            ", gmtCreate=" + gmtCreate +
-            ", gmtModified=" + gmtModified +
-            ", creator=" + creator +
-            ", modifier=" + modifier +
-            ", hospitalId=" + hospitalId +
-            ", hisName=" + hisName +
-            ", uniqueName=" + uniqueName +
-            ", icdCode=" + icdCode +
-        "}";
-    }
-}
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", hospitalId=" + hospitalId +
+                ", hisName=" + hisName +
+                ", uniqueName=" + uniqueName +
+                ", icdCode=" + icdCode +
+                "}";
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        DiseaseConfig diseaseConfig = (DiseaseConfig) o;
+        return Objects.equals(id, diseaseConfig.id)
+                && Objects.equals(isDeleted, diseaseConfig.isDeleted)
+                && Objects.equals(hospitalId, diseaseConfig.hospitalId)
+                && Objects.equals(hisName, diseaseConfig.hisName)
+                && Objects.equals(uniqueName, diseaseConfig.uniqueName)
+                && Objects.equals(icdCode, diseaseConfig.icdCode);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, isDeleted, hospitalId, hisName, uniqueName, icdCode);
+    }
+}

+ 68 - 22
cdssman-service/src/main/java/com/diagbot/entity/DrugConfig.java

@@ -6,9 +6,9 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * <p>
@@ -57,29 +57,36 @@ public class DrugConfig implements Serializable {
     /**
      * 医院id
      */
-    @NotNull(message = "请输入医院id")
     private Long hospitalId;
 
     /**
-     * his名称
+     * 医院药品名称
      */
-    @Excel(name="HIS名称", width = 40)
-    @NotBlank(message = "请输入医院端项目名称")
+    @Excel(name = "医院药品名称", width = 40, orderNum = "1", isImportField = "true")
+    @NotBlank(message = "请输入医院药品名称")
+    //@Size(max = 80, min = 1,message = "医院药品名称长度需要在1-80字符长度之间")
     private String hisName;
 
     /**
-     * 标准名
+     * 标准药品
      */
-    @Excel(name = "标准名称", width = 40)
-    @NotBlank(message = "请输入标准术语名称")
+    @Excel(name = "标准药品名称", width = 40, orderNum = "2", isImportField = "true")
+    @NotBlank(message = "请输入标准药品名称")
+    //@Size(max = 80, min = 1,message = "标准药品名称长度需要在1-80字符长度之间")
     private String uniqueName;
 
     /**
      * 标准编码
      */
-    @Excel(name="标准编码", width = 40)
+    //@Excel(name = "对应项编码", width = 40, orderNum = "3")
     private String uniqueCode;
 
+    /**
+     * 剂型
+     */
+    @Excel(name = "药品剂型(不填、注射剂、片剂、缓释片、胶囊剂、滴丸剂)", width = 60, orderNum = "3", isImportField = "true")
+    private String form;
+
     public Long getId() {
         return id;
     }
@@ -87,6 +94,7 @@ public class DrugConfig implements Serializable {
     public void setId(Long id) {
         this.id = id;
     }
+
     public String getIsDeleted() {
         return isDeleted;
     }
@@ -94,6 +102,7 @@ public class DrugConfig implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
+
     public Date getGmtCreate() {
         return gmtCreate;
     }
@@ -101,6 +110,7 @@ public class DrugConfig implements Serializable {
     public void setGmtCreate(Date gmtCreate) {
         this.gmtCreate = gmtCreate;
     }
+
     public Date getGmtModified() {
         return gmtModified;
     }
@@ -108,6 +118,7 @@ public class DrugConfig implements Serializable {
     public void setGmtModified(Date gmtModified) {
         this.gmtModified = gmtModified;
     }
+
     public String getCreator() {
         return creator;
     }
@@ -115,6 +126,7 @@ public class DrugConfig implements Serializable {
     public void setCreator(String creator) {
         this.creator = creator;
     }
+
     public String getModifier() {
         return modifier;
     }
@@ -122,6 +134,7 @@ public class DrugConfig implements Serializable {
     public void setModifier(String modifier) {
         this.modifier = modifier;
     }
+
     public Long getHospitalId() {
         return hospitalId;
     }
@@ -129,6 +142,7 @@ public class DrugConfig implements Serializable {
     public void setHospitalId(Long hospitalId) {
         this.hospitalId = hospitalId;
     }
+
     public String getHisName() {
         return hisName;
     }
@@ -136,6 +150,7 @@ public class DrugConfig implements Serializable {
     public void setHisName(String hisName) {
         this.hisName = hisName;
     }
+
     public String getUniqueName() {
         return uniqueName;
     }
@@ -143,6 +158,7 @@ public class DrugConfig implements Serializable {
     public void setUniqueName(String uniqueName) {
         this.uniqueName = uniqueName;
     }
+
     public String getUniqueCode() {
         return uniqueCode;
     }
@@ -151,19 +167,49 @@ public class DrugConfig implements Serializable {
         this.uniqueCode = uniqueCode;
     }
 
+    public String getForm() {
+        return form;
+    }
+
+    public void setForm(String form) {
+        this.form = form;
+    }
+
     @Override
     public String toString() {
         return "DrugConfig{" +
-            "id=" + id +
-            ", isDeleted=" + isDeleted +
-            ", gmtCreate=" + gmtCreate +
-            ", gmtModified=" + gmtModified +
-            ", creator=" + creator +
-            ", modifier=" + modifier +
-            ", hospitalId=" + hospitalId +
-            ", hisName=" + hisName +
-            ", uniqueName=" + uniqueName +
-            ", uniqueCode=" + uniqueCode +
-        "}";
-    }
-}
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", hospitalId=" + hospitalId +
+                ", hisName=" + hisName +
+                ", uniqueName=" + uniqueName +
+                ", uniqueCode=" + uniqueCode +
+                ", form=" + form +
+                "}";
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        DrugConfig drugConfig = (DrugConfig) o;
+        return Objects.equals(id, drugConfig.id)
+                && Objects.equals(isDeleted, drugConfig.isDeleted)
+                && Objects.equals(hospitalId, drugConfig.hospitalId)
+                && Objects.equals(hisName, drugConfig.hisName)
+                && Objects.equals(form, drugConfig.form)
+                && Objects.equals(uniqueName, drugConfig.uniqueName)
+                && Objects.equals(uniqueCode, drugConfig.uniqueCode);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, isDeleted, hospitalId, hisName, form, uniqueName, uniqueCode);
+    }
+}

+ 3 - 0
cdssman-service/src/main/java/com/diagbot/entity/HospitalInfo.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 
+import javax.validation.constraints.NotBlank;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -54,11 +55,13 @@ public class HospitalInfo implements Serializable {
     /**
      * 医院编码
      */
+    @NotBlank(message = "医院编码不能为空")
     private String code;
 
     /**
      * 医院名称
      */
+    @NotBlank(message = "医院名称不能为空")
     private String name;
 
     /**

+ 56 - 26
cdssman-service/src/main/java/com/diagbot/entity/LisConfig.java

@@ -7,9 +7,9 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * <p>
@@ -59,33 +59,32 @@ public class LisConfig implements Serializable {
     /**
      * 医院id
      */
-    @NotNull(message = "请输入医院id")
     private Long hospitalId;
 
     /**
-     * his大项名称
+     * 检验套餐
      */
-    @Excel(name = "his大项名称", width = 40)
-    @NotBlank(message = "请输入大项名称")
+    @Excel(name = "检验套餐", width = 40, orderNum = "1", isImportField = "true")
+    @NotBlank(message = "请输入检验套餐")
     private String hisName;
 
     /**
-     * his小项名称
+     * 检验细项
      */
-    @Excel(name = "his小项名称", width = 40)
+    @Excel(name = "检验细项", width = 40, orderNum = "2", isImportField = "true")
     private String hisDetailName;
 
     /**
-     * 标准
+     * 标准检验项目
      */
-    @Excel(name = "标准名", width = 40)
-    @NotBlank(message = "请输入公表名称")
+    @Excel(name = "标准检验项目", width = 40, orderNum = "4", isImportField = "true")
+    @NotBlank(message = "请输入标准检验项目")
     private String uniqueName;
 
     /**
-     * 标准编码
+     * 对应项目编码
      */
-    @Excel(name = "标准编码", width = 40)
+    //@Excel(name = "对应项目编码", width = 40, orderNum = "3")
     private String uniqueCode;
 
     public Long getId() {
@@ -95,6 +94,7 @@ public class LisConfig implements Serializable {
     public void setId(Long id) {
         this.id = id;
     }
+
     public String getIsDeleted() {
         return isDeleted;
     }
@@ -102,6 +102,7 @@ public class LisConfig implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
+
     public Date getGmtCreate() {
         return gmtCreate;
     }
@@ -109,6 +110,7 @@ public class LisConfig implements Serializable {
     public void setGmtCreate(Date gmtCreate) {
         this.gmtCreate = gmtCreate;
     }
+
     public Date getGmtModified() {
         return gmtModified;
     }
@@ -116,6 +118,7 @@ public class LisConfig implements Serializable {
     public void setGmtModified(Date gmtModified) {
         this.gmtModified = gmtModified;
     }
+
     public String getCreator() {
         return creator;
     }
@@ -123,6 +126,7 @@ public class LisConfig implements Serializable {
     public void setCreator(String creator) {
         this.creator = creator;
     }
+
     public String getModifier() {
         return modifier;
     }
@@ -130,6 +134,7 @@ public class LisConfig implements Serializable {
     public void setModifier(String modifier) {
         this.modifier = modifier;
     }
+
     public Long getHospitalId() {
         return hospitalId;
     }
@@ -137,6 +142,7 @@ public class LisConfig implements Serializable {
     public void setHospitalId(Long hospitalId) {
         this.hospitalId = hospitalId;
     }
+
     public String getHisName() {
         return hisName;
     }
@@ -144,6 +150,7 @@ public class LisConfig implements Serializable {
     public void setHisName(String hisName) {
         this.hisName = hisName;
     }
+
     public String getHisDetailName() {
         return hisDetailName;
     }
@@ -151,6 +158,7 @@ public class LisConfig implements Serializable {
     public void setHisDetailName(String hisDetailName) {
         this.hisDetailName = hisDetailName;
     }
+
     public String getUniqueName() {
         return uniqueName;
     }
@@ -158,6 +166,7 @@ public class LisConfig implements Serializable {
     public void setUniqueName(String uniqueName) {
         this.uniqueName = uniqueName;
     }
+
     public String getUniqueCode() {
         return uniqueCode;
     }
@@ -169,17 +178,38 @@ public class LisConfig implements Serializable {
     @Override
     public String toString() {
         return "LisConfig{" +
-            "id=" + id +
-            ", isDeleted=" + isDeleted +
-            ", gmtCreate=" + gmtCreate +
-            ", gmtModified=" + gmtModified +
-            ", creator=" + creator +
-            ", modifier=" + modifier +
-            ", hospitalId=" + hospitalId +
-            ", hisName=" + hisName +
-            ", hisDetailName=" + hisDetailName +
-            ", uniqueName=" + uniqueName +
-            ", uniqueCode=" + uniqueCode +
-        "}";
-    }
-}
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", hospitalId=" + hospitalId +
+                ", hisName=" + hisName +
+                ", hisDetailName=" + hisDetailName +
+                ", uniqueName=" + uniqueName +
+                ", uniqueCode=" + uniqueCode +
+                "}";
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        LisConfig lisConfig = (LisConfig) o;
+        return Objects.equals(id, lisConfig.id)
+                && Objects.equals(isDeleted, lisConfig.isDeleted)
+                && Objects.equals(hospitalId, lisConfig.hospitalId)
+                && Objects.equals(hisName, lisConfig.hisName)
+                && Objects.equals(hisDetailName, lisConfig.hisDetailName)
+                && Objects.equals(uniqueName, lisConfig.uniqueName)
+                && Objects.equals(uniqueCode, lisConfig.uniqueCode);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, isDeleted, hospitalId, hisName, hisDetailName, uniqueName, uniqueCode);
+    }
+}

+ 51 - 23
cdssman-service/src/main/java/com/diagbot/entity/OperationConfig.java

@@ -6,9 +6,9 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * <p>
@@ -57,27 +57,26 @@ public class OperationConfig implements Serializable {
     /**
      * 医院id
      */
-    @NotNull(message = "请输入医院id")
     private Long hospitalId;
 
     /**
-     * his名称
+     * 医院手术/操作名称
      */
-    @Excel(name="HIS名称", width = 40)
-    @NotBlank(message = "请输入医院端项目名称")
+    @Excel(name = "医院手术/操作名称", width = 40, orderNum = "1", isImportField = "true")
+    @NotBlank(message = "请输入医院手术/操作名称")
     private String hisName;
 
     /**
-     * 标准名
+     * 标准手术/操作
      */
-    @Excel(name = "标准名称", width = 40)
-    @NotBlank(message = "请输入标准术语名称")
+    @Excel(name = "标准手术/操作名称", width = 40, orderNum = "3", isImportField = "true")
+    @NotBlank(message = "请输入标准手术/操作名称")
     private String uniqueName;
 
     /**
-     * 标准编码
+     * 对应项编码
      */
-    @Excel(name="标准编码", width = 40)
+    //@Excel(name = "对应项编码", width = 40, orderNum = "2")
     private String uniqueCode;
 
     public Long getId() {
@@ -87,6 +86,7 @@ public class OperationConfig implements Serializable {
     public void setId(Long id) {
         this.id = id;
     }
+
     public String getIsDeleted() {
         return isDeleted;
     }
@@ -94,6 +94,7 @@ public class OperationConfig implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
+
     public Date getGmtCreate() {
         return gmtCreate;
     }
@@ -101,6 +102,7 @@ public class OperationConfig implements Serializable {
     public void setGmtCreate(Date gmtCreate) {
         this.gmtCreate = gmtCreate;
     }
+
     public Date getGmtModified() {
         return gmtModified;
     }
@@ -108,6 +110,7 @@ public class OperationConfig implements Serializable {
     public void setGmtModified(Date gmtModified) {
         this.gmtModified = gmtModified;
     }
+
     public String getCreator() {
         return creator;
     }
@@ -115,6 +118,7 @@ public class OperationConfig implements Serializable {
     public void setCreator(String creator) {
         this.creator = creator;
     }
+
     public String getModifier() {
         return modifier;
     }
@@ -122,6 +126,7 @@ public class OperationConfig implements Serializable {
     public void setModifier(String modifier) {
         this.modifier = modifier;
     }
+
     public Long getHospitalId() {
         return hospitalId;
     }
@@ -129,6 +134,7 @@ public class OperationConfig implements Serializable {
     public void setHospitalId(Long hospitalId) {
         this.hospitalId = hospitalId;
     }
+
     public String getHisName() {
         return hisName;
     }
@@ -136,6 +142,7 @@ public class OperationConfig implements Serializable {
     public void setHisName(String hisName) {
         this.hisName = hisName;
     }
+
     public String getUniqueName() {
         return uniqueName;
     }
@@ -143,6 +150,7 @@ public class OperationConfig implements Serializable {
     public void setUniqueName(String uniqueName) {
         this.uniqueName = uniqueName;
     }
+
     public String getUniqueCode() {
         return uniqueCode;
     }
@@ -154,16 +162,36 @@ public class OperationConfig implements Serializable {
     @Override
     public String toString() {
         return "OperationConfig{" +
-            "id=" + id +
-            ", isDeleted=" + isDeleted +
-            ", gmtCreate=" + gmtCreate +
-            ", gmtModified=" + gmtModified +
-            ", creator=" + creator +
-            ", modifier=" + modifier +
-            ", hospitalId=" + hospitalId +
-            ", hisName=" + hisName +
-            ", uniqueName=" + uniqueName +
-            ", uniqueCode=" + uniqueCode +
-        "}";
-    }
-}
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", hospitalId=" + hospitalId +
+                ", hisName=" + hisName +
+                ", uniqueName=" + uniqueName +
+                ", uniqueCode=" + uniqueCode +
+                "}";
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        OperationConfig operationConfig = (OperationConfig) o;
+        return Objects.equals(id, operationConfig.id)
+                && Objects.equals(isDeleted, operationConfig.isDeleted)
+                && Objects.equals(hospitalId, operationConfig.hospitalId)
+                && Objects.equals(hisName, operationConfig.hisName)
+                && Objects.equals(uniqueName, operationConfig.uniqueName)
+                && Objects.equals(uniqueCode, operationConfig.uniqueCode);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, isDeleted, hospitalId, hisName, uniqueName, uniqueCode);
+    }
+}

+ 49 - 21
cdssman-service/src/main/java/com/diagbot/entity/PacsConfig.java

@@ -6,9 +6,9 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * <p>
@@ -57,27 +57,26 @@ public class PacsConfig implements Serializable {
     /**
      * 医院id
      */
-    @NotNull(message = "请输入医院id")
     private Long hospitalId;
 
     /**
-     * his名称
+     * 医院检查项目
      */
-    @Excel(name="HIS名称", width = 40)
-    @NotBlank(message = "请输入医院端项目名称")
+    @Excel(name = "医院检查项目", width = 40, orderNum = "1", isImportField = "true")
+    @NotBlank(message = "请输入医院检查项目")
     private String hisName;
 
     /**
-     * 标准
+     * 标准检查项目
      */
-    @Excel(name = "标准名称", width = 40)
-    @NotBlank(message = "请输入标准术语名称")
+    @Excel(name = "标准检查项目", width = 40, orderNum = "3", isImportField = "true")
+    @NotBlank(message = "请输入标准检查项目")
     private String uniqueName;
 
     /**
-     * 标准编码
+     * 对应项编码
      */
-    @Excel(name="标准编码", width = 40)
+    //@Excel(name = "对应项编码", width = 40, orderNum = "2")
     private String uniqueCode;
 
     public Long getId() {
@@ -87,6 +86,7 @@ public class PacsConfig implements Serializable {
     public void setId(Long id) {
         this.id = id;
     }
+
     public String getIsDeleted() {
         return isDeleted;
     }
@@ -94,6 +94,7 @@ public class PacsConfig implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
+
     public Date getGmtCreate() {
         return gmtCreate;
     }
@@ -101,6 +102,7 @@ public class PacsConfig implements Serializable {
     public void setGmtCreate(Date gmtCreate) {
         this.gmtCreate = gmtCreate;
     }
+
     public Date getGmtModified() {
         return gmtModified;
     }
@@ -108,6 +110,7 @@ public class PacsConfig implements Serializable {
     public void setGmtModified(Date gmtModified) {
         this.gmtModified = gmtModified;
     }
+
     public String getCreator() {
         return creator;
     }
@@ -115,6 +118,7 @@ public class PacsConfig implements Serializable {
     public void setCreator(String creator) {
         this.creator = creator;
     }
+
     public String getModifier() {
         return modifier;
     }
@@ -122,6 +126,7 @@ public class PacsConfig implements Serializable {
     public void setModifier(String modifier) {
         this.modifier = modifier;
     }
+
     public Long getHospitalId() {
         return hospitalId;
     }
@@ -129,6 +134,7 @@ public class PacsConfig implements Serializable {
     public void setHospitalId(Long hospitalId) {
         this.hospitalId = hospitalId;
     }
+
     public String getHisName() {
         return hisName;
     }
@@ -136,6 +142,7 @@ public class PacsConfig implements Serializable {
     public void setHisName(String hisName) {
         this.hisName = hisName;
     }
+
     public String getUniqueName() {
         return uniqueName;
     }
@@ -143,6 +150,7 @@ public class PacsConfig implements Serializable {
     public void setUniqueName(String uniqueName) {
         this.uniqueName = uniqueName;
     }
+
     public String getUniqueCode() {
         return uniqueCode;
     }
@@ -154,16 +162,36 @@ public class PacsConfig implements Serializable {
     @Override
     public String toString() {
         return "PacsConfig{" +
-            "id=" + id +
-            ", isDeleted=" + isDeleted +
-            ", gmtCreate=" + gmtCreate +
-            ", gmtModified=" + gmtModified +
-            ", creator=" + creator +
-            ", modifier=" + modifier +
-            ", hospitalId=" + hospitalId +
-            ", hisName=" + hisName +
-            ", uniqueName=" + uniqueName +
-            ", uniqueCode=" + uniqueCode +
-        "}";
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", hospitalId=" + hospitalId +
+                ", hisName=" + hisName +
+                ", uniqueName=" + uniqueName +
+                ", uniqueCode=" + uniqueCode +
+                "}";
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        PacsConfig pacsConfig = (PacsConfig) o;
+        return Objects.equals(id, pacsConfig.id)
+                && Objects.equals(isDeleted, pacsConfig.isDeleted)
+                && Objects.equals(hospitalId, pacsConfig.hospitalId)
+                && Objects.equals(hisName, pacsConfig.hisName)
+                && Objects.equals(uniqueName, pacsConfig.uniqueName)
+                && Objects.equals(uniqueCode, pacsConfig.uniqueCode);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, isDeleted, hospitalId, hisName, uniqueName, uniqueCode);
     }
 }

+ 30 - 11
cdssman-service/src/main/java/com/diagbot/entity/TransfusionConfig.java

@@ -6,9 +6,9 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * <p>
@@ -57,27 +57,26 @@ public class TransfusionConfig implements Serializable {
     /**
      * 医院id
      */
-    @NotNull(message = "请输入医院id")
     private Long hospitalId;
 
     /**
-     * 医院项目名称
+     * 医院用血类型
      */
-    @Excel(name = "HIS名称", width = 40)
-    @NotBlank(message = "请输入医院端项目名称")
+    @Excel(name = "医院输血类型", width = 40, orderNum = "1", isImportField = "true")
+    @NotBlank(message = "请输入医院输血类型")
     private String hisName;
 
     /**
-     * 标准名称
+     * 标准用血术语
      */
-    @Excel(name = "标准名称", width = 40)
-    @NotBlank(message = "请输入标准术语名称")
+    @Excel(name = "标准输血类型", width = 40, orderNum = "3", isImportField = "true")
+    @NotBlank(message = "请输入标准输血类型")
     private String uniqueName;
 
     /**
-     * 标准编码
+     * 对应项编码
      */
-    @Excel(name = "标准编码", width = 40)
+    //@Excel(name = "对应项编码", width = 40, orderNum = "2")
     private String uniqueCode;
 
     public Long getId() {
@@ -175,4 +174,24 @@ public class TransfusionConfig implements Serializable {
                 ", uniqueCode=" + uniqueCode +
                 "}";
     }
-}
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        TransfusionConfig transfusionConfig = (TransfusionConfig) o;
+        return Objects.equals(id, transfusionConfig.id)
+                && Objects.equals(isDeleted, transfusionConfig.isDeleted)
+                && Objects.equals(hospitalId, transfusionConfig.hospitalId)
+                && Objects.equals(hisName, transfusionConfig.hisName)
+                && Objects.equals(uniqueName, transfusionConfig.uniqueName)
+                && Objects.equals(uniqueCode, transfusionConfig.uniqueCode);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, isDeleted, hospitalId, hisName, uniqueName, uniqueCode);
+    }
+}

+ 10 - 9
cdssman-service/src/main/java/com/diagbot/enums/ConceptTypeEnum.java

@@ -6,16 +6,17 @@ import lombok.Setter;
 /**
  * @Description:
  * @Author:zhaops
- * @time: 2020/8/18 16:30
+ * @time: 2020/9/10 15:51
  */
 public enum ConceptTypeEnum implements KeyedNamed {
-    All(0, "全部"),
-    Disease(1, "诊断"),
-    Drug(2, "药品"),
-    LisPack(3, "检验套餐"),
-    Lis(4, "检验明细"),
-    Pacs(5, "检查"),
-    Opeartion(6, "手术和操作");
+    LisPack(1, "检验套餐"),
+    Lis(2, "检验细项"),
+    Pacs(3, "检查"),
+    Disease(4, "诊断"),
+    Drug(5, "药品"),
+    Opeartion(6, "手术和操作"),
+    Dept(7, "科室"),
+    Transfusion(8, "输血");
 
     @Setter
     private int key;
@@ -51,7 +52,7 @@ public enum ConceptTypeEnum implements KeyedNamed {
         return item != null ? item.name : null;
     }
 
-    public static int getKey(String name) {
+    public static Integer getKey(String name) {
         ConceptTypeEnum item = getEnum(name);
         return item != null ? item.key : null;
     }

+ 45 - 0
cdssman-service/src/main/java/com/diagbot/enums/DisclaimerCodeEnum.java

@@ -0,0 +1,45 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+public enum DisclaimerCodeEnum implements KeyedNamed {
+
+    DiagnoseDisclaimer(1, "免责信息"),
+    PushLiability(2, "推送免责信息");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    DisclaimerCodeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static DisclaimerCodeEnum getEnum(int key) {
+        for (DisclaimerCodeEnum item : DisclaimerCodeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        DisclaimerCodeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 68 - 0
cdssman-service/src/main/java/com/diagbot/enums/StaticTypeEnum.java

@@ -0,0 +1,68 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/8/18 16:30
+ */
+public enum StaticTypeEnum implements KeyedNamed {
+    All(0, "全部"),
+    Disease(1, "诊断"),
+    Drug(2, "药品"),
+    LisPack(3, "检验套餐"),
+    Lis(4, "检验细项"),
+    Pacs(5, "检查"),
+    Opeartion(6, "手术和操作");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    StaticTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static StaticTypeEnum getEnum(int key) {
+        for (StaticTypeEnum item : StaticTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static StaticTypeEnum getEnum(String name) {
+        for (StaticTypeEnum item : StaticTypeEnum.values()) {
+            if (item.name.equals(name)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        StaticTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    public static Integer getKey(String name) {
+        StaticTypeEnum item = getEnum(name);
+        return item != null ? item.key : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 110 - 73
cdssman-service/src/main/java/com/diagbot/facade/ConceptInfoFacade.java

@@ -11,8 +11,11 @@ import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.StaticKnowledgeIndexDTO;
 import com.diagbot.entity.ConceptDetail;
 import com.diagbot.entity.ConceptInfo;
-import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.StaticTypeEnum;
+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;
@@ -23,6 +26,7 @@ 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;
@@ -64,6 +68,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
      * @return
      */
     public List<StaticKnowledgeIndexDTO> staticKnowledgeIndexWithoutInfo(StaticKnowledgeIndexVO staticKnowledgeIndexVO) {
+        staticKnowledgeIndexVO.setHasInfo(0);
         List<StaticKnowledgeIndexDTO> staticKnowledgeIndexDTOList = staticKnowledgeIndex(staticKnowledgeIndexVO);
         //过滤没有静态知识的检索结果
         staticKnowledgeIndexDTOList = staticKnowledgeIndexDTOList
@@ -95,61 +100,64 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             staticKnowledgeIndexDTOList.forEach(item -> {
                 item.setTypeName(convertTypeName(item.getTypeName(), 2, dicTypeMappingList));
             });
-            //是否有静态知识
-            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);
-            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())
+            if (staticKnowledgeIndexVO.getHasInfo().equals(1)) {
+                //是否有静态知识
+                List<String> conNameList = staticKnowledgeIndexDTOList
+                        .stream()
+                        .map(i -> i.getName())
                         .collect(Collectors.toList());
-                if (ListUtil.isNotEmpty(conceptIdList)) {
-                    QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
-                    conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                            .in("concept_id", conceptIdList);
-                    List<ConceptDetail> conceptDetailList = conceptDetailFacade.list(conceptDetailQueryWrapper);
-                    Map<Long, List<ConceptDetail>> detailMap
-                            = EntityUtil.makeEntityListMap(conceptDetailList, "conceptId");
+                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 (item.getId() == null
-                                || !detailMap.containsKey(item.getId())) {
-                            item.setHasInfo(0);
-                            item.setHasStaticKnowledge(0);
-                            item.setHasClinicalPathway(0);
-                            item.setHasNotice((0));
-                            item.setHasTreatInfo(0);
-                            continue;
+                        if (infoMap.containsKey(item.getName() + "_" + item.getTypeName())) {
+                            item.setId(infoMap.get(item.getName() + "_" + item.getTypeName()).getId());
                         }
-                        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);
+                    }
+                    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;
                             }
-                            if (contentTypeList.contains("4")) {
-                                item.setHasTreatInfo(1);
+                            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);
+                                }
                             }
                         }
                     }
@@ -208,7 +216,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
         List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
         if (StringUtil.isNotBlank(conceptInfoPageVO.getType())) {
             String typeName
-                    = convertTypeName(ConceptTypeEnum.getName(Integer.valueOf(conceptInfoPageVO.getType())), 1, dicList);
+                    = convertTypeName(StaticTypeEnum.getName(Integer.valueOf(conceptInfoPageVO.getType())), 1, dicList);
             conceptInfoPageVO.setTypeName(typeName);
         }
         IPage<ConceptInfoDTO> page = super.getPage(conceptInfoPageVO);
@@ -217,7 +225,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             records.forEach(record -> {
                 String typeName = convertTypeName(record.getType(), 2, dicList);
                 record.setTypeName(typeName);
-                record.setType(String.valueOf(ConceptTypeEnum.getKey(typeName)));
+                record.setType(String.valueOf(StaticTypeEnum.getKey(typeName)));
             });
         }
         page.setRecords(records);
@@ -235,10 +243,17 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
         Date now = DateUtil.now();
         List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
         //术语类型转换
-        String typeName = convertTypeName(ConceptTypeEnum.getName(Integer.valueOf(conceptInfoVO.getType())), 1, dicList);
+        String typeName = convertTypeName(StaticTypeEnum.getName(Integer.valueOf(conceptInfoVO.getType())), 1, dicList);
         conceptInfoVO.setTypeName(typeName);
         ConceptInfo conceptInfo = new ConceptInfo();
-        if (conceptInfoVO.getId() == null) {
+
+        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())
@@ -257,12 +272,19 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
         conceptInfo.setType(typeName);
         conceptInfo.setModifier(userId);
         conceptInfo.setGmtModified(now);
-        this.saveOrUpdate(conceptInfo);
-        conceptInfoVO.setId(conceptInfo.getId());
-        //是否包含静态信息,包含启用和禁用
+
+        //是否包含静态信息
+        List<ConceptDetail> oldDetails = null;
         QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
-        conceptDetailQueryWrapper.eq("concept_id",conceptInfo.getId());
-        List<ConceptDetail> oldDetails = conceptDetailFacade.list(conceptDetailQueryWrapper);
+        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 更新图谱是否有静态信息
@@ -273,25 +295,31 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             RespDTO<Boolean> respDTO = cdssCoreClient.updateHasInfoStatus(hasStaticKnowledgeVO);
             //更新失败
             if (RespDTOUtil.respIsNG(respDTO)) {
-
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "图谱更新静态知识状态失败");
             }
         }
 
         //删除已有静态信息
-        conceptDetailFacade.remove(conceptDetailQueryWrapper);
+        if (conceptInfo.getId() != null) {
+            conceptDetailFacade.remove(conceptDetailQueryWrapper);
+        }
+
+        //更新术语信息
+        this.saveOrUpdate(conceptInfo);
+
         //插入新的静态信息
         List<ConceptDetail> conceptDetailList = Lists.newLinkedList();
         if (ListUtil.isNotEmpty(conceptInfoVO.getDetails())) {
-            conceptInfoVO.getDetails().forEach(detail -> {
+            for (ConceptDetailVO detailVO : conceptInfoVO.getDetails()) {
                 ConceptDetail conceptDetail = new ConceptDetail();
-                BeanUtil.copyProperties(detail, conceptDetail);
-                conceptDetail.setConceptId(conceptInfoVO.getId());
+                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;
@@ -306,11 +334,20 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
     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)
-                .set("is_deleted", changeStatusVO.getIsDeleted());
+                .set("modifier", userId);
         conceptDetailService.update(conceptDetailUpdateWrapper);
         return true;
     }
@@ -324,7 +361,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
     public Boolean isExist(ConceptInfoVO conceptInfoVO) {
         List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
         //术语类型转换
-        String typeName = convertTypeName(ConceptTypeEnum.getName(Integer.valueOf(conceptInfoVO.getType())), 1, dicList);
+        String typeName = convertTypeName(StaticTypeEnum.getName(Integer.valueOf(conceptInfoVO.getType())), 1, dicList);
         conceptInfoVO.setTypeName(typeName);
         QueryWrapper<ConceptInfo> conceptInfoQueryWrapper = new QueryWrapper<>();
         conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -335,7 +372,8 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             return false;
         }
         QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
-        conceptDetailQueryWrapper.eq("concept_id", conceptInfo.getId());
+        conceptDetailQueryWrapper.eq("concept_id", conceptInfo.getId())
+                .eq("is_deleted", IsDeleteEnum.N.getKey());
         List<ConceptDetail> conceptDetailList = conceptDetailService.list(conceptDetailQueryWrapper);
         if (ListUtil.isEmpty(conceptDetailList)) {
             return false;
@@ -368,10 +406,9 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             //启用状态、修改人、修改时间为明细的内容
             String typeName = convertTypeName(conceptInfoDTO.getType(), 2, dicList);
             conceptInfoDTO.setTypeName(typeName);
-            conceptInfoDTO.setType(String.valueOf(ConceptTypeEnum.getKey(typeName)));
+            conceptInfoDTO.setType(String.valueOf(StaticTypeEnum.getKey(typeName)));
             conceptInfoDTO.setModifier(conceptDetailList.get(0).getModifier());
             conceptInfoDTO.setGmtModified(conceptDetailList.get(0).getGmtModified());
-            conceptInfoDTO.setIsDeleted(conceptDetailList.get(0).getIsDeleted());
         }
         return conceptInfoDTO;
     }

+ 158 - 3
cdssman-service/src/main/java/com/diagbot/facade/DeptConfigFacade.java

@@ -3,16 +3,23 @@ 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.HosRelationNumDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.DeptConfig;
+import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
 import com.diagbot.service.DeptConfigService;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
+import com.diagbot.vo.ConceptVO;
 import com.diagbot.vo.DeptConfigListVO;
 import com.diagbot.vo.DeptConfigPageVO;
 import com.diagbot.vo.HosRelationNumPageVO;
@@ -25,6 +32,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -40,6 +48,8 @@ import java.util.stream.Collectors;
 public class DeptConfigFacade {
     @Autowired
     private DeptConfigService deptConfigService;
+    @Autowired
+    private CdssCoreClient cdssCoreClient;
 
     /**
      * 判断是否已存在
@@ -54,8 +64,14 @@ public class DeptConfigFacade {
                 .eq("his_name", deptConfig.getHisName())
                 .eq("unique_name", deptConfig.getUniqueName());
         DeptConfig oldRecord = deptConfigService.getOne(queryWrapper, false);
-        if (oldRecord != null) {
-            return true;
+        if (deptConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (deptConfig.getId() != null
+                && oldRecord != null
+                && !deptConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
         }
         return false;
     }
@@ -71,6 +87,21 @@ public class DeptConfigFacade {
         Date now = DateUtil.now();
         deptConfig.setModifier(userId);
         deptConfig.setGmtModified(now);
+        QueryWrapper<DeptConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", deptConfig.getHospitalId())
+                .eq("his_name", deptConfig.getHisName())
+                .eq("unique_name", deptConfig.getUniqueName());
+        DeptConfig oldRecord = deptConfigService.getOne(queryWrapper, false);
+        if (deptConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (deptConfig.getId() != null
+                && oldRecord != null
+                && !deptConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
         //新增数据
         if (deptConfig.getId() == null) {
             deptConfig.setCreator(userId);
@@ -203,10 +234,124 @@ public class DeptConfigFacade {
             deptConfigList.forEach(deptConfig -> {
                 deptConfig.setHospitalId(hospitalIdVO.getHospitalId());
             });
-            saveOrUpdateRecords(deptConfigList);
+            importExcelRecords(deptConfigList, hospitalIdVO);
+        } else {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
         }
     }
 
+    /**
+     * 数据导入
+     *
+     * @param deptConfigList
+     * @return
+     */
+    public Boolean importExcelRecords(List<DeptConfig> deptConfigList, HospitalIdVO hospitalIdVO) {
+        Long hospitalId = hospitalIdVO.getHospitalId();
+        String userId = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+
+        //1、数据完整性校验
+        //2、去除前后空格
+        //过滤空数据,保留重复数据,方便计行
+        deptConfigList = deptConfigList.stream()
+                .filter(i -> StringUtil.isNotBlank(i.getHisName())
+                        || StringUtil.isNotBlank(i.getHisCode())
+                        || StringUtil.isNotBlank(i.getUniqueCode())
+                        || StringUtil.isNotBlank(i.getUniqueName()))
+                .collect(Collectors.toList());
+        if (ListUtil.isEmpty(deptConfigList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
+        }
+
+        List<String> emptyNumList = Lists.newLinkedList();
+        for (int i = 0; i < deptConfigList.size(); i++) {
+            if (StringUtil.isBlank(deptConfigList.get(i).getHisName())
+                    || StringUtil.isBlank(deptConfigList.get(i).getUniqueName())) {
+                emptyNumList.add(String.valueOf(i + 2));
+            }
+            if (StringUtil.isNotBlank(deptConfigList.get(i).getHisName())) {
+                deptConfigList.get(i).setHisName(deptConfigList.get(i).getHisName().trim());
+            }
+            if (StringUtil.isNotBlank(deptConfigList.get(i).getHisCode())) {
+                deptConfigList.get(i).setHisCode(deptConfigList.get(i).getHisCode().trim());
+            }
+            if (StringUtil.isNotBlank(deptConfigList.get(i).getUniqueName())) {
+                deptConfigList.get(i).setUniqueName(deptConfigList.get(i).getUniqueName().trim());
+            }
+            if (StringUtil.isNotBlank(deptConfigList.get(i).getUniqueCode())) {
+                deptConfigList.get(i).setUniqueCode(deptConfigList.get(i).getUniqueCode().trim());
+            } else {
+                deptConfigList.get(i).setUniqueCode(null);
+            }
+        }
+
+        if (ListUtil.isNotEmpty(emptyNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "以下行数(不计入空行)存在不完整数据:"
+                    + emptyNumList.stream().collect(Collectors.joining("、"))
+                    + "。导入取消,请修改后再试。\n");
+        }
+
+        // 验证数据是否已存在,已存在的先删除
+        // 没id的删除重新插入,有id的更新
+        List<Long> deleteIds = Lists.newLinkedList();
+        Map<String, Map<String, Long>> configMap
+                = getConfigMap(Long.valueOf(hospitalId), null, null);
+        deptConfigList.forEach(deptConfig -> {
+            deptConfig.setHospitalId(hospitalId);
+            deptConfig.setModifier(userId);
+            deptConfig.setGmtModified(now);
+            if (deptConfig.getId() == null) {
+                if (configMap.containsKey(deptConfig.getHisName())) {
+                    deleteIds.add(configMap.get(deptConfig.getHisName()).get(deptConfig.getUniqueName()));
+                }
+                deptConfig.setCreator(userId);
+                deptConfig.setGmtCreate(now);
+            }
+            if (deptConfig.getIsDeleted() == null) {
+                deptConfig.setIsDeleted(IsDeleteEnum.N.getKey());
+            }
+        });
+
+        //标准术语校验
+        List<String> errorNumList = Lists.newLinkedList();
+        List<String> uniqueNames = deptConfigList.stream()
+                .map(i -> i.getUniqueName())
+                .distinct()
+                .collect(Collectors.toList());
+        ConceptVO conceptVO = new ConceptVO();
+        conceptVO.setNames(uniqueNames);
+        conceptVO.setType(ConceptTypeEnum.Dept.getKey());
+        RespDTO<List<String>> respDTO = cdssCoreClient.getConceptNames(conceptVO);
+        RespDTOUtil.respNGDealCover(respDTO, "标准术语校验失败");
+        List<String> names = respDTO.data;
+        for (int i = 0; i < deptConfigList.size(); i++) {
+            if (!names.contains(deptConfigList.get(i).getUniqueName())) {
+                errorNumList.add(String.valueOf(i + 2));
+            }
+        }
+        if (ListUtil.isNotEmpty(errorNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
+                    "以下行数(不计入空行)标准术语与数据库术语不匹配:"
+                            + errorNumList.stream().collect(Collectors.joining("、"))
+                            + "。导入取消,请修改后再试。");
+        }
+
+        //重复数据过滤
+        deptConfigList = deptConfigList
+                .stream()
+                .distinct()
+                .collect(Collectors.toList());
+
+        //删除已存在映射关系
+        IdListVO idListVO = new IdListVO();
+        idListVO.setIds(deleteIds);
+        deleteRecords(idListVO);
+        deptConfigService.saveOrUpdateBatch(deptConfigList);
+        return true;
+    }
+
+
     /**
      * 获取映射关系-公表名
      *
@@ -263,4 +408,14 @@ public class DeptConfigFacade {
     public IPage<HosRelationNumDTO> getRelationNumPage(HosRelationNumPageVO hosRelationNumPageVO) {
         return deptConfigService.getRelationNumPage(hosRelationNumPageVO);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @param response
+     */
+    public void exportExcelModule(HttpServletResponse response) {
+        String fileName = "科室映射模板.xls";
+        ExcelUtils.exportExcel(new ArrayList<>(), null, "sheet1", DeptConfig.class, fileName, response, 12.8f);
+    }
 }

+ 153 - 3
cdssman-service/src/main/java/com/diagbot/facade/DiseaseConfigFacade.java

@@ -2,16 +2,23 @@ package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.client.CdssCoreClient;
 import com.diagbot.dto.HosRelationNumDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.DiseaseConfig;
+import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
 import com.diagbot.service.DiseaseConfigService;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
+import com.diagbot.vo.ConceptVO;
 import com.diagbot.vo.DiseaseConfigListVO;
 import com.diagbot.vo.DiseaseConfigPageVO;
 import com.diagbot.vo.HosRelationNumPageVO;
@@ -24,6 +31,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -39,6 +47,8 @@ import java.util.stream.Collectors;
 public class DiseaseConfigFacade {
     @Autowired
     private DiseaseConfigService diseaseConfigService;
+    @Autowired
+    private CdssCoreClient cdssCoreClient;
 
     /**
      * 判断是否已存在
@@ -53,8 +63,14 @@ public class DiseaseConfigFacade {
                 .eq("his_name", diseaseConfig.getHisName())
                 .eq("unique_name", diseaseConfig.getUniqueName());
         DiseaseConfig oldRecord = diseaseConfigService.getOne(queryWrapper, false);
-        if (oldRecord != null) {
-            return true;
+        if (diseaseConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (diseaseConfig.getId() != null
+                && oldRecord != null
+                && !diseaseConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
         }
         return false;
     }
@@ -70,6 +86,21 @@ public class DiseaseConfigFacade {
         Date now = DateUtil.now();
         diseaseConfig.setModifier(userId);
         diseaseConfig.setGmtModified(now);
+        QueryWrapper<DiseaseConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", diseaseConfig.getHospitalId())
+                .eq("his_name", diseaseConfig.getHisName())
+                .eq("unique_name", diseaseConfig.getUniqueName());
+        DiseaseConfig oldRecord = diseaseConfigService.getOne(queryWrapper, false);
+        if (diseaseConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (diseaseConfig.getId() != null
+                && oldRecord != null
+                && !diseaseConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
         //新增数据
         if (diseaseConfig.getId() == null) {
             diseaseConfig.setCreator(userId);
@@ -195,10 +226,119 @@ public class DiseaseConfigFacade {
             diseaseConfigList.forEach(diseaseConfig -> {
                 diseaseConfig.setHospitalId(hospitalIdVO.getHospitalId());
             });
-            saveOrUpdateRecords(diseaseConfigList);
+            importExcelRecords(diseaseConfigList, hospitalIdVO);
+        } else {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
         }
     }
 
+    /**
+     * 数据导入
+     *
+     * @param diseaseConfigList
+     * @return
+     */
+    public Boolean importExcelRecords(List<DiseaseConfig> diseaseConfigList, HospitalIdVO hospitalIdVO) {
+        Long hospitalId = hospitalIdVO.getHospitalId();
+        String userId = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+
+        //1、数据完整性校验
+        //2、去除前后空格
+        //过滤空数据,保留重复数据,方便计行
+        diseaseConfigList = diseaseConfigList.stream()
+                .filter(i -> StringUtil.isNotBlank(i.getHisName())
+                        || StringUtil.isNotBlank(i.getIcdCode())
+                        || StringUtil.isNotBlank(i.getUniqueName()))
+                .collect(Collectors.toList());
+        if (ListUtil.isEmpty(diseaseConfigList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
+        }
+        List<String> emptyNumList = Lists.newLinkedList();
+        for (int i = 0; i < diseaseConfigList.size(); i++) {
+            if (StringUtil.isBlank(diseaseConfigList.get(i).getHisName())
+                    || StringUtil.isBlank(diseaseConfigList.get(i).getUniqueName())) {
+                emptyNumList.add(String.valueOf(i + 2));
+            }
+            if (StringUtil.isNotBlank(diseaseConfigList.get(i).getHisName())) {
+                diseaseConfigList.get(i).setHisName(diseaseConfigList.get(i).getHisName().trim());
+            }
+            if (StringUtil.isNotBlank(diseaseConfigList.get(i).getUniqueName())) {
+                diseaseConfigList.get(i).setUniqueName(diseaseConfigList.get(i).getUniqueName().trim());
+            }
+            if (StringUtil.isNotBlank(diseaseConfigList.get(i).getIcdCode())) {
+                diseaseConfigList.get(i).setIcdCode(diseaseConfigList.get(i).getIcdCode().trim());
+            } else {
+                diseaseConfigList.get(i).setIcdCode(null);
+            }
+        }
+
+        if (ListUtil.isNotEmpty(emptyNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "以下行数(不计入空行)存在不完整数据:"
+                    + emptyNumList.stream().collect(Collectors.joining("、"))
+                    + "。导入取消,请修改后再试。\n");
+        }
+
+
+        // 验证数据是否已存在,已存在的先删除
+        // 没id的删除重新插入,有id的更新
+        List<Long> deleteIds = Lists.newLinkedList();
+        Map<String, Map<String, Long>> configMap
+                = getConfigMap(Long.valueOf(hospitalId), null, null);
+        diseaseConfigList.forEach(diseaseConfig -> {
+            diseaseConfig.setHospitalId(Long.valueOf(hospitalId));
+            diseaseConfig.setModifier(userId);
+            diseaseConfig.setGmtModified(now);
+            if (diseaseConfig.getId() == null) {
+                if (configMap.containsKey(diseaseConfig.getHisName())) {
+                    deleteIds.add(configMap.get(diseaseConfig.getHisName()).get(diseaseConfig.getUniqueName()));
+                }
+                diseaseConfig.setCreator(userId);
+                diseaseConfig.setGmtCreate(now);
+            }
+            if (diseaseConfig.getIsDeleted() == null) {
+                diseaseConfig.setIsDeleted(IsDeleteEnum.N.getKey());
+            }
+        });
+
+        //标准术语校验
+        List<String> errorNumList = Lists.newLinkedList();
+        List<String> uniqueNames = diseaseConfigList.stream()
+                .map(i -> i.getUniqueName())
+                .distinct()
+                .collect(Collectors.toList());
+        ConceptVO conceptVO = new ConceptVO();
+        conceptVO.setNames(uniqueNames);
+        conceptVO.setType(ConceptTypeEnum.Disease.getKey());
+        RespDTO<List<String>> respDTO = cdssCoreClient.getConceptNames(conceptVO);
+        RespDTOUtil.respNGDealCover(respDTO, "标准术语校验失败");
+        List<String> names = respDTO.data;
+        for (int i = 0; i < diseaseConfigList.size(); i++) {
+            if (!names.contains(diseaseConfigList.get(i).getUniqueName())) {
+                errorNumList.add(String.valueOf(i + 2));
+            }
+        }
+        if (ListUtil.isNotEmpty(errorNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
+                    "以下行数(不计入空行)标准术语与数据库术语不匹配:"
+                            + errorNumList.stream().collect(Collectors.joining("、"))
+                            + "。导入取消,请修改后再试。");
+        }
+
+        //重复数据过滤
+        diseaseConfigList = diseaseConfigList
+                .stream()
+                .distinct()
+                .collect(Collectors.toList());
+
+        //删除已存在映射关系
+        IdListVO idListVO = new IdListVO();
+        idListVO.setIds(deleteIds);
+        deleteRecords(idListVO);
+        diseaseConfigService.saveOrUpdateBatch(diseaseConfigList);
+        return true;
+    }
+
     /**
      * 获取映射关系-公表名
      *
@@ -255,4 +395,14 @@ public class DiseaseConfigFacade {
     public IPage<HosRelationNumDTO> getRelationNumPage(HosRelationNumPageVO hosRelationNumPageVO) {
         return diseaseConfigService.getRelationNumPage(hosRelationNumPageVO);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @param response
+     */
+    public void exportExcelModule(HttpServletResponse response) {
+        String fileName = "疾病映射模板.xls";
+        ExcelUtils.exportExcel(new ArrayList<>(), null, "sheet1", DiseaseConfig.class, fileName, response, 12.8f);
+    }
 }

+ 356 - 11
cdssman-service/src/main/java/com/diagbot/facade/DrugConfigFacade.java

@@ -3,16 +3,24 @@ 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.DictionaryInfoDTO;
 import com.diagbot.dto.HosRelationNumDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.DrugConfig;
+import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
 import com.diagbot.service.DrugConfigService;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
+import com.diagbot.vo.ConceptVO;
 import com.diagbot.vo.DrugConfigListVO;
 import com.diagbot.vo.DrugConfigPageVO;
 import com.diagbot.vo.HosRelationNumPageVO;
@@ -25,6 +33,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -40,6 +49,10 @@ import java.util.stream.Collectors;
 public class DrugConfigFacade {
     @Autowired
     private DrugConfigService drugConfigService;
+    @Autowired
+    private CdssCoreClient cdssCoreClient;
+    @Autowired
+    private DictionaryFacade dictionaryFacade;
 
     /**
      * 判断是否已存在
@@ -53,9 +66,22 @@ public class DrugConfigFacade {
                 .eq("hospital_id", drugConfig.getHospitalId())
                 .eq("his_name", drugConfig.getHisName())
                 .eq("unique_name", drugConfig.getUniqueName());
+        if (StringUtil.isBlank(drugConfig.getForm())) {
+            queryWrapper.and(i -> i.isNull("form")
+                    .or()
+                    .eq("form", ""));
+        } else {
+            queryWrapper.eq("form", drugConfig.getForm());
+        }
         DrugConfig oldRecord = drugConfigService.getOne(queryWrapper, false);
-        if (oldRecord != null) {
-            return true;
+        if (drugConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (drugConfig.getId() != null
+                && oldRecord != null
+                && !drugConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
         }
         return false;
     }
@@ -71,6 +97,28 @@ public class DrugConfigFacade {
         Date now = DateUtil.now();
         drugConfig.setModifier(userId);
         drugConfig.setGmtModified(now);
+        QueryWrapper<DrugConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", drugConfig.getHospitalId())
+                .eq("his_name", drugConfig.getHisName())
+                .eq("unique_name", drugConfig.getUniqueName());
+        if (StringUtil.isBlank(drugConfig.getForm())) {
+            queryWrapper.and(i -> i.isNull("form")
+                    .or()
+                    .eq("form", ""));
+        } else {
+            queryWrapper.eq("form", drugConfig.getForm());
+        }
+        DrugConfig oldRecord = drugConfigService.getOne(queryWrapper, false);
+        if (drugConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (drugConfig.getId() != null
+                && oldRecord != null
+                && !drugConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
         //新增数据
         if (drugConfig.getId() == null) {
             drugConfig.setCreator(userId);
@@ -117,23 +165,37 @@ public class DrugConfigFacade {
                 .filter(i -> StringUtil.isNotBlank(i.getHisName()))
                 .filter(i -> StringUtil.isNotBlank(i.getUniqueName()))
                 .collect(Collectors.toList());
+
         if (ListUtil.isEmpty(drugConfigList)) {
             return false;
         }
 
         Long hospitalId = drugConfigList.get(0).getHospitalId();
 
+        List<String> hisNames = drugConfigList
+                .stream()
+                .map(i -> i.getHisName())
+                .collect(Collectors.toList());
+        List<String> uniqueNames = drugConfigList
+                .stream()
+                .map(i -> i.getUniqueName())
+                .collect(Collectors.toList());
+
         // 验证数据是否已存在,已存在的先删除
         // 没id的删除重新插入,有id的更新
         List<Long> deleteIds = Lists.newLinkedList();
-        Map<String, Map<String, Long>> configMap
-                = getConfigMap(hospitalId, null, null);
+        Map<String, Map<String, Map<String, Long>>> configMap
+                = getConfigMap(hospitalId, hisNames, uniqueNames);
         drugConfigList.forEach(drugConfig -> {
+            drugConfig.setHospitalId(Long.valueOf(hospitalId));
             drugConfig.setModifier(userId);
             drugConfig.setGmtModified(now);
+            String form = StringUtil.isBlank(drugConfig.getForm()) ? "" : drugConfig.getForm();
             if (drugConfig.getId() == null) {
-                if (configMap.containsKey(drugConfig.getHisName())) {
-                    deleteIds.add(configMap.get(drugConfig.getHisName()).get(drugConfig.getUniqueName()));
+                if (configMap.get(drugConfig.getHisName()) != null
+                        && configMap.get(drugConfig.getHisName()).get(form) != null
+                        && configMap.get(drugConfig.getHisName()).get(form).get(drugConfig.getUniqueName()) != null) {
+                    deleteIds.add(configMap.get(drugConfig.getHisName()).get(form).get(drugConfig.getUniqueName()));
                 }
                 drugConfig.setCreator(userId);
                 drugConfig.setGmtCreate(now);
@@ -142,6 +204,7 @@ public class DrugConfigFacade {
                 drugConfig.setIsDeleted(IsDeleteEnum.N.getKey());
             }
         });
+
         //删除已存在映射关系
         IdListVO idListVO = new IdListVO();
         idListVO.setIds(deleteIds);
@@ -203,8 +266,145 @@ public class DrugConfigFacade {
             drugConfigList.forEach(drugConfig -> {
                 drugConfig.setHospitalId(hospitalIdVO.getHospitalId());
             });
-            saveOrUpdateRecords(drugConfigList);
+            importExcelRecords(drugConfigList, hospitalIdVO);
+        } else {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
+        }
+    }
+
+    /**
+     * 数据导入
+     *
+     * @param drugConfigList
+     * @return
+     */
+    public Boolean importExcelRecords(List<DrugConfig> drugConfigList,HospitalIdVO hospitalIdVO) {
+        Long hospitalId = hospitalIdVO.getHospitalId();
+        String userId = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+
+        //1、数据完整性校验
+        //2、去除前后空格
+        //过滤空数据,保留重复数据,方便计行
+        drugConfigList = drugConfigList.stream()
+                .filter(i -> StringUtil.isNotBlank(i.getHisName())
+                        || StringUtil.isNotBlank(i.getForm())
+                        || StringUtil.isNotBlank(i.getUniqueCode())
+                        || StringUtil.isNotBlank(i.getUniqueName()))
+                .collect(Collectors.toList());
+        if (ListUtil.isEmpty(drugConfigList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
+        }
+        List<String> emptyNumList = Lists.newLinkedList();
+        //药品剂型
+        List<DictionaryInfoDTO> dicTypeMappingList = dictionaryFacade.getListByGroupType(9);
+        List<String> formList = dicTypeMappingList.stream()
+                .filter(i -> StringUtil.isNotBlank(i.getName()))
+                .map(i -> i.getName())
+                .distinct()
+                .collect(Collectors.toList());
+        List<String> formErrNumList = Lists.newLinkedList();
+        for (int i = 0; i < drugConfigList.size(); i++) {
+            if (StringUtil.isBlank(drugConfigList.get(i).getHisName())
+                    || StringUtil.isBlank(drugConfigList.get(i).getUniqueName())) {
+                emptyNumList.add(String.valueOf(i + 2));
+            }
+            if (StringUtil.isNotBlank(drugConfigList.get(i).getHisName())) {
+                drugConfigList.get(i).setHisName(drugConfigList.get(i).getHisName().trim());
+            }
+            if (StringUtil.isNotBlank(drugConfigList.get(i).getUniqueName())) {
+                drugConfigList.get(i).setUniqueName(drugConfigList.get(i).getUniqueName().trim());
+            }
+            if (StringUtil.isNotBlank(drugConfigList.get(i).getForm())) {
+                if (!formList.contains(drugConfigList.get(i).getForm())) {
+                    formErrNumList.add(String.valueOf(i + 2));
+                } else {
+                    drugConfigList.get(i).setForm(drugConfigList.get(i).getForm().trim());
+                }
+            }
+            if (StringUtil.isNotBlank(drugConfigList.get(i).getUniqueCode())) {
+                drugConfigList.get(i).setUniqueCode(drugConfigList.get(i).getUniqueCode().trim());
+            } else {
+                drugConfigList.get(i).setUniqueCode(null);
+            }
+        }
+
+        if (ListUtil.isNotEmpty(emptyNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "以下行数(不计入空行)存在不完整数据:"
+                    + emptyNumList.stream().collect(Collectors.joining("、"))
+                    + "。导入取消,请修改后再试。\n");
+        }
+        if (ListUtil.isNotEmpty(formErrNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "以下行数(不计入空行)药品剂型与数据库药品剂型不匹配:"
+                    + formErrNumList.stream().collect(Collectors.joining("、"))
+                    + "。导入取消,请修改后再试。\n");
         }
+
+        List<String> hisNames = drugConfigList
+                .stream()
+                .map(i -> i.getHisName())
+                .collect(Collectors.toList());
+        List<String> uniqueNames = drugConfigList
+                .stream()
+                .map(i -> i.getUniqueName())
+                .collect(Collectors.toList());
+
+        // 验证数据是否已存在,已存在的先删除
+        // 没id的删除重新插入,有id的更新
+        List<Long> deleteIds = Lists.newLinkedList();
+        Map<String, Map<String, Map<String, Long>>> configMap
+                = getConfigMap(Long.valueOf(hospitalId), hisNames, uniqueNames);
+        drugConfigList.forEach(drugConfig -> {
+            drugConfig.setHospitalId(Long.valueOf(hospitalId));
+            drugConfig.setModifier(userId);
+            drugConfig.setGmtModified(now);
+            String form = StringUtil.isBlank(drugConfig.getForm()) ? "" : drugConfig.getForm();
+            if (drugConfig.getId() == null) {
+                if (configMap.get(drugConfig.getHisName()) != null
+                        && configMap.get(drugConfig.getHisName()).get(form) != null
+                        && configMap.get(drugConfig.getHisName()).get(form).get(drugConfig.getUniqueName()) != null) {
+                    deleteIds.add(configMap.get(drugConfig.getHisName()).get(form).get(drugConfig.getUniqueName()));
+                }
+                drugConfig.setCreator(userId);
+                drugConfig.setGmtCreate(now);
+            }
+            if (drugConfig.getIsDeleted() == null) {
+                drugConfig.setIsDeleted(IsDeleteEnum.N.getKey());
+            }
+        });
+
+        //标准术语校验
+        List<String> errorNumList = Lists.newLinkedList();
+        ConceptVO conceptVO = new ConceptVO();
+        conceptVO.setNames(uniqueNames);
+        conceptVO.setType(ConceptTypeEnum.Drug.getKey());
+        RespDTO<List<String>> respDTO = cdssCoreClient.getConceptNames(conceptVO);
+        RespDTOUtil.respNGDealCover(respDTO, "标准术语校验失败");
+        List<String> names = respDTO.data;
+        for (int i = 0; i < drugConfigList.size(); i++) {
+            if (!names.contains(drugConfigList.get(i).getUniqueName())) {
+                errorNumList.add(String.valueOf(i + 2));
+            }
+        }
+        if (ListUtil.isNotEmpty(errorNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
+                    "以下行数(不计入空行)标准术语与数据库术语不匹配:"
+                            + errorNumList.stream().collect(Collectors.joining("、"))
+                            + "。导入取消,请修改后再试。");
+        }
+
+        //重复数据过滤
+        drugConfigList = drugConfigList
+                .stream()
+                .distinct()
+                .collect(Collectors.toList());
+
+        //删除已存在映射关系
+        IdListVO idListVO = new IdListVO();
+        idListVO.setIds(deleteIds);
+        deleteRecords(idListVO);
+        drugConfigService.saveOrUpdateBatch(drugConfigList);
+        return true;
     }
 
     /**
@@ -213,9 +413,137 @@ public class DrugConfigFacade {
      * @param hospitalId
      * @param hisNames
      * @param uniqueNames
+     * @return Map<hisName,Map<form,Map<uniqueName,id>>>
+     */
+    public Map<String, Map<String,Map<String, Long>>> getConfigMap(Long hospitalId, List<String> hisNames, List<String> uniqueNames) {
+        Map<String, Map<String, Map<String, Long>>> retMap = new HashMap<>();
+        QueryWrapper<DrugConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", hospitalId);
+        if (ListUtil.isNotEmpty(hisNames)) {
+            queryWrapper.in("his_name", hisNames);
+        }
+        if (ListUtil.isNotEmpty(uniqueNames)) {
+            queryWrapper.in("unique_name", uniqueNames);
+        }
+        List<DrugConfig> records = drugConfigService.list(queryWrapper);
+        if (ListUtil.isEmpty(records)) {
+            return retMap;
+        }
+        Map<String, List<DrugConfig>> hisNameMap = EntityUtil.makeEntityListMap(records, "hisName");
+        for (Map.Entry<String, List<DrugConfig>> entry : hisNameMap.entrySet()) {
+            if (ListUtil.isNotEmpty(entry.getValue())) {
+                Map<String, Map<String, Long>> formMap = new HashMap<>();
+                entry.getValue().forEach(i -> {
+                    if (StringUtil.isBlank(i.getForm())) {
+                        i.setForm("");
+                    }
+                });
+                Map<String, List<DrugConfig>> subMap
+                        = EntityUtil.makeEntityListMap(entry.getValue(), "form");
+                for (Map.Entry<String, List<DrugConfig>> subEntry : subMap.entrySet()) {
+                    if (ListUtil.isNotEmpty(subEntry.getValue())) {
+                        formMap.put(subEntry.getKey(),
+                                EntityUtil.makeMapWithKeyValue(subEntry.getValue(), "uniqueName", "id"));
+                    }
+                }
+                retMap.put(entry.getKey(), formMap);
+            }
+        }
+        return retMap;
+    }
+
+    /**
+     * 获取映射关系
+     * Map<uniqueName,Map<form,Map<hisName,id>>>
+     *
+     * @param hospitalId
+     * @param hisNames
+     * @param uniqueNames
      * @return
      */
-    public Map<String, Map<String, Long>> getConfigMap(Long hospitalId, List<String> hisNames, List<String> uniqueNames) {
+    public Map<String,Map<String,Map<String,Long>>> getUniqueNameConfigMap(Long hospitalId, List<String> hisNames, List<String> uniqueNames) {
+        Map<String, Map<String, Map<String, Long>>> retMap = new HashMap<>();
+        QueryWrapper<DrugConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", hospitalId);
+        if (ListUtil.isNotEmpty(hisNames)) {
+            queryWrapper.in("his_name", hisNames);
+        }
+        if (ListUtil.isNotEmpty(uniqueNames)) {
+            queryWrapper.in("unique_name", uniqueNames);
+        }
+        List<DrugConfig> records = drugConfigService.list(queryWrapper);
+        if (ListUtil.isEmpty(records)) {
+            return retMap;
+        }
+        records.forEach(i -> {
+            if (StringUtil.isBlank(i.getForm())) {
+                i.setForm("");
+            }
+        });
+        Map<String, List<DrugConfig>> uniqueNameMap = EntityUtil.makeEntityListMap(records, "uniqueName");
+        for (Map.Entry<String, List<DrugConfig>> entry : uniqueNameMap.entrySet()) {
+            if (ListUtil.isNotEmpty(entry.getValue())) {
+                Map<String, Map<String, Long>> formMap = new HashMap<>();
+                Map<String, List<DrugConfig>> subMap
+                        = EntityUtil.makeEntityListMap(entry.getValue(), "form");
+                for (Map.Entry<String, List<DrugConfig>> subEntry : subMap.entrySet()) {
+                    if (ListUtil.isNotEmpty(subEntry.getValue())) {
+                        formMap.put(subEntry.getKey(),
+                                EntityUtil.makeMapWithKeyValue(subEntry.getValue(), "hisName", "id"));
+                    }
+                }
+                retMap.put(entry.getKey(), formMap);
+            }
+        }
+        return retMap;
+    }
+
+    /**
+     * 获取映射关系-公表名
+     *
+     * @param hospitalId
+     * @param hisNames
+     * @param uniqueNames
+     * @return Map<hisName,Map<uniqueName,id>>
+     */
+    public Map<String, Map<String,Long>> getConfigMapWithoutForm(Long hospitalId, List<String> hisNames, List<String> uniqueNames) {
+        Map<String, Map<String, Long>> retMap = new HashMap<>();
+        QueryWrapper<DrugConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", hospitalId);
+        if (ListUtil.isNotEmpty(hisNames)) {
+            queryWrapper.in("his_name", hisNames);
+        }
+        if (ListUtil.isNotEmpty(uniqueNames)) {
+            queryWrapper.in("unique_name", uniqueNames);
+        }
+        List<DrugConfig> records = drugConfigService.list(queryWrapper);
+        if (ListUtil.isEmpty(records)) {
+            return retMap;
+        }
+        Map<String, List<DrugConfig>> hisNameMap
+                = EntityUtil.makeEntityListMap(records, "hisName");
+        for (Map.Entry<String, List<DrugConfig>> entry : hisNameMap.entrySet()) {
+            if (ListUtil.isNotEmpty(entry.getValue())) {
+                retMap.put(entry.getKey(),
+                        EntityUtil.makeMapWithKeyValue(records, "uniqueName", "id"));
+            }
+        }
+        return retMap;
+    }
+
+    /**
+     * 获取映射关系
+     * Map<uniqueName,Map<hisName,id>>
+     *
+     * @param hospitalId
+     * @param hisNames
+     * @param uniqueNames
+     * @return
+     */
+    public Map<String,Map<String,Long>> getUniqueNameConfigMapWithoutForm(Long hospitalId, List<String> hisNames, List<String> uniqueNames) {
         Map<String, Map<String, Long>> retMap = new HashMap<>();
         QueryWrapper<DrugConfig> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -230,10 +558,17 @@ public class DrugConfigFacade {
         if (ListUtil.isEmpty(records)) {
             return retMap;
         }
-        Map<String, List<DrugConfig>> configMap = EntityUtil.makeEntityListMap(records, "hisName");
-        for (Map.Entry<String, List<DrugConfig>> entry : configMap.entrySet()) {
+        records.forEach(i -> {
+            if (StringUtil.isBlank(i.getForm())) {
+                i.setForm("");
+            }
+        });
+        Map<String, List<DrugConfig>> uniqueNameMap
+                = EntityUtil.makeEntityListMap(records, "uniqueName");
+        for (Map.Entry<String, List<DrugConfig>> entry : uniqueNameMap.entrySet()) {
             if (ListUtil.isNotEmpty(entry.getValue())) {
-                retMap.put(entry.getKey(), EntityUtil.makeMapWithKeyValue(entry.getValue(), "uniqueName", "id"));
+                retMap.put(entry.getKey(),
+                        EntityUtil.makeMapWithKeyValue(records, "hisName", "id"));
             }
         }
         return retMap;
@@ -263,4 +598,14 @@ public class DrugConfigFacade {
     public IPage<HosRelationNumDTO> getRelationNumPage(HosRelationNumPageVO hosRelationNumPageVO) {
         return drugConfigService.getRelationNumPage(hosRelationNumPageVO);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @param response
+     */
+    public void exportExcelModule(HttpServletResponse response) {
+        String fileName = "药品映射模板.xls";
+        ExcelUtils.exportExcel(new ArrayList<>(), null, "sheet1", DrugConfig.class, fileName, response, 12.8f);
+    }
 }

+ 30 - 0
cdssman-service/src/main/java/com/diagbot/facade/EnumsDataFacade.java

@@ -0,0 +1,30 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.EnumsDataService;
+import com.diagbot.util.EnumEntriesBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 枚举数据装饰类
+ * @author: gaodm
+ * @time: 2018/9/19 14:28
+ */
+@Component
+public class EnumsDataFacade {
+    @Autowired
+    private EnumsDataService enumsDataService;
+
+    /**
+     * 用户枚举数据获取
+     *
+     * @return 用户枚举类map
+     */
+    public Map<String, List<EnumEntriesBuilder.Entry>> getEnumsData() {
+        return enumsDataService.getEnumsData();
+    }
+
+}

+ 156 - 0
cdssman-service/src/main/java/com/diagbot/facade/HospitalInfoFacade.java

@@ -1,21 +1,39 @@
 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.dto.HospitalInfoDTO;
+import com.diagbot.entity.DeptConfig;
 import com.diagbot.entity.DiseaseConfig;
+import com.diagbot.entity.DrugConfig;
 import com.diagbot.entity.HospitalInfo;
+import com.diagbot.entity.LisConfig;
+import com.diagbot.entity.OperationConfig;
+import com.diagbot.entity.PacsConfig;
+import com.diagbot.entity.Plan;
+import com.diagbot.entity.TransfusionConfig;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.service.DeptConfigService;
+import com.diagbot.service.DiseaseConfigService;
+import com.diagbot.service.DrugConfigService;
 import com.diagbot.service.HospitalInfoService;
+import com.diagbot.service.LisConfigService;
+import com.diagbot.service.OperationConfigService;
+import com.diagbot.service.PacsConfigService;
+import com.diagbot.service.TransfusionConfigService;
 import com.diagbot.service.impl.HospitalInfoServiceImpl;
 import com.diagbot.util.BeanUtil;
+import com.diagbot.util.Cn2SpellUtil;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
 import com.diagbot.vo.HospitalInfoListVO;
 import com.diagbot.vo.HospitalInfoPageVO;
+import com.diagbot.vo.HospitalSaveVO;
 import com.diagbot.vo.IdListVO;
 import com.diagbot.vo.IdVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +43,8 @@ import org.springframework.stereotype.Component;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author wangfeng
@@ -36,6 +56,22 @@ public class HospitalInfoFacade extends HospitalInfoServiceImpl {
     @Autowired
     @Qualifier("hospitalInfoServiceImpl")
     private HospitalInfoService hospitalInfoService;
+    @Autowired
+    private DeptConfigService deptConfigService;
+    @Autowired
+    private DiseaseConfigService diseaseConfigService;
+    @Autowired
+    private DrugConfigService drugConfigService;
+    @Autowired
+    private LisConfigService lisConfigService;
+    @Autowired
+    private OperationConfigService operationConfigService;
+    @Autowired
+    private PacsConfigService pacsConfigService;
+    @Autowired
+    private TransfusionConfigService transfusionConfigService;
+    @Autowired
+    private PlanFacade planFacade;
 
     public List<HospitalInfoDTO> getHospitalInfo() {
         QueryWrapper<HospitalInfo> hospitalInfo = new QueryWrapper<>();
@@ -57,10 +93,43 @@ public class HospitalInfoFacade extends HospitalInfoServiceImpl {
         Date now = DateUtil.now();
         hospitalInfo.setModifier(userId);
         hospitalInfo.setGmtModified(now);
+        QueryWrapper<HospitalInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey());
+        if (StringUtil.isNotBlank(hospitalInfo.getName())) {
+            queryWrapper.eq("name", hospitalInfo.getName());
+            HospitalInfo oldRecord = this.getOne(queryWrapper, false);
+            if (hospitalInfo.getId() == null
+                    && oldRecord != null) {
+                throw new CommonException(CommonErrorCode.IS_EXISTS, "该医院名称已存在");
+            }
+            if (hospitalInfo.getId() != null
+                    && oldRecord != null
+                    && !hospitalInfo.getId().equals(oldRecord.getId())) {
+                throw new CommonException(CommonErrorCode.IS_EXISTS, "该医院名称已存在");
+            }
+        }
+        if (StringUtil.isNotBlank(hospitalInfo.getCode())) {
+            queryWrapper.eq("code", hospitalInfo.getCode());
+            HospitalInfo oldRecord = this.getOne(queryWrapper, false);
+            if (hospitalInfo.getId() == null
+                    && oldRecord != null) {
+                throw new CommonException(CommonErrorCode.IS_EXISTS, "该医院编码已存在");
+            }
+            if (hospitalInfo.getId() != null
+                    && oldRecord != null
+                    && !hospitalInfo.getId().equals(oldRecord.getId())) {
+                throw new CommonException(CommonErrorCode.IS_EXISTS, "该医院编码已存在");
+            }
+        }
+
         //新增数据
         if (hospitalInfo.getId() == null) {
             hospitalInfo.setCreator(userId);
             hospitalInfo.setGmtCreate(now);
+            hospitalInfo.setConnect(1);
+        }
+        if (StringUtil.isBlank(hospitalInfo.getSpell())) {
+            hospitalInfo.setSpell(Cn2SpellUtil.converterToFirstSpell(hospitalInfo.getName()));
         }
         if (hospitalInfo.getIsDeleted() == null) {
             hospitalInfo.setIsDeleted(IsDeleteEnum.N.getKey());
@@ -109,6 +178,66 @@ public class HospitalInfoFacade extends HospitalInfoServiceImpl {
         if (hospitalInfo.getIsDeleted().equals(IsDeleteEnum.Y.getKey())) {
             throw new CommonException(CommonErrorCode.NOT_EXISTS, "数据已删除");
         }
+
+        //校验关联数据
+        List<DeptConfig> deptConfigList
+                = deptConfigService.list(new QueryWrapper<DeptConfig>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", idVO.getId()));
+        if (ListUtil.isNotEmpty(deptConfigList)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医院存在关联数据,无法删除");
+        }
+        List<DiseaseConfig> diseaseConfigList
+                = diseaseConfigService.list(new QueryWrapper<DiseaseConfig>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", idVO.getId()));
+        if (ListUtil.isNotEmpty(diseaseConfigList)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医院存在关联数据,无法删除");
+        }
+        List<DrugConfig> drugConfigList
+                = drugConfigService.list(new QueryWrapper<DrugConfig>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", idVO.getId()));
+        if (ListUtil.isNotEmpty(drugConfigList)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医院存在关联数据,无法删除");
+        }
+        List<LisConfig> lisConfigList
+                = lisConfigService.list(new QueryWrapper<LisConfig>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", idVO.getId()));
+        if (ListUtil.isNotEmpty(lisConfigList)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医院存在关联数据,无法删除");
+        }
+        List<OperationConfig> operationConfigList
+                = operationConfigService.list(new QueryWrapper<OperationConfig>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", idVO.getId()));
+        if (ListUtil.isNotEmpty(operationConfigList)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医院存在关联数据,无法删除");
+        }
+        List<PacsConfig> pacsConfigList
+                = pacsConfigService.list(new QueryWrapper<PacsConfig>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", idVO.getId()));
+        if (ListUtil.isNotEmpty(pacsConfigList)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医院存在关联数据,无法删除");
+        }
+        List<TransfusionConfig> transfusionConfigList
+                = transfusionConfigService.list(new QueryWrapper<TransfusionConfig>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", idVO.getId()));
+        if (ListUtil.isNotEmpty(transfusionConfigList)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医院存在关联数据,无法删除");
+        }
+        List<Plan> planList
+                = planFacade.list(new QueryWrapper<Plan>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", idVO.getId()));
+        if (ListUtil.isNotEmpty(planList)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该医院存在关联数据,无法删除");
+        }
+
+
         hospitalInfo.setIsDeleted(IsDeleteEnum.Y.getKey());
         hospitalInfo.setModifier(userId);
         hospitalInfo.setGmtModified(now);
@@ -152,4 +281,31 @@ public class HospitalInfoFacade extends HospitalInfoServiceImpl {
     public IPage<DiseaseConfig> getPage(HospitalInfoPageVO hospitalInfoPageVO) {
         return hospitalInfoService.getPage(hospitalInfoPageVO);
     }
+
+    /**
+     * 保存医院信息--医院端只能修改对接状态
+     *
+     * @param hospitalSaveVO
+     * @return
+     */
+    public Boolean modifyConnectStatus(HospitalSaveVO hospitalSaveVO) {
+        String userId = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+        UpdateWrapper<HospitalInfo> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.set("connect", hospitalSaveVO.getConnect())
+                .set("modifier", userId)
+                .set("gmt_modified", now)
+                .eq("id", hospitalSaveVO.getId());
+        return this.update(updateWrapper);
+    }
+
+    public Map<Long, String> getHospitalInfoData(List<Long> hospitalId) {
+        QueryWrapper<HospitalInfo> hospitalInfo = new QueryWrapper<>();
+        hospitalInfo.eq("is_deleted", IsDeleteEnum.N.getKey()).in("id",hospitalId);
+        List<HospitalInfo> list = list(hospitalInfo);
+        List<HospitalInfoDTO> data = new ArrayList<>();
+        data = BeanUtil.listCopyTo(list, HospitalInfoDTO.class);
+        Map<Long, String> hospitalInfoData = data.stream().collect(Collectors.toMap(k -> k.getId(), v -> v.getName()));
+        return hospitalInfoData;
+    }
 }

+ 182 - 3
cdssman-service/src/main/java/com/diagbot/facade/LisConfigFacade.java

@@ -3,16 +3,23 @@ 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.HosRelationNumDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.LisConfig;
+import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
 import com.diagbot.service.LisConfigService;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
+import com.diagbot.vo.ConceptVO;
 import com.diagbot.vo.HosRelationNumPageVO;
 import com.diagbot.vo.HospitalIdVO;
 import com.diagbot.vo.IdListVO;
@@ -25,6 +32,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -40,6 +48,8 @@ import java.util.stream.Collectors;
 public class LisConfigFacade{
     @Autowired
     private LisConfigService lisConfigService;
+    @Autowired
+    private CdssCoreClient cdssCoreClient;
 
     /**
      * 判断是否已存在
@@ -62,8 +72,14 @@ public class LisConfigFacade{
                     .eq("his_detail_name", lisConfig.getHisDetailName());
         }
         LisConfig oldRecord = lisConfigService.getOne(queryWrapper, false);
-        if (oldRecord != null) {
-            return true;
+        if (lisConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (lisConfig.getId() != null
+                && oldRecord != null
+                && !lisConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
         }
         return false;
     }
@@ -79,6 +95,29 @@ public class LisConfigFacade{
         Date now = DateUtil.now();
         lisConfig.setModifier(userId);
         lisConfig.setGmtModified(now);
+        QueryWrapper<LisConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", lisConfig.getHospitalId())
+                .eq("his_name", lisConfig.getHisName())
+                .eq("unique_name", lisConfig.getUniqueName());
+        if (StringUtil.isBlank(lisConfig.getHisDetailName())) {
+            queryWrapper.and(i -> i.isNull("his_detail_name")
+                    .or()
+                    .eq("his_detail_name", ""));
+        } else {
+            queryWrapper
+                    .eq("his_detail_name", lisConfig.getHisDetailName());
+        }
+        LisConfig oldRecord = lisConfigService.getOne(queryWrapper, false);
+        if (lisConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (lisConfig.getId() != null
+                && oldRecord != null
+                && !lisConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
         //新增数据
         if (lisConfig.getId() == null) {
             lisConfig.setCreator(userId);
@@ -224,10 +263,140 @@ public class LisConfigFacade{
             lisConfigList.forEach(lisConfig -> {
                 lisConfig.setHospitalId(hospitalIdVO.getHospitalId());
             });
-            saveOrUpdateRecords(lisConfigList);
+            importExcelRecords(lisConfigList, hospitalIdVO);
+        } else {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
         }
     }
 
+    /**
+     * 数据导入
+     *
+     * @param lisConfigList
+     * @return
+     */
+    public Boolean importExcelRecords(List<LisConfig> lisConfigList,HospitalIdVO hospitalIdVO) {
+        Long hospitalId = hospitalIdVO.getHospitalId();
+        String userId = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+
+        //1、数据完整性校验
+        //2、去除前后空格
+        //过滤空数据,保留重复数据,方便计行
+        lisConfigList = lisConfigList.stream()
+                .filter(i -> StringUtil.isNotBlank(i.getHisName())
+                        || StringUtil.isNotBlank(i.getHisDetailName())
+                        || StringUtil.isNotBlank(i.getUniqueCode())
+                        || StringUtil.isNotBlank(i.getUniqueName()))
+                .collect(Collectors.toList());
+        if (ListUtil.isEmpty(lisConfigList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
+        }
+        List<String> emptyNumList = Lists.newLinkedList();
+        for (int i = 0; i < lisConfigList.size(); i++) {
+            if (StringUtil.isBlank(lisConfigList.get(i).getHisName())
+                    || StringUtil.isBlank(lisConfigList.get(i).getUniqueName())) {
+                emptyNumList.add(String.valueOf(i + 2));
+            }
+            if (StringUtil.isNotBlank(lisConfigList.get(i).getHisName())) {
+                lisConfigList.get(i).setHisName(lisConfigList.get(i).getHisName().trim());
+            }
+            if (StringUtil.isNotBlank(lisConfigList.get(i).getUniqueName())) {
+                lisConfigList.get(i).setUniqueName(lisConfigList.get(i).getUniqueName().trim());
+            }
+            if (StringUtil.isNotBlank(lisConfigList.get(i).getUniqueCode())) {
+                lisConfigList.get(i).setUniqueCode(lisConfigList.get(i).getUniqueCode().trim());
+            } else {
+                lisConfigList.get(i).setUniqueCode(null);
+            }
+        }
+
+        if (ListUtil.isNotEmpty(emptyNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "以下行数(不计入空行)存在不完整数据:"
+                    + emptyNumList.stream().collect(Collectors.joining("、"))
+                    + "。导入取消,请修改后再试。\n");
+        }
+
+        List<String> hisNames = lisConfigList
+                .stream()
+                .map(i -> i.getHisName())
+                .collect(Collectors.toList());
+        List<String> uniqueNames = lisConfigList
+                .stream()
+                .map(i -> i.getUniqueName())
+                .collect(Collectors.toList());
+
+        // 验证数据是否已存在,已存在的先删除
+        // 没id的删除重新插入,有id的更新
+        List<Long> deleteIds = Lists.newLinkedList();
+        Map<String, Map<String, Map<String, Long>>> configMap
+                = getConfigMap(Long.valueOf(hospitalId), hisNames, uniqueNames);
+        lisConfigList.forEach(lisConfig -> {
+            lisConfig.setHospitalId(Long.valueOf(hospitalId));
+            lisConfig.setModifier(userId);
+            lisConfig.setGmtModified(now);
+            if (lisConfig.getId() == null) {
+                if (configMap.containsKey(lisConfig.getHisName())) {
+                    if (lisConfig.getHisDetailName() == null
+                            && configMap.get(lisConfig.getHisName()).containsKey("")) {
+                        if (configMap.get(lisConfig.getHisName()).get("").containsKey(lisConfig.getUniqueName())) {
+                            deleteIds.add(configMap.get(lisConfig.getHisName()).get("").get(lisConfig.getUniqueName()));
+                        }
+                    } else if (configMap.get(lisConfig.getHisName()).containsKey(lisConfig.getHisDetailName())) {
+                        if (configMap.get(lisConfig.getHisName()).get(lisConfig.getHisDetailName()).containsKey(lisConfig.getUniqueName())) {
+                            deleteIds.add(configMap
+                                    .get(lisConfig.getHisName())
+                                    .get(lisConfig.getHisDetailName())
+                                    .get(lisConfig.getUniqueName()));
+                        }
+                    }
+                }
+                lisConfig.setCreator(userId);
+                lisConfig.setGmtCreate(now);
+            }
+            if (lisConfig.getIsDeleted() == null) {
+                lisConfig.setIsDeleted(IsDeleteEnum.N.getKey());
+            }
+        });
+
+        //标准术语校验
+        List<String> errorNumList = Lists.newLinkedList();
+        ConceptVO conceptVO = new ConceptVO();
+        conceptVO.setNames(uniqueNames);
+        conceptVO.setType(ConceptTypeEnum.LisPack.getKey());
+        RespDTO<List<String>> respLisPackDTO = cdssCoreClient.getConceptNames(conceptVO);
+        RespDTOUtil.respNGDealCover(respLisPackDTO, "标准术语校验失败");
+        List<String> lisPackNames = respLisPackDTO.data;
+        conceptVO.setType(ConceptTypeEnum.Lis.getKey());
+        RespDTO<List<String>> respLisDTO = cdssCoreClient.getConceptNames(conceptVO);
+        RespDTOUtil.respNGDealCover(respLisDTO, "标准术语校验失败");
+        List<String> lisNames = respLisDTO.data;
+        for (int i = 0; i < lisConfigList.size(); i++) {
+            if (!lisPackNames.contains(lisConfigList.get(i).getUniqueName())
+                    && !lisNames.contains(lisConfigList.get(i).getUniqueName())) {
+                errorNumList.add(String.valueOf(i + 2));
+            }
+        }
+        if (ListUtil.isNotEmpty(errorNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
+                    "以下行数(不计入空行)标准术语与数据库术语不匹配:"
+                            + errorNumList.stream().collect(Collectors.joining("、"))
+                            + "。导入取消,请修改后再试。");
+        }
+
+        //重复数据过滤
+        lisConfigList = lisConfigList
+                .stream()
+                .distinct()
+                .collect(Collectors.toList());
+
+        //删除已存在映射关系
+        IdListVO idListVO = new IdListVO();
+        idListVO.setIds(deleteIds);
+        deleteRecords(idListVO);
+        lisConfigService.saveOrUpdateBatch(lisConfigList);
+        return true;
+    }
 
     /**
      * 获取映射关系-id
@@ -303,4 +472,14 @@ public class LisConfigFacade{
     public IPage<HosRelationNumDTO> getRelationNumPage(HosRelationNumPageVO hosRelationNumPageVO) {
         return lisConfigService.getRelationNumPage(hosRelationNumPageVO);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @param response
+     */
+    public void exportExcelModule(HttpServletResponse response) {
+        String fileName = "检验映射模板.xls";
+        ExcelUtils.exportExcel(new ArrayList<>(), null, "sheet1", LisConfig.class, fileName, response, 12.8f);
+    }
 }

+ 152 - 3
cdssman-service/src/main/java/com/diagbot/facade/OperationConfigFacade.java

@@ -3,16 +3,23 @@ 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.HosRelationNumDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.OperationConfig;
+import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
 import com.diagbot.service.OperationConfigService;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
+import com.diagbot.vo.ConceptVO;
 import com.diagbot.vo.HosRelationNumPageVO;
 import com.diagbot.vo.HospitalIdVO;
 import com.diagbot.vo.IdListVO;
@@ -25,6 +32,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -40,6 +48,8 @@ import java.util.stream.Collectors;
 public class OperationConfigFacade {
     @Autowired
     private OperationConfigService operationConfigService;
+    @Autowired
+    private CdssCoreClient cdssCoreClient;
 
     /**
      * 判断是否已存在
@@ -54,8 +64,14 @@ public class OperationConfigFacade {
                 .eq("his_name", operationConfig.getHisName())
                 .eq("unique_name", operationConfig.getUniqueName());
         OperationConfig oldRecord = operationConfigService.getOne(queryWrapper, false);
-        if (oldRecord != null) {
-            return true;
+        if (operationConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (operationConfig.getId() != null
+                && oldRecord != null
+                && !operationConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
         }
         return false;
     }
@@ -71,6 +87,21 @@ public class OperationConfigFacade {
         Date now = DateUtil.now();
         operationConfig.setModifier(userId);
         operationConfig.setGmtModified(now);
+        QueryWrapper<OperationConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", operationConfig.getHospitalId())
+                .eq("his_name", operationConfig.getHisName())
+                .eq("unique_name", operationConfig.getUniqueName());
+        OperationConfig oldRecord = operationConfigService.getOne(queryWrapper, false);
+        if (operationConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (operationConfig.getId() != null
+                && oldRecord != null
+                && !operationConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
         //新增数据
         if (operationConfig.getId() == null) {
             operationConfig.setCreator(userId);
@@ -205,8 +236,116 @@ public class OperationConfigFacade {
             operationConfigList.forEach(operationConfig -> {
                 operationConfig.setHospitalId(hospitalIdVO.getHospitalId());
             });
-            saveOrUpdateRecords(operationConfigList);
+            importExcelRecords(operationConfigList, hospitalIdVO);
+        } else {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
+        }
+    }
+
+    /**
+     * 数据导入
+     *
+     * @param operationConfigList
+     * @return
+     */
+    public Boolean importExcelRecords(List<OperationConfig> operationConfigList, HospitalIdVO hospitalIdVO) {
+        Long hospitalId = hospitalIdVO.getHospitalId();
+        String userId = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+
+        //1、数据完整性校验
+        //2、去除前后空格
+        //过滤空数据,保留重复数据,方便计行
+        operationConfigList = operationConfigList.stream()
+                .filter(i -> StringUtil.isNotBlank(i.getHisName())
+                        || StringUtil.isNotBlank(i.getUniqueCode())
+                        || StringUtil.isNotBlank(i.getUniqueName()))
+                .collect(Collectors.toList());
+        if (ListUtil.isEmpty(operationConfigList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
+        }
+        List<String> emptyNumList = Lists.newLinkedList();
+        for (int i = 0; i < operationConfigList.size(); i++) {
+            if (StringUtil.isBlank(operationConfigList.get(i).getHisName())
+                    || StringUtil.isBlank(operationConfigList.get(i).getUniqueName())) {
+                emptyNumList.add(String.valueOf(i + 2));
+            }
+            if (StringUtil.isNotBlank(operationConfigList.get(i).getHisName())) {
+                operationConfigList.get(i).setHisName(operationConfigList.get(i).getHisName().trim());
+            }
+            if (StringUtil.isNotBlank(operationConfigList.get(i).getUniqueName())) {
+                operationConfigList.get(i).setUniqueName(operationConfigList.get(i).getUniqueName().trim());
+            }
+            if (StringUtil.isNotBlank(operationConfigList.get(i).getUniqueCode())) {
+                operationConfigList.get(i).setUniqueCode(operationConfigList.get(i).getUniqueCode().trim());
+            } else {
+                operationConfigList.get(i).setUniqueCode(null);
+            }
+        }
+
+        if (ListUtil.isNotEmpty(emptyNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "以下行数(不计入空行)存在不完整数据:"
+                    + emptyNumList.stream().collect(Collectors.joining("、"))
+                    + "。导入取消,请修改后再试。\n");
+        }
+
+        // 验证数据是否已存在,已存在的先删除
+        // 没id的删除重新插入,有id的更新
+        List<Long> deleteIds = Lists.newLinkedList();
+        Map<String, Map<String, Long>> configMap
+                = getConfigMap(Long.valueOf(hospitalId), null, null);
+        operationConfigList.forEach(operationConfig -> {
+            operationConfig.setHospitalId(Long.valueOf(hospitalId));
+            operationConfig.setModifier(userId);
+            operationConfig.setGmtModified(now);
+            if (operationConfig.getId() == null) {
+                if (configMap.containsKey(operationConfig.getHisName())) {
+                    deleteIds.add(configMap.get(operationConfig.getHisName()).get(operationConfig.getUniqueName()));
+                }
+                operationConfig.setCreator(userId);
+                operationConfig.setGmtCreate(now);
+            }
+            if (operationConfig.getIsDeleted() == null) {
+                operationConfig.setIsDeleted(IsDeleteEnum.N.getKey());
+            }
+        });
+
+        //标准术语校验
+        List<String> errorNumList = Lists.newLinkedList();
+        List<String> uniqueNames = operationConfigList.stream()
+                .map(i -> i.getUniqueName())
+                .distinct()
+                .collect(Collectors.toList());
+        ConceptVO conceptVO = new ConceptVO();
+        conceptVO.setNames(uniqueNames);
+        conceptVO.setType(ConceptTypeEnum.Opeartion.getKey());
+        RespDTO<List<String>> respDTO = cdssCoreClient.getConceptNames(conceptVO);
+        RespDTOUtil.respNGDealCover(respDTO, "标准术语校验失败");
+        List<String> names = respDTO.data;
+        for (int i = 0; i < operationConfigList.size(); i++) {
+            if (!names.contains(operationConfigList.get(i).getUniqueName())) {
+                errorNumList.add(String.valueOf(i + 2));
+            }
         }
+        if (ListUtil.isNotEmpty(errorNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
+                    "以下行数(不计入空行)标准术语与数据库术语不匹配:"
+                            + errorNumList.stream().collect(Collectors.joining("、"))
+                            + "。导入取消,请修改后再试。");
+        }
+
+        //重复数据过滤
+        operationConfigList = operationConfigList
+                .stream()
+                .distinct()
+                .collect(Collectors.toList());
+
+        //删除已存在映射关系
+        IdListVO idListVO = new IdListVO();
+        idListVO.setIds(deleteIds);
+        deleteRecords(idListVO);
+        operationConfigService.saveOrUpdateBatch(operationConfigList);
+        return true;
     }
 
     /**
@@ -265,4 +404,14 @@ public class OperationConfigFacade {
     public IPage<HosRelationNumDTO> getRelationNumPage(HosRelationNumPageVO hosRelationNumPageVO) {
         return operationConfigService.getRelationNumPage(hosRelationNumPageVO);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @param response
+     */
+    public void exportExcelModule(HttpServletResponse response) {
+        String fileName = "手术映射模板.xls";
+        ExcelUtils.exportExcel(new ArrayList<>(), null, "sheet1", OperationConfig.class, fileName, response, 12.8f);
+    }
 }

+ 152 - 3
cdssman-service/src/main/java/com/diagbot/facade/PacsConfigFacade.java

@@ -3,16 +3,23 @@ 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.HosRelationNumDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.PacsConfig;
+import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
 import com.diagbot.service.PacsConfigService;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
+import com.diagbot.vo.ConceptVO;
 import com.diagbot.vo.HosRelationNumPageVO;
 import com.diagbot.vo.HospitalIdVO;
 import com.diagbot.vo.IdListVO;
@@ -25,6 +32,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -40,6 +48,8 @@ import java.util.stream.Collectors;
 public class PacsConfigFacade {
     @Autowired
     private PacsConfigService pacsConfigService;
+    @Autowired
+    private CdssCoreClient cdssCoreClient;
 
     /**
      * 判断是否已存在
@@ -54,8 +64,14 @@ public class PacsConfigFacade {
                 .eq("his_name", pacsConfig.getHisName())
                 .eq("unique_name", pacsConfig.getUniqueName());
         PacsConfig oldRecord = pacsConfigService.getOne(queryWrapper, false);
-        if (oldRecord != null) {
-            return true;
+        if (pacsConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (pacsConfig.getId() != null
+                && oldRecord != null
+                && !pacsConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
         }
         return false;
     }
@@ -71,6 +87,21 @@ public class PacsConfigFacade {
         Date now = DateUtil.now();
         pacsConfig.setModifier(userId);
         pacsConfig.setGmtModified(now);
+        QueryWrapper<PacsConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", pacsConfig.getHospitalId())
+                .eq("his_name", pacsConfig.getHisName())
+                .eq("unique_name", pacsConfig.getUniqueName());
+        PacsConfig oldRecord = pacsConfigService.getOne(queryWrapper, false);
+        if (pacsConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (pacsConfig.getId() != null
+                && oldRecord != null
+                && !pacsConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
         //新增数据
         if (pacsConfig.getId() == null) {
             pacsConfig.setCreator(userId);
@@ -203,8 +234,116 @@ public class PacsConfigFacade {
             pacsConfigList.forEach(pacsConfig -> {
                 pacsConfig.setHospitalId(hospitalIdVO.getHospitalId());
             });
-            saveOrUpdateRecords(pacsConfigList);
+            importExcelRecords(pacsConfigList, hospitalIdVO);
+        } else {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
+        }
+    }
+
+    /**
+     * 数据导入
+     *
+     * @param pacsConfigList
+     * @return
+     */
+    public Boolean importExcelRecords(List<PacsConfig> pacsConfigList, HospitalIdVO hospitalIdVO) {
+        Long hospitalId = hospitalIdVO.getHospitalId();
+        String userId = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+
+        //1、数据完整性校验
+        //2、去除前后空格
+        //过滤空数据,保留重复数据,方便计行
+        pacsConfigList = pacsConfigList.stream()
+                .filter(i -> StringUtil.isNotBlank(i.getHisName())
+                        || StringUtil.isNotBlank(i.getUniqueCode())
+                        || StringUtil.isNotBlank(i.getUniqueName()))
+                .collect(Collectors.toList());
+        if (ListUtil.isEmpty(pacsConfigList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
+        }
+        List<String> emptyNumList = Lists.newLinkedList();
+        for (int i = 0; i < pacsConfigList.size(); i++) {
+            if (StringUtil.isBlank(pacsConfigList.get(i).getHisName())
+                    || StringUtil.isBlank(pacsConfigList.get(i).getUniqueName())) {
+                emptyNumList.add(String.valueOf(i + 2));
+            }
+            if (StringUtil.isNotBlank(pacsConfigList.get(i).getHisName())) {
+                pacsConfigList.get(i).setHisName(pacsConfigList.get(i).getHisName().trim());
+            }
+            if (StringUtil.isNotBlank(pacsConfigList.get(i).getUniqueName())) {
+                pacsConfigList.get(i).setUniqueName(pacsConfigList.get(i).getUniqueName().trim());
+            }
+            if (StringUtil.isNotBlank(pacsConfigList.get(i).getUniqueCode())) {
+                pacsConfigList.get(i).setUniqueCode(pacsConfigList.get(i).getUniqueCode().trim());
+            } else {
+                pacsConfigList.get(i).setUniqueCode(null);
+            }
+        }
+
+        if (ListUtil.isNotEmpty(emptyNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "以下行数(不计入空行)存在不完整数据:"
+                    + emptyNumList.stream().collect(Collectors.joining("、"))
+                    + "。导入取消,请修改后再试。\n");
+        }
+
+        // 验证数据是否已存在,已存在的先删除
+        // 没id的删除重新插入,有id的更新
+        List<Long> deleteIds = Lists.newLinkedList();
+        Map<String, Map<String, Long>> configMap
+                = getConfigMap(Long.valueOf(hospitalId), null, null);
+        pacsConfigList.forEach(pacsConfig -> {
+            pacsConfig.setHospitalId(Long.valueOf(hospitalId));
+            pacsConfig.setModifier(userId);
+            pacsConfig.setGmtModified(now);
+            if (pacsConfig.getId() == null) {
+                if (configMap.containsKey(pacsConfig.getHisName())) {
+                    deleteIds.add(configMap.get(pacsConfig.getHisName()).get(pacsConfig.getUniqueName()));
+                }
+                pacsConfig.setCreator(userId);
+                pacsConfig.setGmtCreate(now);
+            }
+            if (pacsConfig.getIsDeleted() == null) {
+                pacsConfig.setIsDeleted(IsDeleteEnum.N.getKey());
+            }
+        });
+
+        //标准术语校验
+        List<String> errorNumList = Lists.newLinkedList();
+        List<String> uniqueNames = pacsConfigList.stream()
+                .map(i -> i.getUniqueName())
+                .distinct()
+                .collect(Collectors.toList());
+        ConceptVO conceptVO = new ConceptVO();
+        conceptVO.setNames(uniqueNames);
+        conceptVO.setType(ConceptTypeEnum.Pacs.getKey());
+        RespDTO<List<String>> respDTO = cdssCoreClient.getConceptNames(conceptVO);
+        RespDTOUtil.respNGDealCover(respDTO, "标准术语校验失败");
+        List<String> names = respDTO.data;
+        for (int i = 0; i < pacsConfigList.size(); i++) {
+            if (!names.contains(pacsConfigList.get(i).getUniqueName())) {
+                errorNumList.add(String.valueOf(i + 2));
+            }
         }
+        if (ListUtil.isNotEmpty(errorNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
+                    "以下行数(不计入空行)标准术语与数据库术语不匹配:"
+                            + errorNumList.stream().collect(Collectors.joining("、"))
+                            + "。导入取消,请修改后再试。");
+        }
+
+        //重复数据过滤
+        pacsConfigList = pacsConfigList
+                .stream()
+                .distinct()
+                .collect(Collectors.toList());
+
+        //删除已存在映射关系
+        IdListVO idListVO = new IdListVO();
+        idListVO.setIds(deleteIds);
+        deleteRecords(idListVO);
+        pacsConfigService.saveOrUpdateBatch(pacsConfigList);
+        return true;
     }
 
     /**
@@ -263,4 +402,14 @@ public class PacsConfigFacade {
     public IPage<HosRelationNumDTO> getRelationNumPage(HosRelationNumPageVO hosRelationNumPageVO) {
         return pacsConfigService.getRelationNumPage(hosRelationNumPageVO);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @param response
+     */
+    public void exportExcelModule(HttpServletResponse response) {
+        String fileName = "检查映射模板.xls";
+        ExcelUtils.exportExcel(new ArrayList<>(), null, "sheet1", PacsConfig.class, fileName, response, 12.8f);
+    }
 }

+ 18 - 14
cdssman-service/src/main/java/com/diagbot/facade/PlanDetailFacade.java

@@ -108,22 +108,26 @@ public class PlanDetailFacade extends PlanDetailServiceImpl {
             planDetails.setCreator(UserUtils.getCurrentPrincipleID());
             planDetails.setModifier(UserUtils.getCurrentPrincipleID());
             planDetails.setGmtModified(now);
-            List<PlanDetailSubSaveVO> data = planDetailSave.getPlanDetailSub();
             planDetailService.save(planDetails);
-            List<PlanDetail> planDetailList = new ArrayList<>();
-            //再保存子类
-            for (PlanDetailSubSaveVO planDetailVO : data) {
-                PlanDetail planDetail = new PlanDetail();
-                BeanUtil.copyProperties(planDetailVO, planDetail);
-                planDetail.setPlanId(planDetailSaveVO.getPlanId());
-                planDetail.setParentId(planDetails.getId());
-                planDetail.setGmtCreate(now);
-                planDetail.setCreator(UserUtils.getCurrentPrincipleID());
-                planDetail.setModifier(UserUtils.getCurrentPrincipleID());
-                planDetail.setGmtModified(now);
-                planDetailList.add(planDetail);
+            List<PlanDetailSubSaveVO> data = planDetailSave.getPlanDetailSub();
+            if(ListUtil.isNotEmpty(data)){
+                List<PlanDetail> planDetailList = new ArrayList<>();
+                //再保存子类
+                for (PlanDetailSubSaveVO planDetailVO : data) {
+                    if(planDetailVO.getCode()!=null){
+                        PlanDetail planDetail = new PlanDetail();
+                        BeanUtil.copyProperties(planDetailVO, planDetail);
+                        planDetail.setPlanId(planDetailSaveVO.getPlanId());
+                        planDetail.setParentId(planDetails.getId());
+                        planDetail.setGmtCreate(now);
+                        planDetail.setCreator(UserUtils.getCurrentPrincipleID());
+                        planDetail.setModifier(UserUtils.getCurrentPrincipleID());
+                        planDetail.setGmtModified(now);
+                        planDetailList.add(planDetail);
+                    }
+                }
+                res = planDetailService.saveBatch(planDetailList);
             }
-            res = planDetailService.saveBatch(planDetailList);
         }
 
         return res;

+ 111 - 22
cdssman-service/src/main/java/com/diagbot/facade/PlanFacade.java

@@ -3,6 +3,7 @@ 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.dto.HospitalInfoDTO;
 import com.diagbot.dto.PlanDetailDTO;
 import com.diagbot.dto.PlanInfoDefaultDTO;
 import com.diagbot.dto.PlanInfoPagesDTO;
@@ -19,10 +20,15 @@ import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
 import com.diagbot.vo.HospitalPlanCancelVO;
+import com.diagbot.vo.HospitalPlanDetailSaveVO;
+import com.diagbot.vo.HospitalPlanIdVO;
 import com.diagbot.vo.HospitalPlanPageVO;
 import com.diagbot.vo.HospitalPlanSaveVO;
 import com.diagbot.vo.HospitalPlanVO;
 import com.diagbot.vo.HospitalSetVO;
+import com.diagbot.vo.PlanDetailCancelVO;
+import com.diagbot.vo.PlanDetailSaveVO;
+import com.diagbot.vo.PlanDetailSubSaveVO;
 import com.diagbot.vo.PlanRevStopVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -44,6 +50,8 @@ public class PlanFacade extends PlanServiceImpl {
 
     @Autowired
     PlanDetailFacade planDetailFacade;
+    @Autowired
+    private HospitalInfoFacade hospitalInfoFacade;
 
 
     /**
@@ -51,6 +59,7 @@ public class PlanFacade extends PlanServiceImpl {
      * @return
      */
     public boolean savePlanInfoDatas(HospitalPlanSaveVO hospitalPlanSaveVO) {
+        Long planId = hospitalPlanSaveVO.getId();
         Date now = DateUtil.now();
         boolean res = false;
         // 校验名称是否相同
@@ -58,18 +67,23 @@ public class PlanFacade extends PlanServiceImpl {
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("hospital_id", hospitalPlanSaveVO.getHospitalId())
                 .eq("plan_name", hospitalPlanSaveVO.getPlanName())
-                .eq("plan_code", hospitalPlanSaveVO.getPlanCode())
                 .ne("id", hospitalPlanSaveVO.getId() == null ? -1 : hospitalPlanSaveVO.getId()));
         if (count > 0) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "相同【医院】下,方案名称已存在");
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该方案名称已存在");
+        }
+        int countTow = this.count(new QueryWrapper<Plan>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", hospitalPlanSaveVO.getHospitalId())
+                .eq("plan_code", hospitalPlanSaveVO.getPlanCode())
+                .ne("id", hospitalPlanSaveVO.getId() == null ? -1 : hospitalPlanSaveVO.getId()));
+        if (countTow > 0) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该方案编码已存在");
         }
         if (hospitalPlanSaveVO.getId() != null) {
             UpdateWrapper<Plan> planQuery = new UpdateWrapper<>();
             planQuery.eq("is_deleted", IsDeleteEnum.N.getKey())
                     .eq("id", hospitalPlanSaveVO.getId())
                     .set("gmt_modified", now)
-                    .set("gmt_create", now)
-                    .set("creator", UserUtils.getCurrentPrincipleID())
                     .set("modifier", UserUtils.getCurrentPrincipleID())
                     .set("hospital_id", hospitalPlanSaveVO.getHospitalId())
                     .set("plan_name", hospitalPlanSaveVO.getPlanName())
@@ -84,13 +98,49 @@ public class PlanFacade extends PlanServiceImpl {
             plan.setCreator(UserUtils.getCurrentPrincipleID());
             plan.setModifier(UserUtils.getCurrentPrincipleID());
             res = this.save(plan);
+            planId = plan.getId();
+        }
+        PlanDetailSaveVO planDetailSaveVO = new PlanDetailSaveVO();
+        planDetailSaveVO.setPlanId(planId);
+        planDetailSaveVO.setHospitalId(hospitalPlanSaveVO.getHospitalId());
+        List<HospitalPlanDetailSaveVO> planDetailParentNew = new ArrayList<>();
+        List<HospitalPlanDetailSaveVO> planDetailParent = hospitalPlanSaveVO.getPlanDetailParent();
+        if (ListUtil.isNotEmpty(planDetailParent)) {
+            for (HospitalPlanDetailSaveVO data : planDetailParent) {
+                HospitalPlanDetailSaveVO dataNew = new HospitalPlanDetailSaveVO();
+                BeanUtil.copyProperties(data, dataNew);
+                dataNew.setPlanId(planId);
+                List<PlanDetailSubSaveVO> planDetailSubNew = new ArrayList<>();
+                List<PlanDetailSubSaveVO> planDetailSub = data.getPlanDetailSub();
+                if (ListUtil.isNotEmpty(planDetailSub)) {
+                    for (PlanDetailSubSaveVO dataSub : planDetailSub) {
+                        PlanDetailSubSaveVO dataSubNew = new PlanDetailSubSaveVO();
+                        BeanUtil.copyProperties(dataSub, dataSubNew);
+                        dataSubNew.setPlanId(planId);
+                        planDetailSubNew.add(dataSubNew);
+                    }
+                    dataNew.setPlanDetailSub(planDetailSubNew);
+                    planDetailParentNew.add(dataNew);
+                }
+            }
         }
+
+        planDetailSaveVO.setPlanDetailParent(planDetailParentNew);
+        res = planDetailFacade.savePlanDetail(planDetailSaveVO);
         return res;
     }
 
     public IPage<PlanInfoPagesDTO> getPlanInfoPage(HospitalPlanPageVO hospitalPlanPageVO) {
         IPage<PlanInfoPagesDTO> data = getPlanInfoPageAll(hospitalPlanPageVO);
         List<PlanInfoPagesDTO> planInfos = data.getRecords();
+        List<Long> hospitaIds = new ArrayList<>();
+        for(PlanInfoPagesDTO h:planInfos){
+            hospitaIds.add(h.getHospitalId());
+        }
+        Map<Long, String> hospitalInfo = hospitalInfoFacade.getHospitalInfoData(hospitaIds);
+        for(PlanInfoPagesDTO planInfodata:planInfos){
+            planInfodata.setHospitalName(hospitalInfo.get(planInfodata.getHospitalId()));
+        }
         // 取版本id查明细
         List<Long> ids = new ArrayList<>();
         if (planInfos != null) {
@@ -137,17 +187,26 @@ public class PlanFacade extends PlanServiceImpl {
     }
 
     public boolean cancelPlanData(HospitalPlanCancelVO hospitalPlanCancelVO) {
+        PlanDetailCancelVO planDetailCancelVO = new PlanDetailCancelVO();
+        planDetailCancelVO.setHospitalId(hospitalPlanCancelVO.getHospitalId());
+        planDetailCancelVO.setPlanId(hospitalPlanCancelVO.getPlanId());
         boolean res = false;
         // 1.先判断数据是否存在有效
-        checkPlan(hospitalPlanCancelVO.getPlanId());
+        Plan plan = checkPlan(hospitalPlanCancelVO.getPlanId());
+        if (plan.getPlanStatus() == 1) {
+            throw new CommonException(CommonErrorCode.FAIL, "该方案启用中,不能删除!");
+        }
         UpdateWrapper<Plan> planNew = new UpdateWrapper<>();
         planNew
                 .eq("id", hospitalPlanCancelVO.getPlanId())
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", hospitalPlanCancelVO.getHospitalId())
                 .set("is_deleted", IsDeleteEnum.Y.getKey())
                 .set("modifier", UserUtils.getCurrentPrincipleID())
                 .set("gmt_modified", DateUtil.now());
         res = update(new Plan(), planNew);
+        //再删除明细
+        planDetailFacade.cancelPlanDetail(planDetailCancelVO);
 
         return res;
     }
@@ -186,13 +245,13 @@ public class PlanFacade extends PlanServiceImpl {
         QueryWrapper<Plan> planFand = new QueryWrapper<>();
         planFand.eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("plan_code", "plan_default")
-                .eq("hospital_id", 0L);
+                .eq("hospital_id", -1L);
         Plan plan = getOne(planFand, false);
         BeanUtil.copyProperties(plan, data);
         List<Long> planId = new ArrayList<>();
         planId.add(plan.getId());
         HospitalSetVO hospitalSetVO = new HospitalSetVO();
-        hospitalSetVO.setHospitalId(0L);
+        hospitalSetVO.setHospitalId(-1L);
         hospitalSetVO.setPlanId(planId);
         List<PlanDetailDTO> sysSetInfoData = planDetailFacade.getSysSetInfoData(hospitalSetVO);
         data.setPlanDetailDefault(sysSetInfoData);
@@ -200,7 +259,7 @@ public class PlanFacade extends PlanServiceImpl {
     }
 
     public List<PlanInfoPagesDTO> getSysPlanInfoData(HospitalPlanVO hospitalPlanVO) {
-        //查询该医院有没有相关方案配置, 要是没有取默认的
+        //查询该医院有没有相关方案配置
         List<PlanInfoPagesDTO> sysPlanInfoDTO = new ArrayList<>();
         QueryWrapper<Plan> sysPlanInfo = new QueryWrapper<>();
         sysPlanInfo.eq("is_deleted", IsDeleteEnum.N.getKey());
@@ -215,35 +274,65 @@ public class PlanFacade extends PlanServiceImpl {
             for (PlanInfoPagesDTO data : sysPlanInfoDTO) {
                 planId.add(data.getId());
             }
-        } else {
-            QueryWrapper<Plan> sysPlandefault = new QueryWrapper<>();
-            sysPlandefault.eq("is_deleted", IsDeleteEnum.N.getKey());
-            sysPlandefault.eq("hospital_id", -1);
-            sysPlandefault.eq(StringUtil.isNotBlank(hospitalPlanVO.getPlanCode()), "plan_code", hospitalPlanVO.getPlanCode());
-            sysPlandefault.eq("plan_status", StatusEnum.Enable.getKey());
-            List<Plan> sysPlandefaultData = list(sysPlandefault);
-            if (ListUtil.isNotEmpty(sysPlandefaultData)) {
-                sysPlanInfoDTO = BeanUtil.listCopyTo(sysPlandefaultData, PlanInfoPagesDTO.class);
-                for (PlanInfoPagesDTO data : sysPlanInfoDTO) {
-                    planId.add(data.getId());
+        }
+        if (ListUtil.isEmpty(planId)) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该医院没有配置方案,请先配置方案!");
+        }
+        HospitalSetVO hospitalSetVO = new HospitalSetVO();
+        hospitalSetVO.setHospitalId(hospitalId);
+        hospitalSetVO.setPlanId(planId);
+        List<PlanDetailDTO> sysSetInfoData = planDetailFacade.getSysSetInfoData(hospitalSetVO);
+        //把父级和子级数据sysSetInfoData放在方案下
+        Map<Long, List<PlanDetailDTO>> dataMap = sysSetInfoData.stream().collect(Collectors.groupingBy(PlanDetailDTO::getPlanId));
+        for (Long key : dataMap.keySet()) {
+            for (PlanInfoPagesDTO sysPlanInfos : sysPlanInfoDTO) {
+                if (sysPlanInfos.getId().equals(key)) {
+                    sysPlanInfos.setSysSetInfo(dataMap.get(key));
                 }
             }
-            hospitalId = -1L;
+        }
+
+        return sysPlanInfoDTO;
+    }
+
+    public List<PlanInfoPagesDTO> getPlanInfoIds(HospitalPlanIdVO hospitalPlanIdVO) {
+
+        //查询该医院有没有相关方案配置
+        List<PlanInfoPagesDTO> sysPlanInfoDTO = new ArrayList<>();
+        QueryWrapper<Plan> sysPlanInfo = new QueryWrapper<>();
+        sysPlanInfo.eq("is_deleted", IsDeleteEnum.N.getKey());
+        sysPlanInfo.eq("hospital_id", hospitalPlanIdVO.getHospitalId());
+        sysPlanInfo.eq("id", hospitalPlanIdVO.getId());
+        List<Plan> sysPlanInfoData = list(sysPlanInfo);
+        List<Long> planId = new ArrayList<>();
+        Long hospitalId = hospitalPlanIdVO.getHospitalId();
+        List<Long> hospitaIds = new ArrayList<>();
+        if (ListUtil.isNotEmpty(sysPlanInfoData)) {
+            sysPlanInfoDTO = BeanUtil.listCopyTo(sysPlanInfoData, PlanInfoPagesDTO.class);
+            for (PlanInfoPagesDTO data : sysPlanInfoDTO) {
+                planId.add(data.getId());
+                hospitaIds.add(data.getHospitalId());
+            }
+
+        }
+        Map<Long, String> hospitalInfo = hospitalInfoFacade.getHospitalInfoData(hospitaIds);
+        if(ListUtil.isEmpty(planId)){
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该数据不存在!");
         }
         HospitalSetVO hospitalSetVO = new HospitalSetVO();
         hospitalSetVO.setHospitalId(hospitalId);
         hospitalSetVO.setPlanId(planId);
         List<PlanDetailDTO> sysSetInfoData = planDetailFacade.getSysSetInfoData(hospitalSetVO);
-        //把父级数据放在方案下
+        //把父级和子级数据sysSetInfoData放在方案下
         Map<Long, List<PlanDetailDTO>> dataMap = sysSetInfoData.stream().collect(Collectors.groupingBy(PlanDetailDTO::getPlanId));
         for (Long key : dataMap.keySet()) {
             for (PlanInfoPagesDTO sysPlanInfos : sysPlanInfoDTO) {
                 if (sysPlanInfos.getId().equals(key)) {
                     sysPlanInfos.setSysSetInfo(dataMap.get(key));
                 }
+                sysPlanInfos.setHospitalName(hospitalInfo.get(sysPlanInfos.getHospitalId()));
             }
         }
-
         return sysPlanInfoDTO;
     }
 }

+ 155 - 6
cdssman-service/src/main/java/com/diagbot/facade/TransfusionConfigFacade.java

@@ -3,28 +3,36 @@ 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.HosRelationNumDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.TransfusionConfig;
+import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
 import com.diagbot.service.TransfusionConfigService;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
-import com.diagbot.vo.TransfusionConfigListVO;
-import com.diagbot.vo.TransfusionConfigPageVO;
+import com.diagbot.vo.ConceptVO;
 import com.diagbot.vo.HosRelationNumPageVO;
 import com.diagbot.vo.HospitalIdVO;
 import com.diagbot.vo.IdListVO;
 import com.diagbot.vo.IdVO;
+import com.diagbot.vo.TransfusionConfigListVO;
+import com.diagbot.vo.TransfusionConfigPageVO;
 import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -40,6 +48,8 @@ import java.util.stream.Collectors;
 public class TransfusionConfigFacade {
     @Autowired
     private TransfusionConfigService transfusionConfigService;
+    @Autowired
+    private CdssCoreClient cdssCoreClient;
 
     /**
      * 判断是否已存在
@@ -54,8 +64,14 @@ public class TransfusionConfigFacade {
                 .eq("his_name", transfusionConfig.getHisName())
                 .eq("unique_name", transfusionConfig.getUniqueName());
         TransfusionConfig oldRecord = transfusionConfigService.getOne(queryWrapper, false);
-        if (oldRecord != null) {
-            return true;
+        if (transfusionConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (transfusionConfig.getId() != null
+                && oldRecord != null
+                && !transfusionConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
         }
         return false;
     }
@@ -71,6 +87,21 @@ public class TransfusionConfigFacade {
         Date now = DateUtil.now();
         transfusionConfig.setModifier(userId);
         transfusionConfig.setGmtModified(now);
+        QueryWrapper<TransfusionConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", transfusionConfig.getHospitalId())
+                .eq("his_name", transfusionConfig.getHisName())
+                .eq("unique_name", transfusionConfig.getUniqueName());
+        TransfusionConfig oldRecord = transfusionConfigService.getOne(queryWrapper, false);
+        if (transfusionConfig.getId() == null
+                && oldRecord != null) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
+        if (transfusionConfig.getId() != null
+                && oldRecord != null
+                && !transfusionConfig.getId().equals(oldRecord.getId())) {
+            throw new CommonException(CommonErrorCode.IS_EXISTS, "该条关联已存在,无法保存");
+        }
         //新增数据
         if (transfusionConfig.getId() == null) {
             transfusionConfig.setCreator(userId);
@@ -203,8 +234,116 @@ public class TransfusionConfigFacade {
             transfusionConfigList.forEach(transfusionConfig -> {
                 transfusionConfig.setHospitalId(hospitalIdVO.getHospitalId());
             });
-            saveOrUpdateRecords(transfusionConfigList);
+            importExcelRecords(transfusionConfigList, hospitalIdVO);
+        } else {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
+        }
+    }
+
+    /**
+     * 数据导入
+     *
+     * @param transfusionConfigList
+     * @return
+     */
+    public Boolean importExcelRecords(List<TransfusionConfig> transfusionConfigList, HospitalIdVO hospitalIdVO) {
+        Long hospitalId = hospitalIdVO.getHospitalId();
+        String userId = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+
+        //1、数据完整性校验
+        //2、去除前后空格
+        //过滤空数据,保留重复数据,方便计行
+        transfusionConfigList = transfusionConfigList.stream()
+                .filter(i -> StringUtil.isNotBlank(i.getHisName())
+                        || StringUtil.isNotBlank(i.getUniqueCode())
+                        || StringUtil.isNotBlank(i.getUniqueName()))
+                .collect(Collectors.toList());
+        if (ListUtil.isEmpty(transfusionConfigList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "校验失败,导入数据不能为空");
+        }
+        List<String> emptyNumList = Lists.newLinkedList();
+        for (int i = 0; i < transfusionConfigList.size(); i++) {
+            if (StringUtil.isBlank(transfusionConfigList.get(i).getHisName())
+                    || StringUtil.isBlank(transfusionConfigList.get(i).getUniqueName())) {
+                emptyNumList.add(String.valueOf(i + 2));
+            }
+            if (StringUtil.isNotBlank(transfusionConfigList.get(i).getHisName())) {
+                transfusionConfigList.get(i).setHisName(transfusionConfigList.get(i).getHisName().trim());
+            }
+            if (StringUtil.isNotBlank(transfusionConfigList.get(i).getUniqueName())) {
+                transfusionConfigList.get(i).setUniqueName(transfusionConfigList.get(i).getUniqueName().trim());
+            }
+            if (StringUtil.isNotBlank(transfusionConfigList.get(i).getUniqueCode())) {
+                transfusionConfigList.get(i).setUniqueCode(transfusionConfigList.get(i).getUniqueCode().trim());
+            } else {
+                transfusionConfigList.get(i).setUniqueCode(null);
+            }
+        }
+
+        if (ListUtil.isNotEmpty(emptyNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "以下行数(不计入空行)存在不完整数据:"
+                    + emptyNumList.stream().collect(Collectors.joining("、"))
+                    + "。导入取消,请修改后再试。\n");
+        }
+
+        // 验证数据是否已存在,已存在的先删除
+        // 没id的删除重新插入,有id的更新
+        List<Long> deleteIds = Lists.newLinkedList();
+        Map<String, Map<String, Long>> configMap
+                = getConfigMap(Long.valueOf(hospitalId), null, null);
+        transfusionConfigList.forEach(transfusionConfig -> {
+            transfusionConfig.setHospitalId(Long.valueOf(hospitalId));
+            transfusionConfig.setModifier(userId);
+            transfusionConfig.setGmtModified(now);
+            if (transfusionConfig.getId() == null) {
+                if (configMap.containsKey(transfusionConfig.getHisName())) {
+                    deleteIds.add(configMap.get(transfusionConfig.getHisName()).get(transfusionConfig.getUniqueName()));
+                }
+                transfusionConfig.setCreator(userId);
+                transfusionConfig.setGmtCreate(now);
+            }
+            if (transfusionConfig.getIsDeleted() == null) {
+                transfusionConfig.setIsDeleted(IsDeleteEnum.N.getKey());
+            }
+        });
+
+        //标准术语校验
+        List<String> errorNumList = Lists.newLinkedList();
+        List<String> uniqueNames = transfusionConfigList.stream()
+                .map(i -> i.getUniqueName())
+                .distinct()
+                .collect(Collectors.toList());
+        ConceptVO conceptVO = new ConceptVO();
+        conceptVO.setNames(uniqueNames);
+        conceptVO.setType(ConceptTypeEnum.Transfusion.getKey());
+        RespDTO<List<String>> respDTO = cdssCoreClient.getConceptNames(conceptVO);
+        RespDTOUtil.respNGDealCover(respDTO, "标准术语校验失败");
+        List<String> names = respDTO.data;
+        for (int i = 0; i < transfusionConfigList.size(); i++) {
+            if (!names.contains(transfusionConfigList.get(i).getUniqueName())) {
+                errorNumList.add(String.valueOf(i + 2));
+            }
+        }
+        if (ListUtil.isNotEmpty(errorNumList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
+                    "以下行数(不计入空行)标准术语与数据库术语不匹配:"
+                            + errorNumList.stream().collect(Collectors.joining("、"))
+                            + "。导入取消,请修改后再试。");
         }
+
+        //重复数据过滤
+        transfusionConfigList = transfusionConfigList
+                .stream()
+                .distinct()
+                .collect(Collectors.toList());
+
+        //删除已存在映射关系
+        IdListVO idListVO = new IdListVO();
+        idListVO.setIds(deleteIds);
+        deleteRecords(idListVO);
+        transfusionConfigService.saveOrUpdateBatch(transfusionConfigList);
+        return true;
     }
 
     /**
@@ -263,4 +402,14 @@ public class TransfusionConfigFacade {
     public IPage<HosRelationNumDTO> getRelationNumPage(HosRelationNumPageVO hosRelationNumPageVO) {
         return transfusionConfigService.getRelationNumPage(hosRelationNumPageVO);
     }
-}
+
+    /**
+     * 数据导入模板导出
+     *
+     * @param response
+     */
+    public void exportExcelModule(HttpServletResponse response) {
+        String fileName = "输血映射模板.xls";
+        ExcelUtils.exportExcel(new ArrayList<>(), null, "sheet1", TransfusionConfig.class, fileName, response, 12.8f);
+    }
+}

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

@@ -19,8 +19,10 @@ import com.diagbot.vo.UserRoleInfoVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author wangfeng
@@ -36,6 +38,8 @@ public class UserRoleFacade extends UserRoleServiceImpl {
     UserHospitalFacade userHospitalFacade;
     @Autowired
     UserRoleService userRoleService;
+    @Autowired
+    HospitalInfoFacade hospitalInfoFacade;
 
     public boolean addUserRoles(UserRoleInfoVO userRoleInfoVO) {
         boolean res = false;
@@ -64,8 +68,16 @@ public class UserRoleFacade extends UserRoleServiceImpl {
     }
 
     public List<UserRoleInfoFindDTO> getUserRoles(UserRoleInfoFindVO userRoleInfoFindVO) {
-        List<UserRoleInfoFindDTO> data = userRoleService.getUserRoleAlls(userRoleInfoFindVO);
-        return data;
+        List<UserRoleInfoFindDTO> dataAll = userRoleService.getUserRoleAlls(userRoleInfoFindVO);
+        List<Long> hospitalId = new ArrayList<>();
+        for (UserRoleInfoFindDTO data : dataAll) {
+            hospitalId.add(data.getHospitalId());
+        }
+        Map<Long, String> hospitalInfoData = hospitalInfoFacade.getHospitalInfoData(hospitalId);
+        for (UserRoleInfoFindDTO userData : dataAll) {
+            userData.setHospitalName(hospitalInfoData.get(userData.getHospitalId()));
+        }
+        return dataAll;
     }
 
     /**

+ 11 - 0
cdssman-service/src/main/java/com/diagbot/mapper/HospitalInfoMapper.java

@@ -2,11 +2,14 @@ package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.ConceptMappingDTO;
 import com.diagbot.entity.DiseaseConfig;
 import com.diagbot.entity.HospitalInfo;
 import com.diagbot.vo.HospitalInfoPageVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * 医院信息表 Mapper 接口
@@ -23,4 +26,12 @@ public interface HospitalInfoMapper extends BaseMapper<HospitalInfo> {
      * @return
      */
     IPage<DiseaseConfig> getPage(@Param("hospitalInfoPageVO") HospitalInfoPageVO hospitalInfoPageVO);
+
+    /**
+     * 获取术语映射统计列表
+     *
+     * @param hospitalInfoPageVO
+     * @return
+     */
+    List<ConceptMappingDTO> getMappingListPage(@Param("hospitalInfoPageVO") HospitalInfoPageVO hospitalInfoPageVO);
 }

+ 20 - 0
cdssman-service/src/main/java/com/diagbot/service/EnumsDataService.java

@@ -0,0 +1,20 @@
+package com.diagbot.service;
+
+import com.diagbot.util.EnumEntriesBuilder;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 枚举数据接口类
+ * @author: gaodm
+ * @time: 2018/9/19 14:25
+ */
+public interface EnumsDataService {
+    /**
+     * 用户枚举数据获取
+     *
+     * @return 用户枚举类map
+     */
+    Map<String, List<EnumEntriesBuilder.Entry>> getEnumsData();
+}

+ 12 - 1
cdssman-service/src/main/java/com/diagbot/service/HospitalInfoService.java

@@ -1,12 +1,15 @@
 package com.diagbot.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.ConceptMappingDTO;
 import com.diagbot.entity.DiseaseConfig;
 import com.diagbot.entity.HospitalInfo;
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.vo.HospitalInfoPageVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * 医院信息表 服务类
@@ -23,4 +26,12 @@ public interface HospitalInfoService extends IService<HospitalInfo> {
      * @return
      */
     IPage<DiseaseConfig> getPage(@Param("hospitalInfoPageVO") HospitalInfoPageVO hospitalInfoPageVO);
+
+    /**
+     * 获取术语映射统计列表
+     *
+     * @param hospitalInfoPageVO
+     * @return
+     */
+    List<ConceptMappingDTO> getMappingListPage(@Param("hospitalInfoPageVO") HospitalInfoPageVO hospitalInfoPageVO);
 }

+ 31 - 0
cdssman-service/src/main/java/com/diagbot/service/impl/EnumsDataServiceImpl.java

@@ -0,0 +1,31 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.enums.DisclaimerCodeEnum;
+import com.diagbot.service.EnumsDataService;
+import com.diagbot.util.EnumEntriesBuilder;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 枚举数据接口是实现类
+ * @author: gaodm
+ * @time: 2018/9/19 14:27
+ */
+@Service
+public class EnumsDataServiceImpl implements EnumsDataService {
+
+    /**
+     * 用户枚举数据获取
+     *
+     * @return 用户枚举类map
+     */
+    @Override
+    public Map<String, List<EnumEntriesBuilder.Entry>> getEnumsData() {
+        Map<String, List<EnumEntriesBuilder.Entry>> enumMap = new EnumEntriesBuilder()
+                .addEnums("disclaimerCodeAllEnum", DisclaimerCodeEnum.values())
+                .build();
+        return enumMap;
+    }
+}

+ 13 - 0
cdssman-service/src/main/java/com/diagbot/service/impl/HospitalInfoServiceImpl.java

@@ -2,6 +2,7 @@ package com.diagbot.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.ConceptMappingDTO;
 import com.diagbot.entity.DiseaseConfig;
 import com.diagbot.entity.HospitalInfo;
 import com.diagbot.mapper.HospitalInfoMapper;
@@ -10,6 +11,8 @@ import com.diagbot.vo.HospitalInfoPageVO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 医院信息表 服务实现类
@@ -29,4 +32,14 @@ public class HospitalInfoServiceImpl extends ServiceImpl<HospitalInfoMapper, Hos
     public IPage<DiseaseConfig> getPage(@Param("hospitalInfoPageVO") HospitalInfoPageVO hospitalInfoPageVO) {
         return baseMapper.getPage(hospitalInfoPageVO);
     }
+
+    /**
+     * 获取术语映射统计列表
+     *
+     * @param hospitalInfoPageVO
+     * @return
+     */
+    public List<ConceptMappingDTO> getMappingListPage(@Param("hospitalInfoPageVO") HospitalInfoPageVO hospitalInfoPageVO) {
+        return baseMapper.getMappingListPage(hospitalInfoPageVO);
+    }
 }

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

@@ -12,5 +12,5 @@ import lombok.Setter;
 @Setter
 public class ChangeStatusVO {
     private Long id;
-    private String isDeleted;
+    private Integer status;
 }

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

@@ -29,5 +29,5 @@ public class ConceptInfoPageVO extends Page {
     /**
      * 启用状态
      */
-    private String isDeleted;
+    private Integer status;
 }

+ 20 - 0
cdssman-service/src/main/java/com/diagbot/vo/ConceptVO.java

@@ -0,0 +1,20 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/9/10 14:48
+ */
+@Getter
+@Setter
+public class ConceptVO {
+    List<String> names;
+    @NotNull(message = "请输入术语类型")
+    Integer type;
+}

+ 6 - 1
cdssman-service/src/main/java/com/diagbot/vo/HospitalPlanCancelVO.java

@@ -3,6 +3,8 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * @author wangfeng
  * @Description:
@@ -11,8 +13,11 @@ import lombok.Setter;
 @Setter
 @Getter
 public class HospitalPlanCancelVO {
+    @NotNull(message = "请输入医院Id")
+    private Long hospitalId;
     /**
-     * 方案编号
+     * 方案id
      */
+    @NotNull(message = "请输入方案id")
     private Long planId;
 }

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

@@ -13,6 +13,7 @@ import java.util.List;
 @Setter
 @Getter
 public class HospitalPlanDetailSaveVO {
+    private Long planId;
     /**
      * 医院编码
      */

+ 20 - 0
cdssman-service/src/main/java/com/diagbot/vo/HospitalPlanIdVO.java

@@ -0,0 +1,20 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-09-17 9:57
+ */
+@Setter
+@Getter
+public class HospitalPlanIdVO {
+    @NotNull(message = "请输入id")
+    private Long id;
+    @NotNull(message = "请输入医院id")
+    private Long hospitalId;
+}

+ 11 - 1
cdssman-service/src/main/java/com/diagbot/vo/HospitalPlanSaveVO.java

@@ -3,6 +3,10 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
 /**
  * @author wangfeng
  * @Description:
@@ -11,25 +15,29 @@ import lombok.Setter;
 @Setter
 @Getter
 public class HospitalPlanSaveVO {
-    private Long Id;
+    private Long id;
     /**
      * 医院编码
      */
+    @NotNull(message = "请输入医院id")
     private Long hospitalId;
 
     /**
      * 方案名称
      */
+    @NotBlank(message = "请输入方案名称")
     private String planName;
 
     /**
      * 方案编号
      */
+    @NotBlank(message = "请输入方案编号")
     private String planCode;
 
     /**
      * 方案启动1:启动,0:不启用
      */
+    @NotNull(message = "请输状态")
     private Integer planStatus;
 
     /**
@@ -37,4 +45,6 @@ public class HospitalPlanSaveVO {
      */
     private String remark;
 
+    private List<HospitalPlanDetailSaveVO> planDetailParent;
+
 }

+ 20 - 0
cdssman-service/src/main/java/com/diagbot/vo/HospitalSaveVO.java

@@ -0,0 +1,20 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/8/11 10:53
+ */
+@Getter
+@Setter
+public class HospitalSaveVO {
+    @NotNull(message = "请输入医院id")
+    private Long id;
+    @NotNull(message = "请输入是否对接")
+    private Integer connect;
+}

+ 10 - 1
cdssman-service/src/main/java/com/diagbot/vo/StaticKnowledgeIndexVO.java

@@ -1,8 +1,10 @@
 package com.diagbot.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.util.List;
 
@@ -17,10 +19,17 @@ public class StaticKnowledgeIndexVO {
     /**
      * 检索内容
      */
+    @NotBlank(message = "请输入检索内容")
     private String inputStr;
     /**
-     * 检索类型(多选):0-全部、1-诊断、2-药品、3-检验、5-检查、6-手术和操作
+     * 检索类型(多选):0-全部、1-诊断、2-药品、3-检验、4-检查、5-手术和操作
      */
     @NotNull(message = "请输入检索类型")
     private List<Integer> types;
+
+    /**
+     * 是否有静态知识:0-无,1-有
+     */
+    @ApiModelProperty(hidden = true)
+    private Integer hasInfo;
 }

+ 13 - 0
cdssman-service/src/main/java/com/diagbot/web/DeptConfigController.java

@@ -175,4 +175,17 @@ public class DeptConfigController {
         IPage<HosRelationNumDTO> data = deptConfigFacade.getRelationNumPage(hosRelationNumPageVO);
         return RespDTO.onSuc(data);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @return
+     */
+    @ApiOperation(value = "数据导入模板导出[by:zhaops]",
+            notes = "")
+    @PostMapping("/exportExcelModule")
+    @SysLogger("exportExcelModule")
+    public void exportExcelModule(HttpServletResponse response) {
+        deptConfigFacade.exportExcelModule(response);
+    }
 }

+ 14 - 1
cdssman-service/src/main/java/com/diagbot/web/DiseaseConfigController.java

@@ -174,4 +174,17 @@ public class DiseaseConfigController {
         IPage<HosRelationNumDTO> data = diseaseConfigFacade.getRelationNumPage(hosRelationNumPageVO);
         return RespDTO.onSuc(data);
     }
-}
+
+    /**
+     * 数据导入模板导出
+     *
+     * @return
+     */
+    @ApiOperation(value = "数据导入模板导出[by:zhaops]",
+            notes = "")
+    @PostMapping("/exportExcelModule")
+    @SysLogger("exportExcelModule")
+    public void exportExcelModule(HttpServletResponse response) {
+        diseaseConfigFacade.exportExcelModule(response);
+    }
+}

+ 14 - 0
cdssman-service/src/main/java/com/diagbot/web/DrugConfigController.java

@@ -149,6 +149,7 @@ public class DrugConfigController {
 
     /**
      * 数据导出
+     *
      * @param response
      * @param hospitalIdVO
      */
@@ -174,4 +175,17 @@ public class DrugConfigController {
         IPage<HosRelationNumDTO> data = drugConfigFacade.getRelationNumPage(hosRelationNumPageVO);
         return RespDTO.onSuc(data);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @return
+     */
+    @ApiOperation(value = "数据导入模板导出[by:zhaops]",
+            notes = "")
+    @PostMapping("/exportExcelModule")
+    @SysLogger("exportExcelModule")
+    public void exportExcelModule(HttpServletResponse response) {
+        drugConfigFacade.exportExcelModule(response);
+    }
 }

+ 35 - 0
cdssman-service/src/main/java/com/diagbot/web/EnumsController.java

@@ -0,0 +1,35 @@
+package com.diagbot.web;
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.EnumsDataFacade;
+import com.diagbot.util.EnumEntriesBuilder;
+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.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 知识库后台管理枚举数据获取类
+ * @author: gaodm
+ * @time: 2020/10/15 14:32
+ */
+@RestController
+@Api(value = "枚举数据获取API", tags = { "枚举数据获取API" })
+@SuppressWarnings("unchecked")
+public class EnumsController {
+    @Autowired
+    private EnumsDataFacade enumsDataFacade;
+
+    @ApiOperation(value = "枚举数据获取[by:wangfeng]",
+            notes = "知识库后台管理枚举数据获取")
+    @PostMapping("/getKlmEnumsData")
+    @SysLogger("getKlmEnumsData")
+    public RespDTO<Map<String, List<EnumEntriesBuilder.Entry>>> getEnumsData() {
+        return RespDTO.onSuc(enumsDataFacade.getEnumsData());
+    }
+}

+ 25 - 0
cdssman-service/src/main/java/com/diagbot/web/HospitalInfoController.java

@@ -3,6 +3,7 @@ package com.diagbot.web;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.ConceptMappingDTO;
 import com.diagbot.dto.HospitalInfoDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.DiseaseConfig;
@@ -10,6 +11,7 @@ import com.diagbot.entity.HospitalInfo;
 import com.diagbot.facade.HospitalInfoFacade;
 import com.diagbot.vo.HospitalInfoListVO;
 import com.diagbot.vo.HospitalInfoPageVO;
+import com.diagbot.vo.HospitalSaveVO;
 import com.diagbot.vo.IdListVO;
 import com.diagbot.vo.IdVO;
 import io.swagger.annotations.Api;
@@ -122,4 +124,27 @@ public class HospitalInfoController {
         IPage<DiseaseConfig> data = hospitalInfoFacade.getPage(hospitalInfoPageVO);
         return RespDTO.onSuc(data);
     }
+
+    /**
+     * 获取术语映射统计列表
+     *
+     * @return
+     */
+    @ApiOperation(value = "获取术语映射统计列表[by:zhaops]", notes = "")
+    @PostMapping("/getMappingListPage")
+    @SysLogger("getMappingListPage")
+    public RespDTO<ConceptMappingDTO> getMappingListPage(@RequestBody @Valid HospitalInfoPageVO hospitalInfoPageVO) {
+        List<ConceptMappingDTO> data = hospitalInfoFacade.getMappingListPage(hospitalInfoPageVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "医院信息——修改医院信息[by:zhaops]",
+            notes = "id:医院id<br>" +
+                    "connect:是否对接(0-不对接,1-对接)<br>")
+    @PostMapping("/modifyConnectStatus")
+    @SysLogger("modifyConnectStatus")
+    @Transactional
+    public RespDTO<Boolean> modifyConnectStatus(@RequestBody @Valid HospitalSaveVO hospitalSaveVO) {
+        return RespDTO.onSuc(hospitalInfoFacade.modifyConnectStatus(hospitalSaveVO));
+    }
 }

+ 13 - 0
cdssman-service/src/main/java/com/diagbot/web/LisConfigController.java

@@ -172,4 +172,17 @@ public class LisConfigController {
         IPage<HosRelationNumDTO> data = lisConfigFacade.getRelationNumPage(hosRelationNumPageVO);
         return RespDTO.onSuc(data);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @return
+     */
+    @ApiOperation(value = "数据导入模板导出[by:zhaops]",
+            notes = "")
+    @PostMapping("/exportExcelModule")
+    @SysLogger("exportExcelModule")
+    public void exportExcelModule(HttpServletResponse response) {
+        lisConfigFacade.exportExcelModule(response);
+    }
 }

+ 13 - 0
cdssman-service/src/main/java/com/diagbot/web/OperationConfigController.java

@@ -175,4 +175,17 @@ public class OperationConfigController {
         IPage<HosRelationNumDTO> data = operationConfigFacade.getRelationNumPage(hosRelationNumPageVO);
         return RespDTO.onSuc(data);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @return
+     */
+    @ApiOperation(value = "数据导入模板导出[by:zhaops]",
+            notes = "")
+    @PostMapping("/exportExcelModule")
+    @SysLogger("exportExcelModule")
+    public void exportExcelModule(HttpServletResponse response) {
+        operationConfigFacade.exportExcelModule(response);
+    }
 }

+ 13 - 0
cdssman-service/src/main/java/com/diagbot/web/PacsConfigController.java

@@ -176,4 +176,17 @@ public class PacsConfigController {
         IPage<HosRelationNumDTO> data = pacsConfigFacade.getRelationNumPage(hosRelationNumPageVO);
         return RespDTO.onSuc(data);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @return
+     */
+    @ApiOperation(value = "数据导入模板导出[by:zhaops]",
+            notes = "")
+    @PostMapping("/exportExcelModule")
+    @SysLogger("exportExcelModule")
+    public void exportExcelModule(HttpServletResponse response) {
+        pacsConfigFacade.exportExcelModule(response);
+    }
 }

+ 8 - 0
cdssman-service/src/main/java/com/diagbot/web/PlanController.java

@@ -8,6 +8,7 @@ import com.diagbot.dto.PlanInfoPagesDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.PlanFacade;
 import com.diagbot.vo.HospitalPlanCancelVO;
+import com.diagbot.vo.HospitalPlanIdVO;
 import com.diagbot.vo.HospitalPlanPageVO;
 import com.diagbot.vo.HospitalPlanSaveVO;
 import com.diagbot.vo.HospitalPlanVO;
@@ -92,5 +93,12 @@ public class PlanController {
         PlanInfoDefaultDTO data = planFacade.getPlansDefaults();
         return RespDTO.onSuc(data);
     }
+    @ApiOperation(value = "根据方案id获取配置信息[by:wangfeng]", notes = "id :方案编号  <br> ")
+    @PostMapping("/getPlanInfoIds")
+    @SysLogger("getPlanInfoIds")
+    public RespDTO<List<PlanInfoPagesDTO>> getPlanInfoIds(@Valid @RequestBody HospitalPlanIdVO hospitalPlanIdVO) {
+        List<PlanInfoPagesDTO> data = planFacade.getPlanInfoIds(hospitalPlanIdVO);
+        return RespDTO.onSuc(data);
+    }
 }
 

+ 13 - 0
cdssman-service/src/main/java/com/diagbot/web/TransfusionConfigController.java

@@ -171,4 +171,17 @@ public class TransfusionConfigController {
         IPage<HosRelationNumDTO> data = transfusionConfigFacade.getRelationNumPage(hosRelationNumPageVO);
         return RespDTO.onSuc(data);
     }
+
+    /**
+     * 数据导入模板导出
+     *
+     * @return
+     */
+    @ApiOperation(value = "数据导入模板导出[by:zhaops]",
+            notes = "")
+    @PostMapping("/exportExcelModule")
+    @SysLogger("exportExcelModule")
+    public void exportExcelModule(HttpServletResponse response) {
+        transfusionConfigFacade.exportExcelModule(response);
+    }
 }

+ 12 - 8
cdssman-service/src/main/resources/mapper/ConceptInfoMapper.xml

@@ -24,7 +24,7 @@
         t1.clinicalPathwayName,
         t1.noticeName,
         t1.type,
-        t1.isDeleted,
+        t1.status,
         t1.title,
         t1.gmtModified,
         t2.linkman AS modifier
@@ -36,17 +36,19 @@
         a.clinical_pathway_name AS clinicalPathwayName,
         a.notice_name AS noticeName,
         a.type,
-        b.is_deleted AS isDeleted,
-        GROUP_CONCAT( b.title SEPARATOR '、' ) AS title,
-        b.gmt_modified AS gmtModified,
-        b.modifier
+        a.status,
+        GROUP_CONCAT( b.title order by b.order_no asc SEPARATOR '、' ) AS title,
+        a.gmt_modified AS gmtModified,
+        a.modifier
         FROM
         graph_concept_info a,
         graph_concept_detail b
         WHERE
         a.id = b.concept_id
-        <if test="conceptInfoPageVO.isDeleted!=null and conceptInfoPageVO.isDeleted!=''">
-            AND b.is_deleted = #{conceptInfoPageVO.isDeleted}
+        and a.is_deleted = 'N'
+        and b.is_deleted = 'N'
+        <if test="conceptInfoPageVO.status!=null">
+            AND a.status = #{conceptInfoPageVO.status}
         </if>
         <if test="conceptInfoPageVO.name!=null and conceptInfoPageVO.name!=''">
             AND a.name like concat('%', #{conceptInfoPageVO.name},'%')
@@ -58,7 +60,9 @@
         a.id
         ) t1
         LEFT JOIN sys_user t2 ON t1.modifier = t2.id
-        ORDER BY t1.gmtModified DESC
+        ORDER BY
+        t1.status ASC,
+        t1.gmtModified DESC
     </select>
 
 </mapper>

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

@@ -37,6 +37,7 @@
         <if test="deptConfigPageVO.uniqueCode!=null and deptConfigPageVO.uniqueCode!=''">
             and a.unique_code like concat("%",#{deptConfigPageVO.uniqueCode},"%")
         </if>
+        order by a.gmt_modified desc
     </select>
 
     <!-- 各医院映射关系数列表 -->

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

@@ -33,6 +33,7 @@
         <if test="diseaseConfigPageVO.icdCode!=null and diseaseConfigPageVO.icdCode!=''">
             and a.icd_code like concat("%",#{diseaseConfigPageVO.icdCode},"%")
         </if>
+        order by a.gmt_modified desc
     </select>
 
     <!-- 各医院映射关系数列表 -->

+ 2 - 0
cdssman-service/src/main/resources/mapper/DrugConfigMapper.xml

@@ -14,6 +14,7 @@
         <result column="his_name" property="hisName" />
         <result column="unique_name" property="uniqueName" />
         <result column="unique_code" property="uniqueCode" />
+        <result column="form" property="form" />
     </resultMap>
 
     <!-- 分页查询 -->
@@ -33,6 +34,7 @@
         <if test="drugConfigPageVO.uniqueCode!=null and drugConfigPageVO.uniqueCode!=''">
             and a.unique_code like concat("%",#{drugConfigPageVO.uniqueCode},"%")
         </if>
+        order by a.gmt_modified desc
     </select>
 
     <!-- 各医院映射关系数列表 -->

+ 30 - 0
cdssman-service/src/main/resources/mapper/HospitalInfoMapper.xml

@@ -43,5 +43,35 @@
         <if test="hospitalInfoPageVO.connect!=null">
             and a.connect = #{hospitalInfoPageVO.connect}
         </if>
+        order by a.gmt_create asc
+    </select>
+
+    <!-- 获取术语映射统计列表 -->
+    <select id="getMappingListPage" resultType="com.diagbot.dto.ConceptMappingDTO">
+        SELECT
+        a.`name`,
+        a.id AS hospitalId,
+        a.connect AS connect,
+        b.num AS lisNum,
+        c.num AS deptNum,
+        d.num AS drugNum,
+        e.num AS pacsNum,
+        f.num AS diseaseNum,
+        g.num AS operationNum,
+        h.num AS transfusionNum
+        FROM
+        tran_hospital_info a
+        LEFT JOIN ( SELECT hospital_id, count(*) AS num FROM tran_lis_config WHERE is_deleted = 'N' GROUP BY hospital_id ) b ON a.id = b.hospital_id
+        LEFT JOIN ( SELECT hospital_id, count(*) AS num FROM tran_dept_config WHERE is_deleted = 'N' GROUP BY hospital_id ) c ON a.id = c.hospital_id
+        LEFT JOIN ( SELECT hospital_id, count(*) AS num FROM tran_drug_config WHERE is_deleted = 'N' GROUP BY hospital_id ) d ON a.id = d.hospital_id
+        LEFT JOIN ( SELECT hospital_id, count(*) AS num FROM tran_pacs_config WHERE is_deleted = 'N' GROUP BY hospital_id ) e ON a.id = e.hospital_id
+        LEFT JOIN ( SELECT hospital_id, count(*) AS num FROM tran_disease_config WHERE is_deleted = 'N' GROUP BY hospital_id ) f ON a.id = f.hospital_id
+        LEFT JOIN ( SELECT hospital_id, count(*) AS num FROM tran_operation_config WHERE is_deleted = 'N' GROUP BY hospital_id ) g ON a.id = g.hospital_id
+        LEFT JOIN ( SELECT hospital_id, count(*) AS num FROM tran_transfusion_config WHERE is_deleted = 'N' GROUP BY hospital_id ) h ON a.id = h.hospital_id
+        WHERE
+        a.is_deleted = 'N'
+        <if test="hospitalInfoPageVO.name!=null and hospitalInfoPageVO.name!=''">
+            AND a.name Like concat("%",#{hospitalInfoPageVO.name},"%")
+        </if>
     </select>
 </mapper>

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

@@ -37,6 +37,7 @@
         <if test="lisConfigPageVO.uniqueCode!=null and lisConfigPageVO.uniqueCode!=''">
             and a.unique_code like concat("%",#{lisConfigPageVO.uniqueCode},"%")
         </if>
+        order by a.gmt_modified desc
     </select>
 
     <!-- 各医院映射关系数列表 -->

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

@@ -33,6 +33,7 @@
         <if test="operationConfigPageVO.uniqueCode!=null and operationConfigPageVO.uniqueCode!=''">
             and a.unique_code like concat("%",#{operationConfigPageVO.uniqueCode},"%")
         </if>
+        order by a.gmt_modified desc
     </select>
 
     <!-- 各医院映射关系数列表 -->

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

@@ -33,6 +33,7 @@
         <if test="pacsConfigPageVO.uniqueCode!=null and pacsConfigPageVO.uniqueCode!=''">
             and a.unique_code like concat("%",#{pacsConfigPageVO.uniqueCode},"%")
         </if>
+        order by a.gmt_modified desc
     </select>
 
     <!-- 各医院映射关系数列表 -->

+ 22 - 11
cdssman-service/src/main/resources/mapper/PlanMapper.xml

@@ -18,18 +18,28 @@
     </resultMap>
     <select id="getPlanInfoPageAll" resultType="com.diagbot.dto.PlanInfoPagesDTO">
         SELECT
-        id as id,
-        hospital_id as hospitalId,
-        plan_name as planName,
-        plan_code as planCode,
-        plan_status as planStatus
-        FROM tran_plan u
-        WHERE u.is_deleted = 'N'
-        and hospital_id != -1
+        u.id AS id,
+        u.hospital_id AS hospitalId,
+        u.plan_name AS planName,
+        u.plan_code AS planCode,
+        u.plan_status AS planStatus,
+        u.gmt_create AS gmtCreate,
+        GROUP_CONCAT(
+        pd.NAME
+        ORDER BY
+        pd.order_no ASC
+        ) AS planDetail
+        FROM
+        tran_plan u
+        LEFT JOIN tran_plan_detail pd ON pd.plan_id = u.id AND pd.status = 1 AND pd.is_deleted = 'N'
+        AND pd.parent_id = -1
+        WHERE
+        u.is_deleted = 'N'
         <if test="hospitalId !=null">
-          and hospital_id =#{hospitalId}
+            and u.hospital_id =#{hospitalId}
         </if>
-        <if test="planName != null and planName =''">
+
+        <if test="planName != null and planName!=''">
             AND UPPER(u.plan_name) LIKE CONCAT('%', UPPER(trim(#{planName})), '%')
         </if>
         <if test="planCode != null and planCode != ''">
@@ -38,6 +48,7 @@
         <if test="planStatus != null">
             AND u.plan_status = #{planStatus}
         </if>
-        ORDER BY gmt_create DESC
+        GROUP BY u.id
+        ORDER BY planStatus DESC , gmtCreate DESC
     </select>
 </mapper>

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

@@ -33,6 +33,7 @@
         <if test="transfusionConfigPageVO.uniqueCode!=null and transfusionConfigPageVO.uniqueCode!=''">
             and a.unique_code like concat("%",#{transfusionConfigPageVO.uniqueCode},"%")
         </if>
+        order by a.gmt_modified desc
     </select>
 
     <!-- 各医院映射关系数列表 -->

+ 23 - 2
common/src/main/java/com/diagbot/util/Cn2SpellUtil.java

@@ -39,17 +39,37 @@ public class Cn2SpellUtil {
         return pinyinName;
     }
 
+    /**
+     * 汉字转换位汉语拼音,英文字符不变(大写)
+     *
+     * @param chines 汉字
+     * @return 拼音(大写)
+     */
+    public static String converterToSpell(String chines) {
+        return converterToSpellByCaseType(chines, HanyuPinyinCaseType.UPPERCASE);
+    }
+
+    /**
+     * 汉字转换位汉语拼音,英文字符不变(小写)
+     *
+     * @param chines 汉字
+     * @return 拼音(小写)
+     */
+    public static String converterToSpellLow(String chines) {
+        return converterToSpellByCaseType(chines, HanyuPinyinCaseType.LOWERCASE);
+    }
+
     /**
      * 汉字转换位汉语拼音,英文字符不变
      *
      * @param chines 汉字
      * @return 拼音
      */
-    public static String converterToSpell(String chines) {
+    private static String converterToSpellByCaseType(String chines, HanyuPinyinCaseType caseType) {
         String pinyinName = "";
         char[] nameChar = chines.toCharArray();
         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
-        defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
+        defaultFormat.setCaseType(caseType);
         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
         for (int i = 0; i < nameChar.length; i++) {
             if (nameChar[i] > 128) {
@@ -68,5 +88,6 @@ public class Cn2SpellUtil {
     public static void main(String[] args) {
         System.out.println(converterToFirstSpell("欢迎来到Java世界"));
         System.out.println(converterToSpell("欢迎来到Java世界"));
+        System.out.println(converterToSpellLow("欢迎来到Java世界"));
     }
 }

+ 3 - 0
config-server/src/main/resources/shared/cdssman-service-dev.yml

@@ -81,6 +81,9 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     cache-enabled: false
 
+#远程调用验证标准词接口时间加长
+hystrix.command.CdssCoreClient#getConceptNames(ConceptVO).execution.isolation.thread.timeoutInMilliseconds: 3600000
+
 imageUrl:
   prefix: http://192.168.2.236:82
 

+ 3 - 0
config-server/src/main/resources/shared/cdssman-service-local.yml

@@ -81,6 +81,9 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     cache-enabled: false
 
+#远程调用验证标准词接口时间加长
+hystrix.command.CdssCoreClient#getConceptNames(ConceptVO).execution.isolation.thread.timeoutInMilliseconds: 3600000
+
 imageUrl:
   prefix: http://192.168.2.236:82
 

+ 3 - 0
config-server/src/main/resources/shared/cdssman-service-pre.yml

@@ -81,6 +81,9 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     cache-enabled: false
 
+#远程调用验证标准词接口时间加长
+hystrix.command.CdssCoreClient#getConceptNames(ConceptVO).execution.isolation.thread.timeoutInMilliseconds: 3600000
+
 imageUrl:
   prefix: http://192.168.2.121:82
 

+ 3 - 0
config-server/src/main/resources/shared/cdssman-service-pro.yml

@@ -81,6 +81,9 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     cache-enabled: false
 
+#远程调用验证标准词接口时间加长
+hystrix.command.CdssCoreClient#getConceptNames(ConceptVO).execution.isolation.thread.timeoutInMilliseconds: 3600000
+
 imageUrl:
   prefix: http://192.168.2.122:82
 

+ 7 - 0
config-server/src/main/resources/shared/cdssman-service-test.yml

@@ -81,5 +81,12 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     cache-enabled: false
 
+#远程调用验证标准词接口时间加长
+hystrix.command.CdssCoreClient#getConceptNames(ConceptVO).execution.isolation.thread.timeoutInMilliseconds: 3600000
+
 imageUrl:
   prefix: http://192.168.2.241:82
+
+#CDSS核心地址
+cdss-core:
+  url: http://192.168.2.241:7010

File diff suppressed because it is too large
+ 35 - 0
docs/040.20201016CDSS朗通云平台相关脚本/user_init.sql