Bladeren bron

Merge branch 'his/common' of http://192.168.2.236:10080/gaodm/cdss into his/common

lipc 4 jaren geleden
bovenliggende
commit
a31b49c0a1
31 gewijzigde bestanden met toevoegingen van 976 en 10 verwijderingen
  1. 3 0
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  2. 3 0
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  3. 2 0
      src/main/java/com/diagbot/dto/BillMsg.java
  4. 4 0
      src/main/java/com/diagbot/dto/StaticKnowledgeIndexDTO.java
  5. 144 0
      src/main/java/com/diagbot/entity/SysUserHospital.java
  6. 144 0
      src/main/java/com/diagbot/entity/SysUserRole.java
  7. 33 3
      src/main/java/com/diagbot/facade/ConceptInfoFacade.java
  8. 24 2
      src/main/java/com/diagbot/facade/DataPageDockFacade.java
  9. 37 0
      src/main/java/com/diagbot/facade/MrFacade.java
  10. 18 0
      src/main/java/com/diagbot/facade/PushFacade.java
  11. 8 0
      src/main/java/com/diagbot/facade/SysUserHospitalFacade.java
  12. 8 0
      src/main/java/com/diagbot/facade/SysUserRoleFacade.java
  13. 82 0
      src/main/java/com/diagbot/facade/UserDockFacade.java
  14. 16 0
      src/main/java/com/diagbot/mapper/SysUserHospitalMapper.java
  15. 16 0
      src/main/java/com/diagbot/mapper/SysUserRoleMapper.java
  16. 16 0
      src/main/java/com/diagbot/service/SysUserHospitalService.java
  17. 16 0
      src/main/java/com/diagbot/service/SysUserRoleService.java
  18. 20 0
      src/main/java/com/diagbot/service/impl/SysUserHospitalServiceImpl.java
  19. 20 0
      src/main/java/com/diagbot/service/impl/SysUserRoleServiceImpl.java
  20. 280 0
      src/main/java/com/diagbot/util/RedisUtil.java
  21. 12 0
      src/main/java/com/diagbot/vo/UserInfoVO.java
  22. 13 0
      src/main/java/com/diagbot/web/DataPageDockController.java
  23. 9 0
      src/main/java/com/diagbot/web/MrController.java
  24. 7 0
      src/main/java/com/diagbot/web/PushController.java
  25. 1 1
      src/main/resources/application-dev.yml
  26. 1 1
      src/main/resources/application-local.yml
  27. 1 1
      src/main/resources/application-pre.yml
  28. 1 1
      src/main/resources/application-pro.yml
  29. 1 1
      src/main/resources/application-test.yml
  30. 18 0
      src/main/resources/mapper/SysUserHospitalMapper.xml
  31. 18 0
      src/main/resources/mapper/SysUserRoleMapper.xml

+ 3 - 0
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -115,6 +115,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/sys/disclaimerInfo/getDisclaimerInfo").permitAll()
                 .antMatchers("/sys/mr/createMr").permitAll()
                 .antMatchers("/sys/mr/getMr").permitAll()
+                .antMatchers("/sys/mr/getIndicationMr").permitAll()
                 .antMatchers("/sys/plan/getSysPlanInfoDatas").permitAll()
                 .antMatchers("/sys/mrqc/analyze_run").permitAll()
                 .antMatchers("/sys/tokenPermission/delPermission").permitAll()
@@ -122,6 +123,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/sys/push/push").permitAll()
                 .antMatchers("/sys/push/pushApi").permitAll()
                 .antMatchers("/sys/push/indicationPush").permitAll()
+                .antMatchers("/sys/push/indicationExtPush").permitAll()
                 .antMatchers("/sys/push/pushPlan").permitAll()
                 .antMatchers("/demo/templateInfo/updateByIdUsNames").permitAll()
                 .antMatchers("/demo/templateInfo/saveTemplateInfo").permitAll()
@@ -164,6 +166,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/dataPage/docking/getDataService").permitAll()
                 .antMatchers("/dataPage/docking/getStaticKnowledge").permitAll()
                 .antMatchers("/dataPage/docking/getDataEngine").permitAll()
+                .antMatchers("/dataPage/docking/addUserAndRole").permitAll()
                 .antMatchers("/**").authenticated();
         //                .antMatchers("/**").permitAll();
     }

+ 3 - 0
src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -158,6 +158,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/sys/disclaimerInfo/getDisclaimerInfo", request)
                 || matchers("/sys/mr/createMr", request)
                 || matchers("/sys/mr/getMr", request)
+                || matchers("/sys/mr/getIndicationMr", request)
                 || matchers("/sys/plan/getSysPlanInfoDatas", request)
                 || matchers("/sys/mrqc/analyze_run", request)
                 || matchers("/sys/tokenPermission/delPermission", request)
@@ -165,6 +166,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/sys/push/push", request)
                 || matchers("/sys/push/pushApi", request)
                 || matchers("/sys/push/indicationPush", request)
+                || matchers("/sys/push/indicationExtPush", request)
                 || matchers("/sys/push/pushPlan", request)
                 || matchers("/demo/templateInfo/updateByIdUsNames", request)
                 || matchers("/demo/templateInfo/saveTemplateInfo", request)
@@ -206,6 +208,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/dataPage/docking/getDataService", request)
                 || matchers("/dataPage/docking/getStaticKnowledge", request)
                 || matchers("/dataPage/docking/getDataEngine", request)
+                || matchers("/dataPage/docking/addUserAndRole", request)
                 || matchers("/", request)) {
             return true;
         }

+ 2 - 0
src/main/java/com/diagbot/dto/BillMsg.java

@@ -14,6 +14,8 @@ public class BillMsg {
     private String msg;
     // 开单名称
     private String orderName;
+    // 明细名称
+    private String orderDetailName;
     // 开单标准名称
     private String orderStandName;
     // 匹配的内容

+ 4 - 0
src/main/java/com/diagbot/dto/StaticKnowledgeIndexDTO.java

@@ -19,6 +19,10 @@ public class StaticKnowledgeIndexDTO {
      * 术语名称
      */
     private String name;
+    /**
+     * 编码
+     */
+    private String code;
     /**
      * 词性
      */

+ 144 - 0
src/main/java/com/diagbot/entity/SysUserHospital.java

@@ -0,0 +1,144 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户-机构表映射表
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-03-02
+ */
+public class SysUserHospital 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 Long userId;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "SysUserHospital{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", userId=" + userId +
+            ", hospitalId=" + hospitalId +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 144 - 0
src/main/java/com/diagbot/entity/SysUserRole.java

@@ -0,0 +1,144 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 系统用户角色关联表
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-03-02
+ */
+public class SysUserRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户和角色关联ID
+     */
+    @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;
+
+    /**
+     * 系统用户表.用户ID
+     */
+    private Long userId;
+
+    /**
+     * 系统角色表.角色ID
+     */
+    private Long roleId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+    public Long getRoleId() {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId) {
+        this.roleId = roleId;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "SysUserRole{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", userId=" + userId +
+            ", roleId=" + roleId +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 33 - 3
src/main/java/com/diagbot/facade/ConceptInfoFacade.java

@@ -382,12 +382,18 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
         List<String> typeNames = ListUtil.newArrayList();
         List<Integer> types = ListUtil.newArrayList();
         types.add(staticKnowledgeHISVO.getType());
+        if (staticKnowledgeHISVO.getType().equals(3)) {
+            types.add(4);
+        } else if (staticKnowledgeHISVO.getType().equals(4)) {
+            types.add(3);
+        }
         if (staticKnowledgeHISVO.getType().equals(5)) {
             types.add(6);
         } else if (staticKnowledgeHISVO.getType().equals(6)) {
             types.add(5);
         }
 
+
         for (Integer type : types) {
             String typeName = dicStaticTypeValNameMap.get(type.toString());
             typeName = convertTypeName(typeName, 1, dicList);
@@ -404,7 +410,28 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
                 .in("name", uniqueNameList)
                 .eq("status", StatusEnum.Enable.getKey())
                 .in("type", typeNames);
-        List<ConceptInfo> conceptInfoList = this.list(conceptInfoQueryWrapper);
+        List<ConceptInfo> conceptList = this.list(conceptInfoQueryWrapper);
+        List<ConceptInfo> conceptInfoList = Lists.newLinkedList();
+        if (staticKnowledgeHISVO.getType().equals(3)) {
+            conceptInfoList.addAll(conceptList.stream().filter(i -> i.getType().equals("实验室检查套餐名")).collect(Collectors.toList()));
+            for (ConceptInfo info : conceptList) {
+                if (info.getType().equals("实验室检查名称")
+                        && ListUtil.isEmpty(conceptInfoList.stream().filter(i -> i.getName().equals(info.getName())).collect(Collectors.toList()))) {
+                    conceptInfoList.add(info);
+                }
+            }
+        }
+        if (staticKnowledgeHISVO.getType().equals(4)) {
+            conceptInfoList.addAll(conceptList.stream().filter(i -> i.getType().equals("实验室检查名称")).collect(Collectors.toList()));
+            for (ConceptInfo info : conceptList) {
+                if (info.getType().equals("实验室检查套餐名")
+                        && ListUtil.isEmpty(conceptInfoList.stream().filter(i -> i.getName().equals(info.getName())).collect(Collectors.toList()))) {
+                    conceptInfoList.add(info);
+                }
+            }
+        } else {
+            conceptInfoList.addAll(conceptList);
+        }
 
         List<String> existUniqueNameList = Lists.newLinkedList();
 
@@ -415,7 +442,7 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
                     .collect(Collectors.toList()));
         }
 
-        //获取上级静态知识
+        //未匹配到静态知识
         List<String> notExistUniqueNameList = Lists.newLinkedList();
         uniqueNameList.forEach(name -> {
             if (!existUniqueNameList.contains(name)) {
@@ -423,13 +450,16 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
             }
         });
 
+        //获取上级静态知识
         if (ListUtil.isNotEmpty(notExistUniqueNameList)) {
             List<StaticKnowledgeNameVO> paramNames = Lists.newLinkedList();
             List<StaticKnowledgeNameVO> superNames = Lists.newLinkedList();
             for (String name : notExistUniqueNameList) {
                 StaticKnowledgeNameVO paramName = new StaticKnowledgeNameVO();
                 paramName.setName(name);
-                if (staticKnowledgeHISVO.getType().equals(5)) {
+                if (staticKnowledgeHISVO.getType().equals(3)) {
+                    paramName.setType(4);
+                } else if (staticKnowledgeHISVO.getType().equals(5)) {
                     paramName.setType(6);
                 } else {
                     paramName.setType(staticKnowledgeHISVO.getType());

+ 24 - 2
src/main/java/com/diagbot/facade/DataPageDockFacade.java

@@ -7,6 +7,7 @@ import com.diagbot.dto.PushPlanDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.TranDatadockingLog;
 import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.*;
 import lombok.extern.slf4j.Slf4j;
@@ -68,14 +69,35 @@ public class DataPageDockFacade {
         }
 
         String url="";
+        String pushMrId="";
         PushJoinVO pushJoinVO = new PushJoinVO();
         BeanUtil.copyProperties(dataPageDockVO, pushJoinVO);
         // 将基本参数保存到redis
         String mrId = mrFacade.createMr(pushJoinVO);
+        //开单合理性推理时,验证下是否有推送,无推送时,不给url,code为“-1”
+        if(dataPageDockVO.getPlanCode().equals("order_rational")){
+            IndicationPushVO indicationPushVO=new IndicationPushVO();
+            //初始化开单合理性入参
+            BeanUtil.copyProperties(dataPageDockVO,indicationPushVO);
+            indicationPushVO.setRuleType("1,2,3,4");
+            IndicationDTO indicationDTO = pushFacade.indicationPush(indicationPushVO);
+            if (indicationDTO != null) {
+                if (ListUtil.isNotEmpty(indicationDTO.getBillMsgList()) || ListUtil.isNotEmpty(indicationDTO.getHighRiskList())
+                        || ListUtil.isNotEmpty(indicationDTO.getCriticalValList()) || ListUtil.isNotEmpty(indicationDTO.getOtherList()))
+                {
+                    pushMrId= mrFacade.createIndicationMr(indicationDTO);
+                }else{
+                    return RespDTO.onError("无开单合理性提醒!");
+                }
+            }else{
+                return RespDTO.onError("无开单合理性提醒!");
+            }
+        }
+
         if("hor".equals(dataPageDockVO.getShowType())){
-            url=dataPageUrl+"/cdssHorizontal.html?mrId="+mrId+"&hospitalId="+dataPageDockVO.getHospitalId()+"&planCode="+dataPageDockVO.getPlanCode();
+            url=dataPageUrl+"/cdssHorizontal.html?pushMrId='"+pushMrId+"'&mrId="+mrId+"&hospitalId="+dataPageDockVO.getHospitalId()+"&planCode="+dataPageDockVO.getPlanCode();
         }else{
-            url=dataPageUrl+"/cdss.html?mrId="+mrId+"&hospitalId="+dataPageDockVO.getHospitalId()+"&planCode="+dataPageDockVO.getPlanCode();
+            url=dataPageUrl+"/cdss.html?pushMrId='"+pushMrId+"'&mrId="+mrId+"&hospitalId="+dataPageDockVO.getHospitalId()+"&planCode="+dataPageDockVO.getPlanCode();
         }
 
         try{

+ 37 - 0
src/main/java/com/diagbot/facade/MrFacade.java

@@ -1,8 +1,15 @@
 package com.diagbot.facade;
 
+import com.diagbot.dto.IndicationDTO;
+import com.diagbot.idc.VisibleIdCreater;
 import com.diagbot.service.impl.MrServiceImpl;
+import com.diagbot.util.RedisUtil;
+import com.diagbot.vo.MrVO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.concurrent.TimeUnit;
+
 /**
  * @Description: 病历保存到redis装饰层
  * @author: gaodm
@@ -10,4 +17,34 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class MrFacade extends MrServiceImpl {
+
+    @Autowired
+    RedisUtil redisUtil;
+    @Autowired
+    VisibleIdCreater visibleIdCreater;
+
+    private static final String MSGMR = "msgMr::";
+
+    /**
+     * 创建提醒类结果
+     *
+     * @param indicationDTO
+     * @return
+     */
+    public String createIndicationMr(IndicationDTO indicationDTO) {
+        String mrId = visibleIdCreater.getNextId(9).toString();
+        redisUtil.setEx(MSGMR + mrId, indicationDTO, 15, TimeUnit.MINUTES);
+        return mrId;
+    }
+
+    /**
+     * 获取提醒类结果
+     *
+     * @param mrVO
+     * @return
+     */
+    public IndicationDTO getIndicationMr(MrVO mrVO) {
+        String mrId = MSGMR + mrVO.getMrId();
+        return redisUtil.get(mrId);
+    }
 }

+ 18 - 0
src/main/java/com/diagbot/facade/PushFacade.java

@@ -20,6 +20,7 @@ import com.diagbot.vo.PushPlanVO;
 import com.diagbot.vo.PushVO;
 import com.diagbot.vo.SearchData;
 import com.google.common.collect.Lists;
+import org.apache.commons.collections4.ListUtils;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -46,6 +47,8 @@ public class PushFacade {
     private ConceptInfoFacade conceptInfoFacade;
     @Autowired
     private DictionaryFacade dictionaryFacade;
+    @Autowired
+    MrFacade mrFacade;
 
     /**
      * 基础推理-症状、查体、化验、辅检、诊断
@@ -100,6 +103,21 @@ public class PushFacade {
         return indicationDTO;
     }
 
+    /**
+     * 提示信息相关推理-危急值、开单合理项、药品禁忌等
+     *
+     * @param indicationPushVO
+     */
+    public String indicationExtPush(IndicationPushVO indicationPushVO) {
+        IndicationDTO indicationDTO = indicationPush(indicationPushVO);
+        if (indicationDTO != null) {
+            if (ListUtil.isNotEmpty(indicationDTO.getBillMsgList()) || ListUtil.isNotEmpty(indicationDTO.getHighRiskList())
+                    || ListUtil.isNotEmpty(indicationDTO.getCriticalValList()) || ListUtil.isNotEmpty(indicationDTO.getOtherList()))
+            return mrFacade.createIndicationMr(indicationDTO);
+        }
+        return "";
+    }
+
     /**
      * 推理持续检验检查计划
      *

+ 8 - 0
src/main/java/com/diagbot/facade/SysUserHospitalFacade.java

@@ -0,0 +1,8 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.SysUserHospitalServiceImpl;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SysUserHospitalFacade extends SysUserHospitalServiceImpl {
+}

+ 8 - 0
src/main/java/com/diagbot/facade/SysUserRoleFacade.java

@@ -0,0 +1,8 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.SysUserRoleServiceImpl;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SysUserRoleFacade extends SysUserRoleServiceImpl {
+}

+ 82 - 0
src/main/java/com/diagbot/facade/UserDockFacade.java

@@ -0,0 +1,82 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.HospitalInfo;
+import com.diagbot.entity.SysUser;
+import com.diagbot.entity.SysUserHospital;
+import com.diagbot.entity.SysUserRole;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.StatusEnum;
+import com.diagbot.vo.UserInfoVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.factory.PasswordEncoderFactories;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:用户维护接口
+ * @Author:liuqq
+ * @time: ${DATE} ${TIME}
+ **/
+@Component
+@Slf4j
+public class UserDockFacade {
+
+    @Autowired
+    private SysUserFacade sysUserFacade;
+    @Autowired
+    private SysUserRoleFacade sysUserRoleFacade;
+    @Autowired
+    private SysUserHospitalFacade sysUserHospitalFacade;
+
+    //private
+
+    /**
+     * @Description:添加用户,初始化用户角色为-1
+     * @Author:liuqq
+     * @time: ${DATE} ${TIME}
+     **/
+    public RespDTO addUser(UserInfoVO userInfoVO){
+        try{
+            QueryWrapper<SysUser> queryWrapper = new QueryWrapper<SysUser>();
+            queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("status", StatusEnum.Enable.getKey())
+                    .eq("username", userInfoVO.getUsername());
+            SysUser user= sysUserFacade.getOne(queryWrapper);
+
+            if(user !=null){
+                SysUser sysUser=new SysUser();
+                BeanUtils.copyProperties(userInfoVO,sysUser);
+                sysUser.setId(user.getId());
+                PasswordEncoder passwordEncoder= PasswordEncoderFactories.createDelegatingPasswordEncoder();
+                sysUser.setPassword(passwordEncoder.encode(userInfoVO.getPassword()));
+                sysUserFacade.updateById(sysUser);
+            }else{
+                SysUser sysUser=new SysUser();
+                BeanUtils.copyProperties(userInfoVO,sysUser);
+                PasswordEncoder passwordEncoder= PasswordEncoderFactories.createDelegatingPasswordEncoder();
+                sysUser.setPassword(passwordEncoder.encode(userInfoVO.getPassword()));
+                sysUserFacade.save(sysUser);
+
+                user= sysUserFacade.getOne(queryWrapper);
+                SysUserRole sysUserRole=new SysUserRole();
+                sysUserRole.setUserId(user.getId());
+                sysUserRole.setRoleId(Long.valueOf("-1"));
+                sysUserRoleFacade.save(sysUserRole);
+
+                SysUserHospital sysUserHospital=new SysUserHospital();
+                sysUserHospital.setUserId(user.getId());
+                sysUserHospital.setHospitalId(userInfoVO.getHospitalId());
+                sysUserHospitalFacade.save(sysUserHospital);
+            }
+
+            return RespDTO.onSuc("操作正常");
+        }catch (Exception e){
+            e.printStackTrace();
+            return RespDTO.onError("操作异常");
+        }
+    }
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.SysUserHospital;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 用户-机构表映射表 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-03-02
+ */
+public interface SysUserHospitalMapper extends BaseMapper<SysUserHospital> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.SysUserRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 系统用户角色关联表 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-03-02
+ */
+public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.SysUserHospital;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 用户-机构表映射表 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-03-02
+ */
+public interface SysUserHospitalService extends IService<SysUserHospital> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.SysUserRole;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 系统用户角色关联表 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-03-02
+ */
+public interface SysUserRoleService extends IService<SysUserRole> {
+
+}

+ 20 - 0
src/main/java/com/diagbot/service/impl/SysUserHospitalServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.SysUserHospital;
+import com.diagbot.mapper.SysUserHospitalMapper;
+import com.diagbot.service.SysUserHospitalService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 用户-机构表映射表 服务实现类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-03-02
+ */
+@Service
+public class SysUserHospitalServiceImpl extends ServiceImpl<SysUserHospitalMapper, SysUserHospital> implements SysUserHospitalService {
+
+}

+ 20 - 0
src/main/java/com/diagbot/service/impl/SysUserRoleServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.SysUserRole;
+import com.diagbot.mapper.SysUserRoleMapper;
+import com.diagbot.service.SysUserRoleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 系统用户角色关联表 服务实现类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2021-03-02
+ */
+@Service
+public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRole> implements SysUserRoleService {
+
+}

+ 280 - 0
src/main/java/com/diagbot/util/RedisUtil.java

@@ -0,0 +1,280 @@
+package com.diagbot.util;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @description: redis工具类
+ * @author: zhoutg
+ * @time: 2020/8/11 19:52
+ */
+@Component
+public class RedisUtil {
+
+    @Autowired
+    @Qualifier("redisTemplateForMr")
+    RedisTemplate redisTemplate;
+
+    /**
+     * 根据指定key获取value
+     *
+     * @param key 键
+     */
+    public <T> T get(String key) {
+        return (T) redisTemplate.opsForValue().get(key);
+    }
+
+    /**
+     * 根据指定key设置obj
+     *
+     * @param key
+     * @param obj
+     */
+    public void set(String key, Object obj) {
+        redisTemplate.opsForValue().set(key, obj);
+    }
+
+    /**
+     * 批量获取
+     *
+     * @param keys
+     * @return
+     */
+    public <T> List<T> multiGet(Collection<String> keys) {
+        return redisTemplate.opsForValue().multiGet(keys);
+    }
+
+    /**
+     * 批量设置
+     *
+     * @param map
+     * @return
+     */
+    public void multiSet(Map<String, Object> map) {
+        redisTemplate.opsForValue().multiSet(map);
+    }
+
+    /**
+     * 更新指定的数据
+     *
+     * @param key
+     * @param str
+     */
+    public void updateValue(String key, String str) {
+        redisTemplate.opsForValue().set(key, str);
+    }
+
+    /**
+     * 删除key
+     *
+     * @param key
+     */
+    public void delete(String key) {
+        redisTemplate.delete(key);
+    }
+
+    /**
+     * 批量删除key
+     *
+     * @param keys
+     */
+    public void delete(Collection<String> keys) {
+        redisTemplate.delete(keys);
+    }
+
+    /**
+     * 根据前缀删除key
+     *
+     * @param prex
+     */
+    public void deleteByPrex(String prex) {
+        prex = prex + "**";
+        Set<String> keys = getKeyList(prex);
+        if (CollectionUtils.isNotEmpty(keys)) {
+            redisTemplate.delete(keys);
+        }
+    }
+
+    /**
+     * 根据正则key获取value列表
+     *
+     * @param pattern 键
+     */
+    public <T> List<T> getByRegex(String pattern) {
+        Set<String> keys = getKeyList(pattern);
+        return multiGet(keys);
+    }
+
+    /**
+     * 查找匹配的key
+     *
+     * @param pattern
+     * @return
+     */
+    public Set<String> getKeyList(String pattern) {
+        return redisTemplate.keys(pattern);
+    }
+
+    /**
+     * 序列化key
+     *
+     * @param key
+     * @return
+     */
+    public byte[] dump(String key) {
+        return redisTemplate.dump(key);
+    }
+
+    /**
+     * 是否存在key
+     *
+     * @param key
+     * @return
+     */
+    public Boolean hasKey(String key) {
+        return redisTemplate.hasKey(key);
+    }
+
+    /**
+     * 设置过期时间
+     *
+     * @param key
+     * @param timeout
+     * @param unit
+     * @return
+     */
+    public Boolean expire(String key, long timeout, TimeUnit unit) {
+        return redisTemplate.expire(key, timeout, unit);
+    }
+
+    /**
+     * 设置过期时间
+     *
+     * @param key
+     * @param date
+     * @return
+     */
+    public Boolean expireAt(String key, Date date) {
+        return redisTemplate.expireAt(key, date);
+    }
+
+    /**
+     * 移除 key 的过期时间,key 将持久保持
+     *
+     * @param key
+     * @return
+     */
+    public Boolean persist(String key) {
+        return redisTemplate.persist(key);
+    }
+
+    /**
+     * 返回 key 的剩余的过期时间
+     *
+     * @param key
+     * @param unit
+     * @return
+     */
+    public Long getExpire(String key, TimeUnit unit) {
+        return redisTemplate.getExpire(key, unit);
+    }
+
+    /**
+     * 返回 key 的剩余的过期时间
+     *
+     * @param key
+     * @return
+     */
+    public Long getExpire(String key) {
+        return redisTemplate.getExpire(key);
+    }
+
+    /**
+     * 修改 key 的名称
+     *
+     * @param oldKey
+     * @param newKey
+     */
+    public void rename(String oldKey, String newKey) {
+        redisTemplate.rename(oldKey, newKey);
+    }
+
+    /**
+     * 仅当 newkey 不存在时,将 oldKey 改名为 newkey
+     *
+     * @param oldKey
+     * @param newKey
+     * @return
+     */
+    public Boolean renameIfAbsent(String oldKey, String newKey) {
+        return redisTemplate.renameIfAbsent(oldKey, newKey);
+    }
+
+    /**
+     * 设置指定 key 的值
+     *
+     * @param key
+     * @param value
+     */
+    public void set(String key, String value) {
+        redisTemplate.opsForValue().set(key, value);
+    }
+
+    /**
+     * 将值 value 关联到 key ,并将 key 的过期时间设为 timeout
+     *
+     * @param key
+     * @param value
+     * @param timeout 过期时间
+     * @param unit    时间单位, 天:TimeUnit.DAYS 小时:TimeUnit.HOURS 分钟:TimeUnit.MINUTES
+     *                秒:TimeUnit.SECONDS 毫秒:TimeUnit.MILLISECONDS
+     */
+    public void setEx(String key, Object value, long timeout, TimeUnit unit) {
+        redisTemplate.opsForValue().set(key, value, timeout, unit);
+    }
+
+    /**
+     * 只有在 key 不存在时设置 key 的值
+     *
+     * @param key
+     * @param value
+     * @return 之前已经存在返回false, 不存在返回true
+     */
+    public boolean setIfAbsent(String key, String value) {
+        return redisTemplate.opsForValue().setIfAbsent(key, value);
+    }
+
+    /**
+     * map集合的形式添加键值对
+     *
+     * @param key
+     * @param map
+     */
+    public void putHashMap(String key, Map<String, Object> map) {
+        if (MapUtils.isNotEmpty(map)) {
+            redisTemplate.opsForHash().putAll(key, map);
+        }
+    }
+
+    /**
+     * 获取集合中指定field的内容
+     * @param key
+     * @param field
+     * @param <T>
+     * @return
+     */
+    public <T> T getByKeyAndField(String key, String field) {
+        return (T)redisTemplate.opsForHash().get(key, field);
+    }
+}

+ 12 - 0
src/main/java/com/diagbot/vo/UserInfoVO.java

@@ -0,0 +1,12 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+@Data
+public class UserInfoVO {
+    private String username;//账号
+    private String linkman;//姓名
+    private String password;//默认:a123456
+    private Long hospitalId;//医院ID
+    private Integer type;//1内部用户,0外部用户(默认0)
+}

+ 13 - 0
src/main/java/com/diagbot/web/DataPageDockController.java

@@ -3,9 +3,11 @@ package com.diagbot.web;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.DataPageDockFacade;
+import com.diagbot.facade.UserDockFacade;
 import com.diagbot.vo.DataEngineVO;
 import com.diagbot.vo.DataPageDockVO;
 import com.diagbot.vo.StaticKnowledgeHISVO;
+import com.diagbot.vo.UserInfoVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.poi.ss.formula.functions.T;
@@ -27,6 +29,9 @@ public class DataPageDockController {
     @Autowired
     private DataPageDockFacade dataPageDockFacade;
 
+    @Autowired
+    private UserDockFacade userDockFacade;
+
     @ApiOperation(value = "页面推送模式-推理API[QQ]",
             notes = "")
     @PostMapping("/getDataService")
@@ -71,4 +76,12 @@ public class DataPageDockController {
         return RespDTO.onSuc(dataPageDockFacade.getEnginePush(dataEngineVO));
     }
 
+    @ApiOperation(value = "添加用户-用户维护API[QQ]",
+            notes = "")
+    @PostMapping("/addUserAndRole")
+    @SysLogger("addUserAndRole")
+    public RespDTO addUserAndRole(@Valid @RequestBody UserInfoVO userInfoVO){
+        return RespDTO.onSuc(userDockFacade.addUser(userInfoVO));
+    }
+
 }

+ 9 - 0
src/main/java/com/diagbot/web/MrController.java

@@ -1,6 +1,7 @@
 package com.diagbot.web;
 
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.IndicationDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.MrFacade;
 import com.diagbot.vo.MrVO;
@@ -44,4 +45,12 @@ public class MrController {
 	public RespDTO<PushJoinVO> getMr(@RequestBody @Valid MrVO mrVO) {
 		return RespDTO.onSuc(mrFacade.getMr(mrVO.getMrId()));
 	}
+
+	@ApiOperation(value = "获取提醒类结果 :[by:zhoutg]",
+			notes = "mrId: 病历编号,必填<br>")
+	@PostMapping("/getIndicationMr")
+	@SysLogger("getIndicationMr")
+	public RespDTO<IndicationDTO> getIndicationMr(@RequestBody @Valid MrVO mrVO) {
+		return RespDTO.onSuc(mrFacade.getIndicationMr(mrVO));
+	}
 }

+ 7 - 0
src/main/java/com/diagbot/web/PushController.java

@@ -64,6 +64,13 @@ public class PushController {
         return RespDTO.onSuc(data);
     }
 
+    @ApiOperation(value = "开单合理项推理扩展接口[by:zhoutg]", notes = "ruleType(1:危急值提醒,2:开单合理项,3:高危药品、手术,4:其他提醒)")
+    @PostMapping("/indicationExtPush")
+    @SysLogger("indicationExtPush")
+    @TokenAuth
+    public RespDTO<String> indicationExtPush(@RequestBody @Valid IndicationPushVO indicationPushVO) {
+        return RespDTO.onSuc(pushFacade.indicationExtPush(indicationPushVO));
+    }
 
     @ApiOperation(value = "推送持续检验检查计划API[zhaops]", notes = "operationName:随访手术")
     @PostMapping("/pushPlan")

+ 1 - 1
src/main/resources/application-dev.yml

@@ -158,7 +158,7 @@ mybatis-plus:
 
 io.github.lvyahui8.spring:
   base-packages: com.diagbot.aggregate
-  thread-number: 12
+  thread-number: 200
 
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}

+ 1 - 1
src/main/resources/application-local.yml

@@ -158,7 +158,7 @@ mybatis-plus:
 
 io.github.lvyahui8.spring:
   base-packages: com.diagbot.aggregate
-  thread-number: 12
+  thread-number: 200
 
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}

+ 1 - 1
src/main/resources/application-pre.yml

@@ -158,7 +158,7 @@ mybatis-plus:
 
 io.github.lvyahui8.spring:
   base-packages: com.diagbot.aggregate
-  thread-number: 12
+  thread-number: 200
 
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}

+ 1 - 1
src/main/resources/application-pro.yml

@@ -158,7 +158,7 @@ mybatis-plus:
 
 io.github.lvyahui8.spring:
   base-packages: com.diagbot.aggregate
-  thread-number: 12
+  thread-number: 200
 
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}

+ 1 - 1
src/main/resources/application-test.yml

@@ -158,7 +158,7 @@ mybatis-plus:
 
 io.github.lvyahui8.spring:
   base-packages: com.diagbot.aggregate
-  thread-number: 12
+  thread-number: 200
 
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}

+ 18 - 0
src/main/resources/mapper/SysUserHospitalMapper.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.SysUserHospitalMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.SysUserHospital">
+        <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="user_id" property="userId" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 18 - 0
src/main/resources/mapper/SysUserRoleMapper.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.SysUserRoleMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.SysUserRole">
+        <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="user_id" property="userId" />
+        <result column="role_id" property="roleId" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>