zhoutg il y a 4 ans
Parent
commit
52243dd70d

+ 19 - 0
doc/008.20210520推理调整/cdss.sql

@@ -0,0 +1,19 @@
+USE `cdss`;
+
+DROP TABLE IF EXISTS `sys_dept_push`;
+CREATE TABLE `sys_dept_push` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `dept_name` varchar(255) NOT NULL DEFAULT '' COMMENT '标准科室名称',
+  `push` varchar(255) NOT NULL DEFAULT '' COMMENT '推送模型',
+  `remark` varchar(300) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='标准科室和推送模型映射';
+
+INSERT INTO `cdss`.`sys_dept_push` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `dept_name`, `push`, `remark`) VALUES ('1', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '精神卫生科', '1', NULL);
+
+alter table `cdss`.`sys_dept_push` MODIFY COLUMN push_mode int(1) NOT NULL DEFAULT '0' COMMENT '0:新版推送,1:5.0推送,2:混合推送';

+ 7 - 4
src/main/java/com/diagbot/config/CacheDeleteInit.java

@@ -38,14 +38,17 @@ public class CacheDeleteInit implements CommandLineRunner {
         cacheFacade.getdiseaseFilterCache();
         log.info("CDSS-CORE服务启动加载疾病过滤缓存成功!");
 
-         cacheFacade.loadAllRuleCache();
-         log.info("CDSS-CORE服务启动加载医学知识库中的所有规则缓存成功!");
+        cacheFacade.loadPushModel();
+        log.info("CDSS-CORE服务启动加载医院推送类型成功!");
+
+        cacheFacade.loadDeptPush();
+        log.info("CDSS-CORE服务启动加载科室和推送映射成功!");
 
         cacheFacade.loadAllBaseDiagnoseCache();
         log.info("CDSS-CORE服务启动加载诊断依据缓存成功!");
 
-        cacheFacade.loadHostipalPush();
-        log.info("CDSS-CORE服务启动加载医院大数据推送类型成功!");
+        cacheFacade.loadAllRuleCache();
+        log.info("CDSS-CORE服务启动加载医学知识库中的所有规则缓存成功!");
 
 //        cacheFacade.getDiseaseCorrespondCache();
 //        log.info("CDSS-CORE服务启动加载疾病对应ICD10缓存成功!");

+ 68 - 0
src/main/java/com/diagbot/entity/SysDeptPush.java

@@ -0,0 +1,68 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 标准科室和推送模型映射
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-05-20
+ */
+@Data
+public class SysDeptPush implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 标准科室名称
+     */
+    private String deptName;
+
+    /**
+     * 推送模型
+     */
+    private String push;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 3 - 3
src/main/java/com/diagbot/enums/RedisEnum.java

@@ -22,9 +22,9 @@ public enum RedisEnum implements KeyedNamed {
     diseaseType(2, "diseaseType:"),
     allRule(10, "allRule:"),
     allBaseDiagnose(11, "allBaseDiagnose"),
-    hospitalPushType(12, "hospitalPushType"),
-    pushVersion(13, "pushVersion"),
-    hospitalId_(14, "hospitalId_");
+    pushModel(13, "pushModel"),
+    hospitalId_(14, "hospitalId_"),
+    deptPush(15, "deptPush");
 
     @Setter
     private int key;

+ 28 - 14
src/main/java/com/diagbot/facade/CacheFacade.java

@@ -3,13 +3,13 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.client.PushNewServiceClient;
 import com.diagbot.dto.PushReloadDTO;
+import com.diagbot.entity.SysDeptPush;
 import com.diagbot.entity.TranHospitalInfo;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.RedisEnum;
 import com.diagbot.enums.StandConvertEnum;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RedisUtil;
-import com.diagbot.util.StringUtil;
 import org.apache.commons.collections4.map.LinkedMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
@@ -39,6 +39,8 @@ public class CacheFacade {
     TranHospitalInfoFacade tranHospitalInfoFacade;
     @Autowired
     PushNewServiceClient pushNewServiceClient;
+    @Autowired
+    DeptPushFacade deptPushFacade;
 
     /**
      * 清除缓存信息
@@ -145,32 +147,44 @@ public class CacheFacade {
     }
 
     /**
-     * 加载大数据推送类型【push_mode】和推送版本【remark】【tran_hospital_info】
+     * 加载大数据推送类型
      */
-    public void loadHostipalPush() {
-        // 删除
-        redisUtil.delete(RedisEnum.hospitalPushType.getName());
-        redisUtil.delete(RedisEnum.pushVersion.getName());
+    public void loadPushModel() {
+        redisUtil.delete(RedisEnum.pushModel.getName());
 
         // 加载
         List<TranHospitalInfo> hospitalList = tranHospitalInfoFacade.list(new QueryWrapper<TranHospitalInfo>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
         );
         if (ListUtil.isNotEmpty(hospitalList)) {
-            // 推送类型
-            redisUtil.putHashMap(RedisEnum.hospitalPushType.getName(),
-                    hospitalList.stream().collect(Collectors.toMap(k -> String.valueOf(k.getId()), v -> String.valueOf(v.getPushMode()), (v1, v2) -> (v2))));
-
             // 推送版本
             Map<String, Object> versionMap = new LinkedMap<>();
             for (TranHospitalInfo hospitalInfo : hospitalList) {
-                if (StringUtil.isNotBlank(hospitalInfo.getRemark()) && "old".equals(hospitalInfo.getRemark())) {
-                    versionMap.put(RedisEnum.hospitalId_.getName() + hospitalInfo.getId(), "old");
+                if (hospitalInfo.getPushMode() != null) {
+                    versionMap.put(RedisEnum.hospitalId_.getName() + hospitalInfo.getId(), hospitalInfo.getPushMode());
                 } else {
-                    versionMap.put(RedisEnum.hospitalId_.getName() + hospitalInfo.getId(), "new");
+                    versionMap.put(RedisEnum.hospitalId_.getName() + hospitalInfo.getId(), 0);
                 }
             }
-            redisUtil.putHashMap(RedisEnum.pushVersion.getName(), versionMap);
+            redisUtil.putHashMap(RedisEnum.pushModel.getName(), versionMap);
+        }
+    }
+
+    /**
+     * 加载标准科室和推送类型的映射关系【sys_dept_push】
+     */
+    public void loadDeptPush() {
+        // 删除
+        redisUtil.delete(RedisEnum.deptPush.getName());
+
+        // 加载
+        List<SysDeptPush> deptPushList = deptPushFacade.list(new QueryWrapper<SysDeptPush>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+        );
+        if (ListUtil.isNotEmpty(deptPushList)) {
+            // 推送类型
+            redisUtil.putHashMap(RedisEnum.deptPush.getName(),
+                    deptPushList.stream().collect(Collectors.toMap(k -> k.getDeptName(), v -> v.getPush(), (v1, v2) -> (v2))));
         }
     }
 }

+ 14 - 0
src/main/java/com/diagbot/facade/DeptPushFacade.java

@@ -0,0 +1,14 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.SysDeptPushServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/11/19 15:21
+ */
+@Component
+public class DeptPushFacade extends SysDeptPushServiceImpl {
+
+}

+ 28 - 13
src/main/java/com/diagbot/facade/PushFacade.java

@@ -1,5 +1,6 @@
 package com.diagbot.facade;
 
+import com.diagbot.biz.push.entity.Item;
 import com.diagbot.client.PushNewServiceClient;
 import com.diagbot.dto.PushBaseDTO;
 import com.diagbot.dto.PushDTO;
@@ -66,14 +67,28 @@ public class PushFacade {
      * @return
      */
     public PushDTO pushFac(PushVO pushVO) {
-        String pushVersion = redisUtil.getByKeyAndField(RedisEnum.pushVersion.getName(),
+        // 获取pushMode
+        Integer pushModel = redisUtil.getByKeyAndField(RedisEnum.pushModel.getName(),
                 RedisEnum.hospitalId_.getName() + pushVO.getHospitalId());
-        if (StringUtil.isNotBlank(pushVersion) && "old".equals(pushVersion)) {
-            // 使用5.0推送
-            return processAggreate(pushVO);
-        } else {
-            // 使用新版推送
-            return pushNewFac(pushVO);
+        switch (pushModel) {
+            case 0:  // 使用新版推送
+                return pushNewFac(pushVO, "0");
+            case 1: // 使用5.0推送
+                return processAggreate(pushVO);
+            case 2:  // 走科室对应的模型,如果找不到,使用5.0推理
+                List<Item> deptList = pushVO.getDept();
+                String modelType = "0";
+                if (ListUtil.isNotEmpty(deptList)) {
+                    modelType = redisUtil.getByKeyAndField(RedisEnum.deptPush.getName(),
+                            deptList.get(0).getUniqueName());
+                }
+                if ("0".equals(modelType)) {
+                    return processAggreate(pushVO);
+                } else {
+                    return pushNewFac(pushVO, modelType);
+                }
+                default: // 默认使用新版推送
+                    return pushNewFac(pushVO, "0");
         }
     }
 
@@ -123,7 +138,7 @@ public class PushFacade {
      * @param
      * @return
      */
-    public PushDTO pushNewFac(PushVO pushVo) {
+    public PushDTO pushNewFac(PushVO pushVo, String modelType) {
         PushDTO pushDTO = new PushDTO();
         Map<String, Object> debug = new LinkedHashMap<>();
         debug.put("大数据推送地址", pushUrl);
@@ -149,7 +164,7 @@ public class PushFacade {
             try {
                 Map<String, Object> invokeParams = new HashMap<>();
                 invokeParams.put("wordCrfDTO", wordCrfDTO);
-                invokeParams.put("pushNewVO", generatePushVo(wordCrfDTO));
+                invokeParams.put("pushNewVO", generatePushVo(wordCrfDTO, modelType));
                 pushDTO = DataFacade.get("pushAll", invokeParams, PushDTO.class);
             } catch (Exception e) {
                 throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "推送服务出错" + e.getMessage());
@@ -257,17 +272,17 @@ public class PushFacade {
      * 生成新版推送入参
      *
      * @param wordCrfDTO
+     * @param modelType 模型类型
      * @return
      */
-    public PushNewVO generatePushVo(WordCrfDTO wordCrfDTO) {
+    public PushNewVO generatePushVo(WordCrfDTO wordCrfDTO, String modelType) {
         PushNewVO pushNewVO = new PushNewVO();
         pushNewVO.setChief(wordCrfDTO.getChief());
         pushNewVO.setPresent(wordCrfDTO.getSymptom());
         pushNewVO.setAge(wordCrfDTO.getAgeNum());
         pushNewVO.setSex(wordCrfDTO.getSex());
-        String pushType = redisUtil.getByKeyAndField(RedisEnum.hospitalPushType.getName(), String.valueOf(wordCrfDTO.getHospitalId()));
-        if (StringUtil.isNotBlank(pushType)) {
-            pushNewVO.setHospitalType(pushType);
+        if (StringUtil.isNotBlank(modelType)) {
+            pushNewVO.setHospitalType(modelType);
         }
         return pushNewVO;
     }

+ 16 - 0
src/main/java/com/diagbot/mapper/SysDeptPushMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.SysDeptPush;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 标准科室和推送模型映射 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-05-20
+ */
+public interface SysDeptPushMapper extends BaseMapper<SysDeptPush> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.SysDeptPush;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 标准科室和推送模型映射 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-05-20
+ */
+public interface SysDeptPushService extends IService<SysDeptPush> {
+
+}

+ 22 - 0
src/main/java/com/diagbot/service/impl/SysDeptPushServiceImpl.java

@@ -0,0 +1,22 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.diagbot.entity.SysDeptPush;
+import com.diagbot.mapper.SysDeptPushMapper;
+import com.diagbot.service.SysDeptPushService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 标准科室和推送模型映射 服务实现类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-05-20
+ */
+@Service
+@DS("cdss")
+public class SysDeptPushServiceImpl extends ServiceImpl<SysDeptPushMapper, SysDeptPush> implements SysDeptPushService {
+
+}

+ 1 - 1
src/main/java/com/diagbot/vo/PushNewVO.java

@@ -9,7 +9,7 @@ import lombok.Data;
  */
 @Data
 public class PushNewVO {
-    private String hospitalType = "0"; // 医院类型, 0:全科,1:妇幼,2:精神
+    private String hospitalType = "0"; // 模型类型, 0:全科、妇幼、精神,1:精神
     private Double age; // 年龄
     private Integer sex; // 性别
     private String chief; // 主诉

+ 16 - 6
src/main/java/com/diagbot/web/CacheController.java

@@ -119,12 +119,22 @@ public class CacheController {
         }
     }
 
-    @ApiOperation(value = "加载大数据推送类型【字段:push_mode】和推送版本【字段:remark】[by:zhoutg]",
-            notes = "表:tran_hospital_info,【remark】字段:old表示使用原5.0推理,其他值:新版推理")
-    @PostMapping("/loadHostipalPush")
-    @SysLogger("loadHostipalPush")
-    public RespDTO<Boolean> loadHostipalPush() {
-        cacheFacade.loadHostipalPush();
+    @ApiOperation(value = "加载推送类型[by:zhoutg]",
+            notes = "表:tran_hospital_info,字段:push_mode")
+    @PostMapping("/loadPushModel")
+    @SysLogger("loadPushModel")
+    public RespDTO<Boolean> loadPushModel() {
+        cacheFacade.loadPushModel();
         return RespDTO.onSuc(true);
     }
+
+    @ApiOperation(value = "加载标准科室和推送类型的映射关系【sys_dept_push】",
+            notes = "")
+    @PostMapping("/loadDeptPush")
+    @SysLogger("loadDeptPush")
+    public RespDTO<Boolean> loadDeptPush() {
+        cacheFacade.loadDeptPush();
+        return RespDTO.onSuc(true);
+    }
+
 }

+ 18 - 0
src/main/resources/mapper/SysDeptPushMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.SysDeptPushMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.SysDeptPush">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="dept_name" property="deptName" />
+        <result column="push" property="push" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

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

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