Selaa lähdekoodia

Merge remote-tracking branch 'origin/debug' into debug

wangfeng 5 vuotta sitten
vanhempi
commit
771972ab2c
26 muutettua tiedostoa jossa 694 lisäystä ja 35 poistoa
  1. 1 0
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  2. 1 0
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  3. 38 0
      src/main/java/com/diagbot/dto/AnalyzeDTO.java
  4. 86 0
      src/main/java/com/diagbot/dto/BehosDTO.java
  5. 26 0
      src/main/java/com/diagbot/dto/MsgDTO.java
  6. 41 0
      src/main/java/com/diagbot/dto/QcModeDTO.java
  7. 40 0
      src/main/java/com/diagbot/dto/QcResultDTO.java
  8. 68 0
      src/main/java/com/diagbot/entity/QcMode.java
  9. 13 0
      src/main/java/com/diagbot/entity/QcresultDetail.java
  10. 33 6
      src/main/java/com/diagbot/facade/AlgorithmFacade.java
  11. 63 9
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  12. 40 0
      src/main/java/com/diagbot/facade/QcModeFacade.java
  13. 57 8
      src/main/java/com/diagbot/facade/QcresultInfoFacade.java
  14. 6 0
      src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java
  15. 16 0
      src/main/java/com/diagbot/mapper/QcModeMapper.java
  16. 6 0
      src/main/java/com/diagbot/service/BehospitalInfoService.java
  17. 16 0
      src/main/java/com/diagbot/service/QcModeService.java
  18. 9 0
      src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java
  19. 20 0
      src/main/java/com/diagbot/service/impl/QcModeServiceImpl.java
  20. 17 0
      src/main/java/com/diagbot/vo/GetDetailVO.java
  21. 23 8
      src/main/java/com/diagbot/web/BehospitalInfoController.java
  22. 42 0
      src/main/java/com/diagbot/web/QcModeController.java
  23. 10 0
      src/main/resources/mapper/BehospitalInfoMapper.xml
  24. 2 2
      src/main/resources/mapper/MedicalRecordMapper.xml
  25. 18 0
      src/main/resources/mapper/QcModeMapper.xml
  26. 2 2
      src/test/java/com/diagbot/CodeGeneration.java

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

@@ -36,6 +36,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/oauth/check_token").permitAll()
                 .antMatchers("/qc/behospitalInfo/analyze").permitAll()
                 .antMatchers("/cache/clear").permitAll()
+                .antMatchers("/qc/mode/getMenu").permitAll()
                 .antMatchers("/**").authenticated();
 //                .antMatchers("/**").permitAll();
     }

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

@@ -88,6 +88,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/oauth/check_token", request)
                 || matchers("/qc/behospitalInfo/analyze", request)
                 || matchers("/cache/clear", request)
+                || matchers("/qc/mode/getMenu", request)
                 || matchers("/", request)) {
             return true;
         }

+ 38 - 0
src/main/java/com/diagbot/dto/AnalyzeDTO.java

@@ -0,0 +1,38 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/15 12:24
+ */
+@Getter
+@Setter
+public class AnalyzeDTO {
+    // 病历id
+    private String behospitalCode;
+    //得分
+    private Boolean isSuccess;
+    //得分
+    private BigDecimal scoreRes;
+    //等级
+    private String level;
+    /**
+     * 评分类型(1:机器,2:人工)
+     */
+    private Integer gradeType;
+    /**
+     * 评分类型名称(1:机器,2:人工)
+     */
+    private String gradeTypeName;
+
+    /**
+     * 评分时间
+     */
+    private Date gradeTime;
+}

+ 86 - 0
src/main/java/com/diagbot/dto/BehosDTO.java

@@ -0,0 +1,86 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 住院病历信息
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-13
+ */
+@Data
+public class BehosDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 病人住院ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 姓名
+     */
+    private String name;
+
+    /**
+     * 性别
+     */
+    private String sex;
+
+    /**
+     * 出生日期
+     */
+    private Date birthday;
+
+    /**
+     * 档案号
+     */
+    private String fileCode;
+
+    /**
+     * 病区名称
+     */
+    private String wardName;
+
+    /**
+     * 住院科室名称
+     */
+    private String behDeptName;
+
+    /**
+     * 床位号
+     */
+    private String bedCode;
+
+    /**
+     * 入院时间
+     */
+    private Date behospitalDate;
+
+    /**
+     * 出院时间
+     */
+    private Date leaveHospitalDate;
+
+    /**
+     * 疾病名称
+     */
+    private String diagnose;
+
+    /**
+     * 医生姓名
+     */
+    private String doctorName;
+
+    /**
+     * 年龄
+     */
+    private Integer age;
+
+}

+ 26 - 0
src/main/java/com/diagbot/dto/MsgDTO.java

@@ -0,0 +1,26 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/14 13:07
+ */
+@Getter
+@Setter
+public class MsgDTO {
+    //得分
+    private BigDecimal score;
+    //提示信息
+    private String msg;
+    //单项否决
+    private String isReject;
+    //模块名称
+    private String modelName;
+    // 条目ID
+    private Long casesEntryId;
+}

+ 41 - 0
src/main/java/com/diagbot/dto/QcModeDTO.java

@@ -0,0 +1,41 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 病历
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-15
+ */
+@Data
+public class QcModeDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 模块名称
+     */
+    private String name;
+
+    /**
+     * 模块名称
+     */
+    private Long parentId;
+
+    /**
+     * 子级模块
+     */
+    List<QcModeDTO> sonMode = new ArrayList<>();
+}

+ 40 - 0
src/main/java/com/diagbot/dto/QcResultDTO.java

@@ -0,0 +1,40 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 质控评分结果信息
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-13
+ */
+@Data
+public class QcResultDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 等级
+     */
+    private String level;
+
+    /**
+     * 页面数据
+     */
+    private String pageData;
+
+    /**
+     * 评分类型(1:机器,2:人工)
+     */
+    private String gradeType;
+
+    /**
+     * 最后得分
+     */
+    private String scoreRes;
+
+}

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

@@ -0,0 +1,68 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 病历
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-15
+ */
+@Data
+public class QcMode implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 病历
+     */
+    private String name;
+
+    /**
+     * 上级模块
+     */
+    private Long parentId;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 13 - 0
src/main/java/com/diagbot/entity/QcresultDetail.java

@@ -55,6 +55,11 @@ public class QcresultDetail implements Serializable {
      */
     private BigDecimal score;
 
+    /**
+     * 条目提示信息
+     */
+    private String msg;
+
     /**
      * 单项否决(1-单项否决 0-非)
      */
@@ -146,6 +151,14 @@ public class QcresultDetail implements Serializable {
         this.score = score;
     }
 
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
     public Integer getIsReject() {
         return isReject;
     }

+ 33 - 6
src/main/java/com/diagbot/facade/AlgorithmFacade.java

@@ -53,7 +53,7 @@ public class AlgorithmFacade {
         }
         //得分≤90分且得分>80分为乙级
         if (BigDecimalUtil.compareTo(score, new BigDecimal(90)) == 5
-                && BigDecimalUtil.compareTo(score, new BigDecimal(80)) == 3) {
+                && BigDecimalUtil.compareTo(score, new BigDecimal(80)) == 4) {
             level = "乙";
         }
         //得分≤80分为丙级
@@ -95,12 +95,17 @@ public class AlgorithmFacade {
             }
             //操作数据
             if (ListUtil.isNotEmpty(qcResultAlgVOList)) {
+                Boolean hasData = false;
                 for (QcResultAlgVO qcResultAlgVO : qcResultAlgVOList) {
                     if (qcResultAlgVO.getId().equals(algorithmVO.getOptResultAlgVO().getId())) {
                         qcResultAlgVOList.remove(qcResultAlgVO);
+                        hasData = true;
                         break;
                     }
                 }
+                if (!hasData){
+                    throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "删除的条目不存在!");
+                }
             }
         }
         //修改
@@ -110,13 +115,18 @@ public class AlgorithmFacade {
             }
             //操作数据
             if (ListUtil.isNotEmpty(qcResultAlgVOList)) {
+                Boolean hasData = false;
                 for (QcResultAlgVO qcResultAlgVO : qcResultAlgVOList) {
                     if (qcResultAlgVO.getId().equals(algorithmVO.getOptResultAlgVO().getId())) {
                         qcResultAlgVOList.remove(qcResultAlgVO);
                         qcResultAlgVOList.add(algorithmVO.getOptResultAlgVO());
+                        hasData = true;
                         break;
                     }
                 }
+                if (!hasData){
+                    throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "修改的条目不存在!");
+                }
             }
         }
     }
@@ -142,18 +152,18 @@ public class AlgorithmFacade {
                 }
                 //单票否决计分
                 if (qcResultAlgVO.getIsReject().equals(1)) {
-                    rejectScore.add(qcResultAlgVO.getScore());
+                    rejectScore = rejectScore.add(qcResultAlgVO.getScore());
                 } else {
                     //非单票否决计分
                     if (casesScoreMap.containsKey(qcResultAlgVO.getCasesId())) {
                         BigDecimal casesScore = casesScoreMap.get(qcResultAlgVO.getCasesId());
-                        casesScore.add(qcResultAlgVO.getScore());
+                        casesScore = casesScore.add(qcResultAlgVO.getScore());
                         casesScoreMap.put(qcResultAlgVO.getCasesId(), casesScore);
                     }
                 }
             }
 
-            //结果先减去单票否决计分
+            //结果先减去单票否决计分总和
             res = res.subtract(rejectScore);
             //结果小于0按0计算
             if (BigDecimalUtil.compareTo(res, BigDecimal.ZERO) == 1) {
@@ -163,9 +173,11 @@ public class AlgorithmFacade {
                 for (Map.Entry<Long, BigDecimal> casesScore : casesScoreMap.entrySet()) {
                     BigDecimal allSccore = casesMap.get(casesScore.getKey());
                     if (BigDecimalUtil.compareTo(allSccore, casesScore.getValue()) == 5) {
-                        res.subtract(allSccore);
+                        //模块标准分小于等于模块减分总和就用模块标准分
+                        res = res.subtract(allSccore);
                     } else {
-                        res.subtract(casesScore.getValue());
+                        //模块标准分大于模块减分总和就用模块减分总和
+                        res = res.subtract(casesScore.getValue());
                     }
                 }
             }
@@ -176,4 +188,19 @@ public class AlgorithmFacade {
         }
         return res;
     }
+
+    public static void main(String[] args) {
+        AlgorithmFacade algorithmFacade = new AlgorithmFacade();
+        System.out.println("100:" + algorithmFacade.getLevel(new BigDecimal(100)));
+        System.out.println("95:" + algorithmFacade.getLevel(new BigDecimal(95)));
+        System.out.println("90.1:" + algorithmFacade.getLevel(new BigDecimal(90.1)));
+        System.out.println("90:" + algorithmFacade.getLevel(new BigDecimal(90)));
+        System.out.println("85:" + algorithmFacade.getLevel(new BigDecimal(85)));
+        System.out.println("80.1:" + algorithmFacade.getLevel(new BigDecimal(80.1)));
+        System.out.println("80:" + algorithmFacade.getLevel(new BigDecimal(80)));
+        System.out.println("79.9:" + algorithmFacade.getLevel(new BigDecimal(79.9)));
+        System.out.println("60:" + algorithmFacade.getLevel(new BigDecimal(60)));
+        System.out.println("0:" + algorithmFacade.getLevel(new BigDecimal(0)));
+
+    }
 }

+ 63 - 9
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -5,11 +5,16 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.client.QcServiceClient;
 import com.diagbot.dto.AlgorithmDTO;
+import com.diagbot.dto.BehosDTO;
+import com.diagbot.dto.AnalyzeDTO;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.OutputInfo;
 import com.diagbot.dto.QcCasesEntryDTO;
+import com.diagbot.dto.QcResultDTO;
 import com.diagbot.dto.RecordContentDTO;
 import com.diagbot.dto.Response;
+import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.entity.DoctorAdvice;
 import com.diagbot.entity.HomeDiagnoseInfo;
 import com.diagbot.entity.HomeOperationInfo;
@@ -26,6 +31,7 @@ import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.AlgorithmVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.GetDetailVO;
 import com.diagbot.vo.MedrecVo;
 import com.diagbot.vo.QcResultAlgQueryVO;
 import com.diagbot.vo.QcResultAlgVO;
@@ -87,11 +93,43 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         return res;
     }
 
+    public Map<String, Object> getByBehospitalCode(GetDetailVO getDetailVO) {
+        Map<String, Object> res = new HashMap<>(); // 返回结果
+        Long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
+        getDetailVO.setHospitalId(hospitalId);
+        // 获取病历信息
+        BehospitalInfo behospitalInfo = this.getOne(new QueryWrapper<BehospitalInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", getDetailVO.getHospitalId())
+                .eq("behospital_code", getDetailVO.getBehospitalCode()), false
+        );
+        BehosDTO behosDTO = new BehosDTO();
+        if (behospitalInfo == null) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该病历已删除!");
+        }
+        BeanUtil.copyProperties(behospitalInfo, behosDTO);
+        res.put("beHospital", behosDTO);
 
-    public Map<String, Object> analyze(AnalyzeVO analyzeVO) {
+        // 获取主表信息
+        QcResultDTO qcResultDTO = qcresultInfoFacade.getByBehospitalCode(getDetailVO);
+        if (qcResultDTO == null) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该病历未评分!");
+        }
+        res.put("result", qcResultDTO);
+
+        // 获取提示信息
+        AnalyzeVO analyzeVO = new AnalyzeVO();
+        BeanUtil.copyProperties(getDetailVO, analyzeVO);
+        List<MsgDTO> msgDTOList = getMsg(analyzeVO);
+        Map<String, List<MsgDTO>> msgMap = EntityUtil.makeEntityListMap(msgDTOList, "modelName");
+        res.put("msg", msgMap);
+        return res;
+    }
 
-        //        Long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
-        Long hospitalId = 1L; // 写死
+    public AnalyzeDTO analyze(AnalyzeVO analyzeVO) {
+        Map<String, Object> res = new HashMap<>(); // 返回结果
+        Long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
+//        Long hospitalId = 1L; // 写死
         analyzeVO.setHospitalId(hospitalId);
         // 获取质控条目
         List<QcCasesEntryDTO> qcCasesEntryDTOList = qcCasesEntryFacade.getQcCasesEntry(analyzeVO);
@@ -195,8 +233,24 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
         AlgorithmDTO algorithmDTO = algorithmFacade.getAlgorithmRes(algorithmVO);
         //保存
-        qcresultInfoFacade.saveQcResult(algorithmDTO, algorithmVO, analyzeVO, outputInfo.getPageData().toString());
-        return null;
+        String pageData = JSON.toJSONString(outputInfo.getPageData());
+        Date date = qcresultInfoFacade.saveQcResult(algorithmDTO, algorithmVO, analyzeVO, pageData);
+        res.put("pageData", pageData);
+
+        // 返回提示信息
+        List<MsgDTO> msgDTOList = getMsg(analyzeVO);
+        Map<String, List<MsgDTO>> msgMap = EntityUtil.makeEntityListMap(msgDTOList, "modelName");
+        res.put("msg", msgMap);
+        //返回参数组装
+        AnalyzeDTO analyzeDTO = new AnalyzeDTO();
+        analyzeDTO.setBehospitalCode(analyzeVO.getBehospitalCode());
+        analyzeDTO.setIsSuccess(true);
+        analyzeDTO.setGradeType(1);
+        analyzeDTO.setGradeTypeName("机器");
+        analyzeDTO.setScoreRes(algorithmDTO.getScore());
+        analyzeDTO.setLevel(algorithmDTO.getLevel());
+        analyzeDTO.setGradeTime(date);
+        return analyzeDTO;
     }
 
 
@@ -302,19 +356,19 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         MedrecVo medrecVo = new MedrecVo();
         medrecVo.setTitle(key);
 
-        Map<String, String> map = dicMap.get(2L); // 病案首页
+        Map<String, String> map = dicMap.get("2"); // 病案首页
         Map<String, Object> content = new HashMap<>();
         try {
             Map<String, Object> objectMap = MapUtil.objectToMap(homePage);
             for (String objKey : objectMap.keySet()) {
-                if (map.get(objKey) != null) {
+                if (map.containsKey(objKey)) {
                     content.put(map.get(objKey), String.valueOf(objectMap.get(objKey)));
                 }
             }
 
             // 病案首页手术信息
             if (ListUtil.isNotEmpty(homeOperationInfoList)) {
-                Map<String, String> dic3 = dicMap.get(3L); // 病案首页手术信息
+                Map<String, String> dic3 = dicMap.get("3"); // 病案首页手术信息
                 List<Map> mapList = new ArrayList<>();
                 for (HomeOperationInfo homeOperationInfo : homeOperationInfoList) {
                     try {
@@ -334,7 +388,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
             // 病案首页诊断信息
             if (ListUtil.isNotEmpty(homeDiagnoseInfoList)) {
-                Map<String, String> dic4 = dicMap.get(4L); // 病案首页诊断信息
+                Map<String, String> dic4 = dicMap.get("4"); // 病案首页诊断信息
                 List<Map> mapList = new ArrayList<>();
                 for (HomeDiagnoseInfo homeDiagnoseInfo : homeDiagnoseInfoList) {
                     try {

+ 40 - 0
src/main/java/com/diagbot/facade/QcModeFacade.java

@@ -0,0 +1,40 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.QcModeDTO;
+import com.diagbot.entity.QcMode;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.QcModeServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.EntityUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/12 11:39
+ */
+@Component
+public class QcModeFacade extends QcModeServiceImpl {
+
+    public List<QcModeDTO> getMenu() {
+        List<QcMode> qcModeList = this.list(new QueryWrapper<QcMode>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .orderByAsc("parent_id", "order_no")
+        );
+        Map<Long, List<QcMode>> map = EntityUtil.makeEntityListMap(qcModeList, "parentId");
+        // 获取根节点
+        List<QcMode> root = map.get(-1L);
+        List<QcModeDTO> res = BeanUtil.listCopyTo(root, QcModeDTO.class);
+
+        for(QcModeDTO qcModeDTO : res) {
+            if (map.containsKey(qcModeDTO.getId())) {
+                qcModeDTO.setSonMode(BeanUtil.listCopyTo(map.get(qcModeDTO.getId()), QcModeDTO.class));
+            }
+        }
+        return res;
+    }
+}

+ 57 - 8
src/main/java/com/diagbot/facade/QcresultInfoFacade.java

@@ -3,6 +3,8 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.diagbot.dto.AlgorithmDTO;
+import com.diagbot.dto.AnalyzeDTO;
+import com.diagbot.dto.QcResultDTO;
 import com.diagbot.entity.QcresultDetail;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.enums.IsDeleteEnum;
@@ -17,6 +19,7 @@ import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.AlgorithmVO;
 import com.diagbot.vo.AnalyzeVO;
+import com.diagbot.vo.GetDetailVO;
 import com.diagbot.vo.QcResultAlgVO;
 import com.diagbot.vo.QcresultVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,7 +43,7 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
     @Autowired
     private AlgorithmFacade algorithmFacade;
 
-    public Boolean changeQcResult(QcresultVO qcresultVO) {
+    public AnalyzeDTO changeQcResult(QcresultVO qcresultVO) {
         //入参验证
         if (StringUtil.isBlank(qcresultVO.getBehospitalCode())) {
             throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "病历id不能为空!");
@@ -48,31 +51,53 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
         if (null == qcresultVO.getOptResultAlgVO()) {
             throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "操作条目不能为空!");
         }
+
+        Long hospitalId = Long.valueOf(SysUserUtils.getCurrentHospitalID());
+        //验证是否评估过
+        Integer cnt
+                = this.count(
+                new QueryWrapper<QcresultInfo>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_id", hospitalId)
+                        .eq("behospital_code", qcresultVO.getBehospitalCode()));
+        if (cnt < 1){
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该病历尚未评分,请先评分!");
+        }
         //查询质控评分明细信息
-        qcresultVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        qcresultVO.setHospitalId(hospitalId);
         List<QcresultDetail> qcresultDetails
                 = qcresultDetailServiceImpl.list(
                 new QueryWrapper<QcresultDetail>()
                         .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("hospital_id", qcresultVO.getHospitalId())
+                        .eq("hospital_id", hospitalId)
                         .eq("behospital_code", qcresultVO.getBehospitalCode()));
 
         //评分
         AlgorithmVO algorithmVO = new AlgorithmVO();
         List<QcResultAlgVO> qcResultAlgVOList
                 = BeanUtil.listCopyTo(qcresultDetails, QcResultAlgVO.class);
+        algorithmVO.setType(qcresultVO.getType());
         algorithmVO.setOptResultAlgVO(qcresultVO.getOptResultAlgVO());
         algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
         AlgorithmDTO algorithmDTO = algorithmFacade.getAlgorithmRes(algorithmVO);
         //更新质控评分结果信息
         AnalyzeVO analyzeVO = new AnalyzeVO();
-        analyzeVO.setHospitalId(qcresultVO.getHospitalId());
+        analyzeVO.setHospitalId(hospitalId);
         analyzeVO.setBehospitalCode(qcresultVO.getBehospitalCode());
-        this.saveQcResult(algorithmDTO, algorithmVO, analyzeVO,null);
-        return true;
+        Date date = this.saveQcResult(algorithmDTO, algorithmVO, analyzeVO,null);
+        //返回参数组装
+        AnalyzeDTO analyzeDTO = new AnalyzeDTO();
+        analyzeDTO.setBehospitalCode(qcresultVO.getBehospitalCode());
+        analyzeDTO.setIsSuccess(true);
+        analyzeDTO.setGradeType(2);
+        analyzeDTO.setGradeTypeName("人工");
+        analyzeDTO.setScoreRes(algorithmDTO.getScore());
+        analyzeDTO.setLevel(algorithmDTO.getLevel());
+        analyzeDTO.setGradeTime(date);
+        return analyzeDTO;
     }
 
-    public Boolean saveQcResult(AlgorithmDTO algorithmDTO, AlgorithmVO algorithmVO, AnalyzeVO analyzeVO, String pageData) {
+    public Date saveQcResult(AlgorithmDTO algorithmDTO, AlgorithmVO algorithmVO, AnalyzeVO analyzeVO, String pageData) {
         //更新质控评分结果信息
         Long useId = Long.valueOf(SysUserUtils.getCurrentPrincipleID());
         Date now = DateUtil.now();
@@ -129,6 +154,8 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
             for (QcResultAlgVO qcResultAlgVO : qcResultAlgVORes) {
                 QcresultDetail qcresultDetail = new QcresultDetail();
                 BeanUtil.copyProperties(qcResultAlgVO, qcresultDetail);
+                qcresultDetail.setHospitalId(analyzeVO.getHospitalId());
+                qcresultDetail.setBehospitalCode(analyzeVO.getBehospitalCode());
                 qcresultDetail.setGmtCreate(now);
                 qcresultDetail.setCreator(useId.toString());
                 qcresultDetail.setGmtModified(now);
@@ -137,6 +164,28 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
             }
             qcresultDetailServiceImpl.saveBatch(qcresultDetailList);
         }
-        return true;
+        return now;
+    }
+
+
+    /**
+     * 获取评分主表信息
+     *
+     * @param getDetailVO
+     * @return
+     */
+    public QcResultDTO getByBehospitalCode(GetDetailVO getDetailVO) {
+        QcResultDTO res = new QcResultDTO();
+        QcresultInfo qcresultInfo = this.getOne(new QueryWrapper<QcresultInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", getDetailVO.getHospitalId())
+                .eq("behospital_code", getDetailVO.getBehospitalCode()), false
+        );
+        if (qcresultInfo != null) {
+            BeanUtil.copyProperties(qcresultInfo, res);
+        } else {
+            return null;
+        }
+        return res;
     }
 }

+ 6 - 0
src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java

@@ -3,9 +3,13 @@ package com.diagbot.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.MsgDTO;
 import com.diagbot.entity.BehospitalInfo;
+import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 
+import java.util.List;
+
 /**
  * <p>
  * 住院病历信息 Mapper 接口
@@ -17,4 +21,6 @@ import com.diagbot.vo.BehospitalPageVO;
 public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
 
     public IPage<BehospitalInfoDTO> getPage(BehospitalPageVO behospitalPageVO);
+
+    public List<MsgDTO> getMsg(AnalyzeVO analyzeVO);
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.QcMode;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 病历 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-15
+ */
+public interface QcModeMapper extends BaseMapper<QcMode> {
+
+}

+ 6 - 0
src/main/java/com/diagbot/service/BehospitalInfoService.java

@@ -3,9 +3,13 @@ package com.diagbot.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.MsgDTO;
 import com.diagbot.entity.BehospitalInfo;
+import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 
+import java.util.List;
+
 /**
  * <p>
  * 住院病历信息 服务类
@@ -17,4 +21,6 @@ import com.diagbot.vo.BehospitalPageVO;
 public interface BehospitalInfoService extends IService<BehospitalInfo> {
 
     public IPage<BehospitalInfoDTO> getPage(BehospitalPageVO behospitalPageVO);
+
+    public List<MsgDTO> getMsg(AnalyzeVO analyzeVO);
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.QcMode;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 病历 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-15
+ */
+public interface QcModeService extends IService<QcMode> {
+
+}

+ 9 - 0
src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java

@@ -3,12 +3,16 @@ package com.diagbot.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.MsgDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.mapper.BehospitalInfoMapper;
 import com.diagbot.service.BehospitalInfoService;
+import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 住院病历信息 服务实现类
@@ -24,4 +28,9 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
     public IPage<BehospitalInfoDTO> getPage(BehospitalPageVO behospitalPageVO) {
         return baseMapper.getPage(behospitalPageVO);
     }
+
+    @Override
+    public List<MsgDTO> getMsg(AnalyzeVO analyzeVO) {
+        return baseMapper.getMsg(analyzeVO);
+    }
 }

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.QcMode;
+import com.diagbot.mapper.QcModeMapper;
+import com.diagbot.service.QcModeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 病历 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-15
+ */
+@Service
+public class QcModeServiceImpl extends ServiceImpl<QcModeMapper, QcMode> implements QcModeService {
+
+}

+ 17 - 0
src/main/java/com/diagbot/vo/GetDetailVO.java

@@ -0,0 +1,17 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @description:
+ * @author: zhoutg
+ * @time: 2020/4/13 18:31
+ */
+@Data
+public class GetDetailVO {
+
+    private String behospitalCode; // 病历id
+    @ApiModelProperty(hidden = true)
+    private Long hospitalId; //医院ID
+}

+ 23 - 8
src/main/java/com/diagbot/web/BehospitalInfoController.java

@@ -2,13 +2,14 @@ package com.diagbot.web;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.AnalyzeDTO;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.BehospitalInfoFacade;
-import com.diagbot.facade.QcresultDetailFacade;
 import com.diagbot.facade.QcresultInfoFacade;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.GetDetailVO;
 import com.diagbot.vo.QcresultVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -39,7 +40,12 @@ public class BehospitalInfoController {
     private QcresultInfoFacade qcresultInfoFacade;
 
     @ApiOperation(value = "病历分页列表[by:zhoutg]",
-            notes = "")
+            notes = "name:姓名<br>" +
+                    "fileCode:档案号<br>" +
+                    "behosDateStart:入院时间开始时间<br>" +
+                    "behosDateEnd:入院时间结束时间<br>" +
+                    "leaveHosDateStart:出院时间开始时间<br>" +
+                    "leaveHosDateEnd:出院时间结束时间<br>")
     @PostMapping("/page")
     @SysLogger("page")
     public RespDTO<IPage<BehospitalInfoDTO>> page(@RequestBody BehospitalPageVO behospitalPageVO) {
@@ -47,20 +53,29 @@ public class BehospitalInfoController {
         return RespDTO.onSuc(data);
     }
 
+    @ApiOperation(value = "根据病历id获取详情[by:zhoutg]",
+            notes = "")
+    @PostMapping("/getByBehospitalCode")
+    @SysLogger("getByBehospitalCode")
+    public RespDTO<Map<String, Object>> getByBehospitalCode(@RequestBody GetDetailVO getDetailVO) {
+        Map<String, Object> data = behospitalInfoFacade.getByBehospitalCode(getDetailVO);
+        return RespDTO.onSuc(data);
+    }
+
+
     @ApiOperation(value = "评分[by:zhoutg]",
             notes = "")
     @PostMapping("/analyze")
     @SysLogger("analyze")
-    public RespDTO<IPage<BehospitalInfoDTO>> analyze(@RequestBody AnalyzeVO analyzeVO) {
-        Map<String, Object> data = behospitalInfoFacade.analyze(analyzeVO);
-        return RespDTO.onSuc(data);
+    public RespDTO<AnalyzeDTO> analyze(@RequestBody AnalyzeVO analyzeVO) {
+        return RespDTO.onSuc(behospitalInfoFacade.analyze(analyzeVO));
     }
 
     @ApiOperation(value = "新增质控条目[by:zhoutg]",
             notes = "")
     @PostMapping("/addCase")
     @SysLogger("addCase")
-    public RespDTO<Boolean> addCase(@RequestBody QcresultVO qcresultVO){
+    public RespDTO<AnalyzeDTO> addCase(@RequestBody QcresultVO qcresultVO){
         qcresultVO.setType(1);
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
     }
@@ -69,7 +84,7 @@ public class BehospitalInfoController {
             notes = "")
     @PostMapping("/delCase")
     @SysLogger("delCase")
-    public RespDTO<Boolean> delCase(@RequestBody QcresultVO qcresultVO){
+    public RespDTO<AnalyzeDTO> delCase(@RequestBody QcresultVO qcresultVO){
         qcresultVO.setType(2);
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
     }
@@ -78,7 +93,7 @@ public class BehospitalInfoController {
             notes = "")
     @PostMapping("/updCase")
     @SysLogger("updCase")
-    public RespDTO<Boolean> updCase(@RequestBody QcresultVO qcresultVO){
+    public RespDTO<AnalyzeDTO> updCase(@RequestBody QcresultVO qcresultVO){
         qcresultVO.setType(3);
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
     }

+ 42 - 0
src/main/java/com/diagbot/web/QcModeController.java

@@ -0,0 +1,42 @@
+package com.diagbot.web;
+
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.QcModeDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.QcModeFacade;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 菜单 前端控制器
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-15
+ */
+@RestController
+@RequestMapping("/qc/mode")
+@Api(value = "菜单相关API", tags = { "菜单相关API" })
+@SuppressWarnings("unchecked")
+public class QcModeController {
+
+    @Autowired
+    QcModeFacade qcModeFacade;
+
+    @ApiOperation(value = "获取菜单信息[by:zhoutg]",
+            notes = "")
+    @PostMapping("/getMenu")
+    @SysLogger("getMenu")
+    public RespDTO<List<QcModeDTO> > getMenu() {
+        List<QcModeDTO> data = qcModeFacade.getMenu();
+        return RespDTO.onSuc(data);
+    }
+}

+ 10 - 0
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -61,4 +61,14 @@
         </if>
     </select>
 
+    <select id="getMsg" resultType="com.diagbot.dto.MsgDTO">
+        SELECT b.`name` model_name,c.score,c.msg,c.cases_entry_id,c.is_reject
+        FROM `qc_cases_entry` a, qc_mode b, med_qcresult_detail c
+        where a.is_deleted = 'N' and b.is_deleted = 'N' and c.is_deleted = 'N'
+        and a.id = c.cases_entry_id
+        and a.mode_id = b.id
+        and c.hospital_id = #{hospitalId}
+        and c.behospital_code = #{behospitalCode}
+    </select>
+
 </mapper>

+ 2 - 2
src/main/resources/mapper/MedicalRecordMapper.xml

@@ -25,8 +25,8 @@
             and a.hospital_id = #{hospitalId}
             and b.hospital_id = #{hospitalId}
             and a.behospital_code = #{behospitalCode}
-            and b.stand_model_name is not null) t left join med_medical_record_content c
-        on t.rec_id = c.rec_id and c.is_deleted = 'N'
+            and b.stand_model_name is not null) t, med_medical_record_content c
+        where t.rec_id = c.rec_id and c.is_deleted = 'N'
     </select>
 
 </mapper>

+ 18 - 0
src/main/resources/mapper/QcModeMapper.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.QcModeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.QcMode">
+        <id column="id" property="id" />
+        <result column="name" property="name" />
+        <result column="parent_id" property="parentId" />
+        <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="remark" property="remark" />
+    </resultMap>
+
+</mapper>

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

@@ -54,9 +54,9 @@ public class CodeGeneration {
 
         // 策略配置
         StrategyConfig strategy = new StrategyConfig();
-        strategy.setTablePrefix(new String[] { "med_" });// 此处可以修改为您的表前缀
+//        strategy.setTablePrefix(new String[] { "med_" });// 此处可以修改为您的表前缀
         strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
-        strategy.setInclude(new String[] { "med_qcresult_detail"}); // 需要生成的表
+        strategy.setInclude(new String[] { "qc_mode"}); // 需要生成的表
 
         strategy.setSuperServiceClass(null);
         strategy.setSuperServiceImplClass(null);