Przeglądaj źródła

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

# Conflicts:
#	src/main/resources/bootstrap.yml
songxinlu 3 lat temu
rodzic
commit
0b1ed4d530
59 zmienionych plików z 3060 dodań i 119 usunięć
  1. 205 0
      doc/041.20220118_v2.2.0_通用版_申诉驳回/qc_init_v2.2.0_通用版_申诉驳回.sql
  2. 73 0
      src/main/java/com/diagbot/client/MedAppealExamineInfoServiceClient.java
  3. 52 0
      src/main/java/com/diagbot/client/MedAppealInfoServiceClient.java
  4. 56 0
      src/main/java/com/diagbot/client/hystrix/MedAppealExamineInfoServiceHystrix.java
  5. 66 0
      src/main/java/com/diagbot/client/hystrix/MedAppealInfoServiceHystrix.java
  6. 21 26
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  7. 20 0
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  8. 83 0
      src/main/java/com/diagbot/dto/AppealExamineRecordDTO.java
  9. 59 0
      src/main/java/com/diagbot/dto/ExportGetAppealReviewDTO.java
  10. 58 0
      src/main/java/com/diagbot/dto/ExportGetComplaintRecordDTO.java
  11. 72 0
      src/main/java/com/diagbot/dto/GetAppealInfoDTO.java
  12. 67 0
      src/main/java/com/diagbot/dto/GetAppealReviewDTO.java
  13. 70 0
      src/main/java/com/diagbot/dto/GetComplaintRecordDTO.java
  14. 22 0
      src/main/java/com/diagbot/dto/GetReviewerDTO.java
  15. 7 0
      src/main/java/com/diagbot/dto/MsgDTO.java
  16. 196 0
      src/main/java/com/diagbot/entity/MedAppealExamineInfo.java
  17. 145 0
      src/main/java/com/diagbot/entity/MedAppealInfo.java
  18. 77 0
      src/main/java/com/diagbot/entity/WorkFlowInfo.java
  19. 44 0
      src/main/java/com/diagbot/enums/AppealOperationTypeEnum.java
  20. 44 0
      src/main/java/com/diagbot/enums/ExampleOperationEnum.java
  21. 43 0
      src/main/java/com/diagbot/enums/ExampleStatusEnum.java
  22. 43 0
      src/main/java/com/diagbot/enums/WorkFlowNodeEnum.java
  23. 102 76
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  24. 245 0
      src/main/java/com/diagbot/facade/MedAppealExamineInfoManagementFacade.java
  25. 18 0
      src/main/java/com/diagbot/facade/MedAppealInfoManagementFacade.java
  26. 5 0
      src/main/java/com/diagbot/facade/MedCheckInfoFacade.java
  27. 24 2
      src/main/java/com/diagbot/facade/RecordCheckFacade.java
  28. 27 0
      src/main/java/com/diagbot/facade/SysDictionaryFacade.java
  29. 16 0
      src/main/java/com/diagbot/mapper/MedAppealExamineInfoMapper.java
  30. 16 0
      src/main/java/com/diagbot/mapper/MedAppealInfoMapper.java
  31. 16 0
      src/main/java/com/diagbot/service/MedAppealExamineInfoService.java
  32. 16 0
      src/main/java/com/diagbot/service/MedAppealInfoService.java
  33. 20 0
      src/main/java/com/diagbot/service/impl/MedAppealExamineInfoServiceImpl.java
  34. 20 0
      src/main/java/com/diagbot/service/impl/MedAppealInfoServiceImpl.java
  35. 88 0
      src/main/java/com/diagbot/vo/AddAppealInfoApiVO.java
  36. 86 0
      src/main/java/com/diagbot/vo/AddAppealInfoVO.java
  37. 72 0
      src/main/java/com/diagbot/vo/ApprovedVo.java
  38. 19 0
      src/main/java/com/diagbot/vo/CancelAppealInfoVO.java
  39. 39 0
      src/main/java/com/diagbot/vo/GetAppealInfoVO.java
  40. 25 0
      src/main/java/com/diagbot/vo/GetAppealOperationTypeVO.java
  41. 52 0
      src/main/java/com/diagbot/vo/GetAppealReviewVO.java
  42. 21 0
      src/main/java/com/diagbot/vo/GetApprovedViewVO.java
  43. 15 0
      src/main/java/com/diagbot/vo/GetAuditNumberVO.java
  44. 55 0
      src/main/java/com/diagbot/vo/GetComplaintRecordVO.java
  45. 3 0
      src/main/java/com/diagbot/vo/GetDetailVO.java
  46. 22 0
      src/main/java/com/diagbot/vo/GetReviewerApiVO.java
  47. 19 0
      src/main/java/com/diagbot/vo/GetReviewerVO.java
  48. 18 0
      src/main/java/com/diagbot/vo/MedAppealInfoVO.java
  49. 37 0
      src/main/java/com/diagbot/vo/RejectedVo.java
  50. 168 0
      src/main/java/com/diagbot/web/MedAppealExamineInfoController.java
  51. 152 0
      src/main/java/com/diagbot/web/MedAppealInfoController.java
  52. 5 1
      src/main/resources/application-dev.yml
  53. 5 1
      src/main/resources/application-local.yml
  54. 2 0
      src/main/resources/application-pre.yml
  55. 2 0
      src/main/resources/application-pro.yml
  56. 2 0
      src/main/resources/application-test.yml
  57. 49 13
      src/main/resources/mapper/BehospitalInfoMapper.xml
  58. 22 0
      src/main/resources/mapper/MedAppealExamineInfoMapper.xml
  59. 34 0
      src/main/resources/mapper/MedAppealInfoMapper.xml

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

@@ -0,0 +1,205 @@
+
+use `qc`;
+-- 执行前请看注意事项!
+-- 申诉驳回相关配置
+-- 注意
+
+
+/**
+med_appeal_info 申诉记录表
+ */
+DROP TABLE IF EXISTS `med_appeal_info`;
+CREATE TABLE `med_appeal_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `behospital_code` varchar(16) NOT NULL COMMENT '病人住院ID',
+  `qcresult_detail_id` bigint(20) DEFAULT NULL COMMENT '质控缺陷id',
+  `qcresult_detail_msg` varchar(255) DEFAULT NULL COMMENT '缺陷详情',
+  `qcresult_detai_value` decimal(5,1) DEFAULT NULL COMMENT '缺陷扣分分值',
+  `cases_score` decimal(5,1) DEFAULT NULL COMMENT '模块总分',
+  `is_reject` int(3) DEFAULT '0' COMMENT '单项否决(1-单项否决 0-非)',
+  `cases_entry_id` bigint(20) DEFAULT NULL COMMENT '条目ID',
+  `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 '模块名称',
+  `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 '申诉说明',
+  `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:删除',
+  `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(60) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='申诉记录表';
+
+/**
+med_appeal_examine_info 申诉审批表
+ */
+DROP TABLE IF EXISTS `med_appeal_examine_info`;
+CREATE TABLE `med_appeal_examine_info` (
+  `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '申诉审批id',
+  `appeal_info_id` bigint(11) NOT NULL COMMENT '申诉id',
+  `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 '驳回理由',
+  `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 '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COMMENT='申诉审批表';
+
+
+/**
+med_work_flow_info 流程表
+ */
+DROP TABLE IF EXISTS `med_work_flow_info`;
+CREATE TABLE `med_work_flow_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `work_flow_name` varchar(60) NOT 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 '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='流程表';
+
+SET @hospitalid ='35';
+INSERT INTO `med_work_flow_info` (`hospital_id`, `work_flow_name`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `remark`) VALUES ( @hospitalid, '湘雅申诉审核流程', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '');
+
+/**
+med_work_flow_link 流程线表
+ */
+DROP TABLE IF EXISTS `med_work_flow_link`;
+CREATE TABLE `med_work_flow_link` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `work_flow_id` bigint(20) NOT NULL COMMENT '流程id',
+  `work_flow_link_id` bigint(20) NOT NULL COMMENT '工作流id',
+  `work_link_now_node` bigint(20) NOT NULL COMMENT '当前节点id',
+  `work_link_condition` varchar(60) DEFAULT NULL COMMENT '流程条件(流程线分叉,下一结点判断条件)',
+  `work_link_next_node` bigint(20) NOT NULL COMMENT '下一节点id 0:表示结束',
+  `work_link_name` varchar(60) NOT NULL COMMENT '流程线内容',
+  `work_link_status` varchar(60) NOT 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 '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='流程线表';
+
+set @workflowid:= (SELECT id FROM `med_work_flow_info` where `work_flow_name`='湘雅申诉审核流程' and `hospital_id`= @hospitalid );
+INSERT INTO `med_work_flow_link` (`work_flow_id`, `work_flow_link_id`, `work_link_now_node`, `work_link_condition`, `work_link_next_node`, `work_link_name`, `work_link_status`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `remark`) VALUES (@workflowid, '1', '0', NULL, '1', '申诉人员向审核员发起申诉', '申诉', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '');
+INSERT INTO `med_work_flow_link` (`work_flow_id`, `work_flow_link_id`, `work_link_now_node`, `work_link_condition`, `work_link_next_node`, `work_link_name`, `work_link_status`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `remark`) VALUES (@workflowid, '2', '1', NULL, '2', '申诉人员撤回申诉', '申诉', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '');
+INSERT INTO `med_work_flow_link` (`work_flow_id`, `work_flow_link_id`, `work_link_now_node`, `work_link_condition`, `work_link_next_node`, `work_link_name`, `work_link_status`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `remark`) VALUES (@workflowid, '3', '1', NULL, '3', '科室审核员审核', '审核', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '');
+
+
+/**
+med_work_flow_node 流程节点表
+ */
+DROP TABLE IF EXISTS `med_work_flow_node`;
+CREATE TABLE `med_work_flow_node` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `work_flow_id` bigint(20) NOT NULL COMMENT '流程id',
+  `work_flow_node_id` bigint(20) NOT NULL COMMENT '工作节点id',
+  `work_node_name` varchar(60) NOT 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 '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='流程节点表';
+
+INSERT INTO `med_work_flow_node` (`work_flow_id`,`work_flow_node_id`, `work_node_name`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `remark`) VALUES (@workflowid, '1', '申诉', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '');
+INSERT INTO `med_work_flow_node` (`work_flow_id`,`work_flow_node_id`, `work_node_name`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `remark`) VALUES (@workflowid, '2', '撤销申诉', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '');
+INSERT INTO `med_work_flow_node` (`work_flow_id`,`work_flow_node_id`, `work_node_name`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `remark`) VALUES (@workflowid, '3', '科室审核', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '');
+
+
+/**
+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', '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', '状态');
+
+
+/**
+sys_hospital_set 系统配置表
+ */
+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, '核查按钮是否关联申诉流程', 'check_appeal_relation', '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, '核查操作是否与申诉状态关联配置', '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', '审核人是否可以是自己开关');
+
+
+/**
+sys_role 系统角色表
+ */
+INSERT INTO `sys_role` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `roleLevel`, `descritpion`, `menuItems`, `remark`) VALUES ('10', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '申诉审核员', '0', '', '', NULL);
+
+/**
+sys_menu 菜单表
+ */
+INSERT INTO `qc`.`sys_menu` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ('100', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '申诉信息', '-1', 'YH-SSXX', '1', '1', '14', '用户-申诉信息');
+INSERT INTO `qc`.`sys_menu` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ('101', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '申诉记录', '100', 'YH-SSXX-SSJL', '1', '1', '1', '用户-申诉信息-申诉记录');
+INSERT INTO `qc`.`sys_menu` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ('102', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '申诉审核', '100', 'YH-SSXX-SSSH', '1', '1', '2', '用户-申诉信息-申诉审核');
+INSERT INTO `qc`.`sys_menu` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ('103', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '申诉发起', '100', 'YH-SSXX-SSFQ', '1', '1', '3', '用户-申诉信息-申诉发起');
+
+
+/**
+sys_permission 系统资源表
+ */
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('166', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '查看', 'FUNC000166', '/qc/appealInfo/getAppealInfo', 'ALL', '查看', '用户-申诉信息-申诉记录-查看');
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('167', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '撤回', 'FUNC000167', '/qc/appealInfo/cancelAppealInfo', 'ALL', '撤回', '用户-申诉信息-申诉记录-撤回');
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('168', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '再次申诉', 'FUNC000168', '/qc/appealInfo/addAppealInfo', 'ALL', '再次申诉', '用户-申诉信息-申诉记录-再次申诉');
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('169', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '查看', 'FUNC000169', '/qc/appealExamineInfo/getApprovedView', 'ALL', '查看', '用户-申诉信息-申诉审核-查看');
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('170', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '缺陷申诉', 'FUNC000170', '/qc/appealInfo/addAppealInfo', 'ALL', '缺陷申诉', '用户-申诉信息-申诉发起-缺陷申诉');
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('171', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '新增缺陷申', 'FUNC000171', '/qc/appealInfo/addAppealInfo', 'ALL', '新增缺陷申', '用户-申诉信息-申诉发起-新增缺陷申诉');
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('172', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '撤回申诉', 'FUNC000172', '/qc/appealInfo/cancelAppealInfo', 'ALL', '撤回申诉', '用户-申诉信息-申诉发起-撤回申诉');
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('173', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '审核通过', 'FUNC000173', '/qc/appealExamineInfo/approved', 'ALL', '\r\n审核通过', '用户-申诉信息-申诉审核-审核通过');
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('174', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '驳回', 'FUNC000174', '/qc/appealExamineInfo/rejected', 'ALL', '驳回', '用户-申诉信息-申诉审核-驳回');
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('175', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '病案详情查看', 'FUNC000014', '/qc/behospitalInfo/getByBehospitalCode', 'ALL', '用户-申诉信息-申诉记录-病案详情查看', '无需加密');
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('176', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '病案详情查看', 'FUNC000014', '/qc/behospitalInfo/getByBehospitalCode', 'ALL', '用户-申诉信息-申诉审核-病案详情查看', '无需加密');
+
+
+/**
+sys_menu_permission 系统资源表
+ */
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '101', '166', NULL, '用户-申诉信息-申诉记录-查看');
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '101', '167', NULL, '用户-申诉信息-申诉记录-撤回');
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '101', '168', NULL, '用户-申诉信息-申诉记录-再次申诉');
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '101', '166', NULL, '用户-申诉信息-申诉审核-查看');
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '103', '170', NULL, '用户-申诉信息-申诉发起-缺陷申诉');
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '103', '171', NULL, '用户-申诉信息-申诉发起-新增缺陷申诉');
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '103', '172', NULL, '用户-申诉信息-申诉发起-撤回申诉');
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '102', '173', NULL, '用户-申诉信息-申诉审核-审核通过');
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '102', '174', NULL, '用户-申诉信息-申诉审核-驳回');
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '102', '169', NULL, '用户-申诉信息-申诉审核-查看');
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '101', '175', NULL, '用户-申诉信息-申诉记录-病案详情查看');
+INSERT INTO `qc`.`sys_menu_permission` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `menu_id`, `permission_id`, `order_nu`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '102', '176', NULL, '用户-申诉信息-申诉审核-病案详情查看');

+ 73 - 0
src/main/java/com/diagbot/client/MedAppealExamineInfoServiceClient.java

@@ -0,0 +1,73 @@
+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 org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+
+
+/**
+ * @description: 申诉功能远程调用
+ * @author: zhoutg
+ * @date: 2020/4/13 18:28
+ */
+@FeignClient(name = "gateway-service", url = "${appeal.address}", fallback = MedAppealExamineInfoServiceHystrix.class)
+public interface MedAppealExamineInfoServiceClient {
+    /**
+     * 获取申诉记录
+     * @param getComplaintRecordVO
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getComplaintRecord")
+    RespDTO<Page<GetComplaintRecordDTO>> getComplaintRecord(@RequestBody GetComplaintRecordVO getComplaintRecordVO);
+
+    /**
+     * 获取申诉审核列表
+     * @param getAppealReviewVO
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getAppealReview")
+    RespDTO<Page<GetAppealReviewDTO>> getAppealReview(@RequestBody GetAppealReviewVO getAppealReviewVO);
+
+
+    /**
+     *审核通过
+     * @param approvedVo
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/approved")
+    RespDTO<Boolean> approved(@RequestBody ApprovedVo approvedVo);
+
+    /**
+     *驳回
+     * @param rejectedVo
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/rejected")
+    RespDTO<Boolean> rejected(@RequestBody RejectedVo rejectedVo);
+
+    /**
+     *审核查看
+     * @param getAppealInfoVO
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getApprovedView")
+    RespDTO<GetAppealInfoDTO> getApprovedView(@RequestBody GetAppealInfoVO getAppealInfoVO);
+
+    /**
+     *待审核数量
+     * @param getAuditNumberVO
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getAuditNumber")
+    RespDTO<Integer> getAuditNumber(@RequestBody GetAuditNumberVO getAuditNumberVO);
+
+
+}
+
+
+

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

@@ -0,0 +1,52 @@
+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 org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @description: 申诉功能远程调用
+ * @author: zhoutg
+ * @date: 2020/4/13 18:28
+ */
+@FeignClient(name = "gateway-service", url = "${appeal.address}", fallback = MedAppealInfoServiceHystrix.class)
+public interface MedAppealInfoServiceClient {
+
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/addAppealInfo")
+    RespDTO<Boolean> addAppealInfo(@RequestBody @Valid AddAppealInfoVO addAppealInfoVO);
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/getReviewer")
+    RespDTO<List<GetReviewerDTO>> getReviewer(@RequestBody GetReviewerVO getReviewerVO);
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/getAppealOperationType")
+    RespDTO<Map<String, String>> getAppealOperationType(@RequestBody @Valid GetAppealOperationTypeVO getAppealOperationTypeVO);
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/cancelAppealInfo")
+    RespDTO<Boolean> cancelAppealInfo(@RequestBody @Valid CancelAppealInfoVO cancelAppealInfoVO);
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/getAppealInfo")
+    RespDTO<GetAppealInfoDTO> getAppealInfo(@RequestBody GetAppealInfoVO getAppealInfoVO);
+
+
+}
+
+
+

+ 56 - 0
src/main/java/com/diagbot/client/hystrix/MedAppealExamineInfoServiceHystrix.java

@@ -0,0 +1,56 @@
+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.vo.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
+/**
+ * @description: 申诉远程调用熔断器
+ * @author: zhoutg
+ * @date: 2020/4/13 18:23
+ */
+@Component
+@Slf4j
+public class MedAppealExamineInfoServiceHystrix implements MedAppealExamineInfoServiceClient {
+
+    @Override
+    public RespDTO<Page<GetComplaintRecordDTO>> getComplaintRecord(@RequestBody GetComplaintRecordVO getComplaintRecordVO) {
+        log.error("【hystrix】调用{}异常", "getComplaintRecord");
+        return null;
+    }
+
+    @Override
+    public RespDTO<Page<GetAppealReviewDTO>> getAppealReview(@RequestBody GetAppealReviewVO getAppealReviewVO) {
+        log.error("【hystrix】调用{}异常", "getAppealReview");
+        return null;
+    }
+
+
+    @Override
+    public RespDTO<Boolean> approved( @RequestBody ApprovedVo approvedVo) {
+        log.error("【hystrix】调用{}异常", "approved");
+        return null;
+    }
+
+    @Override
+    public RespDTO<Boolean> rejected( @RequestBody RejectedVo rejectedVo) {
+        log.error("【hystrix】调用{}异常", "rejected");
+        return null;
+    }
+    @Override
+    public RespDTO<GetAppealInfoDTO> getApprovedView( @RequestBody GetAppealInfoVO getAppealInfoVO) {
+        log.error("【hystrix】调用{}异常", "getApprovedView");
+        return null;
+    }
+    @Override
+    public RespDTO<Integer> getAuditNumber( @RequestBody GetAuditNumberVO getAuditNumberVO) {
+        log.error("【hystrix】调用{}异常", "getAuditNumberVO");
+        return null;
+    }
+
+}

+ 66 - 0
src/main/java/com/diagbot/client/hystrix/MedAppealInfoServiceHystrix.java

@@ -0,0 +1,66 @@
+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 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;
+
+/**
+ * @description: 申诉远程调用熔断器
+ * @author: zhoutg
+ * @date: 2020/4/13 18:23
+ */
+@Component
+@Slf4j
+public class MedAppealInfoServiceHystrix implements MedAppealInfoServiceClient {
+
+    @Override
+    public RespDTO<Boolean> addAppealInfo(@Valid AddAppealInfoVO addAppealInfoVO) {
+        log.error("【hystrix】调用{}异常", "addAppealInfo");
+        return null;
+    }
+
+    @Override
+    public RespDTO<List<GetReviewerDTO>> getReviewer(GetReviewerVO getReviewerVO) {
+        log.error("【hystrix】调用{}异常", "getReviewer");
+        return null;
+    }
+
+    @Override
+    public RespDTO<Map<String, String>> getAppealOperationType(@Valid GetAppealOperationTypeVO getAppealOperationTypeVO) {
+        log.error("【hystrix】调用{}异常", "getAppealOperationType");
+        return null;
+    }
+
+    @Override
+    public RespDTO<Boolean> cancelAppealInfo(@Valid CancelAppealInfoVO cancelAppealInfoVO) {
+        log.error("【hystrix】调用{}异常", "cancelAppealInfo");
+        return null;
+    }
+
+    @Override
+    public RespDTO<GetAppealInfoDTO> getAppealInfo(GetAppealInfoVO getAppealInfoVO) {
+        log.error("【hystrix】调用{}异常", "getAppealInfo");
+        return null;
+    }
+}

+ 21 - 26
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -194,32 +194,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/data/getColumnZhAndCh").permitAll()
                 .antMatchers("/qc/data/analyseRec").permitAll()
                 .antMatchers("/qc/data/hisDataDeal").permitAll()
-                .antMatchers("/qc/data_str/sendAdmissionNote").permitAll()
-                .antMatchers("/qc/data_str/sendBloodResult").permitAll()
-                .antMatchers("/qc/data_str/sendBloodTransfusion").permitAll()
-                .antMatchers("/qc/data_str/sendConsultationApply").permitAll()
-                .antMatchers("/qc/data_str/sendConsultationNote").permitAll()
-                .antMatchers("/qc/data_str/sendConsultationRecord").permitAll()
-                .antMatchers("/qc/data_str/sendConsultationResult").permitAll()
-                .antMatchers("/qc/data_str/sendCrisisNote").permitAll()
-                .antMatchers("/qc/data_str/sendDeathDiscussion").permitAll()
-                .antMatchers("/qc/data_str/sendDeathNote").permitAll()
-                .antMatchers("/qc/data_str/sendDifficultCase").permitAll()
-                .antMatchers("/qc/data_str/sendFirstRecord").permitAll()
-                .antMatchers("/qc/data_str/sendIllCritically").permitAll()
-                .antMatchers("/qc/data_str/sendIllSeriousl").permitAll()
-                .antMatchers("/qc/data_str/sendLeaveHospital").permitAll()
-                .antMatchers("/qc/data_str/sendOperativeFirstRecord").permitAll()
-                .antMatchers("/qc/data_str/sendOperativeNote").permitAll()
-                .antMatchers("/qc/data_str/sendWardRecord").permitAll()
-                .antMatchers("/qc/data_str/sendTransferOutNote").permitAll()
-                .antMatchers("/qc/data_str/sendTransferInNote").permitAll()
-                .antMatchers("/qc/data_str/sendRescueNote").permitAll()
-                .antMatchers("/qc/data_str/sendPeriodConclusion").permitAll()
-                .antMatchers("/qc/data_str/sendPreoperativeDiscussion").permitAll()
-                .antMatchers("/qc/data_str/sendTalkInform").permitAll()
-                .antMatchers("/qc/data_str/sendInformedConsent").permitAll()
-                .antMatchers("/qc/data_str/sendContent").permitAll()
+                .antMatchers("/qc/data_str/*").permitAll()
                 .antMatchers("/qc/doctoradvice/getPage").permitAll()
                 .antMatchers("/qc/medPacsInfo/getCheckPage").permitAll()
                 .antMatchers("/qc/medLisInfo/getExaminePage").permitAll()
@@ -289,6 +264,26 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/analysisDept/getEntryDefectImproveByDeptExport").permitAll()
                 .antMatchers("/qc/analysisDept/getEntryDefectImproveInnerDept").permitAll()
                 .antMatchers("/qc/analysisDept/getDefectImproveInnerByDeptExport").permitAll()
+                .antMatchers("/qc/appealExamineInfo/getComplaintRecord").permitAll()
+                .antMatchers("/qc/appealExamineInfo/getAppealReview").permitAll()
+                .antMatchers("/qc/appealExamineInfo/approved").permitAll()
+                .antMatchers("/qc/appealExamineInfo/rejected").permitAll()
+                .antMatchers("/qc/appealExamineInfo/getApprovedView").permitAll()
+                .antMatchers("/qc/appealExamineInfo/getAppealReviewDictionary").permitAll()
+                .antMatchers("/qc/appealExamineInfo/getAuditNumber").permitAll()
+                .antMatchers("/qc/appealExamineInfo/getAppealReviewExport").permitAll()
+                .antMatchers("/qc/appealExamineInfo/getComplaintRecordExport").permitAll()
+                .antMatchers("/qc/appealInfo/addAppealInfo").permitAll()
+                .antMatchers("/qc/appealInfo/addAppealInfoApi").permitAll()
+                .antMatchers("/qc/appealInfo/getReviewer").permitAll()
+                .antMatchers("/qc/appealInfo/getReviewerApi").permitAll()
+                .antMatchers("/qc/behospitalInfo/addCase").permitAll()
+                .antMatchers("/qc/appealInfo/delCase").permitAll()
+                .antMatchers("/qc/appealInfo/logicDelCase").permitAll()
+                .antMatchers("/qc/appealInfo/updCase").permitAll()
+                .antMatchers("/qc/appealInfo/getAppealOperationType").permitAll()
+                .antMatchers("/qc/appealInfo/cancelAppealInfo").permitAll()
+                .antMatchers("/qc/appealInfo/getAppealInfo").permitAll()
                 .antMatchers("/**").authenticated();
         //                .antMatchers("/**").permitAll();
     }

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

@@ -341,6 +341,26 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/qc/analysisDept/getEntryDefectImproveByDeptExport", request)
                 || matchers("/qc/analysisDept/getEntryDefectImproveInnerDept", request)
                 || matchers("/qc/analysisDept/getDefectImproveInnerByDeptExport", request)
+                || matchers("/qc/appealExamineInfo/getComplaintRecord", request)
+                || matchers("/qc/appealExamineInfo/getAppealReview", request)
+                || matchers("/qc/appealExamineInfo/approved", request)
+                || matchers("/qc/appealExamineInfo/rejected", request)
+                || matchers("/qc/appealExamineInfo/getApprovedView", request)
+                || matchers("/qc/appealExamineInfo/getAppealReviewDictionary", request)
+                || matchers("/qc/appealExamineInfo/getAuditNumber", request)
+                || matchers("/qc/appealExamineInfo/getAppealReviewExport", request)
+                || matchers("/qc/appealExamineInfo/getComplaintRecordExport", request)
+                || matchers("/qc/appealInfo/addAppealInfo", request)
+                || matchers("/qc/appealInfo/addAppealInfoApi", request)
+                || matchers("/qc/appealInfo/getReviewer", request)
+                || matchers("/qc/appealInfo/getReviewerApi", request)
+                || matchers("/qc/behospitalInfo/addCase", request)
+                || matchers("/qc/behospitalInfo/delCase", request)
+                || matchers("/qc/behospitalInfo/logicDelCase", request)
+                || matchers("/qc/behospitalInfo/updCase", request)
+                || matchers("/qc/appealInfo/getAppealOperationType", request)
+                || matchers("/qc/appealInfo/cancelAppealInfo", request)
+                || matchers("/qc/appealInfo/getAppealInfo", request)
                 || matchers("/", request)) {
             return true;
         }

+ 83 - 0
src/main/java/com/diagbot/dto/AppealExamineRecordDTO.java

@@ -0,0 +1,83 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description: 申诉审核记录对象
+ * @Author songxl
+ */
+@Data
+public class AppealExamineRecordDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "申诉id")
+    private Long id;
+
+    @ApiModelProperty(value = "条目ID")
+    private Long casesEntryId;
+
+    @ApiModelProperty(value = "质控条目(新增已有操作才有值)")
+    private String casesEntryName;
+
+    @ApiModelProperty(value = "申诉-提示信息(新增已有操作才有值)")
+    private String casesEntryMsg;
+
+    @ApiModelProperty(value = "申诉-分值(新增已有操作才有值)")
+    private BigDecimal value;
+
+    @ApiModelProperty(value = "申诉人id")
+    private String claimantId;
+
+    @ApiModelProperty(value = "申诉类型(0:医生申诉|1:质控申诉)")
+    private String appealType;
+
+    @ApiModelProperty(value = "申诉操作类型(0:删改|1:新增已有|2:新增缺失|3:恢复)")
+    private String appealOperationType;
+
+    @ApiModelProperty(value = "申诉说明")
+    private String appealExplain;
+
+    @ApiModelProperty(value = "审核人id")
+    private Long checkId;
+
+    @ApiModelProperty(value = "申诉备注")
+    private String appealRemark;
+
+    @ApiModelProperty(value = "审核状态:1:驳回|2:通过")
+    private String exampleStatus;
+
+    @ApiModelProperty(value = "审核处理方式: 1:修改|2:删除|3:新增已有|4:新增缺失|5:恢复")
+    private String exampleOperation;
+
+    @ApiModelProperty(value = "处理结果")
+    private String processResult;
+
+    @ApiModelProperty(value = "驳回理由")
+    private String rejectReason;
+
+    @ApiModelProperty(value = "审核备注")
+    private String exampleRemark;
+
+    @ApiModelProperty(value = "申诉人姓名")
+    private String claimantName;
+
+    @ApiModelProperty(value = "审核人姓名")
+    private String checkName;
+
+    @ApiModelProperty(value = "申诉时间")
+    private Date appealCreateDate;
+
+    @ApiModelProperty(value = "审核时间")
+    private Date appealExamineDate;
+
+    @ApiModelProperty(value = "审核-提示信息")
+    private String msg;
+
+    @ApiModelProperty(value = "审核-分值")
+    private BigDecimal score;
+}

+ 59 - 0
src/main/java/com/diagbot/dto/ExportGetAppealReviewDTO.java

@@ -0,0 +1,59 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 审核excle
+ *
+ * @Description:
+ * @author: cy
+ * @time: 2020/9/4 14:59
+ */
+@Getter
+@Setter
+public class ExportGetAppealReviewDTO {
+
+    @Excel(name = "申述id", needMerge = true)
+    private Long id;
+
+    @Excel(name = "申述人", needMerge = true)
+    private String claimantName;
+
+    @Excel(name = "所属科室", needMerge = true)
+    private String behDeptName;
+
+    @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 qcresultDetailMsg;
+
+    @ApiModelProperty(value = "审核人")
+    @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"})
+    private String appealOperationType;
+
+    @Excel(name = "状态", needMerge = true, replace = {"待审核_0","已驳回_1","审核通过_2"})
+    private String exampleStatus;
+
+}

+ 58 - 0
src/main/java/com/diagbot/dto/ExportGetComplaintRecordDTO.java

@@ -0,0 +1,58 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 申述记录excle
+ * @Description:
+ * @author: cy
+ * @time: 2020/9/4 14:59
+ */
+@Getter
+@Setter
+public class ExportGetComplaintRecordDTO {
+
+    @Excel(name = "申述id", needMerge = true)
+    private Long id;
+
+    @Excel(name = "申述人", needMerge = true)
+    private String claimantName;
+
+    @Excel(name = "所属科室", needMerge = true)
+    private String behDeptName;
+
+    @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 qcresultDetailMsg;
+
+    @ApiModelProperty(value = "审核人")
+    @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"})
+    private String appealOperationType;
+
+    @Excel(name = "状态", needMerge = true, replace = {"待审核_0","已驳回_1","审核通过_2"})
+    private String exampleStatus;
+}

+ 72 - 0
src/main/java/com/diagbot/dto/GetAppealInfoDTO.java

@@ -0,0 +1,72 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 申诉审核内容对象
+ * @Author songxl
+ */
+@Data
+public class GetAppealInfoDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "医院ID")
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "病人住院ID")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "姓名")
+    private String name;
+
+    @ApiModelProperty(value = "性别(男,女)")
+    private String sex;
+
+    @ApiModelProperty(value = "年龄")
+    private String age;
+
+    @ApiModelProperty(value = "住院科室ID")
+    private String deptId;
+
+    @ApiModelProperty(value = "住院科室名称")
+    private String deptName;
+
+    @ApiModelProperty(value = "主管医生ID")
+    private String doctorId;
+
+    @ApiModelProperty(value = "主管医生ID")
+    private String doctorName;
+
+    @ApiModelProperty(value = "入院时间")
+    private Date behospitalDate;
+
+    @ApiModelProperty(value = "出院时间")
+    private Date leaveHospitalDate;
+
+    @ApiModelProperty(value = "申诉模块id")
+    private Long casesId;
+
+    @ApiModelProperty(value = "模块名称")
+    private String casesName;
+
+    @ApiModelProperty(value = "病历内容")
+    private String defectContent;
+
+    @ApiModelProperty(value = "质控缺陷id")
+    private Long qcresultDetailId;
+
+    @ApiModelProperty(value = "缺陷详情")
+    private String qcresultDetailMsg;
+
+    @ApiModelProperty(value = "缺陷扣分分值")
+    private BigDecimal qcresultDetaiValue;
+
+    @ApiModelProperty(value = "申诉审核记录")
+    private List<AppealExamineRecordDTO> appealExamineRecordDTOList;
+}

+ 67 - 0
src/main/java/com/diagbot/dto/GetAppealReviewDTO.java

@@ -0,0 +1,67 @@
+package com.diagbot.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 审核
+ * @Description:
+ * @author: cy
+ * @time: 2020/9/4 14:59
+ */
+@Getter
+@Setter
+public class GetAppealReviewDTO {
+
+    @ApiModelProperty(value = "申述id")
+    private Long id;
+
+    @ApiModelProperty(value = "申述人")
+    private String claimantName;
+
+    @ApiModelProperty(value = "所属科室")
+    private String behDeptName;
+
+    @ApiModelProperty(value = "医院id")
+    private String hospitalId;
+
+    @ApiModelProperty(value = "缺陷详情id")
+    private String qcresultDetailId;
+
+    @ApiModelProperty(value = "条目ID")
+    private String casesEntryId;
+
+    @ApiModelProperty(value = "申述申诉时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date claimantGmtCreate;
+
+    @ApiModelProperty(value = "病人住院序号")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "患者姓名")
+    private String name;
+
+    @ApiModelProperty(value = "申述模块")
+    private String casesName;
+
+    @ApiModelProperty(value = "缺陷详情")
+    private String qcresultDetailMsg;
+
+    @ApiModelProperty(value = "审核人")
+    private String checkName;
+
+    @ApiModelProperty(value = "审核时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date checkGmtCreate;
+
+    @ApiModelProperty(value = "操作类型")
+    private String appealOperationType;
+
+    @ApiModelProperty(value = "状态")
+    private String exampleStatus;
+
+}

+ 70 - 0
src/main/java/com/diagbot/dto/GetComplaintRecordDTO.java

@@ -0,0 +1,70 @@
+package com.diagbot.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 申述记录
+ * @Description:
+ * @author: cy
+ * @time: 2020/9/4 14:59
+ */
+@Getter
+@Setter
+public class GetComplaintRecordDTO {
+
+    @ApiModelProperty(value = "申述id")
+    private Long id;
+
+    @ApiModelProperty(value = "申述人")
+    private String claimantName;
+
+    @ApiModelProperty(value = "所属科室")
+    private String behDeptName;
+
+    @ApiModelProperty(value = "申述申诉时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date claimantGmtCreate;
+
+    @ApiModelProperty(value = "病人住院序号")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "医院id")
+    private String hospitalId;
+
+    @ApiModelProperty(value = "缺陷详情id")
+    private String qcresultDetailId;
+
+    @ApiModelProperty(value = "条目ID")
+    private String casesEntryId;
+
+    @ApiModelProperty(value = "患者姓名")
+    private String name;
+
+    @ApiModelProperty(value = "申述模块")
+    private String casesName;
+
+    @ApiModelProperty(value = "缺陷详情")
+    private String qcresultDetailMsg;
+
+    @ApiModelProperty(value = "审核人")
+    private String checkName;
+
+    @ApiModelProperty(value = "审核时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date checkGmtCreate;
+
+    @ApiModelProperty(value = "操作类型")
+    private String appealOperationType;
+
+    @ApiModelProperty(value = "状态")
+    private String exampleStatus;
+
+    @ApiModelProperty(value = "缺陷扣分分值")
+    private BigDecimal qcresultDetaiValue;
+}

+ 22 - 0
src/main/java/com/diagbot/dto/GetReviewerDTO.java

@@ -0,0 +1,22 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 审核人对象
+ * @Author songxl
+ */
+@Data
+public class GetReviewerDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "审核人ID")
+    private Long id;
+
+    @ApiModelProperty(value = "审核人姓名")
+    private String userName;
+
+}

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

@@ -1,5 +1,6 @@
 package com.diagbot.dto;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -62,4 +63,10 @@ public class MsgDTO {
     private String explainInfo;
     // 条目id对应页面数据的key值
     private List<Long> pageKeyList = new ArrayList<>();
+
+    @ApiModelProperty("申诉条目id")
+    private Long appealInfoId;
+
+    @ApiModelProperty("审核状态 0:待审核|1:驳回|2:通过")
+    private String exampleStatus;
 }

+ 196 - 0
src/main/java/com/diagbot/entity/MedAppealExamineInfo.java

@@ -0,0 +1,196 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 申诉审批表
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2022-01-20
+ */
+public class MedAppealExamineInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 申诉审批id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 申诉id
+     */
+    private Long appealInfoId;
+
+    /**
+     * 审核人id
+     */
+    private Long checkId;
+
+    /**
+     * 审核状态:1:驳回|2:通过
+     */
+    private String exampleStatus;
+
+    /**
+     * 审核处理方式: 1:修改|2:删除|3:新增已有|4:新增缺失|5:恢复
+     */
+    private String exampleOperation;
+
+    /**
+     * 处理结果
+     */
+    private String processResult;
+
+    /**
+     * 驳回理由
+     */
+    private String rejectReason;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private LocalDateTime gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private LocalDateTime gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    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 +
+        "}";
+    }
+}

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

@@ -0,0 +1,145 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 申诉记录表
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2022-01-20
+ */
+@Data
+public class MedAppealInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 病人住院ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 质控缺陷id
+     */
+    private Long qcresultDetailId;
+
+    /**
+     * 缺陷详情
+     */
+    private String qcresultDetailMsg;
+
+    /**
+     * 缺陷扣分分值
+     */
+    private BigDecimal qcresultDetaiValue;
+
+    /**
+     * 条目ID
+     */
+    private Long casesEntryId;
+
+    /**
+     * 质控条目(新增已有操作才有值)
+     */
+    private String casesEntryName;
+
+    /**
+     * 提示信息(新增已有操作才有值)
+     */
+    private String casesEntryMsg;
+
+    /**
+     * 分值(新增已有操作才有值)
+     */
+    private BigDecimal value;
+
+    /**
+     * 申诉模块id
+     */
+    private Long modeId;
+
+    /**
+     * 模块名称
+     */
+    private String modeName;
+
+    /**
+     * 病历内容
+     */
+    private String defectContent;
+
+    /**
+     * 申诉人id
+     */
+    private String claimantId;
+
+    /**
+     * 申诉类型(0:医生申诉|1:质控申诉)
+     */
+    private String appealType;
+
+    /**
+     * 申诉操作类型(0:删改|1:新增已有|2:新增缺失|3:恢复)
+     */
+    private String appealOperationType;
+
+    /**
+     * 申诉说明
+     */
+    private String appealExplain;
+
+    /**
+     * 审核人id
+     */
+    private Long checkId;
+
+    /**
+     * 当前工作流节点id
+     */
+    private Long workFlowNodeId;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private LocalDateTime gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private LocalDateTime gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+}

+ 77 - 0
src/main/java/com/diagbot/entity/WorkFlowInfo.java

@@ -0,0 +1,77 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 流程表 实体类
+ * </p>
+ */
+@Data
+@TableName("med_work_flow_info")
+public class WorkFlowInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 医院ID
+     */
+    @TableField("hospital_id")
+    private Long hospitalId;
+
+    /**
+     * 流程名称
+     */
+    @TableField("work_flow_name")
+    private String workFlowName;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+}

+ 44 - 0
src/main/java/com/diagbot/enums/AppealOperationTypeEnum.java

@@ -0,0 +1,44 @@
+package com.diagbot.enums;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 工作流节点
+ * @author: gaodm
+ * @time: 2018/9/3 16:01
+ */
+public enum AppealOperationTypeEnum {
+
+    UP_OR_DEL("0", "删改"),
+    ADD_EXIST("1", "新增已有"),
+    ADD_NO_EXIST("2", "新增缺失"),
+    RECOVER("3", "恢复");
+
+    @Getter
+    @Setter
+    private String key;
+
+    @Getter
+    @Setter
+    private String name;
+
+    AppealOperationTypeEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static AppealOperationTypeEnum getEnum(String key) {
+        for (AppealOperationTypeEnum item : AppealOperationTypeEnum.values()) {
+            if (item.key.equals(key)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        AppealOperationTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+}

+ 44 - 0
src/main/java/com/diagbot/enums/ExampleOperationEnum.java

@@ -0,0 +1,44 @@
+package com.diagbot.enums;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 审核状态
+ * @author: gaodm
+ * @time: 2018/9/3 16:01
+ */
+public enum ExampleOperationEnum {
+    UP_OR_UP("1", "修改"),
+    UP_OR_DEL("2", "删除"),
+    ADD_EXIST("3", "新增已有"),
+    ADD_NO_EXIST("4", "新增缺失"),
+    RECOVER("5", "恢复");
+
+    @Getter
+    @Setter
+    private String key;
+
+    @Getter
+    @Setter
+    private String name;
+
+    ExampleOperationEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static ExampleOperationEnum getEnum(String key) {
+        for (ExampleOperationEnum item : ExampleOperationEnum.values()) {
+            if (item.key.equals(key)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        ExampleOperationEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+}

+ 43 - 0
src/main/java/com/diagbot/enums/ExampleStatusEnum.java

@@ -0,0 +1,43 @@
+package com.diagbot.enums;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 审核状态
+ * @author: gaodm
+ * @time: 2018/9/3 16:01
+ */
+public enum ExampleStatusEnum {
+
+    NOT_EXAMPLE("0", "待审核"),
+    REJECT_EXAMPLE("1", "驳回"),
+    ADOPT_EXAMPLE("2", "审核通过");
+
+    @Getter
+    @Setter
+    private String key;
+
+    @Getter
+    @Setter
+    private String name;
+
+    ExampleStatusEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static ExampleStatusEnum getEnum(String key) {
+        for (ExampleStatusEnum item : ExampleStatusEnum.values()) {
+            if (item.key.equals(key)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        ExampleStatusEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+}

+ 43 - 0
src/main/java/com/diagbot/enums/WorkFlowNodeEnum.java

@@ -0,0 +1,43 @@
+package com.diagbot.enums;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 工作流节点
+ * @author: gaodm
+ * @time: 2018/9/3 16:01
+ */
+public enum WorkFlowNodeEnum {
+
+    APPEAL("1", "申诉"),
+    APPEAL_BACK("2", "撤销申诉"),
+    DEPT_CHECK("3", "科室审核");
+
+    @Getter
+    @Setter
+    private String key;
+
+    @Getter
+    @Setter
+    private String name;
+
+    WorkFlowNodeEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static WorkFlowNodeEnum getEnum(String key) {
+        for (WorkFlowNodeEnum item : WorkFlowNodeEnum.values()) {
+            if (item.key.equals(key)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        WorkFlowNodeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+}

+ 102 - 76
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -260,82 +260,10 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 qcResultDTO.setMenuData("");
             }
             res.put("result", qcResultDTO);
-            //增加该病历是否核查状态
-            QueryWrapper<MedCheckInfo> medCheckInfoQuerys = new QueryWrapper<>();
-            medCheckInfoQuerys.eq("is_deleted", IsDeleteEnum.N.getKey());
-            medCheckInfoQuerys.eq("behospital_code", getDetailVO.getBehospitalCode());
-            medCheckInfoQuerys.eq("hospital_id", hospitalId);
-            medCheckInfoQuerys.in("check_type", 0, 2);
-            medCheckInfoQuerys.eq("status", 1);
-            int count = medCheckInfoFacade.count(medCheckInfoQuerys);
-            if (count > 0) {
-                res.put("checkStatus", 1);
-            } else {
-                res.put("checkStatus", 0);
-            }
-            //增加该病案首页是否核查状态
-            Map<String, Object> mapAllMr = new HashMap<String, Object>();
-            mapAllMr.put("is_deleted", IsDeleteEnum.N.getKey());
-            mapAllMr.put("behospital_code", getDetailVO.getBehospitalCode());
-            mapAllMr.put("hospital_id", hospitalId);
-            mapAllMr.put("check_type", 1);
-            QueryWrapper<MedCheckInfo> medCheckInfoMr = new QueryWrapper<>();
-            medCheckInfoMr.allEq(mapAllMr);
-            int countMr = medCheckInfoFacade.count(medCheckInfoMr);
-            if (countMr > 0) {
-                res.put("mrStatus", 1);
-            } else {
-                res.put("mrStatus", 0);
-            }
-            //新增如果当前用户不是核查人员返回标志位用户核查按钮、修改、删除、隐藏显示
-            //1.获取病历核查人员id,该操作只能是核查员操作
-            List<MedCheckInfo> medCheckInfos = medCheckInfoFacade.list(new QueryWrapper<MedCheckInfo>()
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("hospital_id", hospitalId)
-                    .eq("behospital_code", getDetailVO.getBehospitalCode()));
-            if (medCheckInfos.size() == 1 && medCheckInfos.get(0).getCheckId() != null
-                    && medCheckInfos.get(0).getCheckId().equals(Long.parseLong(SysUserUtils.getCurrentPrincipleID()))) {
-                //2.1获取核查类型,判断当前用户有没有对应核查类型的角色
-                int jobType = medCheckInfoFacade.list(new QueryWrapper<MedCheckInfo>()
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("behospital_code", getDetailVO.getBehospitalCode())
-                        .eq("hospital_id", hospitalId)
-                        .eq("check_id", SysUserUtils.getCurrentPrincipleID())).get(0).getJobType();
-                //2.2获取用户角色
-                List<Long> roleIds = sysUserRoleFacade.list(new QueryWrapper<SysUserRole>()
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("user_id", SysUserUtils.getCurrentPrincipleID())
-                ).stream().distinct().map(SysUserRole::getRoleId).collect(Collectors.toList());
-                switch (jobType) {
-                    case 0:
-                        if (roleIds.contains(CheckerRoleEnum.DEPT_GENERAL.getKey() * 1l)) {
-                            res.put("checkShow", 1);
-                        } else {
-                            res.put("checkShow", 0);
-                        }
-                        break;
-                    case 1:
-                        if (roleIds.contains(CheckerRoleEnum.QUAT_GENERAL.getKey() * 1l)) {
-                            res.put("checkShow", 1);
-                        } else {
-                            res.put("checkShow", 0);
-                        }
-                        break;
-                    case 2:
-                        if (roleIds.contains(CheckerRoleEnum.HOSP_GENERAL.getKey() * 1l)) {
-                            res.put("checkShow", 1);
-                        } else {
-                            res.put("checkShow", 0);
-                        }
-                        break;
-                    default:
-                        res.put("checkShow", 0);
-                        break;
-                }
-
-            } else {
-                res.put("checkShow", 0);
-            }
+            //通过页面类型显示不同操作按钮
+            showButtonByPageType(hospitalId,getDetailVO,res);
+            //添加核查操作是否与申诉状态关联配置
+            res.put("checkOperationWithAppeal",sysHospitalSetFacade.getValue(hospitalId,"check_operation_with_appeal"));
         }
 
         // 获取提示信息
@@ -382,6 +310,104 @@ 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 appealButtonShow(Long hospitalId, GetDetailVO getDetailVO, Map<String, Object> res) {
+        res.put("appealShow", 1);
+    }
+
+    private void checkButtonShow(Long hospitalId, GetDetailVO getDetailVO, Map<String, Object> res) {
+        //增加该病历是否核查状态
+        QueryWrapper<MedCheckInfo> medCheckInfoQuerys = new QueryWrapper<>();
+        medCheckInfoQuerys.eq("is_deleted", IsDeleteEnum.N.getKey());
+        medCheckInfoQuerys.eq("behospital_code", getDetailVO.getBehospitalCode());
+        medCheckInfoQuerys.eq("hospital_id", hospitalId);
+        medCheckInfoQuerys.in("check_type", 0, 2);
+        medCheckInfoQuerys.eq("status", 1);
+        int count = medCheckInfoFacade.count(medCheckInfoQuerys);
+        if (count > 0) {
+            res.put("checkStatus", 1);
+        } else {
+            res.put("checkStatus", 0);
+        }
+        //增加该病案首页是否核查状态
+        Map<String, Object> mapAllMr = new HashMap<String, Object>();
+        mapAllMr.put("is_deleted", IsDeleteEnum.N.getKey());
+        mapAllMr.put("behospital_code", getDetailVO.getBehospitalCode());
+        mapAllMr.put("hospital_id", hospitalId);
+        mapAllMr.put("check_type", 1);
+        QueryWrapper<MedCheckInfo> medCheckInfoMr = new QueryWrapper<>();
+        medCheckInfoMr.allEq(mapAllMr);
+        int countMr = medCheckInfoFacade.count(medCheckInfoMr);
+        if (countMr > 0) {
+            res.put("mrStatus", 1);
+        } else {
+            res.put("mrStatus", 0);
+        }
+        //新增如果当前用户不是核查人员返回标志位用户核查按钮、修改、删除、隐藏显示
+        //1.获取病历核查人员id,该操作只能是核查员操作
+        List<MedCheckInfo> medCheckInfos = medCheckInfoFacade.list(new QueryWrapper<MedCheckInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", hospitalId)
+                .eq("behospital_code", getDetailVO.getBehospitalCode()));
+        if (medCheckInfos.size() == 1 && medCheckInfos.get(0).getCheckId() != null
+                && medCheckInfos.get(0).getCheckId().equals(Long.parseLong(SysUserUtils.getCurrentPrincipleID()))) {
+            //2.1获取核查类型,判断当前用户有没有对应核查类型的角色
+            int jobType = medCheckInfoFacade.list(new QueryWrapper<MedCheckInfo>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("behospital_code", getDetailVO.getBehospitalCode())
+                    .eq("hospital_id", hospitalId)
+                    .eq("check_id", SysUserUtils.getCurrentPrincipleID())).get(0).getJobType();
+            //2.2获取用户角色
+            List<Long> roleIds = sysUserRoleFacade.list(new QueryWrapper<SysUserRole>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("user_id", SysUserUtils.getCurrentPrincipleID())
+            ).stream().distinct().map(SysUserRole::getRoleId).collect(Collectors.toList());
+            switch (jobType) {
+                case 0:
+                    if (roleIds.contains(CheckerRoleEnum.DEPT_GENERAL.getKey() * 1l)) {
+                        res.put("checkShow", 1);
+                    } else {
+                        res.put("checkShow", 0);
+                    }
+                    break;
+                case 1:
+                    if (roleIds.contains(CheckerRoleEnum.QUAT_GENERAL.getKey() * 1l)) {
+                        res.put("checkShow", 1);
+                    } else {
+                        res.put("checkShow", 0);
+                    }
+                    break;
+                case 2:
+                    if (roleIds.contains(CheckerRoleEnum.HOSP_GENERAL.getKey() * 1l)) {
+                        res.put("checkShow", 1);
+                    } else {
+                        res.put("checkShow", 0);
+                    }
+                    break;
+                default:
+                    res.put("checkShow", 0);
+                    break;
+            }
+
+        } else {
+            res.put("checkShow", 0);
+        }
+    }
+
     /**
      * 处理数据(公共方法)
      *

+ 245 - 0
src/main/java/com/diagbot/facade/MedAppealExamineInfoManagementFacade.java

@@ -0,0 +1,245 @@
+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.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.QcresultDetail;
+import com.diagbot.enums.ExampleOperationEnum;
+import com.diagbot.enums.ExampleStatusEnum;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.impl.MedAppealExamineInfoServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ExcelUtils;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
+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;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description:申述记录
+ * @Author: songxl
+ * @Date 2022/1/5
+ */
+@Component
+public class MedAppealExamineInfoManagementFacade extends MedAppealExamineInfoServiceImpl {
+    @Autowired
+    private QcresultDetailFacade qcresultDetailFacade;
+    @Autowired
+    private  MedAppealInfoManagementFacade medAppealInfoManagementFacade;
+    @Autowired
+    private QcresultInfoFacade qcresultInfoFacade;
+
+    /**
+     * 审核通过
+     * @param approvedVo
+     * @return
+     */
+    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);
+        //获取处理方式
+        String handling = approvedVo.getExampleOperation();
+        if(StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.UP_OR_DEL.getKey())){
+            //调用删除接口
+            qcresultVO.setDelStatus(0);
+            qcresultVO.setType(4);
+            AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
+            if(analyzeDTORespDTO.getIsSuccess()){
+                Boolean appealInfo = updateAppealInfo(approvedVo);
+                MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
+                medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.UP_OR_DEL.getKey());
+                medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
+                medAppealExamineInfo.setGmtCreate(dateTime);
+                medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
+                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, "删除失败!");
+            }
+        }
+        if(StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.UP_OR_UP.getKey())){
+            //调用修改接口
+            qcresultVO.setType(3);
+            AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
+            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.setGmtCreate(dateTime);
+                medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
+                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, "修改失败!");
+            }
+        }
+        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, "该条目已存在!");
+            }
+            //调用新增接口
+            qcresultVO.setType(1);
+
+            AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
+            if(analyzeDTORespDTO.getIsSuccess()){
+                Boolean appealInfo = updateAppealInfo(approvedVo);
+                MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
+                medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.ADD_EXIST.getKey());
+                medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
+                medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
+                medAppealExamineInfo.setGmtCreate(dateTime);
+                boolean update1 = 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 && update1){
+                    return  true;
+                }else {
+                    throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "审核通过失败!");
+                }
+            }else {
+                throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "新增失败!");
+            }
+        }
+        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, "审核通过失败!");
+                }
+            }else {
+                throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "恢复失败!");
+            }
+        }
+        if(StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.ADD_NO_EXIST.getKey())){
+            Boolean appealInfo = updateAppealInfo(approvedVo);
+            MedAppealExamineInfo medAppealExamineInfo= new MedAppealExamineInfo();
+            medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.ADD_NO_EXIST.getKey());
+            medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
+            medAppealExamineInfo.setProcessResult(approvedVo.getProcessResult());
+            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, "审核通过失败!");
+            }
+        }
+        throw new CommonException(CommonErrorCode.NOT_EXISTS, "无此类型处理方式!");
+    }
+
+    public Boolean updateAppealInfo (ApprovedVo approvedVo) {
+        MedAppealInfo medAppealInfo = new MedAppealInfo();
+        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())
+        );
+        if(update){
+            return true;
+        }else {
+            return false;
+        }
+    }
+
+    public void getAppealReviewExport(HttpServletResponse response, GetAppealReviewVO getAppealReviewVO, MedAppealExamineInfoServiceClient 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);
+        String fileName = "申诉审核.xls";
+        ExcelUtils.exportExcelUser(out, null, "sheet1", ExportGetAppealReviewDTO.class, fileName, response);
+    }
+
+    public void getComplaintRecordExport(HttpServletResponse response, GetComplaintRecordVO getComplaintRecordVO, MedAppealExamineInfoServiceClient 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);
+        String fileName = "申诉记录.xls";
+        ExcelUtils.exportExcelUser(out, null, "sheet1", ExportGetComplaintRecordDTO.class, fileName, response);
+    }
+}

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

@@ -0,0 +1,18 @@
+package com.diagbot.facade;
+
+
+
+
+import com.diagbot.service.impl.MedAppealInfoServiceImpl;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @Description:申诉审核管理
+ * @Author: songxl
+ * @Date 2022/1/5
+ */
+@Component
+public class MedAppealInfoManagementFacade extends MedAppealInfoServiceImpl {
+
+}

+ 5 - 0
src/main/java/com/diagbot/facade/MedCheckInfoFacade.java

@@ -72,6 +72,7 @@ public class MedCheckInfoFacade extends MedCheckInfoServiceImpl {
         //获取人员id 和 该人员的医院id
         Long hospitalId = Long.valueOf(SysUserUtils.getCurrentHospitalID());
         Long principleId = Long.valueOf(SysUserUtils.getCurrentPrincipleID());
+        checkAppealRelation();
         QueryWrapper<SysUser> userQuer = new QueryWrapper<>();
         userQuer.eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("id", principleId)
@@ -111,6 +112,10 @@ public class MedCheckInfoFacade extends MedCheckInfoServiceImpl {
         return res;
     }
 
+    private void checkAppealRelation() {
+
+    }
+
     /**
      * @param mapAll
      * @param now

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

@@ -6,6 +6,7 @@ import com.diagbot.dto.BehospitalInfoAgeDTO;
 import com.diagbot.dto.CheckedRecordListDTO;
 import com.diagbot.dto.SysUserDeptDTO;
 import com.diagbot.entity.BasDeptInfo;
+import com.diagbot.entity.MedAppealInfo;
 import com.diagbot.entity.MedBehospitalType;
 import com.diagbot.entity.MedCheckInfo;
 import com.diagbot.entity.SysUserDept;
@@ -24,6 +25,7 @@ import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.CheckedRecordListVO;
+import com.diagbot.vo.MedCheckInfoAddVO;
 import com.diagbot.vo.RecordCheckVO;
 import com.diagbot.vo.SysUserBaseVO;
 import com.google.common.collect.Lists;
@@ -60,7 +62,10 @@ public class RecordCheckFacade {
     BasDeptInfoFacade basDeptInfoFacade;
     @Autowired
     MedBehospitalTypeServiceImpl medBehospitalTypeServiceImpl;
-
+    @Autowired
+    private SysHospitalSetFacade sysHospitalSetFacade;
+    @Autowired
+    private MedAppealInfoManagementFacade appealInfoManagementFacade;
 
     public IPage<CheckedRecordListDTO> checkedRecordList(CheckedRecordListVO checkedRecordListVO) {
         Long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
@@ -159,7 +164,8 @@ public class RecordCheckFacade {
     public boolean recordCheck(RecordCheckVO recordCheckVO) {
         Long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
         Long userId = Long.parseLong(SysUserUtils.getCurrentPrincipleID());
-
+        //获取核查与申诉是否相关配置(核查完成是否有申诉时的内容)
+        checkAppealRelation(hospitalId,recordCheckVO);
         QueryWrapper<MedCheckInfo> medCheckInfoQueryWrapper = new QueryWrapper<>();
         medCheckInfoQueryWrapper.eq("behospital_code", recordCheckVO.getBehospitalCode());
         medCheckInfoQueryWrapper.eq("hospital_id", hospitalId);
@@ -177,6 +183,22 @@ public class RecordCheckFacade {
         return true;
     }
 
+    private void checkAppealRelation(Long hospitalId, RecordCheckVO recordCheckVO) {
+        //获取核查与申诉是否相关配置(核查完成是否有申诉时的内容)
+        String check_appeal_relation = sysHospitalSetFacade.getValue(hospitalId,"check_appeal_relation");
+        if(StringUtil.isNotEmpty(check_appeal_relation)&&Boolean.parseBoolean(check_appeal_relation)){
+            //获取该病例在待审核状态下的病历数量
+            int count = appealInfoManagementFacade.count(new QueryWrapper<MedAppealInfo>()
+                    .eq("work_flow_node_id","1")
+                    .eq("behospital_code",recordCheckVO.getBehospitalCode())
+                    .eq("is_deleted",IsDeleteEnum.N.getKey()));
+            if(count>0){
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "当前缺陷列表存在待审核记录,无法完成核查。");
+            }
+        }
+
+    }
+
     /**
      * @Author songxl
      * @Description获取当前用户的任务来源 和筛选分值

+ 27 - 0
src/main/java/com/diagbot/facade/SysDictionaryFacade.java

@@ -70,4 +70,31 @@ public class SysDictionaryFacade extends SysDictionaryInfoServiceImpl {
         }
         return accessToken;
     }
+
+    /**
+     * 获取字典申诉审核操作类型及状态
+     * @return
+     */
+    public  Map<String, String> getAppealOperationDictionary(){
+        Map<String, String> appealOperationMap = new HashMap<>();
+        if (getDictionaryWithKey() != null
+                && getDictionaryWithKey().containsKey("32")
+                ) {
+            appealOperationMap= getDictionaryWithKey().get("32");
+        }
+        return appealOperationMap;
+    }
+    /**
+     * 获取字典申诉审核状态
+     * @return
+     */
+    public Map<String, String> getAppealStatusDictionary(){
+        Map<String, String> appealStatusMap = new HashMap<>();
+        if (getDictionaryWithKey() != null
+                && getDictionaryWithKey().containsKey("33")
+        ) {
+            appealStatusMap= getDictionaryWithKey().get("33");
+        }
+        return appealStatusMap;
+    }
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.MedAppealExamineInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 申诉审批表 Mapper 接口
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2022-01-20
+ */
+public interface MedAppealExamineInfoMapper extends BaseMapper<MedAppealExamineInfo> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.MedAppealInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 申诉记录表 Mapper 接口
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2022-01-20
+ */
+public interface MedAppealInfoMapper extends BaseMapper<MedAppealInfo> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.MedAppealExamineInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 申诉审批表 服务类
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2022-01-20
+ */
+public interface MedAppealExamineInfoService extends IService<MedAppealExamineInfo> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.MedAppealInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 申诉记录表 服务类
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2022-01-20
+ */
+public interface MedAppealInfoService extends IService<MedAppealInfo> {
+
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.MedAppealExamineInfo;
+import com.diagbot.mapper.MedAppealExamineInfoMapper;
+import com.diagbot.service.MedAppealExamineInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 申诉审批表 服务实现类
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2022-01-20
+ */
+@Service
+public class MedAppealExamineInfoServiceImpl extends ServiceImpl<MedAppealExamineInfoMapper, MedAppealExamineInfo> implements MedAppealExamineInfoService {
+
+}

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

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

+ 88 - 0
src/main/java/com/diagbot/vo/AddAppealInfoApiVO.java

@@ -0,0 +1,88 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2022/1/6
+ */
+@Data
+public class AddAppealInfoApiVO {
+
+    @ApiModelProperty(value = "医院ID",required = true)
+    @NotNull(message = "医院ID不能为空")
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "病人住院ID", required = true)
+    @NotBlank(message = "病人住院ID不能为空")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "质控缺陷id")
+    private Long qcresultDetailId;
+
+    @ApiModelProperty(value = "缺陷详情")
+    private String qcresultDetailMsg;
+
+    @ApiModelProperty(value = "缺陷扣分分值")
+    private BigDecimal qcresultDetaiValue;
+
+    @ApiModelProperty(value = "条目ID")
+    private Long casesEntryId;
+
+    @ApiModelProperty(value = "模块总分")
+    private BigDecimal casesScore;
+
+    @ApiModelProperty(value = "单项否决(1-单项否决 0-非)")
+    private Integer isReject;
+
+    @ApiModelProperty(value = "质控条目(新增已有操作才有值)")
+    private String casesEntryName;
+
+    @ApiModelProperty(value = "提示信息(新增已有操作才有值)")
+    private String casesEntryMsg;
+
+    @ApiModelProperty(value = "分值(新增已有操作才有值)")
+    private BigDecimal value;
+
+    @ApiModelProperty(value = "模块数据标准id")
+    private Long casesId;
+
+    @ApiModelProperty(value = "模块名称", hidden = true)
+    private String casesName;
+
+
+    @ApiModelProperty(value = "病历内容")
+    private String defectContent;
+
+    @ApiModelProperty(value = "申诉人工号", required = true)
+    @NotBlank(message = "申诉人工号不能为空")
+    private String claimantId;
+
+    @ApiModelProperty(value = "申诉类型(0:医生申诉|1:质控申诉)", required = true)
+    @NotBlank(message = "申诉类型不能为空")
+    private String appealType;
+
+    @ApiModelProperty(value = "申诉操作类型(0:删改|1:新增已有|2:新增缺失|3:恢复)", required = true)
+    @NotBlank(message = "申诉操作类型不能为空")
+    private String appealOperationType;
+
+    @ApiModelProperty(value = "申诉说明", required = true)
+    @NotBlank(message = "申诉说明不能为空")
+    private String appealExplain;
+
+    @ApiModelProperty(value = "审核人id", required = true)
+    @NotNull(message = "审核人id不能为空")
+    private Long checkId;
+
+    @ApiModelProperty(value = "当前工作流节点id", hidden = true)
+    private Long workFlowNodeId;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}

+ 86 - 0
src/main/java/com/diagbot/vo/AddAppealInfoVO.java

@@ -0,0 +1,86 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2022/1/6
+ */
+@Data
+public class AddAppealInfoVO {
+
+    @ApiModelProperty(value = "医院ID")
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "病人住院ID", required = true)
+    @NotBlank(message = "病人住院ID不能为空")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "质控缺陷id")
+    private Long qcresultDetailId;
+
+    @ApiModelProperty(value = "缺陷详情")
+    private String qcresultDetailMsg;
+
+    @ApiModelProperty(value = "缺陷扣分分值")
+    private BigDecimal qcresultDetaiValue;
+
+    @ApiModelProperty(value = "条目ID")
+    private Long casesEntryId;
+
+    @ApiModelProperty(value = "模块总分")
+    private BigDecimal casesScore;
+
+    @ApiModelProperty(value = "单项否决(1-单项否决 0-非)")
+    private Integer isReject;
+
+    @ApiModelProperty(value = "质控条目(新增已有操作才有值)")
+    private String casesEntryName;
+
+    @ApiModelProperty(value = "提示信息(新增已有操作才有值)")
+    private String casesEntryMsg;
+
+    @ApiModelProperty(value = "分值(新增已有操作才有值)")
+    private BigDecimal value;
+
+    @ApiModelProperty(value = "模块数据标准id")
+    private Long casesId;
+
+    @ApiModelProperty(value = "模块名称", hidden = true)
+    private String casesName;
+
+
+    @ApiModelProperty(value = "病历内容")
+    private String defectContent;
+
+    @ApiModelProperty(value = "申诉人id")
+    private String claimantId;
+
+    @ApiModelProperty(value = "申诉类型(0:医生申诉|1:质控申诉)", required = true)
+    @NotBlank(message = "申诉类型不能为空")
+    private String appealType;
+
+    @ApiModelProperty(value = "申诉操作类型(0:删改|1:新增已有|2:新增缺失|3:恢复)", required = true)
+    @NotBlank(message = "申诉操作类型不能为空")
+    private String appealOperationType;
+
+    @ApiModelProperty(value = "申诉说明", required = true)
+    @NotBlank(message = "申诉说明不能为空")
+    private String appealExplain;
+
+    @ApiModelProperty(value = "审核人id", required = true)
+    @NotNull(message = "审核人id不能为空")
+    private Long checkId;
+
+    @ApiModelProperty(value = "当前工作流节点id", hidden = true)
+    private Long workFlowNodeId;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}

+ 72 - 0
src/main/java/com/diagbot/vo/ApprovedVo.java

@@ -0,0 +1,72 @@
+package com.diagbot.vo;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+
+import java.math.BigDecimal;
+
+/**
+ * 通过
+ * @Description:
+ * @author: cy
+ * @time: 2020/9/4 14:59
+ */
+@Getter
+@Setter
+public class ApprovedVo {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "医院id",hidden = true)
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "申诉id",required = true)
+    private Long id;
+
+    @ApiModelProperty(value = "工作流节点",hidden = true)
+    private Long workFlowNodeId;
+
+    @ApiModelProperty(value = "审核人id",hidden = true)
+    private Long appealId;
+
+    @ApiModelProperty(value = "病人住院序号",required = true)
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "处理方式(1:修改|2:删除|3:新增已有|4:新增缺失|5:恢复)",required = true)
+    private String exampleOperation;
+
+    @ApiModelProperty(value = "处理结果")
+    private String processResult;
+
+//    @ApiModelProperty(value = "申诉模块",required = true)
+//    private Long casesId;
+//
+//    @ApiModelProperty(value = "质控缺陷ID")
+//    private Long qcresultDetailId;
+//
+//    @ApiModelProperty(value = "条目ID")
+//    private Long casesEntryId;
+//
+    @ApiModelProperty(value = "质控条目")
+    private String casesEntryName;
+//
+//    @ApiModelProperty(value = "提示信息")
+//    private String casesEntryMsg;
+//
+//    @ApiModelProperty(value = "分值")
+//    private BigDecimal value;
+//
+//    @ApiModelProperty(value = "备注")
+//    private String remark;
+
+    @ApiModelProperty(hidden = true)
+    private Integer type;
+
+    @ApiModelProperty("逻辑删除接口(1-恢复和0-删除)标志")
+    private Integer delStatus;
+
+    @ApiModelProperty(value = "操作条目")
+    private QcResultAlgVO qcResultAlgVO;
+}

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

@@ -0,0 +1,19 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2022/1/6
+ */
+@Data
+public class CancelAppealInfoVO {
+    @ApiModelProperty(value = "申诉id", required = true)
+    private Long id;
+    @ApiModelProperty(value = "当前工作流节点id 1:申诉|2:撤回|3:审核", hidden = true)
+    private Long workFlowNodeId;
+}

+ 39 - 0
src/main/java/com/diagbot/vo/GetAppealInfoVO.java

@@ -0,0 +1,39 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2022/1/6
+ */
+@Data
+public class GetAppealInfoVO {
+    @ApiModelProperty(value = "申诉id", required = true)
+    @NotNull(message = "申诉id不能为空")
+    private Long id;
+
+    @ApiModelProperty(value = "医院ID")
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "病人住院ID")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "条目ID")
+    private Long casesEntryId;
+
+    @ApiModelProperty(value = "质控缺陷id")
+    private Long qcresultDetailId;
+
+    @ApiModelProperty(value = "解释说明" ,hidden = true)
+    private String appealExplain;
+
+    @ApiModelProperty(value = "排除的工作节点" ,hidden = true)
+    //排除撤回的申诉记录
+    private String concelWorkFlowNode = "2";
+//    @ApiModelProperty(value = "类型 1:申诉查看|2:审核查看")
+//    private String type = "1";
+}

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

@@ -0,0 +1,25 @@
+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 GetAppealOperationTypeVO {
+    @ApiModelProperty(value = "质控缺陷id", required = true)
+    @NotNull(message = "质控缺陷id不能为空")
+    private Long qcresultDetailId;
+    @ApiModelProperty(value = "审核状态 0:待审核|1:驳回|2:通过", required = true)
+    @NotBlank(message = "审核状态不能为空")
+    private String exampleStatus;
+    @ApiModelProperty(value = "申诉操作类型(0:删改|1:新增已有|2:新增缺失|3:恢复)", required = true)
+    @NotBlank(message = "申诉操作类型不能为空")
+    private String appealOperationType;
+}

+ 52 - 0
src/main/java/com/diagbot/vo/GetAppealReviewVO.java

@@ -0,0 +1,52 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 审核记录
+ * @Description:
+ * @author: cy
+ * @time: 2020/9/4 14:59
+ */
+@Getter
+@Setter
+public class GetAppealReviewVO extends Page implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "审核人id",hidden = true)
+    private Long appealId;
+
+    @ApiModelProperty(value = "医院id",hidden = true)
+    private Long hospitalId;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "申述开始时间", required = true)
+    private Date complaintDateStart;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "申述结束时间", required = true)
+    private Date complaintDateEnd;
+
+    @ApiModelProperty(value = "所属科室")
+    private String deptName;
+
+    @ApiModelProperty(value = "申述模块")
+    private String casesName;
+
+    @ApiModelProperty(value = "申诉人")
+    private String name;
+
+    @ApiModelProperty(value = "操作类型")
+    private String operationType;
+
+    @ApiModelProperty(value = "状态")
+    private String state;
+
+}

+ 21 - 0
src/main/java/com/diagbot/vo/GetApprovedViewVO.java

@@ -0,0 +1,21 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2022/1/6
+ */
+@Data
+public class GetApprovedViewVO {
+    @ApiModelProperty(value = "申诉id", required = true)
+    @NotNull(message = "申诉id不能为空")
+    private Long id;
+
+    @ApiModelProperty(value = "类型 1:申诉查看|2:审核查看")
+    private String type = "2";
+}

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

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2022/1/6
+ */
+@Data
+public class GetAuditNumberVO {
+    @ApiModelProperty(value = "审核人",required = true,hidden = true)
+    private Long id;
+}

+ 55 - 0
src/main/java/com/diagbot/vo/GetComplaintRecordVO.java

@@ -0,0 +1,55 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 申述记录
+ * @Description:
+ * @author: cy
+ * @time: 2020/9/4 14:59
+ */
+@Getter
+@Setter
+public class GetComplaintRecordVO extends Page implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "申述人id",hidden = true)
+    private Long complaintId;
+
+    @ApiModelProperty(value = "医院id",hidden = true)
+    private Long hospitalId;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "申述开始时间", required = true)
+    private Date complaintDateStart;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "申述结束时间", required = true)
+    private Date complaintDateEnd;
+
+    @ApiModelProperty(value = "所属科室")
+    private String deptName;
+
+    @ApiModelProperty(value = "申述模块")
+    private String cases_name;
+
+    @ApiModelProperty(value = "审核人")
+    private String name;
+
+    @ApiModelProperty(value = "操作类型")
+    private String operationType;
+
+    @ApiModelProperty(value = "状态")
+    private String state;
+
+}

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

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

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

@@ -0,0 +1,22 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2022/1/6
+ */
+@Data
+public class GetReviewerApiVO {
+    @ApiModelProperty(value = "申述人工号",required = true)
+    @NotBlank(message = "申述人工号不能为空")
+    private String claimantId;
+    @ApiModelProperty(value = "是否包含自身开关", hidden = true)
+    private Boolean selfFlag = false;
+    @ApiModelProperty(value = "审核角色id", hidden = true)
+    private String roleID = "10";
+}

+ 19 - 0
src/main/java/com/diagbot/vo/GetReviewerVO.java

@@ -0,0 +1,19 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2022/1/6
+ */
+@Data
+public class GetReviewerVO {
+    @ApiModelProperty(value = "申诉人id", hidden = true)
+    private String claimantId;
+    @ApiModelProperty(value = "是否包含自身开关", hidden = true)
+    private Boolean selfFlag = false;
+    @ApiModelProperty(value = "审核角色id", hidden = true)
+    private String roleID = "10";
+}

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

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @Author songxl
+ * @Date 2022/1/6
+ */
+@Data
+public class MedAppealInfoVO {
+    @ApiModelProperty(value = "编号",required = true)
+    @NotNull(message = "编号为空")
+    private Long id;
+}

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

@@ -0,0 +1,37 @@
+package com.diagbot.vo;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 驳回
+ * @Description:
+ * @author: cy
+ * @time: 2020/9/4 14:59
+ */
+@Getter
+@Setter
+public class RejectedVo {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "医院id",hidden = true)
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "申诉id",required = true)
+    private Long id;
+
+    @ApiModelProperty(value = "工作流节点",hidden = true)
+    private Long workFlowNodeId;
+
+    @ApiModelProperty(value = "审核人id",hidden = true)
+    private Long appealId;
+
+    @ApiModelProperty(value = "病人住院序号",required = true)
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "驳回理由")
+    private String rejectedReason;
+
+}

+ 168 - 0
src/main/java/com/diagbot/web/MedAppealExamineInfoController.java

@@ -0,0 +1,168 @@
+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.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 io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+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 javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 申诉审核 前端控制器
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-06
+ */
+@RestController
+@RequestMapping("/qc/appealExamineInfo")
+@Api(value = "申诉审核API", tags = { "申诉审核API" })
+@SuppressWarnings("unchecked")
+public class MedAppealExamineInfoController {
+    @Autowired
+    MedAppealExamineInfoServiceClient medAppealExamineInfoServiceClient;
+    @Autowired
+    SysDictionaryFacade sysDictionaryFacade;
+    @Autowired
+    MedAppealExamineInfoManagementFacade medAppealExamineInfoManagementFacade;
+    @Autowired
+    SysHospitalSetFacade sysHospitalSetFacade;
+
+    @ApiOperation(value = "获取申述记录列表[by:zhanghang]",
+            notes = "获取申诉任务接口")
+    @PostMapping("/getComplaintRecord")
+    @SysLogger("getComplaintRecord")
+    public RespDTO<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);
+    }
+
+    @ApiOperation(value = "获取申诉审核列表[by:zhanghang]",
+            notes = "获取申诉审核列表")
+    @PostMapping("/getAppealReview")
+    public RespDTO<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);
+    }
+
+    @ApiOperation(value = "审核通过[by:zhanghang]",
+            notes = "审核通过")
+    @PostMapping("/approved")
+    @Transactional
+    public RespDTO<Boolean> approved(@RequestBody ApprovedVo approvedVo) {
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        approvedVo.setHospitalId(Long.valueOf(hospitalId));
+        approvedVo.setAppealId(Long.valueOf(userId));
+
+        //获取操作流节点
+        String mapping = sysHospitalSetFacade.getValue(Long.parseLong(SysUserUtils.getCurrentHospitalID()),"work_flow_node_mapping");
+        if(StringUtil.isNotEmpty(mapping)){
+            JSONObject mapJSON = JSONObject.parseObject(mapping);
+            approvedVo.setWorkFlowNodeId(mapJSON.getLong("approved"));
+        }
+        // return RespDTO.onSuc(medAppealExamineInfoServiceClient.approved(approvedVo));
+        return RespDTO.onSuc(medAppealExamineInfoManagementFacade.approved(approvedVo));
+    }
+
+    @ApiOperation(value = "驳回[by:zhanghang]",
+            notes = "驳回")
+    @PostMapping("/rejected")
+    @Transactional
+    public RespDTO<Boolean> rejected(@RequestBody RejectedVo rejectedVo) {
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        rejectedVo.setHospitalId(Long.valueOf(hospitalId));
+        rejectedVo.setAppealId(Long.valueOf(userId));
+        //获取操作流节点
+        String mapping = sysHospitalSetFacade.getValue(Long.parseLong(SysUserUtils.getCurrentHospitalID()),"work_flow_node_mapping");
+        if(StringUtil.isNotEmpty(mapping)){
+            JSONObject mapJSON = JSONObject.parseObject(mapping);
+            rejectedVo.setWorkFlowNodeId(mapJSON.getLong("rejected"));
+        }
+        return RespDTO.onSuc(medAppealExamineInfoServiceClient.rejected(rejectedVo));
+    }
+    @ApiOperation(value = "审核查看[by:zhanghang]",
+            notes = "审核查看")
+    @PostMapping("/getApprovedView")
+    public RespDTO<GetAppealInfoDTO> getApprovedView(@RequestBody GetAppealInfoVO getAppealInfoVO) {
+
+        return RespDTO.onSuc(medAppealExamineInfoServiceClient.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);
+    }
+
+    @ApiOperation(value = "获取待审核数量[by:zhanghang]",
+            notes = "获取待审核数量")
+    @PostMapping("/getAuditNumber")
+    public RespDTO<Integer> getAuditNumber(@RequestBody GetAuditNumberVO getAuditNumberVO) {
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        getAuditNumberVO.setId(Long.valueOf(userId));
+        return RespDTO.onSuc(medAppealExamineInfoServiceClient.getAuditNumber(getAuditNumberVO));
+    }
+
+
+    @ApiOperation(value = "申诉记录导出[by:songxl]")
+    @PostMapping("/getComplaintRecordExport")
+    @SysLogger("getComplaintRecordExport")
+    public void getComplaintRecordExport(HttpServletResponse response, @RequestBody @Valid GetComplaintRecordVO getComplaintRecordVO) {
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        getComplaintRecordVO.setHospitalId(Long.valueOf(hospitalId));
+        getComplaintRecordVO.setComplaintId(Long.valueOf(userId));
+        medAppealExamineInfoManagementFacade.getComplaintRecordExport(response, getComplaintRecordVO,medAppealExamineInfoServiceClient);
+    }
+
+    @ApiOperation(value = "申诉审核导出[by:songxl]")
+    @PostMapping("/getAppealReviewExport")
+    @SysLogger("getAppealReviewExport")
+    public void getAppealReviewExport(HttpServletResponse response, @RequestBody @Valid GetAppealReviewVO getAppealReviewVO) {
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        getAppealReviewVO.setHospitalId(Long.valueOf(hospitalId));
+        getAppealReviewVO.setAppealId(Long.valueOf(userId));
+        medAppealExamineInfoManagementFacade.getAppealReviewExport(response, getAppealReviewVO,medAppealExamineInfoServiceClient);
+    }
+
+}

+ 152 - 0
src/main/java/com/diagbot/web/MedAppealInfoController.java

@@ -0,0 +1,152 @@
+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.diagbot.facade.SysHospitalSetFacade;
+import com.diagbot.util.BeanUtil;
+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 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.List;
+import java.util.Map;
+
+
+/**
+ * <p>
+ * 申诉审核 前端控制器
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-06
+ */
+@RestController
+@RequestMapping("/qc/appealInfo")
+@Api(value = "申诉审核API", tags = { "申诉审核API" })
+@SuppressWarnings("unchecked")
+public class MedAppealInfoController {
+
+    @Autowired
+    MedAppealInfoServiceClient medAppealInfoServiceClient;
+
+    @Autowired
+    SysHospitalSetFacade sysHospitalSetFacade;
+
+    @ApiOperation(value = "申诉[by:songxl]",
+            notes = "申诉")
+    @PostMapping("/addAppealInfo")
+    @Transactional
+    public RespDTO<Boolean> addAppealInfo(@RequestBody @Valid AddAppealInfoVO addAppealInfoVO) {
+        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)){
+            JSONObject mapJSON = JSONObject.parseObject(mapping);
+            addAppealInfoVO.setWorkFlowNodeId(mapJSON.getLong("addAppealInfo"));
+        }
+        return medAppealInfoServiceClient.addAppealInfo(addAppealInfoVO);
+    }
+
+    @ApiOperation(value = "申诉-对外api接口[by:songxl]",
+            notes = "申诉")
+    @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)){
+            JSONObject mapJSON = JSONObject.parseObject(mapping);
+            addAppealInfoVO.setWorkFlowNodeId(mapJSON.getLong("addAppealInfo"));
+        }
+        return medAppealInfoServiceClient.addAppealInfo(addAppealInfoVO);
+    }
+
+    @ApiOperation(value = "获取审核人-对外api接口[by:songxl]",
+            notes = "获取审核人")
+    @PostMapping("/getReviewerApi")
+    public RespDTO<List<GetReviewerDTO>> getReviewerApi(@RequestBody GetReviewerApiVO getReviewerApiVO) {
+        //申诉人是否包含自身开关
+        String flag = sysHospitalSetFacade.getValue(Long.parseLong(SysUserUtils.getCurrentHospitalID()),"self_flag");
+        GetReviewerVO getReviewerVO = new GetReviewerVO();
+        BeanUtils.copyProperties(getReviewerApiVO,getReviewerVO);
+        if(StringUtils.isNotEmpty(flag)){
+            getReviewerVO.setSelfFlag(Boolean.parseBoolean(flag));
+        }
+        return medAppealInfoServiceClient.getReviewer(getReviewerVO);
+    }
+
+    @ApiOperation(value = "获取审核人[by:songxl]",
+            notes = "获取审核人")
+    @PostMapping("/getReviewer")
+    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)){
+            getReviewerVO.setSelfFlag(Boolean.parseBoolean(flag));
+        }
+        return medAppealInfoServiceClient.getReviewer(getReviewerVO);
+    }
+
+    @ApiOperation(value = "再次申诉获取操作类型[by:songxl]",
+            notes = "再次申诉获取操作类型")
+    @PostMapping("/getAppealOperationType")
+    public RespDTO<Map<String, String>> getAppealOperationType(@RequestBody @Valid GetAppealOperationTypeVO getAppealOperationTypeVO) {
+        return medAppealInfoServiceClient.getAppealOperationType(getAppealOperationTypeVO);
+    }
+
+    @ApiOperation(value = "撤回申诉[by:songxl]",
+            notes = "撤回申诉")
+    @PostMapping("/cancelAppealInfo")
+    @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)){
+            JSONObject mapJSON = JSONObject.parseObject(mapping);
+            cancelAppealInfoVO.setWorkFlowNodeId(mapJSON.getLong("cancelAppealInfo"));
+        }
+        return medAppealInfoServiceClient.cancelAppealInfo(cancelAppealInfoVO);
+    }
+
+    @ApiOperation(value = "申诉记录详情-查看[by:songxl]",
+            notes = "申诉记录详情-查看")
+    @PostMapping("/getAppealInfo")
+    public RespDTO<GetAppealInfoDTO> getAppealInfo(@RequestBody GetAppealInfoVO getAppealInfoVO) {
+        return medAppealInfoServiceClient.getAppealInfo(getAppealInfoVO);
+    }
+
+}

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

@@ -55,6 +55,8 @@ management:
 
 # 驱动配置信息
 spring:
+  application:
+    name: gateway-service
   datasource:
     druid:
       driver-class-name: com.mysql.cj.jdbc.Driver
@@ -179,4 +181,6 @@ initmodeid:
 
 #对接过程中是否记录正常流程的日志
 log_switch:
-  enable: true
+  enable: true
+
+appeal.address: http://192.168.2.237:8871

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

@@ -55,6 +55,8 @@ management:
 
 # 驱动配置信息
 spring:
+  application:
+    name: gateway-service
   datasource:
     druid:
       driver-class-name: com.mysql.cj.jdbc.Driver
@@ -179,4 +181,6 @@ initmodeid:
 
 #对接过程中是否记录正常流程的日志
 log_switch:
-  enable: true
+  enable: true
+
+appeal.address: http://192.168.2.237:8871

+ 2 - 0
src/main/resources/application-pre.yml

@@ -55,6 +55,8 @@ management:
 
 # 驱动配置信息
 spring:
+  application:
+    name: gateway-service
   datasource:
     druid:
       driver-class-name: com.mysql.cj.jdbc.Driver

+ 2 - 0
src/main/resources/application-pro.yml

@@ -55,6 +55,8 @@ management:
 
 # 驱动配置信息
 spring:
+  application:
+    name: gateway-service
   datasource:
     druid:
       driver-class-name: com.mysql.cj.jdbc.Driver

+ 2 - 0
src/main/resources/application-test.yml

@@ -55,6 +55,8 @@ management:
 
 # 驱动配置信息
 spring:
+  application:
+    name: gateway-service
   datasource:
     druid:
       driver-class-name: com.mysql.cj.jdbc.Driver

+ 49 - 13
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -680,25 +680,61 @@
     </select>-->
 
     <select id="getMsg" resultType="com.diagbot.dto.MsgDTO">
-        SELECT a.*, u.linkman
+        SELECT
+        a.*, u.linkman,
+        appeal.id appeal_info_id,
+        examine.example_status
         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
+        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 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}
+        `qc_cases_entry` a,
+        qc_mode b,
+        med_qcresult_detail c,
+        qc_cases_hospital d
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND a.id = c.cases_entry_id
+        AND a.mode_id = b.id
+        AND c.cases_id = d.cases_id
+        AND c.hospital_id = d.hospital_id
+        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'
+        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
+        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'
     </select>
 
     <select id="getForeignMsg" resultType="com.diagbot.dto.MsgDTO">

+ 22 - 0
src/main/resources/mapper/MedAppealExamineInfoMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.MedAppealExamineInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.MedAppealExamineInfo">
+        <id column="id" property="id" />
+        <result column="appeal_info_id" property="appealInfoId" />
+        <result column="check_id" property="checkId" />
+        <result column="example_status" property="exampleStatus" />
+        <result column="example_operation" property="exampleOperation" />
+        <result column="process_result" property="processResult" />
+        <result column="reject_reason" property="rejectReason" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 34 - 0
src/main/resources/mapper/MedAppealInfoMapper.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.MedAppealInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.MedAppealInfo">
+        <id column="id" property="id" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="behospital_code" property="behospitalCode" />
+        <result column="qcresult_detail_id" property="qcresultDetailId" />
+        <result column="qcresult_detail_msg" property="qcresultDetailMsg" />
+        <result column="qcresult_detai_value" property="qcresultDetaiValue" />
+        <result column="cases_entry_id" property="casesEntryId" />
+        <result column="cases_entry_name" property="casesEntryName" />
+        <result column="cases_entry_msg" property="casesEntryMsg" />
+        <result column="value" property="value" />
+        <result column="mode_id" property="modeId" />
+        <result column="mode_name" property="modeName" />
+        <result column="defect_content" property="defectContent" />
+        <result column="claimant_id" property="claimantId" />
+        <result column="appeal_type" property="appealType" />
+        <result column="appeal_operation_type" property="appealOperationType" />
+        <result column="appeal_explain" property="appealExplain" />
+        <result column="check_id" property="checkId" />
+        <result column="work_flow_node_id" property="workFlowNodeId" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>