Browse Source

Merge branch 'master' into his/qdnzyy

# Conflicts:
#	pom.xml
#	src/main/java/com/diagbot/MrqcSysApplication.java
#	src/main/java/com/diagbot/config/ResourceServerConfigurer.java
#	src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
#	src/main/java/com/diagbot/web/DataViewController.java
#	src/main/resources/application-his.yml
#	src/main/resources/application-test.yml
#	src/main/resources/mapper/BehospitalInfoMapper.xml
xuejiafu 3 years ago
parent
commit
d8737f8300
100 changed files with 7399 additions and 445 deletions
  1. 215 0
      doc/041.20220118_v2.2.0_通用版_申诉驳回/qc_init_v2.2.0_通用版_申诉驳回.sql
  2. 8 0
      doc/044.20220311v2.2.1/qc_initv2.2.1.sql
  3. 53 0
      doc/045.20220413v2.4.0通用版_消息通知/qc_init_v2.4.0_通用版_消息通知.sql
  4. 94 0
      doc/046.20220420v2.5.0_个性化版_湘雅人工质控缺陷反馈/qc_init_v2.5.0_个性化版_湘雅人工质控缺陷反馈.sql
  5. 180 0
      doc/048.20220506_v2.7.0_通用版_操作日志/qc_init_v2.7.0_通用版_操作日志.sql
  6. 14 0
      pom.xml
  7. 1 1
      src/main/java/com/diagbot/MrqcSysApplication.java
  8. 129 0
      src/main/java/com/diagbot/aggregate/LeaveHosCountByDeptAggregate.java
  9. 172 0
      src/main/java/com/diagbot/aop/CheckInfoAspect.java
  10. 675 0
      src/main/java/com/diagbot/aop/LogAspect.java
  11. 91 0
      src/main/java/com/diagbot/client/MedAppealExamineInfoServiceClient.java
  12. 102 0
      src/main/java/com/diagbot/client/MedAppealExamineInfoServiceClientFacade.java
  13. 48 0
      src/main/java/com/diagbot/client/MedAppealInfoServiceClient.java
  14. 52 0
      src/main/java/com/diagbot/client/MedAppealInfoServiceClientFacade.java
  15. 63 0
      src/main/java/com/diagbot/client/hystrix/MedAppealExamineInfoServiceHystrix.java
  16. 64 0
      src/main/java/com/diagbot/client/hystrix/MedAppealInfoServiceHystrix.java
  17. 6 0
      src/main/java/com/diagbot/config/MybatisPlusConfigurer.java
  18. 43 32
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  19. 223 0
      src/main/java/com/diagbot/config/mybatisLike/AbstractLikeSqlConverter.java
  20. 79 0
      src/main/java/com/diagbot/config/mybatisLike/MapLikeSqlConverter.java
  21. 160 0
      src/main/java/com/diagbot/config/mybatisLike/MybatisLikeSqlInterceptor.java
  22. 28 0
      src/main/java/com/diagbot/config/mybatisLike/ObjectLikeSqlConverter.java
  23. 46 4
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  24. 89 0
      src/main/java/com/diagbot/dto/AppealExamineRecordDTO.java
  25. 26 0
      src/main/java/com/diagbot/dto/BehInfoForH5DTO.java
  26. 4 0
      src/main/java/com/diagbot/dto/BehospitalAnalysisDTO.java
  27. 4 0
      src/main/java/com/diagbot/dto/BehospitalCodeDetail.java
  28. 4 0
      src/main/java/com/diagbot/dto/BehospitalInfoDTO.java
  29. 61 0
      src/main/java/com/diagbot/dto/CommonResult.java
  30. 113 0
      src/main/java/com/diagbot/dto/DoctorAverageLevelDTO.java
  31. 49 0
      src/main/java/com/diagbot/dto/DoctorAverageStatisticsDTO.java
  32. 36 0
      src/main/java/com/diagbot/dto/ExportBehospital_7DTO.java
  33. 31 0
      src/main/java/com/diagbot/dto/ExportBehospital_90DTO.java
  34. 23 0
      src/main/java/com/diagbot/dto/ExportCase_7DTO.java
  35. 37 0
      src/main/java/com/diagbot/dto/ExportDoctorAverageLevel_7DTO.java
  36. 36 0
      src/main/java/com/diagbot/dto/ExportDoctorAverageLevel_90DTO.java
  37. 48 0
      src/main/java/com/diagbot/dto/ExportDoctorAverageStatisticsDTO.java
  38. 58 0
      src/main/java/com/diagbot/dto/ExportGetAppealReviewDTO.java
  39. 57 0
      src/main/java/com/diagbot/dto/ExportGetComplaintRecordDTO.java
  40. 33 0
      src/main/java/com/diagbot/dto/ExportGetDoctorDetailPageDTO.java
  41. 17 0
      src/main/java/com/diagbot/dto/ExportMsg_7DTO.java
  42. 20 0
      src/main/java/com/diagbot/dto/GetAppealDeptDTO.java
  43. 72 0
      src/main/java/com/diagbot/dto/GetAppealInfoDTO.java
  44. 20 0
      src/main/java/com/diagbot/dto/GetAppealModeDTO.java
  45. 70 0
      src/main/java/com/diagbot/dto/GetAppealReviewDTO.java
  46. 92 0
      src/main/java/com/diagbot/dto/GetComplaintRecordDTO.java
  47. 30 0
      src/main/java/com/diagbot/dto/GetDefectDeptDTO.java
  48. 28 0
      src/main/java/com/diagbot/dto/GetDefectModeDTO.java
  49. 128 0
      src/main/java/com/diagbot/dto/GetDetailRecordListPageDTO.java
  50. 65 0
      src/main/java/com/diagbot/dto/GetDoctorDetailPageDTO.java
  51. 83 0
      src/main/java/com/diagbot/dto/GetMedDefectFeedbackPageDTO.java
  52. 45 0
      src/main/java/com/diagbot/dto/GetNewsNoticeInfoByIdDTO.java
  53. 22 0
      src/main/java/com/diagbot/dto/GetReviewerDTO.java
  54. 24 0
      src/main/java/com/diagbot/dto/LevelPercentDTO.java
  55. 40 0
      src/main/java/com/diagbot/dto/MedRecordContentOtherDTO.java
  56. 26 0
      src/main/java/com/diagbot/dto/MsgApiDTO.java
  57. 19 0
      src/main/java/com/diagbot/dto/MsgDTO.java
  58. 41 0
      src/main/java/com/diagbot/dto/NewsNoticePageDTO.java
  59. 2 0
      src/main/java/com/diagbot/dto/QcCasesDTO.java
  60. 4 0
      src/main/java/com/diagbot/dto/QcResultShortDTO.java
  61. 48 0
      src/main/java/com/diagbot/dto/SysLoginLogDTO.java
  62. 71 0
      src/main/java/com/diagbot/dto/SysOperationLogDTO.java
  63. 19 0
      src/main/java/com/diagbot/dto/his/DoctorHosDTO.java
  64. 5 0
      src/main/java/com/diagbot/entity/BehospitalInfo.java
  65. 72 3
      src/main/java/com/diagbot/entity/HomePage.java
  66. 103 0
      src/main/java/com/diagbot/entity/MedAppealExamineInfo.java
  67. 145 0
      src/main/java/com/diagbot/entity/MedAppealInfo.java
  68. 153 0
      src/main/java/com/diagbot/entity/MedDefectFeedback.java
  69. 109 0
      src/main/java/com/diagbot/entity/MedNewsNotice.java
  70. 8 81
      src/main/java/com/diagbot/entity/SysHospitalSet.java
  71. 91 0
      src/main/java/com/diagbot/entity/SysLoginLog.java
  72. 121 0
      src/main/java/com/diagbot/entity/SysOperationLog.java
  73. 77 0
      src/main/java/com/diagbot/entity/WorkFlowInfo.java
  74. 103 0
      src/main/java/com/diagbot/entity/his/DoctorHos.java
  75. 44 0
      src/main/java/com/diagbot/enums/AppealOperationTypeEnum.java
  76. 44 0
      src/main/java/com/diagbot/enums/ExampleOperationEnum.java
  77. 43 0
      src/main/java/com/diagbot/enums/ExampleStatusEnum.java
  78. 48 0
      src/main/java/com/diagbot/enums/NewsNoticeStatusEnum.java
  79. 48 0
      src/main/java/com/diagbot/enums/NewsNoticeTypeEnum.java
  80. 43 0
      src/main/java/com/diagbot/enums/WorkFlowNodeEnum.java
  81. 178 122
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  82. 76 120
      src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java
  83. 198 0
      src/main/java/com/diagbot/facade/ConsoleByDoctorFacade.java
  84. 250 71
      src/main/java/com/diagbot/facade/ConsoleExportFacade.java
  85. 1 0
      src/main/java/com/diagbot/facade/DataAnalysisFacade.java
  86. 42 0
      src/main/java/com/diagbot/facade/LogManagementFacade.java
  87. 22 0
      src/main/java/com/diagbot/facade/LoginLogFacade.java
  88. 310 0
      src/main/java/com/diagbot/facade/MedAppealExamineInfoManagementFacade.java
  89. 18 0
      src/main/java/com/diagbot/facade/MedAppealInfoManagementFacade.java
  90. 5 0
      src/main/java/com/diagbot/facade/MedCheckInfoFacade.java
  91. 304 0
      src/main/java/com/diagbot/facade/MedDefectFeedbackFacade.java
  92. 96 0
      src/main/java/com/diagbot/facade/MedNewsNoticeFacade.java
  93. 121 0
      src/main/java/com/diagbot/facade/MedicalRecordOtherFacade.java
  94. 114 0
      src/main/java/com/diagbot/facade/OperationLogFacade.java
  95. 4 0
      src/main/java/com/diagbot/facade/QcCasesEntryHospitalFacade.java
  96. 4 0
      src/main/java/com/diagbot/facade/QcCasesFacade.java
  97. 8 9
      src/main/java/com/diagbot/facade/QcresultInfoFacade.java
  98. 24 2
      src/main/java/com/diagbot/facade/RecordCheckFacade.java
  99. 126 0
      src/main/java/com/diagbot/facade/StatisticsForH5Facade.java
  100. 0 0
      src/main/java/com/diagbot/facade/SysDictionaryFacade.java

+ 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, '用户-申诉信息-申诉审核-病案详情查看');

+ 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='消息通知表';
+
+

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

@@ -0,0 +1,94 @@
+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`;
+
+
+/**
+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', '状态');

+ 180 - 0
doc/048.20220506_v2.7.0_通用版_操作日志/qc_init_v2.7.0_通用版_操作日志.sql

@@ -0,0 +1,180 @@
+
+use `qc`;
+-- 执行前请看注意事项!
+-- 操作日志相关配置
+-- 注意
+
+SET @hospitalId =4;
+
+/**
+sys_login_log 系统登录日志表
+ */
+DROP TABLE IF EXISTS `sys_login_log`;
+CREATE TABLE `sys_login_log` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `login_id` bigint(20) NOT NULL COMMENT '登录用户ID',
+  `login_name` varchar(64) NOT NULL COMMENT '登录用户名',
+  `login_date` datetime NOT NULL COMMENT '登录日期',
+  `login_ip` bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT '登录ip',
+  `login_address` varchar(64) DEFAULT NULL COMMENT '登录ip地址',
+  `login_browser` varchar(64) DEFAULT NULL COMMENT '浏览器',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=391 DEFAULT CHARSET=utf8 COMMENT='系统登录日志表';
+
+
+
+/**
+sys_operation_log 系统操作日志表
+ */
+DROP TABLE IF EXISTS `sys_operation_log`;
+CREATE TABLE `sys_operation_log` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `operation_id` bigint(20) DEFAULT NULL COMMENT '操作人用户ID',
+  `operation_name` varchar(64) DEFAULT NULL COMMENT '操作人用户名',
+  `operation_date` datetime NOT NULL COMMENT '操作日期',
+  `operation_record` varchar(256) DEFAULT NULL COMMENT '操作记录',
+  `operation_ip` bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT 'ip地址',
+  `operation_address` varchar(64) DEFAULT NULL COMMENT '操作地址',
+  `operation_method` varchar(256) NOT NULL COMMENT '操作方法',
+  `operation_way` varchar(32) NOT NULL COMMENT '操作请求方式',
+  `operation_url` varchar(256) NOT NULL COMMENT '操作url',
+  `operation_param` longtext COMMENT '操作参数',
+  `json_result` longtext COMMENT '返回参数',
+  `is_placefile` varchar(2) NOT NULL DEFAULT '0' COMMENT '是否归档(0:未归档,1:已归档)',
+  `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(32) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(32) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=25285 DEFAULT CHARSET=utf8 COMMENT='系统操作日志表';
+
+
+/**
+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 ('130', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '日志管理', '-1', 'YH-RZGL', '1', '1', '17', '用户-日志管理');
+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 ('131', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '操作日志', '130', 'YH-RZGL-CZRZ', '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 ('132', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '登录日志', '130', 'YH-RZGL-DLRZ', '1', '1', '2', '用户-日志管理-登录日志');
+
+
+/**
+sys_role_menu 超级管理员添加操作日志相关菜单
+ */
+INSERT INTO `sys_role_menu` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '130', '用户-日志管理');
+INSERT INTO `sys_role_menu` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '131', '用户-日志管理-操作日志');
+INSERT INTO `sys_role_menu` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '132', '用户-日志管理-登录日志');
+
+
+
+/**
+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, '修改模块分值', '/qc/cases/saveQcCases', '修改#name模块分值为#score_new分', 'operationLog');
+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, '修改条目提示信息', '/qc/casesEntryHospital/updataQcCasesEntry', '修改#name条目提示信息为#msg_new', 'operationLog');
+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, '禁用用户', '/sys/user/disable', '修改#linkman用户状态为禁用', 'operationLog');
+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, '启用用户', '/sys/user/enable', '修改#linkman用户状态为启用', 'operationLog');
+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, '修改条目提示信息', '/qc/casesEntryHospital/updataQcCasesEntry', '修改#name条目分值为#score_new分', 'operationLog');
+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, '修改条目提示信息', '/qc/casesEntryHospital/updataQcCasesEntry', '修改#name条目类型为{\"key\":\"isReject_new\",\"0\":\"非单否\",\"1\":\"单否\"}', 'operationLog');
+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, '修改条目提示信息', '/qc/casesEntryHospital/updataQcCasesEntry', '修改#name条目启用状态为{\"key\":\"isUsed_new\",\"0\":\"未启用\",\"1\":\"启用\"}', 'operationLog');
+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, '新增质控类型', '/qc/qcType/add', '新增#name质控类型', 'operationLog');
+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, '修改质控类型', '/qc/qcType/update', '修改#name质控类型', 'operationLog');
+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, '复制质控类型', '/qc/qcType/copy', '复制#name质控类型', 'operationLog');
+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, '删除质控类型', '/qc/qcType/delete', '删除#name质控类型', 'operationLog');
+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, '修改角色权限', '/sys/role/saveRoleMenu', '修改#name角色权限', 'operationLog');
+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, '修改用户角色', '/sys/user/editUserRoles', '修改#linkman所属角色为#roles', 'operationLog');
+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, '质控评分', '/qc/behospitalInfo/analyze', '人工手动评分', 'operationLog');
+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, '修改用户科室', '/sys/user/editUserDepts', '修改#linkman所属科室为#depts', 'operationLog');
+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, '导出', '/console/export/medicalCheckExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/homePageLevelExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/homePageLevelXYExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/entryGroupByEntryExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/levelExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/levelExport_TZ', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/getAverageDayNumExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/getAverageFeeExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/levelPercentGroupByDeptExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/entryCountGroupByEntryExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/entryCountGroupXYByEntryExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/entryCountGroupByCaseExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/entryStatisticsExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/qcResultShortPageExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/qcResultShortXYPageExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/leaveHosMrPageExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/qcCheckStatisticsExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/unModifyMRPageExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/medicalCheckInnerExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/unModifyMRStatisticsExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/reHos31DaysPageExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/hmImproveMRPageExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/qcCheckMRPageExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/qualityControlExport', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/homePageLevelExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/homePageLevelXYExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/entryCountGroupXYByExportDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/qcResultShortXYPageExportDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/entryGroupExportByDeptPage', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/entryGroupExportByDeptCase', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/entryGroupExportByDeptEntry', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/qcResultShortExportByDeptPage', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/levelExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/entryStatisticsExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/leaveHosMrPageExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/qcCheckStaExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/qcCheckMRPageExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/improveMRExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/reHos31DaysPageExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/unModifyMRSExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/unModifyMRPageExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/qualityControlExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/qc/behospitalInfo/exportExcel', '导出#excelName', 'operationLog');
+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, '导出', '/qc/behospitalInfo/exportQcresult', '导出#excelName', 'operationLog');
+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, '导出', '/qc/behospitalInfo/exportQcresultByDept', '导出#excelName', 'operationLog');
+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, '导出', '/qc/behospitalInfo/exportQcresultByPerson', '导出#excelName', 'operationLog');
+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, '导出', '/qc/behospitalInfo/exportQcresultByGroup', '导出#excelName', 'operationLog');
+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, '导出', '/qc/analysisDept/getEntryDefectImproveByDeptExport', '导出#excelName', 'operationLog');
+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, '导出', '/qc/analysisDept/getDefectImproveInnerByDeptExport', '导出#excelName', 'operationLog');
+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, '导出', '/qc/analysis/getQcClickByExport', '导出#excelName', 'operationLog');
+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, '导出', '/qc/analysis/getQcClickInnerPageByExport', '导出#excelName', 'operationLog');
+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, '导出', '/qc/analysis/getEntryDefectImproveByExport', '导出#excelName', 'operationLog');
+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, '导出', '/qc/analysis/getDefectImproveInnerByExport', '导出#excelName', 'operationLog');
+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, '导出', '/consoleByDoctor/doctorAverageStatisticsExport', '导出#excelName', 'operationLog');
+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, '导出', '/consoleByDoctor/doctorAverageLevelExport', '导出#excelName', 'operationLog');
+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, '导出', '/consoleByDoctor/getDoctorDetailPageExport', '导出#excelName', 'operationLog');
+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, '导出', '/consoleByDoctor/getDetailRecordListPageExport', '导出#excelName', 'operationLog');
+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, '导出', '/qc/appealExamineInfo/getComplaintRecordExport', '导出#excelName', 'operationLog');
+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, '导出', '/qc/appealExamineInfo/getAppealReviewExport', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/badQualifiedLevelPageXYExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/badUnQualifiedLevelPageXYExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/homeQualifiedPageOrLevelExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/homeUnQualifiedPageOrLevelExportByDept', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/badQualifiedLevelPagePageExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/badUnQualifiedLevelPagePageExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/badQualifiedLevelPageXYExport', '导出#excelName', 'operationLog');
+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, '导出', '/console/export/badUnQualifiedLevelPageXYExport', '导出#excelName', 'operationLog');
+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, '导出', '/print/export/medicalCheckExportByDept', '导出#excelName', 'operationLog');
+
+
+
+/**
+med_appeal_info 申诉信息表添加申诉人姓名字段
+ */
+ALTER TABLE `med_appeal_info` ADD  `claimant_name` varchar(60) DEFAULT NULL COMMENT '申诉人姓名' AFTER `claimant_id`;
+
+/**
+med_appeal_examine_info 修改申诉审核表创建时间和修改时间默认为空
+ */
+ALTER TABLE `med_appeal_examine_info`
+MODIFY COLUMN `gmt_create` datetime DEFAULT NULL COMMENT '记录创建时间' AFTER `is_deleted`;
+ALTER TABLE `med_appeal_examine_info`
+MODIFY COLUMN `gmt_modified` datetime DEFAULT NULL COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改' AFTER `gmt_create`;

+ 14 - 0
pom.xml

@@ -38,6 +38,7 @@
         <easypoi.version>4.2.0</easypoi.version>
         <patchca.version>1.1.2</patchca.version>
         <hutool.version>5.0.7</hutool.version>
+        <bitwalker.version>1.21</bitwalker.version>
         <docker-maven-plugin.version>1.2.1</docker-maven-plugin.version>
         <docker.image.prefix>192.168.2.122:5000/diagbotcloud</docker.image.prefix>
         <registryUrl>http://192.168.2.122:5000/repository/diagbotcloud/</registryUrl>
@@ -224,6 +225,13 @@
             <version>3.3.1</version>
         </dependency>
 
+        <!--多数据源-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+            <version>3.3.1</version>
+        </dependency>
+
         <!--oracle-database-->
         <dependency>
             <groupId>com.oracle</groupId>
@@ -247,6 +255,12 @@
 
 
 
+        <!-- 解析客户端操作系统、浏览器等 -->
+        <dependency>
+            <groupId>eu.bitwalker</groupId>
+            <artifactId>UserAgentUtils</artifactId>
+            <version>${bitwalker.version}</version>
+        </dependency>
     </dependencies>
 
     <!-- 私有仓库 -->

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

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

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

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

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

+ 675 - 0
src/main/java/com/diagbot/aop/LogAspect.java

@@ -0,0 +1,675 @@
+package com.diagbot.aop;
+
+import com.alibaba.fastjson.JSONObject;
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.exceptions.JWTDecodeException;
+import com.auth0.jwt.interfaces.Claim;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import com.diagbot.dto.QcCasesDTO;
+import com.diagbot.dto.QcCasesEntryHospitalDTO;
+import com.diagbot.dto.SysLoginLogDTO;
+import com.diagbot.dto.SysOperationLogDTO;
+import com.diagbot.dto.SysRoleDTO;
+import com.diagbot.entity.BasDeptInfo;
+import com.diagbot.entity.QcType;
+import com.diagbot.dto.SysUserRoleDTO;
+import com.diagbot.entity.SysHospitalSet;
+import com.diagbot.entity.SysRole;
+import com.diagbot.entity.SysUser;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.facade.LoginLogFacade;
+import com.diagbot.facade.OperationLogFacade;
+import com.diagbot.facade.SysHospitalSetFacade;
+import com.diagbot.util.AddressUtils;
+import com.diagbot.util.HttpUtils;
+import com.diagbot.util.IpUtils;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.DeleteQcTypeVO;
+import com.diagbot.vo.QcCasesEntryUpdataVO;
+import com.diagbot.vo.QcCasesSaveListVO;
+import com.diagbot.vo.SysRoleMenuSaveVO;
+import com.diagbot.vo.SysUserBaseVO;
+import com.diagbot.vo.SysUserDeptVO;
+import com.diagbot.vo.SysUserRoleVO;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import eu.bitwalker.useragentutils.UserAgent;
+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.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:日志记录处理
+ * @author: songxl
+ * @time: 2022/5/09 14:28
+ */
+
+@Aspect
+@Component
+public class LogAspect {
+    @Autowired
+    LoginLogFacade loginLogFacade;
+    @Autowired
+    SysHospitalSetFacade sysHospitalSetFacade;
+    @Autowired
+    OperationLogFacade operationLogFacade;
+
+    // 操作配置织入点
+    @Pointcut("execution(public * com.diagbot.web.*.*(..))" +
+            "&& !execution(public * com.diagbot.web.SysUserController.getJwt(..))" +
+            "&& !execution(public * com.diagbot.web.SysUserController.getCaptcha(..))" +
+            "&& !execution(public * com.diagbot.web.SysUserController.getJwtNoPass(..))" +
+            "&& !execution(public * com.diagbot.web.SysUserController.getHospitalMark(..))" +
+            "&& !execution(public * com.diagbot.web.SysUserController.midifyPassword(..))"
+    )
+    public void operPointCut() {
+    }
+
+    // 登录织入点
+    @Pointcut("execution(public * com.diagbot.web.SysUserController.getJwt(..))")
+    public void loginAfterReturning() {
+    }
+
+
+    /**
+     * 登录成功之后执行
+     *
+     * @param
+     */
+    @AfterReturning(pointcut = "loginAfterReturning()", returning = "jsonResult")
+    public void loginAfterReturning(JoinPoint joinPoint, Object jsonResult) {
+        loginLogHandle(joinPoint, jsonResult);
+    }
+
+    /**
+     * 操作之前执行
+     *
+     * @param
+     */
+    @Before(value = "operPointCut()")
+    public void operPointCut(JoinPoint joinPoint) {
+        operationLogHandler(joinPoint);
+    }
+
+    /**
+     * 操作日志处理类
+     *
+     * @param joinPoint
+     * @Return void
+     */
+    private void operationLogHandler(JoinPoint joinPoint) {
+
+        try {
+            //1.去sys_hospital_set表中拿所有需要进行操作日志记录的url
+            List<SysHospitalSet> hospitalSets = sysHospitalSetFacade
+                    .getHospitalSetByRemark(Long.parseLong(SysUserUtils.getCurrentHospitalID()), "operationLog");
+            if (ListUtil.isNotEmpty(hospitalSets)) {
+                havingOperation(hospitalSets, HttpUtils.getHttpServletRequest(), joinPoint);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 有包含操作日志配置的进行处理
+     *
+     * @param hospitalSets       操作日志配置
+     * @param httpServletRequest 请求
+     * @param joinPoint          入参
+     * @Return void
+     */
+    private void havingOperation(List<SysHospitalSet> hospitalSets, HttpServletRequest httpServletRequest, JoinPoint joinPoint) {
+
+        StringBuffer operationRecordBuffer = new StringBuffer();
+        //结果拼接容器
+        Map<String, Object> outMap = new HashMap<>();
+        initOutMap(outMap);
+        //1.判断该请求是否需要操作日志记录
+        hospitalSets.stream().forEach(hospitalSet -> {
+            if (matchers(hospitalSet.getCode(), httpServletRequest)) {
+                operationUrlHandler(outMap, HttpUtils.getHttpServletRequest().getRequestURI(), joinPoint);
+                //替换拼接结果
+                String operationRecord = makeOperationRecord(hospitalSet.getValue(), outMap);
+                if (!operationRecord.contains("#")) {
+                    operationRecordBuffer.append(operationRecord).append(";");
+                }
+
+                //                try {
+                //                    //由于两个对象大多结构不一样(例如:obj list),对比先不统一处理,放到case中每个方法单独处理
+                //                                        Object old = getOldOperation(HttpUtils.getHttpServletRequest().getRequestURI(), params);
+                //                                        Object[] args = joinPoint.getArgs();
+                //                                        if (args != null && args.length > 0){
+                //                                            for(int i = 0;i<args.length;i++){
+                //                                                //对比
+                //                                                comparePara(old, args[i]);
+                //                                            }
+                //
+                //                                        }
+                //                } catch (Exception e) {
+                //                    e.printStackTrace();
+                //                }
+            }
+
+        });
+        //保存操作记录
+        saveOperationLog(joinPoint, operationRecordBuffer.toString());
+    }
+
+    /**
+     * 一些常用结果装入map集合
+     *
+     * @param outMap
+     * @Return void
+     */
+    private void initOutMap(Map<String, Object> outMap) {
+        //添加excelName:获取前端要导出的文件名
+        if (StringUtil.isNotBlank(SysUserUtils.getExcelName())) {
+            try {
+                outMap.put("#excelName", URLDecoder.decode(SysUserUtils.getExcelName(), "UTF-8"));
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        if (StringUtil.isNotBlank(SysUserUtils.getIsPlacefile())) {
+            outMap.put("#isPlacefile", SysUserUtils.getIsPlacefile());
+        }
+    }
+
+    /**
+     * 保存操作日志
+     *
+     * @param joinPoint
+     * @param operationRecord
+     * @Return void
+     */
+    private void saveOperationLog(JoinPoint joinPoint, String operationRecord) {
+
+        try {
+            if (StringUtil.isNotBlank(operationRecord)) {
+                SysOperationLogDTO operationLog = new SysOperationLogDTO();
+                Date date = new Date();
+                operationLog.setOperationDate(date);
+                operationLog.setGmtCreate(date);
+                operationLog.setOperationId(SysUserUtils.getCurrentPrincipleID());
+                try {
+                    SysUser sysUser = operationLogFacade.getSysUser(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
+                    if (sysUser != null) {
+                        operationLog.setOperationName(sysUser.getLinkman());
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                String ip = HttpUtils.getIpAddress();
+                if (IpUtils.isIPv4LiteralAddress(ip)) {
+                    operationLog.setOperationIp(ip);
+                } else {
+                    operationLog.setRemark("[非ipv4地址]:" + ip);
+                }
+
+                // 设置方法名称
+                String className = joinPoint.getTarget().getClass().getName();
+                String methodName = joinPoint.getSignature().getName();
+                operationLog.setOperationMethod(className + "." + methodName + "()");
+                // 设置请求方式
+                operationLog.setOperationWay(HttpUtils.getHttpServletRequest().getMethod());
+                operationLog.setOperationUrl(HttpUtils.getHttpServletRequest().getRequestURI());
+                // 处理设置注解上的参数
+                try {
+                    String params = getControllerMethodDescription(joinPoint);
+                    if (StringUtils.isNotBlank(params)) {
+                        operationLog.setOperationParam(params);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                operationLog.setIsPlacefile(SysUserUtils.getIsPlacefile() == null ? "0" : SysUserUtils.getIsPlacefile());
+                operationLog.setOperationRecord(operationRecord.substring(0, operationRecord.length() - 1));
+                operationLog.setHospitalId(SysUserUtils.getCurrentHospitalID());
+                operationLogFacade.getBaseMapper().addOperationRecord(operationLog);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 操作日志模板拼接
+     *
+     * @param value  数据库模板内容弄个
+     * @param outMap 拼接集合<占位符,替换值>
+     * @Return java.lang.String
+     */
+    private String makeOperationRecord(String value, Map<String, Object> outMap) {
+
+        if (StringUtil.isBlank(value) || outMap.keySet().size() == 0) {
+            return value;
+        }
+        //直接占位符替换
+        for (String key : outMap.keySet()) {
+            if (value.contains(key)) {
+                value = value.replaceAll(key, outMap.get(key) + "");
+            }
+        }
+        try {
+            //对通过入参的值为key获取value[针对统一url,根据入参的值不同,替换的内容也不同,把这些内容拼接到模板value中{"入参值1":"拼接结果1","入参值2":"拼接结果2","key":"入参名称"}]
+            value = transformModeValue(value, outMap);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return value;
+    }
+
+    /**
+     * 针对根据入参值不同取不同内容进行处理
+     * 根据入参的值不同,替换的内容也不同,把这些内容拼接到模板value中{"入参值1":"拼接结果1","入参值2":"拼接结果2","key":"入参名称"}
+     *
+     * @param value
+     * @param outMap
+     * @Return java.lang.String
+     */
+    private String transformModeValue(String value, Map<String, Object> outMap) {
+        while (value.contains("{") && value.contains("}")) {
+            String strParam = value.substring(value.indexOf("{"), value.indexOf("}") + 1);
+            JSONObject paramJSON = JSONObject.parseObject(strParam);
+            String temp = paramJSON.getString(outMap.get("#" + paramJSON.getString("key")) + "");
+            if (temp == null) {
+                temp = "#";
+            }
+            value = StringUtils.replace(value, strParam, temp);
+        }
+        return value;
+    }
+
+    private void comparePara(Object old, Object params, Map<String, Object> outMap) {
+        try {
+            //对比新旧数据变化
+            compareTwoClass(old, params, outMap);
+            //拼接操作结果
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * 两个对象进行比较
+     *
+     * @param class1
+     * @param class2
+     * @param outMap
+     * @Return void
+     */
+    public static void compareTwoClass(Object class1, Object class2, Map<String, Object> outMap) {
+
+        //获取对象的class
+        Class<?> clazz1 = class1.getClass();
+        Class<?> clazz2 = class2.getClass();
+        //获取对象的属性列表
+        Field[] field1 = clazz1.getDeclaredFields();
+        Field[] field2 = clazz2.getDeclaredFields();
+        List<String> fieldList1 = new ArrayList<>();
+        for (Field field : field1) {
+            fieldList1.add(field.getName());
+        }
+        for (Field field : field2) {
+            fieldList1.remove(field.getName());
+        }
+
+        //遍历属性列表field1
+        for (int i = 0; i < field1.length; i++) {
+            field1[i].setAccessible(true);
+            //遍历属性列表field2
+            for (int j = 0; j < field2.length; j++) {
+                //如果field1[i]属性名与field2[j]属性名内容相同
+                if (field1[i].getName().equals(field2[j].getName())) {
+                    field2[j].setAccessible(true);
+                    try {
+                        //如果field1[i]属性值与field2[j]属性值内容不相同
+                        if (!compareTwo(field1[i].get(class1), field2[j].get(class2))) {
+                            outMap.put("#" + field1[i].getName() + "_old", field1[i].get(class1));
+                            outMap.put("#" + field1[i].getName() + "_new", field2[j].get(class2));
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                    break;
+                }
+            }
+            //把old中有的属性new中没有的加入map
+            if (fieldList1.contains(field1[i].getName())) {
+                try {
+                    outMap.put("#" + field1[i].getName(), field1[i].get(class1));
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+    }
+
+
+    //对比两个数据是否内容相同
+    public static boolean compareTwo(Object object1, Object object2) {
+
+        if (object1 == null && object2 == null) {
+            return true;
+        }
+        if (object1 == null && object2 != null) {
+            return false;
+        }
+        if (object1.equals(object2)) {
+            return true;
+        }
+        return false;
+    }
+
+    private Object getOldOperation(String requestURI, String params) {
+        switch (requestURI) {
+            case "/qc/cases/saveQcCases"://修改模块分值
+                if (StringUtil.isNotEmpty(params)) {
+                    //通过id获取模块名称以及目前分值
+                    JSONObject paramJSON = JSONObject.parseObject(params);
+                    QcCasesDTO old = operationLogFacade.getQcCasesById(paramJSON.getJSONArray("qcCasesSaveVOList")
+                            .getJSONObject(0).getString("id"));
+                    return old;
+                }
+                break;
+        }
+        return null;
+    }
+
+    /**
+     * 操作日志处理中心
+     *
+     * @param outMap
+     * @param requestURI
+     * @param joinPoint
+     * @Return void
+     */
+    private void operationUrlHandler(Map<String, Object> outMap, String requestURI, JoinPoint joinPoint) {
+
+        try {
+            Object[] args = joinPoint.getArgs();
+            switch (requestURI) {
+                case "/qc/cases/saveQcCases"://修改模块分值
+                    if (null != args && args.length >= 0) {
+                        //通过id获取模块名称以及目前分值
+                        if (args[0] instanceof QcCasesSaveListVO) {
+                            QcCasesSaveListVO qcCasesSaveListVO = (QcCasesSaveListVO) args[0];
+                            QcCasesDTO old = operationLogFacade.getQcCasesById(qcCasesSaveListVO.getQcCasesSaveVOList().get(0).getId() + "");
+                            compareTwoClass(old, qcCasesSaveListVO.getQcCasesSaveVOList().get(0), outMap);
+                        }
+                    }
+                    break;
+                case "/sys/user/disable"://禁用用户
+                    if (null != args && args.length >= 0) {
+                        //通过id获取用户具体信息
+                        if (args[0] instanceof SysUserBaseVO) {
+                            SysUserBaseVO sysUserBaseVO = (SysUserBaseVO) args[0];
+                            SysUser sysUser = operationLogFacade.getSysUser(sysUserBaseVO.getUserId());
+                            compareTwoClass(sysUser, sysUserBaseVO.getUserId(), outMap);
+                        }
+                    }
+                    break;
+                case "/sys/user/enable"://启用用户
+                    if (null != args && args.length >= 0) {
+                        //通过id获取用户具体信息
+                        if (args[0] instanceof SysUserBaseVO) {
+                            SysUserBaseVO sysUserBaseVO = (SysUserBaseVO) args[0];
+                            SysUser sysUser = operationLogFacade.getSysUser(sysUserBaseVO.getUserId());
+                            compareTwoClass(sysUser, sysUserBaseVO.getUserId(), outMap);
+                        }
+                    }
+                    break;
+                case "/sys/role/saveRoleMenu"://修改角色权限
+                    if (null != args && args.length >= 0) {
+                        //通过id获取角色信息
+                        if (args[0] instanceof SysRoleMenuSaveVO) {
+                            SysRoleMenuSaveVO sysRoleMenuSaveVO = (SysRoleMenuSaveVO) args[0];
+                            SysRole sysRole = operationLogFacade.getRoleMenu(sysRoleMenuSaveVO.getRoleId());
+                            compareTwoClass(sysRole, sysRoleMenuSaveVO, outMap);
+                        }
+                    }
+                    break;
+                case "/sys/user/editUserRoles"://修改用户角色
+                    if (null != args && args.length >= 0) {
+                        //通过id获取角色信息
+                        if (args[0] instanceof SysUserRoleVO) {
+                            SysUserRoleVO sysUserRoleVO = (SysUserRoleVO) args[0];
+                            SysUserRoleDTO sysUserRoleDTO = operationLogFacade.editUserRoles(sysUserRoleVO.getUserId());
+                            SysUser sysUser = operationLogFacade.getSysUser(sysUserRoleVO.getUserId());
+                            compareTwoClass(sysUser, sysUserRoleVO.getUserId(), outMap);
+                            if (ListUtil.isNotEmpty(sysUserRoleDTO.getSelRoles())) {
+                                if (ListUtil.isNotEmpty(sysUserRoleVO.getRoleIds())) {
+                                    List<Long> oldRoleIds = sysUserRoleDTO.getSelRoles().stream().map(SysRoleDTO::getId).collect(Collectors.toList());
+                                    List<Long> temp = new ArrayList<>(sysUserRoleVO.getRoleIds());
+                                    temp.removeAll(oldRoleIds);
+                                    if (ListUtil.isNotEmpty(temp)) {//角色被改动
+                                        List<SysRole> roles = operationLogFacade.getSysUserRoles(sysUserRoleVO.getRoleIds());
+                                        outMap.put("#roles", roles.stream().map(SysRole::getName).collect(Collectors.joining(",")));
+                                    } else if (sysUserRoleVO.getRoleIds().size() != oldRoleIds.size()) {//两次角色不一致
+                                        List<SysRole> roles = operationLogFacade.getSysUserRoles(sysUserRoleVO.getRoleIds());
+                                        outMap.put("#roles", roles.stream().map(SysRole::getName).collect(Collectors.joining(",")));
+                                    }
+                                } else {
+                                    outMap.put("#roles", "空");
+                                }
+                            } else {
+                                if (ListUtil.isNotEmpty(sysUserRoleVO.getRoleIds())) {//角色被改动
+                                    List<SysRole> roles = operationLogFacade.getSysUserRoles(sysUserRoleVO.getRoleIds());
+                                    outMap.put("#roles", roles.stream().map(SysRole::getName).collect(Collectors.joining(",")));
+                                }
+                            }
+                        }
+                    }
+                    break;
+                case "/sys/user/editUserDepts"://修改用户科室
+                    if (null != args && args.length >= 0) {
+                        //通过id获取角色信息
+                        if (args[0] instanceof SysUserDeptVO) {
+                            SysUserDeptVO sysUserDeptVO = (SysUserDeptVO) args[0];
+                            //获取用户现在的科室信息
+                            List<String> oldDeptIds = operationLogFacade.getUserDept(sysUserDeptVO.getUserId());
+                            SysUser sysUser = operationLogFacade.getSysUser(sysUserDeptVO.getUserId());
+                            compareTwoClass(sysUser, sysUserDeptVO.getUserId(), outMap);
+                            if (ListUtil.isNotEmpty(oldDeptIds)) {
+                                if (ListUtil.isNotEmpty(sysUserDeptVO.getDeptIds())) {
+                                    List<String> temp = new ArrayList<>(sysUserDeptVO.getDeptIds());
+                                    temp.removeAll(oldDeptIds);
+                                    if (ListUtil.isNotEmpty(temp)) {//科室被改动
+                                        List<BasDeptInfo> deptInfos = operationLogFacade.getSysDepts(sysUserDeptVO.getDeptIds());
+                                        outMap.put("#depts", deptInfos.stream().map(BasDeptInfo::getDeptName).collect(Collectors.joining(",")));
+                                    } else if (sysUserDeptVO.getDeptIds().size() != oldDeptIds.size()) {//两次科室不一致
+                                        List<BasDeptInfo> deptInfos = operationLogFacade.getSysDepts(sysUserDeptVO.getDeptIds());
+                                        outMap.put("#depts", deptInfos.stream().map(BasDeptInfo::getDeptName).collect(Collectors.joining(",")));
+                                    }
+                                } else {
+                                    outMap.put("#depts", "空");
+                                }
+                            } else {
+                                if (ListUtil.isNotEmpty(sysUserDeptVO.getDeptIds())) {//科室被改动
+                                    List<BasDeptInfo> deptInfos = operationLogFacade.getSysDepts(sysUserDeptVO.getDeptIds());
+                                    outMap.put("#depts", deptInfos.stream().map(BasDeptInfo::getDeptName).collect(Collectors.joining(",")));
+                                }
+                            }
+                        }
+                    }
+                    break;
+                case "/qc/casesEntryHospital/updataQcCasesEntry"://修改条目提示信息
+                    if (null != args && args.length >= 0) {
+                        //通过id获取模块名称以及目前分值
+                        if (args[0] instanceof QcCasesEntryUpdataVO) {
+                            QcCasesEntryUpdataVO qcCasesEntryUpdataVO = (QcCasesEntryUpdataVO) args[0];
+                            QcCasesEntryHospitalDTO qcCasesEntryHospitalDTO = operationLogFacade.getQcCasesEntryById(qcCasesEntryUpdataVO.getId());
+                            compareTwoClass(qcCasesEntryHospitalDTO, qcCasesEntryUpdataVO, outMap);
+                        }
+                    }
+                    break;
+                case "/qc/qcType/delete":
+                    if (null != args && args.length >= 0) {
+                        if (args[0] instanceof DeleteQcTypeVO) {
+                            DeleteQcTypeVO deleteQcTypeVO = (DeleteQcTypeVO) args[0];
+                            if (ListUtil.isNotEmpty(deleteQcTypeVO.getIds())) {
+                                QcType qcType = operationLogFacade.getQCTypeById(deleteQcTypeVO.getIds().get(0));
+                                compareTwoClass(qcType, new Object(), outMap);
+                            }
+                        }
+                    }
+                    break;
+                default:
+                    if (null != args && args.length >= 0) {
+                        for (Object o : args) {
+                            compareTwoClass(o, new Object(), outMap);
+                        }
+                    }
+                    break;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * @Description:获取请求的参数
+     * @Param: [joinPoint, logInformation]
+     * @return: void
+     * @Author: cy
+     * @Date: 2021/9/2
+     */
+    private String getControllerMethodDescription(JoinPoint joinPoint) {
+        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) {
+                String params = argsArrayToString(joinPoint.getArgs());
+                return params;
+            }
+        }
+        return "";
+    }
+
+
+    /**
+     * 参数拼装
+     *
+     * @Description:
+     * @Param: [paramsArray]
+     * @return: java.lang.String
+     * @Author: cy
+     * @Date: 2021/9/2
+     */
+    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();
+    }
+
+    /**
+     * 登录日志处理
+     *
+     * @param joinPoint
+     * @param jsonResult
+     * @Return void
+     */
+    public void loginLogHandle(JoinPoint joinPoint, Object jsonResult) {
+        // 返回参数
+        if (null != jsonResult) {
+            ObjectMapper objectWriter = new ObjectMapper();
+            try {
+                String strResult = objectWriter.writeValueAsString(jsonResult);
+                JSONObject JSONResult = JSONObject.parseObject(strResult);
+                SysLoginLogDTO loginLog = new SysLoginLogDTO();
+                Date date = new Date();
+                loginLog.setLoginDate(date);
+                loginLog.setGmtCreate(date);
+                String token = JSONResult.getJSONObject("data").get("accessToken").toString();
+                DecodedJWT jwt = decodedJWT(token);
+                Map<String, Claim> claims = jwt.getClaims();
+                Claim claimUID = claims.get("user_id");
+                Claim claimUName = claims.get("user_name");
+                loginLog.setLoginId(claimUID.asLong());
+                loginLog.setLoginName(claimUName.asString());
+                loginLog.setLoginIp(HttpUtils.getIpAddress() == null ? "" : HttpUtils.getIpAddress());
+                UserAgent userAgent = UserAgent.parseUserAgentString(HttpUtils.getHttpServletRequest().getHeader("User-Agent"));
+                loginLog.setLoginAddress(AddressUtils.getRealAddressByIP(loginLog.getLoginIp()));
+                // 获取客户端浏览器
+                String browser = userAgent.getBrowser().getName();
+                loginLog.setLoginBrowser(browser);
+                String hospitalId = claims.get("hosp_id").asLong()+"";
+                loginLog.setHospitalId(hospitalId == null ? "0" : hospitalId);
+
+                //插入登录日志
+                loginLogFacade.getBaseMapper().addLoginLog(loginLog);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * token解析
+     *
+     * @param token
+     * @Return com.auth0.jwt.interfaces.DecodedJWT
+     */
+    public static DecodedJWT decodedJWT(String token) {
+
+        try {
+            DecodedJWT jwt = JWT.decode(token);
+            return jwt;
+        } catch (JWTDecodeException var2) {
+            var2.printStackTrace();
+            throw new CommonException(CommonErrorCode.ANALYZER_TOKEN_FAIL);
+        }
+    }
+
+    /**
+     * url比对
+     *
+     * @param url
+     * @param request
+     * @Return boolean
+     */
+    private boolean matchers(String url, HttpServletRequest request) {
+
+        AntPathRequestMatcher matcher = new AntPathRequestMatcher(url);
+        if (matcher.matches(request)) {
+            return true;
+        }
+        return false;
+    }
+}
+
+

+ 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();
+//    }
+
 }

+ 43 - 32
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -119,7 +119,8 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/consoleByDept/qcResultShortXYPageByDept").permitAll()
                 .antMatchers("/print/export/qcResultShortXYPageExportDept").permitAll()
                 .antMatchers("/consoleByDept/badLevelXYPageByDept").permitAll()
-                .antMatchers("/print/export/badLevelPageXYExportByDept").permitAll()
+                .antMatchers("/print/export/badUnQualifiedLevelPageXYExportByDept").permitAll()
+                .antMatchers("/print/export/badQualifiedLevelPageXYExportByDept").permitAll()
                 .antMatchers("/console/leaveHosCount").permitAll()
                 .antMatchers("/console/medicalRecordIndicator").permitAll()
                 .antMatchers("/console/codingMonthly").permitAll()
@@ -194,33 +195,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/data/getColumnZhAndCh").permitAll()
                 .antMatchers("/qc/data/analyseRec").permitAll()
                 .antMatchers("/qc/data/hisDataDeal").permitAll()
-                .antMatchers("/qc/data/resolveNote").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()
@@ -235,6 +210,8 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .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()
@@ -267,9 +244,9 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .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()
@@ -292,8 +269,42 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/analysisDept/getDefectImproveInnerByDeptExport").permitAll()
                 .antMatchers("/qc/behospitalInfo/historyAnalyze").permitAll()
                 .antMatchers("/qc/behospitalInfo/operationLog").permitAll()
-                .antMatchers("/qcView/data/**").permitAll()
-                .antMatchers("/qc/data/**").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("/h5/statistics/**").permitAll()
+                .antMatchers("/logManage/**").permitAll()
+                .antMatchers("/qc/qcType/add").permitAll()
+                .antMatchers("/qc/qcType/update").permitAll()
+                .antMatchers("/qc/qcType/copy").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);
+    }
+
+}

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

@@ -171,7 +171,8 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/consoleByDept/qcResultShortXYPageByDept", request)
                 || matchers("/print/export/qcResultShortXYPageExportDept", request)
                 || matchers("/consoleByDept/badLevelXYPageByDept", request)
-                || matchers("/print/export/badLevelPageXYExportByDept", request)
+                || matchers("/print/export/badUnQualifiedLevelPageXYExportByDept", request)
+                || matchers("/print/export/badQualifiedLevelPageXYExportByDept", request)
                 || matchers("/console/leaveHosCount", request)
                 || matchers("/console/levelPercentGroupByDeptPage", request)
                 || matchers("/console/levelStatistics", request)
@@ -284,16 +285,21 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/console/export/medicalCheckInnerExport", request)
                 || matchers("/console/badLevelPage", request)
                 || matchers("/console/badLevelXYPage", request)
-                || matchers("/console/export/badLevelPagePageExport", request)
-                || matchers("/console/export/badLevelPageXYExport", request)
+                || matchers("/console/export/badUnQualifiedLevelPagePageExport", request)
+                || matchers("/console/export/badQualifiedLevelPagePageExport", request)
+                || matchers("/console/export/badUnQualifiedLevelPageXYExport", request)
+                || matchers("/console/export/badQualifiedLevelPageXYExport", 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)
                 || matchers("/bas/doctor/getList", request)
                 || matchers("/consoleByDept/homePageOrGoodLevelByDept", request)
                 || matchers("/print/export/homePageLevelExportByDept", request)
-                || matchers("/print/export/homePageOrLevelExportByDept", request)
+                || matchers("/print/export/homeUnQualifiedPageOrLevelExportByDept", request)
+                || matchers("/print/export/homeQualifiedPageOrLevelExportByDept", request)
                 || matchers("/print/export/entryGroupExportByDeptPage", request)
                 || matchers("/print/export/entryGroupExportByDeptCase", request)
                 || matchers("/print/export/entryGroupExportByDeptEntry", request)
@@ -344,6 +350,42 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/qc/analysisDept/getDefectImproveInnerByDeptExport", 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("/medNewsNotice/**", request)
+                || matchers("/h5/statistics/**", request)
+                || matchers("/logManage/**", request)
+                || matchers("/qc/qcType/add", request)
+                || matchers("/qc/qcType/update", request)
+                || matchers("/qc/qcType/copy", request)
                 || matchers("/qc/data/**", request)
                 || matchers("/qcView/data/**", request)
                 || matchers("/", request)) {

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

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

@@ -0,0 +1,26 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2022/5/6 16:16
+ */
+@Data
+public class BehInfoForH5DTO {
+    private String name;
+    private String sex;
+    private String fileCode;
+    private String doctorId;
+    private String doctorName;
+    private String deptId;
+    private String deptName;
+    private String behospitalCode;
+    private Date leaveHospitalDate;
+    private Date behospitalDate;
+    private String LEVEL;
+    private Double deductScore;
+}

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

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

@@ -0,0 +1,70 @@
+package com.diagbot.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.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 fileCode;
+
+    @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;
+
+}

+ 24 - 0
src/main/java/com/diagbot/dto/LevelPercentDTO.java

@@ -0,0 +1,24 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2022/5/6 17:17
+ */
+@Data
+public class LevelPercentDTO {
+    private String deptId;
+    private String deptName;
+    private Integer totleNum;
+    private Integer firstLevelNum;
+    private Integer secondLevelNum;
+    private Integer thirdLevelNum;
+    private Double firstPercent;
+    private Double secondPercent;
+    private Double thirdPercent;
+    private String firstPercentStr;
+    private String secondPercentStr;
+    private String thirdPercentStr;
+}

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

+ 2 - 0
src/main/java/com/diagbot/dto/QcCasesDTO.java

@@ -2,6 +2,7 @@ package com.diagbot.dto;
 
 import lombok.Getter;
 import lombok.Setter;
+import lombok.ToString;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
@@ -14,6 +15,7 @@ import java.util.Date;
  */
 @Getter
 @Setter
+@ToString
 public class QcCasesDTO {
     /**
      * 主键

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

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

@@ -0,0 +1,48 @@
+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
+ * @time: 2022/5/09 14:28
+ */
+@Getter
+@Setter
+@ApiModel("系统登录日志列表页-接口出参")
+public class SysLoginLogDTO implements Serializable {
+
+    private static final long serialVersionUID = 6123084820573676056L;
+
+
+    @ApiModelProperty(value = "登录用户ID")
+    private Long loginId;
+
+    @ApiModelProperty(value = "登录用户名")
+    private String loginName;
+
+    @ApiModelProperty(value = "登录日期")
+    private Date loginDate;
+
+    @ApiModelProperty(value = "登录ip")
+    private String loginIp;
+
+    @ApiModelProperty(value = "地区")
+    private String loginAddress;
+
+    @ApiModelProperty(value = "浏览器")
+    private String loginBrowser;
+
+    @ApiModelProperty(value = "创建日期")
+    private Date GmtCreate;
+
+    @ApiModelProperty(value = "医院id")
+    private String hospitalId;
+}

+ 71 - 0
src/main/java/com/diagbot/dto/SysOperationLogDTO.java

@@ -0,0 +1,71 @@
+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
+ * @time: 2022/5/09 14:28
+ */
+@Getter
+@Setter
+@ApiModel("系统登录日志列表页-接口出参")
+public class SysOperationLogDTO implements Serializable {
+
+    private static final long serialVersionUID = -2781154978311006059L;
+
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @ApiModelProperty(value = "操作人用户ID")
+    private String operationId;
+
+    @ApiModelProperty(value = "操作人用户名")
+    private String operationName;
+
+    @ApiModelProperty(value = "操作日期")
+    private Date operationDate;
+
+    @ApiModelProperty(value = "操作记录")
+    private String operationRecord;
+
+    @ApiModelProperty(value = "ip地址")
+    private String operationIp;
+
+    @ApiModelProperty(value = "操作地址")
+    private String operationAddress;
+
+    @ApiModelProperty(value = "操作方法")
+    private String operationMethod;
+
+    @ApiModelProperty(value = "操作请求方式")
+    private String operationWay;
+
+    @ApiModelProperty(value = "操作url")
+    private String operationUrl;
+
+    @ApiModelProperty(value = "操作参数")
+    private String operationParam;
+
+    @ApiModelProperty(value = "返回参数")
+    private String jsonResult;
+
+    @ApiModelProperty(value = "记录创建时间")
+    private Date gmtCreate;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "是否归档(0:未归档,1:已归档)")
+    private String isPlacefile;
+
+    @ApiModelProperty(value = "医院id")
+    private String hospitalId;
+}

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

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

@@ -173,6 +173,11 @@ public class BehospitalInfo implements Serializable {
      */
     private String inState;
 
+    /**
+     * 是否日间病例,1:是,0:否
+     */
+    private String isDaytime;
+
     /**
      * 是否删除,N:未删除,Y:删除
      */

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

@@ -89,7 +89,7 @@ public class HomePage implements Serializable {
     private Date birthday;
 
     /**
-     * 年龄(拼接年龄单位)
+     * 年龄
      */
     private String age;
 
@@ -724,12 +724,12 @@ public class HomePage implements Serializable {
     private String isPhysicalRestraint;
 
     /**
-     * 颅脑损伤患者昏迷时间(入院前)
+     * 入院前颅脑损伤患者昏迷时间
      */
     private String tbiBehospitalBeforeTime;
 
     /**
-     * 颅脑损伤患者昏迷时间(入院后)
+     * 入院后颅脑损伤患者昏迷时间
      */
     private String tbiBehospitalAfterTime;
 
@@ -788,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 +
+        "}";
+    }
+}

+ 8 - 81
src/main/java/com/diagbot/entity/SysHospitalSet.java

@@ -2,8 +2,11 @@ package com.diagbot.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * <p>
@@ -13,6 +16,8 @@ import java.io.Serializable;
  * @author zhoutg
  * @since 2020-07-06
  */
+@Getter
+@Setter
 public class SysHospitalSet implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -31,12 +36,12 @@ public class SysHospitalSet implements Serializable {
     /**
      * 记录创建时间
      */
-    private LocalDateTime gmtCreate;
+    private Date gmtCreate;
 
     /**
      * 记录修改时间,如果时间是1970年则表示纪录未修改
      */
-    private LocalDateTime gmtModified;
+    private Date gmtModified;
 
     /**
      * 创建人,0表示无创建人值
@@ -70,84 +75,6 @@ public class SysHospitalSet implements Serializable {
      */
     private String remark;
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-    public String getIsDeleted() {
-        return isDeleted;
-    }
-
-    public void setIsDeleted(String isDeleted) {
-        this.isDeleted = isDeleted;
-    }
-    public LocalDateTime getGmtCreate() {
-        return gmtCreate;
-    }
-
-    public void setGmtCreate(LocalDateTime gmtCreate) {
-        this.gmtCreate = gmtCreate;
-    }
-    public LocalDateTime getGmtModified() {
-        return gmtModified;
-    }
-
-    public void setGmtModified(LocalDateTime gmtModified) {
-        this.gmtModified = gmtModified;
-    }
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-    public String getModifier() {
-        return modifier;
-    }
-
-    public void setModifier(String modifier) {
-        this.modifier = modifier;
-    }
-    public Long getHospitalId() {
-        return hospitalId;
-    }
-
-    public void setHospitalId(Long hospitalId) {
-        this.hospitalId = hospitalId;
-    }
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
     @Override
     public String toString() {
         return "SysHospitalSet{" +

+ 91 - 0
src/main/java/com/diagbot/entity/SysLoginLog.java

@@ -0,0 +1,91 @@
+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 zhanghang
+ * @since 2022-05-09
+ */
+@Getter
+@Setter
+public class SysLoginLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 登录用户ID
+     */
+    private Long loginId;
+
+    /**
+     * 登录用户名
+     */
+    private String loginName;
+
+    /**
+     * 登录日期
+     */
+    private Date loginDate;
+
+    /**
+     * 登录ip
+     */
+    private Long loginIp;
+
+    /**
+     * 登录ip地址
+     */
+    private String loginAddress;
+
+    /**
+     * 浏览器
+     */
+    private String loginBrowser;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 121 - 0
src/main/java/com/diagbot/entity/SysOperationLog.java

@@ -0,0 +1,121 @@
+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 zhanghang
+ * @since 2022-05-09
+ */
+@Getter
+@Setter
+public class SysOperationLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 操作人用户ID
+     */
+    private Long operationId;
+
+    /**
+     * 操作人用户名
+     */
+    private String operationName;
+
+    /**
+     * 操作日期
+     */
+    private Date operationDate;
+
+    /**
+     * 操作记录
+     */
+    private String operationRecord;
+
+    /**
+     * ip地址
+     */
+    private Long operationIp;
+
+    /**
+     * 操作地址
+     */
+    private String operationAddress;
+
+    /**
+     * 操作方法
+     */
+    private String operationMethod;
+
+    /**
+     * 操作请求方式
+     */
+    private String operationWay;
+
+    /**
+     * 操作url
+     */
+    private String operationUrl;
+
+    /**
+     * 操作参数
+     */
+    private String operationParam;
+
+    /**
+     * 返回参数
+     */
+    private String jsonResult;
+
+    /**
+     * 是否归档(0:未归档,1:已归档)
+     */
+    private String isPlacefile;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

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

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

+ 178 - 122
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -267,81 +267,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")));
             }
         }
 
@@ -389,6 +321,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);
+        }
+    }
+
     /**
      * 处理数据(公共方法)
      *
@@ -434,7 +467,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())
@@ -661,7 +694,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())
@@ -989,7 +1022,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 null, null);
 
 
-//=========================================
+        //=========================================
     /*    // 会诊记录
         addDataWithKey("会诊", recMap, medrecVoList,
                 Arrays.asList("会诊记录", "会诊结果单", "会诊申请单"));
@@ -1003,7 +1036,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         addDataWithKey("转科", recMap, medrecVoList,
                 Arrays.asList("转入记录", "转出记录"));
 */
-//        ==================================
+        //        ==================================
 
         addData("有创操作", recMap, medrecVoList);
 
@@ -1047,14 +1080,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;
@@ -1078,14 +1111,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) {
@@ -1197,7 +1230,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>>>() {
@@ -1753,8 +1786,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()) &&
@@ -1994,15 +2038,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) {
@@ -2342,28 +2386,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);
+                }
             }
         }
         // 手动拼接数据【知情同意书】【谈话告知书】
@@ -2391,6 +2444,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         pageMap.put("检验信息", null);
         // 护理信息
         pageMap.put("护理信息", null);
+        // 其他信息
+        pageMap.put("其他信息", null);
         // 知情同意书 = 【知情同意书】 + 【手术知情同意书】
         pageMap.put("知情同意书", recordDTOList);
         pageMap.put("谈话告知书", recordMap.get(54L));
@@ -2545,6 +2600,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
         return behospitalInfoAgeDTOList;
     }
+
     /**
      * @param analyzeVO
      * @param codeList

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

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

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

+ 42 - 0
src/main/java/com/diagbot/facade/LogManagementFacade.java

@@ -0,0 +1,42 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.SysLoginLogDTO;
+import com.diagbot.dto.SysOperationLogDTO;
+import com.diagbot.vo.SysLoginLogVO;
+import com.diagbot.vo.SysOperationLogVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:日志处理类
+ * @author: songxl
+ * @time: 2022/5/9 14:33
+ */
+@Component
+public class LogManagementFacade {
+    @Autowired
+    private LoginLogFacade loginLogFacade;
+    @Autowired
+    private OperationLogFacade operationLogFacade;
+
+    /**
+     *查看登录日志
+     *
+     * @param sysLoginLogVO
+     * @Return com.baomidou.mybatisplus.core.metadata.IPage<com.diagbot.dto.SysLoginLogDTO>
+     */
+    public IPage<SysLoginLogDTO> getLoginLog(SysLoginLogVO sysLoginLogVO) {
+        return loginLogFacade.getLoginLog(sysLoginLogVO);
+    }
+
+    /**
+     *查看操作日志
+     *
+     * @param sysOperationLogVO
+     * @Return com.baomidou.mybatisplus.core.metadata.IPage<com.diagbot.dto.SysOperationLogDTO>
+     */
+    public IPage<SysOperationLogDTO> getOperationLog(SysOperationLogVO sysOperationLogVO) {
+        return operationLogFacade.getOperationLog(sysOperationLogVO);
+    }
+}

+ 22 - 0
src/main/java/com/diagbot/facade/LoginLogFacade.java

@@ -0,0 +1,22 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.SysLoginLogDTO;
+import com.diagbot.service.impl.SysLoginLogServiceImpl;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.SysLoginLogVO;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:登录日志处理类
+ * @author: songxl
+ * @time: 2022/5/9 14:33
+ */
+@Component
+public class LoginLogFacade extends SysLoginLogServiceImpl {
+
+    public IPage<SysLoginLogDTO> getLoginLog(SysLoginLogVO sysLoginLogVO) {
+        sysLoginLogVO.setHospitalId(SysUserUtils.getCurrentHospitalID());
+        return this.getBaseMapper().getLoginLog(sysLoginLogVO);
+    }
+}

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

+ 114 - 0
src/main/java/com/diagbot/facade/OperationLogFacade.java

@@ -0,0 +1,114 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QcCasesDTO;
+import com.diagbot.dto.QcCasesEntryHospitalDTO;
+import com.diagbot.dto.SysOperationLogDTO;
+import com.diagbot.entity.BasDeptInfo;
+import com.diagbot.entity.QcType;
+import com.diagbot.dto.SysUserRoleDTO;
+import com.diagbot.entity.SysRole;
+import com.diagbot.entity.SysUser;
+import com.diagbot.entity.SysUserDept;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.SysOperationLogServiceImpl;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.SysOperationLogVO;
+import com.diagbot.vo.SysUserBaseVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * @Description:操作日志处理类
+ * @author: songxl
+ * @time: 2022/5/10 9:49
+ */
+@Component
+public class OperationLogFacade extends SysOperationLogServiceImpl {
+    @Autowired
+    QcCasesFacade qcCasesFacade;
+    @Autowired
+    QcCasesEntryHospitalFacade qcCasesEntryHospitalFacade;
+    @Autowired
+    QcTypeFacade qcTypeFacade;
+    @Autowired
+    SysUserFacade sysUserFacade;
+    @Autowired
+    SysUserDeptFacade sysUserDeptFacade;
+    @Autowired
+    BasDeptInfoFacade basDeptInfoFacade;
+
+    @Autowired
+    SysRoleFacade sysRoleFacade;
+
+    public IPage<SysOperationLogDTO> getOperationLog(SysOperationLogVO sysOperationLogVO) {
+        sysOperationLogVO.setHospitalId(SysUserUtils.getCurrentHospitalID());
+        return this.getBaseMapper().getOperationLog(sysOperationLogVO);
+    }
+
+    public QcCasesDTO getQcCasesById(String id) {
+        return qcCasesFacade.getQcCasesById(id, SysUserUtils.getCurrentHospitalID());
+    }
+
+    public SysUser getSysUser(Long id) {
+        return sysUserFacade.getBaseMapper().selectOne(new QueryWrapper<SysUser>()
+                .eq("id",id)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()));
+    }
+
+    public SysRole getRoleMenu(Long roleId) {
+        return sysRoleFacade.getBaseMapper().selectOne(new QueryWrapper<SysRole>()
+                .eq("id",roleId)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()));
+    }
+
+    public SysUserRoleDTO editUserRoles(Long userId) {
+        SysUserBaseVO sysUserBaseVO = new SysUserBaseVO();
+        sysUserBaseVO.setUserId(userId);
+        return sysUserFacade.getUserRoles(sysUserBaseVO);
+    }
+
+    public QcCasesEntryHospitalDTO getQcCasesEntryById(Long id) {
+        return qcCasesEntryHospitalFacade.getQcCasesEntryById(id);
+    }
+
+    public QcType getQCTypeById(Object id) {
+        return qcTypeFacade.getOne(new QueryWrapper<QcType>().eq("id",id));
+    }
+
+    public List<SysRole> getSysUserRoles(List<Long> roleIds) {
+        return sysRoleFacade.list(new QueryWrapper<SysRole>().in("id",roleIds).eq("is_deleted", IsDeleteEnum.N.getKey()));
+    }
+    /**
+     * 获取用户科室
+     *
+     * @param userId
+     * @Return java.util.List<java.lang.String>
+     */
+    public List<String> getUserDept(Long userId) {
+
+        return sysUserDeptFacade.list(new QueryWrapper<SysUserDept>()
+                .eq("user_id",userId)
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id",SysUserUtils.getCurrentHospitalID())
+        ).stream().map(SysUserDept::getDeptId).collect(Collectors.toList());
+    }
+    /**
+     * 通过科室id获取科室
+     *
+     * @param deptIds
+     * @Return java.util.List<com.diagbot.entity.BasDeptInfo>
+     */
+    public List<BasDeptInfo> getSysDepts(List<String> deptIds) {
+
+        return basDeptInfoFacade.list(new QueryWrapper<BasDeptInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id",SysUserUtils.getCurrentHospitalID())
+                .in("dept_id",deptIds));
+    }
+}

+ 4 - 0
src/main/java/com/diagbot/facade/QcCasesEntryHospitalFacade.java

@@ -95,4 +95,8 @@ public class QcCasesEntryHospitalFacade extends QcCasesEntryHospitalServiceImpl
         List<QcCasesEntryFindDTO> data = this.findQcCasesEntryAll(qcCasesEntryFindVO);
         return data;
     }
+
+    public QcCasesEntryHospitalDTO getQcCasesEntryById(Long id) {
+        return this.getBaseMapper().getQcCasesEntryById(id,SysUserUtils.getIsPlacefile(),SysUserUtils.getCurrentHospitalID());
+    }
 }

+ 4 - 0
src/main/java/com/diagbot/facade/QcCasesFacade.java

@@ -85,4 +85,8 @@ public class QcCasesFacade extends QcCasesServiceImpl {
         dataNew = BeanUtil.listCopyTo(data, QcCasesAllDTO.class);
         return dataNew;
     }
+
+    public QcCasesDTO getQcCasesById(String id, String currentHospitalID) {
+        return this.getBaseMapper().getQcCasesById(id,currentHospitalID);
+    }
 }

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

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

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

@@ -6,6 +6,7 @@ import com.diagbot.dto.BehospitalInfoAgeDTO;
 import com.diagbot.dto.CheckedRecordListDTO;
 import com.diagbot.dto.SysUserDeptDTO;
 import com.diagbot.entity.BasDeptInfo;
+import com.diagbot.entity.MedAppealInfo;
 import com.diagbot.entity.MedBehospitalType;
 import com.diagbot.entity.MedCheckInfo;
 import com.diagbot.entity.SysUserDept;
@@ -24,6 +25,7 @@ import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.CheckedRecordListVO;
+import com.diagbot.vo.MedCheckInfoAddVO;
 import com.diagbot.vo.RecordCheckVO;
 import com.diagbot.vo.SysUserBaseVO;
 import com.google.common.collect.Lists;
@@ -58,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());
@@ -157,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);
@@ -175,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获取当前用户的任务来源 和筛选分值

+ 126 - 0
src/main/java/com/diagbot/facade/StatisticsForH5Facade.java

@@ -0,0 +1,126 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.BasDeptInfoDTO;
+import com.diagbot.dto.BehInfoForH5DTO;
+import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.EntryNumDTO;
+import com.diagbot.dto.LevelPercentDTO;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.util.StringUtil;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.BasDeptInfoVO;
+import com.diagbot.vo.BehInfoForH5VO;
+import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.HospitalIdVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2022/5/6 10:40
+ */
+@Component
+public class StatisticsForH5Facade {
+    @Autowired
+    private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private BasDeptInfoFacade basDeptInfoFacade;
+
+    /**
+     * 单项否决占比
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<EntryNumDTO> entryRejectDistribution(FilterVO filterVO) {
+        if (StringUtil.isBlank(filterVO.getHospitalId())) {
+            try {
+                String hospitalId = SysUserUtils.getCurrentHospitalID();
+                filterVO.setHospitalId(hospitalId);
+            } catch (Exception e) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入医院id");
+            }
+        }
+        if (StringUtil.isBlank(filterVO.getHospitalId())) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入医院id");
+        }
+        List<EntryNumDTO> retList = qcresultInfoFacade.entryRejectPercent(filterVO);
+        return retList;
+    }
+
+    /**
+     * 病历等级占比
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<LevelPercentDTO> levelDistribution(FilterVO filterVO) {
+        if (StringUtil.isBlank(filterVO.getHospitalId())) {
+            try {
+                String hospitalId = SysUserUtils.getCurrentHospitalID();
+                filterVO.setHospitalId(hospitalId);
+            } catch (Exception e) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入医院id");
+            }
+        }
+        List<LevelPercentDTO> retList = qcresultInfoFacade.levelPercentByDept(filterVO);
+        return retList;
+    }
+
+    /**
+     * 病历扣分大于等于5占比
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<DeptNumDTO> deductGT5Distribution(FilterVO filterVO) {
+        if (StringUtil.isBlank(filterVO.getHospitalId())) {
+            try {
+                String hospitalId = SysUserUtils.getCurrentHospitalID();
+                filterVO.setHospitalId(hospitalId);
+            } catch (Exception e) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入医院id");
+            }
+        }
+        List<DeptNumDTO> retList = qcresultInfoFacade.deductGT5ByDept(filterVO);
+        return retList;
+    }
+
+
+    /**
+     * 病历详情
+     *
+     * @param behInfoForH5VO
+     * @return
+     */
+    public IPage<BehInfoForH5DTO> getBehInfoPage(BehInfoForH5VO behInfoForH5VO) {
+        if (StringUtil.isBlank(behInfoForH5VO.getHospitalId())) {
+            try {
+                String hospitalId = SysUserUtils.getCurrentHospitalID();
+                behInfoForH5VO.setHospitalId(hospitalId);
+            } catch (Exception e) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入医院id");
+            }
+        }
+        IPage<BehInfoForH5DTO> page = behospitalInfoFacade.behospitalInfoForH5(behInfoForH5VO);
+        return page;
+    }
+
+    /**
+     * @param hospitalIdVO
+     * @return
+     */
+    public List<BasDeptInfoDTO> listForUser(HospitalIdVO hospitalIdVO) {
+        BasDeptInfoVO basDeptInfoVO = new BasDeptInfoVO();
+        basDeptInfoVO.setHospitalId(hospitalIdVO.getHospitalId());
+        List<BasDeptInfoDTO> basDeptInfoDTOList = basDeptInfoFacade.getList(basDeptInfoVO);
+        return basDeptInfoDTOList;
+    }
+}

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


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