Explorar o código

Merge remote-tracking branch 'origin/his/csxy3' into his/csxy3

# Conflicts:
#	src/main/java/com/diagbot/facade/DataPageDockFacade.java
#	src/main/java/com/diagbot/util/TZDBConn.java
shiyue %!s(int64=3) %!d(string=hai) anos
pai
achega
12632824ca

+ 31 - 29
doc/002.20210629术语关联改版/cdss_init.sql

@@ -33,32 +33,34 @@ SET FOREIGN_KEY_CHECKS = 0;
 -- ----------------------------
 -- Table structure for tran_mapping_config
 -- ----------------------------
-DROP TABLE IF EXISTS `tran_mapping_config`;
-CREATE TABLE `tran_mapping_config`  (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
-  `is_deleted` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
-  `gmt_create` datetime(0) NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
-  `gmt_modified` datetime(0) NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
-  `creator` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
-  `modifier` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
-  `hospital_id` bigint(20) NOT NULL COMMENT '医院id',
-  `type` int(4) NOT NULL COMMENT '医学术语类型( 1-检验套餐、2-检验细项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医疾病、13-中医证候、14-麻醉)',
-  `his_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '医院术语名称',
-  `his_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '医院术语编码',
-  `his_detail_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '医院术语细项名称(检验细项)',
-  `concept_id` bigint(20) NULL DEFAULT NULL COMMENT '医学标准术语id',
-  `form_concept_id` bigint(20) NULL DEFAULT NULL COMMENT '药品剂型id',
-  `is_match` int(4) NOT NULL DEFAULT 0 COMMENT '是否匹配(0-未匹配、1-已匹配)',
-  `source` int(4) NULL DEFAULT NULL COMMENT '数据来源(1-标准词、2-同义词、3-编码、4-历史数据、5-相似词、99-数据迁移)',
-  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
-  PRIMARY KEY (`id`) USING BTREE,
-  INDEX `idx_his_detail_name`(`hospital_id`, `type`, `his_name`, `his_detail_name`) USING BTREE,
-  INDEX `idx_his_name`(`hospital_id`, `type`, `his_name`) USING BTREE,
-  INDEX `idx_concept_id`(`hospital_id`, `concept_id`) USING BTREE,
-  INDEX `idx_hospital_id`(`hospital_id`) USING BTREE,
-  INDEX `idx_detail_name`(`his_name`, `his_detail_name`) USING BTREE,
-  INDEX `idx_deleted_type`(`type`) USING BTREE,
-  INDEX `idx_type`(`hospital_id`, `type`, `is_deleted`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 797881 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '医学术语映射表' ROW_FORMAT = Dynamic;
-
-SET FOREIGN_KEY_CHECKS = 1;
+-- 已执行脚本
+-- DROP TABLE IF EXISTS `tran_mapping_config`;
+-- CREATE TABLE `tran_mapping_config`  (
+--   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+--   `is_deleted` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+--   `gmt_create` datetime(0) NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+--   `gmt_modified` datetime(0) NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+--   `creator` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+--   `modifier` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+--   `hospital_id` bigint(20) NOT NULL COMMENT '医院id',
+--   `type` int(4) NOT NULL COMMENT '医学术语类型( 1-检验套餐、2-检验细项、3-辅检、4-诊断、5-药品、6-手术和操作、7-科室、8-输血、10-量表、11-护理、12-中医疾病、13-中医证候、14-麻醉)',
+--   `his_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '医院术语名称',
+--   `his_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '医院术语编码',
+--   `his_detail_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '医院术语细项名称(检验细项)',
+--   `concept_id` bigint(20) NULL DEFAULT NULL COMMENT '医学标准术语id',
+--   `form_concept_id` bigint(20) NULL DEFAULT NULL COMMENT '药品剂型id',
+--   `is_match` int(4) NOT NULL DEFAULT 0 COMMENT '是否匹配(0-未匹配、1-已匹配)',
+--   `source` int(4) NULL DEFAULT NULL COMMENT '数据来源(1-标准词、2-同义词、3-编码、4-历史数据、5-相似词、99-数据迁移)',
+--   `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+--   PRIMARY KEY (`id`) USING BTREE,
+--   INDEX `idx_his_detail_name`(`hospital_id`, `type`, `his_name`, `his_detail_name`) USING BTREE,
+--   INDEX `idx_his_name`(`hospital_id`, `type`, `his_name`) USING BTREE,
+--   INDEX `idx_concept_id`(`hospital_id`, `concept_id`) USING BTREE,
+--   INDEX `idx_hospital_id`(`hospital_id`) USING BTREE,
+--   INDEX `idx_detail_name`(`his_name`, `his_detail_name`) USING BTREE,
+--   INDEX `idx_deleted_type`(`type`) USING BTREE,
+--   INDEX `idx_type`(`hospital_id`, `type`, `is_deleted`) USING BTREE
+-- ) ENGINE = InnoDB AUTO_INCREMENT = 797881 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '医学术语映射表' ROW_FORMAT = Dynamic;
+--
+-- SET FOREIGN_KEY_CHECKS = 1;
+--

+ 4 - 3
src/main/java/com/diagbot/aggregate/AssembleAggregate.java

@@ -7,6 +7,7 @@ import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.facade.MappingConfigFacade;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.ReflectUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.Drug;
 import com.diagbot.vo.ItemExt;
@@ -388,13 +389,13 @@ public class AssembleAggregate {
 
         try {
             for (T item : list) {
-                String name = item.getClass().getMethod("getName").invoke(item).toString();
+                String name = ReflectUtil.getProperty(item, "name");
                 if (StringUtil.isBlank(name)) {
                     retList.add(item);
                     continue;
                 }
 
-                String uniqueName = item.getClass().getMethod("getUniqueName").invoke(item).toString();
+                String uniqueName = ReflectUtil.getProperty(item, "uniqueName");
                 if (StringUtil.isNotBlank(uniqueName)) {
                     retList.add(item);
                     continue;
@@ -402,7 +403,7 @@ public class AssembleAggregate {
 
                 String hisDetailName = "";
                 if(type.equals(ConceptTypeEnum.LisPack.getKey())) {
-                    hisDetailName = item.getClass().getMethod("getDetailName").invoke(item).toString();
+                    hisDetailName = ReflectUtil.getProperty(item, "detailName");
                     if (StringUtil.isBlank(hisDetailName)) {
                         hisDetailName = "";
                     }

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

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

+ 1 - 1
src/main/java/com/diagbot/facade/PushFacade.java

@@ -186,7 +186,7 @@ public class PushFacade {
             if (RespDTOUtil.respIsNG(respDTO)) {
                 return pushDTO;
             }
-            //1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-法律法规
+            //1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-政策法规
             Map<String, List<ConceptDetailDTO>> conceptDetailMap = respDTO.data;
             if (pushDTO.getDis() != null) {
                 for (Map.Entry<String, List<PushBaseDTO>> entry : pushDTO.getDis().entrySet()) {

+ 144 - 0
src/main/java/com/diagbot/util/ReflectUtil.java

@@ -0,0 +1,144 @@
+package com.diagbot.util;
+
+import com.google.common.collect.Lists;
+
+import java.lang.reflect.Field;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * @description: 反射工具类
+ * @author: zhoutg
+ * @date: 2021/4/27 13:29
+ */
+public class ReflectUtil {
+
+    /**
+     * 获取属性对应的值,以list形式返回
+     *
+     * @param list
+     * @param propertyName
+     * @param <T>
+     * @param <V>
+     * @return
+     */
+    public static <T, V> List<V> getPropertyList(List<T> list, String propertyName) {
+        List<V> res = Lists.newArrayList();
+        if (ListUtil.isEmpty(list)) {
+            return res;
+        }
+        for (T t : list) {
+            try {
+                V val = getProperty(t, propertyName);
+                if (val != null) {
+                    // 字符串类型不为空判断
+                    if (StringUtil.isNotBlank(String.valueOf(val))) {
+                        res.add(val);
+                    }
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return res;
+    }
+
+    /**
+     * 循环向上转型, 获取对象的 DeclaredField
+     *
+     * @param object    : 子类对象
+     * @param fieldName : 父类中的属性名
+     * @return 父类中的属性对象
+     */
+    public static Field getDeclaredField(Object object, String fieldName) {
+        Field field = null;
+        Class<?> clazz = object.getClass();
+        for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
+            try {
+                field = clazz.getDeclaredField(fieldName);
+                return field;
+            } catch (Exception e) {
+                //这里甚么都不要做!并且这里的异常必须这样写,不能抛出去。
+                //如果这里的异常打印或者往外抛,则就不会执行clazz = clazz.getSuperclass(),最后就不会进入到父类中了
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 获取对象的属性值,直接使用getDeclaredFields()方法只能获取当前类声明的字段,需要递归向上获取
+     *
+     * @param object    : 子类对象
+     * @param fieldName : 父类中的属性名
+     * @return : 父类中的属性值
+     */
+    public static <T> T getProperty(Object object, String fieldName) {
+        try {
+            //根据 对象和属性名通过反射获取Field对象
+            Field field = getDeclaredField(object, fieldName);
+            // 容错处理
+            if (field == null) {
+                return null;
+            }
+            //抑制Java对其的检查
+            field.setAccessible(true);
+            //获取 object 中 field 所代表的属性值
+            return (T) field.get(object);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 对象赋值
+     *
+     * @param object
+     * @param property
+     * @param value
+     */
+    public static void setProperty(Object object, String property, Object value) {
+        //根据 对象和属性名通过反射 调用上面的方法获取 Field对象
+        Field field = getDeclaredField(object, property);
+        //抑制Java对其的检查
+        field.setAccessible(true);
+        try {
+            field.set(object, value);
+        } catch (IllegalArgumentException e) {
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 根据指定字段按照字符串排序
+     *
+     * @param tList
+     * @param property
+     * @param <T>
+     */
+    public <T> void sort(List<T> tList, String property) {
+        if (ListUtil.isNotEmpty(tList) && tList.size() > 1) {
+            Collections.sort(tList, new Comparator<T>() {
+                @Override
+                public int compare(T o1, T o2) {
+                    String v1 = getProperty(o1, property);
+                    String v2 = getProperty(o2, property);
+                    if (StringUtil.isBlank(v1)) {
+                        return -1;
+                    }
+                    if (StringUtil.isBlank(v2)) {
+                        return 1;
+                    }
+                    return v1.compareTo(v2);
+                }
+            });
+        }
+    }
+
+    public static void main(String[] args) {
+
+    }
+}

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

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

+ 8 - 8
src/main/java/com/diagbot/web/ConceptInfoController.java

@@ -53,7 +53,7 @@ public class ConceptInfoController {
     private KlConceptStaticFacade klConceptStaticFacade;
 
     @ApiOperation(value = "医学知识(静态知识)检索[zhaops]",
-            notes = "types: 类型(多选):0-全部、1-诊断、2-药品、3-检验、5-检查、6-手术和操作、8-量表、9-护理、10-法律法规 <br>" +
+            notes = "types: 类型(多选):0-全部、1-诊断、2-药品、3-检验、5-检查、6-手术和操作、8-量表、9-护理、10-政策法规 <br>" +
                     "inputStr: 检索内容<br>")
     @PostMapping("/staticKnowledgeIndex")
     @SysLogger("staticKnowledgeIndex")
@@ -64,7 +64,7 @@ public class ConceptInfoController {
     }
 
     @ApiOperation(value = "医学术语检索-新增静态知识[zhaops]",
-            notes = "types: 类型(多选):0-全部、1-诊断、2-药品、3-检验、5-检查、6-手术和操作、8-量表、9-护理、10-法律法规 <br>" +
+            notes = "types: 类型(多选):0-全部、1-诊断、2-药品、3-检验、5-检查、6-手术和操作、8-量表、9-护理、10-政策法规 <br>" +
                     "inputStr: 检索内容<br>")
     @PostMapping("/staticKnowledgeIndexWithoutInfo")
     @SysLogger("staticKnowledgeIndexWithoutInfo")
@@ -76,7 +76,7 @@ public class ConceptInfoController {
     }
 
     @ApiOperation(value = "页面获取静态知识[zhaops]",
-            notes = "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-法律法规 <br>" +
+            notes = "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-政策法规 <br>" +
                     "contentTypes: 内容类型(多选):1-静态信息、2-注意事项、3-临床路径、4-治疗方案<br>" +
                     "name: 标准术语名称<br>")
     @PostMapping("/getStaticKnowledge")
@@ -87,7 +87,7 @@ public class ConceptInfoController {
     }
 
     @ApiOperation(value = "对接获取静态知识[zhaops]",
-            notes = "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、7-手术和操作、8-量表、9-护理、10-法律法规 <br>" +
+            notes = "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、7-手术和操作、8-量表、9-护理、10-政策法规 <br>" +
                     "contentTypes: 内容类型(多选):1-静态信息、2-注意事项、3-临床路径、4-治疗方案 <br>" +
                     "hisName: HIS大项名称<br>" +
                     "hisDetailName: HIS小项名称<br>")
@@ -99,7 +99,7 @@ public class ConceptInfoController {
     }
 
     @ApiOperation(value = "获取静态知识列表[zhaops]",
-            notes = "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-法律法规 <br>" +
+            notes = "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-政策法规 <br>" +
                     "name: 术语名称<br>" +
                     "isDeleted: 启用状态:N-启用中、Y-已删除<br>")
     @PostMapping("/getPage")
@@ -111,7 +111,7 @@ public class ConceptInfoController {
     }
 
     @ApiOperation(value = "静态知识检索(分页返回)[zhaops]",
-            notes = "types: 类型(多选):0-全部、1-诊断、2-药品、3-检验、5-检查、6-手术和操作、8-量表、9-护理、10-法律法规 <br>" +
+            notes = "types: 类型(多选):0-全部、1-诊断、2-药品、3-检验、5-检查、6-手术和操作、8-量表、9-护理、10-政策法规 <br>" +
                     "inputStr: 检索内容<br>")
     @PostMapping("/staticIndexPage")
     @SysLogger("staticIndexPage")
@@ -124,7 +124,7 @@ public class ConceptInfoController {
     @ApiOperation(value = "保存静态知识-新增或修改[zhaops]",
             notes = "id: id <br>" +
                     "name: 术语名称 <br>" +
-                    "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-法律法规 <br>" +
+                    "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-政策法规 <br>" +
                     "clinicalPathwayName: 临床路径名称<br>" +
                     "noticeName: 注意事项名称<br>" +
                     "details: 明细<br>")
@@ -149,7 +149,7 @@ public class ConceptInfoController {
 
     @ApiOperation(value = "静态知识是否存在[zhaops]",
             notes = "name: 术语名称 <br>" +
-                    "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-法律法规 <br>")
+                    "type: 类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作、8-量表、9-护理、10-政策法规 <br>")
     @PostMapping("/isExist")
     @SysLogger("isExist")
     public RespDTO<Boolean> isExist(@Valid @RequestBody KlConceptStaticVO klConceptStaticVO) {

+ 6 - 1
src/main/resources/jdbc.properties

@@ -3,8 +3,13 @@
 #jdbc.username=qymz
 #jdbc.password=qymz
 
+#jdbc.driverClassName=oracle.jdbc.OracleDriver
+#jdbc.url=jdbc:oracle:thin:@132.147.254.159:1521/dbserver
+#jdbc.username=langtong
+#jdbc.password=langtong
+
 jdbc.driverClassName=oracle.jdbc.OracleDriver
-jdbc.url=jdbc:oracle:thin:@132.147.254.159:1521/dbserver
+jdbc.url=jdbc:oracle:thin:@132.147.254.166:1521/his166
 jdbc.username=langtong
 jdbc.password=langtong