Explorar o código

Merge branch 'dev/20220105_2.2.0_通用版_申诉驳回' into debug

# Conflicts:
#	pom.xml
songxinlu %!s(int64=3) %!d(string=hai) anos
pai
achega
9208b1da56
Modificáronse 55 ficheiros con 1436 adicións e 568 borrados
  1. 21 13
      doc/041.20220118_v2.2.0_通用版_申诉驳回/qc_init_v2.2.0_通用版_申诉驳回.sql
  2. 129 0
      src/main/java/com/diagbot/aggregate/LeaveHosCountByDeptAggregate.java
  3. 26 8
      src/main/java/com/diagbot/client/MedAppealExamineInfoServiceClient.java
  4. 102 0
      src/main/java/com/diagbot/client/MedAppealExamineInfoServiceClientFacade.java
  5. 12 16
      src/main/java/com/diagbot/client/MedAppealInfoServiceClient.java
  6. 52 0
      src/main/java/com/diagbot/client/MedAppealInfoServiceClientFacade.java
  7. 13 6
      src/main/java/com/diagbot/client/hystrix/MedAppealExamineInfoServiceHystrix.java
  8. 19 21
      src/main/java/com/diagbot/client/hystrix/MedAppealInfoServiceHystrix.java
  9. 6 0
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  10. 6 0
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  11. 7 1
      src/main/java/com/diagbot/dto/AppealExamineRecordDTO.java
  12. 61 0
      src/main/java/com/diagbot/dto/CommonResult.java
  13. 10 11
      src/main/java/com/diagbot/dto/ExportGetAppealReviewDTO.java
  14. 10 11
      src/main/java/com/diagbot/dto/ExportGetComplaintRecordDTO.java
  15. 20 0
      src/main/java/com/diagbot/dto/GetAppealDeptDTO.java
  16. 2 2
      src/main/java/com/diagbot/dto/GetAppealInfoDTO.java
  17. 20 0
      src/main/java/com/diagbot/dto/GetAppealModeDTO.java
  18. 1 1
      src/main/java/com/diagbot/dto/GetAppealReviewDTO.java
  19. 25 3
      src/main/java/com/diagbot/dto/GetComplaintRecordDTO.java
  20. 26 0
      src/main/java/com/diagbot/dto/MsgApiDTO.java
  21. 12 0
      src/main/java/com/diagbot/dto/MsgDTO.java
  22. 17 110
      src/main/java/com/diagbot/entity/MedAppealExamineInfo.java
  23. 58 36
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  24. 76 120
      src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java
  25. 132 67
      src/main/java/com/diagbot/facade/MedAppealExamineInfoManagementFacade.java
  26. 2 9
      src/main/java/com/diagbot/facade/QcresultInfoFacade.java
  27. 25 17
      src/main/java/com/diagbot/facade/SysDictionaryFacade.java
  28. 14 5
      src/main/java/com/diagbot/facade/SysUserFacade.java
  29. 2 0
      src/main/java/com/diagbot/mapper/QcresultInfoMapper.java
  30. 3 0
      src/main/java/com/diagbot/mapper/SysUserMapper.java
  31. 3 0
      src/main/java/com/diagbot/service/QcresultInfoService.java
  32. 4 0
      src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java
  33. 7 8
      src/main/java/com/diagbot/vo/AddAppealInfoApiVO.java
  34. 6 3
      src/main/java/com/diagbot/vo/AddAppealInfoVO.java
  35. 5 2
      src/main/java/com/diagbot/vo/ApprovedVo.java
  36. 3 0
      src/main/java/com/diagbot/vo/BehospitalPageVO.java
  37. 26 0
      src/main/java/com/diagbot/vo/CancelAppealInfoApiVO.java
  38. 3 0
      src/main/java/com/diagbot/vo/CancelAppealInfoVO.java
  39. 37 0
      src/main/java/com/diagbot/vo/GetAppealDeptVo.java
  40. 37 0
      src/main/java/com/diagbot/vo/GetAppealModeVo.java
  41. 1 2
      src/main/java/com/diagbot/vo/GetAppealOperationTypeVO.java
  42. 4 1
      src/main/java/com/diagbot/vo/GetAppealReviewVO.java
  43. 6 0
      src/main/java/com/diagbot/vo/GetAuditNumberVO.java
  44. 31 0
      src/main/java/com/diagbot/vo/GetComplaintDetailMsgVO.java
  45. 7 1
      src/main/java/com/diagbot/vo/GetComplaintRecordVO.java
  46. 2 2
      src/main/java/com/diagbot/vo/GetDetailVO.java
  47. 5 0
      src/main/java/com/diagbot/vo/GetReviewerApiVO.java
  48. 36 25
      src/main/java/com/diagbot/web/MedAppealExamineInfoController.java
  49. 126 42
      src/main/java/com/diagbot/web/MedAppealInfoController.java
  50. 1 1
      src/main/resources/application-pre.yml
  51. 1 1
      src/main/resources/application-pro.yml
  52. 1 1
      src/main/resources/bootstrap.yml
  53. 104 21
      src/main/resources/mapper/BehospitalInfoMapper.xml
  54. 57 1
      src/main/resources/mapper/QcresultInfoMapper.xml
  55. 14 0
      src/main/resources/mapper/SysUserMapper.xml

+ 21 - 13
doc/041.20220118_v2.2.0_通用版_申诉驳回/qc_init_v2.2.0_通用版_申诉驳回.sql

@@ -5,6 +5,8 @@ use `qc`;
 -- 注意
 
 
+ALTER TABLE med_qcresult_detail MODIFY COLUMN explain_info varchar(1500) DEFAULT NULL COMMENT '解释说明';
+
 /**
 med_appeal_info 申诉记录表
  */
@@ -22,13 +24,13 @@ CREATE TABLE `med_appeal_info` (
   `cases_entry_name` varchar(255) DEFAULT NULL COMMENT '质控条目(新增已有操作才有值)',
   `cases_entry_msg` varchar(255) DEFAULT NULL COMMENT '提示信息(新增已有操作才有值)',
   `value` decimal(5,1) DEFAULT NULL COMMENT '分值(新增已有操作才有值)',
-  `cases_id` bigint(20) DEFAULT NULL COMMENT '模块数据标准id',
-  `cases_name` varchar(60) DEFAULT NULL COMMENT '模块名称',
+  `mode_id` bigint(20) DEFAULT NULL COMMENT '模块id',
+  `mode_name` varchar(60) DEFAULT NULL COMMENT '模块名称',
   `defect_content` longtext COMMENT '病历内容',
   `claimant_id` bigint(20) NOT NULL COMMENT '申诉人id',
   `appeal_type` char(3) NOT NULL COMMENT '申诉类型(0:医生申诉|1:质控申诉)',
   `appeal_operation_type` char(3) NOT NULL COMMENT '申诉操作类型(0:删改|1:新增已有|2:新增缺失|3:恢复)',
-  `appeal_explain` varchar(255) DEFAULT NULL COMMENT '申诉说明',
+  `appeal_explain` varchar(1500) DEFAULT NULL COMMENT '申诉说明',
   `check_id` bigint(20) NOT NULL COMMENT '审核人id',
   `work_flow_node_id` bigint(20) NOT NULL COMMENT '当前工作流节点id',
   `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
@@ -50,14 +52,14 @@ CREATE TABLE `med_appeal_examine_info` (
   `check_id` bigint(20) NOT NULL COMMENT '审核人id',
   `example_status` char(1) DEFAULT '0' COMMENT '审核状态:0:驳回|1:通过',
   `example_operation` char(1) DEFAULT NULL COMMENT '审核处理方式: 1:修改|2:删除|3:新增已有|4:新增缺失|5:恢复',
-  `process_result` varchar(255) DEFAULT NULL COMMENT '处理结果',
-  `reject_reason` varchar(255) DEFAULT NULL COMMENT '驳回理由',
+  `process_result` varchar(1500) DEFAULT NULL COMMENT '处理结果',
+  `reject_reason` varchar(1500) DEFAULT NULL COMMENT '驳回理由',
   `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
   `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
   `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
   `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
   `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
-  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+  `remark` varchar(1500) NOT NULL DEFAULT '' COMMENT '备注',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COMMENT='申诉审批表';
 
@@ -137,13 +139,19 @@ INSERT INTO `med_work_flow_node` (`work_flow_id`,`work_flow_node_id`, `work_node
 sys_dictionary_info 系统字典表
  */
 
-INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '32', '0', '删改', '2', '0', '操作类型');
-INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '32', '1', '新增已有', '2', '0', '操作类型');
-INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '32', '2', '新增缺失', '2', '0', '操作类型');
-INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '32', '3', '恢复', '2', '0', '操作类型');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '32', '0', '删改条目', '2', '0', '操作类型');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '32', '1', '新增已有条目', '2', '0', '操作类型');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '32', '2', '新增缺失条目', '2', '0', '操作类型');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '32', '3', '恢复条目', '2', '0', '操作类型');
 INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '33', '0', '待审核', '2', '0', '状态');
-INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '33', '1', '驳回', '2', '0', '状态');
-INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '33', '2', '通过', '2', '0', '状态');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '33', '1', '已驳回', '2', '0', '状态');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '33', '2', '审核通过', '2', '0', '状态');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '34', '申诉驳回', '32,33,35', '2', '0', '申诉驳回状态登字典数据总览');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '35', '1', '修改', '2', '0', '审核处理方式');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '35', '2', '删除', '2', '0', '审核处理方式');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '35', '3', '新增已有', '2', '0', '审核处理方式');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '35', '4', '新增缺失', '2', '0', '审核处理方式');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '35', '5', '恢复', '2', '0', '审核处理方式');
 
 
 /**
@@ -155,7 +163,7 @@ INSERT INTO `sys_hospital_set` (`is_deleted`, `gmt_create`, `gmt_modified`, `cre
 INSERT INTO `sys_hospital_set` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `hospital_id`, `name`, `code`, `value`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', @hospitalid, '核查操作是否与申诉状态关联配置', 'check_operation_with_appeal', 'true', '核查操作是否与申诉状态关联配置');
 INSERT INTO `sys_hospital_set` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `hospital_id`, `name`, `code`, `value`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', @hospitalid, '工作流节点-操作接口映射关系', 'work_flow_node_mapping', '{\"addAppealInfo\":1,\"cancelAppealInfo\":2,\"approved\":3,\"rejected\":3}', '工作流节点-操作接口映射关系');
 INSERT INTO `sys_hospital_set` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `hospital_id`, `name`, `code`, `value`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', @hospitalid, '医院是否开启申诉功能', 'appeal_flag', 'true', '医院是否开启申诉功能');
-INSERT INTO `sys_hospital_set` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `hospital_id`, `name`, `code`, `value`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', @hospitalid, '审核人是否可以是自己开关', 'self_flag', 'false', '审核人是否可以是自己开关');
+INSERT INTO `sys_hospital_set` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `hospital_id`, `name`, `code`, `value`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', @hospitalid, '单人申诉', 'single_appeal_falg', 'true', '单人申诉开关');
 
 
 /**

+ 129 - 0
src/main/java/com/diagbot/aggregate/LeaveHosCountByDeptAggregate.java

@@ -0,0 +1,129 @@
+package com.diagbot.aggregate;
+
+import com.diagbot.dto.DeptBaseDTO;
+import com.diagbot.dto.NumDTO;
+import com.diagbot.facade.BasDeptInfoFacade;
+import com.diagbot.facade.BehospitalInfoFacade;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.FilterVO;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/7/15 16:03
+ */
+@Component
+public class LeaveHosCountByDeptAggregate {
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private BasDeptInfoFacade basDeptInfoFacade;
+
+    @DataProvider("setAllLeaveHosCount")
+    public Map<String, Object> setAllLeaveHosCount(
+            @InvokeParameter("filterVO") FilterVO filterVO,
+            @DataConsumer("leaveHosCountByDept") List<NumDTO> totleNumList,
+            @DataConsumer("deathCountByDept") List<NumDTO> deathNumList,
+            @DataConsumer("operationCountByDept") List<NumDTO> operationNumList) {
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        //关联科室
+        Map<String, Object> deptMap = getDeptByUser(filterVO);
+        if (deptMap == null) {
+            return retMap;
+        }
+        Map<String, NumDTO> totleMap = ListUtil.isEmpty(totleNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(totleNumList, "name");
+
+        Map<String, NumDTO> deathMap = new HashMap<>();
+        Map<String, NumDTO> operationMap = new HashMap<>();
+        deathMap = ListUtil.isEmpty(deathNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(deathNumList, "name");
+        operationMap = ListUtil.isEmpty(operationNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(operationNumList, "name");
+
+
+        for (String deptName : deptMap.keySet()) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("总人数", 0);
+            map.put("死亡人数", 0);
+            map.put("手术病人数", 0);
+            if (totleMap.containsKey(deptName)) {
+                map.put("总人数", totleMap.get(deptName).getNum());
+            }
+            if (deathMap.containsKey(deptName)) {
+                map.put("死亡人数", deathMap.get(deptName).getNum());
+            }
+            if (operationMap.containsKey(deptName)) {
+                map.put("手术病人数", operationMap.get(deptName).getNum());
+            }
+            retMap.put(deptName, map);
+        }
+        return retMap;
+    }
+
+    /**
+     * 出院总人数
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("leaveHosCountByDept")
+    public List<NumDTO> leaveHosCountByDept(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<NumDTO> numDTOS = behospitalInfoFacade.leaveHosCountByDept(filterVO);
+        return numDTOS;
+    }
+
+    /**
+     * 死亡人数
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("deathCountByDept")
+    public List<NumDTO> deathCountByDept(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<NumDTO> numDTOS = behospitalInfoFacade.deathCountByDept(filterVO);
+        return numDTOS;
+
+    }
+
+    /**
+     * 手术人数
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("operationCountByDept")
+    public List<NumDTO> operationCountByDept(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<NumDTO> numDTOS = behospitalInfoFacade.operationCountByDept(filterVO);
+        return numDTOS;
+    }
+
+    /**
+     * 用户关联科室
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> getDeptByUser(FilterVO filterVO) {
+        List<DeptBaseDTO> deptList = basDeptInfoFacade.getDeptByUser(filterVO);
+        if (ListUtil.isNotEmpty(deptList)) {
+            return EntityUtil.makeMapWithKeyValue(deptList, "deptName", "deptId");
+        } else {
+            return null;
+        }
+    }
+}

+ 26 - 8
src/main/java/com/diagbot/client/MedAppealExamineInfoServiceClient.java

@@ -2,8 +2,18 @@ package com.diagbot.client;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.client.hystrix.MedAppealExamineInfoServiceHystrix;
-import com.diagbot.dto.*;
-import com.diagbot.vo.*;
+import com.diagbot.dto.CommonResult;
+import com.diagbot.dto.GetAppealInfoDTO;
+import com.diagbot.dto.GetAppealReviewDTO;
+import com.diagbot.dto.GetComplaintRecordDTO;
+import com.diagbot.entity.QcresultDetail;
+import com.diagbot.vo.ApprovedVo;
+import com.diagbot.vo.GetAppealInfoVO;
+import com.diagbot.vo.GetAppealReviewVO;
+import com.diagbot.vo.GetAuditNumberVO;
+import com.diagbot.vo.GetComplaintDetailMsgVO;
+import com.diagbot.vo.GetComplaintRecordVO;
+import com.diagbot.vo.RejectedVo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -23,7 +33,7 @@ public interface MedAppealExamineInfoServiceClient {
      * @return
      */
     @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getComplaintRecord")
-    RespDTO<Page<GetComplaintRecordDTO>> getComplaintRecord(@RequestBody GetComplaintRecordVO getComplaintRecordVO);
+    CommonResult<Page<GetComplaintRecordDTO>> getComplaintRecord(@RequestBody GetComplaintRecordVO getComplaintRecordVO);
 
     /**
      * 获取申诉审核列表
@@ -31,7 +41,7 @@ public interface MedAppealExamineInfoServiceClient {
      * @return
      */
     @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getAppealReview")
-    RespDTO<Page<GetAppealReviewDTO>> getAppealReview(@RequestBody GetAppealReviewVO getAppealReviewVO);
+    CommonResult<Page<GetAppealReviewDTO>> getAppealReview(@RequestBody GetAppealReviewVO getAppealReviewVO);
 
 
     /**
@@ -40,7 +50,7 @@ public interface MedAppealExamineInfoServiceClient {
      * @return
      */
     @PostMapping(value = "/report-service/medAppealExamineInInfoManage/approved")
-    RespDTO<Boolean> approved(@RequestBody ApprovedVo approvedVo);
+    CommonResult<Boolean> approved(@RequestBody ApprovedVo approvedVo);
 
     /**
      *驳回
@@ -48,7 +58,7 @@ public interface MedAppealExamineInfoServiceClient {
      * @return
      */
     @PostMapping(value = "/report-service/medAppealExamineInInfoManage/rejected")
-    RespDTO<Boolean> rejected(@RequestBody RejectedVo rejectedVo);
+    CommonResult<Boolean> rejected(@RequestBody RejectedVo rejectedVo);
 
     /**
      *审核查看
@@ -56,7 +66,7 @@ public interface MedAppealExamineInfoServiceClient {
      * @return
      */
     @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getApprovedView")
-    RespDTO<GetAppealInfoDTO> getApprovedView(@RequestBody GetAppealInfoVO getAppealInfoVO);
+    CommonResult<GetAppealInfoDTO> getApprovedView(@RequestBody GetAppealInfoVO getAppealInfoVO);
 
     /**
      *待审核数量
@@ -64,7 +74,15 @@ public interface MedAppealExamineInfoServiceClient {
      * @return
      */
     @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getAuditNumber")
-    RespDTO<Integer> getAuditNumber(@RequestBody GetAuditNumberVO getAuditNumberVO);
+    CommonResult<Integer> getAuditNumber(@RequestBody GetAuditNumberVO getAuditNumberVO);
+
+    /**
+     *获取该申诉记录最新缺陷详情
+     * @param getComplaintDetailMsgVO
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getComplaintDetailMsg")
+    CommonResult<QcresultDetail> getComplaintDetailMsg(@RequestBody GetComplaintDetailMsgVO getComplaintDetailMsgVO);
 
 
 }

+ 102 - 0
src/main/java/com/diagbot/client/MedAppealExamineInfoServiceClientFacade.java

@@ -0,0 +1,102 @@
+package com.diagbot.client;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.diagbot.dto.CommonResult;
+import com.diagbot.dto.GetAppealInfoDTO;
+import com.diagbot.dto.GetAppealReviewDTO;
+import com.diagbot.dto.GetComplaintRecordDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.QcresultDetail;
+import com.diagbot.vo.ApprovedVo;
+import com.diagbot.vo.GetAppealInfoVO;
+import com.diagbot.vo.GetAppealReviewVO;
+import com.diagbot.vo.GetAuditNumberVO;
+import com.diagbot.vo.GetComplaintDetailMsgVO;
+import com.diagbot.vo.GetComplaintRecordVO;
+import com.diagbot.vo.RejectedVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @description: 申诉功能远程调用后处理
+ * @author: zhoutg
+ * @date: 2020/4/13 18:28
+ */
+@Component
+public class MedAppealExamineInfoServiceClientFacade {
+
+    @Autowired
+    MedAppealExamineInfoServiceClient medAppealExamineInfoServiceClient;
+
+    /**
+     * 获取申诉记录
+     *
+     * @param getComplaintRecordVO
+     * @return
+     */
+    public RespDTO<Page<GetComplaintRecordDTO>> getComplaintRecord(GetComplaintRecordVO getComplaintRecordVO) {
+        return CommonResult.tranResp(medAppealExamineInfoServiceClient.getComplaintRecord(getComplaintRecordVO));
+    }
+
+    /**
+     * 获取申诉审核列表
+     *
+     * @param getAppealReviewVO
+     * @return
+     */
+    public RespDTO<Page<GetAppealReviewDTO>> getAppealReview(GetAppealReviewVO getAppealReviewVO) {
+        return CommonResult.tranResp(medAppealExamineInfoServiceClient.getAppealReview(getAppealReviewVO));
+    }
+
+
+    /**
+     * 审核通过
+     *
+     * @param approvedVo
+     * @return
+     */
+    public RespDTO<Boolean> approved(ApprovedVo approvedVo) {
+        return CommonResult.tranResp(medAppealExamineInfoServiceClient.approved(approvedVo));
+    }
+
+    /**
+     * 驳回
+     *
+     * @param rejectedVo
+     * @return
+     */
+    public RespDTO<Boolean> rejected(RejectedVo rejectedVo) {
+        return CommonResult.tranResp(medAppealExamineInfoServiceClient.rejected(rejectedVo));
+    }
+
+    /**
+     * 审核查看
+     *
+     * @param getAppealInfoVO
+     * @return
+     */
+    public RespDTO<GetAppealInfoDTO> getApprovedView(GetAppealInfoVO getAppealInfoVO) {
+        return CommonResult.tranResp(medAppealExamineInfoServiceClient.getApprovedView(getAppealInfoVO));
+    }
+
+    /**
+     * 待审核数量
+     *
+     * @param getAuditNumberVO
+     * @return
+     */
+    public RespDTO<Integer> getAuditNumber(GetAuditNumberVO getAuditNumberVO) {
+        return CommonResult.tranResp(medAppealExamineInfoServiceClient.getAuditNumber(getAuditNumberVO));
+    }
+
+    /**
+     * 获取该申诉记录最新缺陷详情
+     *
+     * @param getComplaintDetailMsgVO
+     * @return
+     */
+    public RespDTO<QcresultDetail> getComplaintDetailMsg(GetComplaintDetailMsgVO getComplaintDetailMsgVO) {
+        return CommonResult.tranResp(medAppealExamineInfoServiceClient.getComplaintDetailMsg(getComplaintDetailMsgVO));
+    }
+
+}

+ 12 - 16
src/main/java/com/diagbot/client/MedAppealInfoServiceClient.java

@@ -1,17 +1,8 @@
 package com.diagbot.client;
 
 import com.diagbot.client.hystrix.MedAppealInfoServiceHystrix;
-import com.diagbot.dto.GetAppealInfoDTO;
-import com.diagbot.dto.GetReviewerDTO;
-import com.diagbot.dto.RespDTO;
-import com.diagbot.dto.Response;
-import com.diagbot.entity.WorkFlowInfo;
-import com.diagbot.vo.AddAppealInfoVO;
-import com.diagbot.vo.CancelAppealInfoVO;
-import com.diagbot.vo.GetAppealInfoVO;
-import com.diagbot.vo.GetAppealOperationTypeVO;
-import com.diagbot.vo.GetReviewerVO;
-import com.diagbot.vo.MedAppealInfoVO;
+import com.diagbot.dto.*;
+import com.diagbot.vo.*;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -31,20 +22,25 @@ public interface MedAppealInfoServiceClient {
 
 
     @PostMapping(value = "/report-service/medAppealInfoManage/addAppealInfo")
-    RespDTO<Boolean> addAppealInfo(@RequestBody @Valid AddAppealInfoVO addAppealInfoVO);
+    CommonResult<Boolean> addAppealInfo(@RequestBody @Valid AddAppealInfoVO addAppealInfoVO);
 
     @PostMapping(value = "/report-service/medAppealInfoManage/getReviewer")
-    RespDTO<List<GetReviewerDTO>> getReviewer(@RequestBody GetReviewerVO getReviewerVO);
+    CommonResult<List<GetReviewerDTO>> getReviewer(@RequestBody GetReviewerVO getReviewerVO);
 
     @PostMapping(value = "/report-service/medAppealInfoManage/getAppealOperationType")
-    RespDTO<Map<String, String>> getAppealOperationType(@RequestBody @Valid GetAppealOperationTypeVO getAppealOperationTypeVO);
+    CommonResult<Map<String, String>> getAppealOperationType(@RequestBody @Valid GetAppealOperationTypeVO getAppealOperationTypeVO);
 
     @PostMapping(value = "/report-service/medAppealInfoManage/cancelAppealInfo")
-    RespDTO<Boolean> cancelAppealInfo(@RequestBody @Valid CancelAppealInfoVO cancelAppealInfoVO);
+    CommonResult<Boolean> cancelAppealInfo(@RequestBody @Valid CancelAppealInfoVO cancelAppealInfoVO);
 
     @PostMapping(value = "/report-service/medAppealInfoManage/getAppealInfo")
-    RespDTO<GetAppealInfoDTO> getAppealInfo(@RequestBody GetAppealInfoVO getAppealInfoVO);
+    CommonResult<GetAppealInfoDTO> getAppealInfo(@RequestBody GetAppealInfoVO getAppealInfoVO);
 
+    @PostMapping(value = "/report-service/medAppealInfoManage/getAppealDept")
+    CommonResult<List<GetAppealDeptDTO>> getAppealDept(@RequestBody GetAppealDeptVo getAppealDeptVo);
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/getAppealMode")
+    CommonResult<List<GetAppealModeDTO>> getAppealMode(@RequestBody GetAppealModeVo getAppealModeVo);
 
 }
 

+ 52 - 0
src/main/java/com/diagbot/client/MedAppealInfoServiceClientFacade.java

@@ -0,0 +1,52 @@
+package com.diagbot.client;
+
+import com.diagbot.dto.*;
+import com.diagbot.vo.*;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @description: 申诉功能远程调用后处理
+ * @author: zhoutg
+ * @date: 2020/4/13 18:28
+ */
+@Component
+public class MedAppealInfoServiceClientFacade {
+
+    @Autowired
+    private MedAppealInfoServiceClient medAppealInfoServiceClient;
+
+    public RespDTO<Boolean> addAppealInfo(AddAppealInfoVO addAppealInfoVO) {
+        return CommonResult.tranResp(medAppealInfoServiceClient.addAppealInfo(addAppealInfoVO));
+    }
+
+    public RespDTO<List<GetReviewerDTO>> getReviewer(GetReviewerVO getReviewerVO) {
+        return CommonResult.tranResp(medAppealInfoServiceClient.getReviewer(getReviewerVO));
+    }
+
+    public RespDTO<Map<String, String>> getAppealOperationType(GetAppealOperationTypeVO getAppealOperationTypeVO) {
+        return CommonResult.tranResp(medAppealInfoServiceClient.getAppealOperationType(getAppealOperationTypeVO));
+    }
+
+    public RespDTO<Boolean> cancelAppealInfo(CancelAppealInfoVO cancelAppealInfoVO) {
+        return CommonResult.tranResp(medAppealInfoServiceClient.cancelAppealInfo(cancelAppealInfoVO));
+    }
+
+    public RespDTO<GetAppealInfoDTO> getAppealInfo(GetAppealInfoVO getAppealInfoVO) {
+        return CommonResult.tranResp(medAppealInfoServiceClient.getAppealInfo(getAppealInfoVO));
+    }
+
+    public RespDTO<List<GetAppealDeptDTO>> getAppealDept(GetAppealDeptVo getAppealDeptVo) {
+        return CommonResult.tranResp(medAppealInfoServiceClient.getAppealDept(getAppealDeptVo));
+    }
+
+
+    public RespDTO<List<GetAppealModeDTO>> getAppealMode(GetAppealModeVo getAppealModeVo) {
+        return CommonResult.tranResp(medAppealInfoServiceClient.getAppealMode(getAppealModeVo));
+    }
+
+}

+ 13 - 6
src/main/java/com/diagbot/client/hystrix/MedAppealExamineInfoServiceHystrix.java

@@ -5,6 +5,7 @@ package com.diagbot.client.hystrix;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.client.MedAppealExamineInfoServiceClient;
 import com.diagbot.dto.*;
+import com.diagbot.entity.QcresultDetail;
 import com.diagbot.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
@@ -19,38 +20,44 @@ import org.springframework.web.bind.annotation.RequestBody;
 public class MedAppealExamineInfoServiceHystrix implements MedAppealExamineInfoServiceClient {
 
     @Override
-    public RespDTO<Page<GetComplaintRecordDTO>> getComplaintRecord(@RequestBody GetComplaintRecordVO getComplaintRecordVO) {
+    public CommonResult<Page<GetComplaintRecordDTO>> getComplaintRecord(@RequestBody GetComplaintRecordVO getComplaintRecordVO) {
         log.error("【hystrix】调用{}异常", "getComplaintRecord");
         return null;
     }
 
     @Override
-    public RespDTO<Page<GetAppealReviewDTO>> getAppealReview(@RequestBody GetAppealReviewVO getAppealReviewVO) {
+    public CommonResult<Page<GetAppealReviewDTO>> getAppealReview(@RequestBody GetAppealReviewVO getAppealReviewVO) {
         log.error("【hystrix】调用{}异常", "getAppealReview");
         return null;
     }
 
 
     @Override
-    public RespDTO<Boolean> approved( @RequestBody ApprovedVo approvedVo) {
+    public CommonResult<Boolean> approved( @RequestBody ApprovedVo approvedVo) {
         log.error("【hystrix】调用{}异常", "approved");
         return null;
     }
 
     @Override
-    public RespDTO<Boolean> rejected( @RequestBody RejectedVo rejectedVo) {
+    public CommonResult<Boolean> rejected( @RequestBody RejectedVo rejectedVo) {
         log.error("【hystrix】调用{}异常", "rejected");
         return null;
     }
     @Override
-    public RespDTO<GetAppealInfoDTO> getApprovedView( @RequestBody GetAppealInfoVO getAppealInfoVO) {
+    public CommonResult<GetAppealInfoDTO> getApprovedView( @RequestBody GetAppealInfoVO getAppealInfoVO) {
         log.error("【hystrix】调用{}异常", "getApprovedView");
         return null;
     }
     @Override
-    public RespDTO<Integer> getAuditNumber( @RequestBody GetAuditNumberVO getAuditNumberVO) {
+    public CommonResult<Integer> getAuditNumber( @RequestBody GetAuditNumberVO getAuditNumberVO) {
         log.error("【hystrix】调用{}异常", "getAuditNumberVO");
         return null;
     }
 
+    @Override
+    public CommonResult<QcresultDetail> getComplaintDetailMsg(@RequestBody GetComplaintDetailMsgVO getComplaintDetailMsgVO) {
+        log.error("【hystrix】调用{}异常", "getComplaintDetailMsg");
+        return null;
+    }
+
 }

+ 19 - 21
src/main/java/com/diagbot/client/hystrix/MedAppealInfoServiceHystrix.java

@@ -2,26 +2,12 @@ package com.diagbot.client.hystrix;
 
 
 import com.diagbot.client.MedAppealInfoServiceClient;
-import com.diagbot.client.QcServiceClient;
-import com.diagbot.dto.GetAppealInfoDTO;
-import com.diagbot.dto.GetReviewerDTO;
-import com.diagbot.dto.OutputInfo;
-import com.diagbot.dto.RespDTO;
-import com.diagbot.dto.Response;
-import com.diagbot.entity.WorkFlowInfo;
-import com.diagbot.vo.AddAppealInfoVO;
-import com.diagbot.vo.CancelAppealInfoVO;
-import com.diagbot.vo.GetAppealInfoVO;
-import com.diagbot.vo.GetAppealOperationTypeVO;
-import com.diagbot.vo.GetReviewerVO;
-import com.diagbot.vo.MedAppealInfoVO;
-import com.diagbot.vo.QueryVo;
+import com.diagbot.dto.*;
+import com.diagbot.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestBody;
 
 import javax.validation.Valid;
-import java.net.URI;
 import java.util.List;
 import java.util.Map;
 
@@ -35,32 +21,44 @@ import java.util.Map;
 public class MedAppealInfoServiceHystrix implements MedAppealInfoServiceClient {
 
     @Override
-    public RespDTO<Boolean> addAppealInfo(@Valid AddAppealInfoVO addAppealInfoVO) {
+    public CommonResult<Boolean> addAppealInfo(@Valid AddAppealInfoVO addAppealInfoVO) {
         log.error("【hystrix】调用{}异常", "addAppealInfo");
         return null;
     }
 
     @Override
-    public RespDTO<List<GetReviewerDTO>> getReviewer(GetReviewerVO getReviewerVO) {
+    public CommonResult<List<GetReviewerDTO>> getReviewer(GetReviewerVO getReviewerVO) {
         log.error("【hystrix】调用{}异常", "getReviewer");
         return null;
     }
 
     @Override
-    public RespDTO<Map<String, String>> getAppealOperationType(@Valid GetAppealOperationTypeVO getAppealOperationTypeVO) {
+    public CommonResult<Map<String, String>> getAppealOperationType(@Valid GetAppealOperationTypeVO getAppealOperationTypeVO) {
         log.error("【hystrix】调用{}异常", "getAppealOperationType");
         return null;
     }
 
     @Override
-    public RespDTO<Boolean> cancelAppealInfo(@Valid CancelAppealInfoVO cancelAppealInfoVO) {
+    public CommonResult<Boolean> cancelAppealInfo(@Valid CancelAppealInfoVO cancelAppealInfoVO) {
         log.error("【hystrix】调用{}异常", "cancelAppealInfo");
         return null;
     }
 
     @Override
-    public RespDTO<GetAppealInfoDTO> getAppealInfo(GetAppealInfoVO getAppealInfoVO) {
+    public CommonResult<GetAppealInfoDTO> getAppealInfo(GetAppealInfoVO getAppealInfoVO) {
         log.error("【hystrix】调用{}异常", "getAppealInfo");
         return null;
     }
+
+    @Override
+    public CommonResult<List<GetAppealDeptDTO>> getAppealDept(@Valid GetAppealDeptVo getAppealDeptVo) {
+        log.error("【hystrix】调用{}异常", "getAppealDept");
+        return null;
+    }
+
+    @Override
+    public CommonResult<List<GetAppealModeDTO>> getAppealMode(GetAppealModeVo getAppealModeVo) {
+        log.error("【hystrix】调用{}异常", "getAppealMode");
+        return null;
+    }
 }

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

@@ -275,6 +275,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/appealExamineInfo/getAuditNumber").permitAll()
                 .antMatchers("/qc/appealExamineInfo/getAppealReviewExport").permitAll()
                 .antMatchers("/qc/appealExamineInfo/getComplaintRecordExport").permitAll()
+                .antMatchers("/qc/appealExamineInfo/getComplaintDetailMsg").permitAll()
                 .antMatchers("/qc/appealInfo/addAppealInfo").permitAll()
                 .antMatchers("/qc/appealInfo/addAppealInfoApi").permitAll()
                 .antMatchers("/qc/appealInfo/getReviewer").permitAll()
@@ -285,7 +286,12 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/appealInfo/updCase").permitAll()
                 .antMatchers("/qc/appealInfo/getAppealOperationType").permitAll()
                 .antMatchers("/qc/appealInfo/cancelAppealInfo").permitAll()
+                .antMatchers("/qc/appealInfo/cancelAppealInfoApi").permitAll()
                 .antMatchers("/qc/appealInfo/getAppealInfo").permitAll()
+                .antMatchers("/qc/appealInfo/getAppealDept").permitAll()
+                .antMatchers("/qc/appealInfo/getAppealMode").permitAll()
+                .antMatchers("/qc/appealInfo/getUserRole").permitAll()
+                .antMatchers("/qc/mode/getModes").permitAll()
                 .antMatchers("/**").authenticated();
         //                .antMatchers("/**").permitAll();
     }

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

@@ -352,6 +352,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/qc/appealExamineInfo/getAuditNumber", request)
                 || matchers("/qc/appealExamineInfo/getAppealReviewExport", request)
                 || matchers("/qc/appealExamineInfo/getComplaintRecordExport", request)
+                || matchers("/qc/appealExamineInfo/getComplaintDetailMsg", request)
                 || matchers("/qc/appealInfo/addAppealInfo", request)
                 || matchers("/qc/appealInfo/addAppealInfoApi", request)
                 || matchers("/qc/appealInfo/getReviewer", request)
@@ -362,7 +363,12 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/qc/behospitalInfo/updCase", request)
                 || matchers("/qc/appealInfo/getAppealOperationType", request)
                 || matchers("/qc/appealInfo/cancelAppealInfo", request)
+                || matchers("/qc/appealInfo/cancelAppealInfoApi", request)
                 || matchers("/qc/appealInfo/getAppealInfo", request)
+                || matchers("/qc/appealInfo/getAppealDept", request)
+                || matchers("/qc/appealInfo/getAppealMode", request)
+                || matchers("/qc/appealInfo/getUserRole", request)
+                || matchers("/qc/mode/getModes", request)
                 || matchers("/", request)) {
             return true;
         }

+ 7 - 1
src/main/java/com/diagbot/dto/AppealExamineRecordDTO.java

@@ -21,7 +21,7 @@ public class AppealExamineRecordDTO implements Serializable {
     @ApiModelProperty(value = "条目ID")
     private Long casesEntryId;
 
-    @ApiModelProperty(value = "质控条目(新增已有操作才有值)")
+    @ApiModelProperty(value = "质控条目")
     private String casesEntryName;
 
     @ApiModelProperty(value = "申诉-提示信息(新增已有操作才有值)")
@@ -80,4 +80,10 @@ public class AppealExamineRecordDTO implements Serializable {
 
     @ApiModelProperty(value = "审核-分值")
     private BigDecimal score;
+
+    @ApiModelProperty(value = "单项否决")
+    private String isReject;
+
+    @ApiModelProperty(value = "模块总分")
+    private BigDecimal casesScore;
 }

+ 61 - 0
src/main/java/com/diagbot/dto/CommonResult.java

@@ -0,0 +1,61 @@
+package com.diagbot.dto;
+
+/**
+ * @Description: 通用返回对象
+ * @author: rengb
+ * @time: 2021/1/5 18:27
+ */
+public class CommonResult<T> {
+
+    private long code;
+    private String message;
+    private T data;
+
+    protected CommonResult() {
+    }
+
+    protected CommonResult(long code, String message, T data) {
+        this.code = code;
+        this.message = message;
+        this.data = data;
+    }
+
+    public long getCode() {
+        return code;
+    }
+
+    public void setCode(long code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public static <T> RespDTO<T> tranResp(CommonResult<T> commonResult) {
+        RespDTO respDTO = new RespDTO();
+        if (commonResult.code == 500l) {
+            respDTO.code = "-1";
+        } else if (commonResult.code == 200l) {
+            respDTO.code = "0";
+        } else {
+            respDTO.code = commonResult.code + "";
+        }
+        respDTO.msg = commonResult.message;
+        respDTO.data = commonResult.data;
+        return respDTO;
+    }
+
+}

+ 10 - 11
src/main/java/com/diagbot/dto/ExportGetAppealReviewDTO.java

@@ -19,38 +19,37 @@ import java.util.Date;
 @Setter
 public class ExportGetAppealReviewDTO {
 
-    @Excel(name = "申述id", needMerge = true)
-    private Long id;
+//    @Excel(name = "申述id", needMerge = true)
+//    private Long id;
 
-    @Excel(name = "申人", needMerge = true)
+    @Excel(name = "申人", needMerge = true)
     private String claimantName;
 
     @Excel(name = "所属科室", needMerge = true)
     private String behDeptName;
 
+    @Excel(name = "申诉时间", needMerge = true, exportFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date claimantGmtCreate;
+
     @Excel(name = "病人住院序号", needMerge = true)
     private String behospitalCode;
 
     @Excel(name = "患者姓名", needMerge = true)
     private String name;
 
-    @Excel(name = "申模块", needMerge = true)
-    private String casesName;
+    @Excel(name = "申模块", needMerge = true)
+    private String modeName;
 
     @Excel(name = "缺陷详情", needMerge = true)
     private String qcresultDetailMsg;
 
-    @ApiModelProperty(value = "审核人")
-    @Excel(name = "缺陷详情", needMerge = true)
+    @Excel(name = "审核人", needMerge = true)
     private String checkName;
 
-    @Excel(name = "申述申诉时间", needMerge = true, exportFormat = "yyyy-MM-dd HH:mm:ss")
-    private Date claimantGmtCreate;
-
     @Excel(name = "审核时间", needMerge = true, exportFormat = "yyyy-MM-dd HH:mm:ss")
     private Date checkGmtCreate;
 
-    @Excel(name = "操作类型", needMerge = true, replace = {"删改_0","新增已有_1","新增缺失_2","恢复条目_3"})
+    @Excel(name = "操作类型", needMerge = true, replace = {"删改条目_0","新增已有条目_1","新增缺失条目_2","恢复条目_3"})
     private String appealOperationType;
 
     @Excel(name = "状态", needMerge = true, replace = {"待审核_0","已驳回_1","审核通过_2"})

+ 10 - 11
src/main/java/com/diagbot/dto/ExportGetComplaintRecordDTO.java

@@ -19,38 +19,37 @@ import java.util.Date;
 @Setter
 public class ExportGetComplaintRecordDTO {
 
-    @Excel(name = "申述id", needMerge = true)
-    private Long id;
+//    @Excel(name = "申述id", needMerge = true)
+//    private Long id;
 
-    @Excel(name = "申人", needMerge = true)
+    @Excel(name = "申人", needMerge = true)
     private String claimantName;
 
     @Excel(name = "所属科室", needMerge = true)
     private String behDeptName;
 
+    @Excel(name = "申诉时间", needMerge = true, exportFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date claimantGmtCreate;
+
     @Excel(name = "病人住院序号", needMerge = true)
     private String behospitalCode;
 
     @Excel(name = "患者姓名", needMerge = true)
     private String name;
 
-    @Excel(name = "申模块", needMerge = true)
-    private String casesName;
+    @Excel(name = "申模块", needMerge = true)
+    private String modeName;
 
     @Excel(name = "缺陷详情", needMerge = true)
     private String qcresultDetailMsg;
 
-    @ApiModelProperty(value = "审核人")
-    @Excel(name = "缺陷详情", needMerge = true)
+    @Excel(name = "审核人", needMerge = true)
     private String checkName;
 
-    @Excel(name = "申述申诉时间", needMerge = true, exportFormat = "yyyy-MM-dd HH:mm:ss")
-    private Date claimantGmtCreate;
-
     @Excel(name = "审核时间", needMerge = true, exportFormat = "yyyy-MM-dd HH:mm:ss")
     private Date checkGmtCreate;
 
-    @Excel(name = "操作类型", needMerge = true, replace = {"删改_0","新增已有_1","新增缺失_2","恢复条目_3"})
+    @Excel(name = "操作类型", needMerge = true, replace = {"删改条目_0","新增已有条目_1","新增缺失条目_2","恢复条目_3"})
     private String appealOperationType;
 
     @Excel(name = "状态", needMerge = true, replace = {"待审核_0","已驳回_1","审核通过_2"})

+ 20 - 0
src/main/java/com/diagbot/dto/GetAppealDeptDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 申诉审核科室下拉列表返回对象
+ * @Author songxl
+ */
+@Data
+public class GetAppealDeptDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "科室id")
+    private String deptId;
+
+    @ApiModelProperty(value = "科室名称")
+    private String deptName;
+}

+ 2 - 2
src/main/java/com/diagbot/dto/GetAppealInfoDTO.java

@@ -50,10 +50,10 @@ public class GetAppealInfoDTO implements Serializable {
     private Date leaveHospitalDate;
 
     @ApiModelProperty(value = "申诉模块id")
-    private Long casesId;
+    private Long modeId;
 
     @ApiModelProperty(value = "模块名称")
-    private String casesName;
+    private String modeName;
 
     @ApiModelProperty(value = "病历内容")
     private String defectContent;

+ 20 - 0
src/main/java/com/diagbot/dto/GetAppealModeDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 申诉审核模块下拉列表返回对象
+ * @Author songxl
+ */
+@Data
+public class GetAppealModeDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "申诉模块id")
+    private Long modeId;
+
+    @ApiModelProperty(value = "模块名称")
+    private String modeName;
+}

+ 1 - 1
src/main/java/com/diagbot/dto/GetAppealReviewDTO.java

@@ -46,7 +46,7 @@ public class GetAppealReviewDTO {
     private String name;
 
     @ApiModelProperty(value = "申述模块")
-    private String casesName;
+    private String modeName;
 
     @ApiModelProperty(value = "缺陷详情")
     private String qcresultDetailMsg;

+ 25 - 3
src/main/java/com/diagbot/dto/GetComplaintRecordDTO.java

@@ -10,6 +10,7 @@ import java.util.Date;
 
 /**
  * 申述记录
+ *
  * @Description:
  * @author: cy
  * @time: 2020/9/4 14:59
@@ -24,11 +25,17 @@ public class GetComplaintRecordDTO {
     @ApiModelProperty(value = "申述人")
     private String claimantName;
 
+    @ApiModelProperty(value = "申述人ID")
+    private String claimantId;
+
+    @ApiModelProperty(value = "审核人ID")
+    private String checkId;
+
     @ApiModelProperty(value = "所属科室")
     private String behDeptName;
 
     @ApiModelProperty(value = "申述申诉时间")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date claimantGmtCreate;
 
     @ApiModelProperty(value = "病人住院序号")
@@ -47,7 +54,7 @@ public class GetComplaintRecordDTO {
     private String name;
 
     @ApiModelProperty(value = "申述模块")
-    private String casesName;
+    private String modeName;
 
     @ApiModelProperty(value = "缺陷详情")
     private String qcresultDetailMsg;
@@ -56,7 +63,7 @@ public class GetComplaintRecordDTO {
     private String checkName;
 
     @ApiModelProperty(value = "审核时间")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date checkGmtCreate;
 
     @ApiModelProperty(value = "操作类型")
@@ -65,6 +72,21 @@ public class GetComplaintRecordDTO {
     @ApiModelProperty(value = "状态")
     private String exampleStatus;
 
+    @ApiModelProperty(value = "审核处理方式: 1:修改|2:删除|3:新增已有|4:新增缺失|5:恢复")
+    private String exampleOperation;
+
     @ApiModelProperty(value = "缺陷扣分分值")
     private BigDecimal qcresultDetaiValue;
+
+    @ApiModelProperty(value = "模块总分")
+    private BigDecimal casesScore;
+
+    @ApiModelProperty(value = "单项否决(1-单项否决 0-非)")
+    private Integer isReject;
+
+    @ApiModelProperty(value = "模块id")
+    private Long modeId;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
 }

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

@@ -1,5 +1,6 @@
 package com.diagbot.dto;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -13,6 +14,8 @@ import java.math.BigDecimal;
 @Getter
 @Setter
 public class MsgApiDTO {
+    //明细主键
+    private Long id;
     //得分
     private BigDecimal score;
     //提示信息
@@ -21,4 +24,27 @@ public class MsgApiDTO {
     private String isReject;
     //模块名称
     private String modelName;
+    //模块id
+    private String modelId;
+    //模块ID
+    private Long casesId;
+    //模块分数
+    private BigDecimal casesScore;
+    // 条目ID
+    private Long casesEntryId;
+
+    @ApiModelProperty("申诉条目id")
+    private Long appealInfoId;
+
+    @ApiModelProperty("审核状态 0:待审核|1:驳回|2:通过")
+    private String exampleStatus;
+
+    @ApiModelProperty(value = "操作类型")
+    private String appealOperationType;
+
+    @ApiModelProperty(value = "缺陷说明")
+    private String explainInfo;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
 }

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

@@ -69,4 +69,16 @@ public class MsgDTO {
 
     @ApiModelProperty("审核状态 0:待审核|1:驳回|2:通过")
     private String exampleStatus;
+
+    @ApiModelProperty(value = "操作类型")
+    private String appealOperationType;
+
+    @ApiModelProperty(value = "审核人")
+    private String reviewer;
+
+    @ApiModelProperty(value = "审核时间")
+    private Date exampleDate;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
 }

+ 17 - 110
src/main/java/com/diagbot/entity/MedAppealExamineInfo.java

@@ -1,7 +1,12 @@
 package com.diagbot.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.io.Serializable;
 
@@ -13,6 +18,8 @@ import java.io.Serializable;
  * @author zhanghang
  * @since 2022-01-20
  */
+@Getter
+@Setter
 public class MedAppealExamineInfo implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -43,6 +50,11 @@ public class MedAppealExamineInfo implements Serializable {
      */
     private String exampleOperation;
 
+    /**
+     * 审核分值
+     */
+    private BigDecimal value;
+
     /**
      * 处理结果
      */
@@ -53,6 +65,11 @@ public class MedAppealExamineInfo implements Serializable {
      */
     private String rejectReason;
 
+    /**
+     * 提示信息
+     */
+    private String msg;
+
     /**
      * 是否删除,N:未删除,Y:删除
      */
@@ -83,114 +100,4 @@ public class MedAppealExamineInfo implements Serializable {
      */
     private String remark;
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-    public Long getAppealInfoId() {
-        return appealInfoId;
-    }
-
-    public void setAppealInfoId(Long appealInfoId) {
-        this.appealInfoId = appealInfoId;
-    }
-    public Long getCheckId() {
-        return checkId;
-    }
-
-    public void setCheckId(Long checkId) {
-        this.checkId = checkId;
-    }
-    public String getExampleStatus() {
-        return exampleStatus;
-    }
-
-    public void setExampleStatus(String exampleStatus) {
-        this.exampleStatus = exampleStatus;
-    }
-    public String getExampleOperation() {
-        return exampleOperation;
-    }
-
-    public void setExampleOperation(String exampleOperation) {
-        this.exampleOperation = exampleOperation;
-    }
-    public String getProcessResult() {
-        return processResult;
-    }
-
-    public void setProcessResult(String processResult) {
-        this.processResult = processResult;
-    }
-    public String getRejectReason() {
-        return rejectReason;
-    }
-
-    public void setRejectReason(String rejectReason) {
-        this.rejectReason = rejectReason;
-    }
-    public String getIsDeleted() {
-        return isDeleted;
-    }
-
-    public void setIsDeleted(String isDeleted) {
-        this.isDeleted = isDeleted;
-    }
-    public LocalDateTime getGmtCreate() {
-        return gmtCreate;
-    }
-
-    public void setGmtCreate(LocalDateTime gmtCreate) {
-        this.gmtCreate = gmtCreate;
-    }
-    public LocalDateTime getGmtModified() {
-        return gmtModified;
-    }
-
-    public void setGmtModified(LocalDateTime gmtModified) {
-        this.gmtModified = gmtModified;
-    }
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-    public String getModifier() {
-        return modifier;
-    }
-
-    public void setModifier(String modifier) {
-        this.modifier = modifier;
-    }
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    @Override
-    public String toString() {
-        return "MedAppealExamineInfo{" +
-            "id=" + id +
-            ", appealInfoId=" + appealInfoId +
-            ", checkId=" + checkId +
-            ", exampleStatus=" + exampleStatus +
-            ", exampleOperation=" + exampleOperation +
-            ", processResult=" + processResult +
-            ", rejectReason=" + rejectReason +
-            ", isDeleted=" + isDeleted +
-            ", gmtCreate=" + gmtCreate +
-            ", gmtModified=" + gmtModified +
-            ", creator=" + creator +
-            ", modifier=" + modifier +
-            ", remark=" + remark +
-        "}";
-    }
 }

+ 58 - 36
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -260,9 +260,9 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             }
             res.put("result", qcResultDTO);
             //通过页面类型显示不同操作按钮
-            showButtonByPageType(hospitalId,getDetailVO,res);
+            showButtonByPageType(hospitalId, getDetailVO, res);
             //添加核查操作是否与申诉状态关联配置
-            res.put("checkOperationWithAppeal",sysHospitalSetFacade.getValue(hospitalId,"check_operation_with_appeal"));
+            res.put("checkOperationWithAppeal", sysHospitalSetFacade.getValue(hospitalId, "check_operation_with_appeal"));
         }
 
         // 获取提示信息
@@ -309,19 +309,21 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         return res;
     }
 
-    private void showButtonByPageType(Long hospitalId, GetDetailVO getDetailVO,Map<String, Object> res) {
-        switch (getDetailVO.getPageType()){
-            case "1":
-                break;
-            case "2":
-                checkButtonShow(hospitalId,getDetailVO,res);
-                break;
-            case "3":
-                appealButtonShow(hospitalId,getDetailVO,res);
-                break;
-            default:
-                break;
-        }
+    private void showButtonByPageType(Long hospitalId, GetDetailVO getDetailVO, Map<String, Object> res) {
+//        switch (getDetailVO.getPageType()){
+//            case "1":
+//                break;
+//            case "2":
+//                checkButtonShow(hospitalId,getDetailVO,res);
+//                break;
+//            case "3":
+//                appealButtonShow(hospitalId,getDetailVO,res);
+//                break;
+//            default:
+//                break;
+//        }
+        checkButtonShow(hospitalId, getDetailVO, res);
+        appealButtonShow(hospitalId, getDetailVO, res);
     }
 
     private void appealButtonShow(Long hospitalId, GetDetailVO getDetailVO, Map<String, Object> res) {
@@ -1771,8 +1773,19 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             Map<String, Object> resMap = calScore(outputInfo, codeList, codeToInfoMap, analyzeVO, queryVo.getBehospitalInfo().getIsPlacefile());
             algorithmDTO = (AlgorithmDTO) resMap.get("algorithmDTO");
         }
-
+        QcresultInfo qcresultInfo = qcresultInfoFacade.getOne(new QueryWrapper<QcresultInfo>()
+                .eq("hospital_id", analyzeVO.getHospitalId())
+                .eq("behospital_code", analyzeVO.getBehospitalCode())
+                .eq("is_deleted", IsDeleteEnum.N.getKey()));
+        if (qcresultInfo != null && qcresultInfo.getId() != null) {
+            analyzeVO.setQcresultInfoId(qcresultInfo.getId());
+        }
         List<MsgDTO> msgDTOList = this.getBaseMapper().getForeignMsg(analyzeVO);
+        if (ListUtil.isEmpty(msgDTOList)) {
+            analyzeVO.setQcresultInfoId(null);
+            msgDTOList = this.getBaseMapper().getForeignMsg(analyzeVO);
+        }
+
         if (ListUtil.isNotEmpty(msgDTOList)) {
             msgDTOList.forEach(msgDTO -> {
                 if (StringUtils.isNotEmpty(msgDTO.getInfo()) && StringUtils.isNotEmpty(msgDTO.getInfo().trim()) &&
@@ -2360,28 +2373,37 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             if (ListUtil.isNotEmpty(informList)) {
                 informList.forEach(obj ->
                         {
-                            Map<String, String> strMap = new HashMap<>();
-                            strMap.put("使用植入性材料", String.valueOf(obj.get("使用植入性材料")));
-                            StrInformedConsent strInformedConsent = new StrInformedConsent();
-                            strInformedConsent.setHospitalId(analyzeVO.getHospitalId());
-                            strInformedConsent.setBehospitalCode(analyzeVO.getBehospitalCode());
-                            strInformedConsent.setRecId(String.valueOf(obj.get("记录编号")));
-                            strInformedConsent.setRecTitle(String.valueOf(obj.get("病历标题")));
-                            strInformedConsent.setRecType("知情同意书");
-                            strInformedConsent.setContent(JSONObject.toJSONString(strMap));
-                            strInformedConsent.setGmtCreate(new Date());
-                            strInformedConsents.add(strInformedConsent);
-                            recIds.add(String.valueOf(obj.get("记录编号")));
+                            if (obj.containsKey("病历标题")
+                                    && obj.containsKey("记录编号")
+                                    && obj.containsKey("记录编号")
+                                    && obj.containsKey("使用植入性材料")) {
+                                Map<String, String> strMap = new HashMap<>();
+                                strMap.put("使用植入性材料", String.valueOf(obj.get("使用植入性材料")));
+                                StrInformedConsent strInformedConsent = new StrInformedConsent();
+                                strInformedConsent.setHospitalId(analyzeVO.getHospitalId());
+                                strInformedConsent.setBehospitalCode(analyzeVO.getBehospitalCode());
+                                strInformedConsent.setRecId(String.valueOf(obj.get("记录编号")));
+                                strInformedConsent.setRecTitle(String.valueOf(obj.get("病历标题")));
+                                strInformedConsent.setRecType("知情同意书");
+                                strInformedConsent.setContent(JSONObject.toJSONString(strMap));
+                                strInformedConsent.setGmtCreate(new Date());
+                                strInformedConsents.add(strInformedConsent);
+                                recIds.add(String.valueOf(obj.get("记录编号")));
+                            }
                         }
                 );
-                //删除手术知情同意书历史ric_id
-                strInformedConsentServiceImpl.remove(new QueryWrapper<StrInformedConsent>()
-                        .eq("hospital_id", analyzeVO.getHospitalId())
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("behospital_code", analyzeVO.getBehospitalCode())
-                        .in("rec_id", recIds));
-                //新增
-                strInformedConsentServiceImpl.saveBatch(strInformedConsents);
+                if(ListUtil.isNotEmpty(strInformedConsents)){
+                    //删除手术知情同意书历史ric_id
+                    strInformedConsentServiceImpl.remove(new QueryWrapper<StrInformedConsent>()
+                            .eq("hospital_id", analyzeVO.getHospitalId())
+                            .eq("is_deleted", IsDeleteEnum.N.getKey())
+                            .eq("behospital_code", analyzeVO.getBehospitalCode())
+                            .in("rec_id", recIds));
+                }
+                if(ListUtil.isNotEmpty(strInformedConsents)){
+                    //新增
+                    strInformedConsentServiceImpl.saveBatch(strInformedConsents);
+                }
             }
         }
         // 手动拼接数据【知情同意书】【谈话告知书】

+ 76 - 120
src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java

@@ -11,6 +11,7 @@ import com.diagbot.exception.CommonException;
 import com.diagbot.util.*;
 import com.diagbot.vo.*;
 import com.google.common.collect.Lists;
+import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,6 +45,8 @@ public class ConsoleByDeptFacade {
     private SysHospitalSetFacade sysHospitalSetFacade;
     @Autowired
     private QcCasesEntryFacade qcCasesEntryFacade;
+    @Autowired
+    private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
 
 
     /**
@@ -60,40 +63,13 @@ public class ConsoleByDeptFacade {
         if (deptMap == null) {
             return retMap;
         }
-        //出院总人数
-        List<NumDTO> totleNumList = behospitalInfoFacade.leaveHosCountByDept(filterVO);
-        Map<String, NumDTO> totleMap = ListUtil.isEmpty(totleNumList)
-                ? new HashMap<>()
-                : EntityUtil.makeEntityMap(totleNumList, "name");
-        Map<String, NumDTO> deathMap = new HashMap<>();
-        Map<String, NumDTO> operationMap = new HashMap<>();
-        //终末--死亡人数/手术病人数
-            //死亡人数
-            List<NumDTO> deathNumList = behospitalInfoFacade.deathCountByDept(filterVO);
-             deathMap = ListUtil.isEmpty(deathNumList)
-                    ? new HashMap<>()
-                    : EntityUtil.makeEntityMap(deathNumList, "name");
-            //手术人数
-            List<NumDTO> operationNumList = behospitalInfoFacade.operationCountByDept(filterVO);
-             operationMap = ListUtil.isEmpty(operationNumList)
-                    ? new HashMap<>()
-                    : EntityUtil.makeEntityMap(operationNumList, "name");
-
-        for (String deptName : deptMap.keySet()) {
-            Map<String, Object> map = new LinkedHashMap<>();
-            map.put("总人数", 0);
-            map.put("死亡人数", 0);
-            map.put("手术病人数", 0);
-            if (totleMap.containsKey(deptName)) {
-                map.put("总人数", totleMap.get(deptName).getNum());
-            }
-            if(deathMap.containsKey(deptName)) {
-                map.put("死亡人数", deathMap.get(deptName).getNum());
-            }
-            if(operationMap.containsKey(deptName)) {
-                map.put("手术病人数", operationMap.get(deptName).getNum());
-            }
-            retMap.put(deptName, map);
+        try {
+            Map<String, Object> invokeParams = new HashMap<>();
+            invokeParams.put("filterVO", filterVO);
+            retMap  = dataBeanAggregateQueryFacade.get("setAllLeaveHosCount", invokeParams, Map.class);
+            long L2 = System.currentTimeMillis();
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
         }
         return retMap;
     }
@@ -123,98 +99,78 @@ public class ConsoleByDeptFacade {
         DecimalFormat df = new DecimalFormat("#0.00");
         Map<String, Object> retMap = new LinkedHashMap<>();
         filterFacade.filterVOSet(filterVO);
-        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
-        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
         //关联科室
         Map<String, Object> deptMap = getDeptByUser(filterVO);
         if (deptMap == null) {
             return retMap;
         }
-        //质控病历总数
-        List<NumDTO> totleNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterVO);
-        Map<String, NumDTO> totleMap = ListUtil.isEmpty(totleNumList)
-                ? new HashMap<>()
-                : EntityUtil.makeEntityMap(totleNumList, "name");
-        //甲级病历
-        qcresultFilterVO.setLevel("甲");
-        List<NumDTO> firstNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterVO);
-        Map<String, NumDTO> firstMap = ListUtil.isEmpty(firstNumList)
-                ? new HashMap<>()
-                : EntityUtil.makeEntityMap(firstNumList, "name");
-        //乙级病历
-        qcresultFilterVO.setLevel("乙");
-        List<NumDTO> secondNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterVO);
-        Map<String, NumDTO> secondMap = ListUtil.isEmpty(secondNumList)
-                ? new HashMap<>()
-                : EntityUtil.makeEntityMap(secondNumList, "name");
-        //丙级病历
-        qcresultFilterVO.setLevel("丙");
-        List<NumDTO> thirdNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterVO);
-        Map<String, NumDTO> thirdMap = ListUtil.isEmpty(thirdNumList)
-                ? new HashMap<>()
-                : EntityUtil.makeEntityMap(thirdNumList, "name");
-        for (String deptName : deptMap.keySet()) {
-            List<NumDTO> retList = Lists.newLinkedList();
-            int totleNum = 0;
-            int firstLevelNum = 0;
-            int secondLevelNum = 0;
-            int thirdLevelNum = 0;
-            if (totleMap.containsKey(deptName)) {
-                totleNum = totleMap.get(deptName).getNum();
-            }
-            if (firstMap.containsKey(deptName)) {
-                firstLevelNum = firstMap.get(deptName).getNum();
-            }
-            if (secondMap.containsKey(deptName)) {
-                secondLevelNum = secondMap.get(deptName).getNum();
-            }
-            if (thirdMap.containsKey(deptName)) {
-                thirdLevelNum = thirdMap.get(deptName).getNum();
-            }
-            //总病历数为0
-            if (totleNum == 0) {
-                retMap.put(deptName, Lists.newLinkedList());
-                continue;
+        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
+        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
+        //质控病历数
+        List<Map<String,Object>> maps = qcresultInfoFacade.resultMrCountByDept(qcresultFilterVO);
+        if(ListUtil.isEmpty(maps)){
+            return retMap;
+        }
+        for (Map<String, Object> map : maps) {
+            if(null != map.get("NAME") && StringUtils.isNotBlank(map.get("NAME").toString()) && deptMap.containsKey(map.get("NAME").toString())){
+                List<NumDTO> retList = Lists.newLinkedList();
+                int totleNum = 0;
+                int firstLevelNum = 0;
+                int secondLevelNum = 0;
+                int thirdLevelNum = 0;
+                if(null != map.get("num")){
+                    totleNum = Integer.parseInt(map.get("num").toString());
+                }
+                if(null != map.get("firNum")){
+                    firstLevelNum = Integer.parseInt(map.get("firNum").toString());
+                }
+                if(null != map.get("secNum")){
+                    secondLevelNum = Integer.parseInt(map.get("secNum").toString());
+                }
+                if(null != map.get("thrNum")){
+                    thirdLevelNum = Integer.parseInt(map.get("thrNum").toString());
+                }
+
+                NumDTO totleNumDTO = new NumDTO();
+                totleNumDTO.setName("累计质控病历数");
+                totleNumDTO.setTotleNum(totleNum);
+                totleNumDTO.setNum(totleNum);
+                NumDTO firstLevelNumDTO = new NumDTO();
+                firstLevelNumDTO.setName("甲级病历");
+                firstLevelNumDTO.setNum(firstLevelNum);
+                firstLevelNumDTO.setTotleNum(totleNum);
+                Double firstPercent = BigDecimal.valueOf(firstLevelNum)
+                        .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                String firstPercentStr = df.format(BigDecimal.valueOf(firstPercent).multiply(BigDecimal.valueOf(100))) + "%";
+                firstLevelNumDTO.setPercent(firstPercent);
+                firstLevelNumDTO.setPercentStr(firstPercentStr);
+                NumDTO secondLevelNumDTO = new NumDTO();
+                secondLevelNumDTO.setName("乙级病历");
+                secondLevelNumDTO.setNum(secondLevelNum);
+                secondLevelNumDTO.setTotleNum(totleNum);
+                Double secondPercent = BigDecimal.valueOf(secondLevelNum)
+                        .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                String secondPercentStr = df.format(BigDecimal.valueOf(secondPercent).multiply(BigDecimal.valueOf(100))) + "%";
+                secondLevelNumDTO.setPercent(secondPercent);
+                secondLevelNumDTO.setPercentStr(secondPercentStr);
+                NumDTO thirdLevelNumDTO = new NumDTO();
+                thirdLevelNumDTO.setName("丙级病历");
+                thirdLevelNumDTO.setNum(thirdLevelNum);
+                thirdLevelNumDTO.setTotleNum(totleNum);
+                Double thirdPercent = BigDecimal.valueOf(thirdLevelNum)
+                        .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                String thirdPercentStr = df.format(BigDecimal.valueOf(thirdPercent).multiply(BigDecimal.valueOf(100))) + "%";
+                thirdLevelNumDTO.setPercent(thirdPercent);
+                thirdLevelNumDTO.setPercentStr(thirdPercentStr);
+                retList.add(totleNumDTO);
+                retList.add(firstLevelNumDTO);
+                retList.add(secondLevelNumDTO);
+                retList.add(thirdLevelNumDTO);
+                retMap.put(map.get("NAME").toString(), retList);
             }
-            NumDTO totleNumDTO = new NumDTO();
-            totleNumDTO.setName("累计质控病历数");
-            totleNumDTO.setTotleNum(totleNum);
-            totleNumDTO.setNum(totleNum);
-            NumDTO firstLevelNumDTO = new NumDTO();
-            firstLevelNumDTO.setName("甲级病历");
-            firstLevelNumDTO.setNum(firstLevelNum);
-            firstLevelNumDTO.setTotleNum(totleNum);
-            Double firstPercent = BigDecimal.valueOf(firstLevelNum)
-                    .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
-                    .doubleValue();
-            String firstPercentStr = df.format(BigDecimal.valueOf(firstPercent).multiply(BigDecimal.valueOf(100))) + "%";
-            firstLevelNumDTO.setPercent(firstPercent);
-            firstLevelNumDTO.setPercentStr(firstPercentStr);
-            NumDTO secondLevelNumDTO = new NumDTO();
-            secondLevelNumDTO.setName("乙级病历");
-            secondLevelNumDTO.setNum(secondLevelNum);
-            secondLevelNumDTO.setTotleNum(totleNum);
-            Double secondPercent = BigDecimal.valueOf(secondLevelNum)
-                    .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
-                    .doubleValue();
-            String secondPercentStr = df.format(BigDecimal.valueOf(secondPercent).multiply(BigDecimal.valueOf(100))) + "%";
-            secondLevelNumDTO.setPercent(secondPercent);
-            secondLevelNumDTO.setPercentStr(secondPercentStr);
-            NumDTO thirdLevelNumDTO = new NumDTO();
-            thirdLevelNumDTO.setName("丙级病历");
-            thirdLevelNumDTO.setNum(thirdLevelNum);
-            thirdLevelNumDTO.setTotleNum(totleNum);
-            Double thirdPercent = BigDecimal.valueOf(thirdLevelNum)
-                    .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
-                    .doubleValue();
-            String thirdPercentStr = df.format(BigDecimal.valueOf(thirdPercent).multiply(BigDecimal.valueOf(100))) + "%";
-            thirdLevelNumDTO.setPercent(thirdPercent);
-            thirdLevelNumDTO.setPercentStr(thirdPercentStr);
-            retList.add(totleNumDTO);
-            retList.add(firstLevelNumDTO);
-            retList.add(secondLevelNumDTO);
-            retList.add(thirdLevelNumDTO);
-            retMap.put(deptName, retList);
         }
         return retMap;
     }

+ 132 - 67
src/main/java/com/diagbot/facade/MedAppealExamineInfoManagementFacade.java

@@ -4,19 +4,18 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.diagbot.client.MedAppealExamineInfoServiceClient;
+import com.diagbot.client.MedAppealExamineInfoServiceClientFacade;
 import com.diagbot.dto.AnalyzeDTO;
 
-import com.diagbot.dto.ExportExcelByDeptDTO;
 import com.diagbot.dto.ExportGetAppealReviewDTO;
 import com.diagbot.dto.ExportGetComplaintRecordDTO;
-import com.diagbot.dto.ExportSevenByDeptDTO;
 import com.diagbot.dto.GetAppealReviewDTO;
 import com.diagbot.dto.GetComplaintRecordDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.MedAppealExamineInfo;
 import com.diagbot.entity.MedAppealInfo;
 
+import com.diagbot.entity.QcCasesEntry;
 import com.diagbot.entity.QcresultDetail;
 import com.diagbot.enums.ExampleOperationEnum;
 import com.diagbot.enums.ExampleStatusEnum;
@@ -32,7 +31,6 @@ import com.diagbot.vo.ApprovedVo;
 import com.diagbot.vo.GetAppealReviewVO;
 import com.diagbot.vo.GetComplaintRecordVO;
 import com.diagbot.vo.QcResultAlgVO;
-import com.diagbot.vo.QcResultShortPageVO;
 import com.diagbot.vo.QcresultVO;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,7 +38,6 @@ import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletResponse;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -53,34 +50,56 @@ public class MedAppealExamineInfoManagementFacade extends MedAppealExamineInfoSe
     @Autowired
     private QcresultDetailFacade qcresultDetailFacade;
     @Autowired
-    private  MedAppealInfoManagementFacade medAppealInfoManagementFacade;
+    private MedAppealInfoManagementFacade medAppealInfoManagementFacade;
     @Autowired
     private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private QcCasesEntryFacade qcCasesEntryFacade;
 
     /**
      * 审核通过
+     *
      * @param approvedVo
      * @return
      */
-    public Boolean approved (ApprovedVo approvedVo) {
+    public Boolean approved(ApprovedVo approvedVo) {
         LocalDateTime dateTime = LocalDateTime.now();
         QcresultVO qcresultVO = new QcresultVO();
         qcresultVO.setBehospitalCode(approvedVo.getBehospitalCode());
         qcresultVO.setHospitalId(approvedVo.getHospitalId());
         QcResultAlgVO qcResultAlgVO = approvedVo.getQcResultAlgVO();
-        qcresultVO.setOptResultAlgVO(qcResultAlgVO);
+        Long modeId = approvedVo.getModeId();
+        if (modeId != null) {
+            QcCasesEntry qcCasesEntry = qcCasesEntryFacade.getOne(new QueryWrapper<QcCasesEntry>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("mode_id", modeId)
+                    .groupBy("mode_id")
+            );
+            if(qcCasesEntry!=null) {
+                qcResultAlgVO.setCasesId(qcCasesEntry.getCasesId());
+            }
+        }
         //获取处理方式
         String handling = approvedVo.getExampleOperation();
-        if(StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.UP_OR_DEL.getKey())){
+        if (StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.UP_OR_DEL.getKey())) {
+            QcresultDetail detail = getQcresultDetail(approvedVo);
+            if (detail == null) {
+                throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "该条目已删除,无法进行审核操作,请走驳回流程。");
+            }
             //调用删除接口
             qcresultVO.setDelStatus(0);
             qcresultVO.setType(4);
+            qcResultAlgVO.setId(detail.getId());
+            qcresultVO.setOptResultAlgVO(qcResultAlgVO);
             AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
-            if(analyzeDTORespDTO.getIsSuccess()){
+            if (analyzeDTORespDTO.getIsSuccess()) {
+                approvedVo.setQcresultDetailId(detail.getId());
                 Boolean appealInfo = updateAppealInfo(approvedVo);
                 MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
                 medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.UP_OR_DEL.getKey());
                 medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
+                medAppealExamineInfo.setMsg(qcresultVO.getOptResultAlgVO().getMsg());
+                medAppealExamineInfo.setValue(qcresultVO.getOptResultAlgVO().getScore());
                 medAppealExamineInfo.setGmtCreate(dateTime);
                 medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
                 boolean update = this.update(medAppealExamineInfo, new UpdateWrapper<MedAppealExamineInfo>()
@@ -88,24 +107,32 @@ public class MedAppealExamineInfoManagementFacade extends MedAppealExamineInfoSe
                         .eq("appeal_info_id", approvedVo.getId())
                         .eq("check_id", approvedVo.getAppealId())
                 );
-                if(appealInfo && update){
-                    return  true;
-                }else {
+                if (appealInfo && update) {
+                    return true;
+                } else {
                     throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "审核通过失败!");
                 }
-            }else {
+            } else {
                 throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "删除失败!");
             }
         }
-        if(StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.UP_OR_UP.getKey())){
+        if (StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.UP_OR_UP.getKey())) {
+            QcresultDetail detail = getQcresultDetail(approvedVo);
+            if (detail == null) {
+                throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "该条目已删除,无法进行审核操作,请走驳回流程。");
+            }
             //调用修改接口
             qcresultVO.setType(3);
+            qcResultAlgVO.setId(detail.getId());
+            qcresultVO.setOptResultAlgVO(qcResultAlgVO);
             AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
-            if(analyzeDTORespDTO.getIsSuccess()){
+            if (analyzeDTORespDTO.getIsSuccess()) {
                 Boolean appealInfo = updateAppealInfo(approvedVo);
                 MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
                 medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.UP_OR_UP.getKey());
                 medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
+                medAppealExamineInfo.setMsg(qcresultVO.getOptResultAlgVO().getMsg());
+                medAppealExamineInfo.setValue(qcresultVO.getOptResultAlgVO().getScore());
                 medAppealExamineInfo.setGmtCreate(dateTime);
                 medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
                 boolean update = this.update(medAppealExamineInfo, new UpdateWrapper<MedAppealExamineInfo>()
@@ -113,34 +140,40 @@ public class MedAppealExamineInfoManagementFacade extends MedAppealExamineInfoSe
                         .eq("appeal_info_id", approvedVo.getId())
                         .eq("check_id", approvedVo.getAppealId())
                 );
-                if(appealInfo && update){
-                    return  true;
-                }else {
+                if (appealInfo && update) {
+                    return true;
+                } else {
                     throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "审核通过失败!");
                 }
-            }else {
+            } else {
                 throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "修改失败!");
             }
         }
-        if(StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.ADD_EXIST.getKey())){
+        if (StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.ADD_EXIST.getKey())) {
             //判断是否已存在该条目
-            QcresultDetail qcresultDetail = qcresultDetailFacade.getOne(new QueryWrapper<QcresultDetail>()
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("hospital_id", approvedVo.getHospitalId())
-                    .eq("behospital_code", approvedVo.getBehospitalCode())
-                    .eq("cases_entry_id", qcResultAlgVO.getCasesEntryId())
-            );
-            if(qcresultDetail!=null){
-                throw new CommonException(CommonErrorCode.IS_EXISTS, "该条目已存在!");
+            QcresultDetail qcresultDetail = getQcresultDetail(approvedVo);
+            if (qcresultDetail != null) {
+                throw new CommonException(CommonErrorCode.IS_EXISTS, "该条目已存在,无法新增,请走驳回流程");
             }
             //调用新增接口
             qcresultVO.setType(1);
-
+            qcresultVO.setOptResultAlgVO(qcResultAlgVO);
             AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
-            if(analyzeDTORespDTO.getIsSuccess()){
-                Boolean appealInfo = updateAppealInfo(approvedVo);
+            if (analyzeDTORespDTO.getIsSuccess()) {
+                QcresultDetail detail = getQcresultDetail(approvedVo);
+                MedAppealInfo medAppealInfo = new MedAppealInfo();
+                medAppealInfo.setQcresultDetailId(detail.getId());
+                medAppealInfo.setWorkFlowNodeId(approvedVo.getWorkFlowNodeId());
+                boolean update = medAppealInfoManagementFacade.update(medAppealInfo, new UpdateWrapper<MedAppealInfo>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_id", approvedVo.getHospitalId())
+                        .eq("behospital_code", approvedVo.getBehospitalCode())
+                        .eq("id", approvedVo.getId())
+                );
                 MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
                 medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.ADD_EXIST.getKey());
+                medAppealExamineInfo.setValue(qcresultVO.getOptResultAlgVO().getScore());
+                medAppealExamineInfo.setMsg(qcresultVO.getOptResultAlgVO().getMsg());
                 medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
                 medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
                 medAppealExamineInfo.setGmtCreate(dateTime);
@@ -149,44 +182,65 @@ public class MedAppealExamineInfoManagementFacade extends MedAppealExamineInfoSe
                         .eq("appeal_info_id", approvedVo.getId())
                         .eq("check_id", approvedVo.getAppealId())
                 );
-                if(appealInfo && update1){
-                    return  true;
-                }else {
+                if (update && update1) {
+                    return true;
+                } else {
                     throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "审核通过失败!");
                 }
-            }else {
+            } else {
                 throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "新增失败!");
             }
         }
-        if(StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.RECOVER.getKey())){
+        if (StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.RECOVER.getKey())) {
             qcresultVO.setType(4);
             qcresultVO.setDelStatus(1);
-            //调用删除接口
-            AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
-            if(analyzeDTORespDTO.getIsSuccess()){
-                Boolean appealInfo = updateAppealInfo(approvedVo);
-                MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
-                medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.RECOVER.getKey());
-                medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
-                medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
-                medAppealExamineInfo.setGmtCreate(dateTime);
-                boolean update = this.update(medAppealExamineInfo, new UpdateWrapper<MedAppealExamineInfo>()
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("appeal_info_id", approvedVo.getId())
-                        .eq("check_id", approvedVo.getAppealId())
-                );
-                if(appealInfo && update){
-                    return  true;
-                }else {
-                    throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "审核通过失败!");
+            //判断条目是否以恢复
+            QcresultDetail qcresultDetail = getQcresultDetail(approvedVo);
+            if (qcresultDetail != null) {
+                throw new CommonException(CommonErrorCode.IS_EXISTS, "该条目已恢复,无法进行审核操作,请走驳回流程。");
+            }
+
+            //调用删除恢复接口
+            List<QcresultDetail> qcresultDetails = qcresultDetailFacade.list(new QueryWrapper<QcresultDetail>()
+                    .eq("hospital_id", approvedVo.getHospitalId())
+                    .eq("behospital_code", approvedVo.getBehospitalCode())
+                    .eq("cases_entry_id", approvedVo.getQcResultAlgVO().getCasesEntryId())
+                    .eq("is_deleted",IsDeleteEnum.Y.getKey())
+                    .eq("grade_type", 2)
+                    .orderByDesc("id")
+            );
+            if(ListUtil.isNotEmpty(qcresultDetails)){
+                qcResultAlgVO.setId(qcresultDetails.get(0).getId());
+                qcresultVO.setOptResultAlgVO(qcResultAlgVO);
+                AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
+                if (analyzeDTORespDTO.getIsSuccess()) {
+                    approvedVo.setQcresultDetailId(qcresultDetails.get(0).getId());
+                    Boolean appealInfo = updateAppealInfo(approvedVo);
+                    MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
+                    medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.RECOVER.getKey());
+                    medAppealExamineInfo.setValue(qcresultVO.getOptResultAlgVO().getScore());
+                    medAppealExamineInfo.setMsg(qcresultVO.getOptResultAlgVO().getMsg());
+                    medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
+                    medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
+                    medAppealExamineInfo.setGmtCreate(dateTime);
+                    boolean update = this.update(medAppealExamineInfo, new UpdateWrapper<MedAppealExamineInfo>()
+                            .eq("is_deleted", IsDeleteEnum.N.getKey())
+                            .eq("appeal_info_id", approvedVo.getId())
+                            .eq("check_id", approvedVo.getAppealId())
+                    );
+                    if (appealInfo && update) {
+                        return true;
+                    } else {
+                        throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "审核通过失败!");
+                    }
+                } else {
+                    throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "恢复失败!");
                 }
-            }else {
-                throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "恢复失败!");
             }
         }
-        if(StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.ADD_NO_EXIST.getKey())){
+        if (StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.ADD_NO_EXIST.getKey())) {
             Boolean appealInfo = updateAppealInfo(approvedVo);
-            MedAppealExamineInfo medAppealExamineInfo= new MedAppealExamineInfo();
+            MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
             medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.ADD_NO_EXIST.getKey());
             medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
             medAppealExamineInfo.setProcessResult(approvedVo.getProcessResult());
@@ -204,9 +258,9 @@ public class MedAppealExamineInfoManagementFacade extends MedAppealExamineInfoSe
         }
         throw new CommonException(CommonErrorCode.NOT_EXISTS, "无此类型处理方式!");
     }
-
-    public Boolean updateAppealInfo (ApprovedVo approvedVo) {
+    public Boolean updateAppealInfo(ApprovedVo approvedVo) {
         MedAppealInfo medAppealInfo = new MedAppealInfo();
+        medAppealInfo.setQcresultDetailId(approvedVo.getQcresultDetailId());
         medAppealInfo.setWorkFlowNodeId(approvedVo.getWorkFlowNodeId());
         boolean update = medAppealInfoManagementFacade.update(medAppealInfo, new UpdateWrapper<MedAppealInfo>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -214,31 +268,42 @@ public class MedAppealExamineInfoManagementFacade extends MedAppealExamineInfoSe
                 .eq("behospital_code", approvedVo.getBehospitalCode())
                 .eq("id", approvedVo.getId())
         );
-        if(update){
+        if (update) {
             return true;
-        }else {
+        } else {
             return false;
         }
     }
 
-    public void getAppealReviewExport(HttpServletResponse response, GetAppealReviewVO getAppealReviewVO, MedAppealExamineInfoServiceClient medAppealExamineInfoServiceClient) {
+    //  获取detail条目信息
+    public QcresultDetail getQcresultDetail(ApprovedVo approvedVo) {
+        QcresultDetail qcresultDetail = qcresultDetailFacade.getOne(new QueryWrapper<QcresultDetail>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", approvedVo.getHospitalId())
+                .eq("behospital_code", approvedVo.getBehospitalCode())
+                .eq("cases_entry_id", approvedVo.getQcResultAlgVO().getCasesEntryId())
+        );
+        return qcresultDetail;
+    }
+
+    public void getAppealReviewExport(HttpServletResponse response, GetAppealReviewVO getAppealReviewVO, MedAppealExamineInfoServiceClientFacade medAppealExamineInfoServiceClient) {
         getAppealReviewVO.setCurrent(1L);
         getAppealReviewVO.setSize(Long.MAX_VALUE);
         getAppealReviewVO.setSearchCount(false);
         RespDTO<Page<GetAppealReviewDTO>> appealReview = medAppealExamineInfoServiceClient.getAppealReview(getAppealReviewVO);
         //格式转换
-        List<ExportGetAppealReviewDTO> out = BeanUtil.listCopyTo(appealReview.data.getRecords(),ExportGetAppealReviewDTO.class);
+        List<ExportGetAppealReviewDTO> out = BeanUtil.listCopyTo(appealReview.data.getRecords(), ExportGetAppealReviewDTO.class);
         String fileName = "申诉审核.xls";
         ExcelUtils.exportExcelUser(out, null, "sheet1", ExportGetAppealReviewDTO.class, fileName, response);
     }
 
-    public void getComplaintRecordExport(HttpServletResponse response, GetComplaintRecordVO getComplaintRecordVO, MedAppealExamineInfoServiceClient medAppealExamineInfoServiceClient) {
+    public void getComplaintRecordExport(HttpServletResponse response, GetComplaintRecordVO getComplaintRecordVO, MedAppealExamineInfoServiceClientFacade medAppealExamineInfoServiceClient) {
         getComplaintRecordVO.setCurrent(1L);
         getComplaintRecordVO.setSize(Long.MAX_VALUE);
         getComplaintRecordVO.setSearchCount(false);
         RespDTO<Page<GetComplaintRecordDTO>> complaintRecord = medAppealExamineInfoServiceClient.getComplaintRecord(getComplaintRecordVO);
         //格式转换
-        List<ExportGetComplaintRecordDTO> out = BeanUtil.listCopyTo(complaintRecord.data.getRecords(),ExportGetComplaintRecordDTO.class);
+        List<ExportGetComplaintRecordDTO> out = BeanUtil.listCopyTo(complaintRecord.data.getRecords(), ExportGetComplaintRecordDTO.class);
         String fileName = "申诉记录.xls";
         ExcelUtils.exportExcelUser(out, null, "sheet1", ExportGetComplaintRecordDTO.class, fileName, response);
     }

+ 2 - 9
src/main/java/com/diagbot/facade/QcresultInfoFacade.java

@@ -222,9 +222,7 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                         .eq("is_deleted", IsDeleteEnum.N.getKey())
                         .eq("hospital_id", analyzeVO.getHospitalId())
                         .eq("behospital_code", analyzeVO.getBehospitalCode())
-                        .set("is_deleted", IsDeleteEnum.Y.getKey())
-                        .set("modifier", useId)
-                        .set("gmt_modified", now));
+                        .set("is_deleted", IsDeleteEnum.Y.getKey()));
                 //
                 //批量插入新的数据
                 List<QcresultDetail> qcresultDetailList = new ArrayList<>();
@@ -252,8 +250,8 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                         qcresultDetail.setQcresultInfoId(newId);
                         qcresultDetailList.add(qcresultDetail);
                     }
-                    qcresultDetailServiceImpl.saveBatch(qcresultDetailList);
                 }
+                qcresultDetailServiceImpl.saveBatch(qcresultDetailList);
                 break;
             case 1:
                 //新增条目
@@ -337,7 +335,6 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                             .set("opt_type", 1)
                             .set("qcresult_info_id", newId)
                             .set("modifier", useId)
-                            .set("remark", null)
                             .set("gmt_modified", now)
                     );
                 } else {
@@ -359,8 +356,6 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                         .eq("grade_type", 2)
                         .eq("behospital_code", analyzeVO.getBehospitalCode())
                         .set("qcresult_info_id", newId)
-                        .set("modifier", useId)
-                        .set("gmt_modified", now)
                 );
             }
             //未删除的 评分主表id
@@ -369,8 +364,6 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                     .eq("hospital_id", analyzeVO.getHospitalId())
                     .eq("behospital_code", analyzeVO.getBehospitalCode())
                     .set("qcresult_info_id", newId)
-                    .set("modifier", useId)
-                    .set("gmt_modified", now)
             );
         }
 

+ 25 - 17
src/main/java/com/diagbot/facade/SysDictionaryFacade.java

@@ -11,9 +11,7 @@ import com.diagbot.util.ListUtil;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Component;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @Description:
@@ -72,29 +70,39 @@ public class SysDictionaryFacade extends SysDictionaryInfoServiceImpl {
     }
 
     /**
-     * 获取字典申诉审核操作类型及状态
+     * 获取字典申诉驳回具体信息
      * @return
      */
-    public  Map<String, String> getAppealOperationDictionary(){
-        Map<String, String> appealOperationMap = new HashMap<>();
-        if (getDictionaryWithKey() != null
-                && getDictionaryWithKey().containsKey("32")
-                ) {
-            appealOperationMap= getDictionaryWithKey().get("32");
+    public List<SysDictionaryInfoDTO> getAppealRejectDictionary(String groupType){
+        List<SysDictionaryInfoDTO> sysDictionaryInfoDTOS = new LinkedList<SysDictionaryInfoDTO>();
+        if (getDictionary() != null
+                && getDictionary().containsKey(Long.parseLong(groupType))
+        ) {
+            sysDictionaryInfoDTOS = getDictionary().get(Long.parseLong(groupType));
         }
-        return appealOperationMap;
+        return sysDictionaryInfoDTOS;
     }
+
     /**
-     * 获取字典申诉审核状态
+     * 获取字典申诉驳回总体信息
      * @return
      */
-    public Map<String, String> getAppealStatusDictionary(){
-        Map<String, String> appealStatusMap = new HashMap<>();
+    public Map<String,Map<String, String>> getAppealRejectionDictionary(){
+        Map<String, Map<String,String>> appealOperationMap = new HashMap<>();
+        Map<String, String> appealOperationMapKey = new HashMap<>();
         if (getDictionaryWithKey() != null
-                && getDictionaryWithKey().containsKey("33")
+                && getDictionaryWithKey().containsKey("34")
         ) {
-            appealStatusMap= getDictionaryWithKey().get("33");
+            appealOperationMapKey= getDictionaryWithKey().get("34");
+        }
+        String appealOperation = appealOperationMapKey.get("申诉驳回");
+        String[] split = appealOperation.split(",");
+        List<String> strings = Arrays.asList(split);
+        for (int i = 0; i < strings.size(); i++) {
+            List<SysDictionaryInfoDTO> appealStatusDictionary = getAppealRejectDictionary(strings.get(i));
+            Map<String, String> keyValue = EntityUtil.makeMapWithKeyValue(appealStatusDictionary, "name", "val");
+            appealOperationMap.put(appealStatusDictionary.get(0).getRemark(), keyValue);
         }
-        return appealStatusMap;
+        return appealOperationMap;
     }
 }

+ 14 - 5
src/main/java/com/diagbot/facade/SysUserFacade.java

@@ -143,8 +143,9 @@ public class SysUserFacade extends SysUserServiceImpl {
 
     /**
      * 获取jwt
-     *
+     * <p>
      * userLoginVO
+     *
      * @return jwt
      */
     public JwtDTO getJwt(HttpServletRequest request, UserLoginVO userLoginVO) {
@@ -158,9 +159,9 @@ public class SysUserFacade extends SysUserServiceImpl {
                     "请输入密码");
         }
         //非湘雅医院执行
-        String captchaId ="";
-        if(0L == getHospitalMark()) {
-            if ( StringUtils.isEmpty(userLoginVO.getCaptcha())) {
+        String captchaId = "";
+        if (0L == getHospitalMark()) {
+            if (StringUtils.isEmpty(userLoginVO.getCaptcha())) {
                 throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
                         "请输入验证码");
             }
@@ -191,7 +192,7 @@ public class SysUserFacade extends SysUserServiceImpl {
         if (null == jwt) {
             throw new CommonException(ServiceErrorCode.GET_TOKEN_FAIL);
         }
-        if(0L == getHospitalMark()) {
+        if (0L == getHospitalMark()) {
             redisUtils.del("user:captchaIds:" + captchaId);
         }
         data.setAccessToken(jwt.getAccess_token());
@@ -779,6 +780,14 @@ public class SysUserFacade extends SysUserServiceImpl {
             throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "该医院下无该用户");
         }
     }
+
+    public Long getUserId(String claimantId, Long hospitalId) {
+        SysUser user = this.getBaseMapper().getUser(claimantId, hospitalId);
+        if (user != null && user.getId() != null) {
+            return user.getId();
+        }
+        return null;
+    }
     //-------------用户维护END---------------------------
 
 }

+ 2 - 0
src/main/java/com/diagbot/mapper/QcresultInfoMapper.java

@@ -89,6 +89,8 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
      */
     public List<NumDTO> resultCountByDept(QcresultFilterVO qcresultFilterVO);
 
+    public List<Map<String,Object>> resultMrCountByDept(QcresultFilterVO qcresultFilterVO);
+
     /**
      * 各模块缺陷占比-按科室
      *

+ 3 - 0
src/main/java/com/diagbot/mapper/SysUserMapper.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.SysUserQueryDTO;
 import com.diagbot.entity.SysUser;
 import com.diagbot.vo.SysUserQueryVO;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -16,4 +17,6 @@ import com.diagbot.vo.SysUserQueryVO;
  */
 public interface SysUserMapper extends BaseMapper<SysUser> {
     IPage<SysUserQueryDTO> userPage(SysUserQueryVO sysUserQueryVO);
+
+    SysUser getUser(@Param("claimantId") String claimantId, @Param("hospitalId") Long hospitalId);
 }

+ 3 - 0
src/main/java/com/diagbot/service/QcresultInfoService.java

@@ -17,6 +17,7 @@ import com.diagbot.vo.QcresultFilterVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -86,6 +87,8 @@ public interface QcresultInfoService extends IService<QcresultInfo> {
      */
     public List<NumDTO> resultCountByDept(QcresultFilterVO qcresultFilterVO);
 
+    public  List<Map<String,Object>> resultMrCountByDept(QcresultFilterVO qcresultFilterVO);
+
     /**
      * 各模块缺陷占比-按科室
      *

+ 4 - 0
src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java

@@ -113,6 +113,10 @@ public class QcresultInfoServiceImpl extends ServiceImpl<QcresultInfoMapper, Qcr
     public List<NumDTO> resultCountByDept(QcresultFilterVO qcresultFilterVO) {
         return baseMapper.resultCountByDept(qcresultFilterVO);
     }
+    @Override
+    public List<Map<String,Object>> resultMrCountByDept(QcresultFilterVO qcresultFilterVO){
+        return baseMapper.resultMrCountByDept(qcresultFilterVO);
+    }
 
     /**
      * 各模块缺陷占比-按科室

+ 7 - 8
src/main/java/com/diagbot/vo/AddAppealInfoApiVO.java

@@ -41,21 +41,20 @@ public class AddAppealInfoApiVO {
     @ApiModelProperty(value = "单项否决(1-单项否决 0-非)")
     private Integer isReject;
 
-    @ApiModelProperty(value = "质控条目(新增已有操作才有值)")
+    @ApiModelProperty(value = "质控条目")
     private String casesEntryName;
 
-    @ApiModelProperty(value = "提示信息(新增已有操作才有值)")
+    @ApiModelProperty(value = "提示信息(")
     private String casesEntryMsg;
 
-    @ApiModelProperty(value = "分值(新增已有操作才有值)")
+    @ApiModelProperty(value = "分值")
     private BigDecimal value;
 
-    @ApiModelProperty(value = "模块数据标准id")
-    private Long casesId;
-
-    @ApiModelProperty(value = "模块名称", hidden = true)
-    private String casesName;
+    @ApiModelProperty(value = "模块id")
+    private Long modeId;
 
+    @ApiModelProperty(value = "模块名称")
+    private String modeName;
 
     @ApiModelProperty(value = "病历内容")
     private String defectContent;

+ 6 - 3
src/main/java/com/diagbot/vo/AddAppealInfoVO.java

@@ -49,11 +49,11 @@ public class AddAppealInfoVO {
     @ApiModelProperty(value = "分值(新增已有操作才有值)")
     private BigDecimal value;
 
-    @ApiModelProperty(value = "模块数据标准id")
-    private Long casesId;
+    @ApiModelProperty(value = "模块id")
+    private Long modeId;
 
     @ApiModelProperty(value = "模块名称", hidden = true)
-    private String casesName;
+    private String modeName;
 
 
     @ApiModelProperty(value = "病历内容")
@@ -81,6 +81,9 @@ public class AddAppealInfoVO {
     @ApiModelProperty(value = "当前工作流节点id", hidden = true)
     private Long workFlowNodeId;
 
+    @ApiModelProperty(value = "单人申诉开关", hidden = true)
+    private Boolean singleAppealFalg;
+
     @ApiModelProperty(value = "备注")
     private String remark;
 }

+ 5 - 2
src/main/java/com/diagbot/vo/ApprovedVo.java

@@ -43,8 +43,8 @@ public class ApprovedVo {
 //    @ApiModelProperty(value = "申诉模块",required = true)
 //    private Long casesId;
 //
-//    @ApiModelProperty(value = "质控缺陷ID")
-//    private Long qcresultDetailId;
+    @ApiModelProperty(value = "质控缺陷ID",hidden = true)
+    private Long qcresultDetailId;
 //
 //    @ApiModelProperty(value = "条目ID")
 //    private Long casesEntryId;
@@ -67,6 +67,9 @@ public class ApprovedVo {
     @ApiModelProperty("逻辑删除接口(1-恢复和0-删除)标志")
     private Integer delStatus;
 
+    @ApiModelProperty(value = "模块id")
+    private Long modeId;
+
     @ApiModelProperty(value = "操作条目")
     private QcResultAlgVO qcResultAlgVO;
 }

+ 3 - 0
src/main/java/com/diagbot/vo/BehospitalPageVO.java

@@ -109,4 +109,7 @@ public class BehospitalPageVO extends Page implements Serializable {
     private Date mrTimeStart;
     private Date mrTimeEnd;
 
+    @ApiModelProperty("页面类型 1:评分详情页|2:核查详情页|3:申诉详情页")
+    private String pageType = "1";
+
 }

+ 26 - 0
src/main/java/com/diagbot/vo/CancelAppealInfoApiVO.java

@@ -0,0 +1,26 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2022/1/6
+ */
+@Data
+public class CancelAppealInfoApiVO {
+    @ApiModelProperty(value = "申诉id", required = true)
+    private Long id;
+    @ApiModelProperty(value = "医院ID",required = true)
+    @NotNull(message = "医院ID不能为空")
+    private Long hospitalId;
+    @ApiModelProperty(value = "申述人工号",required = true)
+    @NotBlank(message = "申述人工号不能为空")
+    private String claimantId;
+    @ApiModelProperty(value = "当前工作流节点id 1:申诉|2:撤回|3:审核", hidden = true)
+    private Long workFlowNodeId;
+}

+ 3 - 0
src/main/java/com/diagbot/vo/CancelAppealInfoVO.java

@@ -3,6 +3,7 @@ package com.diagbot.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
 /**
@@ -14,6 +15,8 @@ import javax.validation.constraints.NotNull;
 public class CancelAppealInfoVO {
     @ApiModelProperty(value = "申诉id", required = true)
     private Long id;
+    @ApiModelProperty(value = "申述人工号", hidden = true)
+    private String claimantId;
     @ApiModelProperty(value = "当前工作流节点id 1:申诉|2:撤回|3:审核", hidden = true)
     private Long workFlowNodeId;
 }

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

@@ -0,0 +1,37 @@
+package com.diagbot.vo;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 通过
+ *
+ * @Description:
+ * @author: cy
+ * @time: 2020/9/4 14:59
+ */
+@Getter
+@Setter
+public class GetAppealDeptVo {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "医院ID", hidden = true)
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "申诉人id", hidden = true)
+    private Long claimantId;
+
+    @ApiModelProperty(value = "审核人id", hidden = true)
+    private Long checkId;
+
+    @ApiModelProperty(value = "页面类型:1:申诉记录|2:申诉审核")
+    @NotBlank(message = "页面类型不能为空")
+    private String pageType;
+
+    @ApiModelProperty(value = "是否已归档(0:未归档,1:已归档)")
+    private String isPlacefile;
+
+}

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

@@ -0,0 +1,37 @@
+package com.diagbot.vo;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 通过
+ *
+ * @Description:
+ * @author: cy
+ * @time: 2020/9/4 14:59
+ */
+@Getter
+@Setter
+public class GetAppealModeVo {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "医院ID", hidden = true)
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "申诉人id", hidden = true)
+    private Long claimantId;
+
+    @ApiModelProperty(value = "审核人id", hidden = true)
+    private Long checkId;
+
+    @ApiModelProperty(value = "页面类型:1:申诉记录|2:申诉审核")
+    @NotBlank(message = "页面类型不能为空")
+    private String pageType;
+
+    @ApiModelProperty(value = "是否已归档(0:未归档,1:已归档)")
+    private String isPlacefile;
+
+}

+ 1 - 2
src/main/java/com/diagbot/vo/GetAppealOperationTypeVO.java

@@ -13,8 +13,7 @@ import javax.validation.constraints.NotNull;
  */
 @Data
 public class GetAppealOperationTypeVO {
-    @ApiModelProperty(value = "质控缺陷id", required = true)
-    @NotNull(message = "质控缺陷id不能为空")
+    @ApiModelProperty(value = "质控缺陷id")
     private Long qcresultDetailId;
     @ApiModelProperty(value = "审核状态 0:待审核|1:驳回|2:通过", required = true)
     @NotBlank(message = "审核状态不能为空")

+ 4 - 1
src/main/java/com/diagbot/vo/GetAppealReviewVO.java

@@ -38,7 +38,7 @@ public class GetAppealReviewVO extends Page implements Serializable {
     private String deptName;
 
     @ApiModelProperty(value = "申述模块")
-    private String casesName;
+    private String modeName;
 
     @ApiModelProperty(value = "申诉人")
     private String name;
@@ -49,4 +49,7 @@ public class GetAppealReviewVO extends Page implements Serializable {
     @ApiModelProperty(value = "状态")
     private String state;
 
+    @ApiModelProperty(value = "是否已归档(0:未归档,1:已归档)")
+    private String isPlacefile;
+
 }

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

@@ -12,4 +12,10 @@ import lombok.Data;
 public class GetAuditNumberVO {
     @ApiModelProperty(value = "审核人",required = true,hidden = true)
     private Long id;
+
+    @ApiModelProperty(value = "医院id",hidden = true)
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "质控类型 0-运行质控,1-终末质控")
+    private Long analyzeType;
 }

+ 31 - 0
src/main/java/com/diagbot/vo/GetComplaintDetailMsgVO.java

@@ -0,0 +1,31 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @Description:
+ * @author: zhanghang
+ * @time: 2022/3/1 14:38
+ */
+@Getter
+@Setter
+public class GetComplaintDetailMsgVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "医院id",hidden = true)
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "缺陷Id")
+    private Long id;
+
+    @ApiModelProperty(value = "病人序列号")
+    private Long behospitalCode;
+
+    @ApiModelProperty(value = "条目ID")
+    private Long casesEntryId;
+
+}

+ 7 - 1
src/main/java/com/diagbot/vo/GetComplaintRecordVO.java

@@ -41,7 +41,7 @@ public class GetComplaintRecordVO extends Page implements Serializable {
     private String deptName;
 
     @ApiModelProperty(value = "申述模块")
-    private String casesName;
+    private String modeName;
 
     @ApiModelProperty(value = "审核人")
     private String name;
@@ -52,4 +52,10 @@ public class GetComplaintRecordVO extends Page implements Serializable {
     @ApiModelProperty(value = "状态")
     private String state;
 
+    @ApiModelProperty(value = "是否已归档(0:未归档,1:已归档)")
+    private String isPlacefile;
+
+    @ApiModelProperty(value = "患者姓名")
+    private String patientName;
+
 }

+ 2 - 2
src/main/java/com/diagbot/vo/GetDetailVO.java

@@ -20,6 +20,6 @@ public class GetDetailVO {
     private Long hospitalId; //医院ID
     private List<String> paramStr = new ArrayList<>(); // 获取具体的参数
 
-    @ApiModelProperty(value = "页面类型 1:评分详情页|2:核查详情页|3:申诉详情页")
-    private String pageType = "1";
+//    @ApiModelProperty(value = "页面类型 1:评分详情页|2:核查详情页|3:申诉详情页")
+//    private String pageType = "1";
 }

+ 5 - 0
src/main/java/com/diagbot/vo/GetReviewerApiVO.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 
 /**
  * @Description:
@@ -12,6 +13,10 @@ import javax.validation.constraints.NotBlank;
  */
 @Data
 public class GetReviewerApiVO {
+
+    @ApiModelProperty(value = "医院ID",required = true)
+    @NotNull(message = "医院ID不能为空")
+    private Long hospitalId;
     @ApiModelProperty(value = "申述人工号",required = true)
     @NotBlank(message = "申述人工号不能为空")
     private String claimantId;

+ 36 - 25
src/main/java/com/diagbot/web/MedAppealExamineInfoController.java

@@ -4,14 +4,24 @@ package com.diagbot.web;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.diagbot.annotation.SysLogger;
-import com.diagbot.client.MedAppealExamineInfoServiceClient;
-import com.diagbot.dto.*;
+import com.diagbot.client.MedAppealExamineInfoServiceClientFacade;
+import com.diagbot.dto.GetAppealInfoDTO;
+import com.diagbot.dto.GetAppealReviewDTO;
+import com.diagbot.dto.GetComplaintRecordDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.QcresultDetail;
 import com.diagbot.facade.MedAppealExamineInfoManagementFacade;
 import com.diagbot.facade.SysDictionaryFacade;
 import com.diagbot.facade.SysHospitalSetFacade;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
-import com.diagbot.vo.*;
+import com.diagbot.vo.ApprovedVo;
+import com.diagbot.vo.GetAppealInfoVO;
+import com.diagbot.vo.GetAppealReviewVO;
+import com.diagbot.vo.GetAuditNumberVO;
+import com.diagbot.vo.GetComplaintDetailMsgVO;
+import com.diagbot.vo.GetComplaintRecordVO;
+import com.diagbot.vo.RejectedVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,7 +33,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
-import java.util.HashMap;
 import java.util.Map;
 
 
@@ -41,7 +50,7 @@ import java.util.Map;
 @SuppressWarnings("unchecked")
 public class MedAppealExamineInfoController {
     @Autowired
-    MedAppealExamineInfoServiceClient medAppealExamineInfoServiceClient;
+    MedAppealExamineInfoServiceClientFacade medAppealExamineInfoServiceClientFacade;
     @Autowired
     SysDictionaryFacade sysDictionaryFacade;
     @Autowired
@@ -53,25 +62,23 @@ public class MedAppealExamineInfoController {
             notes = "获取申诉任务接口")
     @PostMapping("/getComplaintRecord")
     @SysLogger("getComplaintRecord")
-    public RespDTO<GetComplaintRecordDTO> getComplaintRecord(@RequestBody GetComplaintRecordVO getComplaintRecordVO) {
+    public RespDTO<Page<GetComplaintRecordDTO>> getComplaintRecord(@RequestBody GetComplaintRecordVO getComplaintRecordVO) {
         String userId = SysUserUtils.getCurrentPrincipleID();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         getComplaintRecordVO.setHospitalId(Long.valueOf(hospitalId));
         getComplaintRecordVO.setComplaintId(Long.valueOf(userId));
-        RespDTO<Page<GetComplaintRecordDTO>> complaintRecord = medAppealExamineInfoServiceClient.getComplaintRecord(getComplaintRecordVO);
-        return RespDTO.onSuc(complaintRecord);
+        return medAppealExamineInfoServiceClientFacade.getComplaintRecord(getComplaintRecordVO);
     }
 
     @ApiOperation(value = "获取申诉审核列表[by:zhanghang]",
             notes = "获取申诉审核列表")
     @PostMapping("/getAppealReview")
-    public RespDTO<GetAppealReviewDTO> getAppealReview(@RequestBody GetAppealReviewVO getAppealReviewVO) {
+    public RespDTO<Page<GetAppealReviewDTO>> getAppealReview(@RequestBody GetAppealReviewVO getAppealReviewVO) {
         String userId = SysUserUtils.getCurrentPrincipleID();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         getAppealReviewVO.setHospitalId(Long.valueOf(hospitalId));
         getAppealReviewVO.setAppealId(Long.valueOf(userId));
-        RespDTO<Page<GetAppealReviewDTO>> appealReview = medAppealExamineInfoServiceClient.getAppealReview(getAppealReviewVO);
-        return RespDTO.onSuc(appealReview);
+        return medAppealExamineInfoServiceClientFacade.getAppealReview(getAppealReviewVO);
     }
 
     @ApiOperation(value = "审核通过[by:zhanghang]",
@@ -109,28 +116,21 @@ public class MedAppealExamineInfoController {
             JSONObject mapJSON = JSONObject.parseObject(mapping);
             rejectedVo.setWorkFlowNodeId(mapJSON.getLong("rejected"));
         }
-        return RespDTO.onSuc(medAppealExamineInfoServiceClient.rejected(rejectedVo));
+        return medAppealExamineInfoServiceClientFacade.rejected(rejectedVo);
     }
     @ApiOperation(value = "审核查看[by:zhanghang]",
             notes = "审核查看")
     @PostMapping("/getApprovedView")
     public RespDTO<GetAppealInfoDTO> getApprovedView(@RequestBody GetAppealInfoVO getAppealInfoVO) {
-
-        return RespDTO.onSuc(medAppealExamineInfoServiceClient.getApprovedView(getAppealInfoVO));
+        return medAppealExamineInfoServiceClientFacade.getApprovedView(getAppealInfoVO);
     }
 
     @ApiOperation(value = "获取操作类型及状态[by:zhanghang]",
             notes = "获取操作类型及状态")
     @PostMapping("/getAppealReviewDictionary")
     public RespDTO<Map<String,Map<String,String>>> getAppealReviewDictionary() {
-        Map<String, String> appealOperationDictionary = sysDictionaryFacade.getAppealOperationDictionary();
-        Map<String, String> appealStatusDictionary = sysDictionaryFacade.getAppealStatusDictionary();
-        Map<String, Map<String, String>> appealReviewMap = new HashMap<>();
-        if(appealOperationDictionary!=null && appealStatusDictionary!=null){
-            appealReviewMap.put("操作类型",appealOperationDictionary);
-            appealReviewMap.put("状态",appealStatusDictionary);
-        }
-        return RespDTO.onSuc(appealReviewMap);
+        Map<String, Map<String, String>> appealRejectionDictionary = sysDictionaryFacade.getAppealRejectionDictionary();
+        return RespDTO.onSuc(appealRejectionDictionary);
     }
 
     @ApiOperation(value = "获取待审核数量[by:zhanghang]",
@@ -138,8 +138,10 @@ public class MedAppealExamineInfoController {
     @PostMapping("/getAuditNumber")
     public RespDTO<Integer> getAuditNumber(@RequestBody GetAuditNumberVO getAuditNumberVO) {
         String userId = SysUserUtils.getCurrentPrincipleID();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        getAuditNumberVO.setHospitalId(Long.valueOf(hospitalId));
         getAuditNumberVO.setId(Long.valueOf(userId));
-        return RespDTO.onSuc(medAppealExamineInfoServiceClient.getAuditNumber(getAuditNumberVO));
+        return medAppealExamineInfoServiceClientFacade.getAuditNumber(getAuditNumberVO);
     }
 
 
@@ -151,7 +153,7 @@ public class MedAppealExamineInfoController {
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         getComplaintRecordVO.setHospitalId(Long.valueOf(hospitalId));
         getComplaintRecordVO.setComplaintId(Long.valueOf(userId));
-        medAppealExamineInfoManagementFacade.getComplaintRecordExport(response, getComplaintRecordVO,medAppealExamineInfoServiceClient);
+        medAppealExamineInfoManagementFacade.getComplaintRecordExport(response, getComplaintRecordVO, medAppealExamineInfoServiceClientFacade);
     }
 
     @ApiOperation(value = "申诉审核导出[by:songxl]")
@@ -162,7 +164,16 @@ public class MedAppealExamineInfoController {
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         getAppealReviewVO.setHospitalId(Long.valueOf(hospitalId));
         getAppealReviewVO.setAppealId(Long.valueOf(userId));
-        medAppealExamineInfoManagementFacade.getAppealReviewExport(response, getAppealReviewVO,medAppealExamineInfoServiceClient);
+        medAppealExamineInfoManagementFacade.getAppealReviewExport(response, getAppealReviewVO, medAppealExamineInfoServiceClientFacade);
+    }
+
+    @ApiOperation(value = "获取该申诉记录最新缺陷详情[by:zhanghang]",
+            notes = "获取该申诉记录最新缺陷详情")
+    @PostMapping("/getComplaintDetailMsg")
+    public RespDTO<QcresultDetail> getComplaintDetailMsg(@RequestBody GetComplaintDetailMsgVO getComplaintDetailMsgVO) {
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        getComplaintDetailMsgVO.setHospitalId(Long.valueOf(hospitalId));
+        return medAppealExamineInfoServiceClientFacade.getComplaintDetailMsg(getComplaintDetailMsgVO);
     }
 
 }

+ 126 - 42
src/main/java/com/diagbot/web/MedAppealInfoController.java

@@ -2,42 +2,30 @@ package com.diagbot.web;
 
 
 import com.alibaba.fastjson.JSONObject;
-import com.diagbot.annotation.SysLogger;
-import com.diagbot.client.MedAppealInfoServiceClient;
-import com.diagbot.dto.GetAppealInfoDTO;
-import com.diagbot.dto.GetReviewerDTO;
-import com.diagbot.dto.RespDTO;
-import com.diagbot.dto.Response;
-import com.diagbot.entity.SysUser;
-import com.diagbot.entity.WorkFlowInfo;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.client.MedAppealInfoServiceClientFacade;
+import com.diagbot.dto.*;
+import com.diagbot.entity.SysUserRole;
+import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.facade.SysHospitalSetFacade;
-import com.diagbot.util.BeanUtil;
+import com.diagbot.facade.SysUserFacade;
+import com.diagbot.facade.SysUserRoleFacade;
 import com.diagbot.util.StringUtil;
-import com.diagbot.util.SysJwtUtil;
 import com.diagbot.util.SysUserUtils;
-import com.diagbot.vo.AddAppealInfoApiVO;
-import com.diagbot.vo.AddAppealInfoVO;
-import com.diagbot.vo.CancelAppealInfoVO;
-import com.diagbot.vo.GetAppealInfoVO;
-import com.diagbot.vo.GetAppealOperationTypeVO;
-import com.diagbot.vo.GetReviewerApiVO;
-import com.diagbot.vo.GetReviewerVO;
-import com.diagbot.vo.MedAppealInfoVO;
+import com.diagbot.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-import springfox.documentation.spring.web.json.Json;
 
 import javax.validation.Valid;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -57,11 +45,17 @@ import java.util.Map;
 public class MedAppealInfoController {
 
     @Autowired
-    MedAppealInfoServiceClient medAppealInfoServiceClient;
+    MedAppealInfoServiceClientFacade medAppealInfoServiceClientFacade;
 
     @Autowired
     SysHospitalSetFacade sysHospitalSetFacade;
 
+    @Autowired
+    SysUserRoleFacade sysUserRoleFacade;
+
+    @Autowired
+    SysUserFacade sysUserFacade;
+
     @ApiOperation(value = "申诉[by:songxl]",
             notes = "申诉")
     @PostMapping("/addAppealInfo")
@@ -70,12 +64,17 @@ public class MedAppealInfoController {
         addAppealInfoVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
         addAppealInfoVO.setClaimantId(SysUserUtils.getCurrentPrincipleID());
         //获取操作流节点
-        String mapping = sysHospitalSetFacade.getValue(Long.parseLong(SysUserUtils.getCurrentHospitalID()),"work_flow_node_mapping");
-        if(StringUtil.isNotEmpty(mapping)){
+        String mapping = sysHospitalSetFacade.getValue(Long.parseLong(SysUserUtils.getCurrentHospitalID()), "work_flow_node_mapping");
+        //获取是否是单人操作开关
+        String single_appeal_falg = sysHospitalSetFacade.getValue(Long.parseLong(SysUserUtils.getCurrentHospitalID()), "single_appeal_falg");
+        if(StringUtil.isNotEmpty(single_appeal_falg)) {
+            addAppealInfoVO.setSingleAppealFalg(Boolean.parseBoolean(single_appeal_falg));
+        }
+        if (StringUtil.isNotEmpty(mapping)) {
             JSONObject mapJSON = JSONObject.parseObject(mapping);
             addAppealInfoVO.setWorkFlowNodeId(mapJSON.getLong("addAppealInfo"));
         }
-        return medAppealInfoServiceClient.addAppealInfo(addAppealInfoVO);
+        return medAppealInfoServiceClientFacade.addAppealInfo(addAppealInfoVO);
     }
 
     @ApiOperation(value = "申诉-对外api接口[by:songxl]",
@@ -83,15 +82,26 @@ public class MedAppealInfoController {
     @PostMapping("/addAppealInfoApi")
     @Transactional
     public RespDTO<Boolean> addAppealInfoApi(@RequestBody @Valid AddAppealInfoApiVO addAppealInfoApiVO) {
-        //获取操作流节点
-        String mapping = sysHospitalSetFacade.getValue(addAppealInfoApiVO.getHospitalId(),"work_flow_node_mapping");
         AddAppealInfoVO addAppealInfoVO = new AddAppealInfoVO();
-        BeanUtils.copyProperties(addAppealInfoApiVO,addAppealInfoVO);
-        if(StringUtil.isNotEmpty(mapping)){
+        BeanUtils.copyProperties(addAppealInfoApiVO, addAppealInfoVO);
+        //获取操作流节点
+        String mapping = sysHospitalSetFacade.getValue(addAppealInfoApiVO.getHospitalId(), "work_flow_node_mapping");
+        if (StringUtil.isNotEmpty(mapping)) {
             JSONObject mapJSON = JSONObject.parseObject(mapping);
             addAppealInfoVO.setWorkFlowNodeId(mapJSON.getLong("addAppealInfo"));
         }
-        return medAppealInfoServiceClient.addAppealInfo(addAppealInfoVO);
+        //通过医生id获取医生的用户id
+        Long userId = sysUserFacade.getUserId(addAppealInfoApiVO.getClaimantId(), addAppealInfoApiVO.getHospitalId());
+        if (userId != null) {
+            addAppealInfoVO.setClaimantId(userId+"");
+        }
+        //获取是否是单人操作开关
+        String single_appeal_falg = sysHospitalSetFacade.getValue(addAppealInfoApiVO.getHospitalId(), "single_appeal_falg");
+        if(StringUtil.isNotEmpty(single_appeal_falg)) {
+            addAppealInfoVO.setSingleAppealFalg(Boolean.parseBoolean(single_appeal_falg));
+        }
+
+        return medAppealInfoServiceClientFacade.addAppealInfo(addAppealInfoVO);
     }
 
     @ApiOperation(value = "获取审核人-对外api接口[by:songxl]",
@@ -99,13 +109,18 @@ public class MedAppealInfoController {
     @PostMapping("/getReviewerApi")
     public RespDTO<List<GetReviewerDTO>> getReviewerApi(@RequestBody GetReviewerApiVO getReviewerApiVO) {
         //申诉人是否包含自身开关
-        String flag = sysHospitalSetFacade.getValue(Long.parseLong(SysUserUtils.getCurrentHospitalID()),"self_flag");
+        String flag = sysHospitalSetFacade.getValue(getReviewerApiVO.getHospitalId(), "self_flag");
         GetReviewerVO getReviewerVO = new GetReviewerVO();
-        BeanUtils.copyProperties(getReviewerApiVO,getReviewerVO);
-        if(StringUtils.isNotEmpty(flag)){
+        BeanUtils.copyProperties(getReviewerApiVO, getReviewerVO);
+        if (StringUtils.isNotEmpty(flag)) {
             getReviewerVO.setSelfFlag(Boolean.parseBoolean(flag));
         }
-        return medAppealInfoServiceClient.getReviewer(getReviewerVO);
+        //通过医生id获取医生的用户id
+        Long userId = sysUserFacade.getUserId(getReviewerApiVO.getClaimantId(), getReviewerApiVO.getHospitalId());
+        if (userId != null) {
+            getReviewerVO.setClaimantId(userId+"");
+        }
+        return medAppealInfoServiceClientFacade.getReviewer(getReviewerVO);
     }
 
     @ApiOperation(value = "获取审核人[by:songxl]",
@@ -114,18 +129,39 @@ public class MedAppealInfoController {
     public RespDTO<List<GetReviewerDTO>> getReviewer(@RequestBody GetReviewerVO getReviewerVO) {
         getReviewerVO.setClaimantId(SysUserUtils.getCurrentPrincipleID());
         //申诉人是否包含自身开关
-        String flag = sysHospitalSetFacade.getValue(Long.parseLong(SysUserUtils.getCurrentHospitalID()),"self_flag");
-        if(StringUtils.isNotEmpty(flag)){
+        String flag = sysHospitalSetFacade.getValue(Long.parseLong(SysUserUtils.getCurrentHospitalID()), "self_flag");
+        if (StringUtils.isNotEmpty(flag)) {
             getReviewerVO.setSelfFlag(Boolean.parseBoolean(flag));
         }
-        return medAppealInfoServiceClient.getReviewer(getReviewerVO);
+        return medAppealInfoServiceClientFacade.getReviewer(getReviewerVO);
     }
 
     @ApiOperation(value = "再次申诉获取操作类型[by:songxl]",
             notes = "再次申诉获取操作类型")
     @PostMapping("/getAppealOperationType")
     public RespDTO<Map<String, String>> getAppealOperationType(@RequestBody @Valid GetAppealOperationTypeVO getAppealOperationTypeVO) {
-        return medAppealInfoServiceClient.getAppealOperationType(getAppealOperationTypeVO);
+        return medAppealInfoServiceClientFacade.getAppealOperationType(getAppealOperationTypeVO);
+    }
+
+    @ApiOperation(value = "撤回申诉[by:songxl]",
+            notes = "撤回申诉")
+    @PostMapping("/cancelAppealInfoApi")
+    @Transactional
+    public RespDTO<Boolean> cancelAppealInfoApi(@RequestBody @Valid CancelAppealInfoApiVO cancelAppealInfoApiVO) {
+        //获取操作流节点
+        String mapping = sysHospitalSetFacade.getValue(cancelAppealInfoApiVO.getHospitalId(), "work_flow_node_mapping");
+        CancelAppealInfoVO cancelAppealInfoVO = new CancelAppealInfoVO();
+        BeanUtils.copyProperties(cancelAppealInfoApiVO, cancelAppealInfoVO);
+        if (StringUtil.isNotEmpty(mapping)) {
+            JSONObject mapJSON = JSONObject.parseObject(mapping);
+            cancelAppealInfoVO.setWorkFlowNodeId(mapJSON.getLong("cancelAppealInfo"));
+        }
+        //通过医生id获取医生的用户id
+        Long userId = sysUserFacade.getUserId(cancelAppealInfoApiVO.getClaimantId(), cancelAppealInfoApiVO.getHospitalId());
+        if (userId != null) {
+            cancelAppealInfoVO.setClaimantId(userId+"");
+        }
+        return medAppealInfoServiceClientFacade.cancelAppealInfo(cancelAppealInfoVO);
     }
 
     @ApiOperation(value = "撤回申诉[by:songxl]",
@@ -134,19 +170,67 @@ public class MedAppealInfoController {
     @Transactional
     public RespDTO<Boolean> cancelAppealInfo(@RequestBody @Valid CancelAppealInfoVO cancelAppealInfoVO) {
         //获取操作流节点
-        String mapping = sysHospitalSetFacade.getValue(Long.parseLong(SysUserUtils.getCurrentHospitalID()),"work_flow_node_mapping");
-        if(StringUtil.isNotEmpty(mapping)){
+        String mapping = sysHospitalSetFacade.getValue(Long.parseLong(SysUserUtils.getCurrentHospitalID()), "work_flow_node_mapping");
+        if (StringUtil.isNotEmpty(mapping)) {
             JSONObject mapJSON = JSONObject.parseObject(mapping);
             cancelAppealInfoVO.setWorkFlowNodeId(mapJSON.getLong("cancelAppealInfo"));
         }
-        return medAppealInfoServiceClient.cancelAppealInfo(cancelAppealInfoVO);
+        cancelAppealInfoVO.setClaimantId(SysUserUtils.getCurrentPrincipleID());
+        return medAppealInfoServiceClientFacade.cancelAppealInfo(cancelAppealInfoVO);
     }
 
     @ApiOperation(value = "申诉记录详情-查看[by:songxl]",
             notes = "申诉记录详情-查看")
     @PostMapping("/getAppealInfo")
     public RespDTO<GetAppealInfoDTO> getAppealInfo(@RequestBody GetAppealInfoVO getAppealInfoVO) {
-        return medAppealInfoServiceClient.getAppealInfo(getAppealInfoVO);
+        return medAppealInfoServiceClientFacade.getAppealInfo(getAppealInfoVO);
+    }
+
+    @ApiOperation(value = "申诉审核科室下拉列表查询[by:songxl]",
+            notes = "申诉审核科室下拉列表查询")
+    @PostMapping("/getAppealDept")
+    public RespDTO<List<GetAppealDeptDTO>> getAppealDept(@RequestBody @Valid GetAppealDeptVo getAppealDeptVo) {
+        String currentPrincipleID = SysUserUtils.getCurrentPrincipleID();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        getAppealDeptVo.setHospitalId(Long.valueOf(hospitalId));
+        if (Long.valueOf(getAppealDeptVo.getPageType()) == 1) {
+            //申诉人
+            getAppealDeptVo.setClaimantId(Long.valueOf(currentPrincipleID));
+        } else {
+            //审核人
+            getAppealDeptVo.setCheckId(Long.valueOf(currentPrincipleID));
+        }
+        return medAppealInfoServiceClientFacade.getAppealDept(getAppealDeptVo);
     }
 
+    @ApiOperation(value = "申诉审核模块下拉列表查询[by:songxl]",
+            notes = "申诉审核模块下拉列表查询")
+    @PostMapping("/getAppealMode")
+    public RespDTO<List<GetAppealModeDTO>> getAppealMode(@RequestBody @Valid GetAppealModeVo getAppealModeVo) {
+        String currentPrincipleID = SysUserUtils.getCurrentPrincipleID();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        getAppealModeVo.setHospitalId(Long.valueOf(hospitalId));
+        if (Long.valueOf(getAppealModeVo.getPageType()) == 1) {
+            //申诉人
+            getAppealModeVo.setClaimantId(Long.valueOf(currentPrincipleID));
+        } else {
+            //审核人
+            getAppealModeVo.setCheckId(Long.valueOf(currentPrincipleID));
+        }
+        return medAppealInfoServiceClientFacade.getAppealMode(getAppealModeVo);
+    }
+
+    @ApiOperation(value = "查询该角色的所有角色id[by:songxl]",
+            notes = "查询该角色的所有角色id")
+    @PostMapping("/getUserRole")
+    public RespDTO<List<Long>> getUserRole() {
+        List<Long> roleId = new ArrayList<>();
+        List<SysUserRole> list = sysUserRoleFacade.list(new QueryWrapper<SysUserRole>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("user_id", SysUserUtils.getCurrentPrincipleID()));
+        for (SysUserRole sysUserRole : list) {
+            roleId.add(sysUserRole.getRoleId());
+        }
+        return RespDTO.onSuc(roleId);
+    }
 }

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

@@ -183,4 +183,4 @@ initmodeid:
 log_switch:
   enable: true
 
-appeal.address: http://192.168.2.237:8871
+appeal.address: http://192.168.2.125:8871

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

@@ -183,4 +183,4 @@ initmodeid:
 log_switch:
   enable: true
 
-appeal.address: http://192.168.2.237:8871
+appeal.address: http://192.168.2.129:8871

+ 1 - 1
src/main/resources/bootstrap.yml

@@ -2,7 +2,7 @@ spring:
   application:
     name: mrqc-sys
   profiles:
-    active: dev
+    active: test
   main:
     allow-bean-definition-overriding: true
 

+ 104 - 21
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -683,8 +683,11 @@
     <select id="getMsg" resultType="com.diagbot.dto.MsgDTO">
         SELECT
         a.*, u.linkman,
-        appeal.id appeal_info_id,
-        examine.example_status
+        appeal.id appealInfoId,
+        appeal.appeal_operation_type appealOperationType,
+        appeal.example_status exampleStatus,
+        appeal.reviewer,
+        appeal.exampleDate
         FROM
         (
         SELECT DISTINCT
@@ -705,9 +708,12 @@
         c.gmt_modified,
         c.modifier,
         c.is_deleted,
+        c.remark,
         c.explain_info AS explainInfo,
         a.type,
-        a.drgs
+        a.drgs,
+        c.hospital_id,
+        c.behospital_code
         FROM
         `qc_cases_entry` a,
         qc_mode b,
@@ -732,29 +738,103 @@
         a.order_no
         ) a
         LEFT JOIN sys_user u ON u.id = a.modifier
-        LEFT JOIN med_appeal_info appeal ON a.id = appeal.qcresult_detail_id
-        AND appeal.is_deleted = 'N'
-        LEFT JOIN med_appeal_examine_info examine ON examine.appeal_info_id = appeal.id
         AND u.is_deleted = 'N'
+        LEFT JOIN (
+        SELECT
+        appeal.id,
+        appeal.cases_entry_id,
+        appeal.behospital_code,
+        appeal.hospital_id,
+        appeal.appeal_operation_type,
+        examine.example_status,
+        u.linkman reviewer,
+        examine.gmt_create exampleDate
+        FROM
+        med_appeal_info appeal
+        JOIN med_appeal_examine_info examine ON examine.appeal_info_id = appeal.id
+        LEFT JOIN sys_user u ON appeal.check_id = u.id
+        AND u.is_deleted = 'N'
+        WHERE
+        appeal.is_deleted = 'N'
+        ) appeal ON a.cases_entry_id = appeal.cases_entry_id
+        AND a.hospital_id = appeal.hospital_id
+        AND a.behospital_code = appeal.behospital_code
     </select>
 
     <select id="getForeignMsg" resultType="com.diagbot.dto.MsgDTO">
-        SELECT a.*, u.linkman
+        SELECT
+        a.*, u.linkman,
+        appeal.id appealInfoId,
+        appeal.appeal_operation_type appealOperationType,
+        appeal.example_status exampleStatus
         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,
-         c.gmt_create, c.gmt_modified, c.modifier,c.is_deleted,c.explain_info as explainInfo,
-        a.type, a.drgs
-        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 c.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
-        and c.hospital_id = #{hospitalId}
-        and c.behospital_code = #{behospitalCode}
-        order by b.order_no, c.grade_type desc, a.order_no) a
-        LEFT JOIN sys_user u  on u.id = a.modifier  and u.is_deleted = 'N'
+        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,
+        c.gmt_create,
+        c.gmt_modified,
+        c.modifier,
+        c.is_deleted,
+        c.remark,
+        c.explain_info AS explainInfo,
+        a.type,
+        a.drgs,
+        c.hospital_id,
+        c.behospital_code
+        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 c.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
+        AND c.hospital_id = #{hospitalId}
+        <if test="qcresultInfoId != null">
+            AND c.qcresult_info_id = #{qcresultInfoId}
+        </if>
+        AND c.behospital_code = #{behospitalCode}
+        ORDER BY
+        b.order_no,
+        c.grade_type DESC,
+        a.order_no
+        ) a
+        LEFT JOIN sys_user u ON u.id = a.modifier
+        AND u.is_deleted = 'N'
+        LEFT JOIN (
+        SELECT
+        appeal.id,
+        appeal.cases_entry_id,
+        appeal.behospital_code,
+        appeal.hospital_id,
+        appeal.appeal_operation_type,
+        examine.example_status
+        FROM
+        med_appeal_info appeal
+        JOIN med_appeal_examine_info examine ON examine.appeal_info_id = appeal.id
+        WHERE
+        appeal.is_deleted = 'N'
+        ) appeal ON a.cases_entry_id = appeal.cases_entry_id
+        AND a.hospital_id = appeal.hospital_id
+        AND a.behospital_code = appeal.behospital_code
     </select>
 
 
@@ -1082,7 +1162,7 @@
         JOIN sys_user_dept d
         ON a.hospital_id = d.hospital_id
         AND a.beh_dept_id = d.dept_id
-        LEFT JOIN med_qcresult_info b
+        JOIN med_qcresult_info b
         ON a.behospital_code = b.behospital_code
         AND b.is_deleted = 'N'
         LEFT JOIN med_qcresult_cases e
@@ -1094,6 +1174,9 @@
         AND c.is_deleted = 'N'
         WHERE d.is_deleted = 'N'
         AND d.user_id = #{userId}
+        <if test="pageType == 3">
+            AND b.level is not null
+        </if>
         ) t
         LEFT JOIN (SELECT * FROM med_check_info WHERE is_deleted = 'N' AND check_type in(0,2) ) g
         ON t.behospital_code = g.behospital_code

+ 57 - 1
src/main/resources/mapper/QcresultInfoMapper.xml

@@ -1040,7 +1040,7 @@
         SELECT
         a.beh_dept_id AS id,
         a.beh_dept_name AS NAME,
-        COUNT(*) AS num
+        COUNT(distinct a.behospital_code) AS num
         FROM
         med_behospital_info a,
         med_qcresult_info c,
@@ -1090,6 +1090,62 @@
         a.beh_dept_name
     </select>
 
+
+    <!-- 按科室统计质控病历数 -->
+    <select id="resultMrCountByDept" parameterType="com.diagbot.vo.QcresultFilterVO" resultType="java.util.Map">
+        SELECT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME,
+        COUNT(distinct a.behospital_code) AS num,
+        COUNT(distinct case when c.level ='甲' then a.behospital_code end) AS firNum,
+        COUNT(distinct case when c.level ='乙' then a.behospital_code end) AS secNum,
+        COUNT(distinct case when c.level ='丙' then a.behospital_code end) AS thrNum
+        FROM
+        med_behospital_info a,
+        med_qcresult_info c,
+        sys_user_dept d
+        WHERE
+        a.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND a.hospital_id = c.hospital_id
+        AND a.hospital_id = d.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.beh_dept_id = d.dept_id
+        <if test="isPlacefile != null and isPlacefile != ''">
+            and a.is_placefile = #{isPlacefile}
+        </if>
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="userId!=null">
+            AND d.user_id = #{userId}
+        </if>
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="isPlacefile != null and isPlacefile == 0">
+            <if test="startDate != null and startDate != ''">
+                <![CDATA[ AND a.behospital_date >= #{startDate}]]>
+            </if>
+            <if test="endDate != null and endDate != ''">
+                <![CDATA[ AND a.behospital_date <= #{endDate}]]>
+            </if>
+        </if>
+        <if test="isPlacefile != null and isPlacefile == 1">
+            <if test="startDate != null and startDate != ''">
+                <![CDATA[ AND a.leave_hospital_date >= #{startDate}]]>
+            </if>
+            <if test="endDate != null and endDate != ''">
+                <![CDATA[ AND a.leave_hospital_date <= #{endDate}]]>
+            </if>
+        </if>
+        <if test="gradeType != null and gradeType != ''">
+            AND c.grade_type = #{gradeType}
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+    </select>
+
     <!-- 按模块统计质控缺陷数 -->
     <select id="entryCountGroupByCaseAndDept" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.DeptNumDTO">
         SELECT

+ 14 - 0
src/main/resources/mapper/SysUserMapper.xml

@@ -126,4 +126,18 @@
             and t3.linkman like CONCAT('%',#{linkman},'%')
         </if>
     </select>
+
+    <select id="getUser" resultType="com.diagbot.entity.SysUser">
+        SELECT
+        *
+    FROM
+        sys_user u,
+        sys_user_hospital uh
+    WHERE
+        u.is_deleted = "N"
+    AND uh.is_deleted = "N"
+    AND u.id = uh.user_id
+    AND u.username = #{claimantId}
+    AND uh.hospital_id = #{hospitalId}
+    </select>
 </mapper>