瀏覽代碼

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

Gaozk 2 年之前
父節點
當前提交
9d9e49698c
共有 34 個文件被更改,包括 1743 次插入7 次删除
  1. 4 0
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  2. 4 0
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  3. 144 0
      src/main/java/com/diagbot/entity/SysUserHospital.java
  4. 144 0
      src/main/java/com/diagbot/entity/SysUserRole.java
  5. 153 0
      src/main/java/com/diagbot/entity/TranDatadockingLog.java
  6. 9 0
      src/main/java/com/diagbot/facade/DataDockingLogFacade.java
  7. 286 0
      src/main/java/com/diagbot/facade/DataPageDockFacade.java
  8. 8 0
      src/main/java/com/diagbot/facade/SysUserHospitalFacade.java
  9. 8 0
      src/main/java/com/diagbot/facade/SysUserRoleFacade.java
  10. 82 0
      src/main/java/com/diagbot/facade/UserDockFacade.java
  11. 16 0
      src/main/java/com/diagbot/mapper/SysUserHospitalMapper.java
  12. 16 0
      src/main/java/com/diagbot/mapper/SysUserRoleMapper.java
  13. 16 0
      src/main/java/com/diagbot/mapper/TranDatadockingLogMapper.java
  14. 16 0
      src/main/java/com/diagbot/service/SysUserHospitalService.java
  15. 16 0
      src/main/java/com/diagbot/service/SysUserRoleService.java
  16. 16 0
      src/main/java/com/diagbot/service/TranDatadockingLogService.java
  17. 20 0
      src/main/java/com/diagbot/service/impl/SysUserHospitalServiceImpl.java
  18. 20 0
      src/main/java/com/diagbot/service/impl/SysUserRoleServiceImpl.java
  19. 20 0
      src/main/java/com/diagbot/service/impl/TranDatadockingLogServiceImpl.java
  20. 100 0
      src/main/java/com/diagbot/util/HttpUtils.java
  21. 0 1
      src/main/java/com/diagbot/vo/CdssLogBaseVO.java
  22. 206 0
      src/main/java/com/diagbot/vo/DataEngineVO.java
  23. 207 0
      src/main/java/com/diagbot/vo/DataPageDockVO.java
  24. 44 0
      src/main/java/com/diagbot/vo/HisStaticKnowledgeVO.java
  25. 12 0
      src/main/java/com/diagbot/vo/UserInfoVO.java
  26. 94 0
      src/main/java/com/diagbot/web/DataPageDockController.java
  27. 5 1
      src/main/resources/application-dev.yml
  28. 6 2
      src/main/resources/application-local.yml
  29. 5 1
      src/main/resources/application-pre.yml
  30. 5 1
      src/main/resources/application-pro.yml
  31. 5 1
      src/main/resources/application-test.yml
  32. 18 0
      src/main/resources/mapper/SysUserHospitalMapper.xml
  33. 18 0
      src/main/resources/mapper/SysUserRoleMapper.xml
  34. 20 0
      src/main/resources/mapper/TranDatadockingLogMapper.xml

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

@@ -141,6 +141,10 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/test/logTest").permitAll()
                 .antMatchers("/klRule/getRulePage").permitAll()
                 .antMatchers("/klRule/getRuleDetail").permitAll()
+                .antMatchers("/dataPage/docking/getDataService").permitAll()
+                .antMatchers("/dataPage/docking/getStaticKnowledge").permitAll()
+                .antMatchers("/dataPage/docking/getDataEngine").permitAll()
+                .antMatchers("/dataPage/docking/addUserAndRole").permitAll()
                 .antMatchers("/**").authenticated();
         //                .antMatchers("/**").permitAll();
     }

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

@@ -183,6 +183,10 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/test/logTest", request)
                 || matchers("/klRule/getRulePage", request)
                 || matchers("/klRule/getRuleDetail", request)
+                || matchers("/dataPage/docking/getDataService", request)
+                || matchers("/dataPage/docking/getStaticKnowledge", request)
+                || matchers("/dataPage/docking/getDataEngine", request)
+                || matchers("/dataPage/docking/addUserAndRole", request)
                 || matchers("/", request)) {
             return true;
         }

+ 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 +
+        "}";
+    }
+}

+ 153 - 0
src/main/java/com/diagbot/entity/TranDatadockingLog.java

@@ -0,0 +1,153 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 推理时保存输入输出的参数信息
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-11-05
+ */
+public class TranDatadockingLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 医院编码、ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 科室编码、ID
+     */
+    private String hosptialDeptCode;
+
+    /**
+     * 医生编码、ID
+     */
+    private String doctorCode;
+
+    /**
+     * 就诊id
+     */
+    private String inquiryCode;
+
+    private Integer age;
+
+    private String sexType;
+
+    private String paramIn;
+
+    private String paramOut;
+
+    private Date transTime;
+
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+    public String getHosptialDeptCode() {
+        return hosptialDeptCode;
+    }
+
+    public void setHosptialDeptCode(String hosptialDeptCode) {
+        this.hosptialDeptCode = hosptialDeptCode;
+    }
+    public String getDoctorCode() {
+        return doctorCode;
+    }
+
+    public void setDoctorCode(String doctorCode) {
+        this.doctorCode = doctorCode;
+    }
+    public String getInquiryCode() {
+        return inquiryCode;
+    }
+
+    public void setInquiryCode(String inquiryCode) {
+        this.inquiryCode = inquiryCode;
+    }
+    public Integer getAge() {
+        return age;
+    }
+
+    public void setAge(Integer age) {
+        this.age = age;
+    }
+    public String getSexType() {
+        return sexType;
+    }
+
+    public void setSexType(String sexType) {
+        this.sexType = sexType;
+    }
+    public String getParamIn() {
+        return paramIn;
+    }
+
+    public void setParamIn(String paramIn) {
+        this.paramIn = paramIn;
+    }
+    public String getParamOut() {
+        return paramOut;
+    }
+
+    public void setParamOut(String paramOut) {
+        this.paramOut = paramOut;
+    }
+    public Date getTransTime() {
+        return transTime;
+    }
+
+    public void setTransTime(Date transTime) {
+        this.transTime = transTime;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "TranDatadockingLog{" +
+            "id=" + id +
+            ", hospitalId=" + hospitalId +
+            ", hosptialDeptCode=" + hosptialDeptCode +
+            ", doctorCode=" + doctorCode +
+            ", inquiryCode=" + inquiryCode +
+            ", age=" + age +
+            ", sexType=" + sexType +
+            ", paramIn=" + paramIn +
+            ", paramOut=" + paramOut +
+            ", transTime=" + transTime +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 9 - 0
src/main/java/com/diagbot/facade/DataDockingLogFacade.java

@@ -0,0 +1,9 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.TranDatadockingLogService;
+import com.diagbot.service.impl.TranDatadockingLogServiceImpl;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DataDockingLogFacade extends TranDatadockingLogServiceImpl {
+}

+ 286 - 0
src/main/java/com/diagbot/facade/DataPageDockFacade.java

@@ -0,0 +1,286 @@
+package com.diagbot.facade;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.IndicationDTO;
+import com.diagbot.dto.PushDTO;
+import com.diagbot.dto.PushPlanDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.SysUser;
+import com.diagbot.entity.TranDatadockingLog;
+import com.diagbot.entity.TranHospitalRelation;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.StatusEnum;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.CdssLogUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/*
+ * @Description:对外对接业务处理类
+ * @Author:liuqq
+ * @time: 2020/11/04 14:51
+ **/
+@Component
+@Slf4j
+public class DataPageDockFacade {
+
+    @Autowired
+    private MrFacade mrFacade;
+
+    @Autowired
+    private PushFacade pushFacade;
+
+    @Autowired
+    private DataDockingLogFacade dataDockingLogFacade;
+
+    @Autowired
+    private TranHospitalRelationFacade tranHospitalRelationFacade;
+
+    @Value("${data-page.url}")
+    private String dataPageUrl;
+
+    @Autowired
+    private KlConceptStaticFacade KlConceptStaticFacade;
+
+    /**
+     * @Description:静态知识开单合理性
+     * @Author:liuqq
+     * @time: ${DATE} ${TIME}
+     **/
+    public RespDTO<String> getStaticKnowledge(HisStaticKnowledgeVO hisStaticKnowledgeVO){
+        String url="";
+        //基层子医院业务逻辑
+        if(StringUtil.isNotEmpty(hisStaticKnowledgeVO.getHospitalCode()) && StringUtil.isNotEmpty(hisStaticKnowledgeVO.getHospitalName())){
+            //查找基层医院
+            Long hospitalId=getHospitalRelation(hisStaticKnowledgeVO.getHospitalCode(),hisStaticKnowledgeVO.getHospitalName());
+            if(hospitalId!=null){
+                hisStaticKnowledgeVO.setHospitalId(hospitalId);
+            }else{
+                return RespDTO.onError("子医院信息异常");
+            }
+        }else if(hisStaticKnowledgeVO.getHospitalId()==null){
+             return RespDTO.onError("请输入医院id");
+        }
+        //初始日志记录信息
+        hisStaticKnowledgeVO.setSubHospitalCode(hisStaticKnowledgeVO.getHospitalCode());
+        hisStaticKnowledgeVO.setSubHospitalName(hisStaticKnowledgeVO.getHospitalName());
+        //hisStaticKnowledgeVO.setSceneName();
+        //判断是否有静态知识
+        StaticKnowledgeHISVO staticKnowledgeHISVO=new StaticKnowledgeHISVO();
+        BeanUtils.copyProperties(hisStaticKnowledgeVO,staticKnowledgeHISVO);
+        Boolean flag=KlConceptStaticFacade.isExistForHIS(staticKnowledgeHISVO);
+        //如果有返回静态知识url地址
+        if(flag){
+            url=dataPageUrl+"/informationOut.html?hospitalId="+hisStaticKnowledgeVO.getHospitalId()
+                    +"&type="+hisStaticKnowledgeVO.getType()
+                    +"&hisName="+hisStaticKnowledgeVO.getHisName();
+            if(StringUtil.isNotEmpty(hisStaticKnowledgeVO.getHisDetailName())){
+                url+="&hisDetailName="+hisStaticKnowledgeVO.getHisDetailName();
+            }
+            return RespDTO.onSuc(url);
+        }else{
+            return RespDTO.onError("无静态知识");
+        }
+    }
+
+    /**
+     * @Description:页面推送模式
+     * @Author:liuqq
+     * @time: ${DATE} ${TIME}
+     **/
+    public RespDTO<String> getDataService(DataPageDockVO dataPageDockVO) {
+        if(StringUtil.isNotEmpty(dataPageDockVO.getHospitalCode()) && StringUtil.isNotEmpty(dataPageDockVO.getHospitalName())){
+            //基层子医院业务逻辑
+            Long hospitalId=getHospitalRelation(dataPageDockVO.getHospitalCode(),dataPageDockVO.getHospitalName());
+            if(hospitalId!=null){
+                dataPageDockVO.setHospitalId(hospitalId);
+            }else{
+                return RespDTO.onError("子医院信息异常");
+            }
+        }if(dataPageDockVO.getHospitalId()==null){
+            return RespDTO.onError("请输入医院id");
+        }else if("".equals(dataPageDockVO.getShowType())){
+            return RespDTO.onError("请输入展示类型,横版:ver,或竖版hor");
+        }else if("".equals(dataPageDockVO.getPlanCode())){
+            return RespDTO.onError("请输入方案编码");
+        }
+        //初始日志记录信息
+        dataPageDockVO.setSubHospitalCode(dataPageDockVO.getHospitalCode());
+        dataPageDockVO.setSubHospitalName(dataPageDockVO.getHospitalName());
+        dataPageDockVO.setSceneName(dataPageDockVO.getPlanCode());
+
+        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") || dataPageDockVO.getPlanCode().equals("reference_pacs") || dataPageDockVO.getPlanCode().equals("reference_lis")){
+            IndicationPushVO indicationPushVO=new IndicationPushVO();
+            //初始化开单合理性入参
+            BeanUtil.copyProperties(dataPageDockVO,indicationPushVO);
+            //ruleType(1:危急值提醒,2:开单合理项,3:高危药品、手术,4:其他提醒)
+            indicationPushVO.setRuleType("2,3,4");
+            //日志中增加入参,将开单合理性参数进行拼接记录
+            //CdssLogUtil.addBizReq(indicationPushVO);
+            //调用开单合理性接口
+            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("无开单合理性提醒!");
+            }
+            //将开单合理性结果进行拼接记录
+            //CdssLogUtil.addBizResp(indicationPushVO);
+        }
+
+        if("hor".equals(dataPageDockVO.getShowType())){
+            url=dataPageUrl+"/cdssHorizontal.html?pushMrId="+pushMrId+"&mrId="+mrId+"&hospitalId="+dataPageDockVO.getHospitalId()+"&planCode="+dataPageDockVO.getPlanCode();
+        }else{
+            url=dataPageUrl+"/cdss.html?pushMrId="+pushMrId+"&mrId="+mrId+"&hospitalId="+dataPageDockVO.getHospitalId()+"&planCode="+dataPageDockVO.getPlanCode();
+        }
+        return RespDTO.onSuc(url);
+    }
+
+    /**
+     * @Description:病历推理
+     * @Author:liuqq
+     * @time: ${DATE} ${TIME}
+     **/
+    public RespDTO getEnginePush(DataEngineVO dataEngineVO) {
+        //基层子医院业务逻辑
+        if(StringUtil.isNotEmpty(dataEngineVO.getHospitalCode()) && StringUtil.isNotEmpty(dataEngineVO.getHospitalName())){
+            //查找基层医院
+            Long hospitalId=getHospitalRelation(dataEngineVO.getHospitalCode(),dataEngineVO.getHospitalName());
+            if(hospitalId!=null){
+                dataEngineVO.setHospitalId(hospitalId);
+            }else{
+                return RespDTO.onError("子医院信息异常");
+            }
+        }else if(dataEngineVO.getHospitalId()==null){
+            return RespDTO.onError("请输入医院id");
+        }else if("".equals(dataEngineVO.getPlanCode())){
+            return RespDTO.onError("请输入方案编码");
+        }
+        //初始日志记录信息
+        dataEngineVO.setSubHospitalCode(dataEngineVO.getHospitalCode());
+        dataEngineVO.setSubHospitalName(dataEngineVO.getHospitalName());
+        dataEngineVO.setSceneName(dataEngineVO.getPlanCode());
+        //dataEngineVO.setFeatureType("1,4,5,6,7,8,9,10");//推理类型
+
+        PushVO pushVO = new PushVO();
+        BeanUtil.copyProperties(dataEngineVO, pushVO);
+        //增加处理后的入参
+        CdssLogUtil.addBizReq(pushVO);
+        PushDTO pushDTO=pushFacade.push(pushVO);
+        pushDTO.setDebug(null);
+        return RespDTO.onSuc(pushDTO);
+    }
+
+    /**
+     * @Description: 开单合理性及检查、检查报告检阅
+     * @Author:liuqq
+     * @time: ${DATE} ${TIME}
+     **/
+    public RespDTO getEngineIndicationPush(DataEngineVO dataEngineVO) {
+        //基层子医院业务逻辑
+        if(StringUtil.isNotEmpty(dataEngineVO.getHospitalCode()) && StringUtil.isNotEmpty(dataEngineVO.getHospitalName())){
+            //查找基层医院
+            Long hospitalId=getHospitalRelation(dataEngineVO.getHospitalCode(),dataEngineVO.getHospitalName());
+            if(hospitalId!=null){
+                dataEngineVO.setHospitalId(hospitalId);
+            }else{
+                return RespDTO.onError("子医院信息异常");
+            }
+        }else if(dataEngineVO.getHospitalId()==null){
+            return RespDTO.onError("请输入医院id");
+        }else if("".equals(dataEngineVO.getPlanCode())){
+            return RespDTO.onError("请输入方案编码");
+        }
+        //初始日志记录信息
+        dataEngineVO.setSubHospitalCode(dataEngineVO.getHospitalCode());
+        dataEngineVO.setSubHospitalName(dataEngineVO.getHospitalName());
+        dataEngineVO.setSceneName(dataEngineVO.getPlanCode());
+        //dataEngineVO.setFeatureType("1,4,5,6,7,8,9,10");//推理类型
+        //dataEngineVO.setRuleType("2,3,4");//推理类型(1:危急值提醒,2:开单合理项,3:高危药品、手术,4:其他提醒)
+
+        IndicationPushVO indicationPushVO=new IndicationPushVO();
+        BeanUtil.copyProperties(dataEngineVO, indicationPushVO);
+
+        //增加处理后的入参
+        CdssLogUtil.addBizReq(indicationPushVO);
+        IndicationDTO indicationDTO=pushFacade.indicationPush(indicationPushVO);
+        indicationDTO.setDebug(null);
+
+        if (indicationDTO != null) {
+            if (ListUtil.isNotEmpty(indicationDTO.getHighRiskList())
+                    || ListUtil.isNotEmpty(indicationDTO.getCriticalValList()) || ListUtil.isNotEmpty(indicationDTO.getOtherList()))
+            {
+                return RespDTO.onSuc(indicationDTO);
+            }else{
+                return RespDTO.onError("无开单合理性提醒!");
+            }
+        }else{
+            return RespDTO.onError("无开单合理性提醒!");
+        }
+    }
+
+
+    public PushPlanDTO getOperationPlanPush(DataEngineVO dataEngineVO){
+        PushPlanVO pushPlanVO=new PushPlanVO();
+        BeanUtil.copyProperties(dataEngineVO, pushPlanVO);
+
+        PushPlanDTO pushPlanDTO=pushFacade.pushPlan(pushPlanVO);
+        pushPlanDTO.setDebug(null);
+        try{
+            TranDatadockingLog tranDatadockingLog=new TranDatadockingLog();
+            tranDatadockingLog.setHospitalId(dataEngineVO.getHospitalId());
+            tranDatadockingLog.setParamIn(JSON.toJSONString(dataEngineVO));
+            tranDatadockingLog.setParamOut(JSON.toJSONString(pushPlanDTO));
+            tranDatadockingLog.setRemark("数据引擎模式,"+dataEngineVO.getPlanCode());
+
+            tranDatadockingLog.setTransTime(new Date());
+
+            dataDockingLogFacade.save(tranDatadockingLog);
+        }catch (Exception e){
+            log.error("数据引擎模式,增加日志异常",e.getMessage());
+        }
+        return pushPlanDTO;
+    }
+
+    private Long getHospitalRelation(String hospitalCode,String hospitalName){
+        Long hospitalId=null;
+        try{
+            TranHospitalRelation tranHospitalRelation=new TranHospitalRelation();
+            QueryWrapper<TranHospitalRelation> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("code", hospitalCode)
+                    .eq("name", hospitalName)
+                    .eq("is_deleted", IsDeleteEnum.N.getKey());
+            tranHospitalRelation=tranHospitalRelationFacade.getOne(queryWrapper);
+            if(tranHospitalRelation!=null){
+                hospitalId=tranHospitalRelation.getHospitalId();
+            }
+        }catch (Exception e){
+            log.error("子医院信息获取异常======",e.getMessage());
+            e.printStackTrace();
+        }
+        return hospitalId;
+    }
+
+}

+ 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/mapper/TranDatadockingLogMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.TranDatadockingLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 推理时保存输入输出的参数信息 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-11-05
+ */
+public interface TranDatadockingLogMapper extends BaseMapper<TranDatadockingLog> {
+
+}

+ 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> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.TranDatadockingLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 推理时保存输入输出的参数信息 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-11-05
+ */
+public interface TranDatadockingLogService extends IService<TranDatadockingLog> {
+
+}

+ 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 {
+
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.TranDatadockingLog;
+import com.diagbot.mapper.TranDatadockingLogMapper;
+import com.diagbot.service.TranDatadockingLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 推理时保存输入输出的参数信息 服务实现类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-11-05
+ */
+@Service
+public class TranDatadockingLogServiceImpl extends ServiceImpl<TranDatadockingLogMapper, TranDatadockingLog> implements TranDatadockingLogService {
+
+}

+ 100 - 0
src/main/java/com/diagbot/util/HttpUtils.java

@@ -0,0 +1,100 @@
+package com.diagbot.util;
+
+
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Enumeration;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * @Description: http请求功能工具类
+ * @author: gaodm
+ * @time: 2018/8/3 17:45
+ */
+public class HttpUtils {
+
+
+    /**
+     * 尝试获取当前请求的HttpServletRequest实例
+     *
+     * @return HttpServletRequest
+     */
+    public static HttpServletRequest getHttpServletRequest() {
+        try {
+            return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+
+    public static Map<String, String> getHeaders(HttpServletRequest request) {
+        Map<String, String> map = new LinkedHashMap<>();
+        Enumeration<String> enumeration = request.getHeaderNames();
+        while (enumeration.hasMoreElements()) {
+            String key = enumeration.nextElement();
+            String value = request.getHeader(key);
+            map.put(key, value);
+        }
+        return map;
+    }
+
+    /**
+     * 获取请求客户端的真实ip地址
+     *
+     * @param request 请求对象
+     * @return ip地址
+     */
+    public static String getIpAddress(HttpServletRequest request) {
+
+        // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
+        String ip = request.getHeader("X-Forwarded-For");
+
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("Proxy-Client-IP");
+            }
+            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("WL-Proxy-Client-IP");
+            }
+            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("HTTP_CLIENT_IP");
+            }
+            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+            }
+            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("X-Real-IP");
+            }
+            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getRemoteAddr();
+            }
+        } else if (ip.length() > 15) {
+            String[] ips = ip.split(",");
+            for (int index = 0; index < ips.length; index++) {
+                String strIp = (String) ips[index];
+                if (!("unknown".equalsIgnoreCase(strIp))) {
+                    ip = strIp;
+                    break;
+                }
+            }
+        }
+        return ip;
+    }
+
+    /**
+     * 获取请求客户端的真实ip地址
+     *
+     * @param
+     * @return ip地址
+     */
+    public static String getIpAddress() {
+        // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
+        return getIpAddress(getHttpServletRequest());
+    }
+
+
+}

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

@@ -21,7 +21,6 @@ public class CdssLogBaseVO {
     /**
      * 医院id
      */
-    @NotNull(message = "请输入医院id")
     private Long hospitalId;
 
     /**

+ 206 - 0
src/main/java/com/diagbot/vo/DataEngineVO.java

@@ -0,0 +1,206 @@
+package com.diagbot.vo;
+
+import com.diagbot.biz.push.entity.Item;
+import com.diagbot.biz.push.entity.Lis;
+import com.diagbot.biz.push.entity.Pacs;
+import com.diagbot.biz.push.entity.Scale;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Getter
+@Setter
+public class DataEngineVO extends CdssLogBaseVO{
+
+    @NotNull(message = "请输入方案编码")
+    private String planCode;//方案编码,用于控制哪些展示项
+
+    /**
+     * 推理类型(1:症状,4:查体结果,5:检验,6:检查,7:诊断,8:药品,9:手术)
+     */
+    private String featureType = "";
+
+    /**
+     * 规则类型(1:危急值提醒,2:开单合理项,3:高危药品、手术,4:其他提醒)
+     */
+    private String ruleType = "";
+
+    /**
+     * 是否获取静态知识(0:不获取,1:获取)
+     */
+    @ApiModelProperty(hidden = true)
+    private Integer getStaticKnowledge = 0;
+
+    /**
+     * 医院编码
+     */
+    private String hospitalCode;
+    /**
+     * 医院名称
+     */
+    private String hospitalName;
+
+    /**
+     * 年龄文本数据
+     */
+    private String age;
+
+    /**
+     * 性别(1:男,2:女,3:通用)
+     */
+    private Integer sex;
+    /**
+     * 婚姻
+     */
+    private String marriage = "";
+    /**
+     * 主诉
+     */
+    private String chief = "";
+    /**
+     * 现病史
+     */
+    private String symptom = "";
+    /**
+     * 查体
+     */
+    private String vital = "";
+    /**
+     * 既往史
+     */
+    private String pasts = "";
+    /**
+     * 传染病史
+     */
+    private String infectious = "";
+    /**
+     * 手术外伤史
+     */
+    private String surgical = "";
+    /**
+     * 过敏史
+     */
+    private String allergy = "";
+    /**
+     * 接种史
+     */
+    private String vaccination = "";
+    /**
+     * 个人史
+     */
+    private String personal = "";
+    /**
+     * 婚育史
+     */
+    private String marital = "";
+    /**
+     * 家族史
+     */
+    private String family = "";
+    /**
+     * 月经史
+     */
+    private String menstrual = "";
+    /**
+     * 其他史
+     */
+    private String other = "";
+    /**
+     * 化验文本数据
+     */
+    private String lisString = "";
+    /**
+     * 辅检文本数据
+     */
+    private String pacsString = "";
+    /**
+     * 诊断文本数据
+     */
+    private String diagString = "";
+    /**
+     * 药品文本数据
+     */
+    private String drugString = "";
+    /**
+     * 科室
+     */
+    private List<Item> dept = new ArrayList<>();
+    /**
+     * 化验项目和结果
+     */
+    private List<Lis> lis = new ArrayList<>();
+    /**
+     * 辅检项目和结果
+     */
+    private List<Pacs> pacs = new ArrayList<>();
+    /**
+     * 诊断
+     */
+    private List<Item> diag = new ArrayList<>();
+    /**
+     * 药品
+     */
+    private List<Drug> drug = new ArrayList<>();
+    /**
+     * 手术及操作
+     */
+    private List<Item> operation = new ArrayList<>();
+    /**
+     * 输血记录
+     */
+    private List<ItemExt> transfusion = new ArrayList<>();
+    /**
+     * 当前化验开单项
+     */
+    private List<Lis> lisOrder = new ArrayList<>();
+    /**
+     * 当前辅检开单项
+     */
+    private List<Pacs> pacsOrder = new ArrayList<>();
+    /**
+     * 当前诊断开单项
+     */
+    private List<Item> diagOrder = new ArrayList<>();
+    /**
+     * 当前药品开单项
+     */
+    private List<Drug> drugOrder = new ArrayList<>();
+    /**
+     * 当前手术开单项
+     */
+    private List<Item> operationOrder = new ArrayList<>();
+    /**
+     * 当前输血开单项
+     */
+    private List<ItemExt> transfusionOrder = new ArrayList<>();
+    /**
+     * 其他开单项
+     */
+    private List<Item> otherOrder = new ArrayList<>();
+    /**
+     * 选中诊断
+     */
+    private Item diseaseName;
+    /**
+     * 选中手术
+     */
+    private Item operationName;
+    /**
+     * 其他指标
+     */
+    private Map<String, String> otherIndex;
+    /**
+     * 其他医嘱
+     */
+    private List<Item> otherAdvice = new ArrayList<>();
+    /**
+     * 量表结果
+     */
+    private List<Scale> scale = new ArrayList<>();
+}

+ 207 - 0
src/main/java/com/diagbot/vo/DataPageDockVO.java

@@ -0,0 +1,207 @@
+package com.diagbot.vo;
+
+import com.diagbot.biz.push.entity.Item;
+import com.diagbot.biz.push.entity.Lis;
+import com.diagbot.biz.push.entity.Pacs;
+import com.diagbot.biz.push.entity.Scale;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 对外对接基础推理入参
+ * @Author:liuqq
+ * @time: ${DATE} ${TIME}
+ **/
+@Getter
+@Setter
+public class DataPageDockVO extends CdssLogBaseVO{
+    @NotNull(message = "请输入展示类型,横版:ver,或竖版hor")
+    private String showType;//横版:ver,或竖版hor
+
+    @NotNull(message = "请输入方案编码")
+    private String planCode;//方案编码,用于控制哪些展示项
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+    /**
+     * 医院编码
+     */
+    private String hospitalCode;
+    /**
+     * 医院名称
+     */
+    private String hospitalName;
+    /**
+     * 大数据返回内容截取长度
+     */
+    private Integer length = 10;
+    /**
+     * 年龄文本数据
+     */
+    private String age;
+    /**
+     * 年龄数字数据
+     */
+    @ApiModelProperty(hidden = true)
+    private Double ageNum;
+    /**
+     * 性别(1:男,2:女,3:通用)
+     */
+    private Integer sex;
+    /**
+     * 婚姻
+     */
+    private String marriage = "";
+    /**
+     * 主诉
+     */
+    private String chief = "";
+    /**
+     * 现病史
+     */
+    private String symptom = "";
+    /**
+     * 查体
+     */
+    private String vital = "";
+    /**
+     * 既往史
+     */
+    private String pasts = "";
+    /**
+     * 传染病史
+     */
+    private String infectious = "";
+    /**
+     * 手术外伤史
+     */
+    private String surgical = "";
+    /**
+     * 过敏史
+     */
+    private String allergy = "";
+    /**
+     * 接种史
+     */
+    private String vaccination = "";
+    /**
+     * 个人史
+     */
+    private String personal = "";
+    /**
+     * 婚育史
+     */
+    private String marital = "";
+    /**
+     * 家族史
+     */
+    private String family = "";
+    /**
+     * 月经史
+     */
+    private String menstrual = "";
+    /**
+     * 其他史
+     */
+    private String other = "";
+    /**
+     * 化验文本数据
+     */
+    private String lisString = "";
+    /**
+     * 辅检文本数据
+     */
+    private String pacsString = "";
+    /**
+     * 诊断文本数据
+     */
+    private String diagString = "";
+    /**
+     * 药品文本数据
+     */
+    private String drugString = "";
+    /**
+     * 科室
+     */
+    private List<Item> dept = new ArrayList<>();
+    /**
+     * 化验项目和结果
+     */
+    private List<Lis> lis = new ArrayList<>();
+    /**
+     * 辅检项目和结果
+     */
+    private List<Pacs> pacs = new ArrayList<>();
+    /**
+     * 诊断
+     */
+    private List<Item> diag = new ArrayList<>();
+    /**
+     * 药品
+     */
+    private List<Drug> drug = new ArrayList<>();
+    /**
+     * 手术及操作
+     */
+    private List<Item> operation = new ArrayList<>();
+    /**
+     * 输血记录
+     */
+    private List<ItemExt> transfusion = new ArrayList<>();
+    /**
+     * 当前化验开单项
+     */
+    private List<Lis> lisOrder = new ArrayList<>();
+    /**
+     * 当前辅检开单项
+     */
+    private List<Pacs> pacsOrder = new ArrayList<>();
+    /**
+     * 当前诊断开单项
+     */
+    private List<Item> diagOrder = new ArrayList<>();
+    /**
+     * 当前药品开单项
+     */
+    private List<Drug> drugOrder = new ArrayList<>();
+    /**
+     * 当前手术开单项
+     */
+    private List<Item> operationOrder = new ArrayList<>();
+    /**
+     * 当前输血开单项
+     */
+    private List<ItemExt> transfusionOrder = new ArrayList<>();
+    /**
+     * 其他开单项
+     */
+    private List<Item> otherOrder = new ArrayList<>();
+    /**
+     * 选中诊断
+     */
+    private Item diseaseName;
+    /**
+     * 选中手术
+     */
+    private Item operationName;
+    /**
+     * 其他指标
+     */
+    private Map<String, String> otherIndex;
+    /**
+     * 其他医嘱
+     */
+    private List<Item> otherAdvice = new ArrayList<>();
+    /**
+     * 量表结果
+     */
+    private List<Scale> scale = new ArrayList<>();
+}

+ 44 - 0
src/main/java/com/diagbot/vo/HisStaticKnowledgeVO.java

@@ -0,0 +1,44 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Getter
+@Setter
+public class HisStaticKnowledgeVO extends CdssLogBaseVO{
+    /**
+     * 医院编码
+     */
+    private String hospitalCode;
+    /**
+     * 医院名称
+     */
+    private String hospitalName;
+
+    /**
+     * his名称
+     */
+    private String hisName;
+    /**
+     * his明细名称
+     */
+    private String hisDetailName;
+
+    /**
+     * 标准术语名称
+     */
+    private String name;
+    /**
+     * 术语类型
+     */
+    @NotNull(message = "请输入术语类型:1-诊断、2-药品、3-检验套餐、4-检验细项、5-检查、6-检查子项、7-手术和操作")
+    private Integer type;
+    /**
+     * 内容类型:1-化验、辅检、手术和操作、诊断、药品静态信息,2-注意事项,3-临床路径,4-治疗方案
+     */
+    private List<Integer> contentTypes;
+
+}

+ 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)
+}

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

@@ -0,0 +1,94 @@
+package com.diagbot.web;
+
+import com.diagbot.annotation.CdssLog;
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.DataPageDockFacade;
+import com.diagbot.facade.UserDockFacade;
+import com.diagbot.vo.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * @Description: 页面推送模式-对接API 控制器
+ * @Author:liuqq
+ * @time:
+ **/
+@RestController
+@RequestMapping("/dataPage/docking")
+@Api(value = "页面推送模式-对接API", tags = { "页面推送模式-对接API" })
+public class DataPageDockController {
+
+    @Autowired
+    private DataPageDockFacade dataPageDockFacade;
+
+    @Autowired
+    private UserDockFacade userDockFacade;
+
+    @ApiOperation(value = "页面推送模式-推理API[QQ]",
+            notes = "")
+    @PostMapping("/getDataService")
+    @SysLogger("getDataService")
+    @CdssLog("页面推送")
+    public RespDTO<String> getDataService(@Valid @RequestBody DataPageDockVO dataPageDockVO) {
+        return dataPageDockFacade.getDataService(dataPageDockVO);
+    }
+
+    @ApiOperation(value = "页面推送模式-静态知识API[QQ]",
+            notes = "")
+    @PostMapping("/getStaticKnowledge")
+    @SysLogger("getStaticKnowledge")
+    @CdssLog("静态知识")
+    public RespDTO<String> getStaticKnowledge(@Valid @RequestBody HisStaticKnowledgeVO hisStaticKnowledgeVO){
+        return dataPageDockFacade.getStaticKnowledge(hisStaticKnowledgeVO);
+    }
+
+    @ApiOperation(value = "数据引擎模式-对接API[QQ]",
+            notes = "")
+    @PostMapping("/getDataEngine")
+    @SysLogger("getDataEngine")
+    @CdssLog("推理")
+    public RespDTO<T> getDataEngine(@Valid @RequestBody DataEngineVO dataEngineVO) {
+        //类型(多选必填),1:症状,4:查体结果,5:检验,6:检查,7:诊断,8:药品,9:手术,10:一般治疗
+        if("medical_record".equals(dataEngineVO.getPlanCode())){
+            //病历推送
+            dataEngineVO.setFeatureType("1,4,5,6,7,8,9,10");
+            return RespDTO.onSuc(dataPageDockFacade.getEnginePush(dataEngineVO));
+        }else if("medical_advice".equals(dataEngineVO.getPlanCode())){
+            //医嘱推送
+            dataEngineVO.setFeatureType("5,6,8,10");
+            return RespDTO.onSuc(dataPageDockFacade.getEnginePush(dataEngineVO));
+        }else if("order_rational".equals(dataEngineVO.getPlanCode())){
+            //规则类型(1:危急值提醒,2:开单合理项,3:高危药品、手术,4:其他提醒)
+            //开单合理性
+            dataEngineVO.setRuleType("2,3,4");
+            //dataEngineVO.setRuleType("2");
+            return RespDTO.onSuc(dataPageDockFacade.getEngineIndicationPush(dataEngineVO));
+        }else if("reference_pacs".equals(dataEngineVO.getPlanCode()) || "reference_lis".equals(dataEngineVO.getPlanCode())){
+            //规则类型(1:危急值提醒,2:开单合理项,3:高危药品、手术,4:其他提醒)
+            //开单合理性
+            dataEngineVO.setRuleType("4");
+            //dataEngineVO.setRuleType("2");
+            return RespDTO.onSuc(dataPageDockFacade.getEngineIndicationPush(dataEngineVO));
+        }else if("operation_plan".equals(dataEngineVO.getPlanCode())){
+            //手术随访计划
+            return RespDTO.onSuc(dataPageDockFacade.getOperationPlanPush(dataEngineVO));
+        }
+
+        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));
+    }
+
+}

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

@@ -209,4 +209,8 @@ mrqc:
 
 #CDSS核心地址
 cdss-core:
-  url: http://192.168.2.236:7010
+  url: http://192.168.2.236:7010
+
+#页面推送模式地址配置
+data-page:
+  url: http://127.0.0.1:5654

+ 6 - 2
src/main/resources/application-local.yml

@@ -66,7 +66,7 @@ spring:
     druid:
       driver-class-name: com.mysql.cj.jdbc.Driver
       platform: mysql
-      url: jdbc:mysql://192.168.2.236:3306/cdss?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&allowMultiQueries=true
+      url: jdbc:mysql://192.168.2.122:3306/cdss?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&allowMultiQueries=true
       username: root
       password: lantone
       # 连接池的配置信息
@@ -138,7 +138,7 @@ spring:
       token: 15 # Token索引
       mr: 15 # 病历索引
     host: 192.168.2.236  #Redis服务器地址
-    port: 6378 # Redis服务器连接端口(本地环境端口6378,其他环境端口是6379)
+    port: 6379 # Redis服务器连接端口(本地环境端口6378,其他环境端口是6379)
     password: lantone # Redis服务器连接密码(默认为空)
     lettuce:
       pool:
@@ -210,3 +210,7 @@ mrqc:
 #CDSS核心地址
 cdss-core:
   url: http://192.168.2.236:7010
+
+#页面推送模式地址配置
+data-page:
+  url: http://192.168.2.122:5654

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

@@ -210,4 +210,8 @@ mrqc:
 
 #CDSS核心地址
 cdss-core:
-  url: http://192.168.2.121:7010
+  url: http://192.168.2.121:7010
+
+#页面推送模式地址配置
+data-page:
+  url: http://127.0.0.1:5654

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

@@ -209,4 +209,8 @@ mrqc:
 
 #CDSS核心地址
 cdss-core:
-  url: http://192.168.2.122:7010
+  url: http://192.168.2.122:7010
+
+#页面推送模式地址配置
+data-page:
+  url: http://127.0.0.1:5654

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

@@ -209,4 +209,8 @@ mrqc:
 
 #CDSS核心地址
 cdss-core:
-  url: http://192.168.2.241:7010
+  url: http://192.168.2.241:7010
+
+#页面推送模式地址配置
+data-page:
+  url: http://127.0.0.1:5654

+ 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>

+ 20 - 0
src/main/resources/mapper/TranDatadockingLogMapper.xml

@@ -0,0 +1,20 @@
+<?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.TranDatadockingLogMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.TranDatadockingLog">
+        <id column="id" property="id" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="hosptial_dept_code" property="hosptialDeptCode" />
+        <result column="doctor_code" property="doctorCode" />
+        <result column="inquiry_code" property="inquiryCode" />
+        <result column="age" property="age" />
+        <result column="sex_type" property="sexType" />
+        <result column="param_in" property="paramIn" />
+        <result column="param_out" property="paramOut" />
+        <result column="trans_time" property="transTime" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>