浏览代码

病案首页质控审核相关接口上传

“wangdsYun 3 月之前
父节点
当前提交
00b3cb5f8f
共有 39 个文件被更改,包括 891 次插入691 次删除
  1. 3 3
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  2. 3 3
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  3. 27 0
      src/main/java/com/diagbot/dto/AnalyzeApiDTO.java
  4. 0 28
      src/main/java/com/diagbot/dto/BehospitalInfoAgeDTO.java
  5. 0 18
      src/main/java/com/diagbot/dto/CaseAndDeptNumDTO.java
  6. 0 16
      src/main/java/com/diagbot/dto/CaseNumDTO.java
  7. 21 2
      src/main/java/com/diagbot/dto/MsgApiDTO.java
  8. 0 48
      src/main/java/com/diagbot/dto/QcRuleWarnDTO.java
  9. 27 0
      src/main/java/com/diagbot/dto/RejectPatientDTO.java
  10. 5 0
      src/main/java/com/diagbot/entity/BehospitalInfo.java
  11. 150 0
      src/main/java/com/diagbot/entity/MedAppealInfo.java
  12. 51 64
      src/main/java/com/diagbot/entity/QcRuleWarn.java
  13. 38 0
      src/main/java/com/diagbot/enums/BehospitalStatusEnum.java
  14. 0 51
      src/main/java/com/diagbot/enums/CheckJobTypeEnum.java
  15. 52 66
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  16. 14 0
      src/main/java/com/diagbot/facade/MedAppealInfoFacade.java
  17. 216 212
      src/main/java/com/diagbot/facade/MedExamineInfoFacade.java
  18. 14 0
      src/main/java/com/diagbot/facade/MedRejectedInfoFacade.java
  19. 1 1
      src/main/java/com/diagbot/facade/QcClientFacade.java
  20. 12 15
      src/main/java/com/diagbot/facade/QcresultInfoFacade.java
  21. 0 1
      src/main/java/com/diagbot/facade/SysUserFacade.java
  22. 0 8
      src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java
  23. 13 0
      src/main/java/com/diagbot/mapper/MedAppealInfoMapper.java
  24. 13 0
      src/main/java/com/diagbot/mapper/MedRejectedInfoMapper.java
  25. 0 15
      src/main/java/com/diagbot/mapper/QcRuleWarnMapper.java
  26. 13 0
      src/main/java/com/diagbot/service/MedAppealInfoService.java
  27. 13 0
      src/main/java/com/diagbot/service/MedRejectedInfoService.java
  28. 0 16
      src/main/java/com/diagbot/service/QcRuleWarnService.java
  29. 17 0
      src/main/java/com/diagbot/service/impl/MedAppealInfoServiceImpl.java
  30. 17 0
      src/main/java/com/diagbot/service/impl/MedRejectedInfoServiceImpl.java
  31. 0 20
      src/main/java/com/diagbot/service/impl/QcRuleWarnServiceImpl.java
  32. 6 0
      src/main/java/com/diagbot/vo/BehospitalcodeVO.java
  33. 58 0
      src/main/java/com/diagbot/vo/MedAppealInfoVO.java
  34. 0 37
      src/main/java/com/diagbot/vo/QcRuleWarnAlgVO.java
  35. 0 25
      src/main/java/com/diagbot/vo/QcRuleWarnVO.java
  36. 57 0
      src/main/java/com/diagbot/vo/RejectedVo.java
  37. 15 2
      src/main/java/com/diagbot/web/BehospitalInfoController.java
  38. 26 10
      src/main/java/com/diagbot/web/MedExamineInfoController.java
  39. 9 30
      src/main/resources/mapper/BehospitalInfoMapper.xml

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

@@ -69,6 +69,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/medExamineInfo/passAudit").permitAll()
                 .antMatchers("/qc/behospitalInfo/upState").permitAll()
                 .antMatchers("/qc/behospitalInfo/delState").permitAll()
+                .antMatchers("/qc/behospitalInfo/getRejectPatient").permitAll()
                 .antMatchers("/qc/module/getById").permitAll()
                 .antMatchers("/qc/module/getModuleMap").permitAll()
                 .antMatchers("/qc/cases/getQcCases").permitAll()
@@ -79,9 +80,8 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/behospitalInfo/getByBehospitalCode").permitAll()
                 .antMatchers("/bas/dept/getList").permitAll()
                 .antMatchers("/bas/dept/getListUser").permitAll()
-                .antMatchers("/qc/behospitalInfo/page_dept").permitAll()
-                .antMatchers("/qc/behospitalInfo/page_person").permitAll()
-                .antMatchers("/qc/behospitalInfo/page_group").permitAll()
+                .antMatchers("/qc/medExamineInfo/rejected").permitAll()
+                .antMatchers("/qc/medExamineInfo/addAppealInfo").permitAll()
                 .antMatchers("/qc/casesEntryHospital/findQcCasesEntry").permitAll()
                 .antMatchers("/qc/dataimport/import").permitAll()
                 .antMatchers("/qc/dataimport/test").permitAll()

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

@@ -144,6 +144,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/qc/medExamineInfo/passAudit", request)
                 || matchers("/qc/behospitalInfo/upState", request)
                 || matchers("/qc/behospitalInfo/delState", request)
+                || matchers("/qc/behospitalInfo/getRejectPatient", request)
                 || matchers("/qc/module/getById", request)
                 || matchers("/qc/module/getModuleMap", request)
                 || matchers("/qc/cases/getQcCases", request)
@@ -153,9 +154,8 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/qc/behospitalInfo/getByBehospitalCode", request)
                 || matchers("/bas/dept/getList", request)
                 || matchers("/bas/dept/getListUser", request)
-                || matchers("/qc/behospitalInfo/page_dept", request)
-                || matchers("/qc/behospitalInfo/page_person", request)
-                || matchers("/qc/behospitalInfo/page_group", request)
+                || matchers("/qc/medExamineInfo/rejected", request)
+                || matchers("/qc/medExamineInfo/addAppealInfo", request)
                 || matchers("/qc/casesEntryHospital/findQcCasesEntry", request)
                 || matchers("/qc/casesEntryHospital/exportAllRules", request)
                 || matchers("/qc/behospitalInfo/exportExcel", request)

+ 27 - 0
src/main/java/com/diagbot/dto/AnalyzeApiDTO.java

@@ -0,0 +1,27 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2024/4/15 12:24
+ */
+@Getter
+@Setter
+public class AnalyzeApiDTO {
+    //得分
+    private BigDecimal scoreRes;
+    //缺陷总数
+    private Long num;
+    //审核状态
+    private String status;
+    // 缺陷条目
+    private Map<String,List<MsgApiDTO>> msgApiDTOMap = new HashMap<>();
+}

+ 0 - 28
src/main/java/com/diagbot/dto/BehospitalInfoAgeDTO.java

@@ -1,28 +0,0 @@
-package com.diagbot.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @Description:
- * @author: wangsy
- * @time: 2024/5/13 15:00
- */
-@Getter
-@Setter
-public class BehospitalInfoAgeDTO {
-
-    /**
-     * 病人住院序号
-     */
-    private String behospitalCode;
-
-    /**
-     * 年龄
-     */
-    private String age;
-    private String ageYear;
-    private String ageMon;
-    private String ageDay;
-
-}

+ 0 - 18
src/main/java/com/diagbot/dto/CaseAndDeptNumDTO.java

@@ -1,18 +0,0 @@
-package com.diagbot.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @Description:
- * @Author:zhaops
- * @time: 2024/5/28 14:49
- */
-@Getter
-@Setter
-public class CaseAndDeptNumDTO extends NumDTO {
-    private String deptId;
-    private String deptName;
-    private Long casesId;
-    private String casesName;
-}

+ 0 - 16
src/main/java/com/diagbot/dto/CaseNumDTO.java

@@ -1,16 +0,0 @@
-package com.diagbot.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @Description:
- * @Author:zhaops
- * @time: 2024/5/28 14:45
- */
-@Getter
-@Setter
-public class CaseNumDTO extends NumDTO {
-    private Long casesId;
-    private String casesName;
-}

+ 21 - 2
src/main/java/com/diagbot/dto/MsgApiDTO.java

@@ -4,6 +4,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * @Description:
@@ -13,12 +14,30 @@ import java.math.BigDecimal;
 @Getter
 @Setter
 public class MsgApiDTO {
+    //明细主键
+    private Long id;
     //得分
     private BigDecimal score;
     //提示信息
     private String msg;
     //单项否决
     private String isReject;
-    //模块名称
-    private String modelName;
+    //规则类型
+    private Integer ruleType;
+    // 操作类型(1:新增,2:删除,3:修改)
+    private Integer optType;
+    // 初始类型(1:机器,2:人工)
+    private Integer gradeType;
+    // 条目ID
+    private Long casesEntryId;
+    //是否驳回条目
+    private String isRejectedEntry = "0";
+    //驳回理由
+    private String rejectedReason;
+    // 记录修改时间,如果时间是1970年则表示纪录未修改
+    private Date gmtModified;
+    // 记录修改人id
+    private String modifier;
+    // 记录修改人姓名
+    private String linkman;
 }

+ 0 - 48
src/main/java/com/diagbot/dto/QcRuleWarnDTO.java

@@ -1,48 +0,0 @@
-package com.diagbot.dto;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- * @Description:
- * @author: dsYun
- * @time: 2024/03/02
- */
-@Getter
-@Setter
-public class QcRuleWarnDTO {
-    //病案号
-    private String fileCode;
-    //姓名
-    private String name;
-    //病区
-    private String wardName;
-    //科室
-    private String deptName;
-    //主治医生
-    private String doctorName;
-    //发送时间
-    private Date sendDate;
-    // 入院时间
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date behospitalDate;
-    //出院时间
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date leaveHospitalDate;
-    //得分
-    private BigDecimal scoreRes;
-    //等级
-    private String level;
-    //缺陷总数
-    private Long num;
-    //缺陷总扣分
-    private BigDecimal numScore;
-    // 缺陷条目
-    private List<RuleMsgDTO> msgDTOList = new ArrayList<>();
-}

+ 27 - 0
src/main/java/com/diagbot/dto/RejectPatientDTO.java

@@ -0,0 +1,27 @@
+package com.diagbot.dto;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: dsYun
+ * @time: 2024/5/13 15:00
+ */
+@Getter
+@Setter
+@Builder
+public class RejectPatientDTO {
+
+    //病人住院序号
+    private String behospitalCode;
+
+    //姓名
+    private String name;
+    //性别
+    private String sex;
+    //病案号
+    private String fileCode;
+
+}

+ 5 - 0
src/main/java/com/diagbot/entity/BehospitalInfo.java

@@ -158,6 +158,11 @@ public class BehospitalInfo implements Serializable {
      */
     private Date placefileDate;
 
+    /**
+     * 审核状态(1-待审核 2-已通过 3-已驳回 4-未申诉 5-已申诉)
+     */
+    private String status;
+
     /**
      * 是否删除,N:未删除,Y:删除
      */

+ 150 - 0
src/main/java/com/diagbot/entity/MedAppealInfo.java

@@ -0,0 +1,150 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 申诉记录表 实体类
+ * </p>
+ */
+@Data
+@TableName("med_appeal_info")
+public class MedAppealInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 医院ID
+     */
+    @TableField("hospital_id")
+    private Long hospitalId;
+
+    /**
+     * 病人住院ID
+     */
+    @TableField("behospital_code")
+    private String behospitalCode;
+
+    /**
+     * 质控缺陷id
+     */
+    @TableField("qcresult_detail_id")
+    private Long qcresultDetailId;
+
+    /**
+     * 缺陷详情
+     */
+    @TableField("qcresult_detail_msg")
+    private String qcresultDetailMsg;
+
+    /**
+     * 缺陷扣分分值
+     */
+    @TableField("qcresult_detai_value")
+    private BigDecimal qcresultDetaiValue;
+
+    /**
+     * 单项否决(1-单项否决 0-非)
+     */
+    @TableField("is_reject")
+    private Integer isReject;
+
+    /**
+     * 条目ID
+     */
+    @TableField("cases_entry_id")
+    private Long casesEntryId;
+
+    /**
+     * 质控条目(新增已有操作才有值)
+     */
+    @TableField("cases_entry_name")
+    private String casesEntryName;
+
+    /**
+     * 提示信息(新增已有操作才有值)
+     */
+    @TableField("cases_entry_msg")
+    private String casesEntryMsg;
+
+    /**
+     * 分值(新增已有操作才有值)
+     */
+    @TableField("value")
+    private BigDecimal value;
+
+    /**
+     * 申诉人id
+     */
+    @TableField("claimant_id")
+    private String claimantId;
+
+    /**
+     * 申述人姓名
+     */
+    @TableField("claimant_name")
+    private String claimantName;
+
+    /**
+     * 申诉说明
+     */
+    @TableField("appeal_explain")
+    private String appealExplain;
+
+    /**
+     * 审核人id
+     */
+    @TableField("examine_id")
+    private Long examineId;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+}

+ 51 - 64
src/main/java/com/diagbot/entity/QcRuleWarn.java

@@ -1,9 +1,9 @@
 package com.diagbot.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -11,148 +11,135 @@ import java.math.BigDecimal;
 import java.util.Date;
 
 /**
- * @author dsYun
- * @since 2024-03-01
+ * <p>
+ * 驳回记录表 实体类
+ * </p>
  */
-@TableName("qc_rule_warn")
 @Data
-public class QcRuleWarn implements Serializable {
+@TableName("med_rejected_info")
+public class MedRejectedInfo implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    /**
+     * 主键
+     */
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     /**
      * 医院ID
      */
+    @TableField("hospital_id")
     private Long hospitalId;
-    /**
-     * 评分结果ID
-     */
-    private Long qcresultInfoId;
 
     /**
      * 病人住院ID
      */
+    @TableField("behospital_code")
     private String behospitalCode;
 
     /**
-     * 病案号
-     */
-    private String fileCode;
-
-    /**
-     * 姓名
-     */
-    private String name;
-
-    /**
-     * 病区名称
-     */
-    private String wardName;
-
-    /**
-     * 科室名称
-     */
-    private String deptName;
-
-    /**
-     * 主治医生
-     */
-    private String doctorName;
-
-    /**
-     * 入院时间
+     * 质控缺陷id
      */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date behospitalDate;
+    @TableField("qcresult_detail_id")
+    private Long qcresultDetailId;
 
     /**
-     * 出院时间
+     * 缺陷详情
      */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date leaveHospitalDate;
+    @TableField("qcresult_detail_msg")
+    private String qcresultDetailMsg;
 
     /**
-     * 用户id
+     * 缺陷扣分分值
      */
-    private int userId;
+    @TableField("qcresult_detai_value")
+    private BigDecimal qcresultDetaiValue;
 
-    /**
-     * 模块id
-     */
-    private Long casesId;
 
     /**
-     * 模块名称
-     */
-    private String modelName;
-
-    /**
-     * 模块总分
+     * 单项否决(1-单项否决 0-非)
      */
-    private BigDecimal casesScore;
+    @TableField("is_reject")
+    private Integer isReject;
 
     /**
      * 条目ID
      */
+    @TableField("cases_entry_id")
     private Long casesEntryId;
 
     /**
-     * 分值
+     * 质控条目(新增已有操作才有值)
      */
-    private BigDecimal score;
+    @TableField("cases_entry_name")
+    private String casesEntryName;
 
     /**
-     * 条目提示信息
+     * 提示信息(新增已有操作才有值)
      */
-    private String msg;
+    @TableField("cases_entry_msg")
+    private String casesEntryMsg;
 
     /**
-     * 质控返回提示信息
+     * 分值(新增已有操作才有值)
      */
-    private String info;
+    @TableField("value")
+    private BigDecimal value;
 
     /**
-     * url
+     * 驳回理由
      */
-    private String url;
+    @TableField("rejected_reason")
+    private String rejectedReason;
 
     /**
-     * 单项否决(1-单项否决 0-非)
+     * 主治医生id
      */
-    private Integer isReject;
+    @TableField("doctor_id")
+    private String doctorId;
 
+    /**
+     * 审核人id
+     */
+    @TableField("examine_id")
+    private Long examineId;
 
     /**
      * 是否删除,N:未删除,Y:删除
      */
+    @TableField("is_deleted")
     private String isDeleted;
 
     /**
      * 记录创建时间
      */
+    @TableField("gmt_create")
     private Date gmtCreate;
 
     /**
      * 记录修改时间,如果时间是1970年则表示纪录未修改
      */
+    @TableField("gmt_modified")
     private Date gmtModified;
 
     /**
      * 创建人,0表示无创建人值
      */
+    @TableField("creator")
     private String creator;
 
     /**
      * 修改人,如果为0则表示纪录未修改
      */
+    @TableField("modifier")
     private String modifier;
 
     /**
      * 备注
      */
+    @TableField("remark")
     private String remark;
 
-}
+}

+ 38 - 0
src/main/java/com/diagbot/enums/BehospitalStatusEnum.java

@@ -0,0 +1,38 @@
+package com.diagbot.enums;
+
+
+/**
+ * @author dsYun
+ * @date
+ */
+public enum BehospitalStatusEnum {
+    BE_REVIEWED("1", "待审核"),
+    ALREADY_PASSED("2", "已通过"),
+    REJECTED("3", "已驳回"),
+    NO_APPEAL("4", "未申诉"),
+    APPEALED("5", "已申诉"),
+    UNKNOWN("-1", "未知状态"); // 兜底枚举
+
+    private final String code;
+    private final String desc;
+
+    BehospitalStatusEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    // 根据 code 查找枚举
+    public static BehospitalStatusEnum fromCode(String code) {
+        for (BehospitalStatusEnum status : values()) {
+            if (status.code.equals(code)) {
+                return status;
+            }
+        }
+        return UNKNOWN; // 未匹配时返回兜底值
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}
+

+ 0 - 51
src/main/java/com/diagbot/enums/CheckJobTypeEnum.java

@@ -1,51 +0,0 @@
-package com.diagbot.enums;
-
-import com.diagbot.core.KeyedNamed;
-import lombok.Setter;
-
-/**
- * @author wangfeng
- * @Description: 核查任务类型
- * @date 2018年11月21日 下午2:31:42
- */
-public enum CheckJobTypeEnum implements KeyedNamed {
-    DEPT_SUPERVISOR(0, "科室任务"),
-    QUAT_SUPERVISOR(1, "质控科任务"),
-    HOSP_SUPERVISOR(2, "院级任务");
-
-    @Setter
-    private int key;
-
-    @Setter
-    private String name;
-
-    CheckJobTypeEnum(int key, String name) {
-        this.key = key;
-        this.name = name;
-    }
-
-    public static CheckJobTypeEnum getEnum(int key) {
-        for (CheckJobTypeEnum item : CheckJobTypeEnum.values()) {
-            if (item.key == key) {
-                return item;
-            }
-        }
-        return null;
-    }
-
-    public static String getName(int key) {
-        CheckJobTypeEnum item = getEnum(key);
-        return item != null ? item.name : null;
-    }
-
-    @Override
-    public int getKey() {
-        return key;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-}
-

+ 52 - 66
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -8,17 +8,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.client.AuthServiceClient;
 import com.diagbot.dto.*;
 import com.diagbot.entity.*;
-import com.diagbot.enums.CheckerRoleEnum;
-import com.diagbot.enums.IsDeleteEnum;
-import com.diagbot.enums.RuleTypeEnum;
+import com.diagbot.enums.*;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.BehospitalInfoServiceImpl;
-import com.diagbot.service.impl.QcRuleWarnServiceImpl;
 import com.diagbot.service.impl.QcresultDetailServiceImpl;
 import com.diagbot.service.impl.StrInformedConsentServiceImpl;
 import com.diagbot.util.*;
 import com.diagbot.vo.*;
+import com.google.common.collect.Lists;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.BeanUtils;
@@ -29,8 +27,6 @@ import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletResponse;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -84,14 +80,14 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     @Autowired
     MedLisResultFacade medLisResultFacade;
     @Autowired
-    MedPacsInfoFacade medPacsInfoFacade;
-    @Autowired
     MedPacsResultFacade medPacsResultFacade;
     @Autowired
     MedCrisisInfoFacade medCrisisInfoFacade;
     @Autowired
     MedExamineInfoFacade medCheckInfoFacade;
     @Autowired
+    MedRejectedInfoFacade medRejectedInfoFacade;
+    @Autowired
     StrConsultationApplyFacade strConsultationApplyFacade;
     @Autowired
     StrConsultationResultFacade strConsultationResultFacade;
@@ -158,10 +154,6 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
-
-    @Autowired
-    @Qualifier("qcRuleWarnServiceImpl")
-    private QcRuleWarnServiceImpl qcRuleWarnServiceImpl;
     @Autowired
     @Qualifier("qcresultDetailServiceImpl")
     private QcresultDetailServiceImpl qcresultDetailServiceImpl;
@@ -1132,10 +1124,6 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         }
 
         // 病案首页
-        //义乌数据回来还要处理
-//        if(analyzeVO.getHospitalId()==5 && ListUtil.isNotEmpty(recMap.get("病案首页"))){
-//            addDataWithInnerKey("病案首页", recMap, medrecVoList);
-//        }else {
         if (homePage != null) {
             addDataWithFirstPage("病案首页", homePage, medrecVoList, dicMap,
                     homePageList, homeOperationInfoList);
@@ -1833,8 +1821,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
      * @param analyzeRunVO
      * @return
      */
-    public Map<String, Object> analyzeApi(AnalyzeRunVO analyzeRunVO) {
-        Map<String, Object> resMapData = new HashMap<>(); // 返回结果
+    public AnalyzeApiDTO analyzeApi(AnalyzeRunVO analyzeRunVO) {
+        AnalyzeApiDTO analyzeApiDTO = new AnalyzeApiDTO(); // 返回结果
         AnalyzeVO analyzeVO = new AnalyzeVO();
         BeanUtil.copyProperties(analyzeRunVO, analyzeVO);
         Long hospitalId = analyzeVO.getHospitalId();
@@ -1892,58 +1880,56 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                     msgDTO.setMsg(msgDTO.getMsg() + "(" + msgDTO.getInfo().trim() + ")");
                 }
             });
-            // 从qc_question_info的cases_entry_ids获取
-            Map<String, Object> paramMap = new HashMap<>();
-            paramMap.put("hospitalId", analyzeRunVO.getHospitalId());
-            paramMap.put("casesEntryIds", msgDTOList.stream().map(r -> r.getCasesEntryId()).collect(Collectors.toList()));
-            Map<Long, List<QuestionEntryDTO>> quesEntryMap = qcQuestionFacade.getByCaseEntryIdsFac(paramMap);
-            for (MsgDTO msgDTO : msgDTOList) {
-                if (quesEntryMap.get(msgDTO.getCasesEntryId()) != null) {
-                    msgDTO.setPageKeyList(quesEntryMap.get(msgDTO.getCasesEntryId())
-                            .stream().map(r -> r.getId()).collect(Collectors.toList()));
-                }
-            }
         }
 
-        //返回参数组装
-        BigDecimal bigDecimal = new BigDecimal(0);
-        BigDecimal res = new BigDecimal(120);
-        BigDecimal resPr = new BigDecimal(100);
-        String reNum = "0";
-        SysHospitalSet sysHospitalSet
-                = sysHospitalSetFacade.getOne(new QueryWrapper<SysHospitalSet>()
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("hospital_id", analyzeRunVO.getHospitalId())
-                        .eq("code", "score_type")
-                , false);
-        if (null != sysHospitalSet && sysHospitalSet.getValue().equals("1")) {
-            //百分制
-            reNum = "1";
-        }
-        QcResultApiDTO qcResultApiDTO = new QcResultApiDTO();
-        if (algorithmDTO.getScore() != null && msgDTOList != null) {
-            if ("1".equals(reNum)) {
-                bigDecimal = resPr.subtract(algorithmDTO.getScore());
-            } else if ("0".equals(reNum)) {
-                bigDecimal = res.subtract(algorithmDTO.getScore().multiply(new BigDecimal(120))
-                        .divide(new BigDecimal(100), 1, RoundingMode.HALF_UP));
+        List<MsgApiDTO> msgApiDTOList = Lists.newLinkedList();
+        msgApiDTOList = BeanUtil.listCopyTo(msgDTOList, MsgApiDTO.class);
+
+        //缺陷总数
+        Long num = msgApiDTOList
+                .stream()
+                .filter(Objects::nonNull)
+                .count();
+        analyzeApiDTO.setNum(num);
+        //不展示缺陷内容,只需要缺陷数量
+        if ("1".equals(analyzeRunVO.getIsDefect())) {
+            return analyzeApiDTO;
+        }
+        //审核状态
+        analyzeApiDTO.setStatus(
+                Optional.ofNullable(behospitalInfo.getStatus())
+                        .map(BehospitalStatusEnum::fromCode)
+                        .map(BehospitalStatusEnum::getDesc)
+                        .orElse("状态未知") // 如果 code 为 null,返回默认值
+        );
+        analyzeApiDTO.setScoreRes(algorithmDTO.getScore());
+        if ("3".equals(behospitalInfo.getStatus())) { //已驳回
+            List<MedRejectedInfo> medRejectedInfos = medRejectedInfoFacade.list(new QueryWrapper<MedRejectedInfo>()
+                    .eq("hospital_id", hospitalId)
+                    .eq("behospital_code", analyzeRunVO.getBehospitalCode())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .select("cases_entry_id", "rejected_reason")
+                    .orderByDesc("gmt_create"));
+            if (ListUtil.isNotEmpty(medRejectedInfos)) {
+                msgApiDTOList.forEach(msgApiDTO -> {
+                    for(MedRejectedInfo medRejectedInfo : medRejectedInfos){
+                        if(msgApiDTO.getCasesEntryId().equals(medRejectedInfo.getCasesEntryId())){
+                            msgApiDTO.setIsRejectedEntry("1"); //驳回条目
+                            msgApiDTO.setRejectedReason(medRejectedInfo.getRejectedReason());
+                        }
+                    }
+                });
             }
+        }
+
+        Map<String, List<MsgApiDTO>> newMsgMap = msgApiDTOList.stream()
+                .collect(Collectors.groupingBy(
+                        dto -> RuleTypeEnum.fromRawValue(dto.getRuleType()).getName(),
+                        Collectors.toList()
+                ));
+        analyzeApiDTO.setMsgApiDTOMap(newMsgMap);
 
-            //缺陷总数
-            Long num = msgDTOList
-                    .stream()
-                    .filter(Objects::nonNull)
-                    .count();
-            qcResultApiDTO.setScoreRes(algorithmDTO.getScore());
-            qcResultApiDTO.setNum(num);
-            qcResultApiDTO.setNumScore(bigDecimal);
-            resMapData.put("result", qcResultApiDTO);
-            List<MsgApiDTO> msgApiDTOList = BeanUtil.listCopyTo(msgDTOList, MsgApiDTO.class);
-            Map<String, List<MsgApiDTO>> msgMap = EntityUtil.makeEntityListMap(msgApiDTOList, "modelName");
-            resMapData.put("details", msgMap);
-        }
-        ;
-        return resMapData;
+        return analyzeApiDTO;
     }
 
 

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

@@ -0,0 +1,14 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.MedAppealInfoServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * <p>
+ * 表名:med_appeal_info 业务类
+ * </p>
+ */
+@Component
+public class MedAppealInfoFacade extends MedAppealInfoServiceImpl {
+
+}

+ 216 - 212
src/main/java/com/diagbot/facade/MedExamineInfoFacade.java

@@ -3,22 +3,26 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.diagbot.dto.CheckDeptDTO;
 import com.diagbot.dto.CheckMedoupDTO;
 import com.diagbot.dto.DeptCheckUserDTO;
+import com.diagbot.dto.RejectPatientDTO;
 import com.diagbot.entity.*;
-import com.diagbot.enums.CheckJobTypeEnum;
 import com.diagbot.enums.CheckTypeEnum;
-import com.diagbot.enums.CheckerRoleEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.MedExamineInfoServiceImpl;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.BehospitalcodeVO;
+import com.diagbot.vo.MedAppealInfoVO;
 import com.diagbot.vo.MedCheckInfoAddVO;
+import com.diagbot.vo.RejectedVo;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -43,11 +47,26 @@ public class MedExamineInfoFacade extends MedExamineInfoServiceImpl {
     SysUserFacade sysUserFacade;
     @Autowired
     MedExamineInfoFacade medExamineInfoFacade;
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private QcresultDetailFacade qcresultDetailFacade;
+    @Autowired
+    private MedRejectedInfoFacade medRejectedInfoFacade;
+    @Autowired
+    private MedAppealInfoFacade medAppealInfoFacade;
 
     public boolean passAudit(BehospitalcodeVO behospitalcodeVO) {
         Long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
         Long userId = Long.parseLong(SysUserUtils.getCurrentPrincipleID());
 
+        UpdateWrapper<BehospitalInfo> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.eq("behospital_code", behospitalcodeVO.getBehospitalCode())
+                .eq("hospital_id", behospitalcodeVO.getHospitalId())
+                .eq("is_deleted", IsDeleteEnum.N)
+                .set("status", "2");
+        behospitalInfoFacade.update(updateWrapper);
+
         //获取判断是否有审核
         QueryWrapper<MedExamineInfo> medExamineInfoQueryWrapper = new QueryWrapper<>();
         medExamineInfoQueryWrapper.eq("behospital_code", behospitalcodeVO.getBehospitalCode());
@@ -58,6 +77,7 @@ public class MedExamineInfoFacade extends MedExamineInfoServiceImpl {
         SysUser user = sysUserFacade.getOne(new QueryWrapper<SysUser>()
                 .eq("id", userId)
                 .eq("is_deleted", IsDeleteEnum.N.getKey()));
+
         if (medExamineInfo == null) {
             MedExamineInfo insertCheckInfo = new MedExamineInfo();
             insertCheckInfo.setBehospitalCode(behospitalcodeVO.getBehospitalCode());
@@ -84,238 +104,222 @@ public class MedExamineInfoFacade extends MedExamineInfoServiceImpl {
     }
 
     /**
-     * @param medCheckInfoAddVO
-     * @return
+     * 驳回接口
      */
-    public Boolean addMedCheckInfos(MedCheckInfoAddVO medCheckInfoAddVO) {
-        boolean res = false;
-        Date now = DateUtil.now();
-        //获取人员id 和 该人员的医院id
-        Long hospitalId = Long.valueOf(SysUserUtils.getCurrentHospitalID());
-        Long principleId = Long.valueOf(SysUserUtils.getCurrentPrincipleID());
-        QueryWrapper<SysUser> userQuer = new QueryWrapper<>();
-        userQuer.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("id", principleId)
-                .eq("status", 1);
-        SysUser user = sysUserFacade.getOne(userQuer);
-        String principleName = user.getLinkman();
-        Map<String, Object> mapAll = new HashMap<String, Object>();
-        mapAll.put("is_deleted", IsDeleteEnum.N.getKey());
-        mapAll.put("behospital_code", medCheckInfoAddVO.getBehospitalCode());
-        mapAll.put("hospital_id", hospitalId);
-        mapAll.put("check_type", medCheckInfoAddVO.getCheckType());
-        QueryWrapper<MedExamineInfo> medCheckInfoQuerys = new QueryWrapper<>();
-        medCheckInfoQuerys.allEq(mapAll);
-        MedExamineInfo data = this.getOne(medCheckInfoQuerys, false);
-        if (data != null) {
-            //检验核查人是否是本人
-            if (data.getCheckId().equals(principleId)) {
-                res = saveNew(mapAll, now, hospitalId, principleId, principleName, medCheckInfoAddVO);
-            } else {
-                throw new CommonException(CommonErrorCode.NOT_EXISTS, "该数据已被人核查,您暂无权限!");
-            }
+    public Boolean rejected(RejectedVo rejectedVo) {
+        //通过医院id+病历id+条目ID+未删除  获取该缺陷记录
+        QcresultDetail qcresultDetail = getQcresultDetailById(rejectedVo);
+        //获取该病历缺陷申诉记录(医院id+病历id+质控缺陷id+未删除)
+        MedRejectedInfo medRejectedInfo = getMedRejectedInfo(rejectedVo.getHospitalId()
+                , rejectedVo.getBehospitalCode()
+                , rejectedVo.getCasesEntryId());
+        //缺陷状态-删除或忽略
+        if (IsDeleteEnum.Y.getKey().equals(qcresultDetail.getIsDeleted())) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该缺陷已被删除或忽略!");
+        }
+        //修改病历状态-驳回
+        UpdateWrapper<BehospitalInfo> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.eq("behospital_code", rejectedVo.getBehospitalCode())
+                .eq("hospital_id", rejectedVo.getHospitalId())
+                .eq("is_deleted", IsDeleteEnum.N)
+                .set("status", "3");
+        behospitalInfoFacade.update(updateWrapper);
+
+        // 获取病历信息
+        BehospitalInfo behospitalInfo = behospitalInfoFacade.getOne(new QueryWrapper<BehospitalInfo>()
+                .eq("behospital_code", rejectedVo.getBehospitalCode())
+                .eq("hospital_id", rejectedVo.getHospitalId())
+                .eq("is_deleted", IsDeleteEnum.N));
+
+        //驳回记录不存在
+        if (medRejectedInfo == null) {
+            //新增驳回记录
+            return addmedRejectedInfo(rejectedVo, behospitalInfo.getDoctorId());
         } else {
-            //该病历没有核查的时候, 就添加核查记录
-            MedExamineInfo medCheckInfo = new MedExamineInfo();
-            medCheckInfo.setGmtCreate(now);
-            medCheckInfo.setGmtModified(now);
-            medCheckInfo.setHospitalId(hospitalId);
-            medCheckInfo.setCheckId(principleId);
-            medCheckInfo.setCheckName(principleName);
-            medCheckInfo.setCheckTime(now);
-            medCheckInfo.setAction(medCheckInfoAddVO.getCheckType());
-            medCheckInfo.setStatus(medCheckInfoAddVO.getCheckStatus());
-            medCheckInfo.setBehospitalCode(medCheckInfoAddVO.getBehospitalCode());
-            res = this.save(medCheckInfo);
+            //删除驳回记录
+            medRejectedInfoFacade.update(new UpdateWrapper<MedRejectedInfo>().set("is_deleted", IsDeleteEnum.Y.getKey())
+                    .eq("id", medRejectedInfo.getId()));
+            //新增驳回记录
+            return addmedRejectedInfo(rejectedVo, behospitalInfo.getDoctorId());
         }
 
-        return res;
     }
 
     /**
-     * @param mapAll
-     * @param now
-     * @param hospitalId
-     * @param principleId
-     * @param principleName
-     * @param medCheckInfoAddVO
-     * @return
+     * @param rejectedVo
+     * @Description通过医院id+病历id+条目ID+未删除 获取该缺陷记录
+     * @Return QcresultDetail
      */
-    public boolean saveNew(Map<String, Object> mapAll, Date now, Long hospitalId, Long principleId, String principleName, MedCheckInfoAddVO medCheckInfoAddVO) {
-        boolean res = false;
-        UpdateWrapper<MedExamineInfo> medCheckInfoUpdate = new UpdateWrapper<>();
-        medCheckInfoUpdate.allEq(mapAll).set("is_deleted", IsDeleteEnum.Y.getKey()).set("gmt_modified", now);
-        res = this.update(medCheckInfoUpdate);
-        //删除原来的成功后, 再新建一条核查数据
-        if (res) {
-            MedExamineInfo medCheckInfo = new MedExamineInfo();
-            medCheckInfo.setGmtCreate(now);
-            medCheckInfo.setGmtModified(now);
-            medCheckInfo.setHospitalId(hospitalId);
-            medCheckInfo.setCheckId(principleId);
-            medCheckInfo.setCheckName(principleName);
-            medCheckInfo.setCheckTime(now);
-            medCheckInfo.setAction(medCheckInfoAddVO.getCheckType());
-            medCheckInfo.setStatus(medCheckInfoAddVO.getCheckStatus());
-            medCheckInfo.setBehospitalCode(medCheckInfoAddVO.getBehospitalCode());
-            res = this.save(medCheckInfo);
+    private QcresultDetail getQcresultDetailById(RejectedVo rejectedVo) {
+        if (rejectedVo.getCasesEntryId() == null) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "条目ID为空!");
+        }
+        List<QcresultDetail> qcresultDetails = qcresultDetailFacade.list(new QueryWrapper<QcresultDetail>()
+                .eq("hospital_id", rejectedVo.getHospitalId())
+                .eq("behospital_code", rejectedVo.getBehospitalCode())
+                .eq("cases_entry_id", rejectedVo.getCasesEntryId())
+                .orderByDesc("id"));
+        if (ListUtil.isEmpty(qcresultDetails)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "质控缺陷不存在!");
         }
-        return res;
+        return qcresultDetails.get(0);
     }
 
     /**
-     * @Author songxl
-     * @Description 院区人员用户科室合并
-     * @time: 2024/6/1
-     * @Param [checkRoleMap, checkUserDTOS, s]
-     * @Return void
-     * @MethodName margeDept
+     * @param hospitalId
+     * @param behospitalCode
+     * @param getCasesEntryId
+     * @Description获取该病历缺陷申诉记录
+     * @Return MedRejectedInfo
      */
-    private void margeDept(Map<String, List<CheckDeptDTO>> checkRoleMap, List<DeptCheckUserDTO> checkUserDTOS, String roleId) {
-        if (ListUtil.isEmpty(checkUserDTOS)) {
-            return;
+    private MedRejectedInfo getMedRejectedInfo(Long hospitalId, String behospitalCode, Long getCasesEntryId) {
+
+        if (getCasesEntryId == null) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "质控缺陷id为空!");
+        }
+        List<MedRejectedInfo> medRejectedInfos = medRejectedInfoFacade.list(new QueryWrapper<MedRejectedInfo>()
+                .eq("hospital_id", hospitalId)
+                .eq("behospital_code", behospitalCode)
+                .eq("cases_entry_id", getCasesEntryId)
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .orderByDesc("gmt_create"));
+        if (ListUtil.isNotEmpty(medRejectedInfos)) {
+            return medRejectedInfos.get(0);
         }
-        Set<String> userIds = checkUserDTOS.stream().map(DeptCheckUserDTO::getDoctorId).collect(Collectors.toSet());
+        return null;
+    }
+
+    /**
+     * @param rejectedVo
+     * @Description 驳回记录插入
+     * @Return Boolean
+     */
+    private Boolean addmedRejectedInfo(RejectedVo rejectedVo,String doctorId) {
         try {
-            List<CheckDeptDTO> tempDepts = new ArrayList<>();
-            //全部
-            CheckDeptDTO allCheckDept = new CheckDeptDTO();
-            allCheckDept.setDeptId("-1");
-            allCheckDept.setDeptName("全部");
-            userIds.stream().forEach(userId -> {
-                //获取该用户的科室拼接
-                StringBuilder deptIdBuilder = new StringBuilder();
-                StringBuilder deptNameBuilder = new StringBuilder();
-                StringBuilder userName = new StringBuilder();
-                checkUserDTOS.stream().forEach(checkUserDTO -> {
-                    if (userId.equals(checkUserDTO.getDoctorId())) {
-                        deptIdBuilder.append(checkUserDTO.getDeptId()).append(",");
-                        deptNameBuilder.append(checkUserDTO.getDeptName()).append(",");
-                        if (userName.length() == 0) {
-                            userName.append(checkUserDTO.getDoctorName());
-                        }
-                        //除了全部以外添加科室信息
-                        if (!tempDepts.stream().map(CheckDeptDTO::getDeptId).collect(Collectors.toList())
-                                .contains(checkUserDTO.getDeptId())) {
-                            CheckDeptDTO oneCheckUser = new CheckDeptDTO();
-                            oneCheckUser.setDeptId(checkUserDTO.getDeptId());
-                            oneCheckUser.setDeptName(checkUserDTO.getDeptName());
-                            tempDepts.add(oneCheckUser);
-                        }
-                    }
-                });
-
-                //合并科室
-                String deptId = deptIdBuilder.substring(0, deptIdBuilder.length() - 1);
-                String deptName = deptNameBuilder.substring(0, deptNameBuilder.length() - 1);
-                //科室用户
-                DeptCheckUserDTO deptCheckUserDTO = new DeptCheckUserDTO();
-                deptCheckUserDTO.setDoctorId(userId);
-                deptCheckUserDTO.setDoctorName(userName.toString());
-                deptCheckUserDTO.setDeptId(deptId);
-                deptCheckUserDTO.setDeptName(deptName);
-                AtomicBoolean hasFlag = new AtomicBoolean(false);
-                //全部处理
-//                if (ListUtil.isEmpty(allCheckDept.getDeptcheckUsers())) {
-//                    allCheckDept.getDeptcheckUsers().add(deptCheckUserDTO);
-//                }
-//                allCheckDept.getDeptcheckUsers().forEach(oneDeptCheckUser -> {
-//                    if (!userId.equals(oneDeptCheckUser.getDoctorId())) {
-//                        hasFlag.set(true);
-//                    }
-//                });
-//                if (hasFlag.get()) {
-//                    allCheckDept.getDeptcheckUsers().add(deptCheckUserDTO);
-//                }
-//
-//                tempDepts.stream().forEach(checkDeptDTO -> {
-//                    if (deptId.contains(checkDeptDTO.getDeptId())) {
-//                        checkDeptDTO.getDeptcheckUsers().add(deptCheckUserDTO);
-//                    }
-//                });
-            });
-            tempDepts.add(0, allCheckDept);
-            checkRoleMap.put(roleId + "", tempDepts);
+            MedRejectedInfo medRejectedInfo = new MedRejectedInfo();
+            BeanUtils.copyProperties(rejectedVo, medRejectedInfo);
+            medRejectedInfo.setDoctorId(doctorId);
+            medRejectedInfo.setGmtCreate(DateUtil.now());
+            return medRejectedInfoFacade.save(medRejectedInfo);
         } catch (Exception e) {
-            e.printStackTrace();
+            throw new CommonException(CommonErrorCode.SERVICE_STOP_ERROR, "驳回记录插入失败!");
         }
+    }
+
+    /**
+     * 申诉接口
+     **/
+    public Boolean addAppealInfo(MedAppealInfoVO medAppealInfoVO) {
+
+        if (medAppealInfoVO.getCasesEntryId() == null) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "质控缺陷id为空!");
+        }
+
+        //修改病历状态-申诉
+        UpdateWrapper<BehospitalInfo> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.eq("behospital_code", medAppealInfoVO.getBehospitalCode())
+                .eq("hospital_id", medAppealInfoVO.getHospitalId())
+                .eq("is_deleted", IsDeleteEnum.N)
+                .set("status", "5");
+        behospitalInfoFacade.update(updateWrapper);
 
+        //获取该病历缺陷申诉记录(医院id+病历id+质控缺陷id+未删除)
+        List<MedAppealInfo> medAppealInfos = medAppealInfoFacade.list(new QueryWrapper<MedAppealInfo>()
+                .eq("hospital_id", medAppealInfoVO.getHospitalId())
+                .eq("behospital_code", medAppealInfoVO.getBehospitalCode())
+                .eq("cases_entry_id", medAppealInfoVO.getCasesEntryId())
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .orderByDesc("gmt_create"));
+        if (ListUtil.isEmpty(medAppealInfos)) {
+            return addmedAppealInfo(medAppealInfoVO);
+        } else {
+            //删除申诉记录
+            medAppealInfoFacade.update(new UpdateWrapper<MedAppealInfo>().set("is_deleted", IsDeleteEnum.Y.getKey())
+                    .eq("id", medAppealInfos.get(0).getId()));
+
+            //新增申诉记录
+            return addmedAppealInfo(medAppealInfoVO);
+        }
     }
 
     /**
-     * @Author songxl
-     * @Description 拼装科室、核查人员、任务数对象
-     * @time: 2024/5/17
-     * @Param [checkRoleMap, doctorInfos, userJobs, deptInfos, roleId]
-     * @Return void
-     * @MethodName addCheckInfoMap
+     * @param medAppealInfoVO
+     * @Description 申诉记录插入
+     * @Return Boolean
      */
-    private void addCheckInfoMaps(Map<String, List<CheckDeptDTO>> checkRoleMap, Map<String, String> deptMap,
-                                  List<DeptCheckUserDTO> userJobs, List<DeptCheckUserDTO> checkUserDTOS, int roleId, int jobType) {
-        //非院区任务
-        if (CheckJobTypeEnum.HOSP_SUPERVISOR.getKey() != jobType) {
-            if (deptMap.isEmpty() || checkUserDTOS.isEmpty()) {
-                return;
-            }
-            checkRoleMap.put(roleId + "", new ArrayList<>());
-            //遍历科室
-            for (String deptId : deptMap.keySet()) {
-                //科室对象
-                CheckDeptDTO checkDeptDTO = new CheckDeptDTO();
-                checkDeptDTO.setDeptId(deptId);
-                checkDeptDTO.setDeptName(deptMap.get(deptId));
-//                checkDeptDTO.setDeptcheckUsers(new ArrayList<DeptCheckUserDTO>());
-                //遍历医生
-                for (DeptCheckUserDTO checkUserDTO : checkUserDTOS) {
-                    //同一科室
-                    if (checkDeptDTO.getDeptId().equals(checkUserDTO.getDeptId())) {
-                        DeptCheckUserDTO deptCheckUserDTO = new DeptCheckUserDTO();
-                        deptCheckUserDTO.setDeptId(checkUserDTO.getDeptId());
-                        deptCheckUserDTO.setDeptName(checkUserDTO.getDeptName());
-                        deptCheckUserDTO.setDoctorId(checkUserDTO.getDoctorId());
-                        deptCheckUserDTO.setDoctorName(checkUserDTO.getDoctorName());
-//                        checkDeptDTO.getDeptcheckUsers().add(deptCheckUserDTO);
-                    }
-                }
-//                for (DeptCheckUserDTO deptCheckUserDTO : checkDeptDTO.getDeptcheckUsers()) {
-//                    //遍历数量
-//                    for (DeptCheckUserDTO jobNumDto : userJobs) {
-//                        //这个科室有这个人
-//                        if (deptCheckUserDTO.getDeptId().equals(jobNumDto.getDeptId())) {
-//                            if (deptCheckUserDTO.getDoctorId().equals(jobNumDto.getDoctorId())) {
-//                                if (jobNumDto.getStatus() == 0) {
-//                                    deptCheckUserDTO.setJobNum(jobNumDto.getJobNum());
-//                                }
-//                                if (jobNumDto.getStatus() == 1) {
-//
-//                                    deptCheckUserDTO.setCheckNum(jobNumDto.getJobNum());
-//                                }
-//                            }
-//
-//                        }
-//                    }
-//                }
-                checkRoleMap.get(roleId + "").add(checkDeptDTO);
-            }
+    private Boolean addmedAppealInfo(MedAppealInfoVO medAppealInfoVO) {
+        try {
+            MedAppealInfo medAppealInfo = new MedAppealInfo();
+            BeanUtils.copyProperties(medAppealInfoVO, medAppealInfo);
+            medAppealInfo.setGmtCreate(DateUtil.now());
+            return medAppealInfoFacade.save(medAppealInfo);
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVICE_STOP_ERROR, "申诉记录插入失败!");
+        }
+    }
+
+    /**
+     * @param behospitalcodeVO
+     * @Description 获取全部驳回记录
+     * @Return QcresultDetail
+     */
+    public List<RejectPatientDTO> getRejectPatient(BehospitalcodeVO behospitalcodeVO) {
+        List<RejectPatientDTO> rejectPatientDTOList = new ArrayList<>();
+        //获取该病历缺陷申诉记录(医院id+病历id+质控缺陷id+未删除)
+        List<MedRejectedInfo> medRejectedInfos = medRejectedInfoFacade.list(new QueryWrapper<MedRejectedInfo>()
+                .eq("hospital_id", behospitalcodeVO.getHospitalId())
+                .eq("behospital_code", behospitalcodeVO.getBehospitalCode())
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .orderByDesc("gmt_create"));
+
+        if (ListUtil.isEmpty(medRejectedInfos)) {
+            return rejectPatientDTOList;
+        }
+
+        String doctorId = medRejectedInfos.get(0).getDoctorId();
+        if (StringUtil.isEmpty(doctorId)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "入院登记信息中未找到主治医生!");
+        }
+
+        List<MedRejectedInfo> medReInfos = medRejectedInfoFacade.list(new QueryWrapper<MedRejectedInfo>()
+                .eq("hospital_id", behospitalcodeVO.getHospitalId())
+                .eq("doctor_id", doctorId)
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .orderByDesc("gmt_create"));
+
+        List<String> beHospitalCodeList = new ArrayList<>();
+        for (MedRejectedInfo medRejectedInfo : medReInfos) {
+            beHospitalCodeList.add(medRejectedInfo.getBehospitalCode());
         }
-        //院区任务不是同一科室的人员数量增加
-//        else if (CheckJobTypeEnum.HOSP_SUPERVISOR.getKey() == jobType) {
-//            checkRoleMap.get(roleId + "").stream().forEach(checkDeptDTO -> {
-//                if (!ListUtil.isEmpty(checkDeptDTO.getDeptcheckUsers())) {
-//                    checkDeptDTO.getDeptcheckUsers().stream().forEach(deptCheckUser -> {
-//                        userJobs.stream().forEach(userJob -> {
-//                            if (deptCheckUser.getDoctorId().equals(userJob.getDoctorId())) {
-//                                if (userJob.getStatus() == 0) {
-//                                    deptCheckUser.setJobNum(userJob.getJobNum());
-//                                }
-//                                if (userJob.getStatus() == 1) {
-//                                    deptCheckUser.setCheckNum(userJob.getJobNum());
-//                                }
-//                            }
-//                        });
-//                    });
-//                }
-//            });
-//        }
+        // 构建查询条件(含空值检查)
+        QueryWrapper<BehospitalInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda()
+                .eq(BehospitalInfo::getHospitalId, behospitalcodeVO.getHospitalId())
+                .eq(BehospitalInfo::getIsDeleted, IsDeleteEnum.N);
+        if (!CollectionUtils.isEmpty(beHospitalCodeList)) {
+            queryWrapper.lambda().in(BehospitalInfo::getBehospitalCode, beHospitalCodeList);
+        }
+        queryWrapper.lambda().select(BehospitalInfo::getName,
+                BehospitalInfo::getSex,
+                BehospitalInfo::getFileCode,
+                BehospitalInfo::getBehospitalCode);
+
+        rejectPatientDTOList = behospitalInfoFacade.list(queryWrapper)
+                .stream()
+                .map(this::convertToRejectPatientDTO)
+                .collect(Collectors.toList());
+
+        return rejectPatientDTOList;
     }
+
+    // 对象转换方法
+    private RejectPatientDTO convertToRejectPatientDTO(BehospitalInfo info) {
+        return RejectPatientDTO.builder()
+                .name(info.getName())
+                .sex(info.getSex())
+                .fileCode(info.getFileCode())
+                .behospitalCode(info.getBehospitalCode())
+                .build();
+    }
+
 }

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

@@ -0,0 +1,14 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.MedRejectedInfoServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * <p>
+ * 表名:MedRejectedInfoFacade 业务类
+ * </p>
+ */
+@Component
+public class MedRejectedInfoFacade extends MedRejectedInfoServiceImpl {
+
+}

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

@@ -33,7 +33,7 @@ public class QcClientFacade {
         if (StringUtil.isBlank(url)) {
             throw new CommonException(CommonErrorCode.NOT_EXISTS, "配置表内找不到评分接口地址数据!");
         }
-        url = "http://127.0.0.1:6610";
+        url = "http://127.0.0.1:6660";
         try {
             uri = new URI(url);
         } catch (Exception e) {

+ 12 - 15
src/main/java/com/diagbot/facade/QcresultInfoFacade.java

@@ -8,7 +8,6 @@ import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.MedQcresultCasesServiceImpl;
-import com.diagbot.service.impl.QcRuleWarnServiceImpl;
 import com.diagbot.service.impl.QcresultDetailServiceImpl;
 import com.diagbot.service.impl.QcresultInfoServiceImpl;
 import com.diagbot.util.*;
@@ -30,9 +29,6 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
     @Qualifier("qcresultDetailServiceImpl")
     private QcresultDetailServiceImpl qcresultDetailServiceImpl;
     @Autowired
-    @Qualifier("qcRuleWarnServiceImpl")
-    private QcRuleWarnServiceImpl qcRuleWarnServiceImpl;
-    @Autowired
     private AlgorithmFacade algorithmFacade;
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
@@ -228,18 +224,19 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                             .eq("grade_type", "2")
                             .eq("behospital_code", analyzeVO.getBehospitalCode()));
                 }
-
-                qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
+                if (oldQcresultDetails != null) {
+                    qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
 //                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("qcresult_info_id", qcresultInfoup.getId())
-                        .eq("behospital_code", analyzeVO.getBehospitalCode())
-                        .set("grade_type", 1)
-                        .set("opt_type", 1)
-                        .set("is_deleted", IsDeleteEnum.Y.getKey())
-                        .set("modifier", useId)
-                        .set("gmt_modified", now));
-                //
+                            .eq("is_deleted", IsDeleteEnum.N.getKey())
+                            .eq("qcresult_info_id", qcresultInfoup.getId())
+                            .eq("behospital_code", analyzeVO.getBehospitalCode())
+                            .set("grade_type", 1)
+                            .set("opt_type", 1)
+                            .set("is_deleted", IsDeleteEnum.Y.getKey())
+                            .set("modifier", useId)
+                            .set("gmt_modified", now));
+                }
+
                 //批量插入新的数据
                 List<QcresultDetail> qcresultDetailList = new ArrayList<>();
                 if (ListUtil.isNotEmpty(oldQcresultDetails)) {

+ 0 - 1
src/main/java/com/diagbot/facade/SysUserFacade.java

@@ -43,7 +43,6 @@ import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.stereotype.Component;
 import org.springframework.util.DigestUtils;
-import org.springframework.util.StringUtils;
 
 import javax.imageio.ImageIO;
 import javax.servlet.ServletOutputStream;

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

@@ -653,12 +653,4 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      */
     public List<Map<String,String>> malignancy(@Param("filterVO") FilterVO filterVO);
 
-    /**
-     * 获取患者年龄信息(通过出生日期和入院日期重新计算)
-     * @param hospitalId
-     * @param behospitalCodes
-     * @return
-     */
-    List<BehospitalInfoAgeDTO> getBehospitalInfoAge(Long hospitalId, List<String> behospitalCodes);
-
 }

+ 13 - 0
src/main/java/com/diagbot/mapper/MedAppealInfoMapper.java

@@ -0,0 +1,13 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.MedAppealInfo;
+
+/**
+ * <p>
+ * 表名:med_appeal_info Mapper接口
+ * </p>
+ */
+public interface MedAppealInfoMapper extends BaseMapper<MedAppealInfo> {
+
+}

+ 13 - 0
src/main/java/com/diagbot/mapper/MedRejectedInfoMapper.java

@@ -0,0 +1,13 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.MedRejectedInfo;
+
+/**
+ * <p>
+ * 表名:med_appeal_info Mapper接口
+ * </p>
+ */
+public interface MedRejectedInfoMapper extends BaseMapper<MedRejectedInfo> {
+
+}

+ 0 - 15
src/main/java/com/diagbot/mapper/QcRuleWarnMapper.java

@@ -1,15 +0,0 @@
-package com.diagbot.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.diagbot.entity.QcRuleWarn;
-/**
- * <p>
- *  质控规则提醒 Mapper 接口
- * </p>
- *
- * @author dsYun
- * @since 2024-03-02
- */
-public interface QcRuleWarnMapper extends BaseMapper<QcRuleWarn> {
-
-}

+ 13 - 0
src/main/java/com/diagbot/service/MedAppealInfoService.java

@@ -0,0 +1,13 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.MedAppealInfo;
+
+/**
+ * <p>
+ * 申诉记录表 Service类
+ * </p>
+ */
+public interface MedAppealInfoService extends IService<MedAppealInfo> {
+
+}

+ 13 - 0
src/main/java/com/diagbot/service/MedRejectedInfoService.java

@@ -0,0 +1,13 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.MedRejectedInfo;
+
+/**
+ * <p>
+ * 申诉记录表 Service类
+ * </p>
+ */
+public interface MedRejectedInfoService extends IService<MedRejectedInfo> {
+
+}

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

@@ -1,16 +0,0 @@
-package com.diagbot.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.diagbot.entity.QcRuleWarn;
-
-/**
- * <p>
- * 质控规则提醒标准 服务类
- * </p>
- *
- * @author dsYun
- * @since 2024-03-02
- */
-public interface QcRuleWarnService extends IService<QcRuleWarn> {
-
-}

+ 17 - 0
src/main/java/com/diagbot/service/impl/MedAppealInfoServiceImpl.java

@@ -0,0 +1,17 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.MedAppealInfo;
+import com.diagbot.mapper.MedAppealInfoMapper;
+import com.diagbot.service.MedAppealInfoService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 申诉记录表 Service实现类
+ * </p>
+ */
+@Service
+public class MedAppealInfoServiceImpl extends ServiceImpl<MedAppealInfoMapper, MedAppealInfo> implements MedAppealInfoService {
+
+}

+ 17 - 0
src/main/java/com/diagbot/service/impl/MedRejectedInfoServiceImpl.java

@@ -0,0 +1,17 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.MedRejectedInfo;
+import com.diagbot.mapper.MedRejectedInfoMapper;
+import com.diagbot.service.MedRejectedInfoService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 申诉记录表 Service实现类
+ * </p>
+ */
+@Service
+public class MedRejectedInfoServiceImpl extends ServiceImpl<MedRejectedInfoMapper, MedRejectedInfo> implements MedRejectedInfoService {
+
+}

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

@@ -1,20 +0,0 @@
-package com.diagbot.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.diagbot.entity.QcRuleWarn;
-import com.diagbot.mapper.QcRuleWarnMapper;
-import com.diagbot.service.QcRuleWarnService;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 质控规则提醒  服务实现类
- * </p>
- *
- * @author dsYun
- * @since 2024-03-02
- */
-@Service
-public class QcRuleWarnServiceImpl extends ServiceImpl<QcRuleWarnMapper, QcRuleWarn> implements QcRuleWarnService {
-
-}

+ 6 - 0
src/main/java/com/diagbot/vo/BehospitalcodeVO.java

@@ -2,6 +2,9 @@ package com.diagbot.vo;
 
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 /**
  * @description:
  * @author: zhoutg
@@ -10,7 +13,10 @@ import lombok.Data;
 @Data
 public class BehospitalcodeVO {
 
+    @NotBlank(message = "behospitalCode不能为空")
     private String behospitalCode; // 病历id
+
+    @NotNull(message = "hospitalId不能为空")
     private Long hospitalId; //医院ID
 
 }

+ 58 - 0
src/main/java/com/diagbot/vo/MedAppealInfoVO.java

@@ -0,0 +1,58 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2022/1/6
+ */
+@Data
+public class MedAppealInfoVO {
+
+    @ApiModelProperty(value = "医院ID")
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "病人住院ID", required = true)
+    @NotBlank(message = "病人住院ID不能为空")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "缺陷详情")
+    private String qcresultDetailMsg;
+
+    @ApiModelProperty(value = "缺陷扣分分值")
+    private BigDecimal qcresultDetaiValue;
+
+    @ApiModelProperty(value = "条目ID")
+    private Long casesEntryId;
+
+    @ApiModelProperty(value = "单项否决(1-单项否决 0-非)")
+    private Integer isReject;
+
+    @ApiModelProperty(value = "质控条目(新增已有操作才有值)")
+    private String casesEntryName;
+
+    @ApiModelProperty(value = "提示信息(新增已有操作才有值)")
+    private String casesEntryMsg;
+
+    @ApiModelProperty(value = "分值(新增已有操作才有值)")
+    private BigDecimal value;
+
+    @ApiModelProperty(value = "申诉人id")
+    private String claimantId;
+
+    @ApiModelProperty(value = "申诉说明", required = true)
+    @NotBlank(message = "申诉说明不能为空")
+    private String appealExplain;
+
+    @ApiModelProperty(value = "审核人id", required = true)
+    private Long examineId;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}

+ 0 - 37
src/main/java/com/diagbot/vo/QcRuleWarnAlgVO.java

@@ -1,37 +0,0 @@
-package com.diagbot.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.math.BigDecimal;
-
-/**
- * @Description:
- * @author: dsYun
- * @time: 2024/3/1 10:01
- */
-@Getter
-@Setter
-public class QcRuleWarnAlgVO {
-    //结果明细ID
-    private Long id;
-    //评分结果id
-    private Long qcresultInfoId;
-    //模块ID
-    private Long casesId;
-    //模块名称
-    private String casesName;
-    //模块分数
-    private BigDecimal casesScore;
-    //所属条目ID
-    private Long casesEntryId;
-    //条目分值
-    private BigDecimal score;
-    //条目提示信息
-    private String msg;
-    //质控返回info
-    private String info;
-    //单项否决(1-单项否决 0-非)
-    private Integer isReject;
-}

+ 0 - 25
src/main/java/com/diagbot/vo/QcRuleWarnVO.java

@@ -1,25 +0,0 @@
-package com.diagbot.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @Description:
- * @author: dsYun
- * @time: 2024/2/29 14:27
- */
-@Getter
-@Setter
-public class QcRuleWarnVO {
-    //病历id
-    private String behospitalCode;
-    //医院ID
-    @ApiModelProperty(hidden = true)
-    private Long hospitalId;
-    //姓名
-    @ApiModelProperty(hidden = true)
-    private String name;
-    //规则名称
-    private String msg;
-}

+ 57 - 0
src/main/java/com/diagbot/vo/RejectedVo.java

@@ -0,0 +1,57 @@
+package com.diagbot.vo;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * 驳回
+ * @Description:
+ * @author: cy
+ * @time: 2020/9/4 14:59
+ */
+@Getter
+@Setter
+public class RejectedVo {
+    @ApiModelProperty(value = "医院ID",required = true)
+    @NotNull(message = "医院ID不能为空")
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "病人住院ID", required = true)
+    @NotBlank(message = "病人住院ID不能为空")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "缺陷详情")
+    private String qcresultDetailMsg;
+
+    @ApiModelProperty(value = "缺陷扣分分值")
+    private BigDecimal qcresultDetaiValue;
+
+    @ApiModelProperty(value = "条目ID")
+    @NotBlank(message = "条目ID不能为空")
+    private Long casesEntryId;
+
+    @ApiModelProperty(value = "单项否决(1-单项否决 0-非)")
+    private Integer isReject;
+
+    @ApiModelProperty(value = "质控条目")
+    private String casesEntryName;
+
+    @ApiModelProperty(value = "提示信息")
+    private String casesEntryMsg;
+
+    @ApiModelProperty(value = "分值")
+    private BigDecimal value;
+
+    @ApiModelProperty(value = "审核人id", required = true)
+    private Long examineId;
+
+    @ApiModelProperty(value = "驳回理由")
+    private String rejectedReason;
+
+}

+ 15 - 2
src/main/java/com/diagbot/web/BehospitalInfoController.java

@@ -5,7 +5,9 @@ import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.*;
 import com.diagbot.entity.QcCasesRelevanceEntry;
 import com.diagbot.facade.BehospitalInfoFacade;
+import com.diagbot.facade.MedExamineInfoFacade;
 import com.diagbot.facade.QcresultInfoFacade;
+import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -39,6 +41,8 @@ public class BehospitalInfoController {
     BehospitalInfoFacade behospitalInfoFacade;
     @Autowired
     private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    MedExamineInfoFacade medExamineInfoFacade;
 
     @ApiOperation(value = "病历分页列表[by:zhoutg]",
             notes = "behospitalCode:病人住院序号<br>" +
@@ -105,13 +109,13 @@ public class BehospitalInfoController {
     }
 
 
-    @ApiOperation(value = "评分-对外api接口[by:zhoutg]",
+    @ApiOperation(value = "评分-出院患者接口[by:dsYun]",
             notes = "")
     @PostMapping("/analyze_api")
     @SysLogger("analyze_api")
     @Transactional
     //    @ApiIgnore
-    public RespDTO<Map<String, Object> > analyzeApi(@RequestBody AnalyzeRunVO analyzeRunVO) {
+    public RespDTO<AnalyzeApiDTO> analyzeApi(@RequestBody AnalyzeRunVO analyzeRunVO) {
         return RespDTO.onSuc(behospitalInfoFacade.analyzeApi(analyzeRunVO));
     }
 
@@ -177,6 +181,15 @@ public class BehospitalInfoController {
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
     }
 
+    @ApiOperation(value = "查看全部驳回患者[by:dsYun]",
+            notes = "查看全部驳回患者")
+    @PostMapping("/getRejectPatient")
+    @SysLogger("getRejectPatient")
+    @Transactional
+    public RespDTO<List<RejectPatientDTO>> getRejectPatient(@RequestBody BehospitalcodeVO behospitalcodeVO) {
+        return RespDTO.onSuc(medExamineInfoFacade.getRejectPatient(behospitalcodeVO));
+    }
+
     @ApiOperation(value = "对病历进行评分【****************批量评分*************】[by:zhoutg]",
             notes = "参数内容清空:【所有医院】【未评分】病历数据<br>" +
                     "<br>" +

+ 26 - 10
src/main/java/com/diagbot/web/MedExamineInfoController.java

@@ -3,6 +3,7 @@ package com.diagbot.web;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.MedExamineInfoFacade;
+import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -13,6 +14,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.validation.Valid;
+
 /**
  * <p>
  * 审核 前端控制器
@@ -30,16 +33,6 @@ public class MedExamineInfoController {
     @Autowired
     MedExamineInfoFacade medExamineInfoFacade;
 
-//    @ApiOperation(value = "核查数据接口[by:wangfeng]",
-//            notes = "核查数据接口")
-//    @PostMapping("/addMedCheckInfo")
-//    @SysLogger("addMedCheckInfo")
-//    @ApiIgnore
-//    public RespDTO<Boolean> addMedCheckInfo(@RequestBody MedCheckInfoAddVO medCheckInfoAddVO) {
-//        Boolean res = medExamineInfoFacade.addMedCheckInfos(medCheckInfoAddVO);
-//        return RespDTO.onSuc(res);
-//    }
-
     @ApiOperation(value = "通过审核[by:dsYun]")
     @PostMapping("/passAudit")
     @SysLogger("passAudit")
@@ -48,4 +41,27 @@ public class MedExamineInfoController {
         Boolean res = medExamineInfoFacade.passAudit(behospitalcodeVO);
         return RespDTO.onSuc(res);
     }
+
+    @ApiOperation(value = "驳回[by:dsYun]",
+            notes = "驳回")
+    @PostMapping("/rejected")
+    @Transactional
+    public RespDTO<Boolean> rejected(@RequestBody RejectedVo rejectedVo) {
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        rejectedVo.setHospitalId(Long.valueOf(hospitalId));
+        rejectedVo.setExamineId(Long.valueOf(userId));
+        return RespDTO.onSuc(medExamineInfoFacade.rejected(rejectedVo));
+    }
+
+    @ApiOperation(value = "申诉[by:dsYun]",
+            notes = "申诉")
+    @PostMapping("/addAppealInfo")
+    @Transactional
+    public RespDTO<Boolean> addAppealInfo(@RequestBody @Valid MedAppealInfoVO medAppealInfoVO) {
+        medAppealInfoVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
+        medAppealInfoVO.setClaimantId(SysUserUtils.getCurrentPrincipleID());
+        return RespDTO.onSuc(medExamineInfoFacade.addAppealInfo(medAppealInfoVO));
+    }
+
 }

+ 9 - 30
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -308,21 +308,21 @@
         SELECT a.*, u.linkman
         FROM
         (
-        SELECT DISTINCT b.`name` model_name,c.score,c.msg,c.cases_entry_id,c.is_reject,c.id id,c.info, a.cases_id cases_id, d.score cases_score,
-        b.id model_id, a.name standard_msg, c.opt_type, c.grade_type,
+        SELECT DISTINCT c.score,c.msg,c.cases_entry_id,c.is_reject,c.id id,c.info,
+         a.name standard_msg, c.opt_type, c.grade_type,
          c.gmt_create, c.gmt_modified, c.modifier,c.is_deleted,c.explain_info as explainInfo,
-        a.type, a.drgs
+        a.type, a.drgs, a.rule_type
         FROM
-        `qc_cases_entry` a, qc_mode b, med_qcresult_detail c, qc_cases_hospital d
-        where a.is_deleted = 'N' and b.is_deleted = 'N' and d.is_deleted = 'N'
-        and a.id = c.cases_entry_id and a.mode_id = b.id
-        AND c.cases_id = d.cases_id and c.hospital_id = d.hospital_id
+        `qc_cases_entry` a, med_qcresult_detail c, qc_cases_hospital d
+        where a.is_deleted = 'N' and d.is_deleted = 'N'
+        and a.id = c.cases_entry_id
+        and c.hospital_id = d.hospital_id
         and c.hospital_id = #{hospitalId}
         <if test="qcresultInfoId != null">
             AND c.qcresult_info_id = #{qcresultInfoId}
         </if>
-        and c.behospital_code = #{behospitalCode} and b.id = 6
-        order by b.order_no, c.grade_type desc, a.order_no) a
+        and c.behospital_code = #{behospitalCode} and c.opt_type != 2
+        order by c.grade_type desc, a.order_no) a
         LEFT JOIN sys_user u  on u.id = a.modifier  and u.is_deleted = 'N'
     </select>
 
@@ -15415,25 +15415,4 @@
         and d.diagnose_name like '%恶性肿瘤%'
         and d.icd_code like 'C%'
     </select>
-
-    <!-- 获取患者年龄信息(通过出生日期和入院日期重新计算) -->
-    <select id="getBehospitalInfoAge" resultType="com.diagbot.dto.BehospitalInfoAgeDTO">
-        SELECT
-        mbi.behospital_code behospitalCode,
-        mhp.age,
-        TIMESTAMPDIFF(year,ifnull(mhp.birthday,mbi.birthday),mbi.behospital_date) as ageYear,
-        TIMESTAMPDIFF(day,ifnull(mhp.birthday,mbi.birthday),mbi.behospital_date) as ageDay
-        FROM
-        med_behospital_info mbi
-        LEFT JOIN med_home_page mhp
-        ON mbi.behospital_code=mhp.behospital_code
-        AND mbi.hospital_id = mhp.hospital_id AND mhp.is_deleted = 'N'
-        WHERE mbi.hospital_id=#{hospitalId} AND mbi.is_deleted = 'N'
-        <if test="behospitalCodes !=null and behospitalCodes.size > 0">
-            and mbi.behospital_code in
-            <foreach collection="behospitalCodes" item="item" open="(" close=")" separator=",">
-                #{item}
-            </foreach>
-        </if>
-    </select>
 </mapper>