Przeglądaj źródła

Merge branch 'develop' into innerDevelop

zhoutg 3 lat temu
rodzic
commit
3482e44d0f

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

@@ -26,4 +26,5 @@ public class ConceptMappingDTO {
     private Integer tcmdiseaseNum = 0;
     private Integer tcmsyndromeNum = 0;
     private Integer anesthesiaNum = 0;
+    private Integer administrationRouteNum = 0;
 }

+ 45 - 0
cdssman-service/src/main/java/com/diagbot/entity/AdministrationRouteConfig.java

@@ -0,0 +1,45 @@
+package com.diagbot.entity;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/10/26 13:39
+ */
+@Data
+public class AdministrationRouteConfig {
+    /**
+     * 医院id
+     */
+    private Long hospitalId;
+
+    /**
+     * 医院科室名称
+     */
+    @Excel(name = "医院给药途径名称", width = 40, orderNum = "1", isImportField = "true")
+    @NotBlank(message = "请输入医院给药途径名称")
+    private String hisName;
+
+    /**
+     * 标准科室名称
+     */
+    @Excel(name = "标准给药途径名称", width = 40, orderNum = "2", isImportField = "true")
+    @NotBlank(message = "请输入标准给药途径名称")
+    private String uniqueName;
+
+    /**
+     * 是否匹配(0-未匹配、1-已匹配)
+     */
+    @Excel(name = "是否匹配【未匹配、已匹配】", width = 20, orderNum = "4", replace = { "未匹配_0", "已匹配_1", "_null" }, isImportField = "true")
+    private Integer isMatch;
+
+    /**
+     * 数据来源(1-标准词、2-同义词、3-编码、4-历史数据、5-相似词、99-数据迁移)
+     */
+    @Excel(name = "数据来源【不填、标准词、同义词、编码、历史数据、相似词】", width = 20, orderNum = "5", replace = { "标准词_1", "同义词_2", "编码_3", "历史数据_4", "相似词_5", "数据迁移_99", "_null" }, isImportField = "true")
+    private Integer source;
+}

+ 4 - 6
cdssman-service/src/main/java/com/diagbot/entity/AnesthesiaConfig.java

@@ -1,8 +1,7 @@
 package com.diagbot.entity;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
 
@@ -11,8 +10,7 @@ import javax.validation.constraints.NotBlank;
  * @Author:zhaops
  * @time: 2021/6/10 19:16
  */
-@Getter
-@Setter
+@Data
 public class AnesthesiaConfig {
     /**
      * 医院id
@@ -36,12 +34,12 @@ public class AnesthesiaConfig {
     /**
      * 是否匹配(0-未匹配、1-已匹配)
      */
-    @Excel(name = "是否匹配", width = 20, orderNum = "4", replace = { "未匹配_0", "已匹配_1", "_null"}, isImportField = "true")
+    @Excel(name = "是否匹配【未匹配、已匹配】", width = 20, orderNum = "4", replace = { "未匹配_0", "已匹配_1", "_null" }, isImportField = "true")
     private Integer isMatch;
 
     /**
      * 数据来源(1-标准词、2-同义词、3-编码、4-历史数据、5-相似词、99-数据迁移)
      */
-    @Excel(name = "数据来源", width = 20, orderNum = "5", replace = { "标准词_1", "同义词_2", "编码_3", "历史数据_4", "相似词_5", "数据迁移_99", "_null" }, isImportField = "true")
+    @Excel(name = "数据来源【不填、标准词、同义词、编码、历史数据、相似词】", width = 20, orderNum = "5", replace = { "标准词_1", "同义词_2", "编码_3", "历史数据_4", "相似词_5", "数据迁移_99", "_null" }, isImportField = "true")
     private Integer source;
 }

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

@@ -64,7 +64,7 @@ public class MappingConfig implements Serializable {
     private Long hospitalId;
 
     /**
-     * 医学术语类型( 1-检验套餐、2-检验细项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医疾病、13-中医证候、14-麻醉)
+     * 医学术语类型( 1-检验套餐、2-检验细项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医疾病、13-中医证候、14-麻醉、16-给药途径
      */
     private Integer type;
 

+ 23 - 0
cdssman-service/src/main/java/com/diagbot/entity/wrapper/AdministrationRouteConfigWrapper.java

@@ -0,0 +1,23 @@
+package com.diagbot.entity.wrapper;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.diagbot.entity.AdministrationRouteConfig;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2021/10/26 13:41
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AdministrationRouteConfigWrapper extends AdministrationRouteConfig {
+    /**
+     * 医院诊断名称
+     */
+    @Excel(name = "标准术语状态", width = 40, replace = { "禁用_0", "启用_1", "_null" }, orderNum = "99")
+    private Integer status;
+}

+ 6 - 3
cdssman-service/src/main/java/com/diagbot/enums/LexiconEnum.java

@@ -40,6 +40,9 @@ public enum LexiconEnum implements KeyedNamed {
     Tcmdisease(127, "中医疾病"),
     Tcmsyndrome(128, "中医证候"),
     Inducement(129, "诱因"),
+    Law(130, "政策法规"),
+    not(131, "否定词"),
+    Physicotherapy(132, "物理治疗"),
     ICD10Class(300,"ICD10疾病类别"),
     MedChemClass(301,"药品化学物质类别"),
     MedZhiLiaoClass(302,"药品治疗学类别"),
@@ -69,6 +72,7 @@ public enum LexiconEnum implements KeyedNamed {
     TcmdiseaseCollection(326,"中医疾病集合"),
     TcmsyndromeCollection(327,"中医证候集合"),
     InducementCollection(328,"诱因集合"),
+    DugrouteCollection(329,"给药途径集合"),
     ICD10ClassNode(400,"ICD10疾病类别根节点"),
     DeptDiseaseNode(401,"科室疾病类别根节点"),
     MedChemClassNode(402,"药品化学物质类别根节点"),
@@ -79,8 +83,7 @@ public enum LexiconEnum implements KeyedNamed {
     OperationClassNode(407,"手术和操作类别根节点"),
     LisClassNode(408,"实验室检查类别根节点"),
     PacsClassNode(409,"辅助检查类别根节点"),
-    Age(410,"年龄"),
-    Law(130,"政策法规");
+    Age(410,"年龄");
 
 
     @Setter
@@ -126,4 +129,4 @@ public enum LexiconEnum implements KeyedNamed {
     public String getName() {
         return name;
     }
-}
+}

+ 12 - 0
cdssman-service/src/main/java/com/diagbot/facade/MappingConfigFacade.java

@@ -8,6 +8,7 @@ import com.diagbot.client.CdssCoreClient;
 import com.diagbot.dto.DictionaryInfoDTO;
 import com.diagbot.dto.IndexBatchDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.AdministrationRouteConfig;
 import com.diagbot.entity.AnesthesiaConfig;
 import com.diagbot.entity.DeptConfig;
 import com.diagbot.entity.DiseaseConfig;
@@ -21,6 +22,7 @@ import com.diagbot.entity.ScaleConfig;
 import com.diagbot.entity.TcmdiseaseConfig;
 import com.diagbot.entity.TcmsyndromeConfig;
 import com.diagbot.entity.TransfusionConfig;
+import com.diagbot.entity.wrapper.AdministrationRouteConfigWrapper;
 import com.diagbot.entity.wrapper.AnesthesiaConfigWrapper;
 import com.diagbot.entity.wrapper.DeptConfigWrapper;
 import com.diagbot.entity.wrapper.DiseaseConfigWrapper;
@@ -209,6 +211,16 @@ public class MappingConfigFacade extends MappingConfigServiceImpl {
                     ExcelUtils.exportExcel(anesthesiaConfigList, null, "sheet1", AnesthesiaConfigWrapper.class, fileName, response, 12.8f);
                 }
                 break;
+            case 16:
+                fileName = "给药途径" + fileName;
+                if (mode.equals(1)) {
+                    List<AdministrationRouteConfig> administrationRouteConfigList = BeanUtil.listCopyTo(list, AdministrationRouteConfig.class);
+                    ExcelUtils.exportExcel(administrationRouteConfigList, null, "sheet1", AdministrationRouteConfig.class, fileName, response, 12.8f);
+                } else if (mode.equals(2)) {
+                    List<AdministrationRouteConfigWrapper> administrationRouteConfigList = BeanUtil.listCopyTo(list, AdministrationRouteConfigWrapper.class);
+                    ExcelUtils.exportExcel(administrationRouteConfigList, null, "sheet1", AdministrationRouteConfigWrapper.class, fileName, response, 12.8f);
+                }
+                break;
             default:
                 break;
         }

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

@@ -22,9 +22,9 @@ public class MappingConfigPageVO extends Page {
     @ApiModelProperty(hidden = true)
     private Long hospitalId;
     /**
-     * 医学术语类型( 1-检验套餐、2-检验细项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医疾病、13-中医证候、14-麻醉)
+     * 医学术语类型( 1-检验套餐、2-检验细项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医疾病、13-中医证候、14-麻醉、16-给药途径
      */
-    @NotNull(message = "请输入术语类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉")
+    @NotNull(message = "请输入术语类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径")
     private Integer type;
 
     /**

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

@@ -14,7 +14,7 @@ import javax.validation.constraints.NotNull;
 @Setter
 public class MappingConfigVO {
     private Long hospitalId;
-    @NotNull(message = "请输入术语类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉")
+    @NotNull(message = "请输入术语类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径")
     private Integer type;
     private String hisName;
     private String hisDetailName;

+ 14 - 9
cdssman-service/src/main/java/com/diagbot/vo/RetrievalVO.java

@@ -12,19 +12,24 @@ import lombok.Setter;
 @Setter
 public class RetrievalVO {
     /**
-     * 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作
+     * 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、9-症状、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、15-药品剂型、16-给药途径
      */
     private Integer type;
     /**
      * 检索内容
      */
     private String inputStr;
-//    /**
-//     * 性别:1-男、2-女、3-通用
-//     */
-//    private Integer sex;
-//    /**
-//     * 年龄
-//     */
-//    private Integer age;
+    //    /**
+    //     * 性别:1-男、2-女、3-通用
+    //     */
+    //    private Integer sex;
+    //    /**
+    //     * 年龄
+    //     */
+    //    private Integer age;
+
+    /**
+     * 默认展示 0:不展示,1:展示全部
+     */
+    private Integer defaultList = 0;
 }

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

@@ -15,7 +15,7 @@ import javax.validation.constraints.NotNull;
 @Getter
 public class TermMatchingVO {
     /**
-     * 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、9-症状
+     * 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、9-症状、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、15-药品剂型、16-给药途径
      */
     @NotNull(message = "请输入检索类型")
     private Integer type;

+ 10 - 10
cdssman-service/src/main/java/com/diagbot/web/MappingConfigController.java

@@ -43,7 +43,7 @@ public class MappingConfigController {
 
 
     @ApiOperation(value = "数据导入模板导出[by:zhaops]",
-            notes = "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉 <br>")
+            notes = "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径 <br>")
     @PostMapping("/exportExcelModule")
     @SysLogger("exportExcelModule")
     public void exportExcelModule(HttpServletResponse response, @RequestBody @Valid MappingConfigVO mappingConfigVO) {
@@ -52,7 +52,7 @@ public class MappingConfigController {
 
     @ApiOperation(value = "预匹配导入术语校验[by:zhaops]",
             notes = "file(必填):预匹配文件 <br>" +
-                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉 <br>")
+                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径 <br>")
     @PostMapping(value = "/dataVerify", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     @SysLogger("dataVerify")
     public RespDTO<Boolean> dataVerify(@RequestParam("file") MultipartFile file,
@@ -63,7 +63,7 @@ public class MappingConfigController {
 
     @ApiOperation(value = "预匹配[by:zhaops]",
             notes = "file(必填):预匹配文件 <br>" +
-                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉 <br>")
+                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径 <br>")
     @PostMapping(value = "/precDataMatch", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     @SysLogger("precDataMatch")
     public void precDataMatch(@RequestParam("file") MultipartFile file,
@@ -76,7 +76,7 @@ public class MappingConfigController {
             notes = "file(必填):导入文件 <br>" +
                     "hospitalId(必填):医院id <br>" +
                     "uesrId(必填):操作人id <br>" +
-                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉 <br>")
+                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径 <br>")
     @PostMapping(value = "/importExcelDataVerify", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     @SysLogger("importExcelDataVerify")
     public RespDTO<Boolean> importExcelDataVerify(@RequestParam("file") MultipartFile file,
@@ -91,7 +91,7 @@ public class MappingConfigController {
             notes = "file(必填):导入文件 <br>" +
                     "hospitalId(必填):医院id <br>" +
                     "uesrId(必填):操作人id <br>" +
-                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉 <br>")
+                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径 <br>")
     @PostMapping(value = "/importExcel", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     @SysLogger("importExcel")
     @Transactional
@@ -106,7 +106,7 @@ public class MappingConfigController {
     @ApiOperation(value = "数据导出[by:zhaops]",
             notes = "hospitalId(必填):医院id <br>" +
                     "isMatch(选填,默认全部):是否匹配(0-未匹配、1-已匹配、2-多条匹配) <br>" +
-                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉 <br>")
+                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径 <br>")
     @PostMapping("/exportExcel")
     @SysLogger("exportExcel")
     public void exportExcel(HttpServletResponse response, @RequestBody @Valid MappingConfigPageVO mappingConfigPageVO) {
@@ -118,7 +118,7 @@ public class MappingConfigController {
                     "isMatch(选填,默认全部):是否匹配(0-未匹配、1-已匹配、2-多条匹配) <br>" +
                     "hisName(选填,模糊匹配):医院术语名称 <br>" +
                     "uniqueName(选填,模糊匹配):标准术语名称 <br>" +
-                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉 <br>")
+                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径 <br>")
     @PostMapping("/getPage")
     @SysLogger("getPage")
     public RespDTO<Page<MappingConfigWrapper>> getPage(@RequestBody @Valid MappingConfigPageVO mappingConfigPageVO) {
@@ -147,7 +147,7 @@ public class MappingConfigController {
                     "conceptId(必填):标准术语id <br>" +
                     "formConceptId(选填):药品剂型id,选填 <br>" +
                     "source(必填):数据来源:1-标准词、2-同义词、3-编码、4-历史数据、5-相似词 <br>" +
-                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉 <br>")
+                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径 <br>")
     @PostMapping("/isExistRecord")
     @SysLogger("isExistRecord")
     public RespDTO<Boolean> isExistRecord(@RequestBody @Valid MappingConfig mappingConfig) {
@@ -159,7 +159,7 @@ public class MappingConfigController {
             notes = "hospitalId(必填):医院id <br>" +
                     "hisName(必填):医院术语名称 <br>" +
                     "hisDetailName(选填,可为空):医院术语名称-细项 <br>" +
-                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉 <br>")
+                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径 <br>")
     @PostMapping("/getRelatedMapping")
     @SysLogger("getRelatedMapping")
     public RespDTO<List<MappingConfigWrapper>> getRelatedMapping(@RequestBody @Valid MappingConfigVO mappingConfigVO) {
@@ -176,7 +176,7 @@ public class MappingConfigController {
                     "conceptId(必填):标准术语id <br>" +
                     "formConceptId(选填,可为空):药品剂型id,选填 <br>" +
                     "source(必填):数据来源:1-标准词、2-同义词、3-编码、4-历史数据、5-相似词 <br>" +
-                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉 <br>")
+                    "type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径 <br>")
     @PostMapping("/saveOrUpdateRecord")
     @SysLogger("saveOrUpdateRecord")
     @Transactional

+ 2 - 1
cdssman-service/src/main/java/com/diagbot/web/RetrievalController.java

@@ -28,8 +28,9 @@ public class RetrievalController {
     private RetrievalFacade retrievalFacade;
 
     @ApiOperation(value = "术语检索[zhaops]",
-            notes = "type: 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理 <br>" +
+            notes = "type: 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、9-症状、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、15-药品剂型、16-给药途径 <br>" +
                     "inputStr: 检索内容<br>" +
+                    "defaultList: 默认展示 0:不展示,1:展示全部<br>" +
                     "sex: 性别:1-男、2-女、3-通用 <br>" +
                     "age: 年龄<br>")
     @PostMapping("/index")

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

@@ -29,7 +29,7 @@ public class TermMatchingController {
     TermMatchingFacade termMatchingFacade;
 
     @ApiOperation(value = "术语匹配搜索[wangfeng]",
-            notes = "type: 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、9-症状、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉 <br>" +
+            notes = "type: 类型:1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、9-症状、10-量表、11-护理、12-中医诊断、13-中医证候、14-麻醉、16-给药途径 <br>" +
                     "inputStr: 检索内容<br>")
     @PostMapping("/termMatching")
     public RespDTO<List<TermConceptDTO>> getTermMatching(@Valid @RequestBody TermMatchingVO termMatchingVO) {

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

@@ -69,7 +69,8 @@
         sum( IF ( type = 11, num, 0 ) ) AS nurseNum,
         sum( IF ( type = 12, num, 0 ) ) AS tcmdiseaseNum,
         sum( IF ( type = 13, num, 0 ) ) AS tcmsyndromeNum,
-        sum( IF ( type = 14, num, 0 ) ) AS anesthesiaNum
+        sum( IF ( type = 14, num, 0 ) ) AS anesthesiaNum,
+        sum( IF ( type = 16, num, 0 ) ) AS administrationRouteNum
         FROM
         ( SELECT hospital_id, type, count(*) AS num FROM tran_mapping_config WHERE is_deleted = 'N' GROUP BY hospital_id, type ) t1
         GROUP BY

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

@@ -231,7 +231,7 @@
             AND  a.lib_type = #{conceptCollectionPageVO.collectionLibType}
         </if>
         <if test="conceptCollectionPageVO.collectionLibType==null">
-            AND  a.lib_type between 308 and 328
+            AND  a.lib_type between 308 and 329
         </if>
         <if test="conceptCollectionPageVO.collectionLibName != null and conceptCollectionPageVO.collectionLibName != ''">
             AND a.lib_name LIKE concat('%',#{conceptCollectionPageVO.collectionLibName},'%')

+ 154 - 27
common/src/main/java/com/diagbot/util/AgeUtil.java

@@ -9,6 +9,9 @@ import java.math.BigDecimal;
  */
 public class AgeUtil {
 
+    // 数字正则,支持20;20.3;20.;.8
+    public static final String NUMBER_REGEX = "([0-9]+|([0-9]+\\.)[0-9]*|[0-9]*(\\.[0-9]+))";
+
     /**
      * 年龄字符串转换成double类型
      *
@@ -17,44 +20,109 @@ public class AgeUtil {
      */
     public static Double convertAge(String ageStr) {
         try {
+            String year = "", month = "", day = "";
             // 防止程序出错
             if (StringUtil.isEmpty(ageStr)) {
-                return 20.0;
+                return 1.0;
             }
             // 数值,当成年龄处理
             if (isNumbers(ageStr)) {
                 return Double.parseDouble(ageStr);
             }
-            // 20日 | 20天
-            if (ageStr.endsWith("日") || ageStr.endsWith("天")) {
-                return getHalfUp((Double.parseDouble(ageStr.substring(0, ageStr.length() - 1))) / 365);
+            // X日|天
+            if (ageDay(ageStr)) {
+                return getConvertDouble(ageStr, 1, 365);
+            }
+            // X±日、X±天、X日±、X天±
+            if (ageSymbolDay(ageStr)) {
+                return getConvertDouble(ageStr, 2, 365);
             }
-            // 3岁
-            if (ageStr.endsWith("岁")) {
+            // X
+            if (ageYear(ageStr)) {
                 return Double.parseDouble(ageStr.substring(0, ageStr.length() - 1));
             }
             // 3岁7个月 | 3岁7月
-            if (ageSuiYue(ageStr)) {
-                String[] ageArr = new String[2];
-                int indexSui = ageStr.indexOf("岁");
-                ageArr[0] = ageStr.substring(0, indexSui);
-                if (ageStr.indexOf("个月") > -1) { // 3岁7个月
-                    ageArr[1] = ageStr.substring(indexSui + 1, ageStr.indexOf("个月"));
+            if (ageYearMonth(ageStr)) {
+                int indexYear = ageStr.indexOf("岁");
+                year = ageStr.substring(0, indexYear);
+                if (ageStr.endsWith("个月")) { // 3岁7个月
+                    month = ageStr.substring(indexYear + 1, ageStr.indexOf("个月"));
                 } else { // 3岁7月
-                    ageArr[1] = ageStr.substring(indexSui + 1, ageStr.indexOf("月"));
+                    month = ageStr.substring(indexYear + 1, ageStr.indexOf("月"));
+                }
+                return Double.parseDouble(year) + getHalfUp(Double.parseDouble(month) / 12);
+            }
+            // X月|X个月
+            if (ageMonth(ageStr)) {
+                if (ageStr.endsWith("个月")) {
+                    return getConvertDouble(ageStr, 2, 12);
+                } else {
+                    return getConvertDouble(ageStr, 1, 12);
+                }
+            }
+            // X月Y天|X个月Y天
+            if (ageMonthDay(ageStr)) {
+                if (ageStr.contains("个月")) {
+                    month = ageStr.substring(0, ageStr.indexOf("个月"));
+                    day = ageStr.substring(ageStr.indexOf("个月") + 2, ageStr.indexOf("天"));
+                } else {
+                    month = ageStr.substring(0, ageStr.indexOf("月"));
+                    day = ageStr.substring(ageStr.indexOf("月") + 1, ageStr.indexOf("天"));
+                }
+                return getHalfUp((Double.parseDouble(month) +  (Double.parseDouble(day) / 30))/ (12));
+            }
+            // X小时|时
+            if (ageHour(ageStr)) {
+                if (ageStr.endsWith("小时")) {
+                    return getConvertDouble(ageStr, 2, 365 * 24);
+                } else if (ageStr.endsWith("时")) {
+                    return getConvertDouble(ageStr, 1, 365 * 24);
                 }
-                return Double.parseDouble(ageArr[0]) + getHalfUp(Double.parseDouble(ageArr[1]) / 12);
             }
-            // 1.08月 | .11月 | 3月
-            if (ageYue(ageStr)) {
-                String noUnit = ageStr.substring(0, ageStr.length() - 1);
-                return getHalfUp(Double.parseDouble(noUnit) / 12);
+            // 特殊值处理
+            switch (ageStr) {
+                case "一岁":
+                    return 1.0;
+                case "二岁":
+                    return 2.0;
+                case "三岁":
+                    return 3.0;
+                case "四岁":
+                    return 4.0;
+                case "五岁":
+                    return 5.0;
+                case "六岁":
+                    return 6.0;
+                case "七岁":
+                    return 7.0;
+                case "八岁":
+                    return 8.0;
+                case "九岁":
+                    return 9.0;
+                case "十岁":
+                    return 10.0;
+                case "半时":
+                    return getHalfUp(0.5D / (365 * 24));
+                default:
+                    break;
             }
         } catch (Exception e) {
             e.printStackTrace();
-            return 20.0;
+            return 1.0;
         }
-        return 20.0;
+        return 1.0;
+    }
+
+    /**
+     * 获取转换后的数值
+     *
+     * @param ageStr      年龄字符串
+     * @param len         字符串长度
+     * @param denominator 分母
+     * @return
+     */
+    public static Double getConvertDouble(String ageStr, int len, int denominator) {
+        return getHalfUp(Double.parseDouble(ageStr.substring(0, ageStr.length() - len)) / denominator);
     }
 
     /**
@@ -75,18 +143,72 @@ public class AgeUtil {
      * @return
      */
     public static boolean isNumbers(String str) {
-        String regex = "[0-9]+|([0-9]+\\.)+[0-9]*|[0-9]*(\\.[0-9]+)+";
+        return str.matches(NUMBER_REGEX);
+    }
+
+    /**
+     * 判断年龄字符串:X月|X个月
+     *
+     * @param str
+     * @return
+     */
+    public static boolean ageMonth(String str) {
+        String regex = NUMBER_REGEX + "(个)?月";
         return str.matches(regex);
     }
 
     /**
-     * 判断年龄字符串:xx月
+     * 判断年龄字符串:X月Y天|X个月Y天
      *
      * @param str
      * @return
      */
-    public static boolean ageYue(String str) {
-        String regex = "^[0-9]*[\\.]*[0-9]{1,2}月$";
+    public static boolean ageMonthDay(String str) {
+        String regex = NUMBER_REGEX + "(个)?月" + NUMBER_REGEX + "天";
+        return str.matches(regex);
+    }
+
+    /**
+     * 判断年龄字符串:X天|X日
+     *
+     * @param str
+     * @return
+     */
+    public static boolean ageDay(String str) {
+        String regex = NUMBER_REGEX + "[天日]";
+        return str.matches(regex);
+    }
+
+    /**
+     * 判断年龄字符串:X±日、X±天、X日±、X天±
+     *
+     * @param str
+     * @return
+     */
+    public static boolean ageSymbolDay(String str) {
+        String regex = NUMBER_REGEX + "[+-][天日]" + "|" +  NUMBER_REGEX + "[天日][+-]";
+        return str.matches(regex);
+    }
+
+    /**
+     * 判断年龄字符串:X岁
+     *
+     * @param str
+     * @return
+     */
+    public static boolean ageYear(String str) {
+        String regex = NUMBER_REGEX + "岁";
+        return str.matches(regex);
+    }
+
+    /**
+     * 判断年龄字符串:X小时|时
+     *
+     * @param str
+     * @return
+     */
+    public static boolean ageHour(String str) {
+        String regex = NUMBER_REGEX + "(小)?时";
         return str.matches(regex);
     }
 
@@ -96,8 +218,8 @@ public class AgeUtil {
      * @param str
      * @return
      */
-    public static boolean ageSuiYue(String str) {
-        String regex = "^[0-9]{1,3}岁[0-9]{1,2}个{0,1}月$";
+    public static boolean ageYearMonth(String str) {
+        String regex = "[0-9]{1,3}岁[0-9]{1,2}个{0,1}月";
         return str.matches(regex);
     }
 
@@ -109,6 +231,11 @@ public class AgeUtil {
      */
     public static Double getHalfUp(Double ageStr) {
         BigDecimal bg = new BigDecimal(String.valueOf(ageStr));
-        return bg.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+        return bg.setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+
+    public static void main(String[] args) {
+        String s = "天+";
+        System.out.println(convertAge(s));
     }
 }