shiyue 3 years ago
parent
commit
eae62c039a
100 changed files with 6296 additions and 605 deletions
  1. 15 0
      doc/041.20220113_v2.1.6_演示版_历史评分及操作日志/qc_initv2.1.6.sql
  2. 215 0
      doc/041.20220118_v2.2.0_通用版_申诉驳回/qc_init_v2.2.0_通用版_申诉驳回.sql
  3. 33 0
      doc/042.20220303病案首页字段新增/qc_initv2.1.5.sql
  4. 8 0
      doc/044.20220311v2.2.1/qc_initv2.2.1.sql
  5. 53 0
      doc/045.20220413v2.4.0通用版_消息通知/qc_init_v2.4.0_通用版_消息通知.sql
  6. 95 0
      doc/046.20220420v2.5.0_个性化版_湘雅人工质控缺陷反馈/qc_init_v2.5.0_个性化版_湘雅人工质控缺陷反馈.sql
  7. 6 8
      pom.xml
  8. 1 1
      src/main/java/com/diagbot/MrqcSysApplication.java
  9. 172 0
      src/main/java/com/diagbot/aop/CheckInfoAspect.java
  10. 91 0
      src/main/java/com/diagbot/client/MedAppealExamineInfoServiceClient.java
  11. 102 0
      src/main/java/com/diagbot/client/MedAppealExamineInfoServiceClientFacade.java
  12. 48 0
      src/main/java/com/diagbot/client/MedAppealInfoServiceClient.java
  13. 52 0
      src/main/java/com/diagbot/client/MedAppealInfoServiceClientFacade.java
  14. 63 0
      src/main/java/com/diagbot/client/hystrix/MedAppealExamineInfoServiceHystrix.java
  15. 64 0
      src/main/java/com/diagbot/client/hystrix/MedAppealInfoServiceHystrix.java
  16. 6 0
      src/main/java/com/diagbot/config/MybatisPlusConfigurer.java
  17. 40 76
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  18. 223 0
      src/main/java/com/diagbot/config/mybatisLike/AbstractLikeSqlConverter.java
  19. 79 0
      src/main/java/com/diagbot/config/mybatisLike/MapLikeSqlConverter.java
  20. 160 0
      src/main/java/com/diagbot/config/mybatisLike/MybatisLikeSqlInterceptor.java
  21. 28 0
      src/main/java/com/diagbot/config/mybatisLike/ObjectLikeSqlConverter.java
  22. 37 1
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  23. 89 0
      src/main/java/com/diagbot/dto/AppealExamineRecordDTO.java
  24. 10 0
      src/main/java/com/diagbot/dto/BehosDTO.java
  25. 4 0
      src/main/java/com/diagbot/dto/BehospitalAnalysisDTO.java
  26. 4 0
      src/main/java/com/diagbot/dto/BehospitalCodeDetail.java
  27. 4 0
      src/main/java/com/diagbot/dto/BehospitalInfoDTO.java
  28. 61 0
      src/main/java/com/diagbot/dto/CommonResult.java
  29. 113 0
      src/main/java/com/diagbot/dto/DoctorAverageLevelDTO.java
  30. 49 0
      src/main/java/com/diagbot/dto/DoctorAverageStatisticsDTO.java
  31. 36 0
      src/main/java/com/diagbot/dto/ExportBehospital_7DTO.java
  32. 31 0
      src/main/java/com/diagbot/dto/ExportBehospital_90DTO.java
  33. 23 0
      src/main/java/com/diagbot/dto/ExportCase_7DTO.java
  34. 37 0
      src/main/java/com/diagbot/dto/ExportDoctorAverageLevel_7DTO.java
  35. 36 0
      src/main/java/com/diagbot/dto/ExportDoctorAverageLevel_90DTO.java
  36. 48 0
      src/main/java/com/diagbot/dto/ExportDoctorAverageStatisticsDTO.java
  37. 58 0
      src/main/java/com/diagbot/dto/ExportGetAppealReviewDTO.java
  38. 57 0
      src/main/java/com/diagbot/dto/ExportGetComplaintRecordDTO.java
  39. 33 0
      src/main/java/com/diagbot/dto/ExportGetDoctorDetailPageDTO.java
  40. 17 0
      src/main/java/com/diagbot/dto/ExportMsg_7DTO.java
  41. 20 0
      src/main/java/com/diagbot/dto/GetAppealDeptDTO.java
  42. 72 0
      src/main/java/com/diagbot/dto/GetAppealInfoDTO.java
  43. 20 0
      src/main/java/com/diagbot/dto/GetAppealModeDTO.java
  44. 67 0
      src/main/java/com/diagbot/dto/GetAppealReviewDTO.java
  45. 92 0
      src/main/java/com/diagbot/dto/GetComplaintRecordDTO.java
  46. 30 0
      src/main/java/com/diagbot/dto/GetDefectDeptDTO.java
  47. 28 0
      src/main/java/com/diagbot/dto/GetDefectModeDTO.java
  48. 128 0
      src/main/java/com/diagbot/dto/GetDetailRecordListPageDTO.java
  49. 65 0
      src/main/java/com/diagbot/dto/GetDoctorDetailPageDTO.java
  50. 83 0
      src/main/java/com/diagbot/dto/GetMedDefectFeedbackPageDTO.java
  51. 45 0
      src/main/java/com/diagbot/dto/GetNewsNoticeInfoByIdDTO.java
  52. 22 0
      src/main/java/com/diagbot/dto/GetReviewerDTO.java
  53. 40 0
      src/main/java/com/diagbot/dto/MedRecordContentOtherDTO.java
  54. 26 0
      src/main/java/com/diagbot/dto/MsgApiDTO.java
  55. 19 0
      src/main/java/com/diagbot/dto/MsgDTO.java
  56. 41 0
      src/main/java/com/diagbot/dto/NewsNoticePageDTO.java
  57. 38 0
      src/main/java/com/diagbot/dto/QcCasesHistoryDTO.java
  58. 4 0
      src/main/java/com/diagbot/dto/QcResultShortDTO.java
  59. 5 0
      src/main/java/com/diagbot/dto/SentEntryRecordDTO.java
  60. 19 0
      src/main/java/com/diagbot/dto/his/DoctorHosDTO.java
  61. 31 0
      src/main/java/com/diagbot/entity/BehospitalInfo.java
  62. 6 0
      src/main/java/com/diagbot/entity/HomeDiagnoseInfo.java
  63. 112 3
      src/main/java/com/diagbot/entity/HomePage.java
  64. 103 0
      src/main/java/com/diagbot/entity/MedAppealExamineInfo.java
  65. 145 0
      src/main/java/com/diagbot/entity/MedAppealInfo.java
  66. 153 0
      src/main/java/com/diagbot/entity/MedDefectFeedback.java
  67. 109 0
      src/main/java/com/diagbot/entity/MedNewsNotice.java
  68. 77 0
      src/main/java/com/diagbot/entity/WorkFlowInfo.java
  69. 103 0
      src/main/java/com/diagbot/entity/his/DoctorHos.java
  70. 52 0
      src/main/java/com/diagbot/entity/operationLog.java
  71. 44 0
      src/main/java/com/diagbot/enums/AppealOperationTypeEnum.java
  72. 44 0
      src/main/java/com/diagbot/enums/ExampleOperationEnum.java
  73. 43 0
      src/main/java/com/diagbot/enums/ExampleStatusEnum.java
  74. 48 0
      src/main/java/com/diagbot/enums/NewsNoticeStatusEnum.java
  75. 48 0
      src/main/java/com/diagbot/enums/NewsNoticeTypeEnum.java
  76. 43 0
      src/main/java/com/diagbot/enums/WorkFlowNodeEnum.java
  77. 243 123
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  78. 198 0
      src/main/java/com/diagbot/facade/ConsoleByDoctorFacade.java
  79. 250 71
      src/main/java/com/diagbot/facade/ConsoleExportFacade.java
  80. 1 0
      src/main/java/com/diagbot/facade/DataAnalysisFacade.java
  81. 310 0
      src/main/java/com/diagbot/facade/MedAppealExamineInfoManagementFacade.java
  82. 18 0
      src/main/java/com/diagbot/facade/MedAppealInfoManagementFacade.java
  83. 5 0
      src/main/java/com/diagbot/facade/MedCheckInfoFacade.java
  84. 304 0
      src/main/java/com/diagbot/facade/MedDefectFeedbackFacade.java
  85. 96 0
      src/main/java/com/diagbot/facade/MedNewsNoticeFacade.java
  86. 121 0
      src/main/java/com/diagbot/facade/MedicalRecordOtherFacade.java
  87. 134 238
      src/main/java/com/diagbot/facade/QcresultInfoFacade.java
  88. 29 8
      src/main/java/com/diagbot/facade/RecordCheckFacade.java
  89. 64 3
      src/main/java/com/diagbot/facade/SysDictionaryFacade.java
  90. 14 5
      src/main/java/com/diagbot/facade/SysUserFacade.java
  91. 43 34
      src/main/java/com/diagbot/facade/ViewFacade.java
  92. 11 6
      src/main/java/com/diagbot/facade/data/ABehospitalInfoFacade.java
  93. 10 4
      src/main/java/com/diagbot/facade/data/ADoctorAdviceFacade.java
  94. 10 4
      src/main/java/com/diagbot/facade/data/AHomeDiagnoseInfoFacade.java
  95. 10 4
      src/main/java/com/diagbot/facade/data/AHomeOperationInfoFacade.java
  96. 10 4
      src/main/java/com/diagbot/facade/data/AHomePageFacade.java
  97. 10 4
      src/main/java/com/diagbot/facade/data/AMedicalRecordContentFacade.java
  98. 12 8
      src/main/java/com/diagbot/facade/data/AMedicalRecordFacade.java
  99. 67 0
      src/main/java/com/diagbot/facade/his/DoctorHosFacade.java
  100. 0 0
      src/main/java/com/diagbot/facade/his/FeedbackHosFacade.java

+ 15 - 0
doc/041.20220113_v2.1.6_演示版_历史评分及操作日志/qc_initv2.1.6.sql

@@ -0,0 +1,15 @@
+
+use `qc`;
+-- 执行前请看注意事项!
+-- 执行后还需要给操作账号操作日志菜单权限
+-- 注意
+/**
+演示菜单添加操作日志
+ */
+
+INSERT INTO `sys_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '操作日志', '-1', 'YH-CZRZ', '1', '1', '11', '用户-操作日志');
+SET @idMenu =@@identity;
+
+INSERT INTO `sys_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '操作日志', '', '/qc/behospitalInfo/operationLog', 'ALL', '操作日志', '用户-操作日志');
+SET @idPermission =@@identity;
+INSERT INTO `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', @idMenu, @idPermission, NULL, '用户-操作日志');

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

@@ -0,0 +1,215 @@
+
+use `qc`;
+-- 执行前请看注意事项!
+-- 申诉驳回相关配置
+-- 注意
+
+
+ALTER TABLE med_qcresult_detail MODIFY COLUMN explain_info varchar(1500) DEFAULT NULL COMMENT '解释说明';
+
+/**
+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 '分值(新增已有操作才有值)',
+  `mode_id` bigint(20) DEFAULT NULL COMMENT '模块id',
+  `mode_name` varchar(60) DEFAULT NULL COMMENT '模块名称',
+  `defect_content` longtext COMMENT '病历内容',
+  `claimant_id` bigint(20) NOT NULL COMMENT '申诉人id',
+  `appeal_type` char(3) NOT NULL COMMENT '申诉类型(0:医生申诉|1:质控申诉)',
+  `appeal_operation_type` char(3) NOT NULL COMMENT '申诉操作类型(0:删改|1:新增已有|2:新增缺失|3:恢复)',
+  `appeal_explain` varchar(1500) DEFAULT NULL COMMENT '申诉说明',
+  `check_id` bigint(20) NOT NULL COMMENT '审核人id',
+  `work_flow_node_id` bigint(20) NOT NULL COMMENT '当前工作流节点id',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `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:驳回|2:通过',
+  `example_operation` char(1) DEFAULT NULL COMMENT '审核处理方式: 1:修改|2:删除|3:新增已有|4:新增缺失|5:恢复',
+  `value` decimal(5,1) DEFAULT NULL COMMENT '审核分值',
+  `process_result` varchar(1500) DEFAULT NULL COMMENT '处理结果',
+  `reject_reason` varchar(1500) DEFAULT NULL COMMENT '驳回理由',
+  `msg` varchar(255) DEFAULT '' 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(1500) NOT NULL DEFAULT '' COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=14 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', '状态');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '34', '申诉驳回', '32,33,35', '2', '0', '申诉驳回状态登字典数据总览');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '35', '1', '修改', '2', '0', '审核处理方式');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '35', '2', '删除', '2', '0', '审核处理方式');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '35', '3', '新增已有', '2', '0', '审核处理方式');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '35', '4', '新增缺失', '2', '0', '审核处理方式');
+INSERT INTO `sys_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '35', '5', '恢复', '2', '0', '审核处理方式');
+
+
+/**
+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, '单人申诉', 'single_appeal_falg', 'true', '单人申诉开关');
+
+
+/**
+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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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 `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, '用户-申诉信息-申诉审核-病案详情查看');

+ 33 - 0
doc/042.20220303病案首页字段新增/qc_initv2.1.5.sql

@@ -0,0 +1,33 @@
+use `qc`;
+
+-- 最先执行字段添加
+
+  ALTER TABLE `med_home_page` ADD  `treatment_type` varchar(2) DEFAULT NULL COMMENT '治疗类别(1.中医<1.1 中医;1.2 民族医>、2.中西医、3.西医 )'AFTER `behospital_day_num`;
+  ALTER TABLE `med_home_page` ADD `outpatient_emr_ch_diagnose` varchar(64) DEFAULT NULL COMMENT '门急诊诊断(中医)'AFTER `outpatient_emr_diagnose`;
+  ALTER TABLE `med_home_page` ADD  `outpatient_emr_ch_diagnose_code` varchar(64) DEFAULT NULL COMMENT '门急诊诊断编码(中医)'AFTER `outpatient_emr_diagnose_code`;
+  ALTER TABLE `med_home_page` ADD  `implementation_clinical_pathway` varchar(2) DEFAULT NULL COMMENT '实施临床路径(1中医、2西医、3否)'AFTER `outpatient_emr_ch_diagnose_code`;
+  ALTER TABLE `med_home_page` ADD  `is_chinese_medicine_preparation` varchar(2) DEFAULT NULL COMMENT '使用医疗机构中药制剂(1是、2否)'AFTER `implementation_clinical_pathway`;
+  ALTER TABLE `med_home_page` ADD  `is_chinese_diagnose_equipment` varchar(2) DEFAULT NULL COMMENT '使用中医诊疗设备(1是、2否)	'AFTER `is_chinese_medicine_preparation`;
+  ALTER TABLE `med_home_page` ADD  `is_chinese_diagnose_technology` varchar(2) DEFAULT NULL COMMENT '使用中医诊疗技术(1是 、2否)	'AFTER `is_chinese_diagnose_equipment`;
+  ALTER TABLE `med_home_page` ADD  `dialectical_nursing` varchar(2) DEFAULT NULL COMMENT '辩证施护(1是、2否)'AFTER `is_chinese_diagnose_technology`;
+
+
+
+  ALTER TABLE `med_home_diagnose_info` ADD  `chinese_western_type` varchar(2) DEFAULT '0' COMMENT '中西医类别(0 西医 1中医)'AFTER `hospital_id`;
+
+
+
+
+ -- ALTER TABLE `med_behospital_info` ADD `in_state` varchar(20) DEFAULT NULL COMMENT 'R-住院登记I-病房接诊B-出院登记O-出院结算P-预约出院N-无费退院'AFTER `placefile_date`;
+
+
+
+
+
+
+
+
+
+
+
+

+ 8 - 0
doc/044.20220311v2.2.1/qc_initv2.2.1.sql

@@ -0,0 +1,8 @@
+use `qc`;
+
+UPDATE `qc_mode` SET `name`='其他信息' WHERE (`name`='其他');
+
+
+
+
+

+ 53 - 0
doc/045.20220413v2.4.0通用版_消息通知/qc_init_v2.4.0_通用版_消息通知.sql

@@ -0,0 +1,53 @@
+use `qc`;
+
+
+/**
+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', '46', '全部', '', '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', '46', '质控任务', '1', '2', '1', '通知类型');
+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', '47', '全部', '', '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', '47', '未读', '0', '2', '1', '阅读状态');
+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', '47', '已读', '1', '2', '2', '阅读状态');
+
+
+/**
+sys_menu 新增消息通知菜单
+ */
+INSERT INTO `sys_menu` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ('120', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '消息通知', '-1', 'YH-XXTZ', '1', '1', '16', '用户-消息通知');
+INSERT INTO `sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('210', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '查看', 'FUNC000210', '/medNewsNotice/getNewsNoticeInfoById', 'ALL', '查看', '用户-消息通知-查看');
+INSERT INTO `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', '120', '210', NULL, '用户-消息通知-查看');
+
+/**
+sys_role_menu 全院、科室、个人、核查人员(院级、科室、质控科)六个角色添加消息通知菜单
+ */
+INSERT INTO `sys_role_menu` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ('N', '2022-05-05 10:36:44', '2022-05-05 10:36:44', '0', '0', '1', '120', NULL);
+INSERT INTO `sys_role_menu` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ('N', '2022-05-05 10:36:44', '2022-05-05 10:36:44', '0', '0', '2', '120', NULL);
+INSERT INTO `sys_role_menu` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ('N', '2022-05-05 10:36:44', '2022-05-05 10:36:44', '0', '0', '3', '120', NULL);
+INSERT INTO `sys_role_menu` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ('N', '2022-05-05 10:36:44', '2022-05-05 10:36:44', '0', '0', '7', '120', NULL);
+INSERT INTO `sys_role_menu` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ('N', '2022-05-05 10:36:44', '2022-05-05 10:36:44', '0', '0', '8', '120', NULL);
+INSERT INTO `sys_role_menu` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ('N', '2022-05-05 10:36:44', '2022-05-05 10:36:44', '0', '0', '9', '120', NULL);
+
+
+/**
+med_news_notice 消息通知表
+ */
+DROP TABLE IF EXISTS `med_news_notice`;
+CREATE TABLE `med_news_notice` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(11) DEFAULT NULL COMMENT '医院ID',
+  `title` varchar(512) NOT NULL COMMENT '标题',
+  `type` char(3) DEFAULT '0' COMMENT '通知类型,1:质控任务 0:其他',
+  `news` longtext COMMENT '消息',
+  `status` char(3) DEFAULT '0' COMMENT '阅读状态,0:未读 1:已读',
+  `sender` varchar(20) DEFAULT '0' COMMENT '发送者',
+  `receiver` varchar(20) DEFAULT '0' COMMENT '接收者',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='消息通知表';
+
+

+ 95 - 0
doc/046.20220420v2.5.0_个性化版_湘雅人工质控缺陷反馈/qc_init_v2.5.0_个性化版_湘雅人工质控缺陷反馈.sql

@@ -0,0 +1,95 @@
+use `qc`;
+
+/**
+med_home_page 病案首页表新增字段
+ */
+ALTER TABLE `med_home_page`
+ADD COLUMN `medical_record_type`  varchar(32) NULL COMMENT '病例分型' AFTER `is_be_in_danger`,
+ADD COLUMN `is_intensive_care`  varchar(2) NULL COMMENT '有无实施重症监护' AFTER `medical_record_type`,
+ADD COLUMN `intensive_care_length`  varchar(32) NULL COMMENT '实施重症监护时长' AFTER `is_intensive_care`,
+ADD COLUMN `intensive_care_day`  varchar(32) NULL COMMENT '实施重症监护天' AFTER `intensive_care_length`,
+ADD COLUMN `intensive_care_hour`  varchar(32) NULL COMMENT '实施重症监护小时' AFTER `intensive_care_day`,
+ADD COLUMN `drg_mange_mode`  varchar(32) NULL COMMENT '实施DRG管理方式' AFTER `intensive_care_hour`,
+ADD COLUMN `is_antibiotic_use`  varchar(2) NULL COMMENT '是否抗生素使用' AFTER `drg_mange_mode`,
+ADD COLUMN `is_sobcsfe`  varchar(2) NULL COMMENT '是否细菌培养标本送检' AFTER `is_antibiotic_use`,
+ADD COLUMN `legalinfectious_disease_type`  varchar(32) NULL COMMENT '法定传染病类别' AFTER `is_sobcsfe`,
+ADD COLUMN `tumour_t_stages`  varchar(32) NULL COMMENT '浸入的组织深度(肿瘤分期T) ' AFTER `legalinfectious_disease_type`,
+ADD COLUMN `tumour_n_stages`  varchar(32) NULL COMMENT '淋巴结转移情况(肿瘤分期N)' AFTER `tumour_t_stages`,
+ADD COLUMN `tumour_m_stages`  varchar(32) NULL COMMENT '远处转移情况(肿瘤分期M)' AFTER `tumour_n_stages`,
+ADD COLUMN `newborn_apgar`  varchar(32) NULL COMMENT '新生儿Apgar评分' AFTER `tumour_m_stages`,
+ADD COLUMN `tumour_stages`  varchar(64) NULL COMMENT '肿瘤分期' AFTER `tumour_m_stages`;
+
+
+/**
+med_behospital_info 病历表新增字段
+ */
+ALTER TABLE `med_behospital_info`
+ADD COLUMN `is_daytime`  varchar(2) NOT NULL DEFAULT 0 COMMENT '是否日间病例,1:是,0:否' AFTER `is_placefile`;
+ALTER TABLE `med_behospital_info` ADD COLUMN `is_qc_type` VARCHAR(2) NOT NULL DEFAULT 0 COMMENT '是否质控0:是1:否' AFTER `is_daytime`;
+
+
+/**
+med_defect_feedback 新增缺陷反馈表
+ */
+
+DROP TABLE IF EXISTS `med_defect_feedback`;
+CREATE TABLE `med_defect_feedback` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(11) DEFAULT NULL COMMENT '医院ID',
+  `dept_id` varchar(16) DEFAULT NULL COMMENT '住院科室ID',
+  `dept_name` varchar(64) DEFAULT NULL COMMENT '住院科室名称',
+  `behospital_code` varchar(16) NOT NULL COMMENT '病人住院ID',
+  `name` varchar(32) NOT NULL COMMENT '姓名',
+  `cases_entry_id` bigint(20) DEFAULT NULL COMMENT '条目ID',
+  `qcresult_detail_msg` varchar(255) DEFAULT NULL COMMENT '提示信息',
+  `qcresult_detai_score` decimal(5,1) DEFAULT NULL COMMENT '人工修改分值',
+  `mode_id` bigint(20) DEFAULT NULL COMMENT '模块id',
+  `mode_name` varchar(60) DEFAULT NULL COMMENT '模块名称',
+  `explain_info` varchar(1500) DEFAULT NULL COMMENT '反馈说明',
+  `operation_type` char(3) NOT NULL COMMENT '操作类型 1:修改|2:删除|3:新增已有|4:新增缺失|5:恢复',
+  `sender_code` varchar(20) NOT NULL COMMENT '发送人编号',
+  `sender_name` varchar(32) NOT NULL COMMENT '发送人姓名',
+  `receiver_code` varchar(20) NOT NULL COMMENT '接收人编号',
+  `receiver_name` varchar(32) NOT NULL COMMENT '接收人姓名',
+  `cc_codes` varchar(255) DEFAULT NULL COMMENT '抄送人编号集合',
+  `cc_names` varchar(1024) DEFAULT NULL COMMENT '抄送人姓名集合',
+  `status` char(3) NOT NULL DEFAULT '0' COMMENT '状态 0:待确认|1:已确认',
+  `is_deleted` char(3) 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则表示纪录未修改',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='缺陷反馈表';
+
+
+/**
+sys_role 新增质控科反馈人员角色
+ */
+INSERT INTO `sys_role` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `roleLevel`, `descritpion`, `menuItems`, `remark`) VALUES ('20', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控科反馈人员', '0', '', '', NULL);
+
+
+
+/**
+sys_menu 新增缺陷反馈记录菜单
+ */
+INSERT INTO `sys_menu` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ('110', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '缺陷反馈记录', '-1', 'YH-QXFKJL', '1', '1', '15', '用户-缺陷反馈记录');
+INSERT INTO `sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('190', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '查看', 'FUNC000190', '/qc/behospitalInfo/getByBehospitalCode', 'ALL', '查看', '用户-缺陷反馈记录-查看');
+INSERT INTO `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', '110', '190', NULL, '用户-缺陷反馈记录-查看');
+
+/**
+sys_user_pageset 页面设定新增是否日间病历
+ */
+INSERT INTO `sys_user_pageset` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `user_id`, `page_type`, `name`, `val`, `status`, `order_no`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '1', '是否日间病历', 'isDaytime', '1', '26', NULL);
+
+/**
+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', '36', '缺陷反馈', '37,38', '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', '37', '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', '37', '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', '37', '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', '37', '4', '新增缺失条目', '2', '0', '操作类型');
+INSERT INTO `sys_dictionary_info` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '37', '5', '恢复条目', '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', '38', '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', '38', '1', '已确认', '2', '0', '状态');

+ 6 - 8
pom.xml

@@ -205,18 +205,13 @@
             <version>${aggregator.version}</version>
         </dependency>
 
-        <!--&lt;!&ndash;消息中心&ndash;&gt;-->
-        <!--<dependency>-->
-            <!--<groupId>org.springframework.cloud</groupId>-->
-            <!--<artifactId>spring-cloud-starter-stream-rabbit</artifactId>-->
-        <!--</dependency>-->
-
         <!-- easypoi -->
         <dependency>
             <groupId>cn.afterturn</groupId>
             <artifactId>easypoi-spring-boot-starter</artifactId>
             <version>${easypoi.version}</version>
         </dependency>
+
         <!--多数据源-->
         <dependency>
             <groupId>com.baomidou</groupId>
@@ -224,14 +219,12 @@
             <version>3.3.1</version>
         </dependency>
 
-        <!--oracle-database-->
         <dependency>
             <groupId>com.oracle</groupId>
             <artifactId>ojdbc6</artifactId>
             <version>11.2.0.3</version>
         </dependency>
 
-<!--        webService调用-->
         <dependency>
             <groupId>com.microsoft.sqlserver</groupId>
             <artifactId>mssql-jdbc</artifactId>
@@ -260,6 +253,11 @@
             <artifactId>cxf-rt-transports-http-jetty</artifactId>
             <version>3.1.10</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.12</version>
+        </dependency>
 
     </dependencies>
 

+ 1 - 1
src/main/java/com/diagbot/MrqcSysApplication.java

@@ -21,7 +21,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
  * @time: 2018/8/7 9:26
  */
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
-        JmxAutoConfiguration.class, ThymeleafAutoConfiguration.class })
+        JmxAutoConfiguration.class, ThymeleafAutoConfiguration.class , DruidDataSourceAutoConfigure.class})
 @EnableFeignClients({ "com.diagbot.client" })
 @EnableHystrixDashboard
 @EnableHystrix

+ 172 - 0
src/main/java/com/diagbot/aop/CheckInfoAspect.java

@@ -0,0 +1,172 @@
+package com.diagbot.aop;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.entity.MedNewsNotice;
+import com.diagbot.entity.SysUser;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.NewsNoticeTypeEnum;
+import com.diagbot.facade.MedNewsNoticeFacade;
+import com.diagbot.facade.SysUserFacade;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.HttpUtils;
+import com.diagbot.util.StringUtil;
+import com.diagbot.util.SysUserUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Description:核查处理
+ * @Author: songxl
+ * @time: 2022/4/12 14:18
+ */
+
+@Aspect
+@Component
+public class CheckInfoAspect {
+    @Autowired
+    private MedNewsNoticeFacade medNewsNoticeFacade;
+    @Autowired
+    private SysUserFacade sysUserFacade;
+
+    // 操作配置织入点
+    @Pointcut("execution(public * com.diagbot.web.MedCheckInfoController.distributionJobs(..))")
+    public void checkPointCut() {
+    }
+
+    /**
+     * 操作后执行
+     *
+     * @param joinPoint
+     * @param jsonResult
+     * @Return void
+     */
+    @AfterReturning(pointcut = "checkPointCut()", returning = "jsonResult")
+    public void operAfterReturning(JoinPoint joinPoint, Object jsonResult) {
+        try {
+            //获取请求入参
+            String params = getRequestParams(joinPoint);
+            if (StringUtils.isNotBlank(params)) {
+                //存储消息通知
+                saveNewsNotice(params);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 存储消息通知
+     *
+     * @param params
+     * @Return void
+     */
+    private void saveNewsNotice(String params) {
+        //参数处理
+        MedNewsNotice newsNotice = paramHandler(params);
+        if (newsNotice != null) {
+            medNewsNoticeFacade.save(newsNotice);
+        }
+    }
+
+    /**
+     * 参数处理
+     *
+     * @param params
+     * @Return java.lang.String
+     */
+    private MedNewsNotice paramHandler(String params) {
+        if (StringUtil.isNotEmpty(params) && "{".equals(params.substring(0, 1))) {
+            JSONObject paramJSON = JSONObject.parseObject(params);
+            if (paramJSON.getJSONArray("behospitalCodes") == null
+                    || StringUtil.isBlank(paramJSON.getString("checkId"))
+                    || StringUtil.isBlank(paramJSON.getString("distributionType"))
+                    || StringUtil.isBlank(paramJSON.getString("checkName"))) {
+                return null;
+            }
+            //获取分配者用户名
+            SysUser user = sysUserFacade.getOne(new QueryWrapper<SysUser>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("id", SysUserUtils.getCurrentPrincipleID())
+                    .eq("status", 1));
+            if (user != null) {
+                StringBuffer out = new StringBuffer();
+                out.append(paramJSON.getString("checkName"))
+                        .append("您好:\r\n")
+                        .append("您有")
+                        .append(paramJSON.getJSONArray("behospitalCodes").size());
+                MedNewsNotice newsNotice = new MedNewsNotice();
+                newsNotice.setReceiver(paramJSON.getString("checkId"));
+                newsNotice.setType(NewsNoticeTypeEnum.CHECK_NEWS_WORK.getKey());
+                newsNotice.setGmtCreate(DateUtil.now());
+                newsNotice.setCreator(SysUserUtils.getCurrentPrincipleID() == null ? "0" : SysUserUtils.getCurrentPrincipleID());
+                newsNotice.setHospitalId(SysUserUtils.getCurrentHospitalID() == null ? 0l : Long.parseLong(SysUserUtils.getCurrentHospitalID()));
+                if ("0".equals(paramJSON.getString("distributionType"))) {
+                    newsNotice.setTitle("待核查质控任务提醒");
+                    out.append("条来自")
+                            .append(user.getLinkman())
+                            .append("分配的待核查质控任务,请及时完成病历核查!");
+                } else {
+                    newsNotice.setTitle("待核查质控任务被移除提醒");
+                    out.append("条待核查的质控任务已被")
+                            .append(user.getLinkman())
+                            .append("移除,请知悉!");
+                }
+                newsNotice.setNews(out.toString());
+                return newsNotice;
+            }
+        }
+        return null;
+    }
+
+
+    /**
+     * /**
+     * 获取请求的参数
+     *
+     * @param joinPoint
+     * @Return java.lang.String
+     */
+    private String getRequestParams(JoinPoint joinPoint) throws Exception {
+        Map<String, String[]> map = HttpUtils.getHttpServletRequest().getParameterMap();
+        if (MapUtils.isNotEmpty(map)) {
+            String params = JSONObject.toJSONString(map);
+            return params;
+        } else {
+            Object args = joinPoint.getArgs();
+            if (null != args) {
+                return argsArrayToString(joinPoint.getArgs());
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 参数拼装
+     *
+     * @param paramsArray
+     * @Return java.lang.String
+     */
+    private String argsArrayToString(Object[] paramsArray) {
+        String params = "";
+        if (paramsArray != null && paramsArray.length > 0) {
+            for (int i = 0; i < paramsArray.length; i++) {
+                if (null != (paramsArray[i])) {
+                    Object jsonObj = JSONObject.toJSONString(paramsArray[i]);
+                    params += jsonObj.toString() + " ";
+                }
+            }
+        }
+        return params.trim();
+    }
+}
+
+

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

@@ -0,0 +1,91 @@
+package com.diagbot.client;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.diagbot.client.hystrix.MedAppealExamineInfoServiceHystrix;
+import com.diagbot.dto.CommonResult;
+import com.diagbot.dto.GetAppealInfoDTO;
+import com.diagbot.dto.GetAppealReviewDTO;
+import com.diagbot.dto.GetComplaintRecordDTO;
+import com.diagbot.entity.QcresultDetail;
+import com.diagbot.vo.ApprovedVo;
+import com.diagbot.vo.GetAppealInfoVO;
+import com.diagbot.vo.GetAppealReviewVO;
+import com.diagbot.vo.GetAuditNumberVO;
+import com.diagbot.vo.GetComplaintDetailMsgVO;
+import com.diagbot.vo.GetComplaintRecordVO;
+import com.diagbot.vo.RejectedVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+
+
+/**
+ * @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")
+    CommonResult<Page<GetComplaintRecordDTO>> getComplaintRecord(@RequestBody GetComplaintRecordVO getComplaintRecordVO);
+
+    /**
+     * 获取申诉审核列表
+     * @param getAppealReviewVO
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getAppealReview")
+    CommonResult<Page<GetAppealReviewDTO>> getAppealReview(@RequestBody GetAppealReviewVO getAppealReviewVO);
+
+
+    /**
+     *审核通过
+     * @param approvedVo
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/approved")
+    CommonResult<Boolean> approved(@RequestBody ApprovedVo approvedVo);
+
+    /**
+     *驳回
+     * @param rejectedVo
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/rejected")
+    CommonResult<Boolean> rejected(@RequestBody RejectedVo rejectedVo);
+
+    /**
+     *审核查看
+     * @param getAppealInfoVO
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getApprovedView")
+    CommonResult<GetAppealInfoDTO> getApprovedView(@RequestBody GetAppealInfoVO getAppealInfoVO);
+
+    /**
+     *待审核数量
+     * @param getAuditNumberVO
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getAuditNumber")
+    CommonResult<Integer> getAuditNumber(@RequestBody GetAuditNumberVO getAuditNumberVO);
+
+    /**
+     *获取该申诉记录最新缺陷详情
+     * @param getComplaintDetailMsgVO
+     * @return
+     */
+    @PostMapping(value = "/report-service/medAppealExamineInInfoManage/getComplaintDetailMsg")
+    CommonResult<QcresultDetail> getComplaintDetailMsg(@RequestBody GetComplaintDetailMsgVO getComplaintDetailMsgVO);
+
+
+}
+
+
+

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

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

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

@@ -0,0 +1,48 @@
+package com.diagbot.client;
+
+import com.diagbot.client.hystrix.MedAppealInfoServiceHystrix;
+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;
+
+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")
+    CommonResult<Boolean> addAppealInfo(@RequestBody @Valid AddAppealInfoVO addAppealInfoVO);
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/getReviewer")
+    CommonResult<List<GetReviewerDTO>> getReviewer(@RequestBody GetReviewerVO getReviewerVO);
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/getAppealOperationType")
+    CommonResult<Map<String, String>> getAppealOperationType(@RequestBody @Valid GetAppealOperationTypeVO getAppealOperationTypeVO);
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/cancelAppealInfo")
+    CommonResult<Boolean> cancelAppealInfo(@RequestBody @Valid CancelAppealInfoVO cancelAppealInfoVO);
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/getAppealInfo")
+    CommonResult<GetAppealInfoDTO> getAppealInfo(@RequestBody GetAppealInfoVO getAppealInfoVO);
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/getAppealDept")
+    CommonResult<List<GetAppealDeptDTO>> getAppealDept(@RequestBody GetAppealDeptVo getAppealDeptVo);
+
+    @PostMapping(value = "/report-service/medAppealInfoManage/getAppealMode")
+    CommonResult<List<GetAppealModeDTO>> getAppealMode(@RequestBody GetAppealModeVo getAppealModeVo);
+
+}
+
+
+

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

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

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

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

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

@@ -0,0 +1,64 @@
+package com.diagbot.client.hystrix;
+
+
+import com.diagbot.client.MedAppealInfoServiceClient;
+import com.diagbot.dto.*;
+import com.diagbot.vo.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.validation.Valid;
+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 CommonResult<Boolean> addAppealInfo(@Valid AddAppealInfoVO addAppealInfoVO) {
+        log.error("【hystrix】调用{}异常", "addAppealInfo");
+        return null;
+    }
+
+    @Override
+    public CommonResult<List<GetReviewerDTO>> getReviewer(GetReviewerVO getReviewerVO) {
+        log.error("【hystrix】调用{}异常", "getReviewer");
+        return null;
+    }
+
+    @Override
+    public CommonResult<Map<String, String>> getAppealOperationType(@Valid GetAppealOperationTypeVO getAppealOperationTypeVO) {
+        log.error("【hystrix】调用{}异常", "getAppealOperationType");
+        return null;
+    }
+
+    @Override
+    public CommonResult<Boolean> cancelAppealInfo(@Valid CancelAppealInfoVO cancelAppealInfoVO) {
+        log.error("【hystrix】调用{}异常", "cancelAppealInfo");
+        return null;
+    }
+
+    @Override
+    public CommonResult<GetAppealInfoDTO> getAppealInfo(GetAppealInfoVO getAppealInfoVO) {
+        log.error("【hystrix】调用{}异常", "getAppealInfo");
+        return null;
+    }
+
+    @Override
+    public CommonResult<List<GetAppealDeptDTO>> getAppealDept(@Valid GetAppealDeptVo getAppealDeptVo) {
+        log.error("【hystrix】调用{}异常", "getAppealDept");
+        return null;
+    }
+
+    @Override
+    public CommonResult<List<GetAppealModeDTO>> getAppealMode(GetAppealModeVo getAppealModeVo) {
+        log.error("【hystrix】调用{}异常", "getAppealMode");
+        return null;
+    }
+}

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

@@ -1,6 +1,7 @@
 package com.diagbot.config;
 
 import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.diagbot.config.mybatisLike.MybatisLikeSqlInterceptor;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -30,4 +31,9 @@ public class MybatisPlusConfigurer {
         return paginationInterceptor;
     }
 
+//    @Bean
+//    public MybatisLikeSqlInterceptor mybatisSqlInterceptor() {
+//        return new MybatisLikeSqlInterceptor();
+//    }
+
 }

+ 40 - 76
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -111,15 +111,10 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/console/homePageLevelLimit").permitAll()
                 .antMatchers("/console/homePageLevelStatistics").permitAll()
                 .antMatchers("/console/homePageLevelStatisticsXY").permitAll()
-                .antMatchers("/console/export/homePageLevelXYExport").permitAll()
                 .antMatchers("/consoleByDept/homePageLevelStatisticsXYByDept").permitAll()
-                .antMatchers("/print/export/homePageLevelXYExportByDept").permitAll()
                 .antMatchers("/consoleByDept/entryCountGroupXYByEntryPageDept").permitAll()
-                .antMatchers("/print/export/entryCountGroupXYByExportDept").permitAll()
                 .antMatchers("/consoleByDept/qcResultShortXYPageByDept").permitAll()
-                .antMatchers("/print/export/qcResultShortXYPageExportDept").permitAll()
                 .antMatchers("/consoleByDept/badLevelXYPageByDept").permitAll()
-                .antMatchers("/print/export/badLevelPageXYExportByDept").permitAll()
                 .antMatchers("/console/leaveHosCount").permitAll()
                 .antMatchers("/console/medicalRecordIndicator").permitAll()
                 .antMatchers("/console/codingMonthly").permitAll()
@@ -133,8 +128,6 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/console/resultStatistics").permitAll()
                 .antMatchers("/console/resultStatisticsByDeptPage").permitAll()
                 .antMatchers("/console/homePageMRCount").permitAll()
-                .antMatchers("/console/mrCountForHis").permitAll()
-                .antMatchers("/console/homePageMRCountForHis").permitAll()
                 .antMatchers("/console/qcCheckStatistics").permitAll()
                 .antMatchers("/console/unModifyMRStatistics").permitAll()
                 .antMatchers("/console/unModifyMRPage").permitAll()
@@ -155,27 +148,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/consoleByDept/mrCountByDept").permitAll()
                 .antMatchers("/consoleByDept/qcResultShortByDeptPage").permitAll()
                 .antMatchers("/consoleByDept/resultStatisticsByDeptAndDoctorPage").permitAll()
-                .antMatchers("/console/export/homePageLevelExport").permitAll()
-                .antMatchers("/console/export/entryGroupByEntryExport").permitAll()
-                .antMatchers("/console/export/levelExport").permitAll()
                 .antMatchers("/console/entryStatistics").permitAll()
-                .antMatchers("/console/export/levelExport_TZ").permitAll()
-                .antMatchers("/console/export/getAverageDayNumExport").permitAll()
-                .antMatchers("/console/export/getAverageFeeExport").permitAll()
-                .antMatchers("/console/export/levelPercentGroupByDeptExport").permitAll()
-                .antMatchers("/console/export/entryCountGroupByEntryExport").permitAll()
-                .antMatchers("/console/export/entryCountGroupXYByEntryExport").permitAll()
-                .antMatchers("/console/export/entryCountGroupByCaseExport").permitAll()
-                .antMatchers("/console/export/entryStatisticsExport").permitAll()
-                .antMatchers("/console/export/qcResultShortPageExport").permitAll()
-                .antMatchers("/console/export/qcResultShortXYPageExport").permitAll()
-                .antMatchers("/console/export/leaveHosMrPageExport").permitAll()
-                .antMatchers("/console/export/qcCheckStatisticsExport").permitAll()
-                .antMatchers("/console/export/unModifyMRPageExport").permitAll()
-                .antMatchers("/console/export/unModifyMRStatisticsExport").permitAll()
-                .antMatchers("/console/export/reHos31DaysPageExport").permitAll()
-                .antMatchers("/console/export/hmImproveMRPageExport").permitAll()
-                .antMatchers("/console/export/qcCheckMRPageExport").permitAll()
                 .antMatchers("/qc/data/sendDoctorInfos").permitAll()
                 .antMatchers("/qc/data/sendDeptInfos").permitAll()
                 .antMatchers("/qc/data/sendRecordTypes").permitAll()
@@ -183,7 +156,6 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/data/sendMrContent").permitAll()
                 .antMatchers("/qc/data/sendMrRecord").permitAll()
                 .antMatchers("/qc/data/sendPatientInfo").permitAll()
-                .antMatchers("/qc/data/sendLeaveInfo").permitAll()
                 .antMatchers("/qc/data/sendDoctorAdvice").permitAll()
                 .antMatchers("/qc/data/sendHomePageIng").permitAll()
                 .antMatchers("/qc/data/sendHomePage").permitAll()
@@ -198,36 +170,12 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/data/analyseRec").permitAll()
                 .antMatchers("/qc/data/viewTask").permitAll()
                 .antMatchers("/qc/data/hisDataDeal").permitAll()
+                .antMatchers("/qc/data_str/**").permitAll()
                 .antMatchers("/qc/data/sendDateOld").permitAll()
                 .antMatchers("/qc/data/sendDataOld").permitAll()
                 .antMatchers("/qc/data/sendData").permitAll()
                 .antMatchers("/qc/data/sendDataOldOne").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()
@@ -236,48 +184,30 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/behospitalInfo/analyzeCds").permitAll()
                 .antMatchers("/qc/behospitalInfo/addMedClickInfo").permitAll()
                 .antMatchers("/console/medicalCheckTitle").permitAll()
-                .antMatchers("/console/export/medicalCheckExport").permitAll()
-                .antMatchers("/console/export/medicalCheckInnerExport").permitAll()
                 .antMatchers("/console/badLevelPage").permitAll()
                 .antMatchers("/console/badLevelXYPage").permitAll()
-                .antMatchers("/console/export/badLevelPagePageExport").permitAll()
-                .antMatchers("/console/export/badLevelPageXYExport").permitAll()
                 .antMatchers("/qc/medNurse/getMedNursePage").permitAll()
+                .antMatchers("/qc/medRecordOther/getMedRecordOtherPage").permitAll()
+                .antMatchers("/qc/medRecordOther/getMedRecordContentOther").permitAll()
                 .antMatchers("/qc/behospitalInfo/exportQcresultByPerson").permitAll()
                 .antMatchers("/consoleByDept/beHosCountByDept").permitAll()
                 .antMatchers("/consoleByDept/casesEntryStatisticsByDept").permitAll()
                 .antMatchers("/bas/doctor/getList").permitAll()
                 .antMatchers("/consoleByDept/homePageOrGoodLevelByDept").permitAll()
-                .antMatchers("/print/export/homePageLevelExportByDept").permitAll()
-                .antMatchers("/print/export/homePageOrLevelExportByDept").permitAll()
-                .antMatchers("/print/export/entryGroupExportByDeptPage").permitAll()
-                .antMatchers("/print/export/entryGroupExportByDeptCase").permitAll()
-                .antMatchers("/print/export/entryGroupExportByDeptEntry").permitAll()
-                .antMatchers("/print/export/qcResultShortExportByDeptPage").permitAll()
-                .antMatchers("/print/export/levelExportByDept").permitAll()
                 .antMatchers("/consoleByDept/entryStatisticsByDept").permitAll()
-                .antMatchers("/print/export/entryStatisticsExportByDept").permitAll()
                 .antMatchers("/consoleByDept/leaveHosMRPageByDept").permitAll()
-                .antMatchers("/print/export/leaveHosMrPageExportByDept").permitAll()
                 .antMatchers("/consoleByDept/qcCheckStatisticsByDept").permitAll()
-                .antMatchers("/print/export/qcCheckStaExportByDept").permitAll()
                 .antMatchers("/consoleByDept/qcCheckMRPageByDept").permitAll()
-                .antMatchers("/print/export/qcCheckMRPageExportByDept").permitAll()
                 .antMatchers("/consoleByDept/hmImproveMRPageByDept").permitAll()
-                .antMatchers("/print/export/improveMRExportByDept").permitAll()
                 .antMatchers("/consoleByDept/reHos31DaysPageByDept").permitAll()
-                .antMatchers("/print/export/reHos31DaysPageExportByDept").permitAll()
                 .antMatchers("/consoleByDept/unModifyMRSByDept").permitAll()
-                .antMatchers("/print/export/unModifyMRSExportByDept").permitAll()
                 .antMatchers("/consoleByDept/unModifyMRPageByDept").permitAll()
-                .antMatchers("/print/export/unModifyMRPageExportByDept").permitAll()
                 .antMatchers("/consoleByDept/medicalCheckFormKs").permitAll()
-                .antMatchers("/print/export/medicalCheckExportByDept").permitAll()
                 .antMatchers("/consoleByDept/medicalCheckTitleKs").permitAll()
                 .antMatchers("/console/qualityControl").permitAll()
-                .antMatchers("/console/export/qualityControlExport").permitAll()
+                .antMatchers("/console/export/**").permitAll()
                 .antMatchers("/consoleByDept/qualityControlByDept").permitAll()
-                .antMatchers("/print/export/qualityControlExportByDept").permitAll()
+                .antMatchers("/print/export/**").permitAll()
                 .antMatchers("/qc/behospitalInfo/getMedQualityCoList").permitAll()
                 .antMatchers("/console/saveMedicaIndicator").permitAll()
                 .antMatchers("/qc/medCheckInfo/createMedBeHospitalInfoType").permitAll()
@@ -298,7 +228,41 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/analysisDept/getEntryDefectImproveByDeptExport").permitAll()
                 .antMatchers("/qc/analysisDept/getEntryDefectImproveInnerDept").permitAll()
                 .antMatchers("/qc/analysisDept/getDefectImproveInnerByDeptExport").permitAll()
+                .antMatchers("/qc/behospitalInfo/historyAnalyze").permitAll()
+                .antMatchers("/qc/behospitalInfo/operationLog").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/appealExamineInfo/getComplaintDetailMsg").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/cancelAppealInfoApi").permitAll()
+                .antMatchers("/qc/appealInfo/getAppealInfo").permitAll()
+                .antMatchers("/qc/appealInfo/getAppealDept").permitAll()
+                .antMatchers("/qc/appealInfo/getAppealMode").permitAll()
+                .antMatchers("/qc/appealInfo/getUserRole").permitAll()
+                .antMatchers("/qc/mode/getModes").permitAll()
+                .antMatchers("/qcView/data/*").permitAll()
+                .antMatchers("/medDefectFeedback/*").permitAll()
+                .antMatchers("/consoleByDoctor/**").permitAll()
+                .antMatchers("/qc/getDoctorDetail/**").permitAll()
                 .antMatchers("/qc/data/dataSupplement").permitAll()
+                .antMatchers("/qc/supplement/*").permitAll()
+                .antMatchers("/medNewsNotice/**").permitAll()
                 .antMatchers("/**").authenticated();
         //                .antMatchers("/**").permitAll();
     }

+ 223 - 0
src/main/java/com/diagbot/config/mybatisLike/AbstractLikeSqlConverter.java

@@ -0,0 +1,223 @@
+package com.diagbot.config.mybatisLike;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Set;
+
+
+/**
+ * @Description: 包含like的SQL语句转义模板
+ * @author: gaodm
+ * @time: 2020/11/2 16:05
+ */
+@Slf4j
+public abstract class AbstractLikeSqlConverter<T> {
+
+    /**
+     * SQL语句like使用关键字%
+     */
+    private final static String LIKE_SQL_KEY = "%";
+
+    /**
+     * SQL语句需要转义的关键字
+     */
+    private final static String[] ESCAPE_CHAR = new String[] { LIKE_SQL_KEY, "_", "\\" };
+
+    /**
+     * mybatis-plus中like的SQL语句样式
+     */
+    private final static String MYBATIS_PLUS_LIKE_SQL = " like ?";
+
+    /**
+     * mybatis-plus中参数前缀
+     */
+    private final static String MYBATIS_PLUS_WRAPPER_PREFIX = "ew.paramNameValuePairs.";
+
+    /**
+     * mybatis-plus中参数键
+     */
+    final static String MYBATIS_PLUS_WRAPPER_KEY = "ew";
+
+    /**
+     * mybatis-plus中参数分隔符
+     */
+    final static String MYBATIS_PLUS_WRAPPER_SEPARATOR = ".";
+
+    /**
+     * mybatis-plus中参数分隔符替换器
+     */
+    final static String MYBATIS_PLUS_WRAPPER_SEPARATOR_REGEX = "\\.";
+
+    /**
+     * 已经替换过的标记
+     */
+    final static String REPLACED_LIKE_KEYWORD_MARK = "replaced.keyword";
+
+    /**
+     * 转义特殊字符
+     *
+     * @param sql       SQL语句
+     * @param fields    字段列表
+     * @param parameter 参数对象
+     */
+    public void convert(String sql, Set<String> fields, T parameter) {
+        for (String field : fields) {
+            if (this.hasMybatisPlusLikeSql(sql)) {
+                if (this.hasWrapper(field)) {
+                    // 第一种情况:在业务层进行条件构造产生的模糊查询关键字,使用QueryWrapper,LambdaQueryWrapper
+                    this.transferWrapper(field, parameter);
+                } else {
+                    // 第二种情况:未使用条件构造器,但是在service层进行了查询关键字与模糊查询符`%`手动拼接
+                    this.transferSelf(field, parameter);
+                }
+            } else {
+                // 第三种情况:在Mapper类的注解SQL中进行了模糊查询的拼接
+                this.transferSplice(field, parameter);
+            }
+        }
+    }
+
+    /**
+     * 转义条件构造的特殊字符
+     * 在业务层进行条件构造产生的模糊查询关键字,使用QueryWrapper,LambdaQueryWrapper
+     *
+     * @param field     字段名称
+     * @param parameter 参数对象
+     */
+    public abstract void transferWrapper(String field, T parameter);
+
+    /**
+     * 转义自定义条件拼接的特殊字符
+     * 未使用条件构造器,但是在service层进行了查询关键字与模糊查询符`%`手动拼接
+     *
+     * @param field     字段名称
+     * @param parameter 参数对象
+     */
+    public abstract void transferSelf(String field, T parameter);
+
+    /**
+     * 转义自定义条件拼接的特殊字符
+     * 在Mapper类的注解SQL中进行了模糊查询的拼接
+     *
+     * @param field     字段名称
+     * @param parameter 参数对象
+     */
+    public abstract void transferSplice(String field, T parameter);
+
+    /**
+     * 转义通配符
+     *
+     * @param before 待转义字符串
+     * @return 转义后字符串
+     */
+    String escapeChar(String before) {
+        if (StringUtils.isNotBlank(before)) {
+            before = before.replaceAll("\\\\", "\\\\\\\\");
+            before = before.replaceAll("_", "\\\\_");
+            before = before.replaceAll("%", "\\\\%");
+        }
+        return before;
+    }
+
+    /**
+     * 是否包含需要转义的字符
+     *
+     * @param obj 待判断的对象
+     * @return true/false
+     */
+    boolean hasEscapeChar(Object obj) {
+        if (!(obj instanceof String)) {
+            return false;
+        }
+        return this.hasEscapeChar((String) obj);
+    }
+
+    /**
+     * 处理对象like问题
+     *
+     * @param field     对象字段
+     * @param parameter 对象
+     */
+    void resolveObj(String field, Object parameter) {
+        if (parameter == null || StringUtils.isBlank(field)) {
+            return;
+        }
+        try {
+            PropertyDescriptor descriptor = new PropertyDescriptor(field, parameter.getClass());
+            Method readMethod = descriptor.getReadMethod();
+            Object param = readMethod.invoke(parameter);
+            if (this.hasEscapeChar(param)) {
+                Method setMethod = descriptor.getWriteMethod();
+                setMethod.invoke(parameter, this.escapeChar(param.toString()));
+            } else if (this.cascade(field)) {
+                int index = field.indexOf(MYBATIS_PLUS_WRAPPER_SEPARATOR) + 1;
+                this.resolveObj(field.substring(index), param);
+            }
+        } catch (IntrospectionException | IllegalAccessException | InvocationTargetException e) {
+            log.error("反射 {} 的 {} get/set方法出现异常", parameter, field, e);
+        }
+    }
+
+    /**
+     * 判断是否是级联属性
+     *
+     * @param field 字段名
+     * @return true/false
+     */
+    boolean cascade(String field) {
+        if (StringUtils.isBlank(field)) {
+            return false;
+        }
+        return field.contains(MYBATIS_PLUS_WRAPPER_SEPARATOR) && !this.hasWrapper(field);
+    }
+
+    /**
+     * 是否包含mybatis-plus的包含like的SQL语句格式
+     *
+     * @param sql 完整SQL语句
+     * @return true/false
+     */
+    private boolean hasMybatisPlusLikeSql(String sql) {
+        if (StringUtils.isBlank(sql)) {
+            return false;
+        }
+        return sql.toLowerCase().contains(MYBATIS_PLUS_LIKE_SQL);
+    }
+
+    /**
+     * 判断是否使用mybatis-plus条件构造器
+     *
+     * @param field 字段
+     * @return true/false
+     */
+    private boolean hasWrapper(String field) {
+        if (StringUtils.isBlank(field)) {
+            return false;
+        }
+        return field.contains(MYBATIS_PLUS_WRAPPER_PREFIX);
+    }
+
+    /**
+     * 判断字符串是否含有需要转义的字符
+     *
+     * @param str 待判断的字符串
+     * @return true/false
+     */
+    private boolean hasEscapeChar(String str) {
+        if (StringUtils.isBlank(str)) {
+            return false;
+        }
+        for (String s : ESCAPE_CHAR) {
+            if (str.contains(s)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+}

+ 79 - 0
src/main/java/com/diagbot/config/mybatisLike/MapLikeSqlConverter.java

@@ -0,0 +1,79 @@
+package com.diagbot.config.mybatisLike;
+
+import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
+
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @Description: 参数对象为Map的转换器
+ * @author: gaodm
+ * @time: 2020/11/2 16:07
+ */
+public class MapLikeSqlConverter extends AbstractLikeSqlConverter<Map> {
+
+    @Override
+    public void transferWrapper(String field, Map parameter) {
+        AbstractWrapper wrapper = (AbstractWrapper) parameter.get(MYBATIS_PLUS_WRAPPER_KEY);
+        parameter = wrapper.getParamNameValuePairs();
+        String[] keys = field.split(MYBATIS_PLUS_WRAPPER_SEPARATOR_REGEX);
+        // ew.paramNameValuePairs.param1,截取字符串之后,获取第三个,即为参数名
+        String paramName = keys[2];
+        String mapKey = String.format("%s.%s", REPLACED_LIKE_KEYWORD_MARK, paramName);
+        if (parameter.containsKey(mapKey) && Objects.equals(parameter.get(mapKey), true)) {
+            return;
+        }
+        if (this.cascade(field)) {
+            this.resolveCascadeObj(field, parameter);
+        } else {
+            Object param = parameter.get(paramName);
+            if (this.hasEscapeChar(param)) {
+                String paramStr = param.toString();
+                parameter.put(keys[2], String.format("%%%s%%", this.escapeChar(paramStr.substring(1, paramStr.length() - 1))));
+            }
+        }
+        parameter.put(mapKey, true);
+    }
+
+    @Override
+    public void transferSelf(String field, Map parameter) {
+        if (this.cascade(field)) {
+            this.resolveCascadeObj(field, parameter);
+            return;
+        }
+        Object param = parameter.get(field);
+        if (this.hasEscapeChar(param)) {
+            String paramStr = param.toString();
+            parameter.put(field, String.format("%%%s%%", this.escapeChar(paramStr.substring(1, paramStr.length() - 1))));
+        }
+    }
+
+    @Override
+    public void transferSplice(String field, Map parameter) {
+        if (this.cascade(field)) {
+            this.resolveCascadeObj(field, parameter);
+            return;
+        }
+        Object param = parameter.get(field);
+        if (this.hasEscapeChar(param)) {
+            parameter.put(field, this.escapeChar(param.toString()));
+        }
+    }
+
+    /**
+     * 处理级联属性
+     *
+     * @param field     级联字段名
+     * @param parameter 参数Map对象
+     */
+    private void resolveCascadeObj(String field, Map parameter) {
+        int index = field.indexOf(MYBATIS_PLUS_WRAPPER_SEPARATOR);
+        Object param = parameter.get(field.substring(0, index));
+        if (param == null) {
+            return;
+        }
+        this.resolveObj(field.substring(index + 1), param);
+    }
+
+}
+

+ 160 - 0
src/main/java/com/diagbot/config/mybatisLike/MybatisLikeSqlInterceptor.java

@@ -0,0 +1,160 @@
+package com.diagbot.config.mybatisLike;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.plugin.Intercepts;
+import org.apache.ibatis.plugin.Invocation;
+import org.apache.ibatis.plugin.Plugin;
+import org.apache.ibatis.plugin.Signature;
+import org.apache.ibatis.session.ResultHandler;
+import org.apache.ibatis.session.RowBounds;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+/**
+ * @Description: mybatis/mybatis-plus模糊查询语句特殊字符转义拦截器
+ * @author: gaodm
+ * @time: 2020/11/2 16:04
+ */
+@Intercepts({ @Signature(type = Executor.class, method = "query", args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class }) })
+@Slf4j
+public class MybatisLikeSqlInterceptor implements Interceptor {
+
+    /**
+     * SQL语句like
+     */
+    private final static String SQL_LIKE = " like ";
+
+    /**
+     * SQL语句占位符
+     */
+    private final static String SQL_PLACEHOLDER = "?";
+
+    /**
+     * SQL语句占位符分隔
+     */
+    private final static String SQL_PLACEHOLDER_REGEX = "\\?";
+
+    /**
+     * 所有的转义器
+     */
+    private static final Map<Class, AbstractLikeSqlConverter> converterMap = new HashMap<>(4);
+
+    static {
+        converterMap.put(Map.class, new MapLikeSqlConverter());
+        converterMap.put(Object.class, new ObjectLikeSqlConverter());
+    }
+
+    @Override
+    public Object intercept(Invocation invocation) throws Throwable {
+        Object[] args = invocation.getArgs();
+        MappedStatement statement = (MappedStatement) args[0];
+        Object parameterObject = args[1];
+        BoundSql boundSql = statement.getBoundSql(parameterObject);
+        String sql = boundSql.getSql();
+        this.transferLikeSql(sql, parameterObject, boundSql);
+        return invocation.proceed();
+    }
+
+    @Override
+    public Object plugin(Object target) {
+        return Plugin.wrap(target, this);
+    }
+
+    @Override
+    public void setProperties(Properties arg0) {
+
+    }
+
+    /**
+     * 修改包含like的SQL语句
+     *
+     * @param sql             SQL语句
+     * @param parameterObject 参数对象
+     * @param boundSql        绑定SQL对象
+     */
+    private void transferLikeSql(String sql, Object parameterObject, BoundSql boundSql) {
+        if (!isEscape(sql)) {
+            return;
+        }
+        sql = sql.replaceAll(" {2}", " ");
+        // 获取关键字的个数(去重)
+        Set<String> fields = this.getKeyFields(sql, boundSql);
+        if (fields == null) {
+            return;
+        }
+        // 此处可以增强,不止是支持Map对象,Map对象仅用于传入的条件为Map或者使用@Param传入的对象被Mybatis转为的Map
+        AbstractLikeSqlConverter converter;
+        // 对关键字进行特殊字符“清洗”,如果有特殊字符的,在特殊字符前添加转义字符(\)
+        if (parameterObject instanceof Map) {
+            converter = converterMap.get(Map.class);
+        } else {
+            converter = converterMap.get(Object.class);
+        }
+        converter.convert(sql, fields, parameterObject);
+    }
+
+    /**
+     * 是否需要转义
+     *
+     * @param sql SQL语句
+     * @return true/false
+     */
+    private boolean isEscape(String sql) {
+        return this.hasLike(sql) && this.hasPlaceholder(sql);
+    }
+
+    /**
+     * 判断SQL语句中是否含有like关键字
+     *
+     * @param str SQL语句
+     * @return true/false
+     */
+    private boolean hasLike(String str) {
+        if (StringUtils.isBlank(str)) {
+            return false;
+        }
+        return str.toLowerCase().contains(SQL_LIKE);
+    }
+
+    /**
+     * 判断SQL语句中是否包含SQL占位符
+     *
+     * @param str SQL语句
+     * @return true/false
+     */
+    private boolean hasPlaceholder(String str) {
+        if (StringUtils.isBlank(str)) {
+            return false;
+        }
+        return str.toLowerCase().contains(SQL_PLACEHOLDER);
+    }
+
+    /**
+     * 获取需要替换的所有字段集合
+     *
+     * @param sql      完整SQL语句
+     * @param boundSql 绑定的SQL对象
+     * @return 字段集合列表
+     */
+    private Set<String> getKeyFields(String sql, BoundSql boundSql) {
+        String[] params = sql.split(SQL_PLACEHOLDER_REGEX);
+        Set<String> fields = new HashSet<>();
+        for (int i = 0; i < params.length; i++) {
+            if (this.hasLike(params[i])) {
+                String field = boundSql.getParameterMappings().get(i).getProperty();
+                fields.add(field);
+            }
+        }
+        return fields;
+    }
+
+}

+ 28 - 0
src/main/java/com/diagbot/config/mybatisLike/ObjectLikeSqlConverter.java

@@ -0,0 +1,28 @@
+package com.diagbot.config.mybatisLike;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @Description: 通用参数的转换器
+ * @author: gaodm
+ * @time: 2020/11/2 16:06
+ */
+@Slf4j
+public class ObjectLikeSqlConverter extends AbstractLikeSqlConverter<Object> {
+
+    @Override
+    public void transferWrapper(String field, Object parameter) {
+        // 尚未发现这种情况
+    }
+
+    @Override
+    public void transferSelf(String field, Object parameter) {
+        // 尚未发现这种情况
+    }
+
+    @Override
+    public void transferSplice(String field, Object parameter) {
+        this.resolveObj(field, parameter);
+    }
+
+}

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

@@ -45,7 +45,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
             int res = tokenFacade.newVerifyToken(tokenStr, 1);
             if (-1 == res) {
                 throw new CommonException(ServiceErrorCode.LONGIN_ERROE);
-            }else if (-2 == res) {
+            } else if (-2 == res) {
                 throw new CommonException(ServiceErrorCode.USER_POWER_UP);
             }
         }
@@ -296,6 +296,8 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/console/export/badLevelPagePageExport", request)
                 || matchers("/console/export/badLevelPageXYExport", request)
                 || matchers("/qc/medNurse/getMedNursePage", request)
+                || matchers("/qc/medRecordOther/getMedRecordOtherPage", request)
+                || matchers("/qc/medRecordOther/getMedRecordContentOther", request)
                 || matchers("/qc/behospitalInfo/exportQcresultByPerson", request)
                 || matchers("/consoleByDept/beHosCountByDept", request)
                 || matchers("/consoleByDept/casesEntryStatisticsByDept", request)
@@ -352,6 +354,40 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/qc/analysisDept/getEntryDefectImproveInnerDept", request)
                 || matchers("/qc/analysisDept/getDefectImproveInnerByDeptExport", request)
                 || matchers("/qc/data/dataSupplement", request)
+                || matchers("/qc/behospitalInfo/historyAnalyze", request)
+                || matchers("/qc/behospitalInfo/operationLog", 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/appealExamineInfo/getComplaintDetailMsg", 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/cancelAppealInfoApi", request)
+                || matchers("/qc/appealInfo/getAppealInfo", request)
+                || matchers("/qc/appealInfo/getAppealDept", request)
+                || matchers("/qc/appealInfo/getAppealMode", request)
+                || matchers("/qc/appealInfo/getUserRole", request)
+                || matchers("/qc/mode/getModes", request)
+                || matchers("/consoleByDoctor/**", request)
+                || matchers("/qc/getDoctorDetail/**", request)
+                || matchers("/qcView/data/*", request)
+                || matchers("/medDefectFeedback/*", request)
+                || matchers("/qc/supplement/*", request)
+                || matchers("/medNewsNotice/**", request)
                 || matchers("/", request)) {
             return true;
         }

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

@@ -0,0 +1,89 @@
+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;
+
+    @ApiModelProperty(value = "单项否决")
+    private String isReject;
+
+    @ApiModelProperty(value = "模块总分")
+    private BigDecimal casesScore;
+}

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

@@ -83,4 +83,14 @@ public class BehosDTO implements Serializable {
      */
     private String age;
 
+    /**
+     * 主治医生ID
+     */
+    private String doctorId;
+
+    /**
+     * 住院次数
+     */
+    private Integer liveHospitalNum;
+
 }

+ 4 - 0
src/main/java/com/diagbot/dto/BehospitalAnalysisDTO.java

@@ -2,6 +2,7 @@ package com.diagbot.dto;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -91,4 +92,7 @@ public class BehospitalAnalysisDTO implements Serializable {
     @Excel(name = "评分时间", exportFormat = "yyyy/MM/dd")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date gradeTime;
+
+    @ApiModelProperty("是否日间病例,1:是,0:否")
+    private String isDaytime;
 }

+ 4 - 0
src/main/java/com/diagbot/dto/BehospitalCodeDetail.java

@@ -1,6 +1,7 @@
 package com.diagbot.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.Date;
@@ -69,4 +70,7 @@ public class BehospitalCodeDetail {
     private Date gradeTime;
 
     List<QcResultDetailInfo> qcResultDetailInfos;
+
+    @ApiModelProperty("是否日间病例,1:是,0:否")
+    private String isDaytime;
 }

+ 4 - 0
src/main/java/com/diagbot/dto/BehospitalInfoDTO.java

@@ -2,6 +2,7 @@ package com.diagbot.dto;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -152,4 +153,7 @@ public class BehospitalInfoDTO implements Serializable {
     private Date chTime;
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date mrTime;
+
+    @ApiModelProperty("是否日间病例,1:是,0:否")
+    private String isDaytime;
 }

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

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

+ 113 - 0
src/main/java/com/diagbot/dto/DoctorAverageLevelDTO.java

@@ -0,0 +1,113 @@
+package com.diagbot.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 医生质控平均分-患者列表(等级)-接口出参
+ * @Author songxl
+ * @Date 2022/4/11 9:20
+ */
+@ApiModel(value = "医生质控平均分-患者列表(等级)-接口出参")
+@Getter
+@Setter
+public class DoctorAverageLevelDTO implements Serializable {
+    private static final long serialVersionUID = 4875168077452918044L;
+
+    @ApiModelProperty(value = "科室")
+    private String behDeptName;
+
+    @ApiModelProperty(value = "主管医生")
+    private String doctorName;
+
+    @ApiModelProperty(value = "住院医生姓名")
+    private String behDoctorName;
+
+    @ApiModelProperty(value = "患者姓名")
+    private String name;
+
+    @ApiModelProperty(value = "档案号")
+    private String fileCode;
+
+    @ApiModelProperty(value = "年龄")
+    private String age = "";
+
+    @ApiModelProperty(value = "入院时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date behospitalDate;
+
+    @ApiModelProperty(value = "出院时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date leaveHospitalDate;
+
+    @ApiModelProperty(value = "最后得分")
+    private Double scoreRes;
+
+    @ApiModelProperty(value = "病历等级")
+    private String level;
+
+    @ApiModelProperty(value = "评分时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date gradeTime;
+
+    @ApiModelProperty(value = "病人住院ID")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "性别")
+    private String sex;
+
+    @ApiModelProperty(value = "出生日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date birthday;
+
+    @ApiModelProperty(value = "病区名称")
+    private String wardName;
+
+    @ApiModelProperty(value = "床位号")
+    private String bedCode;
+
+    @ApiModelProperty(value = "疾病名称")
+    private String diagnose;
+
+
+    @ApiModelProperty(value = "病案首页得分")
+    private Double scoreBn;
+
+    @ApiModelProperty(value = "评分类型(1:机器,2:人工)")
+    private String gradeType;
+
+    @ApiModelProperty(value = "主任医生")
+    private String directorDoctorName;
+
+
+
+    @ApiModelProperty(value = "归档时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date placefileDate;
+
+    @ApiModelProperty(value = "病历核查状态")
+    private Integer checkStatus;
+
+    @ApiModelProperty(value = "病案首页核查状态")
+    private Integer mrStatus;
+
+    @ApiModelProperty(value = "病历核查人")
+    private String chName;
+
+    @ApiModelProperty(value = "病案首页核查人")
+    private String mrName;
+
+    @ApiModelProperty(value = "病历核查时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date chTime;
+
+    @ApiModelProperty(value = "病案首页核查时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date mrTime;
+}

+ 49 - 0
src/main/java/com/diagbot/dto/DoctorAverageStatisticsDTO.java

@@ -0,0 +1,49 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 医生质控平均分页面统计-接口出参
+ * @Author songxl
+ * @Date 2022/4/8 13:20
+ */
+@ApiModel(value = "医生质控平均分页面统计-接口出参")
+@Getter
+@Setter
+public class DoctorAverageStatisticsDTO implements Serializable {
+    private static final long serialVersionUID = 981655366059103193L;
+
+    @ApiModelProperty(value = "科室名称")
+    private String deptName;
+
+    @ApiModelProperty(value = "科室id")
+    private String deptId;
+
+    @ApiModelProperty(value = "医生名称")
+    private String doctorName;
+
+    @ApiModelProperty(value = "医生工号")
+    private String doctorId;
+
+    @ApiModelProperty(value = "缺陷条目数")
+    private Integer entryNum = 0;
+
+    @ApiModelProperty(value = "质控评分(平均分)")
+    private Double averageValue = 0d;
+
+    @ApiModelProperty(value = "甲级病历数")
+    private Integer firstLevelStrNum = 0;
+
+    @ApiModelProperty(value = "乙级病历数")
+    private Integer secondLevelStrNum = 0;
+
+    @ApiModelProperty(value = "丙级病历数")
+    private Integer thirdLevelStrNum = 0;
+
+
+}

+ 36 - 0
src/main/java/com/diagbot/dto/ExportBehospital_7DTO.java

@@ -0,0 +1,36 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/6/2 19:35
+ */
+@Getter
+@Setter
+public class ExportBehospital_7DTO {
+    @Excel(name = "主管医生", needMerge = true)
+    private String doctorName;
+    @Excel(name = "患者姓名", needMerge = true)
+    private String patName;
+    @Excel(name = "住院号", needMerge = true)
+    private String behospitalCode;
+    @Excel(name = "入院时间", needMerge = true, exportFormat = "yyyy/MM/dd")
+    private Date behospitalDate;
+    @Excel(name = "出院时间", needMerge = true, exportFormat = "yyyy/MM/dd")
+    private Date leaveHospitalDate;
+    @Excel(name = "分数", needMerge = true)
+    private Double score;
+    @Excel(name = "病案首页分数", needMerge = true)
+    private Double scoreBn;
+    @ExcelCollection(name = "")
+    private List<ExportCase_7DTO> exportExcelCaseDTOS;
+
+}

+ 31 - 0
src/main/java/com/diagbot/dto/ExportBehospital_90DTO.java

@@ -0,0 +1,31 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/6/2 19:35
+ */
+@Getter
+@Setter
+public class ExportBehospital_90DTO {
+    @Excel(name = "主管医生", needMerge = true)
+    private String doctorName;
+    @Excel(name = "患者姓名", needMerge = true)
+    private String patName;
+    @Excel(name = "住院号", needMerge = true)
+    private String behospitalCode;
+    @Excel(name = "入院时间", needMerge = true, exportFormat = "yyyy/MM/dd")
+    private Date behospitalDate;
+    @Excel(name = "出院时间", needMerge = true, exportFormat = "yyyy/MM/dd")
+    private Date leaveHospitalDate;
+    @Excel(name = "分数", needMerge = true)
+    private Double score;
+    @Excel(name = "病案首页分数", needMerge = true)
+    private Double scoreBn;
+}

+ 23 - 0
src/main/java/com/diagbot/dto/ExportCase_7DTO.java

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/6/2 19:47
+ */
+@Getter
+@Setter
+public class ExportCase_7DTO {
+    @Excel(name = "模块名称", needMerge = true)
+    private String caseName;
+    @ExcelCollection(name = "")
+    private List<ExportMsg_7DTO> exportExcelMsgDTOS;
+
+}

+ 37 - 0
src/main/java/com/diagbot/dto/ExportDoctorAverageLevel_7DTO.java

@@ -0,0 +1,37 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 医生质控平均分-患者列表(等级)-接口出参
+ * @Author songxl
+ * @Date 2022/4/11 9:20
+ */
+@ApiModel(value = "医生质控平均分-患者列表(等级)-接口出参")
+@Getter
+@Setter
+public class ExportDoctorAverageLevel_7DTO implements Serializable {
+    private static final long serialVersionUID = 4875168077452918044L;
+
+    @ApiModelProperty(value = "科室")
+    @Excel(name = "科室", needMerge = true)
+    private String behDeptName;
+
+    @ApiModelProperty(value = "平均分数")
+    @Excel(name = "平均分数", needMerge = true)
+    private Double avgScore;
+
+    @ApiModelProperty(value = "患者信息集合")
+    @ExcelCollection(name = "")
+    private List<ExportBehospital_7DTO> excelBehospitalDTOS;
+}

+ 36 - 0
src/main/java/com/diagbot/dto/ExportDoctorAverageLevel_90DTO.java

@@ -0,0 +1,36 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 医生质控平均分-患者列表(等级)-接口出参
+ * @Author songxl
+ * @Date 2022/4/11 9:20
+ */
+@ApiModel(value = "医生质控平均分-患者列表(等级)-接口出参")
+@Getter
+@Setter
+public class ExportDoctorAverageLevel_90DTO implements Serializable {
+    private static final long serialVersionUID = 4875168077452918044L;
+
+    @ApiModelProperty(value = "科室")
+    @Excel(name = "科室", needMerge = true)
+    private String behDeptName;
+
+    @Excel(name = "平均分数", needMerge = true)
+    private Double avgScore;
+
+    @ApiModelProperty(value = "科室")
+    @ExcelCollection(name = "" )
+    private List<ExportBehospital_90DTO> excelBehospitalDTOS;
+}

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

@@ -0,0 +1,48 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 医生质控平均分页面统计-导出-接口出参
+ * @Author songxl
+ * @Date 2022/4/8 13:20
+ */
+@ApiModel(value = "医生质控平均分页面统计-导出-接口出参")
+@Getter
+@Setter
+public class ExportDoctorAverageStatisticsDTO implements Serializable {
+    private static final long serialVersionUID = 981655366059103193L;
+
+    @Excel(name = "科室")
+    private String deptName;
+
+
+    @Excel(name = "医生姓名")
+    private String doctorName;
+
+    @Excel(name = "医生工号")
+    private String doctorId;
+
+    @Excel(name = "缺陷总数")
+    private Integer entryNum = 0;
+
+    @Excel(name = "质控平均分")
+    private Double averageValue = 0d;
+
+    @Excel(name = "甲级病历数")
+    private Integer firstLevelStrNum = 0;
+
+    @Excel(name = "乙级病历数")
+    private Integer secondLevelStrNum = 0;
+
+    @Excel(name = "丙级病历数")
+    private Integer thirdLevelStrNum = 0;
+
+
+}

+ 58 - 0
src/main/java/com/diagbot/dto/ExportGetAppealReviewDTO.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.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, exportFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date claimantGmtCreate;
+
+    @Excel(name = "病人住院序号", needMerge = true)
+    private String behospitalCode;
+
+    @Excel(name = "患者姓名", needMerge = true)
+    private String name;
+
+    @Excel(name = "申诉模块", needMerge = true)
+    private String modeName;
+
+    @Excel(name = "缺陷详情", needMerge = true)
+    private String qcresultDetailMsg;
+
+    @Excel(name = "审核人", needMerge = true)
+    private String checkName;
+
+    @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;
+
+}

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

@@ -0,0 +1,57 @@
+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, exportFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date claimantGmtCreate;
+
+    @Excel(name = "病人住院序号", needMerge = true)
+    private String behospitalCode;
+
+    @Excel(name = "患者姓名", needMerge = true)
+    private String name;
+
+    @Excel(name = "申诉模块", needMerge = true)
+    private String modeName;
+
+    @Excel(name = "缺陷详情", needMerge = true)
+    private String qcresultDetailMsg;
+
+    @Excel(name = "审核人", needMerge = true)
+    private String checkName;
+
+    @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;
+}

+ 33 - 0
src/main/java/com/diagbot/dto/ExportGetDoctorDetailPageDTO.java

@@ -0,0 +1,33 @@
+package com.diagbot.dto;
+
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 获取医生缺陷列表出参
+ * @author: zhanghang
+ * @time: 2022/4/11 19:00
+ */
+@ApiModel(value = "获取医生缺陷列表出参-接口出参")
+@Getter
+@Setter
+public class ExportGetDoctorDetailPageDTO implements Serializable {
+
+    @Excel(name = "缺陷名称", width = 40, orderNum = "2")
+    private String name;
+
+    @Excel(name = "模块名称", width = 20, orderNum = "1")
+    private String casesName;
+
+    @Excel(name = "数量", orderNum = "5")
+    private Integer num = 0;
+
+    @Excel(name = "缺陷占比", orderNum = "6")
+    private String percentStr = "0.00%";
+
+}

+ 17 - 0
src/main/java/com/diagbot/dto/ExportMsg_7DTO.java

@@ -0,0 +1,17 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/6/2 19:47
+ */
+@Getter
+@Setter
+public class ExportMsg_7DTO {
+    @Excel(name = "存在问题", isWrap = false)
+    private String msg;
+}

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

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

+ 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 modeId;
+
+    @ApiModelProperty(value = "模块名称")
+    private String modeName;
+
+    @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;
+}

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

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

+ 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 modeName;
+
+    @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;
+
+}

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

@@ -0,0 +1,92 @@
+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 = "申述人ID")
+    private String claimantId;
+
+    @ApiModelProperty(value = "审核人ID")
+    private String checkId;
+
+    @ApiModelProperty(value = "所属科室")
+    private String behDeptName;
+
+    @ApiModelProperty(value = "申述申诉时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    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 modeName;
+
+    @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 = "审核处理方式: 1:修改|2:删除|3:新增已有|4:新增缺失|5:恢复")
+    private String exampleOperation;
+
+    @ApiModelProperty(value = "缺陷扣分分值")
+    private BigDecimal qcresultDetaiValue;
+
+    @ApiModelProperty(value = "模块总分")
+    private BigDecimal casesScore;
+
+    @ApiModelProperty(value = "单项否决(1-单项否决 0-非)")
+    private Integer isReject;
+
+    @ApiModelProperty(value = "模块id")
+    private Long modeId;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}

+ 30 - 0
src/main/java/com/diagbot/dto/GetDefectDeptDTO.java

@@ -0,0 +1,30 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 获取缺陷反馈记录列表-科室下拉框内容
+ * @author: zhanghang
+ * @time: 2022/4/21 10:07
+ */
+@ApiModel(value = "获取缺陷反馈记录列表-科室下拉框内容--接口出参")
+@Getter
+@Setter
+public class GetDefectDeptDTO implements Serializable {
+
+
+    private static final long serialVersionUID = 5216026169810219664L;
+
+    @ApiModelProperty(value = "所属科室ID")
+    private String deptId;
+
+    @ApiModelProperty(value = "所属科室")
+    private String deptName;
+
+}

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

@@ -0,0 +1,28 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 获取缺陷反馈记录列表-缺陷模块下拉框内容
+ * @author: zhanghang
+ * @time: 2022/4/21 10:07
+ */
+@ApiModel(value = "获取缺陷反馈记录列表-缺陷模块下拉框内容--接口出参")
+@Getter
+@Setter
+public class GetDefectModeDTO implements Serializable {
+
+
+    private static final long serialVersionUID = -1264454776862959020L;
+    @ApiModelProperty(value = "模块id")
+    private Long modeId;
+
+    @ApiModelProperty(value = "模块名称")
+    private String modeName;
+
+}

+ 128 - 0
src/main/java/com/diagbot/dto/GetDetailRecordListPageDTO.java

@@ -0,0 +1,128 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 获取医生缺陷数量出参
+ * @Author:zhanghang
+ * @time: 2022/4/11 19:00
+ */
+@ApiModel(value = "获取医生缺陷数量出参-接口出参")
+@Getter
+@Setter
+public class GetDetailRecordListPageDTO implements Serializable {
+
+    @ApiModelProperty(value = "医院id")
+    private String hospitalId;
+
+
+    @ApiModelProperty(value = "病历等级")
+    private String level;
+
+    @ApiModelProperty(value = "病历得分")
+    private Double scoreRes;
+
+    @ApiModelProperty(value = "病案首页得分")
+    private Double scoreBn;
+
+    @ApiModelProperty(value = "病人住院序号")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "病案号")
+    private String fileCode;
+
+    @ApiModelProperty(value = "病人姓名")
+    private String name;
+
+    @ApiModelProperty(value = "性别")
+    private String sex;
+
+    @ApiModelProperty(value = "年龄")
+    private String age;
+
+    @ApiModelProperty(value = "床号")
+    private String bedCode;
+
+    @ApiModelProperty(value = "入院日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date behospitalDate;
+
+    @ApiModelProperty(value = "出院日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date leaveHospitalDate;
+
+    @ApiModelProperty(value = "归档日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date placefileDate;
+
+    @ApiModelProperty(value = "主诊断")
+    private String diagnose;
+
+    @ApiModelProperty(value = "住院医生ID")
+    private String behDoctorId;
+
+
+    @ApiModelProperty(value = "住院医生姓名")
+    private String behDoctorName;
+
+    @ApiModelProperty(value = "主治医生id")
+    private String doctorId;
+
+    @ApiModelProperty(value = "主治医生姓名")
+    private String doctorName;
+
+    @ApiModelProperty(value = "主任医生id")
+    private String directorDoctorId;
+
+    @ApiModelProperty(value = "主任医生")
+    private String directorDoctorName;
+
+    @ApiModelProperty(value = "科室编码")
+    private String behDeptId;
+
+    @Excel(name = "科室", width = 70, orderNum = "17")
+    @ApiModelProperty(value = "科室名称")
+    private String behDeptName;
+
+    @ApiModelProperty(value = "评分时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date gradeTime;
+
+    @ApiModelProperty(value = "评分类型")
+    private Integer gradeType;
+
+    @ApiModelProperty(value = "出生日期")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date birthday;
+
+    @ApiModelProperty(value = "病区名称")
+    private String wardName;
+
+    @ApiModelProperty(value = "病历核查状态")
+    private Integer checkStatus;
+
+    @ApiModelProperty(value = "首页核查状态")
+    private Integer mrStatus;
+
+    @ApiModelProperty(value = "病历核查人员")
+    private String chName;
+
+    @ApiModelProperty(value = "首页核查人员")
+    private String mrName;
+
+    @ApiModelProperty(value = "病历核查时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date chTime;
+
+    @ApiModelProperty(value = "首页核查时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date mrTime;
+}

+ 65 - 0
src/main/java/com/diagbot/dto/GetDoctorDetailPageDTO.java

@@ -0,0 +1,65 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 获取医生缺陷列表
+ * @author: zhanghang
+ * @time: 2022/4/11 19:00
+ */
+@ApiModel(value = "获取医生缺陷列表-接口出参")
+@Getter
+@Setter
+public class GetDoctorDetailPageDTO implements Serializable {
+
+    @ApiModelProperty(value = "条目缺陷id")
+    private Long id;
+
+    @ApiModelProperty(value = "条目缺陷名称")
+    private String name;
+
+    @ApiModelProperty(value = "模块id")
+    private Long casesId;
+
+    @ApiModelProperty(value = "模块名称")
+    private String casesName;
+
+    @ApiModelProperty(value = "科室id")
+    private String deptId;
+
+    @ApiModelProperty(value = "科室名称")
+    private String deptName;
+
+    @ApiModelProperty(value = "条目缺陷总数")
+    private Integer totleNum = 0;
+
+    @ApiModelProperty(value = "条目缺陷数")
+    private Integer num = 0;
+
+    @ApiModelProperty(value = "条目缺陷占比")
+    private Double percent = 0.00d;
+
+    @ApiModelProperty(value = "条目缺陷占比")
+    private String percentStr = "0.00%";
+
+    @ApiModelProperty(value = "条目缺陷分值")
+    private Double score = 0d;
+
+    @ApiModelProperty(value = "单项否决标识,0-否,1-是")
+    private Integer isReject;
+
+    @ApiModelProperty(value = "规则类型(0:无,1:空项,2:错误)")
+    private Integer ruleType;
+
+    @ApiModelProperty(value = "医生ID")
+    private String doctorId;
+
+    @ApiModelProperty(value = "医生名称")
+    private String doctorName;
+
+}

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

@@ -0,0 +1,83 @@
+package com.diagbot.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 获取缺陷反馈列表入参--接口出参
+ * @author: zhanghang
+ * @time: 2022/4/21 10:07
+ */
+@ApiModel(value = "获取缺陷反馈列表入参--接口出参")
+@Getter
+@Setter
+public class GetMedDefectFeedbackPageDTO  implements Serializable {
+
+    private static final long serialVersionUID = -7907298942260577095L;
+    @ApiModelProperty(value = "反馈人编号")
+    private String senderCode;
+
+    @ApiModelProperty(value = "反馈人姓名")
+    private String senderName;
+
+    @ApiModelProperty(value = "所属科室ID")
+    private String deptId;
+
+    @ApiModelProperty(value = "所属科室")
+    private String deptName;
+
+    @ApiModelProperty(value = "反馈时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date gmtCreate;
+
+    @ApiModelProperty(value = "患者姓名")
+    private String name;
+
+    @ApiModelProperty(value = "病人住院序号")
+    private String behospitalCode;
+
+    @ApiModelProperty(value = "患者年龄")
+    private String age;
+
+    @ApiModelProperty(value = "模块ID")
+    private Long modeId;
+
+    @ApiModelProperty(value = "模块名称")
+    private String modeName;
+
+    @ApiModelProperty(value = "条目ID")
+    private Long casesEntryId;
+
+    @ApiModelProperty(value = "提示信息")
+    private String qcresultDetailMsg;
+
+    @ApiModelProperty(value = "反馈说明")
+    private String explainInfo;
+
+    @ApiModelProperty(value = "接收人编号")
+    private String receiverCode;
+
+    @ApiModelProperty(value = "接收人姓名")
+    private String receiverName;
+
+    @ApiModelProperty(value = "抄送人编号")
+    private String ccCodes;
+
+    @ApiModelProperty(value = "抄送人姓名")
+    private String ccNames;
+
+    @ApiModelProperty(value = "操作类型 1:修改|2:删除|3:新增已有|4:新增缺失|5:恢复")
+    private String operationType;
+
+    @ApiModelProperty(value = "状态 0:待确认|1:已确认")
+    private String status;
+
+    @ApiModelProperty(value = "是否归档 0: 未归档|1:已归档")
+    private String isPlacefile ;
+}

+ 45 - 0
src/main/java/com/diagbot/dto/GetNewsNoticeInfoByIdDTO.java

@@ -0,0 +1,45 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 消息通知--查看消息通知详情-接口出参
+ * @Author songxl
+ * @Date 2022/4/12 9:20
+ */
+@ApiModel(value = "消息通知--查看消息通知详情-接口出参")
+@Getter
+@Setter
+public class GetNewsNoticeInfoByIdDTO implements Serializable {
+    private static final long serialVersionUID = -5355822861966823187L;
+
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @ApiModelProperty(value = "标题")
+    private String title;
+
+    @ApiModelProperty(value = "消息")
+    private String news;
+
+    @ApiModelProperty(value = "类型 0:其他,1:质控任务 ")
+    private String type;
+
+    @ApiModelProperty(value = "发送者编号")
+    private String sender;
+
+    @ApiModelProperty(value = "发送者姓名")
+    private String senderName;
+
+    @ApiModelProperty(value = "发送时间")
+    private Date gmtCreate;
+
+    @ApiModelProperty(value = "阅读状态")
+    private String status;
+}

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

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

@@ -0,0 +1,40 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author Wsy
+ * @since 2022-03-09
+ */
+@Getter
+@Setter
+public class MedRecordContentOtherDTO implements Serializable {
+
+    /**
+     * 病历ID
+     */
+    private String recId;
+
+    /**
+     * 文书内容
+     */
+    private String htmlText;
+
+    /**
+     * 创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 修改时间(如果时间是1970年则表示纪录未修改)
+     */
+    private Date gmtModified;
+}

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

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

+ 19 - 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,22 @@ 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;
+
+    @ApiModelProperty(value = "操作类型")
+    private String appealOperationType;
+
+    @ApiModelProperty(value = "审核人")
+    private String reviewer;
+
+    @ApiModelProperty(value = "审核时间")
+    private Date exampleDate;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
 }

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

@@ -0,0 +1,41 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 消息通知--列表页查询-接口出参
+ * @Author songxl
+ * @Date 2022/4/12 9:20
+ */
+@ApiModel(value = "消息通知--列表页查询-接口出参")
+@Getter
+@Setter
+public class NewsNoticePageDTO implements Serializable {
+    private static final long serialVersionUID = -5355822861966823187L;
+
+    @ApiModelProperty(value = "主键")
+    private String id;
+
+    @ApiModelProperty(value = "标题")
+    private String title;
+
+    @ApiModelProperty(value = "类型 0:其他,1:质控任务 ")
+    private String type;
+
+    @ApiModelProperty(value = "发送者编号")
+    private String sender;
+
+    @ApiModelProperty(value = "发送者姓名")
+    private String senderName;
+
+    @ApiModelProperty(value = "发送时间")
+    private String gmtCreate;
+
+    @ApiModelProperty(value = "阅读状态")
+    private String status;
+}

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

@@ -0,0 +1,38 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/12 13:58
+ */
+@Getter
+@Setter
+public class QcCasesHistoryDTO {
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 评分人
+     */
+    private String name;
+
+    /**
+     * 模块总分
+     */
+    private BigDecimal scoreRes;
+
+    /**
+     * 病历等级
+     */
+    private String level;
+
+}

+ 4 - 0
src/main/java/com/diagbot/dto/QcResultShortDTO.java

@@ -2,6 +2,7 @@ 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;
 
@@ -121,4 +122,7 @@ public class QcResultShortDTO {
      */
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date mrTime;
+
+    @ApiModelProperty("是否日间病例,1:是,0:否")
+    private String isDaytime;
 }

+ 5 - 0
src/main/java/com/diagbot/dto/SentEntryRecordDTO.java

@@ -66,4 +66,9 @@ public class SentEntryRecordDTO {
      */
 
     private String checkId;
+
+    /**
+     * 质控条目说明
+     */
+    private String explainInfo;
 }

+ 19 - 0
src/main/java/com/diagbot/dto/his/DoctorHosDTO.java

@@ -0,0 +1,19 @@
+package com.diagbot.dto.his;
+
+import lombok.Data;
+
+@Data
+public class DoctorHosDTO {
+
+    private String userId;
+
+    private String deptCode;
+
+    private String name;
+
+    private String title;
+
+    private String deptName;
+
+    private String job;
+}

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

@@ -158,6 +158,21 @@ public class BehospitalInfo implements Serializable {
      */
     private Date placefileDate;
 
+    /**
+     * R-住院登记I-病房接诊B-出院登记O-出院结算P-预约出院N-无费退院
+     */
+    private String inState;
+
+    /**
+     * 是否日间病例,1:是,0:否
+     */
+    private String isDaytime;
+
+    /**
+     * 是否质控 0:是 1:否(质控规则 24小时内出院,无医嘱,费用为0)
+     */
+    private String isQcType;
+
     /**
      * 是否删除,N:未删除,Y:删除
      */
@@ -439,6 +454,22 @@ public class BehospitalInfo implements Serializable {
         this.modifier = modifier;
     }
 
+    public String getIsDaytime() {
+        return isDaytime;
+    }
+
+    public void setIsDaytime(String isDaytime) {
+        this.isDaytime = isDaytime;
+    }
+
+    public String getIsQcType() {
+        return isQcType;
+    }
+
+    public void setIsQcType(String isQcType) {
+        this.isQcType = isQcType;
+    }
+
     @Override
     public String toString() {
         return "MedBehospitalInfo{" +

+ 6 - 0
src/main/java/com/diagbot/entity/HomeDiagnoseInfo.java

@@ -33,6 +33,12 @@ public class HomeDiagnoseInfo implements Serializable {
      */
     private Long hospitalId;
 
+    /**
+     * 中西医类别(0 西医 1中医)
+     */
+
+    private String chineseWesternType;
+
     /**
      * 诊断序号
      */

+ 112 - 3
src/main/java/com/diagbot/entity/HomePage.java

@@ -89,7 +89,7 @@ public class HomePage implements Serializable {
     private Date birthday;
 
     /**
-     * 年龄(拼接年龄单位)
+     * 年龄
      */
     private String age;
 
@@ -278,16 +278,56 @@ public class HomePage implements Serializable {
      */
     private String behospitalDayNum;
 
+    /**
+     * 治疗类别(1.中医<1.1 中医;1.2 民族医>、2.中西医、3.西医 )
+     */
+    private String treatmentType;
+
     /**
      * 门急诊诊断
      */
     private String outpatientEmrDiagnose;
 
+    /**
+     * 门急诊诊断(中医)
+     */
+    private String outpatientEmrChDiagnose;
+
     /**
      * 门急诊诊断编码
      */
     private String outpatientEmrDiagnoseCode;
 
+    /**
+     * 门急诊诊断编码(中医)
+     */
+    private String outpatientEmrChDiagnoseCode;
+
+    /**
+     * 实施临床路径(1中医、2西医、3否)
+     */
+    private String implementationClinicalPathway;
+
+    /**
+     * 使用医疗机构中药制剂(1是、2否)
+     */
+    private String isChineseMedicinePreparation;
+
+    /**
+     * 使用中医诊疗设备(1是、2否)
+     */
+    private String isChineseDiagnoseEquipment;
+
+    /**
+     * 使用中医诊疗技术(1是 、2否)
+     */
+    private String isChineseDiagnoseTechnology;
+
+    /**
+     * 辩证施护(1是、2否)
+     */
+    private String dialecticalNursing;
+
     /**
      * 损伤中毒因素
      */
@@ -684,12 +724,12 @@ public class HomePage implements Serializable {
     private String isPhysicalRestraint;
 
     /**
-     * 颅脑损伤患者昏迷时间(入院前)
+     * 入院前颅脑损伤患者昏迷时间
      */
     private String tbiBehospitalBeforeTime;
 
     /**
-     * 颅脑损伤患者昏迷时间(入院后)
+     * 入院后颅脑损伤患者昏迷时间
      */
     private String tbiBehospitalAfterTime;
 
@@ -748,4 +788,73 @@ public class HomePage implements Serializable {
      */
     private String isBeInDanger;
 
+    /**
+     * 病例分型
+     */
+    private String medicalRecordType;
+
+    /**
+     * 有无实施重症监护
+     */
+    private String isIntensiveCare;
+
+    /**
+     * 实施重症监护时长
+     */
+    private String intensiveCareLength;
+
+    /**
+     * 实施重症监护天
+     */
+    private String intensiveCareDay;
+
+    /**
+     * 实施重症监护小时
+     */
+    private String intensiveCareHour;
+
+    /**
+     * 实施DRG管理方式
+     */
+    private String drgMangeMode;
+
+    /**
+     * 是否抗生素使用
+     */
+    private String isAntibioticUse;
+
+    /**
+     * 是否细菌培养标本送检
+     */
+    private String isSobcsfe;
+
+    /**
+     * 法定传染病类别
+     */
+    private String legalinfectiousDiseaseType;
+
+    /**
+     * 浸入的组织深度(肿瘤分期T)
+     */
+    private String tumourTStages;
+
+    /**
+     * 淋巴结转移情况(肿瘤分期N)
+     */
+    private String tumourNStages;
+
+    /**
+     * 远处转移情况(肿瘤分期M)
+     */
+    private String tumourMStages;
+
+    /**
+     * 肿瘤分期
+     */
+    private String tumourStages;
+
+    /**
+     * 新生儿Apgar评分
+     */
+    private String newbornApgar;
 }

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

@@ -0,0 +1,103 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 申诉审批表
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2022-01-20
+ */
+@Getter
+@Setter
+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 BigDecimal value;
+
+    /**
+     * 处理结果
+     */
+    private String processResult;
+
+    /**
+     * 驳回理由
+     */
+    private String rejectReason;
+
+    /**
+     * 提示信息
+     */
+    private String msg;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private LocalDateTime gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private LocalDateTime gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    private String 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;
+
+}

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

@@ -0,0 +1,153 @@
+package com.diagbot.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 缺陷反馈表
+ * </p>
+ *
+ * @author songxl
+ * @since 2022-04-21
+ */
+@Getter
+@Setter
+public class MedDefectFeedback implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 住院科室ID
+     */
+    private String deptId;
+
+    /**
+     * 住院科室名称
+     */
+    private String deptName;
+
+    /**
+     * 病人住院ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 姓名
+     */
+    private String name;
+
+    /**
+     * 条目ID
+     */
+    private Long casesEntryId;
+
+    /**
+     * 提示信息
+     */
+    private String qcresultDetailMsg;
+
+    /**
+     * 人工修改分值
+     */
+    private BigDecimal qcresultDetaiScore;
+
+    /**
+     * 模块id
+     */
+    private Long modeId;
+
+    /**
+     * 模块名称
+     */
+    private String modeName;
+
+    /**
+     * 反馈说明
+     */
+    private String explainInfo;
+
+    /**
+     * 操作类型 1:修改|2:删除|3:新增已有|4:新增缺失|5:恢复
+     */
+    private String operationType;
+
+    /**
+     * 发送人编号
+     */
+    private String senderCode;
+
+    /**
+     * 发送人姓名
+     */
+    private String senderName;
+
+    /**
+     * 接收人编号
+     */
+    private String receiverCode;
+
+    /**
+     * 接收人姓名
+     */
+    private String receiverName;
+
+    /**
+     * 抄送人编号集合
+     */
+    private String ccCodes;
+
+    /**
+     * 抄送人姓名集合
+     */
+    private String ccNames;
+
+    /**
+     * 状态 0:待确认|1:已确认
+     */
+    private String status;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+
+}

+ 109 - 0
src/main/java/com/diagbot/entity/MedNewsNotice.java

@@ -0,0 +1,109 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 消息通知表
+ * </p>
+ *
+ * @author songxl
+ * @since 2022-04-12
+ */
+@Getter
+@Setter
+public class MedNewsNotice implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 通知类型,1:质控任务 0:其他
+     */
+    private String type;
+
+    /**
+     * 消息
+     */
+    private String news;
+
+    /**
+     * 阅读状态,0:未读 1:已读
+     */
+    private String status;
+
+    /**
+     * 发送者
+     */
+    private String sender;
+
+    /**
+     * 接收者
+     */
+    private String receiver;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+
+    @Override
+    public String toString() {
+        return "MedNewsNotice{" +
+            "id=" + id +
+            ", hospitalId=" + hospitalId +
+            ", type=" + type +
+            ", news=" + news +
+            ", status=" + status +
+            ", sender=" + sender +
+            ", receiver=" + receiver +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + 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;
+
+}

+ 103 - 0
src/main/java/com/diagbot/entity/his/DoctorHos.java

@@ -0,0 +1,103 @@
+package com.diagbot.entity.his;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2022-04-20
+ */
+@TableName("DOCTOR_HOS")
+public class DoctorHos implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("USER_ID")
+    private String userId;
+
+    @TableField("DEPT_CODE")
+    private String deptCode;
+
+    @TableField("NAME")
+    private String name;
+
+    @TableField("TITLE")
+    private String title;
+
+    @TableField("CERTIFICATE")
+    private String certificate;
+
+    @TableField("DEPT_NAME")
+    private String deptName;
+
+    @TableField("JOB")
+    private String job;
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+    public String getDeptCode() {
+        return deptCode;
+    }
+
+    public void setDeptCode(String deptCode) {
+        this.deptCode = deptCode;
+    }
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+    public String getCertificate() {
+        return certificate;
+    }
+
+    public void setCertificate(String certificate) {
+        this.certificate = certificate;
+    }
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+    public String getJob() {
+        return job;
+    }
+
+    public void setJob(String job) {
+        this.job = job;
+    }
+
+    @Override
+    public String toString() {
+        return "DoctorHos{" +
+            "userId=" + userId +
+            ", deptCode=" + deptCode +
+            ", name=" + name +
+            ", title=" + title +
+            ", certificate=" + certificate +
+            ", deptName=" + deptName +
+            ", job=" + job +
+        "}";
+    }
+}

+ 52 - 0
src/main/java/com/diagbot/entity/operationLog.java

@@ -0,0 +1,52 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 医院科室信息
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+@Data
+public class operationLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 序号
+     */
+    private String id;
+    /**
+     * 操作时间
+     */
+    private String gmtCreate;
+    /**
+     * 操作类型
+     */
+    private String Type;
+    /**
+     * 操作模块
+     */
+    private String module;
+    /**
+     * 操作账号
+     */
+    private String account;
+    /**
+     * IP地址
+     */
+    private String IPAddress;
+    /**
+     * 操作内容
+     */
+    private String content;
+
+
+}

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

+ 48 - 0
src/main/java/com/diagbot/enums/NewsNoticeStatusEnum.java

@@ -0,0 +1,48 @@
+package com.diagbot.enums;
+
+import lombok.Setter;
+
+/**
+ * @Description:消息通知已读未读状态注解
+ * @Author: songxl
+ * @time: 2022/4/12
+ */
+
+public enum NewsNoticeStatusEnum {
+    NEWS_READ("1", "已读"),
+    NEWS_NOT_READ("0", "未读");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    NewsNoticeStatusEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static NewsNoticeStatusEnum getEnum(String key) {
+        for (NewsNoticeStatusEnum item : NewsNoticeStatusEnum.values()) {
+            if (item.key.equals(key)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        NewsNoticeStatusEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
+

+ 48 - 0
src/main/java/com/diagbot/enums/NewsNoticeTypeEnum.java

@@ -0,0 +1,48 @@
+package com.diagbot.enums;
+
+import lombok.Setter;
+
+/**
+ * @Description:消息通知类型注解
+ * @Author: songxl
+ * @time: 2022/4/12
+ */
+
+public enum NewsNoticeTypeEnum {
+    CHECK_NEWS_WORK("1", "质控任务"),
+    OTHER_NEWS_WORK("0", "其他任务");
+
+    @Setter
+    private String key;
+
+    @Setter
+    private String name;
+
+    NewsNoticeTypeEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static NewsNoticeTypeEnum getEnum(String key) {
+        for (NewsNoticeTypeEnum item : NewsNoticeTypeEnum.values()) {
+            if (item.key.equals(key)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        NewsNoticeTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
+

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

+ 243 - 123
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -1,5 +1,6 @@
 package com.diagbot.facade;
 
+import cn.hutool.core.io.resource.ClassPathResource;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
@@ -18,6 +19,7 @@ import com.diagbot.service.impl.MedClickInfoServiceImpl;
 import com.diagbot.service.impl.StrInformedConsentServiceImpl;
 import com.diagbot.util.*;
 import com.diagbot.vo.*;
+import com.fasterxml.jackson.databind.exc.InvalidFormatException;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.commons.lang3.StringUtils;
@@ -28,12 +30,18 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.ParseException;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.diagbot.util.ReadExcelUtils.read2007Xlsx;
+
 /**
  * @Description:
  * @author: zhoutg
@@ -154,7 +162,6 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     QcresultDetailFacade qcresultDetailFacade;
 
 
-
     /**
      * 分页
      *
@@ -234,6 +241,13 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 .eq("hospital_id", getDetailVO.getHospitalId())
                 .eq("behospital_code", getDetailVO.getBehospitalCode()), false
         );
+        //获取住院次数
+        List<BehospitalInfo> behospitalInfos = getBaseMapper().selectList(new QueryWrapper<BehospitalInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", getDetailVO.getHospitalId())
+                .eq("file_code", behospitalInfo.getFileCode())
+        );
+
 
         List<String> paramList = getDetailVO.getParamStr();// 参数列表
 
@@ -246,6 +260,9 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             if (null != homePage && StringUtils.isNotEmpty(homePage.getAge()) && StringUtils.isNotEmpty(homePage.getAgeUnit())) {
                 behosDTO.setAge(homePage.getAge() + homePage.getAgeUnit());
             }
+            if (null != behospitalInfos && ListUtil.isNotEmpty(behospitalInfos)) {
+                behosDTO.setLiveHospitalNum(Integer.valueOf(behospitalInfos.size()));
+            }
             res.put("beHospital", behosDTO);
         }
 
@@ -260,81 +277,13 @@ 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);
+            //添加核查操作是否与申诉状态关联配置
+            if(StringUtil.isBlank(sysHospitalSetFacade.getValue(hospitalId, "check_operation_with_appeal"))){
+                res.put("checkOperationWithAppeal", false);
+            }else{
+                res.put("checkOperationWithAppeal",Boolean.parseBoolean(sysHospitalSetFacade.getValue(hospitalId, "check_operation_with_appeal")));
             }
         }
 
@@ -382,6 +331,107 @@ 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;
+        //        }
+        checkButtonShow(hospitalId, getDetailVO, res);
+        appealButtonShow(hospitalId, getDetailVO, res);
+    }
+
+    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())
+                .orderByDesc("gmt_create"));
+        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);
+        }
+    }
+
     /**
      * 处理数据(公共方法)
      *
@@ -427,7 +477,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         }
 
         Map<String, List<RecordContentDTO>> recMap = EntityUtil.makeEntityListMap(recordContentDTOList, "standModelName");
-//        -------------------------------------文书数据改造开始----------------------------------
+        //        -------------------------------------文书数据改造开始----------------------------------
         // 获取会诊申请单
         List<StrConsultationApply> strConsultationApplyList = strConsultationApplyFacade.list(new QueryWrapper<StrConsultationApply>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -654,7 +704,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 .select("whole_data", "rec_id", "hospital_id")
                 .orderByAsc("rec_date")
         );
-//        -------------------------------------文书数据改造结束----------------------------------
+        //        -------------------------------------文书数据改造结束----------------------------------
         // 获取护理
         List<MedNurse> medNurseList = medNurseFacade.list(new QueryWrapper<MedNurse>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -982,7 +1032,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 null, null);
 
 
-//=========================================
+        //=========================================
     /*    // 会诊记录
         addDataWithKey("会诊", recMap, medrecVoList,
                 Arrays.asList("会诊记录", "会诊结果单", "会诊申请单"));
@@ -996,7 +1046,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         addDataWithKey("转科", recMap, medrecVoList,
                 Arrays.asList("转入记录", "转出记录"));
 */
-//        ==================================
+        //        ==================================
 
         addData("有创操作", recMap, medrecVoList);
 
@@ -1040,14 +1090,14 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
         // 病案首页
         //义乌数据回来还要处理
-//        if(analyzeVO.getHospitalId()==5 && ListUtil.isNotEmpty(recMap.get("病案首页"))){
-//            addDataWithInnerKey("病案首页", recMap, medrecVoList);
-//        }else {
+        //        if(analyzeVO.getHospitalId()==5 && ListUtil.isNotEmpty(recMap.get("病案首页"))){
+        //            addDataWithInnerKey("病案首页", recMap, medrecVoList);
+        //        }else {
         if (homePage != null) {
             addDataWithFirstPage("病案首页", homePage, medrecVoList, dicMap,
                     homePageList, homeOperationInfoList);
         }
-//        }
+        //        }
 
         queryVo.setMedrec(medrecVoList);
         return queryVo;
@@ -1071,14 +1121,14 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         QueryVo queryVo = dealCommonData(hospitalId, analyzeVO);
         queryVo.setUseCrfCache(analyzeVO.isUseCrfCache());
         //已核查抛出以评分
-//        List<MedCheckInfo> medCheckInfos = medCheckInfoFacade.list(new QueryWrapper<MedCheckInfo>()
-//                .eq("is_deleted", IsDeleteEnum.N.getKey())
-//                .eq("hospital_id", analyzeVO.getHospitalId())
-//                .eq("behospital_code", analyzeVO.getBehospitalCode()));
-//        Set<Integer> status = medCheckInfos.stream().map(MedCheckInfo::getStatus).collect(Collectors.toSet());
-//        if (medCheckInfos.size() >= 1 && status.contains(CheckStatusEnum.Enable.getKey()) && analyzeVO.getCheckFlag()) {
-//            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该病例已经核查无需评分!");
-//        }
+        //        List<MedCheckInfo> medCheckInfos = medCheckInfoFacade.list(new QueryWrapper<MedCheckInfo>()
+        //                .eq("is_deleted", IsDeleteEnum.N.getKey())
+        //                .eq("hospital_id", analyzeVO.getHospitalId())
+        //                .eq("behospital_code", analyzeVO.getBehospitalCode()));
+        //        Set<Integer> status = medCheckInfos.stream().map(MedCheckInfo::getStatus).collect(Collectors.toSet());
+        //        if (medCheckInfos.size() >= 1 && status.contains(CheckStatusEnum.Enable.getKey()) && analyzeVO.getCheckFlag()) {
+        //            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该病例已经核查无需评分!");
+        //        }
         //  调用质控接口
         Response<OutputInfo> response = qcServiceClient.extract(queryVo);
         if (response == null || response.getData() == null) {
@@ -1190,7 +1240,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         }
 
         for (MedrecVo medrec : medrecVoList) {
-//            存在标题
+            //            存在标题
             if (key.equals(medrec.getTitle())) {
                 Map<String, Object> keyContent = medrec.getContent();
                 specialContent = JSON.parseObject(JSON.toJSONString(keyContent.get("content")), new TypeReference<Map<String, List<RecordContentDTO>>>() {
@@ -1757,8 +1807,19 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             Map<String, Object> resMap = calScore(outputInfo, codeList, codeToInfoMap, analyzeVO, queryVo.getBehospitalInfo().getIsPlacefile());
             algorithmDTO = (AlgorithmDTO) resMap.get("algorithmDTO");
         }
-
+        QcresultInfo qcresultInfo = qcresultInfoFacade.getOne(new QueryWrapper<QcresultInfo>()
+                .eq("hospital_id", analyzeVO.getHospitalId())
+                .eq("behospital_code", analyzeVO.getBehospitalCode())
+                .eq("is_deleted", IsDeleteEnum.N.getKey()));
+        if (qcresultInfo != null && qcresultInfo.getId() != null) {
+            analyzeVO.setQcresultInfoId(qcresultInfo.getId());
+        }
         List<MsgDTO> msgDTOList = this.getBaseMapper().getForeignMsg(analyzeVO);
+        if (ListUtil.isEmpty(msgDTOList)) {
+            analyzeVO.setQcresultInfoId(null);
+            msgDTOList = this.getBaseMapper().getForeignMsg(analyzeVO);
+        }
+
         if (ListUtil.isNotEmpty(msgDTOList)) {
             msgDTOList.forEach(msgDTO -> {
                 if (StringUtils.isNotEmpty(msgDTO.getInfo()) && StringUtils.isNotEmpty(msgDTO.getInfo().trim()) &&
@@ -1998,15 +2059,15 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             }
         }
         behospitalPageVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
-//        behospitalPageVO.setIsPlacefile("1");
-//        if (null != behospitalPageVO.getStatisticsType()
-//                && null == behospitalPageVO.getLeaveHosDateStart()
-//                && null == behospitalPageVO.getLeaveHosDateEnd()) {
-//            String startDate = filterFacade.getStartDateStr(behospitalPageVO.getStatisticsType(), null);
-//            String endDate = filterFacade.getEndDateStr(behospitalPageVO.getStatisticsType(), null);
-//            behospitalPageVO.setLeaveHosDateStart(DateUtil.parseDate(startDate));
-//            behospitalPageVO.setLeaveHosDateEnd(DateUtil.parseDate(endDate));
-//        }
+        //        behospitalPageVO.setIsPlacefile("1");
+        //        if (null != behospitalPageVO.getStatisticsType()
+        //                && null == behospitalPageVO.getLeaveHosDateStart()
+        //                && null == behospitalPageVO.getLeaveHosDateEnd()) {
+        //            String startDate = filterFacade.getStartDateStr(behospitalPageVO.getStatisticsType(), null);
+        //            String endDate = filterFacade.getEndDateStr(behospitalPageVO.getStatisticsType(), null);
+        //            behospitalPageVO.setLeaveHosDateStart(DateUtil.parseDate(startDate));
+        //            behospitalPageVO.setLeaveHosDateEnd(DateUtil.parseDate(endDate));
+        //        }
     }
 
     public void exportExcelFac(HttpServletResponse response) {
@@ -2346,28 +2407,37 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             if (ListUtil.isNotEmpty(informList)) {
                 informList.forEach(obj ->
                         {
-                            Map<String, String> strMap = new HashMap<>();
-                            strMap.put("使用植入性材料", String.valueOf(obj.get("使用植入性材料")));
-                            StrInformedConsent strInformedConsent = new StrInformedConsent();
-                            strInformedConsent.setHospitalId(analyzeVO.getHospitalId());
-                            strInformedConsent.setBehospitalCode(analyzeVO.getBehospitalCode());
-                            strInformedConsent.setRecId(String.valueOf(obj.get("记录编号")));
-                            strInformedConsent.setRecTitle(String.valueOf(obj.get("病历标题")));
-                            strInformedConsent.setRecType("知情同意书");
-                            strInformedConsent.setContent(JSONObject.toJSONString(strMap));
-                            strInformedConsent.setGmtCreate(new Date());
-                            strInformedConsents.add(strInformedConsent);
-                            recIds.add(String.valueOf(obj.get("记录编号")));
+                            if (obj.containsKey("病历标题")
+                                    && obj.containsKey("记录编号")
+                                    && obj.containsKey("记录编号")
+                                    && obj.containsKey("使用植入性材料")) {
+                                Map<String, String> strMap = new HashMap<>();
+                                strMap.put("使用植入性材料", String.valueOf(obj.get("使用植入性材料")));
+                                StrInformedConsent strInformedConsent = new StrInformedConsent();
+                                strInformedConsent.setHospitalId(analyzeVO.getHospitalId());
+                                strInformedConsent.setBehospitalCode(analyzeVO.getBehospitalCode());
+                                strInformedConsent.setRecId(String.valueOf(obj.get("记录编号")));
+                                strInformedConsent.setRecTitle(String.valueOf(obj.get("病历标题")));
+                                strInformedConsent.setRecType("知情同意书");
+                                strInformedConsent.setContent(JSONObject.toJSONString(strMap));
+                                strInformedConsent.setGmtCreate(new Date());
+                                strInformedConsents.add(strInformedConsent);
+                                recIds.add(String.valueOf(obj.get("记录编号")));
+                            }
                         }
                 );
-                //删除手术知情同意书历史ric_id
-                strInformedConsentServiceImpl.remove(new QueryWrapper<StrInformedConsent>()
-                        .eq("hospital_id", analyzeVO.getHospitalId())
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("behospital_code", analyzeVO.getBehospitalCode())
-                        .in("rec_id", recIds));
-                //新增
-                strInformedConsentServiceImpl.saveBatch(strInformedConsents);
+                if (ListUtil.isNotEmpty(strInformedConsents)) {
+                    //删除手术知情同意书历史ric_id
+                    strInformedConsentServiceImpl.remove(new QueryWrapper<StrInformedConsent>()
+                            .eq("hospital_id", analyzeVO.getHospitalId())
+                            .eq("is_deleted", IsDeleteEnum.N.getKey())
+                            .eq("behospital_code", analyzeVO.getBehospitalCode())
+                            .in("rec_id", recIds));
+                }
+                if (ListUtil.isNotEmpty(strInformedConsents)) {
+                    //新增
+                    strInformedConsentServiceImpl.saveBatch(strInformedConsents);
+                }
             }
         }
         // 手动拼接数据【知情同意书】【谈话告知书】
@@ -2395,6 +2465,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         pageMap.put("检验信息", null);
         // 护理信息
         pageMap.put("护理信息", null);
+        // 其他信息
+        pageMap.put("其他信息", null);
         // 知情同意书 = 【知情同意书】 + 【手术知情同意书】
         pageMap.put("知情同意书", recordDTOList);
         pageMap.put("谈话告知书", recordMap.get(54L));
@@ -2549,6 +2621,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
         return behospitalInfoAgeDTOList;
     }
+
     /**
      * @param analyzeVO
      * @param codeList
@@ -2591,4 +2664,51 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         }
         return qcresultDetails;
     }
+
+    /**
+     * 评分历史
+     * @param historyAnalyzePageVO
+     * @return
+     */
+    public IPage<QcCasesHistoryDTO> getHistoryAnalyze(HistoryAnalyzePageVO historyAnalyzePageVO) {
+        Long hospitalID =Long.valueOf(SysUserUtils.getCurrentHospitalID());
+        historyAnalyzePageVO.setHospitalId(hospitalID);
+        IPage<QcCasesHistoryDTO> medQcresultResultList = qcresultInfoFacade.getMedQcresultResultList(historyAnalyzePageVO);
+        return medQcresultResultList;
+    }
+
+    /**
+     * 操作日志
+     * @param behospitalCode
+     * @throws InvalidFormatException
+     * @throws IOException
+     * @throws ParseException
+     */
+    public List<operationLog> getOperationLog(String behospitalCode){
+/*        String fullFileName = "src\\main\\resources\\操作日志.xlsx";
+        List<operationLog> list = new ArrayList<>();
+        try {
+            InputStream is = new FileInputStream(fullFileName);
+            list = read2007Xlsx(is);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        System.out.println("size==>" + list.size());
+        return list;*/
+        //  获取resource目录下的 41473.xlsx 文件:
+        String resource = "操作日志.xlsx";
+        ClassPathResource classPathResource = new ClassPathResource(resource);
+        List<operationLog> list = null;
+        try {
+            list = read2007Xlsx(classPathResource.getStream());
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return list;
+    }
+
+
+
 }

+ 198 - 0
src/main/java/com/diagbot/facade/ConsoleByDoctorFacade.java

@@ -0,0 +1,198 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.DoctorAverageLevelDTO;
+import com.diagbot.dto.DoctorAverageStatisticsDTO;
+import com.diagbot.dto.ExportExcelDTO;
+import com.diagbot.dto.GetDetailRecordListPageDTO;
+import com.diagbot.dto.GetDoctorDetailPageDTO;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.DoctorAverageLevelVO;
+import com.diagbot.vo.DoctorAverageStatisticsVO;
+import com.diagbot.vo.GetDetailRecordListPageVO;
+import com.diagbot.vo.GetDoctorDetailPageVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description:控制台(医生)统计相关处理
+ * @Author:songxl
+ * @date 2022/4/8 13:20
+ */
+@Component
+public class ConsoleByDoctorFacade {
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+
+    @Autowired
+    QcresultInfoFacade qcresultInfoFacade;
+
+
+    /**
+     * 医生质控平均分页面统计
+     *
+     * @param doctorAverageStatisticsVO
+     * @Return com.baomidou.mybatisplus.core.metadata.IPage<com.diagbot.dto.DoctorAverageStatisticsDTO>
+     */
+    public IPage<DoctorAverageStatisticsDTO> doctorAverageStatistics(DoctorAverageStatisticsVO doctorAverageStatisticsVO) {
+        doctorAverageStatisticsVO.setHospitalId(SysUserUtils.getCurrentHospitalID());
+        //替换
+        transformParam(doctorAverageStatisticsVO);
+        return behospitalInfoFacade.getBaseMapper().doctorAverageStatistics(doctorAverageStatisticsVO);
+    }
+
+    /**
+     * 参数替换
+     *
+     * @param doctorAverageStatisticsVO
+     * @Return void
+     */
+    private void transformParam(DoctorAverageStatisticsVO doctorAverageStatisticsVO) {
+
+        if ("-".equals(doctorAverageStatisticsVO.getDeptId())) {
+            doctorAverageStatisticsVO.setDeptId("-0");
+        }
+        if ("-".equals(doctorAverageStatisticsVO.getDeptName())) {
+            doctorAverageStatisticsVO.setDeptName("-0");
+        }
+        if ("-".equals(doctorAverageStatisticsVO.getDoctorId())) {
+            doctorAverageStatisticsVO.setDoctorId("-0");
+        }
+        if ("-".equals(doctorAverageStatisticsVO.getDoctorName())) {
+            doctorAverageStatisticsVO.setDoctorName("-0");
+        }
+    }
+
+    /**
+     * 医生质控平均分-患者列表(等级)
+     *
+     * @param doctorAverageLevelVO
+     * @Return com.baomidou.mybatisplus.core.metadata.IPage<com.diagbot.dto.DoctorAverageLevelDTO>
+     */
+    public IPage<DoctorAverageLevelDTO> doctorAverageLevelPage(DoctorAverageLevelVO doctorAverageLevelVO) {
+        doctorAverageLevelPageSet(doctorAverageLevelVO);
+        return behospitalInfoFacade.getBaseMapper().doctorAverageLevelPage(doctorAverageLevelVO);
+    }
+
+
+    private void doctorAverageLevelPageSet(DoctorAverageLevelVO doctorAverageLevelVO) {
+        //入参验证
+        //入院时间
+        if (null != doctorAverageLevelVO && null != doctorAverageLevelVO.getBehosDateStart()) {
+            doctorAverageLevelVO.setBehosDateStart(DateUtil.getFirstTimeOfDay(doctorAverageLevelVO.getBehosDateStart()));
+        }
+        if (null != doctorAverageLevelVO && null != doctorAverageLevelVO.getBehosDateEnd()) {
+            doctorAverageLevelVO.setBehosDateEnd(DateUtil.getFirstTimeOfDay(DateUtil.addDay(doctorAverageLevelVO.getBehosDateEnd(), 1)));
+        }
+        if (null != doctorAverageLevelVO && null != doctorAverageLevelVO.getBehosDateStart() && null != doctorAverageLevelVO.getBehosDateEnd()) {
+            if (DateUtil.after(doctorAverageLevelVO.getBehosDateStart(), doctorAverageLevelVO.getBehosDateEnd())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "入院时间的开始时间必须小于结束时间!");
+            }
+        }
+        //出院时间
+        if (null != doctorAverageLevelVO && null != doctorAverageLevelVO.getLeaveHosDateStart()) {
+            doctorAverageLevelVO.setLeaveHosDateStart(DateUtil.getFirstTimeOfDay(doctorAverageLevelVO.getLeaveHosDateStart()));
+        }
+        if (null != doctorAverageLevelVO && null != doctorAverageLevelVO.getLeaveHosDateEnd()) {
+            doctorAverageLevelVO.setLeaveHosDateEnd(DateUtil.getFirstTimeOfDay(DateUtil.addDay(doctorAverageLevelVO.getLeaveHosDateEnd(), 1)));
+        }
+        if (null != doctorAverageLevelVO && null != doctorAverageLevelVO.getLeaveHosDateStart() && null != doctorAverageLevelVO.getLeaveHosDateEnd()) {
+            if (DateUtil.after(doctorAverageLevelVO.getLeaveHosDateStart(), doctorAverageLevelVO.getLeaveHosDateEnd())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "出院时间的开始时间必须小于结束时间!");
+            }
+        }
+        doctorAverageLevelVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
+
+        //医生、科室为空时参数替换
+        if ("-".equals(doctorAverageLevelVO.getDeptId())) {
+            doctorAverageLevelVO.setDeptId("-0");
+        }
+        if ("-".equals(doctorAverageLevelVO.getDeptName())) {
+            doctorAverageLevelVO.setDeptName("-0");
+        }
+        if ("-".equals(doctorAverageLevelVO.getDoctorCode())) {
+            doctorAverageLevelVO.setDoctorCode("-0");
+        }
+        if ("-".equals(doctorAverageLevelVO.getDoctorName())) {
+            doctorAverageLevelVO.setDoctorName("-0");
+        }
+    }
+
+    /**
+     * 获取缺陷列表
+     *
+     * @param getDoctorDetailPageVO
+     * @return
+     */
+    public IPage<GetDoctorDetailPageDTO> getDoctorDetailPage(GetDoctorDetailPageVO getDoctorDetailPageVO) {
+        if ("-".equals(getDoctorDetailPageVO.getDeptId())) {
+            getDoctorDetailPageVO.setDeptId("-0");
+        }
+        if ("-".equals(getDoctorDetailPageVO.getDeptName())) {
+            getDoctorDetailPageVO.setDeptName("-0");
+        }
+        if ("-".equals(getDoctorDetailPageVO.getDoctorId())) {
+            getDoctorDetailPageVO.setDoctorId("-0");
+        }
+        if ("-".equals(getDoctorDetailPageVO.getDoctorName())) {
+            getDoctorDetailPageVO.setDoctorName("-0");
+        }
+        getDoctorDetailPageVO.setHospitalId(SysUserUtils.getCurrentHospitalID());
+        IPage<GetDoctorDetailPageDTO> detailPageList = behospitalInfoFacade.getBaseMapper().getDoctorDetailPage(getDoctorDetailPageVO);
+        return detailPageList;
+    }
+
+    /**
+     * 获取缺陷数量对应的病历
+     *
+     * @param getDetailRecordListPageVO
+     * @return
+     */
+    public IPage<GetDetailRecordListPageDTO> getDetailRecordListPage(GetDetailRecordListPageVO getDetailRecordListPageVO) {
+        if ("-".equals(getDetailRecordListPageVO.getDeptId())) {
+            getDetailRecordListPageVO.setDeptId("-0");
+        }
+        if ("-".equals(getDetailRecordListPageVO.getDeptName())) {
+            getDetailRecordListPageVO.setDeptName("-0");
+        }
+        if ("-".equals(getDetailRecordListPageVO.getDoctorId())) {
+            getDetailRecordListPageVO.setDoctorId("-0");
+        }
+        if ("-".equals(getDetailRecordListPageVO.getDoctorName())) {
+            getDetailRecordListPageVO.setDoctorName("-0");
+        }
+        getDetailRecordListPageVO.setHospitalId(SysUserUtils.getCurrentHospitalID());
+        IPage<GetDetailRecordListPageDTO> detailPageList = behospitalInfoFacade.getBaseMapper().getDetailRecordListPage(getDetailRecordListPageVO);
+        return detailPageList;
+    }
+
+    /**
+     * 导出缺陷数量对应的病历
+     *
+     * @param getDetailRecordListPageVO
+     * @return
+     */
+    public List<ExportExcelDTO> getDetailRecordListExport(GetDetailRecordListPageVO getDetailRecordListPageVO) {
+        if ("-".equals(getDetailRecordListPageVO.getDeptId())) {
+            getDetailRecordListPageVO.setDeptId("-0");
+        }
+        if ("-".equals(getDetailRecordListPageVO.getDeptName())) {
+            getDetailRecordListPageVO.setDeptName("-0");
+        }
+        if ("-".equals(getDetailRecordListPageVO.getDoctorId())) {
+            getDetailRecordListPageVO.setDoctorId("-0");
+        }
+        if ("-".equals(getDetailRecordListPageVO.getDoctorName())) {
+            getDetailRecordListPageVO.setDoctorName("-0");
+        }
+        getDetailRecordListPageVO.setHospitalId(SysUserUtils.getCurrentHospitalID());
+        List<ExportExcelDTO> detailPageList = behospitalInfoFacade.getBaseMapper().getDetailRecordListExport(getDetailRecordListPageVO);
+        return detailPageList;
+    }
+
+}

+ 250 - 71
src/main/java/com/diagbot/facade/ConsoleExportFacade.java

@@ -19,8 +19,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 
 /**
- * @Description: 报表导出装饰层
- * @author: gaodm
+ * @Description: 控制台(医生)统计相关API
+ * @author: zhanghang
  * @time: 2020/6/18 10:41
  */
 @Component
@@ -34,6 +34,8 @@ public class ConsoleExportFacade {
     private SysHospitalSetFacade sysHospitalSetFacade;
     @Autowired
     private FilterFacade filterFacade;
+    @Autowired
+    private ConsoleByDoctorFacade consoleByDoctorFacade;
 
     /**
      * 病案首页合格率占比
@@ -88,7 +90,7 @@ public class ConsoleExportFacade {
         filterVO.setSize(Long.MAX_VALUE);
         filterVO.setSearchCount(false);
         String fileName = null;
-        if ( "1".equals(filterVO.getIsPlacefile())) {
+        if ("1".equals(filterVO.getIsPlacefile())) {
             fileName = "终末病历稽查表.xls";
         } else {
             fileName = "运行病历稽查表.xls";
@@ -212,7 +214,6 @@ public class ConsoleExportFacade {
     }
 
 
-
     /**
      * 各模块缺陷占比导出
      *
@@ -323,7 +324,7 @@ public class ConsoleExportFacade {
         long interval_7 = 7 * 24 * 60 * 60 * 1000;
         long interval_90 = 90 * 24 * 60 * 60 * 1000l;
 
-        if("1".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("1".equals(qcResultShortPageVO.getRadioCheck())) {
             //时间间隔7天
             if (endDate.getTime() < startDate.getTime()) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
@@ -331,7 +332,7 @@ public class ConsoleExportFacade {
             if (endDate.getTime() - startDate.getTime() > interval_7) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于7天");
             }
-        }else{
+        } else {
             //时间间隔90天
             if (endDate.getTime() < startDate.getTime()) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
@@ -346,27 +347,27 @@ public class ConsoleExportFacade {
         qcResultShortPageVO.setSearchCount(false);
         List<ExportExcelDTO> records = behospitalInfoFacade.leaveHosMRPageExport(qcResultShortPageVO);
         List<ExportWideExcelDTO> resWide = new ArrayList<ExportWideExcelDTO>();
-        if("2".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("2".equals(qcResultShortPageVO.getRadioCheck())) {
             resWide = transList(records, resWide);
         }
         String fileName = "出院人数统计.xls";
-          if("1".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("1".equals(qcResultShortPageVO.getRadioCheck())) {
             ExcelUtils.exportExcelUser(records, null, "sheet1", ExportExcelDTO.class, fileName, response);
         }
-        if("2".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("2".equals(qcResultShortPageVO.getRadioCheck())) {
             ExcelUtils.exportExcelUser(resWide, null, "sheet1", ExportWideExcelDTO.class, fileName, response);
         }
     }
 
-    public List<ExportWideExcelDTO> transList(List<ExportExcelDTO>res, List<ExportWideExcelDTO>resWide){
-        if(ListUtil.isNotEmpty(res)){
-            res.forEach(exportExcelDTO->{
+    public List<ExportWideExcelDTO> transList(List<ExportExcelDTO> res, List<ExportWideExcelDTO> resWide) {
+        if (ListUtil.isNotEmpty(res)) {
+            res.forEach(exportExcelDTO -> {
                 ExportWideExcelDTO exportWideExcelDTO = new ExportWideExcelDTO();
                 exportWideExcelDTO.setAvgScore(exportExcelDTO.getAvgScore());
                 exportWideExcelDTO.setBehDeptName(exportExcelDTO.getBehDeptName());
                 List<ExportExcelBehospitalDTO> excelBehospitalDTOS = exportExcelDTO.getExcelBehospitalDTOS();
                 List<ExportExcelWideBehospitalDTO> exportExcelWideBehospitalDTOs = new ArrayList<>();
-                excelBehospitalDTOS.forEach(exportExcelBehospitalDTO->{
+                excelBehospitalDTOS.forEach(exportExcelBehospitalDTO -> {
                     ExportExcelWideBehospitalDTO exportExcelWideBehospitalDTO = new ExportExcelWideBehospitalDTO();
                     exportExcelWideBehospitalDTO.setDoctorName(exportExcelBehospitalDTO.getDoctorName());
                     exportExcelWideBehospitalDTO.setBehospitalCode(exportExcelBehospitalDTO.getBehospitalCode());
@@ -447,7 +448,7 @@ public class ConsoleExportFacade {
         long interval_7 = 7 * 24 * 60 * 60 * 1000;
         long interval_90 = 90 * 24 * 60 * 60 * 1000l;
 
-        if("1".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("1".equals(qcResultShortPageVO.getRadioCheck())) {
             //时间间隔7天
             if (endDate.getTime() < startDate.getTime()) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
@@ -455,7 +456,7 @@ public class ConsoleExportFacade {
             if (endDate.getTime() - startDate.getTime() > interval_7) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于7天");
             }
-        }else{
+        } else {
             //时间间隔90天
             if (endDate.getTime() < startDate.getTime()) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
@@ -470,22 +471,22 @@ public class ConsoleExportFacade {
         qcResultShortPageVO.setSearchCount(false);
         List<ExportExcelDTO> records = behospitalInfoFacade.badLevelPagePageExport(qcResultShortPageVO);
         List<ExportWideExcelDTO> resWide = new ArrayList<ExportWideExcelDTO>();
-        if("2".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("2".equals(qcResultShortPageVO.getRadioCheck())) {
             resWide = transList(records, resWide);
         }
         String fileName = null;
-        if("不合格数".equals(qcResultShortPageVO.getTitleName())){
+        if ("不合格数".equals(qcResultShortPageVO.getTitleName())) {
             fileName = "病案首页不合格数病历详情页.xls";
-        }else{
+        } else {
             fileName = "病案首页合格数病历详情页.xls";
         }
-        if("1".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("1".equals(qcResultShortPageVO.getRadioCheck())) {
             ExcelUtils.exportExcelUser(records, null, "sheet1", ExportExcelDTO.class, fileName, response);
         }
-        if("2".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("2".equals(qcResultShortPageVO.getRadioCheck())) {
             ExcelUtils.exportExcelUser(resWide, null, "sheet1", ExportWideExcelDTO.class, fileName, response);
         }
-   }
+    }
 
     /**
      * 病案首页不合格/合格数-XY
@@ -506,7 +507,7 @@ public class ConsoleExportFacade {
         long interval_7 = 7 * 24 * 60 * 60 * 1000;
         long interval_90 = 90 * 24 * 60 * 60 * 1000l;
 
-        if("1".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("1".equals(qcResultShortPageVO.getRadioCheck())) {
             //时间间隔7天
             if (endDate.getTime() < startDate.getTime()) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
@@ -514,7 +515,7 @@ public class ConsoleExportFacade {
             if (endDate.getTime() - startDate.getTime() > interval_7) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于7天");
             }
-        }else{
+        } else {
             //时间间隔90天
             if (endDate.getTime() < startDate.getTime()) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
@@ -529,19 +530,19 @@ public class ConsoleExportFacade {
         qcResultShortPageVO.setSearchCount(false);
         List<ExportExcelDTO> records = behospitalInfoFacade.getBaseMapper().badLevelPageXYExport(qcResultShortPageVO);
         List<ExportWideExcelDTO> resWide = new ArrayList<ExportWideExcelDTO>();
-        if("2".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("2".equals(qcResultShortPageVO.getRadioCheck())) {
             resWide = transList(records, resWide);
         }
         String fileName = null;
-        if("不合格数".equals(qcResultShortPageVO.getTitleName())){
+        if ("不合格数".equals(qcResultShortPageVO.getTitleName())) {
             fileName = "病案首页不合格数病历详情页.xls";
-        }else{
+        } else {
             fileName = "病案首页合格数病历详情页.xls";
         }
-        if("1".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("1".equals(qcResultShortPageVO.getRadioCheck())) {
             ExcelUtils.exportExcelUser(records, null, "sheet1", ExportExcelDTO.class, fileName, response);
         }
-        if("2".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("2".equals(qcResultShortPageVO.getRadioCheck())) {
             ExcelUtils.exportExcelUser(resWide, null, "sheet1", ExportWideExcelDTO.class, fileName, response);
         }
     }
@@ -614,7 +615,7 @@ public class ConsoleExportFacade {
     public void hmImproveMRPageExport(HttpServletResponse response, QcResultShortPageVO qcResultShortPageVO) {
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         qcResultShortPageVO.setHospitalId(hospitalId);
-    if (StringUtil.isNotBlank(qcResultShortPageVO.getDeptName())
+        if (StringUtil.isNotBlank(qcResultShortPageVO.getDeptName())
                 && qcResultShortPageVO.getDeptName().equals("全部")) {
             qcResultShortPageVO.setDeptName("");
         }
@@ -624,7 +625,7 @@ public class ConsoleExportFacade {
         long interval_7 = 7 * 24 * 60 * 60 * 1000;
         long interval_90 = 90 * 24 * 60 * 60 * 1000l;
 
-        if("1".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("1".equals(qcResultShortPageVO.getRadioCheck())) {
             //时间间隔7天
             if (endDate.getTime() < startDate.getTime()) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
@@ -632,7 +633,7 @@ public class ConsoleExportFacade {
             if (endDate.getTime() - startDate.getTime() > interval_7) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于7天");
             }
-        }else{
+        } else {
             //时间间隔90天
             if (endDate.getTime() < startDate.getTime()) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
@@ -647,14 +648,14 @@ public class ConsoleExportFacade {
         qcResultShortPageVO.setSearchCount(false);
         List<ExportExcelDTO> records = behospitalInfoFacade.hmImproveMRPageExport(qcResultShortPageVO);
         List<ExportWideExcelDTO> resWide = new ArrayList<ExportWideExcelDTO>();
-        if("2".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("2".equals(qcResultShortPageVO.getRadioCheck())) {
             resWide = transList(records, resWide);
         }
         String fileName = "病案首页改善率评分病历导出.xls";
-        if("1".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("1".equals(qcResultShortPageVO.getRadioCheck())) {
             ExcelUtils.exportExcelUser(records, null, "sheet1", ExportExcelDTO.class, fileName, response);
         }
-        if("2".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("2".equals(qcResultShortPageVO.getRadioCheck())) {
             ExcelUtils.exportExcelUser(resWide, null, "sheet1", ExportWideExcelDTO.class, fileName, response);
         }
     }
@@ -679,7 +680,7 @@ public class ConsoleExportFacade {
         long interval_7 = 7 * 24 * 60 * 60 * 1000;
         long interval_90 = 90 * 24 * 60 * 60 * 1000l;
 
-        if("1".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("1".equals(qcResultShortPageVO.getRadioCheck())) {
             //时间间隔7天
             if (endDate.getTime() < startDate.getTime()) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
@@ -687,7 +688,7 @@ public class ConsoleExportFacade {
             if (endDate.getTime() - startDate.getTime() > interval_7) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于7天");
             }
-        }else{
+        } else {
             //时间间隔90天
             if (endDate.getTime() < startDate.getTime()) {
                 throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
@@ -702,14 +703,14 @@ public class ConsoleExportFacade {
         qcResultShortPageVO.setSearchCount(false);
         List<ExportExcelDTO> records = behospitalInfoFacade.qcCheckMRPageExport(qcResultShortPageVO);
         List<ExportWideExcelDTO> resWide = new ArrayList<ExportWideExcelDTO>();
-        if("2".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("2".equals(qcResultShortPageVO.getRadioCheck())) {
             resWide = transList(records, resWide);
         }
         String fileName = "质控核查病历导出.xls";
-        if("1".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("1".equals(qcResultShortPageVO.getRadioCheck())) {
             ExcelUtils.exportExcelUser(records, null, "sheet1", ExportExcelDTO.class, fileName, response);
         }
-        if("2".equals(qcResultShortPageVO.getRadioCheck())){
+        if ("2".equals(qcResultShortPageVO.getRadioCheck())) {
             ExcelUtils.exportExcelUser(resWide, null, "sheet1", ExportWideExcelDTO.class, fileName, response);
         }
     }
@@ -725,21 +726,21 @@ public class ConsoleExportFacade {
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         behospitalPageVO.setHospitalId(Long.valueOf(hospitalId));
 
-    Date startDate = behospitalPageVO.getLeaveHosDateStart();
-    Date endDate = behospitalPageVO.getLeaveHosDateEnd();
-    //时间间隔30天
-    long interval = 30 * 24l * 60l * 60l * 1000l;
+        Date startDate = behospitalPageVO.getLeaveHosDateStart();
+        Date endDate = behospitalPageVO.getLeaveHosDateEnd();
+        //时间间隔30天
+        long interval = 30 * 24l * 60l * 60l * 1000l;
         if (endDate.getTime() < startDate.getTime()) {
-        throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
-    }
+            throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
+        }
         if (endDate.getTime() - startDate.getTime() > interval) {
-        throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于30天");
-    }
+            throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于30天");
+        }
 
         behospitalPageVO.setCurrent(1L);
         behospitalPageVO.setSize(Long.MAX_VALUE);
         behospitalPageVO.setSearchCount(false);
-      //  orderMethod(behospitalPageVO);
+        //  orderMethod(behospitalPageVO);
 
         IPage<QualityControlDTO> page = consoleFacade.getQualityControlExport(behospitalPageVO);
         List<QualityControlDTO> records = page.getRecords();
@@ -748,27 +749,205 @@ public class ConsoleExportFacade {
         ExcelUtils.exportExcel(records, "病历质控报表", "sheet1", QualityControlDTO.class, fileName, response, 26.8f);
     }
 
-   static void orderMethod(BehospitalPageVO behospitalPageVO){
-       List orders = behospitalPageVO.getOrders();
-       Boolean flag= false;
-       List<OrderItem> itemList = new ArrayList<>();
-       for (Object order : orders) {
-           ObjectMapper objectMapper = new ObjectMapper();
-           OrderItem orderName = objectMapper.convertValue(order, OrderItem.class);
-           itemList.add(orderName);
-           if(!orderName.getColumn().equals("deptName")){
-               flag = true;
-           }
-       }
-       //科室作为第一升序排列,传入排序随后 配合excel注解属性mergeVertical处理科室合并
-       if(flag){
-           OrderItem orderItem = new OrderItem();
-           orderItem.setAsc(true);
-           orderItem.setColumn("deptName");
-           itemList.add(orderItem);
-           Collections.reverse(itemList);
-           behospitalPageVO.setOrders(itemList);
-       }
-
-   };
+    static void orderMethod(BehospitalPageVO behospitalPageVO) {
+        List orders = behospitalPageVO.getOrders();
+        Boolean flag = false;
+        List<OrderItem> itemList = new ArrayList<>();
+        for (Object order : orders) {
+            ObjectMapper objectMapper = new ObjectMapper();
+            OrderItem orderName = objectMapper.convertValue(order, OrderItem.class);
+            itemList.add(orderName);
+            if (!orderName.getColumn().equals("deptName")) {
+                flag = true;
+            }
+        }
+        //科室作为第一升序排列,传入排序随后 配合excel注解属性mergeVertical处理科室合并
+        if (flag) {
+            OrderItem orderItem = new OrderItem();
+            orderItem.setAsc(true);
+            orderItem.setColumn("deptName");
+            itemList.add(orderItem);
+            Collections.reverse(itemList);
+            behospitalPageVO.setOrders(itemList);
+        }
+
+    }
+
+    ;
+
+    /**
+     * 医生质控平均分页面统计-导出
+     *
+     * @param response
+     * @param doctorAverageStatisticsVO
+     * @Return void
+     */
+    public void doctorAverageStatisticsExport(HttpServletResponse response, DoctorAverageStatisticsVO doctorAverageStatisticsVO) {
+        //1.查询
+        doctorAverageStatisticsVO.setSize(9999999);
+        IPage<DoctorAverageStatisticsDTO> page = consoleByDoctorFacade.doctorAverageStatistics(doctorAverageStatisticsVO);
+        //2.列表拷贝
+        List<ExportDoctorAverageStatisticsDTO> records = BeanUtil.listCopyTo(page.getRecords(), ExportDoctorAverageStatisticsDTO.class);
+        //3.导出
+        String fileName = "医生质控平均分.xls";
+        ExcelUtils.exportExcel(records, null, "sheet1", ExportDoctorAverageStatisticsDTO.class, fileName, response);
+    }
+
+    /**
+     * 医生质控平均分-患者列表(等级)-导出
+     *
+     * @param response
+     * @param exportDoctorAverageLevelVO
+     * @Return void
+     */
+    public void doctorAverageLevelExport(HttpServletResponse response, ExportDoctorAverageLevelVO exportDoctorAverageLevelVO) {
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        exportDoctorAverageLevelVO.setHospitalId(Long.parseLong(hospitalId));
+        //时间设置
+        exportQcresultVOSet(exportDoctorAverageLevelVO);
+        List<ExportDoctorAverageLevel_7DTO> res = behospitalInfoFacade.getBaseMapper().doctorAverageLevelExport(exportDoctorAverageLevelVO);
+        List<ExportDoctorAverageLevel_90DTO> resWide = new ArrayList<>();
+        if ("2".equals(exportDoctorAverageLevelVO.getRadioCheck())) {
+            resWide = doctorAveragetransList(res, resWide);
+        }
+        String fileName = "抽查住院病历质量情况.xls";
+        response.setContentType("text/html;charset=UTF-8");
+        if ("1".equals(exportDoctorAverageLevelVO.getRadioCheck())) {
+            ExcelUtils.exportExcelUser(res, null, "sheet1", ExportDoctorAverageLevel_7DTO.class, fileName, response);
+        }
+        if ("2".equals(exportDoctorAverageLevelVO.getRadioCheck())) {
+            ExcelUtils.exportExcelUser(resWide, null, "sheet1", ExportDoctorAverageLevel_90DTO.class, fileName, response);
+        }
+    }
+
+    public List<ExportDoctorAverageLevel_90DTO> doctorAveragetransList(List<ExportDoctorAverageLevel_7DTO> res, List<ExportDoctorAverageLevel_90DTO> resWide) {
+        if (ListUtil.isNotEmpty(res)) {
+            res.forEach(exportExcelDTO -> {
+                ExportDoctorAverageLevel_90DTO exportWideExcelDTO = new ExportDoctorAverageLevel_90DTO();
+                exportWideExcelDTO.setAvgScore(exportExcelDTO.getAvgScore());
+                exportWideExcelDTO.setBehDeptName(exportExcelDTO.getBehDeptName());
+                List<ExportBehospital_7DTO> excelBehospitalDTOS = exportExcelDTO.getExcelBehospitalDTOS();
+                List<ExportBehospital_90DTO> exportExcelWideBehospitalDTOs = new ArrayList<>();
+                excelBehospitalDTOS.forEach(exportExcelBehospitalDTO -> {
+                    ExportBehospital_90DTO exportBehospital_90DTO = new ExportBehospital_90DTO();
+                    exportBehospital_90DTO.setDoctorName(exportExcelBehospitalDTO.getDoctorName());
+                    exportBehospital_90DTO.setBehospitalCode(exportExcelBehospitalDTO.getBehospitalCode());
+                    exportBehospital_90DTO.setBehospitalDate(exportExcelBehospitalDTO.getBehospitalDate());
+                    exportBehospital_90DTO.setLeaveHospitalDate(exportExcelBehospitalDTO.getLeaveHospitalDate());
+                    exportBehospital_90DTO.setPatName(exportExcelBehospitalDTO.getPatName());
+                    exportBehospital_90DTO.setScore(exportExcelBehospitalDTO.getScore());
+                    exportBehospital_90DTO.setScoreBn(exportExcelBehospitalDTO.getScoreBn());
+                    exportExcelWideBehospitalDTOs.add(exportBehospital_90DTO);
+                });
+                exportWideExcelDTO.setExcelBehospitalDTOS(exportExcelWideBehospitalDTOs);
+                resWide.add(exportWideExcelDTO);
+            });
+        }
+        return resWide;
+    }
+
+    private void exportQcresultVOSet(ExportDoctorAverageLevelVO doctorAverageLevelVO) {
+        //入参验证
+        long interval_7 = 7 * 24 * 60 * 60 * 1000;
+        long interval_90 = 90 * 24 * 60 * 60 * 1000l;
+        //入院时间
+        if (null != doctorAverageLevelVO && null != doctorAverageLevelVO.getBehosDateStart() && null != doctorAverageLevelVO.getBehosDateEnd()) {
+            Date startDate = doctorAverageLevelVO.getBehosDateStart();
+            Date endDate = doctorAverageLevelVO.getBehosDateEnd();
+            if ("1".equals(doctorAverageLevelVO.getRadioCheck())) {
+                //时间间隔7天
+                if (endDate.getTime() < startDate.getTime()) {
+                    throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
+                }
+                if (endDate.getTime() - startDate.getTime() > interval_7) {
+                    throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于7天");
+                }
+            } else {
+                //时间间隔90天
+                if (endDate.getTime() < startDate.getTime()) {
+                    throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
+                }
+                if (endDate.getTime() - startDate.getTime() > interval_90) {
+                    throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于90天");
+                }
+            }
+            doctorAverageLevelVO.setBehosDateStart(DateUtil.getFirstTimeOfDay(doctorAverageLevelVO.getBehosDateStart()));
+            doctorAverageLevelVO.setBehosDateEnd(DateUtil.getFirstTimeOfDay(DateUtil.addDay(doctorAverageLevelVO.getBehosDateEnd(), 1)));
+        }
+        //出院时间
+        if (null != doctorAverageLevelVO && null != doctorAverageLevelVO.getLeaveHosDateStart() && null != doctorAverageLevelVO.getLeaveHosDateEnd()) {
+            Date startDate = doctorAverageLevelVO.getLeaveHosDateStart();
+            Date endDate = doctorAverageLevelVO.getLeaveHosDateEnd();
+            if ("1".equals(doctorAverageLevelVO.getRadioCheck())) {
+                //时间间隔7天
+                if (endDate.getTime() < startDate.getTime()) {
+                    throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
+                }
+                if (endDate.getTime() - startDate.getTime() > interval_7) {
+                    throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于7天");
+                }
+            } else {
+                //时间间隔90天
+                if (endDate.getTime() < startDate.getTime()) {
+                    throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
+                }
+                if (endDate.getTime() - startDate.getTime() > interval_90) {
+                    throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于90天");
+                }
+            }
+            doctorAverageLevelVO.setLeaveHosDateStart(DateUtil.getFirstTimeOfDay(doctorAverageLevelVO.getLeaveHosDateStart()));
+            doctorAverageLevelVO.setLeaveHosDateEnd(DateUtil.getFirstTimeOfDay(DateUtil.addDay(doctorAverageLevelVO.getLeaveHosDateEnd(), 1)));
+        }
+    }
+
+    /**
+     * 医生质控缺陷列表-导出
+     *
+     * @param response
+     * @param getDetailListPageVO
+     * @Return void
+     */
+    public void getDoctorDetailPageExport(HttpServletResponse response, GetDoctorDetailPageVO getDetailListPageVO) {
+        //1.查询
+        getDetailListPageVO.setSize(Long.MAX_VALUE);
+        IPage<GetDoctorDetailPageDTO> doctorDetailPage = consoleByDoctorFacade.getDoctorDetailPage(getDetailListPageVO);
+        //2.列表拷贝
+        List<ExportGetDoctorDetailPageDTO> records = BeanUtil.listCopyTo(doctorDetailPage.getRecords(), ExportGetDoctorDetailPageDTO.class);
+        //3.导出
+        String fileName = "医生缺陷列表.xls";
+        response.setContentType("text/html;charset=UTF-8");
+        ExcelUtils.exportExcelUser(records, null, "sheet1", ExportGetDoctorDetailPageDTO.class, fileName, response);
+    }
+
+    /**
+     * 缺陷数量对应的病历-导出
+     *
+     * @param response
+     * @param getDetailRecordListPageVO
+     * @Return void
+     */
+    public void getDetailRecordListPageExport(HttpServletResponse response, GetDetailRecordListPageVO getDetailRecordListPageVO) {
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        getDetailRecordListPageVO.setHospitalId(hospitalId);
+        if (StringUtil.isNotBlank(getDetailRecordListPageVO.getDeptName())
+                && getDetailRecordListPageVO.getDeptName().equals("全部")) {
+            getDetailRecordListPageVO.setDeptName("");
+        }
+        Date startDate = getDetailRecordListPageVO.getStartDate();
+        Date endDate = getDetailRecordListPageVO.getEndDate();
+        //时间间隔90天
+        long interval = 90 * 24l * 60l * 60l * 1000l;
+        if (endDate.getTime() < startDate.getTime()) {
+            throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
+        }
+        if (endDate.getTime() - startDate.getTime() > interval) {
+            throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于90天");
+        }
+        getDetailRecordListPageVO.setSize(Long.MAX_VALUE);
+        //1.查询
+        List<ExportExcelDTO> detailRecordListExport = consoleByDoctorFacade.getDetailRecordListExport(getDetailRecordListPageVO);
+        String fileName = "缺陷病历信息.xls";
+        response.setContentType("text/html;charset=UTF-8");
+        ExcelUtils.exportExcelUser(detailRecordListExport, null, "sheet1", ExportExcelDTO.class, fileName, response);
+    }
 }

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

@@ -590,6 +590,7 @@ public class DataAnalysisFacade {
         behospitalInfoDTO.setBehDoctorName(behospitalCodeDetail.getDoctorName());
         behospitalInfoDTO.setBehDeptName(entryDefectImproveInner.getBehDeptName());
         behospitalInfoDTO.setGradeTime(behospitalCodeDetail.getGradeTime());
+        behospitalInfoDTO.setIsDaytime(behospitalCodeDetail.getIsDaytime());
         behospitalInfoDTOS.add(behospitalInfoDTO);
         return behospitalInfoDTOS;
     }

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

@@ -0,0 +1,310 @@
+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.MedAppealExamineInfoServiceClientFacade;
+import com.diagbot.dto.AnalyzeDTO;
+
+import com.diagbot.dto.ExportGetAppealReviewDTO;
+import com.diagbot.dto.ExportGetComplaintRecordDTO;
+import com.diagbot.dto.GetAppealReviewDTO;
+import com.diagbot.dto.GetComplaintRecordDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.MedAppealExamineInfo;
+import com.diagbot.entity.MedAppealInfo;
+
+import com.diagbot.entity.QcCasesEntry;
+import com.diagbot.entity.QcresultDetail;
+import com.diagbot.enums.ExampleOperationEnum;
+import com.diagbot.enums.ExampleStatusEnum;
+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.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.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;
+    @Autowired
+    private QcCasesEntryFacade qcCasesEntryFacade;
+
+    /**
+     * 审核通过
+     *
+     * @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();
+        Long modeId = approvedVo.getModeId();
+        if (modeId != null) {
+            QcCasesEntry qcCasesEntry = qcCasesEntryFacade.getOne(new QueryWrapper<QcCasesEntry>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("mode_id", modeId)
+                    .groupBy("mode_id")
+            );
+            if(qcCasesEntry!=null) {
+                qcResultAlgVO.setCasesId(qcCasesEntry.getCasesId());
+            }
+        }
+        //获取处理方式
+        String handling = approvedVo.getExampleOperation();
+        if (StringUtil.isNotEmpty(handling) && handling.equals(ExampleOperationEnum.UP_OR_DEL.getKey())) {
+            QcresultDetail detail = getQcresultDetail(approvedVo);
+            if (detail == null) {
+                throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "该条目已删除,无法进行审核操作,请走驳回流程。");
+            }
+            //调用删除接口
+            qcresultVO.setDelStatus(0);
+            qcresultVO.setType(4);
+            qcResultAlgVO.setId(detail.getId());
+            qcresultVO.setOptResultAlgVO(qcResultAlgVO);
+            AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
+            if (analyzeDTORespDTO.getIsSuccess()) {
+                approvedVo.setQcresultDetailId(detail.getId());
+                Boolean appealInfo = updateAppealInfo(approvedVo);
+                MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
+                medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.UP_OR_DEL.getKey());
+                medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
+                medAppealExamineInfo.setMsg(qcresultVO.getOptResultAlgVO().getMsg());
+                medAppealExamineInfo.setValue(qcresultVO.getOptResultAlgVO().getScore());
+                medAppealExamineInfo.setGmtCreate(dateTime);
+                medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
+                boolean update = this.update(medAppealExamineInfo, new UpdateWrapper<MedAppealExamineInfo>()
+                        .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())) {
+            QcresultDetail detail = getQcresultDetail(approvedVo);
+            if (detail == null) {
+                throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "该条目已删除,无法进行审核操作,请走驳回流程。");
+            }
+            //调用修改接口
+            qcresultVO.setType(3);
+            qcResultAlgVO.setId(detail.getId());
+            qcresultVO.setOptResultAlgVO(qcResultAlgVO);
+            AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
+            if (analyzeDTORespDTO.getIsSuccess()) {
+                Boolean appealInfo = updateAppealInfo(approvedVo);
+                MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
+                medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.UP_OR_UP.getKey());
+                medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
+                medAppealExamineInfo.setMsg(qcresultVO.getOptResultAlgVO().getMsg());
+                medAppealExamineInfo.setValue(qcresultVO.getOptResultAlgVO().getScore());
+                medAppealExamineInfo.setGmtCreate(dateTime);
+                medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
+                boolean update = this.update(medAppealExamineInfo, new UpdateWrapper<MedAppealExamineInfo>()
+                        .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 = getQcresultDetail(approvedVo);
+            if (qcresultDetail != null) {
+                throw new CommonException(CommonErrorCode.IS_EXISTS, "该条目已存在,无法新增,请走驳回流程");
+            }
+            //调用新增接口
+            qcresultVO.setType(1);
+            qcresultVO.setOptResultAlgVO(qcResultAlgVO);
+            AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
+            if (analyzeDTORespDTO.getIsSuccess()) {
+                QcresultDetail detail = getQcresultDetail(approvedVo);
+                MedAppealInfo medAppealInfo = new MedAppealInfo();
+                medAppealInfo.setQcresultDetailId(detail.getId());
+                medAppealInfo.setWorkFlowNodeId(approvedVo.getWorkFlowNodeId());
+                boolean update = medAppealInfoManagementFacade.update(medAppealInfo, new UpdateWrapper<MedAppealInfo>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_id", approvedVo.getHospitalId())
+                        .eq("behospital_code", approvedVo.getBehospitalCode())
+                        .eq("id", approvedVo.getId())
+                );
+                MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
+                medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.ADD_EXIST.getKey());
+                medAppealExamineInfo.setValue(qcresultVO.getOptResultAlgVO().getScore());
+                medAppealExamineInfo.setMsg(qcresultVO.getOptResultAlgVO().getMsg());
+                medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
+                medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
+                medAppealExamineInfo.setGmtCreate(dateTime);
+                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 (update && 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);
+            //判断条目是否以恢复
+            QcresultDetail qcresultDetail = getQcresultDetail(approvedVo);
+            if (qcresultDetail != null) {
+                throw new CommonException(CommonErrorCode.IS_EXISTS, "该条目已恢复,无法进行审核操作,请走驳回流程。");
+            }
+
+            //调用删除恢复接口
+            List<QcresultDetail> qcresultDetails = qcresultDetailFacade.list(new QueryWrapper<QcresultDetail>()
+                    .eq("hospital_id", approvedVo.getHospitalId())
+                    .eq("behospital_code", approvedVo.getBehospitalCode())
+                    .eq("cases_entry_id", approvedVo.getQcResultAlgVO().getCasesEntryId())
+                    .eq("is_deleted",IsDeleteEnum.Y.getKey())
+                    .eq("grade_type", 2)
+                    .orderByDesc("id")
+            );
+            if(ListUtil.isNotEmpty(qcresultDetails)){
+                qcResultAlgVO.setId(qcresultDetails.get(0).getId());
+                qcresultVO.setOptResultAlgVO(qcResultAlgVO);
+                AnalyzeDTO analyzeDTORespDTO = qcresultInfoFacade.changeQcResult(qcresultVO);
+                if (analyzeDTORespDTO.getIsSuccess()) {
+                    approvedVo.setQcresultDetailId(qcresultDetails.get(0).getId());
+                    Boolean appealInfo = updateAppealInfo(approvedVo);
+                    MedAppealExamineInfo medAppealExamineInfo = new MedAppealExamineInfo();
+                    medAppealExamineInfo.setExampleOperation(ExampleOperationEnum.RECOVER.getKey());
+                    medAppealExamineInfo.setValue(qcresultVO.getOptResultAlgVO().getScore());
+                    medAppealExamineInfo.setMsg(qcresultVO.getOptResultAlgVO().getMsg());
+                    medAppealExamineInfo.setExampleStatus(ExampleStatusEnum.ADOPT_EXAMPLE.getKey());
+                    medAppealExamineInfo.setRemark(qcResultAlgVO.getExplainInfo());
+                    medAppealExamineInfo.setGmtCreate(dateTime);
+                    boolean update = this.update(medAppealExamineInfo, new UpdateWrapper<MedAppealExamineInfo>()
+                            .eq("is_deleted", IsDeleteEnum.N.getKey())
+                            .eq("appeal_info_id", approvedVo.getId())
+                            .eq("check_id", approvedVo.getAppealId())
+                    );
+                    if (appealInfo && update) {
+                        return true;
+                    } else {
+                        throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "审核通过失败!");
+                    }
+                } else {
+                    throw new CommonException(CommonErrorCode.INSERT_DATA_FAILED, "恢复失败!");
+                }
+            }
+        }
+        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.setQcresultDetailId(approvedVo.getQcresultDetailId());
+        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;
+        }
+    }
+
+    //  获取detail条目信息
+    public QcresultDetail getQcresultDetail(ApprovedVo approvedVo) {
+        QcresultDetail qcresultDetail = qcresultDetailFacade.getOne(new QueryWrapper<QcresultDetail>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", approvedVo.getHospitalId())
+                .eq("behospital_code", approvedVo.getBehospitalCode())
+                .eq("cases_entry_id", approvedVo.getQcResultAlgVO().getCasesEntryId())
+        );
+        return qcresultDetail;
+    }
+
+    public void getAppealReviewExport(HttpServletResponse response, GetAppealReviewVO getAppealReviewVO, MedAppealExamineInfoServiceClientFacade medAppealExamineInfoServiceClient) {
+        getAppealReviewVO.setCurrent(1L);
+        getAppealReviewVO.setSize(Long.MAX_VALUE);
+        getAppealReviewVO.setSearchCount(false);
+        RespDTO<Page<GetAppealReviewDTO>> appealReview = medAppealExamineInfoServiceClient.getAppealReview(getAppealReviewVO);
+        //格式转换
+        List<ExportGetAppealReviewDTO> out = BeanUtil.listCopyTo(appealReview.data.getRecords(), ExportGetAppealReviewDTO.class);
+        String fileName = "申诉审核.xls";
+        ExcelUtils.exportExcelUser(out, null, "sheet1", ExportGetAppealReviewDTO.class, fileName, response);
+    }
+
+    public void getComplaintRecordExport(HttpServletResponse response, GetComplaintRecordVO getComplaintRecordVO, MedAppealExamineInfoServiceClientFacade medAppealExamineInfoServiceClient) {
+        getComplaintRecordVO.setCurrent(1L);
+        getComplaintRecordVO.setSize(Long.MAX_VALUE);
+        getComplaintRecordVO.setSearchCount(false);
+        RespDTO<Page<GetComplaintRecordDTO>> complaintRecord = medAppealExamineInfoServiceClient.getComplaintRecord(getComplaintRecordVO);
+        //格式转换
+        List<ExportGetComplaintRecordDTO> out = BeanUtil.listCopyTo(complaintRecord.data.getRecords(), ExportGetComplaintRecordDTO.class);
+        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

+ 304 - 0
src/main/java/com/diagbot/facade/MedDefectFeedbackFacade.java

@@ -0,0 +1,304 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.diagbot.dto.AnalyzeDTO;
+import com.diagbot.dto.GetDefectDeptDTO;
+import com.diagbot.dto.GetDefectModeDTO;
+import com.diagbot.dto.GetMedDefectFeedbackPageDTO;
+import com.diagbot.entity.BehospitalInfo;
+import com.diagbot.entity.MedDefectFeedback;
+import com.diagbot.entity.QcresultDetail;
+import com.diagbot.entity.QcresultInfo;
+import com.diagbot.entity.SysUser;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.facade.his.FeedbackHosFacade;
+import com.diagbot.service.impl.MedDefectFeedbackServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.CCVO;
+import com.diagbot.vo.ChangeQcResultVO;
+import com.diagbot.vo.GetDefectDeptModeVO;
+import com.diagbot.vo.GetMedDefectFeedbackPageVO;
+import com.diagbot.vo.QcresultVO;
+import com.diagbot.vo.UPdDefectBackByIDVO;
+import com.diagbot.vo.his.FeedbackHosVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:缺陷反馈模块处理类
+ * @author: songxl
+ * @time: 2022/4/21 10:03
+ */
+@Component
+public class MedDefectFeedbackFacade extends MedDefectFeedbackServiceImpl {
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private SysUserFacade sysUserFacade;
+    @Autowired
+    private QcresultDetailFacade qcresultDetailFacade;
+    @Autowired
+    private FeedbackHosFacade feedbackHosFacade;
+    @Autowired
+    private MedDefectFeedbackServiceImpl medDefectFeedbackServiceImpl;
+
+
+
+    /**
+     * 操作病历
+     *
+     * @param changeQcResultVO
+     * @Return com.diagbot.dto.AnalyzeDTO
+     */
+    public AnalyzeDTO changeQcResult(ChangeQcResultVO changeQcResultVO) {
+        //1.获取病历基本信息
+        Long hospitalId = Long.valueOf(SysUserUtils.getCurrentHospitalID());
+        //验证病历的存在性
+        List<BehospitalInfo> behospitalInfos
+                = behospitalInfoFacade.list(
+                new QueryWrapper<BehospitalInfo>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_id", hospitalId)
+                        .eq("behospital_code", changeQcResultVO.getBehospitalCode()));
+        if (ListUtil.isEmpty(behospitalInfos)) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该医院下该病历号不存在!");
+        }
+        //获取操作用户
+        QueryWrapper<SysUser> userQuer = new QueryWrapper<>();
+        userQuer.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id", SysUserUtils.getCurrentPrincipleID())
+                .eq("status", 1);
+        SysUser user = sysUserFacade.getOne(userQuer);
+        if (user == null) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "操作用户不存在,请联系管理员!");
+        }
+
+        //2.调用人工修改病历评分接口
+        AnalyzeDTO out = new AnalyzeDTO();
+        QcresultVO qcresultVO = new QcresultVO();
+        BeanUtil.copyProperties(changeQcResultVO, qcresultVO);
+        switch (changeQcResultVO.getOperationType()) {
+            case "1"://修改
+                qcresultVO.setType(3);
+                out = qcresultInfoFacade.changeQcResult(qcresultVO);
+                break;
+            case "2"://删除
+                qcresultVO.setType(4);
+                qcresultVO.setDelStatus(0);
+                out = qcresultInfoFacade.changeQcResult(qcresultVO);
+                break;
+            case "3"://新增已有
+                qcresultVO.setType(1);
+                //判断该缺陷是否存在
+                havingCase(qcresultVO);
+                out = qcresultInfoFacade.changeQcResult(qcresultVO);
+                break;
+            case "4"://新增缺失
+                //新增缺失拼装返回结果
+                //获取病历等级得分
+                QcresultInfo qcresultInfo = qcresultInfoFacade
+                        .getOne(new QueryWrapper<QcresultInfo>().select("level,score_res")
+                                .eq("hospital_id", hospitalId)
+                                .eq("behospital_code", qcresultVO.getBehospitalCode())
+                                .eq("is_deleted", IsDeleteEnum.N.getKey()));
+                out.setBehospitalCode(qcresultVO.getBehospitalCode());
+                out.setIsSuccess(true);
+                out.setGradeType(2);
+                out.setGradeTypeName("人工");
+                out.setScoreRes(qcresultInfo.getScoreRes());
+                out.setLevel(qcresultInfo.getLevel());
+                out.setGradeTime(DateUtil.now());
+                break;
+            case "5"://恢复
+                qcresultVO.setType(4);
+                qcresultVO.setDelStatus(1);
+                out = qcresultInfoFacade.changeQcResult(qcresultVO);
+                break;
+            default:
+                break;
+        }
+
+        //3.人工修改病历成功后
+        if (out != null && out.getIsSuccess()) {
+            MedDefectFeedback insert = new MedDefectFeedback();
+            BeanUtil.copyProperties(changeQcResultVO, insert);
+            insert.setDeptId(behospitalInfos.get(0).getBehDeptId());
+            insert.setDeptName(behospitalInfos.get(0).getBehDeptName());
+            insert.setName(behospitalInfos.get(0).getName());
+            //除新增缺失以外都要记录所属条目ID、缺陷详情、分值信息
+            if (!"4".equals(changeQcResultVO.getOperationType())) {
+                //条目、缺陷详情、分值信息非空判断
+                if(changeQcResultVO.getOptResultAlgVO().getCasesEntryId()==null){
+                    throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "所属条目ID为空!");
+                }
+                if(changeQcResultVO.getOptResultAlgVO().getMsg()==null){
+                    throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "缺陷详情为空!");
+                }
+                if(changeQcResultVO.getOptResultAlgVO().getScore()==null){
+                    throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "条目分值为空!");
+                }
+                insert.setCasesEntryId(changeQcResultVO.getOptResultAlgVO().getCasesEntryId());
+                insert.setQcresultDetailMsg(changeQcResultVO.getOptResultAlgVO().getMsg());
+                insert.setQcresultDetaiScore(changeQcResultVO.getOptResultAlgVO().getScore());
+            }
+            insert.setHospitalId(hospitalId);
+            insert.setGmtCreate(DateUtil.now());
+            insert.setCreator(SysUserUtils.getCurrentPrincipleID());
+            insert.setSenderCode(SysUserUtils.getCurrentPrincipleID());
+            insert.setSenderName(user.getLinkman());
+            if(ListUtil.isNotEmpty(changeQcResultVO.getCcs())){
+                insert.setCcCodes(changeQcResultVO.getCcs().stream().map(CCVO::getUserId).collect(Collectors.joining(",")));
+                insert.setCcNames(changeQcResultVO.getCcs().stream().map(CCVO::getName).collect(Collectors.joining(",")));
+            }
+            //保存结果
+            if (!this.save(insert)) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "缺陷反馈保存失败!");
+            }
+            //4.推送给his方
+            sendToHis(insert);
+        }
+
+        return out;
+    }
+
+    private void havingCase(QcresultVO qcresultVO) {
+        if (qcresultVO.getOptResultAlgVO().getCasesEntryId() == null) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "条目ID不存在!");
+        }
+        //判断机器是否有质控出该缺陷或人工添加过该缺陷
+        QueryWrapper<QcresultDetail> query = new QueryWrapper();
+        query.eq("hospital_id", SysUserUtils.getCurrentHospitalID());
+        query.eq("behospital_code", qcresultVO.getBehospitalCode());
+        query.eq("cases_entry_id", qcresultVO.getOptResultAlgVO().getCasesEntryId());
+        query.and(qw -> qw.eq("grade_type", 2)
+                .or().eq("is_deleted", IsDeleteEnum.N.getKey()).eq("grade_type", 1));
+        if (ListUtil.isNotEmpty(qcresultDetailFacade.list(query))) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "添加的缺陷条目已存在!");
+        }
+    }
+
+    /**
+     * 推送给his方
+     *
+     * @param insert
+     * @Return void
+     */
+    private void sendToHis(MedDefectFeedback insert) {
+        try {
+            FeedbackHosVO feedbackHosVO = new FeedbackHosVO();
+            BeanUtil.copyProperties(insert,feedbackHosVO);
+            feedbackHosFacade.pushFeedback(feedbackHosVO);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 确认缺陷反馈
+     *
+     * @param uPdDefectBackByIDVO
+     * @Return java.lang.Boolean
+     */
+    public Boolean updDefectBackByID(UPdDefectBackByIDVO uPdDefectBackByIDVO) {
+        MedDefectFeedback entity = new MedDefectFeedback();
+        entity.setId(uPdDefectBackByIDVO.getId());
+        entity.setStatus("1");
+        return this.updateById(entity);
+    }
+
+    /**
+     * 获取缺陷反馈记录列表-缺陷模块下拉框内容
+     *
+     * @param
+     * @return:
+     */
+    public List<GetDefectModeDTO> getDefectMode(GetDefectDeptModeVO getDefectDeptModeVO) {
+        Long hospitalID = Long.valueOf(SysUserUtils.getCurrentHospitalID());
+        getDefectDeptModeVO.setHospitalId(hospitalID);
+        List<GetDefectModeDTO> defectDept = this.baseMapper.getDefectMode(getDefectDeptModeVO);
+        return defectDept;
+    }
+
+    /**
+     * 获取缺陷反馈记录列表-科室下拉框内容
+     *
+     * @param
+     * @return:
+     */
+    public List<GetDefectDeptDTO> getDefectDept(GetDefectDeptModeVO getDefectDeptModeVO) {
+        Long hospitalID = Long.valueOf(SysUserUtils.getCurrentHospitalID());
+        getDefectDeptModeVO.setHospitalId(hospitalID);
+        List<GetDefectDeptDTO> defectDept = this.baseMapper.getDefectDept(getDefectDeptModeVO);
+        return defectDept;
+    }
+
+    /**
+     * 获取缺陷反馈记录列表
+     *
+     * @param
+     * @return:
+     */
+    public Page<GetMedDefectFeedbackPageDTO> getMedDefectFeedbackPage(GetMedDefectFeedbackPageVO getMedDefectFeedbackPageVO) {
+        //更新待确认状态
+        updateStatus();
+        Page<GetMedDefectFeedbackPageDTO> medDefectFeedbackPage = this.baseMapper.getMedDefectFeedbackPage(getMedDefectFeedbackPageVO);
+        return medDefectFeedbackPage;
+    }
+
+    /**
+     * 更新待确认状态
+     *
+     * @param
+     * @Return void
+     */
+    private void updateStatus() {
+        try {
+            //1.获取待确认的反馈缺陷id
+            List<Long> ids = this.list(new QueryWrapper<MedDefectFeedback>()
+                 .eq("hospital_id",SysUserUtils.getCurrentHospitalID())
+                 .eq("status","0")
+                 .eq("is_deleted",IsDeleteEnum.N.getKey())).stream()
+                 .map(MedDefectFeedback::getId).collect(Collectors.toList());
+
+            if(ListUtil.isNotEmpty(ids)){
+                String strIds = Optional.of(ids).orElseGet(ArrayList::new).stream().map(String::valueOf).collect(Collectors.joining(","));
+                FeedbackHosVO search = new FeedbackHosVO();
+                search.setIds(strIds);
+                //2.查his对应反馈缺陷的最新状态
+                List<FeedbackHosVO> out = feedbackHosFacade.statusQuery(search).data;
+                if(ListUtil.isNotEmpty(out)){
+                    List<MedDefectFeedback> updates = new ArrayList<>();
+                    out.stream().forEach(feedbackHosVO -> {
+                        //获取his已确认的
+                        if("1".equals(feedbackHosVO.getMsgStatus())){
+                            MedDefectFeedback entity = new MedDefectFeedback();
+                            entity.setId(feedbackHosVO.getId());
+                            entity.setStatus(feedbackHosVO.getMsgStatus());
+                            updates.add(entity);
+                        }
+                    });
+                    //3.更新自己库中状态
+                    if(ListUtil.isNotEmpty(updates)){
+                        medDefectFeedbackServiceImpl.updateBatchById(updates);
+                    }
+                }
+            }
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}

+ 96 - 0
src/main/java/com/diagbot/facade/MedNewsNoticeFacade.java

@@ -0,0 +1,96 @@
+package com.diagbot.facade;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.GetNewsNoticeInfoByIdDTO;
+import com.diagbot.dto.NewsNoticePageDTO;
+import com.diagbot.dto.SysDictionaryInfoDTO;
+import com.diagbot.entity.MedNewsNotice;
+import com.diagbot.entity.SysUser;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.NewsNoticeStatusEnum;
+import com.diagbot.service.impl.MedNewsNoticeServiceImpl;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.GetNewsNoticeInfoByIdVO;
+import com.diagbot.vo.NewsNoticePageVO;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:消息通知处理
+ * @Author: songxl
+ * @time: 2022/4/12
+ */
+@Component
+public class MedNewsNoticeFacade extends MedNewsNoticeServiceImpl {
+    @Autowired
+    private SysUserFacade sysUserFacade;
+    @Autowired
+    private SysDictionaryFacade sysDictionaryFacade;
+
+    /**
+     * 消息通知--获取未读消息数量
+     *
+     * @param
+     * @Return java.util.Map<java.lang.String, java.lang.Integer>
+     */
+    public Map<String, Integer> getNewsCount() {
+        Map<String, Integer> out = new HashMap<>();
+        out.put("count", this.count(new QueryWrapper<MedNewsNotice>()
+                .eq("status", "0")
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("receiver", SysUserUtils.getCurrentPrincipleID())));
+        return out;
+    }
+
+    /**
+     *  消息通知--获取未读消息数量
+     * @param newsNoticePageVO
+     * @Return com.baomidou.mybatisplus.core.metadata.IPage<com.diagbot.dto.NewsNoticePageDTO>
+     */
+    public IPage<NewsNoticePageDTO> newsNoticePage(NewsNoticePageVO newsNoticePageVO) {
+        newsNoticePageVO.setPrinciple(SysUserUtils.getCurrentPrincipleID());
+        return this.getBaseMapper().newsNoticePage(newsNoticePageVO);
+    }
+
+    /**
+     * 消息通知--查看消息通知详情
+     *
+     * @param getNewsNoticeInfoByIdVO
+     * @Return com.diagbot.dto.GetNewsNoticeInfoByIdDTO
+     */
+    public GetNewsNoticeInfoByIdDTO getNewsNoticeInfoById(GetNewsNoticeInfoByIdVO getNewsNoticeInfoByIdVO) {
+        //更新未读消息状态
+        if (NewsNoticeStatusEnum.NEWS_NOT_READ.getKey().equals(getNewsNoticeInfoByIdVO.getStatus())) {
+            MedNewsNotice medNewsNotice = new MedNewsNotice();
+            BeanUtils.copyProperties(getNewsNoticeInfoByIdVO, medNewsNotice);
+            medNewsNotice.setStatus(NewsNoticeStatusEnum.NEWS_READ.getKey());
+            this.updateById(medNewsNotice);
+        }
+        MedNewsNotice medNewsNotice = this.getById(getNewsNoticeInfoByIdVO.getId());
+        GetNewsNoticeInfoByIdDTO out = new GetNewsNoticeInfoByIdDTO();
+        BeanUtils.copyProperties(medNewsNotice, out);
+        //默认发送者为系统 0
+        if ("0".equals(medNewsNotice.getSender())) {
+            out.setSenderName("系统");
+        } else {
+            SysUser user = sysUserFacade.getById(medNewsNotice.getSender());
+            out.setSenderName(user == null ? "未知用户" : user.getLinkman());
+        }
+        return out;
+    }
+
+    public Map<String,List<SysDictionaryInfoDTO>> getNewsDropDownBox() {
+        Map<Long, List<SysDictionaryInfoDTO>> dicMap = sysDictionaryFacade.getDictionary(); // 获取字典信息
+        Map<String,List<SysDictionaryInfoDTO>> outBox = new HashMap<>();
+        outBox.put("newsType",dicMap.get(46l));
+        outBox.put("newsStatus",dicMap.get(47l));
+        return outBox;
+    }
+}

+ 121 - 0
src/main/java/com/diagbot/facade/MedicalRecordOtherFacade.java

@@ -0,0 +1,121 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.diagbot.dto.*;
+import com.diagbot.entity.MedicalRecord;
+import com.diagbot.entity.MedicalRecordContent;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.facade.data.AMedicalRecordContentFacade;
+import com.diagbot.service.impl.MedicalRecordServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.EncrypDES;
+import com.diagbot.util.StringUtil;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.MedRecordContentOtherVO;
+import com.diagbot.vo.MedRecordOtherVO;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: Wsy
+ * @time: 2022/3/9 11:39
+ */
+@Component
+public class MedicalRecordOtherFacade extends MedicalRecordServiceImpl {
+
+    @Autowired
+    private MedicalRecordFacade medicalRecordFacade;
+
+    @Autowired
+    private AMedicalRecordContentFacade AMedicalRecordContentFacade;
+
+    @Value("${encrypt.enable}")
+    Boolean encryptFlag;
+
+    /**
+     * @param medRecordOtherVO
+     * @return
+     */
+    public IPage<MedicalRecord> pageFac(MedRecordOtherVO medRecordOtherVO) {
+        Boolean flag = false;
+        QueryWrapper<MedicalRecord> medicalRecordQueryWrapper = new QueryWrapper<>();
+        medicalRecordQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey());
+        medicalRecordQueryWrapper.eq("hospital_id", Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        medicalRecordQueryWrapper.eq("mode_id", 0);
+        if (medRecordOtherVO != null) {
+            medicalRecordQueryWrapper.eq("behospital_code", medRecordOtherVO.getBehospitalCode());
+        }
+
+        if (medRecordOtherVO.getRecTitle() != null && medRecordOtherVO != null) {
+            medicalRecordQueryWrapper.like("rec_title", medRecordOtherVO.getRecTitle());
+        }
+        if (medRecordOtherVO.getRecDateStart() != null && medRecordOtherVO != null) {
+            medicalRecordQueryWrapper.ge("rec_date", medRecordOtherVO.getRecDateStart());
+        }
+        if (medRecordOtherVO.getRecDateEnd() != null && medRecordOtherVO != null) {
+            medicalRecordQueryWrapper.le("rec_date", medRecordOtherVO.getRecDateEnd());
+        }
+        for (Object order : medRecordOtherVO.getOrders()) {
+            ObjectMapper objectMapper = new ObjectMapper();
+            OrderItem orderName = objectMapper.convertValue(order, OrderItem.class);
+            String column = orderName.getColumn();
+            if (StringUtil.isNotEmpty(column) && orderName.isAsc()) {
+                flag = true;
+            }
+        }
+        if (flag) {
+            medicalRecordQueryWrapper.orderByAsc("rec_date");
+        } else {
+            medicalRecordQueryWrapper.orderByDesc("rec_date");
+        }
+
+        Page<MedicalRecord> pageCase = new Page<MedicalRecord>(medRecordOtherVO.getCurrent(), medRecordOtherVO.getSize());
+        IPage<MedicalRecord> medicalRecordIPage = medicalRecordFacade.getBaseMapper().selectPage(pageCase, medicalRecordQueryWrapper);
+
+        return medicalRecordIPage;
+    }
+
+    /**
+     * 文书详情
+     */
+    public MedRecordContentOtherDTO getRecordContentOther(MedRecordContentOtherVO medRecordContentOtherVO) {
+        MedicalRecordContent medicalRecordContent = AMedicalRecordContentFacade.getOne(new QueryWrapper<MedicalRecordContent>()
+                .eq("hospital_id", Long.valueOf(SysUserUtils.getCurrentHospitalID()))
+                .eq("rec_id", medRecordContentOtherVO.getRecId())
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+        );
+        if (medicalRecordContent != null) {
+            if (medicalRecordContent.getHospitalId() == 35) {
+                medicalRecordContent.setHtmlText(medicalRecordContent.getXmlText());
+            }
+        } else {
+            throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "该文书数据缺失~");
+        }
+        MedRecordContentOtherDTO medRecordContentOtherDTO = new MedRecordContentOtherDTO();
+        BeanUtil.copyProperties(medicalRecordContent, medRecordContentOtherDTO);
+        // 解密数据
+        if (encryptFlag) {
+            try {
+                EncrypDES encrypDES = new EncrypDES();
+                if (StringUtils.isNotEmpty(medRecordContentOtherDTO.getHtmlText())) {
+                    medRecordContentOtherDTO.setHtmlText(encrypDES.decryptor(medRecordContentOtherDTO.getHtmlText()));
+                }
+            } catch (Exception e) {
+                medRecordContentOtherDTO.setHtmlText(null);
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
+                        "解密错误!病历ID=【" + medRecordContentOtherDTO.getRecId() + "】");
+            }
+        }
+        return medRecordContentOtherDTO;
+    }
+
+}

+ 134 - 238
src/main/java/com/diagbot/facade/QcresultInfoFacade.java

@@ -1,33 +1,35 @@
 package com.diagbot.facade;
 
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.AlgorithmDTO;
 import com.diagbot.dto.AnalyzeDTO;
+import com.diagbot.dto.QcCasesHistoryDTO;
 import com.diagbot.dto.QcResultDTO;
-import com.diagbot.dto.SentEntryRecordDTO;
-import com.diagbot.entity.*;
+import com.diagbot.entity.BehospitalInfo;
+import com.diagbot.entity.MedQcresultCases;
+import com.diagbot.entity.QcresultDetail;
+import com.diagbot.entity.QcresultInfo;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
-import com.diagbot.facade.data.AHomePageFacade;
-import com.diagbot.facade.data.AMedAbnormalInfoFacade;
 import com.diagbot.service.impl.MedQcresultCasesServiceImpl;
 import com.diagbot.service.impl.QcresultDetailServiceImpl;
 import com.diagbot.service.impl.QcresultInfoServiceImpl;
-import com.diagbot.util.*;
-import com.diagbot.vo.AlgorithmVO;
-import com.diagbot.vo.AnalyzeVO;
-import com.diagbot.vo.GetDetailVO;
-import com.diagbot.vo.MedQcresultCasesVO;
-import com.diagbot.vo.QcResultAlgVO;
-import com.diagbot.vo.QcresultVO;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * @Description:
@@ -44,24 +46,10 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
     @Autowired
-    private AHomePageFacade aHomePageFacade;
-    @Autowired
-    private AMedAbnormalInfoFacade aMedAbnormalInfoFacade;
-    @Autowired
     private MedCheckInfoFacade medCheckInfoFacade;
     @Autowired
     @Qualifier("medQcresultCasesServiceImpl")
     private MedQcresultCasesServiceImpl medQcresultCasesService;
-    @Autowired
-    private QcClientFacade qcClientFacade;
-    @Autowired
-    private QcCasesEntryFacade qcCasesEntryFacade;
-    @Autowired
-    private QcModeFacade qcModeFacade;
-    @Autowired
-    private SysUserFacade sysUserFacade;
-
-    private TZDBConnForHis tzDBConnForHis = new TZDBConnForHis();
 
     /**
      * 修改评分结果信息
@@ -176,6 +164,12 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                 .set("is_deleted", IsDeleteEnum.Y.getKey())
                 .set("modifier", useId)
                 .set("gmt_modified", now));
+        //清空本病历所有历史记录的page_data和menu_data
+        this.update(new UpdateWrapper<QcresultInfo>()
+                .eq("hospital_id", analyzeVO.getHospitalId())
+                .eq("behospital_code", analyzeVO.getBehospitalCode())
+                .set("page_data",null)
+                .set("menu_data",null));
         //新增记录
         QcresultInfo qcresultInfo = new QcresultInfo();
         if (qcresultInfoOld != null) {
@@ -226,14 +220,11 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                             .eq("behospital_code", analyzeVO.getBehospitalCode()));
                 }
 
-
                 qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
                         .eq("is_deleted", IsDeleteEnum.N.getKey())
                         .eq("hospital_id", analyzeVO.getHospitalId())
                         .eq("behospital_code", analyzeVO.getBehospitalCode())
-                        .set("is_deleted", IsDeleteEnum.Y.getKey())
-                        .set("modifier", useId)
-                        .set("gmt_modified", now));
+                        .set("is_deleted", IsDeleteEnum.Y.getKey()));
                 //
                 //批量插入新的数据
                 List<QcresultDetail> qcresultDetailList = new ArrayList<>();
@@ -261,8 +252,8 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                         qcresultDetail.setQcresultInfoId(newId);
                         qcresultDetailList.add(qcresultDetail);
                     }
-                    qcresultDetailServiceImpl.saveBatch(qcresultDetailList);
                 }
+                qcresultDetailServiceImpl.saveBatch(qcresultDetailList);
                 break;
             case 1:
                 //新增条目
@@ -278,117 +269,34 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                 qcresultDetailAdd.setModifier(useId.toString());
                 qcresultDetailAdd.setQcresultInfoId(newId);
                 qcresultDetailServiceImpl.save(qcresultDetailAdd);
-                //发送质控人员新增人工缺陷到his系统
-                SentEntryRecordDTO sentEntryRecordDTO = new SentEntryRecordDTO();
-                BeanUtil.copyProperties(qcresultDetailAdd, sentEntryRecordDTO);
-                MedCheckInfo medCheckInfo = medCheckInfoFacade.lambdaQuery()
-                        .eq(MedCheckInfo::getBehospitalCode, sentEntryRecordDTO.getBehospitalCode())
-                        .eq(MedCheckInfo::getHospitalId, qcresultDetailAdd.getHospitalId())
-                        //  .eq(MedCheckInfo::getStatus, 1)
-                        .in(MedCheckInfo::getCheckType, Arrays.asList(0, 2))
-                        .eq(MedCheckInfo::getIsDeleted, IsDeleteEnum.N.getKey()).one();
-                if (null != medCheckInfo) {
-                    sentEntryRecordDTO.setCheckName(medCheckInfo.getCheckName());
-                    sentEntryRecordDTO.setCheckTime(medCheckInfo.getCheckTime());
-                }
-                SysUser sysUser = sysUserFacade.lambdaQuery()
-                        .eq(SysUser::getId, medCheckInfo.getCheckId())
-                        .eq(SysUser::getStatus, 1)
-                        .eq(SysUser::getIsDeleted, IsDeleteEnum.N.getKey()).one();
-                if (null != sysUser) {
-                    sentEntryRecordDTO.setCheckId(sysUser.getUsername());
-                }
-                QcCasesEntry qcCasesEntry = qcCasesEntryFacade.lambdaQuery()
-                        .eq(QcCasesEntry::getId, qcresultDetailAdd.getCasesEntryId())
-                        .eq(QcCasesEntry::getIsDeleted, IsDeleteEnum.N.getKey()).one();
-                if (null != qcCasesEntry) {
-                    QcMode qcMode = qcModeFacade.lambdaQuery()
-                            .eq(QcMode::getId, qcCasesEntry.getModeId())
-                            .eq(QcMode::getIsDeleted, IsDeleteEnum.N.getKey()).one();
-                    if (null != qcCasesEntry) {
-                        sentEntryRecordDTO.setModeName(qcMode.getName());
-                    }
-                }
-                //获取患者的科室id
-                BehospitalInfo behospitalInfo = behospitalInfoFacade.getOne(new QueryWrapper<BehospitalInfo>()
-                        .eq("behospital_code", sentEntryRecordDTO.getBehospitalCode())
-                        .eq("is_deleted", IsDeleteEnum.N.getKey()));
-                if (null != behospitalInfo) {
-                    sentEntryRecordDTO.setDeptId(behospitalInfo.getBehDeptId());
-            }
-        //根据his新增相应的数据
-        try {
-            //根据behospitalCode截取patientId和visitId
-            String patientId=sentEntryRecordDTO.getBehospitalCode().split("_")[0];
-            String visitId=sentEntryRecordDTO.getBehospitalCode().split("_")[1];
-            //获取on_line表中的医生姓名
-            String sql ="select * from doctor_hos where user_id = (select request_doctor_id from mr_on_line where patient ='" +
-                    patientId+"' and visit_id= '"+visitId+"' and status='0') and dept_code= '"+sentEntryRecordDTO.getDeptId()+"'" ;
-            List<String> doctorNames=tzDBConnForHis.getdoctorName(sql);
-            if (doctorNames!=null && doctorNames.size() > 0){
-                sentEntryRecordDTO.setDoctorName(doctorNames.get(0));
-            }
-            Integer i = tzDBConnForHis.setQcMessAge(sentEntryRecordDTO);
-        } catch (Exception e) {
-            e.printStackTrace();
-            aMedAbnormalInfoFacade.saveAbnormalInfo("发送质控人员新增人工缺陷到his系统失败", "", "", JSON.toJSONString(sentEntryRecordDTO), e.getMessage());
-
-        }
-
-        break;
-        case 2:
-        //删除条目
-        qcresultDetailServiceImpl.remove(new QueryWrapper<QcresultDetail>()
-                .eq("id", algorithmVO.getOptResultAlgVO().getId())
-                .eq("hospital_id", analyzeVO.getHospitalId())
-                .eq("behospital_code", analyzeVO.getBehospitalCode())
-        );
-        break;
-        case 3:
-            //发送质控人员修改人工缺陷到his系统
-            SentEntryRecordDTO updateEntryRecordDTO = new SentEntryRecordDTO();
-            BeanUtil.copyProperties(algorithmVO.getOptResultAlgVO(), updateEntryRecordDTO);
-            updateEntryRecordDTO.setBehospitalCode(analyzeVO.getBehospitalCode());
-            QcresultDetail qcresultDetail= qcresultDetailServiceImpl.getOne(new QueryWrapper<QcresultDetail>()
-                                        .eq("id",algorithmVO.getOptResultAlgVO().getId()));
-            String oldMsg = qcresultDetail.getMsg();
-            try {
-                Integer i = tzDBConnForHis.UpdateQcMessAge(updateEntryRecordDTO,oldMsg);
-            } catch (Exception e) {
-                e.printStackTrace();
-                aMedAbnormalInfoFacade.saveAbnormalInfo("发送质控人员修改人工缺陷到his系统失败", "", "", JSON.toJSONString(updateEntryRecordDTO), e.getMessage());
-
-            }
-        //修改条目
-        qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
-                .eq("id", algorithmVO.getOptResultAlgVO().getId())
-                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("hospital_id", analyzeVO.getHospitalId())
-                .eq("behospital_code", analyzeVO.getBehospitalCode())
-                .set("msg", algorithmVO.getOptResultAlgVO().getMsg())
-                .set("score", algorithmVO.getOptResultAlgVO().getScore())
-                .set("opt_type", 3)
-                .set("grade_type", 2)
-                .set("modifier", useId)
-                .set("qcresult_info_id", newId)
-                .set("gmt_modified", now)
-                .set("explain_info", algorithmVO.getOptResultAlgVO().getExplainInfo())
-        );
-        break;
-        case 4:
-                //发送质控人员删除人工缺陷到his系统
-                QcresultDetail deleteQcDetail= qcresultDetailServiceImpl.getOne(new QueryWrapper<QcresultDetail>()
-                        .eq("id",algorithmVO.getOptResultAlgVO().getId()));
-                SentEntryRecordDTO deleteEntryRecordDTO = new SentEntryRecordDTO();
-                deleteEntryRecordDTO.setMsg(deleteQcDetail.getMsg());
-                deleteEntryRecordDTO.setBehospitalCode(analyzeVO.getBehospitalCode());
-                try {
-                    Integer i = tzDBConnForHis.DeleteQcMessAge(deleteEntryRecordDTO);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    aMedAbnormalInfoFacade.saveAbnormalInfo("发送质控人员删除人工缺陷到his系统失败", "", "", JSON.toJSONString(deleteEntryRecordDTO), e.getMessage());
-                }
-        //获取病历核查人员id,该操作只能是核查员操作
+                break;
+            case 2:
+                //删除条目
+                qcresultDetailServiceImpl.remove(new QueryWrapper<QcresultDetail>()
+                        .eq("id", algorithmVO.getOptResultAlgVO().getId())
+                        .eq("hospital_id", analyzeVO.getHospitalId())
+                        .eq("behospital_code", analyzeVO.getBehospitalCode())
+                );
+                break;
+            case 3:
+                //修改条目
+                qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
+                        .eq("id", algorithmVO.getOptResultAlgVO().getId())
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_id", analyzeVO.getHospitalId())
+                        .eq("behospital_code", analyzeVO.getBehospitalCode())
+                        .set("msg", algorithmVO.getOptResultAlgVO().getMsg())
+                        .set("score", algorithmVO.getOptResultAlgVO().getScore())
+                        .set("opt_type", 3)
+                        .set("grade_type", 2)
+                        .set("modifier", useId)
+                        .set("qcresult_info_id", newId)
+                        .set("gmt_modified", now)
+                        .set("explain_info", algorithmVO.getOptResultAlgVO().getExplainInfo())
+                );
+                break;
+            case 4:
+                //获取病历核查人员id,该操作只能是核查员操作
 //                Long checkId = medCheckInfoFacade.getOne(new QueryWrapper<MedCheckInfo>()
 //                        .eq("is_deleted", IsDeleteEnum.N.getKey())
 //                        .eq("hospital_id", analyzeVO.getHospitalId())
@@ -401,116 +309,95 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
 //                {
 //                    throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "当前用户不是分配的核查人员");
 //                }
-        //逻辑删除质控明细 0删除
-        if (analyzeVO.getDelStatus() == 0) {
-            qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
-                    .eq("id", algorithmVO.getOptResultAlgVO().getId())
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("hospital_id", analyzeVO.getHospitalId())
-                    .eq("behospital_code", analyzeVO.getBehospitalCode())
-                    .set("is_deleted", IsDeleteEnum.Y.getKey())
-                    .set("grade_type", 2)
-                    .set("opt_type", 2)
-                    .set("qcresult_info_id", newId)
-                    .set("modifier", useId)
-                    .set("gmt_modified", now)
-            );
+                //逻辑删除质控明细 0删除
+                if (analyzeVO.getDelStatus() == 0) {
+                    qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
+                            .eq("id", algorithmVO.getOptResultAlgVO().getId())
+                            .eq("is_deleted", IsDeleteEnum.N.getKey())
+                            .eq("hospital_id", analyzeVO.getHospitalId())
+                            .eq("behospital_code", analyzeVO.getBehospitalCode())
+                            .set("is_deleted", IsDeleteEnum.Y.getKey())
+                            .set("grade_type", 2)
+                            .set("opt_type", 2)
+                            .set("qcresult_info_id", newId)
+                            .set("modifier", useId)
+                            .set("gmt_modified", now)
+                    );
+                }
+                //1恢复
+                else if (analyzeVO.getDelStatus() == 1) {
+                    //该条目是机器插入条目
+                    qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
+                            .eq("id", algorithmVO.getOptResultAlgVO().getId())
+                            .eq("is_deleted", IsDeleteEnum.Y.getKey())
+                            .eq("hospital_id", analyzeVO.getHospitalId())
+                            .eq("behospital_code", analyzeVO.getBehospitalCode())
+                            .set("is_deleted", IsDeleteEnum.N.getKey())
+                            .set("grade_type", 2)
+                            .set("opt_type", 1)
+                            .set("qcresult_info_id", newId)
+                            .set("modifier", useId)
+                            .set("gmt_modified", now)
+                    );
+                } else {
+                    throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "delStatus参数错误");
+                }
+                break;
+            default:
+                /* DO NOTHING */
+                break;
         }
-        //1恢复
-        else if (analyzeVO.getDelStatus() == 1) {
-            //该条目是机器插入条目
+
+        //如果不是自动评分(是新增修改删除条目)修改评分主表id
+        if (algorithmVO.getType() != 0) {
+            //修改上一次人工条目 评分主表id
+            if (qcresultInfoup != null && qcresultInfoup.getId() != null) {
+                qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
+                        .eq("qcresult_info_id", qcresultInfoup.getId())
+                        .eq("hospital_id", analyzeVO.getHospitalId())
+                        .eq("grade_type", 2)
+                        .eq("behospital_code", analyzeVO.getBehospitalCode())
+                        .set("qcresult_info_id", newId)
+                );
+            }
+            //未删除的 评分主表id
             qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
-                    .eq("id", algorithmVO.getOptResultAlgVO().getId())
-                    .eq("is_deleted", IsDeleteEnum.Y.getKey())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .eq("hospital_id", analyzeVO.getHospitalId())
                     .eq("behospital_code", analyzeVO.getBehospitalCode())
-                    .set("is_deleted", IsDeleteEnum.N.getKey())
-                    .set("grade_type", 2)
-                    .set("opt_type", 1)
                     .set("qcresult_info_id", newId)
-                    .set("modifier", useId)
-                    .set("remark", null)
-                    .set("gmt_modified", now)
             );
-        } else {
-            throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "delStatus参数错误");
         }
-        break;
-        default:
-        /* DO NOTHING */
-        break;
-    }
 
-    //如果不是自动评分(是新增修改删除条目)修改评分主表id
-        if(algorithmVO.getType()!=0)
 
-    {
-        //修改上一次人工条目 评分主表id
-        if (qcresultInfoup != null && qcresultInfoup.getId() != null) {
-            qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
-                    .eq("qcresult_info_id", qcresultInfoup.getId())
-                    .eq("hospital_id", analyzeVO.getHospitalId())
-                    .eq("grade_type", 2)
-                    .eq("behospital_code", analyzeVO.getBehospitalCode())
-                    .set("qcresult_info_id", newId)
-                    .set("modifier", useId)
-                    .set("gmt_modified", now)
-            );
-        }
-        //未删除的 评分主表id
-        qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
+        //质控模块评分数据
+        //统一为长兴的算法
+        //逻辑删除数据
+        medQcresultCasesService.update(new UpdateWrapper<MedQcresultCases>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("hospital_id", analyzeVO.getHospitalId())
                 .eq("behospital_code", analyzeVO.getBehospitalCode())
-                .set("qcresult_info_id", newId)
+                .set("is_deleted", IsDeleteEnum.Y.getKey())
                 .set("modifier", useId)
-                .set("gmt_modified", now)
-        );
-    }
-
-
-    //质控模块评分数据
-    //统一为长兴的算法
-    //逻辑删除数据
-        medQcresultCasesService.update(new UpdateWrapper<MedQcresultCases>()
-                .
-
-    eq("is_deleted",IsDeleteEnum.N.getKey())
-            .
-
-    eq("hospital_id",analyzeVO.getHospitalId())
-            .
-
-    eq("behospital_code",analyzeVO.getBehospitalCode())
-            .
-
-    set("is_deleted",IsDeleteEnum.Y.getKey())
-            .
-
-    set("modifier",useId)
-                .
-
-    set("gmt_modified",now));
-    //批量插入新的数据
-    List<MedQcresultCases> medQcresultCasesList = new ArrayList<>();
-    List<MedQcresultCasesVO> medQcresultCasesVOList = algorithmVO.getMedQcresultCasesVOList();
-        if(ListUtil.isNotEmpty(medQcresultCasesVOList))
-
-    {
-        for (MedQcresultCasesVO medQcresultCasesVO : medQcresultCasesVOList) {
-            MedQcresultCases medQcresultCases = new MedQcresultCases();
-            BeanUtil.copyProperties(medQcresultCasesVO, medQcresultCases);
-            medQcresultCases.setGmtCreate(now);
-            medQcresultCases.setCreator(useId.toString());
-            medQcresultCases.setGmtModified(now);
-            medQcresultCases.setModifier(useId.toString());
-            medQcresultCases.setQcresultInfoId(newId);
-            medQcresultCasesList.add(medQcresultCases);
+                .set("gmt_modified", now));
+        //批量插入新的数据
+        List<MedQcresultCases> medQcresultCasesList = new ArrayList<>();
+        List<MedQcresultCasesVO> medQcresultCasesVOList = algorithmVO.getMedQcresultCasesVOList();
+        if (ListUtil.isNotEmpty(medQcresultCasesVOList)) {
+            for (MedQcresultCasesVO medQcresultCasesVO : medQcresultCasesVOList) {
+                MedQcresultCases medQcresultCases = new MedQcresultCases();
+                BeanUtil.copyProperties(medQcresultCasesVO, medQcresultCases);
+                medQcresultCases.setGmtCreate(now);
+                medQcresultCases.setCreator(useId.toString());
+                medQcresultCases.setGmtModified(now);
+                medQcresultCases.setModifier(useId.toString());
+                medQcresultCases.setQcresultInfoId(newId);
+                medQcresultCasesList.add(medQcresultCases);
+            }
+            medQcresultCasesService.saveBatch(medQcresultCasesList);
         }
-        medQcresultCasesService.saveBatch(medQcresultCasesList);
-    }
         return now;
-}
+    }
 
 
     /**
@@ -533,4 +420,13 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
         }
         return res;
     }
+
+    /**
+     * 历史评分
+     * @param historyAnalyzePageVO
+     * @return
+     */
+    public IPage<QcCasesHistoryDTO> getMedQcresultResultList(HistoryAnalyzePageVO historyAnalyzePageVO){
+        return getMedQcresultResult(historyAnalyzePageVO);
+    }
 }

+ 29 - 8
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;
@@ -31,9 +33,7 @@ import com.google.common.collect.Maps;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -60,7 +60,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 +162,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 +181,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获取当前用户的任务来源 和筛选分值
@@ -204,13 +224,14 @@ public class RecordCheckFacade {
             }
         });
         Long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
-        List<Integer> valus = medBehospitalTypeServiceImpl.list(new QueryWrapper<MedBehospitalType>()
+        Map<String,Integer> valueMaps = medBehospitalTypeServiceImpl.list(new QueryWrapper<MedBehospitalType>()
                 .eq("hospital_id", hospitalId)
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .isNotNull("value")
-                .groupBy("value")).stream().map(MedBehospitalType::getValue).collect(Collectors.toList());
+                .select("behospital_type,value")
+                .groupBy("value")).stream().collect(Collectors.toMap(MedBehospitalType::getBehospitalType, MedBehospitalType::getValue,(k1, k2) -> k1,LinkedHashMap::new));
         out.put("source", checkTypes);
-        out.put("value", valus);
+        out.put("value", valueMaps);
         return out;
     }
 }

+ 64 - 3
src/main/java/com/diagbot/facade/SysDictionaryFacade.java

@@ -11,9 +11,7 @@ import com.diagbot.util.ListUtil;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Component;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @Description:
@@ -70,4 +68,67 @@ public class SysDictionaryFacade extends SysDictionaryInfoServiceImpl {
         }
         return accessToken;
     }
+
+    /**
+     * 获取字典具体信息
+     *
+     * @return
+     */
+    public List<SysDictionaryInfoDTO> getAppealRejectDictionary(String groupType) {
+        List<SysDictionaryInfoDTO> sysDictionaryInfoDTOS = new LinkedList<SysDictionaryInfoDTO>();
+        if (getDictionary() != null
+                && getDictionary().containsKey(Long.parseLong(groupType))
+        ) {
+            sysDictionaryInfoDTOS = getDictionary().get(Long.parseLong(groupType));
+        }
+        return sysDictionaryInfoDTOS;
+    }
+
+    /**
+     * 获取字典申诉驳回总体信息
+     *
+     * @return
+     */
+    public Map<String, Map<String, String>> getAppealRejectionDictionary() {
+        Map<String, Map<String, String>> appealOperationMap = new HashMap<>();
+        Map<String, String> appealOperationMapKey = new HashMap<>();
+        if (getDictionaryWithKey() != null
+                && getDictionaryWithKey().containsKey("34")
+        ) {
+            appealOperationMapKey = getDictionaryWithKey().get("34");
+        }
+        String appealOperation = appealOperationMapKey.get("申诉驳回");
+        String[] split = appealOperation.split(",");
+        List<String> strings = Arrays.asList(split);
+        for (int i = 0; i < strings.size(); i++) {
+            List<SysDictionaryInfoDTO> appealStatusDictionary = getAppealRejectDictionary(strings.get(i));
+            Map<String, String> keyValue = EntityUtil.makeMapWithKeyValue(appealStatusDictionary, "name", "val");
+            appealOperationMap.put(appealStatusDictionary.get(0).getRemark(), keyValue);
+        }
+        return appealOperationMap;
+    }
+
+    /**
+     * 获取字典缺陷返回总体信息
+     *
+     * @return
+     */
+    public Map<String, Map<String, String>> getOperationStatusType(String groupType ,String name) {
+        Map<String, Map<String, String>> appealOperationMap = new HashMap<>();
+        Map<String, String> appealOperationMapKey = new HashMap<>();
+        if (getDictionaryWithKey() != null
+                && getDictionaryWithKey().containsKey(groupType)
+        ) {
+            appealOperationMapKey = getDictionaryWithKey().get(groupType);
+        }
+        String appealOperation = appealOperationMapKey.get(name);
+        String[] split = appealOperation.split(",");
+        List<String> strings = Arrays.asList(split);
+        for (int i = 0; i < strings.size(); i++) {
+            List<SysDictionaryInfoDTO> appealStatusDictionary = getAppealRejectDictionary(strings.get(i));
+            Map<String, String> keyValue = EntityUtil.makeMapWithKeyValue(appealStatusDictionary, "name", "val");
+            appealOperationMap.put(appealStatusDictionary.get(0).getRemark(), keyValue);
+        }
+        return appealOperationMap;
+    }
 }

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

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

+ 43 - 34
src/main/java/com/diagbot/facade/ViewFacade.java

@@ -1,50 +1,23 @@
 package com.diagbot.facade;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.*;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.facade.data.*;
-import com.diagbot.util.DateUtil;
-import com.diagbot.util.EntityUtil;
-import com.diagbot.util.ReadProperties;
-import com.diagbot.util.TZDBConn;
+import com.diagbot.util.*;
 import com.diagbot.vo.AnalyzeRunVO;
-import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.OldInfoVo;
-import com.diagbot.vo.data.AHomePageIngVO;
-import com.diagbot.vo.data.AHomePageVO;
 import com.diagbot.vo.data.XyHomePageVo;
-import com.google.common.collect.Lists;
-import lombok.extern.log4j.Log4j;
 import org.apache.commons.httpclient.NameValuePair;
 import org.apache.commons.httpclient.methods.PostMethod;
 import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.httpclient.NameValuePair;
-import org.apache.commons.httpclient.methods.PostMethod;
 import org.apache.commons.lang.StringUtils;
-import org.apache.cxf.endpoint.Client;
-import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestParam;
 
-import java.text.ParsePosition;
-import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
@@ -286,7 +259,7 @@ public class ViewFacade {
                 //获取检查信息和相应的检查结果并添加修改
                 String pacsSql = "select * from CHECK_LIST where behospitalCode= '" + hospitalCode + "' and behospitalnum= '" + hospitalNum + "'";
                 this.getPacsInfo(pacsSql);
-                try {
+                /*try {
                     //拉取数据完后评分
                     AnalyzeRunVO analyzeRunVO = new AnalyzeRunVO();
                     analyzeRunVO.setHospitalId(Long.valueOf("35"));
@@ -294,7 +267,7 @@ public class ViewFacade {
                     behospitalInfoFacade.analyzeApi(analyzeRunVO);
                 } catch (Exception e) {
                     aMedAbnormalInfoFacade.saveAbnormalInfo("历史数据拉取完评分异常", "", "", JSON.toJSONString(s), e.getMessage());
-                }
+                }*/
             });
             aMedAbnormalInfoFacade.saveAbnormalInfo("历史数据拉取完成", "", "", JSON.toJSONString(behospitalInfoList), "");
         }
@@ -312,14 +285,23 @@ public class ViewFacade {
         //从视图拉取数据
 
         String homepageSql = "select * from homePage where behospitalCode= '" + xyHomePageVo.getBehospitalCode() + "' and behospitalnum= '" + xyHomePageVo.getFileCode() + "'";
-        String diagSql = "select * from homePage_diag where behospitalCode= '" + xyHomePageVo.getBehospitalCode() + "' and behospitalnum= '" + xyHomePageVo.getFileCode() + "'";
+        String diagSql = "select * from homePage_diag where behospitalCode= '" + xyHomePageVo.getBehospitalCode() + "' and behospitalnum= '" + xyHomePageVo.getFileCode() + "' and diagnosetype='出院诊断'";
         String opsSql = "select * from homePage_operation where behospitalCode= '" + xyHomePageVo.getBehospitalCode() + "' and behospitalnum= '" + xyHomePageVo.getFileCode() + "'";
-
         this.getHomePage(homepageSql);
         this.getHomeDiagnose(diagSql);
         this.getHomeOperation(opsSql);
-
-
+        //查询门急诊诊断diagnoseName
+        String diagnoseSql = "select * from homePage_diag where " +
+                " behospitalCode= '" + xyHomePageVo.getBehospitalCode() + "' " +
+                "and behospitalnum= '" + xyHomePageVo.getFileCode() + "' and diagnoseType='门诊诊断'";
+        HomePage homePage=getHomeDiagnoseAndCode(diagnoseSql);
+        UpdateWrapper<HomePage> updateWrapper=new UpdateWrapper<>();
+        updateWrapper.eq("behospital_code",behospitalCode)
+                .eq("hospital_id", xyHomePageVo.getHospitalId())
+                .eq("home_page_id", homePage.getHomePageId())
+                .set("outpatient_emr_diagnose",homePage.getOutpatientEmrDiagnose())
+                .set("outpatient_emr_diagnose_code",homePage.getOutpatientEmrDiagnoseCode());
+        aHomePageFacade.update(updateWrapper);
         //根据传过来的方案编码来判断是否返回评分(1:返回评分,其他只保存数据)
         if (xyHomePageVo.getDockModeType().equals("1")) {
             QueryWrapper<BehospitalInfo> wrapper = new QueryWrapper<>();
@@ -353,6 +335,33 @@ public class ViewFacade {
         }
     }
 
+    //获取门诊诊断相关信息
+    public HomePage  getHomeDiagnoseAndCode(String sql){
+
+        HomePage homePage=new HomePage();
+        StringBuffer diagnoseName=new StringBuffer();
+        StringBuffer diagnoseCode=new StringBuffer();
+        try{
+            List<HomeDiagnoseInfo> homeDiagnoseInfos = new ArrayList<>();
+            homeDiagnoseInfos = tzDBConn.getHomeDiagnose(sql);
+            if(ListUtil.isNotEmpty(homeDiagnoseInfos)){
+                homeDiagnoseInfos.stream().forEach(s->{
+                    diagnoseName.append(s.getDiagnoseName()+",");
+                    diagnoseCode.append(s.getIcdCode()+",");
+                    homePage.setHomePageId(s.getHomePageId());
+                });
+            }
+            if(diagnoseName.length()>0){
+                homePage.setOutpatientEmrDiagnose(diagnoseName.toString());
+            }else if(diagnoseCode.length()>0){
+                homePage.setOutpatientEmrDiagnoseCode(diagnoseCode.toString());
+            }
+        }catch (Exception e){
+            return homePage;
+        }
+        return homePage;
+    }
+
     /**
      * 从视图获取出院诊断信息
      *

+ 11 - 6
src/main/java/com/diagbot/facade/data/ABehospitalInfoFacade.java

@@ -267,12 +267,17 @@ public class ABehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 return RespDTO.onError("请输入医院编码!");
             }else{
                 UpdateWrapper<BehospitalInfo> updateWrapper=new UpdateWrapper<>();
-                updateWrapper.eq("behospital_code", aBehospitalInfoVO.getBehospitalCode())
-                        .eq("hospital_id", aBehospitalInfoVO.getHospitalId())
-                        .eq("is_deleted",IsDeleteEnum.N)
-                        .set("is_placefile",Long.valueOf("1"))
-                        .set("leave_hospital_date",aBehospitalInfoVO.getLeaveHospitalDate().isEmpty()?DateUtil.formatDateTime(DateUtil.now()):DateUtil.parseDateTime(aBehospitalInfoVO.getLeaveHospitalDate()))
-                        .set("gmt_modified", DateUtil.now());
+                updateWrapper.eq("behospital_code", aBehospitalInfoVO.getBehospitalCode());
+                updateWrapper.eq("hospital_id", aBehospitalInfoVO.getHospitalId());
+                updateWrapper.eq("is_deleted",IsDeleteEnum.N);
+                updateWrapper.set("is_qc_type",aBehospitalInfoVO.getIsQcType());
+                if(aBehospitalInfoVO.getIsQcType().equals("1")){
+                    updateWrapper.set("qc_type",0);
+                }
+                updateWrapper.set("is_daytime",aBehospitalInfoVO.getIsDaytime());
+                updateWrapper.set("is_placefile",Long.valueOf("1"));
+                updateWrapper.set("leave_hospital_date",aBehospitalInfoVO.getLeaveHospitalDate().isEmpty()?DateUtil.formatDateTime(DateUtil.now()):DateUtil.parseDateTime(aBehospitalInfoVO.getLeaveHospitalDate()));
+                updateWrapper.set("gmt_modified", DateUtil.now());
 
                 Boolean flag=update(new BehospitalInfo(),updateWrapper);
 //                aMedAbnormalInfoFacade.saveAbnormalInfo("病人住院登记-出院成功",aBehospitalInfoVO.getBehospitalCode(),JSON.toJSONString(aBehospitalInfoVO),flag.toString(),"");

+ 10 - 4
src/main/java/com/diagbot/facade/data/ADoctorAdviceFacade.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.entity.DoctorAdvice;
+import com.diagbot.entity.HomePage;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.DoctorAdviceServiceImpl;
 import com.diagbot.util.BeanUtil;
@@ -96,19 +97,24 @@ public class ADoctorAdviceFacade extends DoctorAdviceServiceImpl{
                 if (doctorAdvice != null) {
                     s.setIsDeleted(IsDeleteEnum.N.getKey());
                     s.setGmtModified(DateUtil.now());
-                    updateE.add(s);
+                    this.update(s,new UpdateWrapper<DoctorAdvice>()
+                            .eq("doctor_advice_id", s.getDoctorAdviceId())
+                            .eq("hospital_id", s.getHospitalId())
+                            .eq("behospital_code", s.getBehospitalCode()));
+                    //updateE.add(s);
                 } else {
                     s.setGmtCreate(new Date());
-                    addE.add(s);
+                    this.save(s);
+                    //addE.add(s);
                 }
             });
         }
-        if(addE.size()>0){
+        /*if(addE.size()>0){
             doctorAdviceService.saveBatch(addE);
         }
         if(updateE.size()>0){
             doctorAdviceService.updateBatchByKey(updateE);
-        }
+        }*/
     }
 
     public RespDTO deleteFlag(ADeleteFlagVO aDeleteFlagVO){

+ 10 - 4
src/main/java/com/diagbot/facade/data/AHomeDiagnoseInfoFacade.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.data.AHomeDiagnoseDTO;
 import com.diagbot.entity.HomeDiagnoseInfo;
+import com.diagbot.entity.HomeOperationInfo;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.HomeDiagnoseInfoServiceImpl;
 import com.diagbot.util.BeanUtil;
@@ -77,20 +78,25 @@ public class AHomeDiagnoseInfoFacade extends HomeDiagnoseInfoServiceImpl{
                     if (diagnoseInfo != null) {
                         s.setGmtModified(new Date());
                         s.setIsDeleted(IsDeleteEnum.N.getKey());
-                        updateE.add(s);
+                        this.update(s,new UpdateWrapper<HomeDiagnoseInfo>()
+                                .eq("home_page_id", s.getHomePageId())
+                                .eq("hospital_id", s.getHospitalId())
+                                .eq("diagnose_order_no", s.getDiagnoseOrderNo()));
+                        //updateE.add(s);
                     } else {
                         s.setGmtCreate(new Date());
-                        addE.add(s);
+                        this.save(s);
+                        //addE.add(s);
                     }
                 }
             });
         }
-        if(addE.size()>0){
+        /*if(addE.size()>0){
             homeDiagnoseInfoService.saveBatch(addE);
         }
         if(updateE.size()>0){
             homeDiagnoseInfoService.updateBatchByKey(updateE);
-        }
+        }*/
     }
 
     public RespDTO deleteFlag(ADeleteFlagVO aDeleteFlagVO){

+ 10 - 4
src/main/java/com/diagbot/facade/data/AHomeOperationInfoFacade.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.data.AHomeOperationDTO;
 import com.diagbot.entity.HomeOperationInfo;
+import com.diagbot.entity.MedicalRecordContent;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.HomeOperationInfoServiceImpl;
 import com.diagbot.util.BeanUtil;
@@ -82,20 +83,25 @@ public class AHomeOperationInfoFacade extends HomeOperationInfoServiceImpl{
                     if (operationInfo != null) {
                         s.setGmtModified(new Date());
                         s.setIsDeleted(IsDeleteEnum.N.getKey());
-                        updateE.add(s);
+                        this.update(s,new UpdateWrapper<HomeOperationInfo>()
+                                .eq("home_page_id", s.getHomePageId())
+                                .eq("operation_order_no", s.getOperationOrderNo())
+                                .eq("hospital_id", s.getHospitalId()));
+                        //updateE.add(s);
                     } else {
                         s.setGmtCreate(new Date());
-                        addE.add(s);
+                        this.save(s);
+                        //addE.add(s);
                     }
                 }
             });
         }
-        if(addE.size()>0){
+        /*if(addE.size()>0){
             homeOperationInfoService.saveBatch(addE);
         }
         if(updateE.size()>0){
             homeOperationInfoService.updateBatchByKey(updateE);
-        }
+        }*/
     }
 
     public RespDTO deleteFlag(ADeleteFlagVO aDeleteFlagVO){

+ 10 - 4
src/main/java/com/diagbot/facade/data/AHomePageFacade.java

@@ -10,6 +10,7 @@ import com.diagbot.dto.data.AHomePageDTO;
 import com.diagbot.entity.BasDoctorInfo;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.entity.HomePage;
+import com.diagbot.entity.MedicalRecordContent;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.facade.BehospitalInfoFacade;
 import com.diagbot.service.impl.HomePageServiceImpl;
@@ -246,10 +247,15 @@ public class AHomePageFacade extends HomePageServiceImpl{
                     if (homePage != null) {
                         s.setGmtModified(new Date());
                         s.setIsDeleted(IsDeleteEnum.N.getKey());
-                        updateE.add(s);
+                        this.update(s,new UpdateWrapper<HomePage>()
+                                .eq("home_page_id", s.getHomePageId())
+                                .eq("hospital_id", s.getHospitalId())
+                                .eq("behospital_code", s.getBehospitalCode()));
+                        //updateE.add(s);
                     } else {
                         s.setGmtCreate(new Date());
-                        addE.add(s);
+                        this.save(s);
+                        //addE.add(s);
                     }
                     try{
                         //从病案首页同步入院登记表中的住院医生behospitalDoctor,主治医生attendingDoctor和主任医生directorDoctor和ID
@@ -283,12 +289,12 @@ public class AHomePageFacade extends HomePageServiceImpl{
                 });
 
             }
-            if(addE.size()>0){
+            /*if(addE.size()>0){
                 homePageService.saveBatch(addE);
             }
             if(updateE.size()>0){
                 homePageService.updateBatchByKey(updateE);
-            }
+            }*/
         }catch (Exception e){
             log.error(e.getMessage(),e);
             aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页异常","", JSON.toJSONString(homePageList),"",e.getMessage());

+ 10 - 4
src/main/java/com/diagbot/facade/data/AMedicalRecordContentFacade.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.data.AMedicalRecordContentDTO;
+import com.diagbot.entity.MedicalRecord;
 import com.diagbot.entity.MedicalRecordContent;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.facade.ViewFacade;
@@ -85,10 +86,15 @@ public class AMedicalRecordContentFacade extends MedicalRecordContentServiceImpl
                         MedicalRecordContent mrContent = this.getOne(queryWrapper, false);
                         if (mrContent != null) {
                             s.setGmtModified(new Date());
-                            updateE.add(s);
+                            s.setIsDeleted(IsDeleteEnum.N.getKey());
+                            this.update(s,new UpdateWrapper<MedicalRecordContent>()
+                                    .eq("rec_id", s.getRecId())
+                                    .eq("hospital_id", s.getHospitalId()));
+                            //updateE.add(s);
                         } else {
                             s.setGmtCreate(new Date());
-                            addE.add(s);
+                            this.save(s);
+                            //addE.add(s);
                         }
                     } catch (Exception e) {
                         log.error(e.getMessage(), e);
@@ -96,12 +102,12 @@ public class AMedicalRecordContentFacade extends MedicalRecordContentServiceImpl
                     }
                 });
             }
-            if (addE.size() > 0) {
+            /*if (addE.size() > 0) {
                 medicalRecordContentService.saveBatch(addE);
             }
             if (updateE.size() > 0) {
                 medicalRecordContentService.updateBatchByKey(updateE);
-            }
+            }*/
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         }

+ 12 - 8
src/main/java/com/diagbot/facade/data/AMedicalRecordFacade.java

@@ -427,6 +427,10 @@ public class AMedicalRecordFacade extends MedicalRecordServiceImpl {
                                 qcTypeId = initQcTypeId(behospitalInfo);
                             }
                             behospitalInfo.setQcTypeId(qcTypeId);
+                            if(behospitalInfo.getIsQcType().equals("1")){
+                                //-是否质控 0:是 1:否   (质控规则 24小时内出院,无医嘱,费用为0)
+                                behospitalInfo.setQcTypeId(0L);
+                            }
                             behospitalInfoList.add(behospitalInfo);
                         }
                     }
@@ -439,24 +443,24 @@ public class AMedicalRecordFacade extends MedicalRecordServiceImpl {
                     if (mRecord != null) {
                         s.setGmtModified(new Date());
                         s.setIsDeleted(IsDeleteEnum.N.getKey());
-//                        this.update(new UpdateWrapper<MedicalRecord>()
-//                                .eq("rec_id", s.getRecId())
-//                                .eq("hospital_id", s.getHospitalId())
-//                                .eq("behospital_code", s.getBehospitalCode()));
-                        updateE.add(s);
+                        this.update(s,new UpdateWrapper<MedicalRecord>()
+                                .eq("rec_id", s.getRecId())
+                                .eq("hospital_id", s.getHospitalId())
+                                .eq("behospital_code", s.getBehospitalCode()));
+                        //updateE.add(s);
                     } else {
                         s.setGmtCreate(new Date());
                         this.save(s);
-//                        addE.add(s);
+                        //addE.add(s);
                     }
                 });
             }
-            if (addE.size() > 0) {
+           /* if (addE.size() > 0) {
                 medicalRecordService.saveBatch(addE);
             }
             if (updateE.size() > 0) {
                 medicalRecordService.updateBatchByKey(updateE);
-            }
+            }*/
             if (modelHospitalList.size() > 0) {
                 modelHospitalFacade.saveBatch(modelHospitalList);
             }

+ 67 - 0
src/main/java/com/diagbot/facade/his/DoctorHosFacade.java

@@ -0,0 +1,67 @@
+package com.diagbot.facade.his;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.diagbot.dto.GetEntryDefectImproveDeptDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.his.DoctorHosDTO;
+import com.diagbot.entity.MedNurse;
+import com.diagbot.entity.his.DoctorHos;
+import com.diagbot.service.impl.his.DoctorHosServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.his.DoctorHosVO;
+import com.google.common.collect.Lists;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public class DoctorHosFacade extends DoctorHosServiceImpl {
+
+    public List<DoctorHosDTO> getDoctorInfo(DoctorHosVO doctorHosVO){
+        List<DoctorHosDTO> dto= Lists.newArrayList();
+        try{
+            QueryWrapper<DoctorHos> query = new QueryWrapper<>();
+            query.notIn("JOB","护士");
+            if(StringUtil.isNotEmpty(doctorHosVO.getKeyString())){
+                query.like("USER_ID",doctorHosVO.getKeyString().toUpperCase()).or()
+                        .like("NAME",doctorHosVO.getKeyString()).or()
+                        .like("DEPT_CODE",doctorHosVO.getKeyString()).or()
+                        .like("DEPT_NAME",doctorHosVO.getKeyString());
+            }
+            List<DoctorHos> list=this.baseMapper.selectList(query);
+            dto=BeanUtil.listCopyTo(list,DoctorHosDTO.class);
+        }catch (Exception e){
+            log.error("获取医生信息异常"+e.getMessage(),new Throwable());
+        }
+        return dto;
+    }
+
+    public IPage<DoctorHosDTO> getDoctorPage(DoctorHosVO doctorHosVO){
+        IPage<DoctorHosDTO> pageDto = new Page<>();
+        try{
+            QueryWrapper<DoctorHos> query = new QueryWrapper<>();
+            query.notIn("JOB","护士");
+            if(StringUtil.isNotEmpty(doctorHosVO.getKeyString())){
+                query.like("USER_ID",doctorHosVO.getKeyString().toUpperCase()).or()
+                        .like("NAME",doctorHosVO.getKeyString()).or()
+                        .like("DEPT_CODE",doctorHosVO.getKeyString()).or()
+                        .like("DEPT_NAME",doctorHosVO.getKeyString());
+            }
+            Page<DoctorHos> pageHos = new Page<>(doctorHosVO.getCurrent(),doctorHosVO.getSize());
+            IPage<DoctorHos> hosPage=this.baseMapper.selectPage(pageHos,query);
+            List<DoctorHosDTO> dtoList=Lists.newLinkedList();
+            hosPage.getRecords().forEach(s->{
+                DoctorHosDTO dto=new DoctorHosDTO();
+                BeanUtil.copyProperties(s,dto);
+                dtoList.add(dto);
+            });
+            pageDto.setRecords(dtoList);
+        }catch (Exception e){
+            log.error("获取医生信息异常"+e.getMessage(),new Throwable());
+        }
+        return pageDto;
+    }
+}

+ 0 - 0
src/main/java/com/diagbot/facade/his/FeedbackHosFacade.java


Some files were not shown because too many files changed in this diff