Sfoglia il codice sorgente

Merge branch 'master' into 122run

gaodm 5 anni fa
parent
commit
56ff47b1a2
100 ha cambiato i file con 6071 aggiunte e 376 eliminazioni
  1. 545 0
      doc/003.20200515第3期/qc_init.sql
  2. 3 4
      src/main/java/com/diagbot/aggregate/MrStatisticsAggregate.java
  3. 36 34
      src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java
  4. 29 0
      src/main/java/com/diagbot/config/CacheDeleteInit.java
  5. 2 0
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  6. 2 0
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  7. 23 0
      src/main/java/com/diagbot/dto/AnalyzeRunDTO.java
  8. 31 0
      src/main/java/com/diagbot/dto/LevelStatisticsDTO.java
  9. 50 0
      src/main/java/com/diagbot/dto/ModelHospitalAllDTO.java
  10. 2 0
      src/main/java/com/diagbot/dto/MsgDTO.java
  11. 95 0
      src/main/java/com/diagbot/dto/QcAbnormalDTO.java
  12. 2 1
      src/main/java/com/diagbot/dto/QcCasesDTO.java
  13. 25 0
      src/main/java/com/diagbot/dto/QcModeAllDTO.java
  14. 4 0
      src/main/java/com/diagbot/entity/BasDeptInfo.java
  15. 3 0
      src/main/java/com/diagbot/entity/BehospitalInfo.java
  16. 27 24
      src/main/java/com/diagbot/entity/DoctorAdvice.java
  17. 3 0
      src/main/java/com/diagbot/entity/HomeDiagnoseInfo.java
  18. 3 0
      src/main/java/com/diagbot/entity/HomeOperationInfo.java
  19. 3 0
      src/main/java/com/diagbot/entity/HomePage.java
  20. 193 0
      src/main/java/com/diagbot/entity/MedQcresultCases.java
  21. 4 0
      src/main/java/com/diagbot/entity/MedRecordType.java
  22. 3 0
      src/main/java/com/diagbot/entity/MedicalRecord.java
  23. 3 0
      src/main/java/com/diagbot/entity/MedicalRecordContent.java
  24. 158 0
      src/main/java/com/diagbot/entity/ModelHospital.java
  25. 195 0
      src/main/java/com/diagbot/entity/QcAbnormal.java
  26. 28 0
      src/main/java/com/diagbot/entity/QcModelHospital.java
  27. 50 0
      src/main/java/com/diagbot/enums/AbnormalStatusEnum.java
  28. 51 0
      src/main/java/com/diagbot/enums/AbnormalTypeEnum.java
  29. 91 1
      src/main/java/com/diagbot/facade/AlgorithmFacade.java
  30. 162 14
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  31. 398 114
      src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java
  32. 308 5
      src/main/java/com/diagbot/facade/ConsoleFacade.java
  33. 13 0
      src/main/java/com/diagbot/facade/MedQcresultCasesFacade.java
  34. 131 0
      src/main/java/com/diagbot/facade/ModelHospitalFacade.java
  35. 76 0
      src/main/java/com/diagbot/facade/QcAbnormalFacade.java
  36. 16 0
      src/main/java/com/diagbot/facade/QcModeFacade.java
  37. 39 0
      src/main/java/com/diagbot/facade/QcModelHospitalFacade.java
  38. 2 1
      src/main/java/com/diagbot/facade/QcModuleInfoFacade.java
  39. 36 0
      src/main/java/com/diagbot/facade/QcresultInfoFacade.java
  40. 1 1
      src/main/java/com/diagbot/facade/SysUserFacade.java
  41. 3 3
      src/main/java/com/diagbot/mapper/BasDeptInfoMapper.java
  42. 64 8
      src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java
  43. 19 0
      src/main/java/com/diagbot/mapper/HomePageMapper.java
  44. 16 0
      src/main/java/com/diagbot/mapper/MedQcresultCasesMapper.java
  45. 22 0
      src/main/java/com/diagbot/mapper/ModelHospitalMapper.java
  46. 19 0
      src/main/java/com/diagbot/mapper/QcAbnormalMapper.java
  47. 1 0
      src/main/java/com/diagbot/mapper/QcCasesEntryMapper.java
  48. 16 0
      src/main/java/com/diagbot/mapper/QcModelHospitalMapper.java
  49. 56 8
      src/main/java/com/diagbot/mapper/QcresultInfoMapper.java
  50. 4 4
      src/main/java/com/diagbot/service/BasDeptInfoService.java
  51. 64 7
      src/main/java/com/diagbot/service/BehospitalInfoService.java
  52. 20 0
      src/main/java/com/diagbot/service/HomePageService.java
  53. 16 0
      src/main/java/com/diagbot/service/MedQcresultCasesService.java
  54. 22 0
      src/main/java/com/diagbot/service/ModelHospitalService.java
  55. 19 0
      src/main/java/com/diagbot/service/QcAbnormalService.java
  56. 16 0
      src/main/java/com/diagbot/service/QcModelHospitalService.java
  57. 56 8
      src/main/java/com/diagbot/service/QcresultInfoService.java
  58. 4 4
      src/main/java/com/diagbot/service/impl/BasDeptInfoServiceImpl.java
  59. 87 10
      src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java
  60. 25 0
      src/main/java/com/diagbot/service/impl/HomePageServiceImpl.java
  61. 20 0
      src/main/java/com/diagbot/service/impl/MedQcresultCasesServiceImpl.java
  62. 29 0
      src/main/java/com/diagbot/service/impl/ModelHospitalServiceImpl.java
  63. 25 0
      src/main/java/com/diagbot/service/impl/QcAbnormalServiceImpl.java
  64. 20 0
      src/main/java/com/diagbot/service/impl/QcModelHospitalServiceImpl.java
  65. 79 11
      src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java
  66. 72 0
      src/main/java/com/diagbot/task/TASK_CX.java
  67. 11 0
      src/main/java/com/diagbot/vo/AlgorithmVO.java
  68. 20 0
      src/main/java/com/diagbot/vo/AnalyzeCodeVO.java
  69. 24 0
      src/main/java/com/diagbot/vo/AnalyzeRunVO.java
  70. 2 0
      src/main/java/com/diagbot/vo/AnalyzeVO.java
  71. 0 17
      src/main/java/com/diagbot/vo/FilterByDeptVO.java
  72. 15 0
      src/main/java/com/diagbot/vo/FilterOrderByDeptVO.java
  73. 33 0
      src/main/java/com/diagbot/vo/FilterOrderVO.java
  74. 35 0
      src/main/java/com/diagbot/vo/FilterPageByAverageVO.java
  75. 4 4
      src/main/java/com/diagbot/vo/HPFilterByDeptVO.java
  76. 55 0
      src/main/java/com/diagbot/vo/FilterPageVO.java
  77. 3 0
      src/main/java/com/diagbot/vo/FilterVO.java
  78. 40 0
      src/main/java/com/diagbot/vo/MedQcresultCasesVO.java
  79. 23 0
      src/main/java/com/diagbot/vo/ModelHospitalAllVO.java
  80. 18 0
      src/main/java/com/diagbot/vo/ModelHospitalIdVO.java
  81. 29 0
      src/main/java/com/diagbot/vo/ModelHospitalUpdataVO.java
  82. 21 0
      src/main/java/com/diagbot/vo/QcAbnormalDelVO.java
  83. 32 0
      src/main/java/com/diagbot/vo/QcAbnormalSaveVO.java
  84. 49 0
      src/main/java/com/diagbot/vo/QcAbnormalVO.java
  85. 0 23
      src/main/java/com/diagbot/vo/QcresultFilterByDeptVO.java
  86. 17 0
      src/main/java/com/diagbot/vo/TaskVO.java
  87. 17 1
      src/main/java/com/diagbot/web/BehospitalInfoController.java
  88. 130 14
      src/main/java/com/diagbot/web/ConsoleByDeptController.java
  89. 172 4
      src/main/java/com/diagbot/web/ConsoleController.java
  90. 75 0
      src/main/java/com/diagbot/web/ModelHospitalController.java
  91. 69 0
      src/main/java/com/diagbot/web/QcAbnormalController.java
  92. 30 13
      src/main/java/com/diagbot/web/QcModeController.java
  93. 1 1
      src/main/java/com/diagbot/web/SysRoleController.java
  94. 1 1
      src/main/resources/mapper/BasDeptInfoMapper.xml
  95. 975 36
      src/main/resources/mapper/BehospitalInfoMapper.xml
  96. 415 0
      src/main/resources/mapper/HomePageMapper.xml
  97. 21 0
      src/main/resources/mapper/MedQcresultCasesMapper.xml
  98. 46 0
      src/main/resources/mapper/ModelHospitalMapper.xml
  99. 48 0
      src/main/resources/mapper/QcAbnormalMapper.xml
  100. 0 0
      src/main/resources/mapper/QcCasesEntryMapper.xml

+ 545 - 0
doc/003.20200515第3期/qc_init.sql

@@ -0,0 +1,545 @@
+use `qc`;
+
+DROP TABLE IF EXISTS `qc_abnormal`;
+CREATE TABLE `qc_abnormal` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT 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则表示纪录未修改',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `behospital_code` varchar(16) NOT NULL DEFAULT '' COMMENT '病人住院ID',
+  `type` int(11) NOT NULL DEFAULT '1' COMMENT '异常类型(1:数据模块 2:质控类型 3:XML结构)',
+  `description` varchar(255) NOT NULL DEFAULT '' COMMENT '异常描述',
+  `status` int(11) NOT NULL DEFAULT '0' COMMENT '状态(0:未处理,1:已处理)',
+  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='异常数据监控信息';
+
+DROP TABLE IF EXISTS `med_qcresult_cases`;
+CREATE TABLE `med_qcresult_cases` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `hospital_id` bigint(20) DEFAULT '0' COMMENT '医院ID',
+  `behospital_code` varchar(255) NOT NULL DEFAULT '' COMMENT '病人住院ID',
+  `cases_id` bigint(20) DEFAULT '0' COMMENT '数据模块ID(0:其他模块)',
+  `score_res` decimal(5,1) NOT NULL DEFAULT '0.0' COMMENT '最后得分',
+  `level` varchar(20) NOT NULL 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(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `idx_behospital_code` (`behospital_code`) USING BTREE,
+  KEY `idx_hospital_id` (`hospital_id`) USING BTREE,
+  KEY `idx_hospital_id_behospital_code` (`hospital_id`,`behospital_code`) USING BTREE,
+  KEY `idx_is_deleted` (`is_deleted`) USING BTREE,
+  KEY `idx_mix` (`hospital_id`,`behospital_code`,`is_deleted`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='质控评分模块评分信息';
+
+ALTER TABLE `qc`.`qc_model_hospital`
+  ADD COLUMN `is_deleted` CHAR(3) DEFAULT 'N' NULL COMMENT '是否删除,N:未删除,Y:删除' AFTER `stand_model_name`,
+  ADD COLUMN `gmt_create` DATETIME DEFAULT '1970-01-01 12:00:00' NULL COMMENT '记录创建时间' AFTER `is_deleted`,
+  ADD COLUMN `gmt_modified` DATETIME DEFAULT '1970-01-01 12:00:00' NULL COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改' AFTER `gmt_create`,
+  ADD COLUMN `creator` VARCHAR (60) DEFAULT '0' NULL COMMENT '创建人,0表示无创建人值' AFTER `gmt_modified`,
+  ADD COLUMN `modifier` VARCHAR (60) DEFAULT '0' NULL COMMENT '修改人,如果为0则表示纪录未修改' AFTER `creator`,
+  ADD COLUMN `remark` VARCHAR (255) NULL COMMENT '备注' AFTER `modifier` ;
+
+INSERT INTO `qc`.`sys_task_cron` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `cron_code`, `cron`, `is_used`, `remark`) VALUES ('-1', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', 'TASK_CX', '0 0 22 * * ?', '1', '每天晚上自动评分出院日期之前3天的未评分数据');
+UPDATE `qc`.`sys_task_cron` SET `id`='1', `is_deleted`='Y', `gmt_create`='1970-01-01 12:00:00', `gmt_modified`='1970-01-01 12:00:00', `creator`='0', `modifier`='0', `cron_code`='TASK001', `cron`='59 59 23 * * ?', `is_used`='1', `remark`='59 59 23 * * ?' WHERE (`id`='1');
+
+-- ----------------------------
+-- Table structure for sys_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_menu`;
+CREATE TABLE `sys_menu` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT 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则表示纪录未修改',
+  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '菜单名称',
+  `parent_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT '-1:表示顶级,其他值表示上级菜单的id',
+  `code` varchar(255) NOT NULL DEFAULT '' COMMENT '编码,与前端对应',
+  `show_status` int(11) NOT NULL DEFAULT '0' COMMENT '是否在右侧菜单显示(0:不显示,1:显示)',
+  `maintain_status` int(11) NOT NULL DEFAULT '0' COMMENT '是否可以维护(0:不可维护,1:可以维护)',
+  `order_no` int(11) NOT NULL DEFAULT '0' COMMENT '排序,从小到大',
+  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 COMMENT='系统菜单';
+
+-- ----------------------------
+-- Records of sys_menu
+-- ----------------------------
+INSERT INTO `sys_menu` VALUES (1, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '控制台', -1, 'YH-KZT', 1, 1, -10, '用户-控制台');
+INSERT INTO `sys_menu` VALUES (2, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '基础数据维护', -1, 'YH-JCSJWH', 1, 1, 2, '用户-基础数据维护');
+INSERT INTO `sys_menu` VALUES (3, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '病案质控', -1, 'YH-BLZK', 1, 1, 3, '用户-病历质控');
+INSERT INTO `sys_menu` VALUES (4, 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '统计分析', -1, 'YH-TJFX', 1, 1, 4, '用户-统计分析');
+INSERT INTO `sys_menu` VALUES (5, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '模块数据维护', 2, 'YH-JCSJWH-MKSJWH', 1, 1, 1, '用户-基础数据维护-模块数据维护');
+INSERT INTO `sys_menu` VALUES (6, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '条目数据维护', 2, 'YH-JCSJWH-TMSJWH', 1, 1, 2, '用户-基础数据维护-条目数据维护');
+INSERT INTO `sys_menu` VALUES (7, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控评分', 3, 'YH-BLZK-ZKPF', 1, 1, 1, '用户-病历质控-质控评分');
+INSERT INTO `sys_menu` VALUES (8, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '基础功能', -1, 'YH-QBYH-JCGN', 0, 1, 0, '用户-基础功能');
+INSERT INTO `sys_menu` VALUES (9, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控评分(科室)', 3, 'YH-BLZK-ZKPFKS', 1, 1, 2, '用户-病历质控-质控评分(科室)');
+INSERT INTO `sys_menu` VALUES (10, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控评分(个人)', 3, 'YH-BLZK-ZKPFGR', 1, 1, 3, '用户-病历质控-质控评分(个人)');
+INSERT INTO `sys_menu` VALUES (12, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '权限管理', -1, 'YH-QXGL', 1, 0, 5, '用户-权限管理');
+INSERT INTO `sys_menu` VALUES (13, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '用户管理', 12, 'YH-QXGL-YHGL', 1, 0, 1, '用户-权限管理-用户管理');
+INSERT INTO `sys_menu` VALUES (14, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '角色管理', 12, 'YH-QXGL-JSGL', 1, 0, 2, '用户-权限管理-角色管理');
+INSERT INTO `sys_menu` VALUES (15, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '控制台(科室)', -1, 'YH-KZTKS', 1, 1, -9, '用户-控制台(科室)');
+INSERT INTO `sys_menu` VALUES (16, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '异常数据监控', -1, 'YH-YCSJJK', 1, 0, 10, '用户-异常数据监控');
+INSERT INTO `sys_menu` VALUES (17, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '数据报表明细', -1, 'YH-ZKK', 1, 1, -8, '用户-质控科');
+INSERT INTO `sys_menu` VALUES (18, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '数据报表明细(科室)', -1, 'YH-KSZR', 1, 1, -7, '用户-科室主任');
+INSERT INTO `sys_menu` VALUES (19, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各模块缺陷占比', 17, 'YH-ZKK-GMKQXZB_XQ', 1, 1, 2, '用户-质控科-各模块缺陷占比_详情');
+INSERT INTO `sys_menu` VALUES (20, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '条目缺陷占比', 17, 'YH-ZKK-TMQXZB_XQ', 1, 1, 3, '用户-质控科-条目缺陷占比_详情');
+INSERT INTO `sys_menu` VALUES (21, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '科室平均住院天数', 17, 'YH-ZKK-KSPJZYTS_XQ', 1, 1, 4, '用户-质控科-科室平均住院天数_详情');
+INSERT INTO `sys_menu` VALUES (22, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '科室平均住院花费', 17, 'YH-ZKK-KSPJZYHF_XQ', 1, 1, 5, '用户-质控科-科室平均住院花费_详情');
+INSERT INTO `sys_menu` VALUES (23, 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各科室质控平均分', 17, 'YH-ZKK-GKSZKPJF_XQ', 1, 1, 6, '用户-质控科-各科室质控平均分_详情');
+INSERT INTO `sys_menu` VALUES (24, 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '缺陷详情', 17, 'YH-ZKK-GKSQXZB', 1, 1, 7, '用户-质控科-各科室缺陷占比_详情');
+INSERT INTO `sys_menu` VALUES (25, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各科室甲级病历占比', 17, 'YH-ZKK-GKSJJBLZB_XQ', 1, 1, 8, '用户-质控科-各科室甲级病历占比_详情');
+INSERT INTO `sys_menu` VALUES (26, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各模块缺陷占比', 18, 'YH-KSZR-GMKQXZB_XQ', 1, 1, 2, '用户-科室主任-各模块缺陷占比_详情');
+INSERT INTO `sys_menu` VALUES (27, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '条目缺陷占比', 18, 'YH-KSZR-TMQXZB_XQ', 1, 1, 3, '用户-科室主任-条目缺陷占比_详情');
+INSERT INTO `sys_menu` VALUES (28, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '病案首页合格率占比', 17, 'YH-ZKK-BASYHGLZB_XQ', 1, 1, 1, '用户-质控科-病案首页合格率占比_详情');
+INSERT INTO `sys_menu` VALUES (29, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '病案首页合格率占比', 18, 'YH-KSZR-BASYHGLZB_XQ', 1, 1, 1, '用户-科室主任-病案首页合格率占比_详情');
+INSERT INTO `sys_menu` VALUES (30, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '科室缺陷占比', 18, 'YH-KSZR-KSQXZB_XQ', 1, 1, 4, '用户-科室主任-科室缺陷占比_详情');
+INSERT INTO `sys_menu` VALUES (31, 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各科室缺陷占比', 17, 'YH-ZKK-GKSQXZB_XQ', 1, 1, 9, '用户-质控科-各科室缺陷占比_详情');
+
+-- ----------------------------
+-- Table structure for sys_menu_permission
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_menu_permission`;
+CREATE TABLE `sys_menu_permission` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT 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则表示纪录未修改',
+  `menu_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '菜单id',
+  `permission_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '系统资源id',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=utf8 COMMENT='菜单和系统资源的映射表';
+
+-- ----------------------------
+-- Records of sys_menu_permission
+-- ----------------------------
+INSERT INTO `sys_menu_permission` VALUES ('1', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '8', '1', '基础功能-获取用户、机构、菜单信息');
+INSERT INTO `sys_menu_permission` VALUES ('2', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '8', '2', '基础功能-修改密码');
+INSERT INTO `sys_menu_permission` VALUES ('3', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '9', '控制台-病历相关统计');
+INSERT INTO `sys_menu_permission` VALUES ('4', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '15', '控制台-缺陷相关统计');
+INSERT INTO `sys_menu_permission` VALUES ('5', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '16', '控制台-医院运营相关统计');
+INSERT INTO `sys_menu_permission` VALUES ('6', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '5', '3', '用户-基础数据维护-获取医院模块数据信息');
+INSERT INTO `sys_menu_permission` VALUES ('7', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '5', '4', '用户-基础数据维护-批量更新模块数据');
+INSERT INTO `sys_menu_permission` VALUES ('8', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '6', '6', '用户-条目数据维护-分页获取医院条目数据信息');
+INSERT INTO `sys_menu_permission` VALUES ('9', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '6', '7', '用户-条目数据维护-修改医院条目数据信息');
+INSERT INTO `sys_menu_permission` VALUES ('10', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '6', '8', '用户-条目数据维护-获取医院模块数据下拉列表');
+INSERT INTO `sys_menu_permission` VALUES ('11', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '7', '30', '用户-质控评分-获取病历质控一览下医院科室下拉列表信息');
+INSERT INTO `sys_menu_permission` VALUES ('12', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '7', '17', '用户-质控评分-评分');
+INSERT INTO `sys_menu_permission` VALUES ('13', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '7', '5', '用户-质控评分-分页');
+INSERT INTO `sys_menu_permission` VALUES ('14', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '7', '11', '用户-质控评分-新增质控条目');
+INSERT INTO `sys_menu_permission` VALUES ('15', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '7', '12', '用户-质控评分-删除质控条目');
+INSERT INTO `sys_menu_permission` VALUES ('16', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '7', '13', '用户-质控评分-修改质控条目');
+INSERT INTO `sys_menu_permission` VALUES ('17', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '7', '14', '用户-质控评分-获取详情');
+INSERT INTO `sys_menu_permission` VALUES ('18', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '9', '31', '用户-质控评分(科室)-获取病历质控一览下用户科室下拉列表信息');
+INSERT INTO `sys_menu_permission` VALUES ('19', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '9', '34', '用户-质控评分(科室)-评分');
+INSERT INTO `sys_menu_permission` VALUES ('20', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '9', '32', '用户-质控评分(科室)-分页');
+INSERT INTO `sys_menu_permission` VALUES ('21', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '9', '35', '用户-质控评分(科室)-新增质控条目');
+INSERT INTO `sys_menu_permission` VALUES ('22', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '9', '36', '用户-质控评分(科室)-删除质控条目');
+INSERT INTO `sys_menu_permission` VALUES ('23', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '9', '37', '用户-质控评分(科室)-修改质控条目');
+INSERT INTO `sys_menu_permission` VALUES ('24', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '9', '38', '用户-质控评分(科室)-获取详情');
+INSERT INTO `sys_menu_permission` VALUES ('25', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '10', '39', '用户-质控评分(个人)-获取病历质控一览下用户科室下拉列表信息');
+INSERT INTO `sys_menu_permission` VALUES ('26', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '10', '40', '用户-质控评分(个人)-评分');
+INSERT INTO `sys_menu_permission` VALUES ('27', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '10', '33', '用户-质控评分(个人)-分页');
+INSERT INTO `sys_menu_permission` VALUES ('28', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '10', '41', '用户-质控评分(个人)-新增质控条目');
+INSERT INTO `sys_menu_permission` VALUES ('29', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '10', '42', '用户-质控评分(个人)-删除质控条目');
+INSERT INTO `sys_menu_permission` VALUES ('30', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '10', '43', '用户-质控评分(个人)-修改质控条目');
+INSERT INTO `sys_menu_permission` VALUES ('31', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '10', '44', '用户-质控评分(个人)-获取详情');
+INSERT INTO `sys_menu_permission` VALUES ('32', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '45', '控制台-平均住院天数');
+INSERT INTO `sys_menu_permission` VALUES ('33', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '46', '控制台-平均住院费用');
+INSERT INTO `sys_menu_permission` VALUES ('34', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '47', '控制台-质控平均分按科室统计');
+INSERT INTO `sys_menu_permission` VALUES ('35', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '48', '控制台-各科室甲级病历占比');
+INSERT INTO `sys_menu_permission` VALUES ('36', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '49', '控制台-出院人数统计');
+INSERT INTO `sys_menu_permission` VALUES ('37', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '50', '控制台-质控病历统计');
+INSERT INTO `sys_menu_permission` VALUES ('38', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '51', '控制台-各模块缺陷占比排行');
+INSERT INTO `sys_menu_permission` VALUES ('39', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '52', '控制台-条目缺陷占比');
+INSERT INTO `sys_menu_permission` VALUES ('40', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '53', '控制台-各科室缺陷占比');
+INSERT INTO `sys_menu_permission` VALUES ('41', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '15', '54', '控制台(科室)-出院人数统计(科室)');
+INSERT INTO `sys_menu_permission` VALUES ('42', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '15', '55', '控制台(科室)-质控病历数统计(科室)');
+INSERT INTO `sys_menu_permission` VALUES ('43', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '15', '56', '控制台(科室)-各模块缺陷占比排行(科室)');
+INSERT INTO `sys_menu_permission` VALUES ('44', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '15', '57', '控制台(科室)-条目缺陷占比(科室)');
+INSERT INTO `sys_menu_permission` VALUES ('45', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '15', '58', '控制台(科室)-查询用户关联科室');
+INSERT INTO `sys_menu_permission` VALUES ('46', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '19', '59', '控制台-各模块缺陷占比_详情');
+INSERT INTO `sys_menu_permission` VALUES ('47', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '20', '60', '控制台-条目缺陷占比_详情');
+INSERT INTO `sys_menu_permission` VALUES ('48', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '21', '64', '控制台-科室平均住院天数_详情');
+INSERT INTO `sys_menu_permission` VALUES ('49', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '22', '65', '控制台-科室平均住院花费_详情');
+INSERT INTO `sys_menu_permission` VALUES ('50', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '66', '控制台-各科室质控平均分_详情');
+INSERT INTO `sys_menu_permission` VALUES ('51', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '31', '67', '控制台-各科室缺陷占比-缺陷详情');
+INSERT INTO `sys_menu_permission` VALUES ('52', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '25', '68', '控制台-各科室甲级病历占比_详情');
+INSERT INTO `sys_menu_permission` VALUES ('53', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '26', '69', '控制台(科室)-各模块缺陷占比_详情');
+INSERT INTO `sys_menu_permission` VALUES ('54', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '27', '70', '控制台(科室)-条目缺陷占比_详情');
+INSERT INTO `sys_menu_permission` VALUES ('55', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '31', '71', '控制台-各科室缺陷占比(组合)');
+INSERT INTO `sys_menu_permission` VALUES ('56', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '28', '72', '控制台-病案首页合格率占比');
+INSERT INTO `sys_menu_permission` VALUES ('57', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '30', '73', '控制台(科室)-各科室缺陷占比(科室)');
+INSERT INTO `sys_menu_permission` VALUES ('58', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '29', '74', '控制台(科室)-病案首页合格率占比(科室)');
+INSERT INTO `sys_menu_permission` VALUES ('59', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '75', '控制台-病案首页合格率占比(首页)');
+INSERT INTO `sys_menu_permission` VALUES ('60', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '15', '76', '控制台(科室)-病案首页合格率占比(首页)');
+INSERT INTO `sys_menu_permission` VALUES ('61', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '30', '77', '控制台(科室)-科室缺陷占比-缺陷明细');
+
+-- ----------------------------
+-- Table structure for sys_permission
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_permission`;
+CREATE TABLE `sys_permission` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT 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(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '资源名称',
+  `code` varchar(20) NOT NULL DEFAULT '' COMMENT '资源编码',
+  `permissionUrl` varchar(255) NOT NULL DEFAULT '' COMMENT '资源Url',
+  `method` varchar(255) NOT NULL DEFAULT 'ALL' COMMENT '资源允许的请求方式',
+  `descritpion` varchar(255) NOT NULL DEFAULT '' COMMENT '资源描述',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=78 DEFAULT CHARSET=utf8 COMMENT='系统资源表';
+
+-- ----------------------------
+-- Records of sys_permission
+-- ----------------------------
+INSERT INTO `sys_permission` VALUES ('1', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取用户、机构、菜单信息', 'FUNC000001', '/sys/user/getUserOrgMenu', 'ALL', '基础功能-获取用户、机构、菜单信息', null);
+INSERT INTO `sys_permission` VALUES ('2', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '修改密码', 'FUNC000002', '/sys/user/midifyPassword', 'ALL', '基础功能-修改密码', null);
+INSERT INTO `sys_permission` VALUES ('3', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取医院模块数据信息', 'FUNC000003', '/qc/cases/getQcCases', 'ALL', '用户-基础数据维护-获取医院模块数据信息', '无需加密');
+INSERT INTO `sys_permission` VALUES ('4', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '修改医院模块数据', 'FUNC000004', '/qc/cases/saveQcCases', 'ALL', '用户-基础数据维护-修改医院模块数据', null);
+INSERT INTO `sys_permission` VALUES ('5', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '分页查询', 'FUNC000005', '/qc/behospitalInfo/page', 'ALL', '用户-质控评分-分页', '无需加密');
+INSERT INTO `sys_permission` VALUES ('6', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '分页获取医院条目数据信息', 'FUNC000006', '/qc/casesEntryHospital/getQcCasesEntryAll', 'ALL', '用户-条目数据维护-分页获取医院条目数据信息', '无需加密');
+INSERT INTO `sys_permission` VALUES ('7', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '修改医院条目数据信息', 'FUNC000007', '/qc/casesEntryHospital/updataQcCasesEntry', 'ALL', '用户-条目数据维护-修改医院条目数据信息', null);
+INSERT INTO `sys_permission` VALUES ('8', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取医院模块下拉数据列表', 'FUNC000008', '/qc/casesEntryHospital/getQcCasesAll', 'ALL', '获取医院模块数据列表', '无需加密');
+INSERT INTO `sys_permission` VALUES ('9', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '病历相关统计', 'FUNC000009', '/console/mrStatistics', 'ALL', '控制台-病历相关统计', null);
+INSERT INTO `sys_permission` VALUES ('10', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '模糊查询医院模块条目列表', 'FUNC000010', '/qc/casesEntryHospital/findQcCasesEntry', 'ALL', '用户-条目数据维护-模糊查询医院模块条目列表', null);
+INSERT INTO `sys_permission` VALUES ('11', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '新增质控条目', 'FUNC000011', '/qc/behospitalInfo/addCase', 'ALL', '用户-质控评分-新增质控条目', null);
+INSERT INTO `sys_permission` VALUES ('12', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '删除质控条目', 'FUNC000012', '/qc/behospitalInfo/delCase', 'ALL', '用户-质控评分-删除质控条目', null);
+INSERT INTO `sys_permission` VALUES ('13', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '修改质控条目', 'FUNC000013', '/qc/behospitalInfo/updCase', 'ALL', '用户-质控评分-修改质控条目', null);
+INSERT INTO `sys_permission` VALUES ('14', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取质控评分详情', 'FUNC000014', '/qc/behospitalInfo/getByBehospitalCode', 'ALL', '用户-质控评分-获取详情', '无需加密');
+INSERT INTO `sys_permission` VALUES ('15', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '缺陷相关统计', 'FUNC000015', '/console/resultStatistics', 'ALL', '控制台-缺陷相关统计', null);
+INSERT INTO `sys_permission` VALUES ('16', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '平均值相关统计', 'FUNC000016', '/console/averageStatistics', 'ALL', '控制台-平均值相关统计', null);
+INSERT INTO `sys_permission` VALUES ('17', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控评分', 'FUNC000017', '/qc/behospitalInfo/analyze', 'ALL', '用户-质控评分-评分', null);
+INSERT INTO `sys_permission` VALUES ('18', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取角色列表信息', 'FUNC000018', '/sys/role/list', 'ALL', '用户-权限管理-角色管理-获取角色列表信息', null);
+INSERT INTO `sys_permission` VALUES ('19', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取角色菜权限单等数据', 'FUNC000019', '/sys/role/getRoleMenu', 'ALL', '用户-权限管理-角色管理-获取角色菜权限单等数据', null);
+INSERT INTO `sys_permission` VALUES ('20', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '修改角色菜单权限数据', 'FUNC000020', '/sys/role/saveRoleMenu', 'ALL', '用户-权限管理-角色管理-修改角色菜单权限数据', null);
+INSERT INTO `sys_permission` VALUES ('21', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取医院科室下拉列表信息', 'FUNC000021', '/bas/dept/listForUser', 'ALL', '用户-权限管理-用户管理-获取用户管理下医院科室下拉列表信息', null);
+INSERT INTO `sys_permission` VALUES ('22', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取角色下拉列表信息', 'FUNC000022', '/sys/role/listForUser', 'ALL', '用户-权限管理-用户管理-获取角色下拉列表信息', null);
+INSERT INTO `sys_permission` VALUES ('23', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '用户列表翻页信息查询', 'FUNC000023', '/sys/user/userPage', 'ALL', '用户-权限管理-用户管理-用户列表翻页信息查询', null);
+INSERT INTO `sys_permission` VALUES ('24', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取用户科室', 'FUNC000024', '/sys/user/getUserDepts', 'ALL', '用户-权限管理-用户管理-获取用户科室', null);
+INSERT INTO `sys_permission` VALUES ('25', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取用户角色', 'FUNC000025', '/sys/user/getUserRoles', 'ALL', '用户-权限管理-用户管理-获取用户角色', null);
+INSERT INTO `sys_permission` VALUES ('26', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '用户启用', 'FUNC000026', '/sys/user/enable', 'ALL', '用户-权限管理-用户管理-用户启用', null);
+INSERT INTO `sys_permission` VALUES ('27', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '用户停用', 'FUNC000027', '/sys/user/disable', 'ALL', '用户-权限管理-用户管理-用户停用', null);
+INSERT INTO `sys_permission` VALUES ('28', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '编辑用户科室', 'FUNC000028', '/sys/user/editUserDepts', 'ALL', '用户-权限管理-用户管理-编辑用户科室', null);
+INSERT INTO `sys_permission` VALUES ('29', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '编辑用户角色', 'FUNC000029', '/sys/user/editUserRoles', 'ALL', '用户-权限管理-用户管理-编辑用户角色', null);
+INSERT INTO `sys_permission` VALUES ('30', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取医院科室下拉列表信息', 'FUNC000030', '/bas/dept/getList', 'ALL', '用户-质控评分-获取病历质控一览下医院科室下拉列表信息', '无需加密');
+INSERT INTO `sys_permission` VALUES ('31', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取用户科室下拉列表信息', 'FUNC000031', '/bas/dept/getListUser', 'ALL', '用户-质控评分(科室)-获取病历质控一览下用户科室下拉列表信息', '无需加密');
+INSERT INTO `sys_permission` VALUES ('32', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '分页查询', 'FUNC000032', '/qc/behospitalInfo/page_dept', 'ALL', '用户-质控评分(科室)-分页', '无需加密');
+INSERT INTO `sys_permission` VALUES ('33', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '分页查询', 'FUNC000033', '/qc/behospitalInfo/page_person', 'ALL', '用户-质控评分(个人)-分页', '无需加密');
+INSERT INTO `sys_permission` VALUES ('34', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控评分', 'FUNC000017', '/qc/behospitalInfo/analyze', 'ALL', '用户-质控评分(科室)-评分', null);
+INSERT INTO `sys_permission` VALUES ('35', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '新增质控条目', 'FUNC000011', '/qc/behospitalInfo/addCase', 'ALL', '用户-质控评分(科室)-新增质控条目', null);
+INSERT INTO `sys_permission` VALUES ('36', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '删除质控条目', 'FUNC000012', '/qc/behospitalInfo/delCase', 'ALL', '用户-质控评分(科室)-删除质控条目', null);
+INSERT INTO `sys_permission` VALUES ('37', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '修改质控条目', 'FUNC000013', '/qc/behospitalInfo/updCase', 'ALL', '用户-质控评分(科室)-修改质控条目', null);
+INSERT INTO `sys_permission` VALUES ('38', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取质控评分详情', 'FUNC000014', '/qc/behospitalInfo/getByBehospitalCode', 'ALL', '用户-质控评分(科室)-获取详情', '无需加密');
+INSERT INTO `sys_permission` VALUES ('39', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取用户科室下拉列表信息', 'FUNC000031', '/bas/dept/getListUser', 'ALL', '用户-质控评分(个人)-获取病历质控一览下用户科室下拉列表信息', '无需加密');
+INSERT INTO `sys_permission` VALUES ('40', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控评分', 'FUNC000017', '/qc/behospitalInfo/analyze', 'ALL', '用户-质控评分(个人)-评分', null);
+INSERT INTO `sys_permission` VALUES ('41', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '新增质控条目', 'FUNC000011', '/qc/behospitalInfo/addCase', 'ALL', '用户-质控评分(个人)-新增质控条目', null);
+INSERT INTO `sys_permission` VALUES ('42', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '删除质控条目', 'FUNC000012', '/qc/behospitalInfo/delCase', 'ALL', '用户-质控评分(个人)-删除质控条目', null);
+INSERT INTO `sys_permission` VALUES ('43', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '修改质控条目', 'FUNC000013', '/qc/behospitalInfo/updCase', 'ALL', '用户-质控评分(个人)-修改质控条目', null);
+INSERT INTO `sys_permission` VALUES ('44', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取质控评分详情', 'FUNC000014', '/qc/behospitalInfo/getByBehospitalCode', 'ALL', '用户-质控评分(个人)-获取详情', '无需加密');
+INSERT INTO `sys_permission` VALUES ('45', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '平均住院天数', 'FUNC000045', '/console/getAverageDayNum', 'ALL', '控制台-平均住院天数', null);
+INSERT INTO `sys_permission` VALUES ('46', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '平均住院费用', 'FUNC000046', '/console/getAverageFee', 'ALL', '控制台-平均住院费用', null);
+INSERT INTO `sys_permission` VALUES ('47', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控平均分按科室统计', 'FUNC000047', '/console/getAverageScore', 'ALL', '控制台-质控平均分按科室统计', null);
+INSERT INTO `sys_permission` VALUES ('48', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各科室甲级病历占比', 'FUNC000048', '/console/getLevelResultDept', 'ALL', '控制台-各科室甲级病历占比', null);
+INSERT INTO `sys_permission` VALUES ('49', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '出院人数统计', 'FUNC000049', '/console/leaveHosCount', 'ALL', '控制台-出院人数统计', null);
+INSERT INTO `sys_permission` VALUES ('50', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控病历统计', 'FUNC000050', '/console/mrCount', 'ALL', '控制台-质控病历统计', null);
+INSERT INTO `sys_permission` VALUES ('51', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各模块缺陷占比排行', 'FUNC000051', '/console/entryCountGroupByCase', 'ALL', '控制台-各模块缺陷占比排行', null);
+INSERT INTO `sys_permission` VALUES ('52', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '条目缺陷占比', 'FUNC000052', '/console/entryCountGroupByEntry', 'ALL', '控制台-条目缺陷占比', null);
+INSERT INTO `sys_permission` VALUES ('53', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各科室缺陷占比', 'FUNC000053', '/console/entryByDept', 'ALL', '控制台-各科室缺陷占比', null);
+INSERT INTO `sys_permission` VALUES ('54', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '出院人数统计(科室)', 'FUNC000054', '/consoleByDept/leaveHosCountByDept', 'ALL', '控制台(科室)-出院人数统计(科室)', null);
+INSERT INTO `sys_permission` VALUES ('55', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控病历数统计(科室)', 'FUNC000055', '/consoleByDept/mrCountByDept', 'ALL', '控制台(科室)-质控病历数统计(科室)', null);
+INSERT INTO `sys_permission` VALUES ('56', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各模块缺陷占比排行(科室)', 'FUNC000056', '/consoleByDept/entryCountGroupByCaseAndDept', 'ALL', '控制台(科室)-各模块缺陷占比排行(科室)', null);
+INSERT INTO `sys_permission` VALUES ('57', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '条目缺陷占比(科室)', 'FUNC000057', '/consoleByDept/entryCountGroupByEntryAndDept', 'ALL', '控制台(科室)-条目缺陷占比(科室)', null);
+INSERT INTO `sys_permission` VALUES ('58', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '查询用户关联科室', 'FUNC000058', '/consoleByDept/getDept', 'ALL', '控制台(科室)-查询用户关联科室', null);
+INSERT INTO `sys_permission` VALUES ('59', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各模块缺陷占比_详情', 'FUNC000059', '/console/entryCountGroupByCasePage', 'ALL', '控制台-各模块缺陷占比_详情', null);
+INSERT INTO `sys_permission` VALUES ('60', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '条目缺陷占比_详情', 'FUNC000060', '/console/entryCountGroupByEntryPage', 'ALL', '控制台-条目缺陷占比_详情', null);
+INSERT INTO `sys_permission` VALUES ('61', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '查询异常数据监控信息', 'FUNC000061', '/qc/abnormal/getQcAnnormal', 'ALL', '异常数据监控-查询异常数据监控信息', null);
+INSERT INTO `sys_permission` VALUES ('62', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '更新异常数据监控信息', 'FUNC000062', '/qc/abnormal/saveQcAnnormal', 'ALL', '异常数据监控-异常数据监控-查询异常数据监控信息', null);
+INSERT INTO `sys_permission` VALUES ('63', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '删除异常数据监控信息', 'FUNC000063', '/qc/abnormal/delQcAnnormal', 'ALL', '异常数据监控-异常数据监控-删除异常数据监控信息', null);
+INSERT INTO `sys_permission` VALUES ('64', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '科室平均住院天数_详情', 'FUNC000064', '/console/getAverageDayNumPage', 'ALL', '控制台-科室平均住院天数_详情', null);
+INSERT INTO `sys_permission` VALUES ('65', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '科室平均住院花费_详情', 'FUNC000065', '/console/getAverageFeePage', 'ALL', '控制台-科室平均住院花费_详情', null);
+INSERT INTO `sys_permission` VALUES ('66', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各科室质控平均分_详情', 'FUNC000066', '/console/getAverageScoreByDeptPage', 'ALL', '控制台-各科室质控平均分_详情', null);
+INSERT INTO `sys_permission` VALUES ('67', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各科室缺陷占比-缺陷详情', 'FUNC000067', '/console/resultStatisticsByDeptPage', 'ALL', '控制台-各科室缺陷占比-缺陷详情', null);
+INSERT INTO `sys_permission` VALUES ('68', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各科室甲级病历占比_详情', 'FUNC000068', '/console/levelPercentGroupByDeptPage', 'ALL', '控制台-各科室甲级病历占比_详情', null);
+INSERT INTO `sys_permission` VALUES ('69', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各模块缺陷占比_详情', 'FUNC000069', '/consoleByDept/entryCountGroupByCaseAndDeptPage', 'ALL', '控制台(科室)-各模块缺陷占比_详情', null);
+INSERT INTO `sys_permission` VALUES ('70', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '条目缺陷占比_详情', 'FUNC000070', '/consoleByDept/entryCountGroupByEntryAndDeptPage', 'ALL', '控制台(科室)-条目缺陷占比_详情', null);
+INSERT INTO `sys_permission` VALUES ('71', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各科室缺陷占比(组合)', 'FUNC000071', '/console/levelStatistics', 'ALL', '控制台-各科室缺陷占比(组合)', null);
+INSERT INTO `sys_permission` VALUES ('72', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '病案首页合格率占比', 'FUNC000072', '/console/homePageLevelStatistics', 'ALL', '控制台-病案首页合格率占比', null);
+INSERT INTO `sys_permission` VALUES ('73', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '各科室缺陷占比', 'FUNC000073', '/consoleByDept/levelStatisticsByDept', 'ALL', '控制台(科室)-各科室缺陷占比(科室)', null);
+INSERT INTO `sys_permission` VALUES ('74', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '病案首页合格率占比', 'FUNC000074', '/consoleByDept/homePageLevelStatisticsByDept', 'ALL', '控制台(科室)-病案首页合格率占比(科室)', null);
+INSERT INTO `sys_permission` VALUES ('75', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '病案首页合格率占比(首页)', 'FUNC000075', '/console/homePageLevelLimit', 'ALL', '控制台-病案首页合格率占比(首页)', null);
+INSERT INTO `sys_permission` VALUES ('76', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '病案首页合格率占比(首页)', 'FUNC000076', '/consoleByDept/homePageLevelByDeptLimit', 'ALL', '控制台(科室)-病案首页合格率占比(首页)', null);
+INSERT INTO `sys_permission` VALUES ('77', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '科室缺陷占比-缺陷明细', 'FUNC000077', '/consoleByDept/resultStatisticsByDeptAndDoctorPage', 'ALL', '控制台(科室)-科室缺陷占比-缺陷明细', null);
+
+-- ----------------------------
+-- Table structure for sys_role
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role`;
+CREATE TABLE `sys_role` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT 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(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '角色名称',
+  `roleLevel` int(11) NOT NULL DEFAULT '0' COMMENT '角色等级',
+  `descritpion` varchar(255) NOT NULL DEFAULT '' COMMENT '角色描述',
+  `menuItems` varchar(255) NOT NULL DEFAULT '' COMMENT '菜单ID:对应角色ID(暂无用处)',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='系统角色表';
+
+-- ----------------------------
+-- Records of sys_role
+-- ----------------------------
+INSERT INTO `sys_role` VALUES ('-1', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '超级管理员', '0', '', '', '');
+INSERT INTO `sys_role` VALUES ('1', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '医院人员(全局)', '0', '', '', '');
+INSERT INTO `sys_role` VALUES ('2', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '医院人员(科室)', '0', '', '', null);
+INSERT INTO `sys_role` VALUES ('3', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '医院人员(个人)', '0', '', '', null);
+
+-- ----------------------------
+-- Table structure for sys_role_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_menu`;
+CREATE TABLE `sys_role_menu` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT 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则表示纪录未修改',
+  `role_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '角色id',
+  `menu_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '菜单id',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=591 DEFAULT CHARSET=utf8 COMMENT='角色和菜单的映射表';
+
+-- ----------------------------
+-- Records of sys_role_menu
+-- ----------------------------
+INSERT INTO `sys_role_menu` VALUES ('10', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '1', null);
+INSERT INTO `sys_role_menu` VALUES ('11', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '2', null);
+INSERT INTO `sys_role_menu` VALUES ('12', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '3', null);
+INSERT INTO `sys_role_menu` VALUES ('13', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '4', null);
+INSERT INTO `sys_role_menu` VALUES ('14', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '5', null);
+INSERT INTO `sys_role_menu` VALUES ('15', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '6', null);
+INSERT INTO `sys_role_menu` VALUES ('16', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '7', null);
+INSERT INTO `sys_role_menu` VALUES ('17', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '8', null);
+INSERT INTO `sys_role_menu` VALUES ('18', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '9', null);
+INSERT INTO `sys_role_menu` VALUES ('19', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '10', null);
+INSERT INTO `sys_role_menu` VALUES ('20', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '12', null);
+INSERT INTO `sys_role_menu` VALUES ('21', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '13', null);
+INSERT INTO `sys_role_menu` VALUES ('22', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '14', null);
+INSERT INTO `sys_role_menu` VALUES ('499', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '15', null);
+INSERT INTO `sys_role_menu` VALUES ('543', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '1', null);
+INSERT INTO `sys_role_menu` VALUES ('544', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '8', null);
+INSERT INTO `sys_role_menu` VALUES ('545', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '2', null);
+INSERT INTO `sys_role_menu` VALUES ('546', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '5', null);
+INSERT INTO `sys_role_menu` VALUES ('547', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '6', null);
+INSERT INTO `sys_role_menu` VALUES ('548', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '3', null);
+INSERT INTO `sys_role_menu` VALUES ('549', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '7', null);
+INSERT INTO `sys_role_menu` VALUES ('550', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '16', '用户-异常数据监控');
+INSERT INTO `sys_role_menu` VALUES ('551', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '17', '用户-质控科');
+INSERT INTO `sys_role_menu` VALUES ('552', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '18', '用户-科室主任');
+INSERT INTO `sys_role_menu` VALUES ('553', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '19', '用户-质控科-各模块缺陷占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('554', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '20', '用户-质控科-条目缺陷占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('555', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '21', '用户-质控科-科室平均住院天数_详情');
+INSERT INTO `sys_role_menu` VALUES ('556', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '22', '用户-质控科-科室平均住院花费_详情');
+INSERT INTO `sys_role_menu` VALUES ('557', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '23', '用户-质控科-各科室质控平均分_详情');
+INSERT INTO `sys_role_menu` VALUES ('558', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '24', '用户-质控科-各科室缺陷占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('559', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '25', '用户-质控科-各科室甲级病历占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('560', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '26', '用户-科室主任-各模块缺陷占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('561', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '27', '用户-科室主任-条目缺陷占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('562', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '15', null);
+INSERT INTO `sys_role_menu` VALUES ('563', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '8', null);
+INSERT INTO `sys_role_menu` VALUES ('564', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '2', null);
+INSERT INTO `sys_role_menu` VALUES ('565', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '5', null);
+INSERT INTO `sys_role_menu` VALUES ('566', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '6', null);
+INSERT INTO `sys_role_menu` VALUES ('567', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '3', null);
+INSERT INTO `sys_role_menu` VALUES ('568', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '10', null);
+INSERT INTO `sys_role_menu` VALUES ('569', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '15', null);
+INSERT INTO `sys_role_menu` VALUES ('570', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '8', null);
+INSERT INTO `sys_role_menu` VALUES ('571', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '2', null);
+INSERT INTO `sys_role_menu` VALUES ('572', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '5', null);
+INSERT INTO `sys_role_menu` VALUES ('573', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '6', null);
+INSERT INTO `sys_role_menu` VALUES ('574', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '3', null);
+INSERT INTO `sys_role_menu` VALUES ('575', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '9', null);
+INSERT INTO `sys_role_menu` VALUES ('576', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '17', '用户-质控科');
+INSERT INTO `sys_role_menu` VALUES ('577', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '2', '18', '用户-科室主任');
+INSERT INTO `sys_role_menu` VALUES ('578', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '19', '用户-质控科-各模块缺陷占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('579', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '20', '用户-质控科-条目缺陷占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('580', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '21', '用户-质控科-科室平均住院天数_详情');
+INSERT INTO `sys_role_menu` VALUES ('581', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '22', '用户-质控科-科室平均住院花费_详情');
+INSERT INTO `sys_role_menu` VALUES ('582', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '23', '用户-质控科-各科室质控平均分_详情');
+INSERT INTO `sys_role_menu` VALUES ('583', 'Y', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '24', '用户-质控科-各科室缺陷占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('584', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '25', '用户-质控科-各科室甲级病历占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('585', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '2', '26', '用户-科室主任-各模块缺陷占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('586', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '2', '27', '用户-科室主任-条目缺陷占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('587', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '28', '用户-质控科-病案首页合格率占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('588', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '29', '用户-科室主任-病案首页合格率占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('589', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '30', '用户-科室主任-科室缺陷占比_详情');
+INSERT INTO `sys_role_menu` VALUES ('590', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '31', '用户-质控科-各科室缺陷占比_详情');
+
+-- ----------------------------
+-- Table structure for sys_role_permission
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_permission`;
+CREATE TABLE `sys_role_permission` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT 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则表示纪录未修改',
+  `role_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '角色id',
+  `permission_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '资源id',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1235 DEFAULT CHARSET=utf8 COMMENT='角色和资源的映射表';
+
+-- ----------------------------
+-- Records of sys_role_permission
+-- ----------------------------
+INSERT INTO `sys_role_permission` VALUES ('5', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '1', '基础功能-获取用户、机构、菜单信息');
+INSERT INTO `sys_role_permission` VALUES ('6', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '2', '基础功能-修改密码');
+INSERT INTO `sys_role_permission` VALUES ('20', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '3', '用户-基础数据维护-获取医院模块数据信息');
+INSERT INTO `sys_role_permission` VALUES ('21', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '4', '用户-基础数据维护-批量更新模块数据');
+INSERT INTO `sys_role_permission` VALUES ('22', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '5', '用户-质控评分-分页');
+INSERT INTO `sys_role_permission` VALUES ('23', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '6', '用户-条目数据维护-分页获取医院条目数据信息');
+INSERT INTO `sys_role_permission` VALUES ('24', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '7', '用户-条目数据维护-修改医院条目数据信息');
+INSERT INTO `sys_role_permission` VALUES ('25', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '8', '用户-条目数据维护-获取医院模块数据列表');
+INSERT INTO `sys_role_permission` VALUES ('26', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '9', '控制台-病历相关统计');
+INSERT INTO `sys_role_permission` VALUES ('27', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '10', '用户-条目数据维护-模糊查询医院模块条目列表');
+INSERT INTO `sys_role_permission` VALUES ('28', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '11', '用户-质控评分-新增质控条目');
+INSERT INTO `sys_role_permission` VALUES ('29', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '12', '用户-质控评分-删除质控条目');
+INSERT INTO `sys_role_permission` VALUES ('30', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '13', '用户-质控评分-修改质控条目');
+INSERT INTO `sys_role_permission` VALUES ('31', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '14', '用户-质控评分-获取详情');
+INSERT INTO `sys_role_permission` VALUES ('32', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '15', '控制台-缺陷相关统计');
+INSERT INTO `sys_role_permission` VALUES ('33', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '16', '控制台-医院运营相关统计');
+INSERT INTO `sys_role_permission` VALUES ('34', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '17', '用户-质控评分-评分');
+INSERT INTO `sys_role_permission` VALUES ('35', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '18', '用户-权限管理-角色管理-获取角色列表信息');
+INSERT INTO `sys_role_permission` VALUES ('36', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '19', '用户-权限管理-角色管理-获取角色菜权限单等数据');
+INSERT INTO `sys_role_permission` VALUES ('37', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '20', '用户-权限管理-角色管理-修改角色菜单权限数据');
+INSERT INTO `sys_role_permission` VALUES ('38', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '21', '用户-权限管理-用户管理-获取医院科室下拉列表信息');
+INSERT INTO `sys_role_permission` VALUES ('39', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '22', '用户-权限管理-用户管理-获取角色下拉列表信息');
+INSERT INTO `sys_role_permission` VALUES ('40', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '23', '用户-权限管理-用户管理-用户列表翻页信息查询');
+INSERT INTO `sys_role_permission` VALUES ('41', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '24', '用户-权限管理-用户管理-获取用户科室');
+INSERT INTO `sys_role_permission` VALUES ('42', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '25', '用户-权限管理-用户管理-获取用户角色');
+INSERT INTO `sys_role_permission` VALUES ('43', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '26', '用户-权限管理-用户管理-用户启用');
+INSERT INTO `sys_role_permission` VALUES ('44', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '27', '用户-权限管理-用户管理-用户停用');
+INSERT INTO `sys_role_permission` VALUES ('45', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '28', '用户-权限管理-用户管理-编辑用户科室');
+INSERT INTO `sys_role_permission` VALUES ('46', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '29', '用户-权限管理-用户管理-编辑用户角色');
+INSERT INTO `sys_role_permission` VALUES ('47', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '30', '用户-质控评分-获取病历质控一览下医院科室下拉列表信息');
+INSERT INTO `sys_role_permission` VALUES ('48', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '31', '用户-质控评分-获取病历质控一览下用户科室下拉列表信息');
+INSERT INTO `sys_role_permission` VALUES ('50', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '32', '用户-质控评分(科室)-分页');
+INSERT INTO `sys_role_permission` VALUES ('51', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '33', '用户-质控评分(个人)-分页');
+INSERT INTO `sys_role_permission` VALUES ('52', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '34', '用户-质控评分(科室)-评分');
+INSERT INTO `sys_role_permission` VALUES ('53', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '35', '用户-质控评分(科室)-新增质控条目');
+INSERT INTO `sys_role_permission` VALUES ('54', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '36', '用户-质控评分(科室)-删除质控条目');
+INSERT INTO `sys_role_permission` VALUES ('55', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '37', '用户-质控评分(科室)-修改质控条目');
+INSERT INTO `sys_role_permission` VALUES ('56', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '38', '用户-质控评分(科室)-获取详情');
+INSERT INTO `sys_role_permission` VALUES ('57', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '39', '用户-质控评分(个人)-获取病历质控一览下用户科室下拉列表信息');
+INSERT INTO `sys_role_permission` VALUES ('58', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '40', '用户-质控评分(科室)-评分');
+INSERT INTO `sys_role_permission` VALUES ('59', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '41', '用户-质控评分(科室)-新增质控条目');
+INSERT INTO `sys_role_permission` VALUES ('60', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '42', '用户-质控评分(科室)-删除质控条目');
+INSERT INTO `sys_role_permission` VALUES ('61', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '43', '用户-质控评分(科室)-修改质控条目');
+INSERT INTO `sys_role_permission` VALUES ('62', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '44', '用户-质控评分(科室)-获取详情');
+INSERT INTO `sys_role_permission` VALUES ('502', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '45', '控制台-平均住院天数');
+INSERT INTO `sys_role_permission` VALUES ('503', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '46', '控制台-平均住院费用');
+INSERT INTO `sys_role_permission` VALUES ('504', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '47', '控制台-质控平均分按科室统计');
+INSERT INTO `sys_role_permission` VALUES ('505', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '48', '控制台-各科室甲级病历占比');
+INSERT INTO `sys_role_permission` VALUES ('506', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '49', '控制台-出院人数统计');
+INSERT INTO `sys_role_permission` VALUES ('507', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '50', '控制台-质控病历统计');
+INSERT INTO `sys_role_permission` VALUES ('508', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '51', '控制台-各模块缺陷占比排行');
+INSERT INTO `sys_role_permission` VALUES ('509', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '52', '控制台-条目缺陷占比');
+INSERT INTO `sys_role_permission` VALUES ('510', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '53', '控制台-各科室缺陷占比');
+INSERT INTO `sys_role_permission` VALUES ('511', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '54', '控制台(科室)-出院人数统计(科室)');
+INSERT INTO `sys_role_permission` VALUES ('512', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '55', '控制台(科室)-质控病历数统计(科室)');
+INSERT INTO `sys_role_permission` VALUES ('513', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '56', '控制台(科室)-各模块缺陷占比排行(科室)');
+INSERT INTO `sys_role_permission` VALUES ('514', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '57', '控制台(科室)-条目缺陷占比(科室)');
+INSERT INTO `sys_role_permission` VALUES ('1164', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '45', null);
+INSERT INTO `sys_role_permission` VALUES ('1165', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '46', null);
+INSERT INTO `sys_role_permission` VALUES ('1166', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '47', null);
+INSERT INTO `sys_role_permission` VALUES ('1167', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '48', null);
+INSERT INTO `sys_role_permission` VALUES ('1168', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '49', null);
+INSERT INTO `sys_role_permission` VALUES ('1169', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '50', null);
+INSERT INTO `sys_role_permission` VALUES ('1170', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '51', null);
+INSERT INTO `sys_role_permission` VALUES ('1171', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '52', null);
+INSERT INTO `sys_role_permission` VALUES ('1172', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '53', null);
+INSERT INTO `sys_role_permission` VALUES ('1173', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '1', null);
+INSERT INTO `sys_role_permission` VALUES ('1174', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '2', null);
+INSERT INTO `sys_role_permission` VALUES ('1175', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '4', null);
+INSERT INTO `sys_role_permission` VALUES ('1176', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '7', null);
+INSERT INTO `sys_role_permission` VALUES ('1177', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '17', null);
+INSERT INTO `sys_role_permission` VALUES ('1178', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '11', null);
+INSERT INTO `sys_role_permission` VALUES ('1179', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '12', null);
+INSERT INTO `sys_role_permission` VALUES ('1180', 'N', '2020-05-14 13:31:16', '2020-05-14 13:31:16', '1', '1', '1', '13', null);
+INSERT INTO `sys_role_permission` VALUES ('1182', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '59', '控制台-各模块缺陷占比_详情');
+INSERT INTO `sys_role_permission` VALUES ('1183', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '60', '控制台-条目缺陷占比_详情');
+INSERT INTO `sys_role_permission` VALUES ('1184', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '61', '异常数据监控-查询异常数据监控信息');
+INSERT INTO `sys_role_permission` VALUES ('1185', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '62', '异常数据监控-异常数据监控-查询异常数据监控信息');
+INSERT INTO `sys_role_permission` VALUES ('1186', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '63', '异常数据监控-异常数据监控-删除异常数据监控信息');
+INSERT INTO `sys_role_permission` VALUES ('1187', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '64', '控制台-科室平均住院天数_详情');
+INSERT INTO `sys_role_permission` VALUES ('1188', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '65', '控制台-科室平均住院花费_详情');
+INSERT INTO `sys_role_permission` VALUES ('1189', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '66', '控制台-各科室质控平均分_详情');
+INSERT INTO `sys_role_permission` VALUES ('1190', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '67', '控制台-各科室缺陷占比_详情');
+INSERT INTO `sys_role_permission` VALUES ('1191', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '68', '控制台-各科室甲级病历占比_详情');
+INSERT INTO `sys_role_permission` VALUES ('1192', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '69', '控制台(科室)-各模块缺陷占比_详情');
+INSERT INTO `sys_role_permission` VALUES ('1193', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '70', '控制台(科室)-条目缺陷占比_详情');
+INSERT INTO `sys_role_permission` VALUES ('1194', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '54', null);
+INSERT INTO `sys_role_permission` VALUES ('1195', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '55', null);
+INSERT INTO `sys_role_permission` VALUES ('1196', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '56', null);
+INSERT INTO `sys_role_permission` VALUES ('1197', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '57', null);
+INSERT INTO `sys_role_permission` VALUES ('1199', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '1', null);
+INSERT INTO `sys_role_permission` VALUES ('1200', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '2', null);
+INSERT INTO `sys_role_permission` VALUES ('1201', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '4', null);
+INSERT INTO `sys_role_permission` VALUES ('1202', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '7', null);
+INSERT INTO `sys_role_permission` VALUES ('1203', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '40', null);
+INSERT INTO `sys_role_permission` VALUES ('1204', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '41', null);
+INSERT INTO `sys_role_permission` VALUES ('1205', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '42', null);
+INSERT INTO `sys_role_permission` VALUES ('1206', 'N', '2020-05-18 10:48:43', '2020-05-18 10:48:43', '1', '1', '3', '43', null);
+INSERT INTO `sys_role_permission` VALUES ('1207', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '54', null);
+INSERT INTO `sys_role_permission` VALUES ('1208', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '55', null);
+INSERT INTO `sys_role_permission` VALUES ('1209', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '56', null);
+INSERT INTO `sys_role_permission` VALUES ('1210', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '57', null);
+INSERT INTO `sys_role_permission` VALUES ('1212', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '1', null);
+INSERT INTO `sys_role_permission` VALUES ('1213', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '2', null);
+INSERT INTO `sys_role_permission` VALUES ('1214', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '4', null);
+INSERT INTO `sys_role_permission` VALUES ('1215', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '7', null);
+INSERT INTO `sys_role_permission` VALUES ('1216', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '34', null);
+INSERT INTO `sys_role_permission` VALUES ('1217', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '35', null);
+INSERT INTO `sys_role_permission` VALUES ('1218', 'N', '2020-05-18 10:48:51', '2020-05-18 10:48:51', '1', '1', '2', '36', null);
+INSERT INTO `sys_role_permission` VALUES ('1219', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '59', '控制台-各模块缺陷占比_详情');
+INSERT INTO `sys_role_permission` VALUES ('1220', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '60', '控制台-条目缺陷占比_详情');
+INSERT INTO `sys_role_permission` VALUES ('1221', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '64', '控制台-科室平均住院天数_详情');
+INSERT INTO `sys_role_permission` VALUES ('1222', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '65', '控制台-科室平均住院花费_详情');
+INSERT INTO `sys_role_permission` VALUES ('1223', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '66', '控制台-各科室质控平均分_详情');
+INSERT INTO `sys_role_permission` VALUES ('1224', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '67', '控制台-各科室缺陷占比-缺陷详情');
+INSERT INTO `sys_role_permission` VALUES ('1225', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', '68', '控制台-各科室甲级病历占比_详情');
+INSERT INTO `sys_role_permission` VALUES ('1226', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '2', '69', '控制台(科室)-各模块缺陷占比_详情');
+INSERT INTO `sys_role_permission` VALUES ('1227', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '2', '70', '控制台(科室)-条目缺陷占比_详情');
+INSERT INTO `sys_role_permission` VALUES ('1228', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '71', '控制台-各科室缺陷占比(组合)');
+INSERT INTO `sys_role_permission` VALUES ('1229', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '72', '控制台-病案首页合格率占比');
+INSERT INTO `sys_role_permission` VALUES ('1230', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '73', '控制台(科室)-各科室缺陷占比(科室)');
+INSERT INTO `sys_role_permission` VALUES ('1231', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '74', '控制台(科室)-病案首页合格率占比(科室)');
+INSERT INTO `sys_role_permission` VALUES ('1232', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '75', '控制台-病案首页合格率占比(首页)');
+INSERT INTO `sys_role_permission` VALUES ('1233', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '76', '控制台(科室)-病案首页合格率占比(首页)');
+INSERT INTO `sys_role_permission` VALUES ('1234', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '77', '控制台(科室)-科室缺陷占比-缺陷明细');

+ 3 - 4
src/main/java/com/diagbot/aggregate/MrStatisticsAggregate.java

@@ -118,7 +118,7 @@ public class MrStatisticsAggregate {
         BeanUtil.copyProperties(filterVO, qcresultFilterVO);
 
         int totleNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
-        if (totleNum == 0){
+        if (totleNum == 0) {
             return retList;
         }
         qcresultFilterVO.setLevel("甲");
@@ -155,9 +155,8 @@ public class MrStatisticsAggregate {
         thirdLevelNumDTO.setName("丙级病历");
         thirdLevelNumDTO.setNum(thirdLevelNum);
         thirdLevelNumDTO.setTotleNum(totleNum);
-        Double thirdPercent = BigDecimal.valueOf(1)
-                .subtract(BigDecimal.valueOf(firstPercent))
-                .subtract(BigDecimal.valueOf(secondPercent))
+        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);

+ 36 - 34
src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java

@@ -71,6 +71,7 @@ public class ResultStatisticsAggregate {
      */
     @DataProvider("entryCountGroupByCase")
     public List<NumDTO> entryCountGroupByCase(@InvokeParameter("filterVO") FilterVO filterVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
         Integer limitCount = filterVO.getLimitCount();
         QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
         BeanUtil.copyProperties(filterVO, qcresultFilterVO);
@@ -78,40 +79,39 @@ public class ResultStatisticsAggregate {
         List<NumDTO> qcEntryNumList = qcresultInfoFacade.entryCountGroupByCase(filterVO);
         List<NumDTO> standardEntryNumList = qcCasesFacade.entryGroupByCase();
         if (ListUtil.isEmpty(qcEntryNumList)) {
-            standardEntryNumList.forEach(entryNum -> {
-                Integer totleNum = entryNum.getNum() * mrNum;
+            return qcEntryNumList;
+        }
+        if (ListUtil.isEmpty(standardEntryNumList)
+                && ListUtil.isNotEmpty(qcEntryNumList)) {
+            qcEntryNumList.forEach(entryNum -> {
                 entryNum.setNum(0);
                 entryNum.setPercent(0d);
                 entryNum.setPercentStr("0%");
-                entryNum.setTotleNum(totleNum);
+                entryNum.setTotleNum(0);
+            });
+        }
+        if (ListUtil.isNotEmpty(qcEntryNumList)) {
+            Map<String, Integer> standardMap
+                    = EntityUtil.makeMapWithKeyValue(standardEntryNumList, "name", "num");
+            qcEntryNumList.forEach(item -> {
+                if (!standardMap.containsKey(item.getName())) {
+                    item.setTotleNum(0);
+                    item.setPercent(0d);
+                    item.setPercentStr("0%");
+                } else {
+                    Integer totleNum = standardMap.get(item.getName()) * mrNum;
+                    Double percent = BigDecimal.valueOf(item.getNum())
+                            .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                            .doubleValue();
+                    String percentStr
+                            = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                    item.setTotleNum(totleNum);
+                    item.setPercent(percent);
+                    item.setPercentStr(percentStr);
+                }
             });
-        } else {
-            Map<Long, Integer> qcEntryNumMap
-                    = EntityUtil.makeMapWithKeyValue(qcEntryNumList, "id", "num");
-            if (ListUtil.isNotEmpty(standardEntryNumList)) {
-                standardEntryNumList.forEach(entryNum -> {
-                    Integer totleNum = entryNum.getNum() * mrNum;
-                    if (qcEntryNumMap.containsKey(entryNum.getId())) {
-                        entryNum.setNum(qcEntryNumMap.get(entryNum.getId()));
-                        Double percent = BigDecimal.valueOf(entryNum.getNum())
-                                .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
-                                .doubleValue();
-                        DecimalFormat df = new DecimalFormat("#0.00");
-                        String percentStr
-                                = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
-                        entryNum.setTotleNum(totleNum);
-                        entryNum.setPercent(percent);
-                        entryNum.setPercentStr(percentStr);
-                    } else {
-                        entryNum.setNum(0);
-                        entryNum.setPercent(0d);
-                        entryNum.setPercentStr("0%");
-                        entryNum.setTotleNum(totleNum);
-                    }
-                });
-            }
             //降序排序
-            Collections.sort(standardEntryNumList, new Comparator<NumDTO>() {
+            Collections.sort(qcEntryNumList, new Comparator<NumDTO>() {
                 @Override
                 public int compare(NumDTO o1, NumDTO o2) {
                     return o2.getPercent().compareTo(o1.getPercent());
@@ -120,12 +120,12 @@ public class ResultStatisticsAggregate {
         }
 
         //取top10
-        standardEntryNumList = standardEntryNumList
+        qcEntryNumList = qcEntryNumList
                 .stream()
                 .limit(limitCount)
                 .collect(Collectors.toList());
 
-        return standardEntryNumList;
+        return qcEntryNumList;
     }
 
     /**
@@ -183,8 +183,8 @@ public class ResultStatisticsAggregate {
                         otherNumDTO.setName("其他");
                         otherNumDTO.setNum(num);
                         otherNumDTO.setTotleNum(totle);
-                        Double percent = BigDecimal.valueOf(1)
-                                .subtract(BigDecimal.valueOf(sumPercent))
+                        Double percent = BigDecimal.valueOf(num)
+                                .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
                                 .doubleValue();
                         otherNumDTO.setPercent(percent);
                         String percentStr
@@ -241,7 +241,9 @@ public class ResultStatisticsAggregate {
                 NumDTO otherNumDTO = new NumDTO();
                 otherNumDTO.setName("其他");
                 otherNumDTO.setNum(num);
-                otherNumDTO.setPercent(BigDecimal.valueOf(1).subtract(BigDecimal.valueOf(rate)).doubleValue());
+                otherNumDTO.setPercent(BigDecimal.valueOf(num)
+                        .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
+                        .doubleValue());
                 retList.add(otherNumDTO);
             }
             retList.forEach(result -> {

+ 29 - 0
src/main/java/com/diagbot/config/CacheDeleteInit.java

@@ -0,0 +1,29 @@
+package com.diagbot.config;
+
+import com.diagbot.facade.CacheFacade;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 项目启动后初始化缓存
+ * @author: gaodm
+ * @time: 2020/5/13 11:20
+ */
+@Component //把类交给spring容器管理
+@Order(100)  //使用order属性,设置该类在spring容器中的加载顺序
+@Slf4j
+public class CacheDeleteInit implements CommandLineRunner {
+
+    @Autowired
+    CacheFacade cacheFacade;
+
+    @Override
+    public void run(String... args) throws Exception {
+        // 服务启动清除redis缓存
+        cacheFacade.clear();
+        log.info("病历质控系统缓存启动初始化成功!");
+    }
+}

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

@@ -47,6 +47,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/behospitalInfo/execule").permitAll()
                 .antMatchers("/qc/behospitalInfo/analyze_rpc").permitAll()
                 .antMatchers("/qc/behospitalInfo/analyze_api").permitAll()
+                .antMatchers("/qc/behospitalInfo/analyze_run").permitAll()
                 .antMatchers("/qc/module/getById").permitAll()
                 .antMatchers("/qc/module/getModuleMap").permitAll()
                 .antMatchers("/qc/cases/getQcCases").permitAll()
@@ -58,6 +59,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/bas/dept/getListUser").permitAll()
                 .antMatchers("/qc/behospitalInfo/page_dept").permitAll()
                 .antMatchers("/qc/behospitalInfo/page_person").permitAll()
+                .antMatchers("/consoleByDept/getDept").permitAll()
                 .antMatchers("/**").authenticated();
 //                .antMatchers("/**").permitAll();
     }

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

@@ -90,6 +90,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/qc/behospitalInfo/execule", request)
                 || matchers("/qc/behospitalInfo/analyze_rpc", request)
                 || matchers("/qc/behospitalInfo/analyze_api", request)
+                || matchers("/qc/behospitalInfo/analyze_run", request)
                 || matchers("/qc/module/getById", request)
                 || matchers("/qc/module/getModuleMap", request)
                 || matchers("/qc/cases/getQcCases", request)
@@ -101,6 +102,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/bas/dept/getListUser", request)
                 || matchers("/qc/behospitalInfo/page_dept", request)
                 || matchers("/qc/behospitalInfo/page_person", request)
+                || matchers("/consoleByDept/getDept", request)
                 || matchers("/", request)) {
             return true;
         }

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

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/15 12:24
+ */
+@Getter
+@Setter
+public class AnalyzeRunDTO {
+    // //得分
+    // private BigDecimal scoreRes;
+    // //等级
+    // private String level;
+    // 缺陷条目
+    private List<MsgDTO> msgDTOList = new ArrayList<>();
+}

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

@@ -0,0 +1,31 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/19 16:04
+ */
+@Getter
+@Setter
+public class LevelStatisticsDTO {
+    private String deptId;
+    private String deptName;
+    private String doctorId;
+    private String doctorName;
+    private Integer entryNum;
+    private Integer mrNum;
+    private Double totleValue;
+    private Double averageValue;
+    private Integer firstLevelNum;
+    private Integer secondLevelNum;
+    private Integer thirdLevelNum;
+    private Double firstLevelPercent;
+    private Double secondLevelPercent;
+    private Double thirdLevelPercent;
+    private String firstLevelPercentStr;
+    private String secondLevelPercentStr;
+    private String thirdLevelPercentStr;
+}

+ 50 - 0
src/main/java/com/diagbot/dto/ModelHospitalAllDTO.java

@@ -0,0 +1,50 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-05-15 14:45
+ */
+@Setter
+@Getter
+public class ModelHospitalAllDTO {
+
+    private Long id;
+
+    private Long hospitalId;
+
+    private String hospitalModelName;
+
+    private Long standModelId;
+
+    private String standModelName;
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

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

@@ -22,6 +22,8 @@ public class MsgDTO {
     //提示信息
     private String msg;
     //提示信息
+    private String code;
+    //提示信息
     private String info;
     //标准提示信息
     private String standardMsg;

+ 95 - 0
src/main/java/com/diagbot/dto/QcAbnormalDTO.java

@@ -0,0 +1,95 @@
+package com.diagbot.dto;
+
+import com.diagbot.enums.AbnormalStatusEnum;
+import com.diagbot.enums.AbnormalTypeEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/5/15 9:27
+ */
+@Getter
+@Setter
+public class QcAbnormalDTO {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 病人住院ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 异常类型(1:数据模块 2:质控类型 3:XML结构)
+     */
+    private Integer type;
+
+    /**
+     * 异常类型名称(1:数据模块 2:质控类型 3:XML结构)
+     */
+    private String typeName;
+
+    public String getTypeName() {
+        return AbnormalTypeEnum.getName(this.type);
+    }
+
+    /**
+     * 异常描述
+     */
+    private String description;
+
+    /**
+     * 状态(0:未处理,1:已处理)
+     */
+    private Integer status;
+
+    /**
+     * 状态名称(0:未处理,1:已处理)
+     */
+    private String statusName;
+
+    public String getStatusName() {
+        return AbnormalStatusEnum.getName(this.status);
+    }
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

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

@@ -5,6 +5,7 @@ import lombok.Setter;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * @Description:
@@ -27,7 +28,7 @@ public class QcCasesDTO {
     /**
      * 记录修改时间,如果时间是1970年则表示纪录未修改
      */
-    private LocalDateTime gmtModified;
+    private Date gmtModified;
 
     /**
      * 模块名称

+ 25 - 0
src/main/java/com/diagbot/dto/QcModeAllDTO.java

@@ -0,0 +1,25 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-05-18 9:29
+ */
+@Setter
+@Getter
+public class QcModeAllDTO {
+    private Long id;
+
+    /**
+     * 模块名称
+     */
+    private String name;
+
+    /**
+     * 上级模块
+     */
+    private Long parentId;
+}

+ 4 - 0
src/main/java/com/diagbot/entity/BasDeptInfo.java

@@ -1,5 +1,8 @@
 package com.diagbot.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
 import java.time.LocalDateTime;
 import java.io.Serializable;
 
@@ -18,6 +21,7 @@ public class BasDeptInfo implements Serializable {
     /**
      * 科室编码(HIS导入)
      */
+    @TableId(value = "dept_id",type = IdType.INPUT)
     private String deptId;
 
     /**

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

@@ -1,5 +1,7 @@
 package com.diagbot.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
@@ -23,6 +25,7 @@ public class BehospitalInfo implements Serializable {
     /**
      * 病人住院ID
      */
+    @TableId(value = "behospital_code",type = IdType.INPUT)
     private String behospitalCode;
 
     /**

+ 27 - 24
src/main/java/com/diagbot/entity/DoctorAdvice.java

@@ -1,5 +1,7 @@
 package com.diagbot.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
@@ -23,6 +25,7 @@ public class DoctorAdvice implements Serializable {
     /**
      * 病人医嘱ID
      */
+    @TableId(value = "doctor_advice_id",type = IdType.INPUT)
     private String doctorAdviceId;
 
     /**
@@ -140,28 +143,28 @@ public class DoctorAdvice implements Serializable {
      */
     private String doctorName;
 
-//    /**
-//     * 是否删除,N:未删除,Y:删除
-//     */
-//    private String isDeleted;
-//
-//    /**
-//     * 记录创建时间
-//     */
-//    private Date gmtCreate;
-//
-//    /**
-//     * 记录修改时间,如果时间是1970年则表示纪录未修改
-//     */
-//    private Date gmtModified;
-//
-//    /**
-//     * 创建人,0表示无创建人值
-//     */
-//    private String creator;
-//
-//    /**
-//     * 修改人,如果为0则表示纪录未修改
-//     */
-//    private String modifier;
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
 }

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

@@ -1,5 +1,7 @@
 package com.diagbot.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
@@ -23,6 +25,7 @@ public class HomeDiagnoseInfo implements Serializable {
     /**
      * 病案首页ID
      */
+    @TableId(value = "home_page_id",type = IdType.INPUT)
     private String homePageId;
 
     /**

+ 3 - 0
src/main/java/com/diagbot/entity/HomeOperationInfo.java

@@ -1,5 +1,7 @@
 package com.diagbot.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
@@ -23,6 +25,7 @@ public class HomeOperationInfo implements Serializable {
     /**
      * 病案首页ID
      */
+    @TableId(value = "home_page_id",type = IdType.INPUT)
     private String homePageId;
 
     /**

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

@@ -1,5 +1,7 @@
 package com.diagbot.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
@@ -23,6 +25,7 @@ public class HomePage implements Serializable {
     /**
      * 病案首页编号
      */
+    @TableId(value = "home_page_id",type = IdType.INPUT)
     private String homePageId;
 
     /**

+ 193 - 0
src/main/java/com/diagbot/entity/MedQcresultCases.java

@@ -0,0 +1,193 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 质控评分模块评分信息
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-19
+ */
+public class MedQcresultCases 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(0:其他模块)
+     */
+    private Long casesId;
+
+    /**
+     * 最后得分
+     */
+    private BigDecimal scoreRes;
+
+    /**
+     * 等级
+     */
+    private String level;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+
+    public String getBehospitalCode() {
+        return behospitalCode;
+    }
+
+    public void setBehospitalCode(String behospitalCode) {
+        this.behospitalCode = behospitalCode;
+    }
+
+    public Long getCasesId() {
+        return casesId;
+    }
+
+    public void setCasesId(Long casesId) {
+        this.casesId = casesId;
+    }
+
+    public BigDecimal getScoreRes() {
+        return scoreRes;
+    }
+
+    public void setScoreRes(BigDecimal scoreRes) {
+        this.scoreRes = scoreRes;
+    }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "MedQcresultCases{" +
+                "id=" + id +
+                ", hospitalId=" + hospitalId +
+                ", behospitalCode=" + behospitalCode +
+                ", casesId=" + casesId +
+                ", scoreRes=" + scoreRes +
+                ", level=" + level +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", remark=" + remark +
+                "}";
+    }
+}

+ 4 - 0
src/main/java/com/diagbot/entity/MedRecordType.java

@@ -1,5 +1,8 @@
 package com.diagbot.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
 import java.io.Serializable;
 
 /**
@@ -17,6 +20,7 @@ public class MedRecordType implements Serializable {
     /**
      * 类别ID
      */
+    @TableId(value = "type_id",type = IdType.INPUT)
     private String typeId;
 
     /**

+ 3 - 0
src/main/java/com/diagbot/entity/MedicalRecord.java

@@ -1,5 +1,7 @@
 package com.diagbot.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
@@ -20,6 +22,7 @@ public class MedicalRecord implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    @TableId(value = "rec_id",type = IdType.INPUT)
     private String recId;
 
     /**

+ 3 - 0
src/main/java/com/diagbot/entity/MedicalRecordContent.java

@@ -1,5 +1,7 @@
 package com.diagbot.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
@@ -24,6 +26,7 @@ public class MedicalRecordContent implements Serializable {
     /**
      * 病历ID
      */
+    @TableId(value = "rec_id",type = IdType.INPUT)
     private String recId;
 
     /**

+ 158 - 0
src/main/java/com/diagbot/entity/ModelHospital.java

@@ -0,0 +1,158 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-05-15
+ */
+@TableName("qc_model_hospital")
+public class ModelHospital implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Long hospitalId;
+
+    private String hospitalModelName;
+
+    private Long standModelId;
+
+    private String standModelName;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+    public String getHospitalModelName() {
+        return hospitalModelName;
+    }
+
+    public void setHospitalModelName(String hospitalModelName) {
+        this.hospitalModelName = hospitalModelName;
+    }
+    public Long getStandModelId() {
+        return standModelId;
+    }
+
+    public void setStandModelId(Long standModelId) {
+        this.standModelId = standModelId;
+    }
+    public String getStandModelName() {
+        return standModelName;
+    }
+
+    public void setStandModelName(String standModelName) {
+        this.standModelName = standModelName;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "ModelHospital{" +
+            "id=" + id +
+            ", hospitalId=" + hospitalId +
+            ", hospitalModelName=" + hospitalModelName +
+            ", standModelId=" + standModelId +
+            ", standModelName=" + standModelName +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 195 - 0
src/main/java/com/diagbot/entity/QcAbnormal.java

@@ -0,0 +1,195 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 异常数据监控信息
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-15
+ */
+public class QcAbnormal implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 病人住院ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 异常类型(1:数据模块 2:质控类型 3:XML结构)
+     */
+    private Integer type;
+
+    /**
+     * 异常描述
+     */
+    private String description;
+
+    /**
+     * 状态(0:未处理,1:已处理)
+     */
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    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 Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date 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 getBehospitalCode() {
+        return behospitalCode;
+    }
+
+    public void setBehospitalCode(String behospitalCode) {
+        this.behospitalCode = behospitalCode;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "QcAbnormal{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", hospitalId=" + hospitalId +
+                ", behospitalCode=" + behospitalCode +
+                ", type=" + type +
+                ", description=" + description +
+                ", status=" + status +
+                ", remark=" + remark +
+                "}";
+    }
+}

+ 28 - 0
src/main/java/com/diagbot/entity/QcModelHospital.java

@@ -0,0 +1,28 @@
+package com.diagbot.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-05-13
+ */
+@Data
+public class QcModelHospital implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long hospitalId;
+
+    private String hospitalModelName;
+
+    private Long standModelId;
+
+    private String standModelName;
+
+}

+ 50 - 0
src/main/java/com/diagbot/enums/AbnormalStatusEnum.java

@@ -0,0 +1,50 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2018年11月21日 下午2:31:42
+ */
+public enum AbnormalStatusEnum implements KeyedNamed {
+    NOT_HANDLED(0, "未处理"),
+    HAS_HANDLED(1, "已处理");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    AbnormalStatusEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static AbnormalStatusEnum getEnum(int key) {
+        for (AbnormalStatusEnum item : AbnormalStatusEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        AbnormalStatusEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}
+

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

@@ -0,0 +1,51 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2018年11月21日 下午2:31:42
+ */
+public enum AbnormalTypeEnum implements KeyedNamed {
+    DATA_MODEL(1, "数据模块"),
+    QC_TYPE(2, "质控类型"),
+    XML(3, "XML结构");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    AbnormalTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static AbnormalTypeEnum getEnum(int key) {
+        for (AbnormalTypeEnum item : AbnormalTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        AbnormalTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}
+

+ 91 - 1
src/main/java/com/diagbot/facade/AlgorithmFacade.java

@@ -3,13 +3,17 @@ package com.diagbot.facade;
 import com.diagbot.dto.AlgorithmDTO;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.util.BeanUtil;
 import com.diagbot.util.BigDecimalUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.vo.AlgorithmVO;
+import com.diagbot.vo.MedQcresultCasesVO;
 import com.diagbot.vo.QcResultAlgVO;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -50,11 +54,88 @@ public class AlgorithmFacade {
         }
         //处理数据
         dataDeal(algorithmVO);
+
+        BigDecimal res = BigDecimal.ZERO;
         //计算得分
-        BigDecimal res = cal(algorithmVO);
+        if (algorithmVO.getHospitalId().equals(1L)) {
+            //长兴医院的情况下
+            res = getScoreForCx(algorithmVO);
+        } else {
+            //非长兴医院的情况下
+            res = cal(algorithmVO);
+        }
+        return res;
+    }
+
+    /**
+     * 评结果分数(长兴)
+     *
+     * @param algorithmVO 操作条目的所有信息
+     * @return 评结果分数
+     */
+    private BigDecimal getScoreForCx(AlgorithmVO algorithmVO) {
+        List<QcResultAlgVO> qcResultAlgHomePage = new ArrayList<>();
+        List<QcResultAlgVO> qcResultAlgHomePageExt = new ArrayList<>();
+        for (QcResultAlgVO qcResultAlgVO : algorithmVO.getQcResultAlgVOList()) {
+            //首页的情况
+            if (qcResultAlgVO.getCasesId().equals(243L)) {
+                qcResultAlgHomePage.add(qcResultAlgVO);
+            } else {
+                //非首页
+                qcResultAlgHomePageExt.add(qcResultAlgVO);
+            }
+        }
+        List<MedQcresultCasesVO> medQcresultCasesVOList = new ArrayList<>();
+        //病案首页
+        AlgorithmVO homePage = new AlgorithmVO();
+        BeanUtil.copyProperties(algorithmVO, homePage);
+        homePage.setQcResultAlgVOList(qcResultAlgHomePage);
+        homePage.setIsHomePage(true);
+        BigDecimal homePageRes = cal(homePage);
+        String level = getHomePageLevel(homePageRes);
+        MedQcresultCasesVO medQcresultCasesVOHp = new MedQcresultCasesVO();
+        medQcresultCasesVOHp.setHospitalId(algorithmVO.getHospitalId());
+        medQcresultCasesVOHp.setBehospitalCode(algorithmVO.getBehospitalCode());
+        medQcresultCasesVOHp.setCasesId(243L);
+        medQcresultCasesVOHp.setScoreRes(homePageRes);
+        medQcresultCasesVOHp.setLevel(level);
+        medQcresultCasesVOList.add(medQcresultCasesVOHp);
+        //病案首页以外
+        AlgorithmVO homePageExt = new AlgorithmVO();
+        BeanUtil.copyProperties(algorithmVO, homePageExt);
+        homePageExt.setQcResultAlgVOList(qcResultAlgHomePageExt);
+        BigDecimal homePageExtRes = cal(homePageExt);
+        MedQcresultCasesVO medQcresultCasesVOHpExt = new MedQcresultCasesVO();
+        medQcresultCasesVOHpExt.setHospitalId(algorithmVO.getHospitalId());
+        medQcresultCasesVOHpExt.setBehospitalCode(algorithmVO.getBehospitalCode());
+        medQcresultCasesVOHpExt.setCasesId(0L);
+        medQcresultCasesVOHpExt.setScoreRes(homePageExtRes);
+        medQcresultCasesVOHpExt.setLevel("");
+        medQcresultCasesVOList.add(medQcresultCasesVOHpExt);
+        algorithmVO.setMedQcresultCasesVOList(medQcresultCasesVOList);
+        //计算分数
+        BigDecimal res = homePageRes
+                .add(homePageExtRes)
+                .multiply(new BigDecimal(100))
+                .divide(new BigDecimal(120), 1, RoundingMode.HALF_UP);
         return res;
     }
 
+    /**
+     * 根据分数评定等级(病案首页)
+     *
+     * @param score 评分分数
+     * @return 等级
+     */
+    private String getHomePageLevel(BigDecimal score) {
+        String level = "不合格";
+        //得分≥18分为甲级
+        if (BigDecimalUtil.ge(score, new BigDecimal(18))) {
+            level = "合格";
+        }
+        return level;
+    }
+
     /**
      * 根据分数评定等级
      *
@@ -160,6 +241,10 @@ public class AlgorithmFacade {
      */
     private BigDecimal cal(AlgorithmVO algorithmVO) {
         BigDecimal res = new BigDecimal(100);
+        if (algorithmVO.getHospitalId().equals(1L)
+                && algorithmVO.getIsHomePage().equals(true)) {
+            res = new BigDecimal(20);
+        }
         //模块总分
         Map<Long, BigDecimal> casesMap = new HashMap<>();
         //单票否决计分
@@ -228,6 +313,11 @@ public class AlgorithmFacade {
         System.out.println("60:" + algorithmFacade.getLevel(new BigDecimal(60)));
         System.out.println("0:" + algorithmFacade.getLevel(new BigDecimal(0)));
 
+
+        System.out.println("18:" + algorithmFacade.getHomePageLevel(new BigDecimal(20)));
+        System.out.println("18:" + algorithmFacade.getHomePageLevel(new BigDecimal(18)));
+        System.out.println("17.9:" + algorithmFacade.getHomePageLevel(new BigDecimal(17.9)));
+
         if (BigDecimalUtil.lt(new BigDecimal(-1), BigDecimal.ZERO)) {
             System.out.println(BigDecimal.ZERO);
         }

+ 162 - 14
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -7,6 +7,7 @@ import com.diagbot.client.AuthServiceClient;
 import com.diagbot.client.QcServiceClient;
 import com.diagbot.dto.AlgorithmDTO;
 import com.diagbot.dto.AnalyzeDTO;
+import com.diagbot.dto.AnalyzeRunDTO;
 import com.diagbot.dto.BehosDTO;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.MsgApiDTO;
@@ -38,6 +39,8 @@ import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.AlgorithmVO;
 import com.diagbot.vo.AnalyzeApiVO;
+import com.diagbot.vo.AnalyzeCodeVO;
+import com.diagbot.vo.AnalyzeRunVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.GetDetailVO;
@@ -46,6 +49,7 @@ import com.diagbot.vo.QcResultAlgQueryVO;
 import com.diagbot.vo.QcResultAlgVO;
 import com.diagbot.vo.QueryVo;
 import com.diagbot.vo.RecordContentVO;
+import com.diagbot.vo.TaskVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
@@ -100,7 +104,15 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     Boolean encryptFlag;
     @Autowired
     QcQuestionFacade qcQuestionFacade;
+    @Autowired
+    QcModelHospitalFacade qcModelHospitalFacade;
 
+    /**
+     * 分页
+     *
+     * @param behospitalPageVO
+     * @return
+     */
     public IPage<BehospitalInfoDTO> pageFac(BehospitalPageVO behospitalPageVO) {
         //入参验证
         //入院时间
@@ -132,6 +144,12 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         return res;
     }
 
+    /**
+     * 获取明细
+     *
+     * @param getDetailVO
+     * @return
+     */
     public Map<String, Object> getByBehospitalCode(GetDetailVO getDetailVO) {
         Map<String, Object> res = new HashMap<>(); // 返回结果
         Long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
@@ -192,18 +210,18 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         return res;
     }
 
-
-    public AnalyzeDTO analyze(AnalyzeVO analyzeVO) {
-        Long hospitalId = analyzeVO.getHospitalId();
-        if (!analyzeVO.getIsTask()) {
-            hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
-        }
-//        Long hospitalId = 1L; // 写死
-        analyzeVO.setHospitalId(hospitalId);
+    /**
+     * 处理数据(公共方法)
+     *
+     * @param hospitalId
+     * @param analyzeVO
+     * @return
+     */
+    public QueryVo dealCommonData(Long hospitalId, AnalyzeVO analyzeVO) {
         // 获取质控条目
         List<QcCasesEntryDTO> qcCasesEntryDTOList = qcCasesEntryFacade.getQcCasesEntry(analyzeVO);
         if(ListUtil.isEmpty(qcCasesEntryDTOList)){
-            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该病历找不到质控条目!");
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该病历无关联的质控条目!");
         }
 
         // 获取病历所有数据
@@ -254,7 +272,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             );
 
             // 获取首页手术信息
-             homeOperationInfoList = homeOperationInfoFacade.list(new QueryWrapper<HomeOperationInfo>()
+            homeOperationInfoList = homeOperationInfoFacade.list(new QueryWrapper<HomeOperationInfo>()
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .eq("hospital_id", hospitalId)
                     .eq("home_page_id", homePage.getHomePageId())
@@ -297,6 +315,10 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 Arrays.asList("术后首次病程及谈话记录", "手术记录",
                         "术前讨论、术前小结", "手术知情同意书", "手术安全核查表"));
 
+        // 转科
+        addDataWithKey("转科", recMap, medrecVoList,
+                Arrays.asList("转入记录", "转出记录"));
+
         // 医嘱
         if (ListUtil.isNotEmpty(doctorAdviceList)) {
             addDataWithKeyConvert("医嘱信息", doctorAdviceList, medrecVoList,
@@ -310,7 +332,25 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         }
 
         queryVo.setMedrec(medrecVoList);
+        return queryVo;
+    }
 
+    /**
+     * 评分-终末质控
+     *
+     * @param analyzeVO
+     * @return
+     */
+    public AnalyzeDTO analyze(AnalyzeVO analyzeVO) {
+        Long hospitalId = analyzeVO.getHospitalId();
+        if (!analyzeVO.getIsTask()) {
+            hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
+        }
+//        Long hospitalId = 1L; // 写死
+        analyzeVO.setHospitalId(hospitalId);
+
+        // 处理公共数据
+        QueryVo queryVo = dealCommonData(hospitalId, analyzeVO);
         //  调用质控接口
         Response<OutputInfo> response = qcServiceClient.extract(queryVo);
         if (response == null || response.getData() == null) {
@@ -330,9 +370,13 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 codeToInfoMap.put(key, mapInfo.get("info"));
             }
         }
-        qcResultAlgQueryVO.setCodeList(codeList);
-        qcResultAlgQueryVO.setHospitalId(hospitalId);
-        List<QcResultAlgVO> qcResultAlgVOList = qcCasesEntryFacade.getQcResultAlgVO(qcResultAlgQueryVO);
+        // 判断code是否为空
+        List<QcResultAlgVO> qcResultAlgVOList = new ArrayList<>();
+        if (ListUtil.isNotEmpty(codeList)) {
+            qcResultAlgQueryVO.setCodeList(codeList);
+            qcResultAlgQueryVO.setHospitalId(hospitalId);
+            qcResultAlgVOList = qcCasesEntryFacade.getQcResultAlgVO(qcResultAlgQueryVO);
+        }
 
         // 对info赋值
         for(QcResultAlgVO bean : qcResultAlgVOList) {
@@ -346,6 +390,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         AlgorithmVO algorithmVO = new AlgorithmVO();
         algorithmVO.setType(0);
         algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
+        algorithmVO.setHospitalId(hospitalId);
+        algorithmVO.setBehospitalCode(analyzeVO.getBehospitalCode());
         AlgorithmDTO algorithmDTO = algorithmFacade.getAlgorithmRes(algorithmVO);
         //保存
         Map<String, Object> pageMap = outputInfo.getPageData();
@@ -612,7 +658,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
      * 执行未评分的病历
      */
     public void execute() {
-        List<BehospitalInfo> behospitalInfoList = getNoGrade();
+        TaskVO taskVO = new TaskVO();
+        List<BehospitalInfo> behospitalInfoList = getNoGrade(taskVO);
         for (BehospitalInfo bean : behospitalInfoList) {
             AnalyzeVO analyzeVO = new AnalyzeVO();
             analyzeVO.setIsTask(true);
@@ -639,6 +686,23 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     }
 
 
+    /**
+     * 对出院日期之前3天的未评分的病历进行评分
+     */
+    public void execute2() {
+        TaskVO taskVO = new TaskVO();
+        Date date = DateUtil.addDay(DateUtil.now(), -3);
+        taskVO.setLeaveDate(date);
+        List<BehospitalInfo> behospitalInfoList = getNoGrade(taskVO);
+        for (BehospitalInfo bean : behospitalInfoList) {
+            AnalyzeVO analyzeVO = new AnalyzeVO();
+            analyzeVO.setIsTask(true);
+            analyzeVO.setHospitalId(bean.getHospitalId());
+            analyzeVO.setBehospitalCode(bean.getBehospitalCode());
+            authServiceClient.analyze_rpc(analyzeVO);
+        }
+    }
+
     /**
      * 评分api
      *
@@ -773,4 +837,88 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         return res;
     }
 
+    /**
+     * 评分-运行质控
+     *
+     * @param analyzeRunVO
+     * @return
+     */
+    public AnalyzeRunDTO analyzeRun(AnalyzeRunVO analyzeRunVO) {
+        AnalyzeVO analyzeVO = new AnalyzeVO();
+        BeanUtil.copyProperties(analyzeRunVO, analyzeVO);
+        Long hospitalId = analyzeVO.getHospitalId();
+
+        // 处理公共数据
+        QueryVo queryVo = dealCommonData(hospitalId, analyzeVO);
+        //  调用质控接口
+        Response<OutputInfo> response = qcServiceClient.extract(queryVo);
+        if (response == null || response.getData() == null) {
+            throw new CommonException(CommonErrorCode.RPC_ERROR, "远程质控接口没有返回数据!");
+        }
+        OutputInfo outputInfo = response.getData();
+        //根据质控结果获取质控条目
+        // QcResultAlgQueryVO qcResultAlgQueryVO = new QcResultAlgQueryVO();
+        List<String> codeList = new ArrayList<>();
+        // code和info的映射map
+        Map<String, String> codeToInfoMap = new LinkedHashMap<>();
+        Map<String, Map<String, String>> codeMap = outputInfo.getResult();
+        for (String key : codeMap.keySet()) {
+            codeList.add(key);
+            Map<String, String> mapInfo = codeMap.get(key);
+            if (mapInfo != null && StringUtil.isNotBlank(mapInfo.get("info"))) {
+                codeToInfoMap.put(key, mapInfo.get("info"));
+            }
+        }
+        // List<QcResultAlgVO> qcResultAlgVOList = new ArrayList<>();
+        // if (ListUtil.isNotEmpty(codeList)) {
+        //     qcResultAlgQueryVO.setCodeList(codeList);
+        //     qcResultAlgQueryVO.setHospitalId(hospitalId);
+        //     qcResultAlgVOList = qcCasesEntryFacade.getQcResultAlgVO(qcResultAlgQueryVO);
+        // }
+        //
+        // // 评分
+        // AlgorithmVO algorithmVO = new AlgorithmVO();
+        // algorithmVO.setType(0);
+        // algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
+        // AlgorithmDTO algorithmDTO = algorithmFacade.getAlgorithmRes(algorithmVO);
+
+        //保存
+        // Map<String, Object> pageMap = outputInfo.getPageData();
+        // String pageData = JSON.toJSONString(pageMap);
+        // 获取菜单信息
+        // List<QcModeDTO> qcModeDTOList = qcModeFacade.getMenu(pageMap);
+        // String menuData = JSON.toJSONString(qcModeDTOList);
+
+        // 运行质控不保存评分结果信息
+        // Date date = qcresultInfoFacade.saveQcResult(algorithmDTO, algorithmVO, analyzeVO, pageData, menuData, analyzeVO.getIsTask());
+
+        // 返回缺陷提示信息
+        List<MsgDTO> msgDTOList = new ArrayList<>();
+        if (ListUtil.isNotEmpty(codeList)) {
+            AnalyzeCodeVO analyzeCodeVO = new AnalyzeCodeVO();
+            analyzeCodeVO.setCodeList(codeList);
+            analyzeCodeVO.setHospitalId(hospitalId);
+            analyzeCodeVO.setModeId(analyzeRunVO.getModeId());
+
+            // 获取缺陷条目信息
+            msgDTOList = getMsgByEntryCode(analyzeCodeVO);
+            // 设置info信息
+            if (codeToInfoMap != null && !codeToInfoMap.isEmpty()) {
+                for (MsgDTO msgDTO : msgDTOList) {
+                    String info = codeToInfoMap.get(msgDTO.getCode());
+                    if (StringUtil.isNotBlank(info)) {
+                        msgDTO.setInfo(info);
+                    }
+                }
+            }
+        }
+
+        //返回参数组装
+        AnalyzeRunDTO analyzeRunDTO = new AnalyzeRunDTO();
+        // analyzeRunDTO.setScoreRes(algorithmDTO.getScore());
+        // analyzeRunDTO.setLevel(algorithmDTO.getLevel());
+        analyzeRunDTO.setMsgDTOList(msgDTOList);
+        return analyzeRunDTO;
+    }
+
 }

+ 398 - 114
src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java

@@ -1,15 +1,21 @@
 package com.diagbot.facade;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.DeptBaseDTO;
 import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
-import com.diagbot.vo.FilterByDeptVO;
-import com.diagbot.vo.HPFilterByDeptVO;
-import com.diagbot.vo.QcresultFilterByDeptVO;
+import com.diagbot.vo.FilterOrderByDeptVO;
+import com.diagbot.vo.FilterPageByDeptVO;
+import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.HomePageFilterVO;
+import com.diagbot.vo.QcresultFilterVO;
 import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -17,9 +23,16 @@ import org.springframework.stereotype.Component;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
-import java.util.*;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
+
 /**
  * @Description:主任医生相关首页
  * @Author:zhaops
@@ -41,39 +54,39 @@ public class ConsoleByDeptFacade {
     /**
      * 出院人数统计-按科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
      * @return
      */
-    public Map<String, Object> leaveHosCountByDept(FilterByDeptVO filterByDeptVO) {
+    public Map<String, Object> leaveHosCountByDept(FilterVO filterVO) {
         Map<String, Object> retMap = new LinkedHashMap<>();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String userId = SysUserUtils.getCurrentPrincipleID();
-        String startDate = filterFacade.getStartDateStr(filterByDeptVO.getType(), null);
-        String endDate = filterFacade.getEndDateStr(filterByDeptVO.getType(), null);
-        filterByDeptVO.setHospitalId(hospitalId);
-        filterByDeptVO.setUserId(Long.valueOf(userId));
-        filterByDeptVO.setStartDate(startDate);
-        filterByDeptVO.setEndDate(endDate);
-        HPFilterByDeptVO hpFilterByDeptVO = new HPFilterByDeptVO();
-        BeanUtil.copyProperties(filterByDeptVO, hpFilterByDeptVO);
+        String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterVO.getType(), null);
+        filterVO.setHospitalId(hospitalId);
+        filterVO.setUserId(Long.valueOf(userId));
+        filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
+        HomePageFilterVO homePageFilterVO = new HomePageFilterVO();
+        BeanUtil.copyProperties(filterVO, homePageFilterVO);
         //关联科室
-        Map<String, Object> deptMap = getDeptByUser(filterByDeptVO);
+        Map<String, Object> deptMap = getDeptByUser(filterVO);
         if (deptMap == null) {
             return retMap;
         }
         //出院总人数
-        List<NumDTO> totleNumList = behospitalInfoFacade.homePageCountByDept(hpFilterByDeptVO);
+        List<NumDTO> totleNumList = behospitalInfoFacade.homePageCountByDept(homePageFilterVO);
         Map<String, NumDTO> totleMap = ListUtil.isEmpty(totleNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityMap(totleNumList, "name");
         //死亡人数
-        hpFilterByDeptVO.setDeath(1);
-        List<NumDTO> deathNumList = behospitalInfoFacade.homePageCountByDept(hpFilterByDeptVO);
+        homePageFilterVO.setDeath(1);
+        List<NumDTO> deathNumList = behospitalInfoFacade.homePageCountByDept(homePageFilterVO);
         Map<String, NumDTO> deathMap = ListUtil.isEmpty(deathNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityMap(deathNumList, "name");
         //手术人数
-        List<NumDTO> operationNumList = behospitalInfoFacade.homePageCountForOperationByDept(filterByDeptVO);
+        List<NumDTO> operationNumList = behospitalInfoFacade.homePageCountForOperationByDept(filterVO);
         Map<String, NumDTO> operationMap = ListUtil.isEmpty(operationNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityMap(operationNumList, "name");
@@ -100,47 +113,47 @@ public class ConsoleByDeptFacade {
     /**
      * 病历数统计-按科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
      * @return
      */
-    public Map<String, Object> mrCountByDept(FilterByDeptVO filterByDeptVO) {
+    public Map<String, Object> mrCountByDept(FilterVO filterVO) {
         DecimalFormat df = new DecimalFormat("#0.00");
         Map<String, Object> retMap = new LinkedHashMap<>();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String userId = SysUserUtils.getCurrentPrincipleID();
-        String startDate = filterFacade.getStartDateStr(filterByDeptVO.getType(), null);
-        String endDate = filterFacade.getEndDateStr(filterByDeptVO.getType(), null);
-        filterByDeptVO.setHospitalId(hospitalId);
-        filterByDeptVO.setUserId(Long.valueOf(userId));
-        filterByDeptVO.setStartDate(startDate);
-        filterByDeptVO.setEndDate(endDate);
-        QcresultFilterByDeptVO qcresultFilterByDeptVO = new QcresultFilterByDeptVO();
-        BeanUtil.copyProperties(filterByDeptVO, qcresultFilterByDeptVO);
+        String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterVO.getType(), null);
+        filterVO.setHospitalId(hospitalId);
+        filterVO.setUserId(Long.valueOf(userId));
+        filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
+        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
+        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
         //关联科室
-        Map<String, Object> deptMap = getDeptByUser(filterByDeptVO);
+        Map<String, Object> deptMap = getDeptByUser(filterVO);
         if (deptMap == null) {
             return retMap;
         }
         //质控病历总数
-        List<NumDTO> totleNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterByDeptVO);
+        List<NumDTO> totleNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterVO);
         Map<String, NumDTO> totleMap = ListUtil.isEmpty(totleNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityMap(totleNumList, "name");
         //甲级病历
-        qcresultFilterByDeptVO.setLevel("甲");
-        List<NumDTO> firstNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterByDeptVO);
+        qcresultFilterVO.setLevel("甲");
+        List<NumDTO> firstNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterVO);
         Map<String, NumDTO> firstMap = ListUtil.isEmpty(firstNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityMap(firstNumList, "name");
         //乙级病历
-        qcresultFilterByDeptVO.setLevel("乙");
-        List<NumDTO> secondNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterByDeptVO);
+        qcresultFilterVO.setLevel("乙");
+        List<NumDTO> secondNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterVO);
         Map<String, NumDTO> secondMap = ListUtil.isEmpty(secondNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityMap(secondNumList, "name");
         //丙级病历
-        qcresultFilterByDeptVO.setLevel("丙");
-        List<NumDTO> thirdNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterByDeptVO);
+        qcresultFilterVO.setLevel("丙");
+        List<NumDTO> thirdNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterVO);
         Map<String, NumDTO> thirdMap = ListUtil.isEmpty(thirdNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityMap(thirdNumList, "name");
@@ -195,9 +208,8 @@ public class ConsoleByDeptFacade {
             thirdLevelNumDTO.setName("丙级病历");
             thirdLevelNumDTO.setNum(thirdLevelNum);
             thirdLevelNumDTO.setTotleNum(totleNum);
-            Double thirdPercent = BigDecimal.valueOf(1)
-                    .subtract(BigDecimal.valueOf(firstPercent))
-                    .subtract(BigDecimal.valueOf(secondPercent))
+            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);
@@ -214,40 +226,43 @@ public class ConsoleByDeptFacade {
     /**
      * 各模块缺陷占比排名-按科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
      * @return
      */
-    public Map<String, Object> entryCountGroupByCaseAndDept(FilterByDeptVO filterByDeptVO) {
+    public Map<String, Object> entryCountGroupByCaseAndDept(FilterVO filterVO) {
         DecimalFormat df = new DecimalFormat("#0.00");
         Map<String, Object> retMap = new LinkedHashMap<>();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String userId = SysUserUtils.getCurrentPrincipleID();
-        String startDate = filterFacade.getStartDateStr(filterByDeptVO.getType(), null);
-        String endDate = filterFacade.getEndDateStr(filterByDeptVO.getType(), null);
-        filterByDeptVO.setHospitalId(hospitalId);
-        filterByDeptVO.setUserId(Long.valueOf(userId));
-        filterByDeptVO.setStartDate(startDate);
-        filterByDeptVO.setEndDate(endDate);
-        if (filterByDeptVO.getLimitCount() == null || filterByDeptVO.getLimitCount().equals(0)) {
-            filterByDeptVO.setLimitCount(10);
+        String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterVO.getType(), null);
+        filterVO.setHospitalId(hospitalId);
+        filterVO.setUserId(Long.valueOf(userId));
+        filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
+        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
+            filterVO.setLimitCount(10);
         }
-        Integer limitCount = filterByDeptVO.getLimitCount();
-        QcresultFilterByDeptVO qcresultFilterByDeptVO = new QcresultFilterByDeptVO();
-        BeanUtil.copyProperties(filterByDeptVO, qcresultFilterByDeptVO);
+        Integer limitCount = filterVO.getLimitCount();
+        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
+        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
         //关联科室
-        Map<String, Object> deptMap = getDeptByUser(filterByDeptVO);
+        Map<String, Object> deptMap = getDeptByUser(filterVO);
         if (deptMap == null) {
             return retMap;
         }
-        List<NumDTO> mrNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterByDeptVO);
+        List<NumDTO> mrNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterVO);
         Map<String, NumDTO> mrMap = ListUtil.isEmpty(mrNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityMap(mrNumList, "name");
-        List<DeptNumDTO> qcEntryNumList = qcresultInfoFacade.entryCountGroupByCaseAndDept(filterByDeptVO);
+        List<DeptNumDTO> qcEntryNumList = qcresultInfoFacade.entryCountGroupByCaseAndDept(filterVO);
         Map<String, List<DeptNumDTO>> qcEntryMap = ListUtil.isEmpty(qcEntryNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityListMap(qcEntryNumList, "deptName");
         List<NumDTO> standardEntryNumList = qcCasesFacade.entryGroupByCase();
+        Map<String, NumDTO> standardMap = ListUtil.isEmpty(standardEntryNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(standardEntryNumList, "name");
         for (String deptName : deptMap.keySet()) {
             //没有质控病历
             if (!mrMap.containsKey(deptName)) {
@@ -256,6 +271,11 @@ public class ConsoleByDeptFacade {
             }
             //病历数
             Integer mrNum = mrMap.get(deptName).getNum();
+            //缺陷模块条目未维护
+            if (ListUtil.isEmpty(standardEntryNumList)) {
+                retMap.put(deptName, Lists.newLinkedList());
+                continue;
+            }
             //没有缺陷
             if (!qcEntryMap.containsKey(deptName)) {
                 retMap.put(deptName, Lists.newLinkedList());
@@ -263,48 +283,38 @@ public class ConsoleByDeptFacade {
             }
             //模块缺陷
             List<DeptNumDTO> qcEntryNumByDeptList = qcEntryMap.get(deptName);
-            List<NumDTO> retList = Lists.newLinkedList();
-            retList = BeanUtil.listCopyTo(standardEntryNumList, NumDTO.class);
             if (ListUtil.isEmpty(qcEntryNumByDeptList)) {
-                for (NumDTO entryNum : retList) {
-                    Integer totleNum = entryNum.getNum() * mrNum;
-                    entryNum.setNum(0);
-                    entryNum.setPercent(0d);
-                    entryNum.setPercentStr("0%");
-                    entryNum.setTotleNum(totleNum);
+                retMap.put(deptName, Lists.newLinkedList());
+                continue;
+            }
+            List<NumDTO> retList = Lists.newLinkedList();
+            retList = BeanUtil.listCopyTo(qcEntryNumByDeptList, NumDTO.class);
+            retList.forEach(item -> {
+                if (!standardMap.containsKey(item.getName())) {
+                    item.setTotleNum(0);
+                    item.setPercent(0d);
+                    item.setPercentStr("0%");
+                } else {
+                    Integer totleNum = standardMap.get(item.getName()).getNum() * mrNum;
+                    Double percent = BigDecimal.valueOf(item.getNum())
+                            .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                            .doubleValue();
+                    String percentStr
+                            = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                    item.setTotleNum(totleNum);
+                    item.setPercent(percent);
+                    item.setPercentStr(percentStr);
                 }
-            } else {
-                Map<Long, Integer> qcEntryNumMap
-                        = EntityUtil.makeMapWithKeyValue(qcEntryNumByDeptList, "id", "num");
-                if (ListUtil.isNotEmpty(standardEntryNumList)) {
-                    for (NumDTO entryNum : retList) {
-                        Integer totleNum = entryNum.getNum() * mrNum;
-                        if (qcEntryNumMap.containsKey(entryNum.getId())) {
-                            entryNum.setNum(qcEntryNumMap.get(entryNum.getId()));
-                            Double percent = BigDecimal.valueOf(entryNum.getNum())
-                                    .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
-                                    .doubleValue();
-                            String percentStr
-                                    = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
-                            entryNum.setTotleNum(totleNum);
-                            entryNum.setPercent(percent);
-                            entryNum.setPercentStr(percentStr);
-                        } else {
-                            entryNum.setNum(0);
-                            entryNum.setPercent(0d);
-                            entryNum.setPercentStr("0%");
-                            entryNum.setTotleNum(totleNum);
-                        }
-                    }
+            });
+
+            //降序排序
+            Collections.sort(retList, new Comparator<NumDTO>() {
+                @Override
+                public int compare(NumDTO o1, NumDTO o2) {
+                    return o2.getPercent().compareTo(o1.getPercent());
                 }
-                //降序排序
-                Collections.sort(retList, new Comparator<NumDTO>() {
-                    @Override
-                    public int compare(NumDTO o1, NumDTO o2) {
-                        return o2.getPercent().compareTo(o1.getPercent());
-                    }
-                });
-            }
+            });
+
 
             //取top10
             retList = retList
@@ -321,30 +331,30 @@ public class ConsoleByDeptFacade {
     /**
      * 条目缺陷占比-按科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
      * @return
      */
-    public Map<String, Object> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO) {
+    public Map<String, Object> entryCountGroupByEntryAndDept(FilterVO filterVO) {
         DecimalFormat df = new DecimalFormat("#0.00");
         Map<String, Object> retMap = new LinkedHashMap<>();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String userId = SysUserUtils.getCurrentPrincipleID();
-        String startDate = filterFacade.getStartDateStr(filterByDeptVO.getType(), null);
-        String endDate = filterFacade.getEndDateStr(filterByDeptVO.getType(), null);
-        filterByDeptVO.setHospitalId(hospitalId);
-        filterByDeptVO.setUserId(Long.valueOf(userId));
-        filterByDeptVO.setStartDate(startDate);
-        filterByDeptVO.setEndDate(endDate);
-        if (filterByDeptVO.getLimitCount() == null || filterByDeptVO.getLimitCount().equals(0)) {
-            filterByDeptVO.setLimitCount(10);
+        String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterVO.getType(), null);
+        filterVO.setHospitalId(hospitalId);
+        filterVO.setUserId(Long.valueOf(userId));
+        filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
+        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
+            filterVO.setLimitCount(10);
         }
-        Integer limitCount = filterByDeptVO.getLimitCount();
+        Integer limitCount = filterVO.getLimitCount();
         //关联科室
-        Map<String, Object> deptMap = getDeptByUser(filterByDeptVO);
+        Map<String, Object> deptMap = getDeptByUser(filterVO);
         if (deptMap == null) {
             return retMap;
         }
-        List<DeptNumDTO> entryList = qcresultInfoFacade.entryCountGroupByEntryAndDept(filterByDeptVO);
+        List<DeptNumDTO> entryList = qcresultInfoFacade.entryCountGroupByEntryAndDept(filterVO);
         Map<String, List<DeptNumDTO>> numListMap = ListUtil.isEmpty(entryList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityListMap(entryList, "deptName");
@@ -399,8 +409,8 @@ public class ConsoleByDeptFacade {
                             otherNumDTO.setName("其他");
                             otherNumDTO.setNum(num);
                             otherNumDTO.setTotleNum(totle);
-                            Double percent = BigDecimal.valueOf(1)
-                                    .subtract(BigDecimal.valueOf(sumPercent))
+                            Double percent = BigDecimal.valueOf(num)
+                                    .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
                                     .doubleValue();
                             otherNumDTO.setPercent(percent);
                             String percentStr
@@ -420,15 +430,289 @@ public class ConsoleByDeptFacade {
     /**
      * 用户关联科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
      * @return
      */
-    public Map<String, Object> getDeptByUser(FilterByDeptVO filterByDeptVO) {
-        List<DeptBaseDTO> deptList = basDeptInfoFacade.getDeptByUser(filterByDeptVO);
+    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;
         }
     }
-}
+
+    /**
+     * 获取关联科室
+     *
+     * @param
+     * @return
+     */
+    public List<DeptBaseDTO> getDept() {
+        FilterVO filterVO = new FilterVO();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        filterVO.setHospitalId(hospitalId);
+        filterVO.setUserId(Long.valueOf(userId));
+        List<DeptBaseDTO> deptList = basDeptInfoFacade.getDeptByUser(filterVO);
+        return deptList;
+    }
+
+
+    /**
+     * 过滤条件设置
+     *
+     * @param filterPageByDeptVO
+     */
+    private void filterPageByDeptVOSet(FilterPageByDeptVO filterPageByDeptVO) {
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String startDate = "";
+        String endDate = "";
+        Date date = new Date();
+
+        //统计维度 1-本月,2-本年
+        //时间类型 1-本月/本年,2-上月/去年,3-去年本月/去年
+        if (filterPageByDeptVO.getType().equals(1)) {
+            if (filterPageByDeptVO.getDateType() == null) {
+                startDate = filterFacade.getStartDateStr(filterPageByDeptVO.getType(), null);
+                endDate = filterFacade.getEndDateStr(filterPageByDeptVO.getType(), null);
+            } else if (filterPageByDeptVO.getDateType().equals(2)) {
+                startDate = filterFacade.getLastStartDateStr(filterPageByDeptVO.getType());
+                endDate = filterFacade.getLastEndDateStr(filterPageByDeptVO.getType());
+            } else if (filterPageByDeptVO.getDateType().equals(3)) {
+                String year = DateUtil.getYear(date);
+                startDate = filterFacade.getStartDateStr(filterPageByDeptVO.getType(), Integer.valueOf(year) - 1);
+                endDate = filterFacade.getEndDateStr(filterPageByDeptVO.getType(), Integer.valueOf(year) - 1);
+            } else {
+                startDate = filterFacade.getStartDateStr(filterPageByDeptVO.getType(), null);
+                endDate = filterFacade.getEndDateStr(filterPageByDeptVO.getType(), null);
+            }
+        } else if (filterPageByDeptVO.getType().equals(2)) {
+            if (filterPageByDeptVO.getDateType() == null) {
+                startDate = filterFacade.getStartDateStr(filterPageByDeptVO.getType(), null);
+                endDate = filterFacade.getEndDateStr(filterPageByDeptVO.getType(), null);
+            } else if (filterPageByDeptVO.getDateType().equals(2) || filterPageByDeptVO.getDateType().equals(3)) {
+                startDate = filterFacade.getLastStartDateStr(filterPageByDeptVO.getType());
+                endDate = filterFacade.getLastEndDateStr(filterPageByDeptVO.getType());
+            } else {
+                startDate = filterFacade.getStartDateStr(filterPageByDeptVO.getType(), null);
+                endDate = filterFacade.getEndDateStr(filterPageByDeptVO.getType(), null);
+            }
+        }
+
+        filterPageByDeptVO.setStartDate(startDate);
+        filterPageByDeptVO.setEndDate(endDate);
+        filterPageByDeptVO.setHospitalId(hospitalId);
+        filterPageByDeptVO.setUserId(Long.valueOf(userId));
+    }
+
+    /**
+     * 各模块缺陷占比-科室(分页)
+     *
+     * @param filterPageByDeptVO
+     * @return
+     */
+    public IPage<DeptNumDTO> entryCountGroupByCaseAndDeptPage(FilterPageByDeptVO filterPageByDeptVO) {
+        if (StringUtil.isBlank(filterPageByDeptVO.getDeptName())) {
+            List<DeptBaseDTO> deptList = this.getDept();
+            //默认取第一个科室
+            if (ListUtil.isNotEmpty(deptList)) {
+                filterPageByDeptVO.setDeptName(deptList.get(0).getDeptName());
+            }
+        }
+        filterPageByDeptVOSet(filterPageByDeptVO);
+        IPage<DeptNumDTO> page = qcresultInfoFacade.entryCountGroupByCaseAndDeptPage(filterPageByDeptVO);
+        return page;
+    }
+
+    /**
+     * 条目缺陷占比-科室(分页)
+     *
+     * @param filterPageByDeptVO
+     * @return
+     */
+    public IPage<DeptNumDTO> entryCountGroupByEntryAndDeptPage(FilterPageByDeptVO filterPageByDeptVO) {
+        if (StringUtil.isBlank(filterPageByDeptVO.getDeptName())) {
+            List<DeptBaseDTO> deptList = this.getDept();
+            //默认取第一个科室
+            if (ListUtil.isNotEmpty(deptList)) {
+                filterPageByDeptVO.setDeptName(deptList.get(0).getDeptName());
+            }
+        }
+        DecimalFormat df = new DecimalFormat("#0.00");
+        filterPageByDeptVOSet(filterPageByDeptVO);
+        IPage<DeptNumDTO> page = qcresultInfoFacade.entryCountGroupByEntryAndDeptPage(filterPageByDeptVO);
+        List<DeptNumDTO> records = page.getRecords();
+        if (ListUtil.isNotEmpty(records)) {
+            records.forEach(item -> {
+                Double percent = BigDecimal.valueOf(item.getNum())
+                        .divide(BigDecimal.valueOf(item.getTotleNum()), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                item.setPercent(percent);
+                String percentStr
+                        = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                item.setPercentStr(percentStr);
+            });
+        }
+        page.setRecords(records);
+        return page;
+    }
+
+    /**
+     * 缺陷明细-科室(分页)
+     *
+     * @param filterPageByDeptVO
+     * @return
+     */
+    public IPage<DeptNumDTO> resultStatisticsByDeptAndDoctorPage(FilterPageByDeptVO filterPageByDeptVO) {
+        if (StringUtil.isBlank(filterPageByDeptVO.getDeptName())) {
+            List<DeptBaseDTO> deptList = this.getDept();
+            //默认取第一个科室
+            if (ListUtil.isNotEmpty(deptList)) {
+                filterPageByDeptVO.setDeptName(deptList.get(0).getDeptName());
+            }
+        }
+        filterPageByDeptVOSet(filterPageByDeptVO);
+        IPage<DeptNumDTO> page = behospitalInfoFacade.resultStatisticsByDeptAndDoctorPage(filterPageByDeptVO);
+        return page;
+    }
+
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO) {
+        List<DeptBaseDTO> deptList = getDept();
+        if (ListUtil.isEmpty(deptList)) {
+            return null;
+        }
+        if (StringUtil.isBlank(filterOrderByDeptVO.getDeptName())) {
+            filterOrderByDeptVO.setDeptName(deptList.get(0).getDeptName());
+        }
+        String hosptialId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String startDate = filterFacade.getStartDateStr(filterOrderByDeptVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterOrderByDeptVO.getType(), null);
+        filterOrderByDeptVO.setStartDate(startDate);
+        filterOrderByDeptVO.setEndDate(endDate);
+        filterOrderByDeptVO.setHospitalId(hosptialId);
+        filterOrderByDeptVO.setUserId(Long.valueOf(userId));
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.levelStatisticsByDept(filterOrderByDeptVO);
+        return records;
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO) {
+        List<DeptBaseDTO> deptList = getDept();
+        if (ListUtil.isEmpty(deptList)) {
+            return null;
+        }
+        if (StringUtil.isBlank(filterOrderByDeptVO.getDeptName())) {
+            filterOrderByDeptVO.setDeptName(deptList.get(0).getDeptName());
+        }
+        String hosptialId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String startDate = filterFacade.getStartDateStr(filterOrderByDeptVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterOrderByDeptVO.getType(), null);
+        filterOrderByDeptVO.setStartDate(startDate);
+        filterOrderByDeptVO.setEndDate(endDate);
+        filterOrderByDeptVO.setHospitalId(hosptialId);
+        filterOrderByDeptVO.setUserId(Long.valueOf(userId));
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.homePageLevelStatisticsByDept(filterOrderByDeptVO);
+        return records;
+    }
+
+    /**
+     * 病案首页合格率占比(首页)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelByDeptLimit(FilterOrderByDeptVO filterOrderByDeptVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        List<DeptBaseDTO> deptList = getDept();
+        if (ListUtil.isEmpty(deptList)) {
+            return null;
+        }
+        if (StringUtil.isBlank(filterOrderByDeptVO.getDeptName())) {
+            filterOrderByDeptVO.setDeptName(deptList.get(0).getDeptName());
+        }
+        String hosptialId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String startDate = filterFacade.getStartDateStr(filterOrderByDeptVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterOrderByDeptVO.getType(), null);
+        filterOrderByDeptVO.setStartDate(startDate);
+        filterOrderByDeptVO.setEndDate(endDate);
+        filterOrderByDeptVO.setHospitalId(hosptialId);
+        filterOrderByDeptVO.setUserId(Long.valueOf(userId));
+        if (filterOrderByDeptVO.getLimitCount() == null || filterOrderByDeptVO.getLimitCount().equals(0)) {
+            filterOrderByDeptVO.setLimitCount(10);
+        }
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.homePageLevelStatisticsByDept(filterOrderByDeptVO);
+        //增加全科室
+        LevelStatisticsDTO item = new LevelStatisticsDTO();
+        Integer mrNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getMrNum)
+                .reduce(0, Integer::sum);
+        if (mrNum == null || mrNum == 0) {
+            return Lists.newLinkedList();
+        }
+        Integer entryNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getEntryNum)
+                .reduce(0, Integer::sum);
+        Double totleFee = records
+                .stream()
+                .map(i -> BigDecimal.valueOf(i.getTotleValue()))
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .doubleValue();
+        Double averageFee = BigDecimal.valueOf(totleFee)
+                .divide(BigDecimal.valueOf(mrNum), 2, RoundingMode.HALF_UP)
+                .doubleValue();
+        Integer firstLevelNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getFirstLevelNum)
+                .reduce(0, Integer::sum);
+        Double firstLevelPercent = BigDecimal.valueOf(firstLevelNum)
+                .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String firstLevelPercentStr
+                = df.format(BigDecimal.valueOf(firstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        Integer secondLevelNum = mrNum - firstLevelNum;
+        Double secondLevelPercent = BigDecimal.valueOf(secondLevelNum)
+                .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String secondLevelPercentStr
+                = df.format(BigDecimal.valueOf(secondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        item.setDoctorName(filterOrderByDeptVO.getDeptName());
+        item.setEntryNum(entryNum);
+        item.setMrNum(mrNum);
+        item.setTotleValue(totleFee);
+        item.setAverageValue(averageFee);
+        item.setFirstLevelNum(firstLevelNum);
+        item.setFirstLevelPercent(firstLevelPercent);
+        item.setFirstLevelPercentStr(firstLevelPercentStr);
+        item.setSecondLevelNum(secondLevelNum);
+        item.setSecondLevelPercent(secondLevelPercent);
+        item.setSecondLevelPercentStr(secondLevelPercentStr);
+
+        records.add(0, item);
+
+        records = records
+                .stream()
+                .limit(filterOrderByDeptVO.getLimitCount())
+                .collect(Collectors.toList());
+
+        return records;
+    }
+}

+ 308 - 5
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1,24 +1,36 @@
 package com.diagbot.facade;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.aggregate.AverageStatisticsAggregate;
 import com.diagbot.aggregate.MrStatisticsAggregate;
 import com.diagbot.aggregate.ResultStatisticsAggregate;
 import com.diagbot.dto.AverageStatisticsDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.util.DateUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.FilterOrderVO;
+import com.diagbot.vo.FilterPageByAverageVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
+import com.google.common.collect.Lists;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Description:
@@ -38,8 +50,14 @@ public class ConsoleFacade {
     private MrStatisticsAggregate mrStatisticsAggregate;
     @Autowired
     private ResultStatisticsAggregate resultStatisticsAggregate;
+    @Autowired
+    private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private HomePageFacade homePageFacade;
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
 
-    //-----------------------聚合接口开始-------------------------------
+    //region-----------------------聚合接口开始-------------------------------
 
     /**
      * 病历相关统计
@@ -125,9 +143,10 @@ public class ConsoleFacade {
         return retMap;
     }
 
-    //-----------------------聚合接口结束-------------------------------
+    //endregion-----------------------聚合接口结束-------------------------------
+
+    //region-----------------------单独接口开始-------------------------------
 
-    //-----------------------单独接口开始-------------------------------
     /**
      * 平均住院天数
      *
@@ -272,7 +291,7 @@ public class ConsoleFacade {
         return retMap;
     }
 
-    private void filterVOSet(FilterVO filterVO){
+    private void filterVOSet(FilterVO filterVO) {
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
         String endDate = filterFacade.getEndDateStr(filterVO.getType(), null);
@@ -283,5 +302,289 @@ public class ConsoleFacade {
             filterVO.setLimitCount(10);
         }
     }
-    //-----------------------单独接口结束-------------------------------
+    //endregion-----------------------单独接口结束-------------------------------
+
+    //region_______________________分页接口开始-------------------------------
+
+    /**
+     * 过滤条件设置
+     *
+     * @param filterPageVO
+     */
+    private void filterPageVOSet(FilterPageVO filterPageVO) {
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String startDate = "";
+        String endDate = "";
+        Date date = new Date();
+
+        //统计维度 1-本月,2-本年
+        //时间类型 1-本月/本年,2-上月/去年,3-去年本月/去年
+        if (filterPageVO.getType().equals(1)) {
+            if (filterPageVO.getDateType() == null) {
+                startDate = filterFacade.getStartDateStr(filterPageVO.getType(), null);
+                endDate = filterFacade.getEndDateStr(filterPageVO.getType(), null);
+            } else if (filterPageVO.getDateType().equals(2)) {
+                startDate = filterFacade.getLastStartDateStr(filterPageVO.getType());
+                endDate = filterFacade.getLastEndDateStr(filterPageVO.getType());
+            } else if (filterPageVO.getDateType().equals(3)) {
+                String year = DateUtil.getYear(date);
+                startDate = filterFacade.getStartDateStr(filterPageVO.getType(), Integer.valueOf(year) - 1);
+                endDate = filterFacade.getEndDateStr(filterPageVO.getType(), Integer.valueOf(year) - 1);
+            } else {
+                startDate = filterFacade.getStartDateStr(filterPageVO.getType(), null);
+                endDate = filterFacade.getEndDateStr(filterPageVO.getType(), null);
+            }
+        } else if (filterPageVO.getType().equals(2)) {
+            if (filterPageVO.getDateType() == null) {
+                startDate = filterFacade.getStartDateStr(filterPageVO.getType(), null);
+                endDate = filterFacade.getEndDateStr(filterPageVO.getType(), null);
+            } else if (filterPageVO.getDateType().equals(2) || filterPageVO.getDateType().equals(3)) {
+                startDate = filterFacade.getLastStartDateStr(filterPageVO.getType());
+                endDate = filterFacade.getLastEndDateStr(filterPageVO.getType());
+            } else {
+                startDate = filterFacade.getStartDateStr(filterPageVO.getType(), null);
+                endDate = filterFacade.getEndDateStr(filterPageVO.getType(), null);
+            }
+        }
+
+        filterPageVO.setStartDate(startDate);
+        filterPageVO.setEndDate(endDate);
+        filterPageVO.setHospitalId(hospitalId);
+    }
+
+    /**
+     * 平均住院天数、平均花费入参设置
+     *
+     * @param filterPageByAverageVO
+     */
+    private void filterPageByAverageVOSet(FilterPageByAverageVO filterPageByAverageVO) {
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        Date date = new Date();
+        String year = DateUtil.getYear(date);
+        String startDate = filterFacade.getStartDateStr(filterPageByAverageVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterPageByAverageVO.getType(), null);
+        String lastStartDate = filterFacade.getLastStartDateStr(filterPageByAverageVO.getType());
+        String lastEndDate = filterFacade.getLastEndDateStr(filterPageByAverageVO.getType());
+        String lastYearStartDate = filterFacade.getStartDateStr(filterPageByAverageVO.getType(), Integer.valueOf(year) - 1);
+        String lastYearEndDate = filterFacade.getEndDateStr(filterPageByAverageVO.getType(), Integer.valueOf(year) - 1);
+        filterPageByAverageVO.setHospitalId(hospitalId);
+        filterPageByAverageVO.setUserId(Long.valueOf(userId));
+        filterPageByAverageVO.setStartDate(startDate);
+        filterPageByAverageVO.setEndDate(endDate);
+        filterPageByAverageVO.setLastStartDate(lastStartDate);
+        filterPageByAverageVO.setLastEndDate(lastEndDate);
+        filterPageByAverageVO.setLastYearStartDate(lastYearStartDate);
+        filterPageByAverageVO.setLastYearEndDate(lastYearEndDate);
+    }
+
+    /**
+     * 各模块缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByCasePage(FilterPageVO filterPageVO) {
+        filterPageVOSet(filterPageVO);
+        IPage<NumDTO> page = qcresultInfoFacade.entryCountGroupByCasePage(filterPageVO);
+        return page;
+    }
+
+    /**
+     * 条目缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByEntryPage(FilterPageVO filterPageVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        filterPageVOSet(filterPageVO);
+        IPage<NumDTO> page = qcresultInfoFacade.entryCountGroupByEntryPage(filterPageVO);
+        List<NumDTO> records = page.getRecords();
+        if (ListUtil.isNotEmpty(records)) {
+            records.forEach(item -> {
+                Double percent = BigDecimal.valueOf(item.getNum())
+                        .divide(BigDecimal.valueOf(item.getTotleNum()), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                item.setPercent(percent);
+                String percentStr
+                        = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                item.setPercentStr(percentStr);
+            });
+        }
+        page.setRecords(records);
+        return page;
+    }
+
+    /**
+     * 按科室统计平均住院天数(分页)
+     *
+     * @param filterPageByAverageVO
+     * @return
+     */
+    public IPage<AverageStatisticsDTO> getAverageDayNumPage(FilterPageByAverageVO filterPageByAverageVO) {
+        filterPageByAverageVOSet(filterPageByAverageVO);
+        IPage<AverageStatisticsDTO> page = homePageFacade.getAverageDayNumPage(filterPageByAverageVO);
+        return page;
+    }
+
+    /**
+     * 按科室统计平均住院费用(分页)
+     *
+     * @param filterPageByAverageVO
+     * @return
+     */
+    public IPage<AverageStatisticsDTO> getAverageFeePage(FilterPageByAverageVO filterPageByAverageVO) {
+        filterPageByAverageVOSet(filterPageByAverageVO);
+        IPage<AverageStatisticsDTO> page = homePageFacade.getAverageFeePage(filterPageByAverageVO);
+        return page;
+    }
+
+    /**
+     * 各科室质控平均分(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<AverageStatisticsDTO> getAverageScoreByDeptPage(FilterPageVO filterPageVO) {
+        filterPageVOSet(filterPageVO);
+        IPage<AverageStatisticsDTO> page = qcresultInfoFacade.getAverageScoreByDeptPage(filterPageVO);
+        return page;
+    }
+
+    /**
+     * 各科室缺陷占比排行(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> resultStatisticsByDeptPage(FilterPageVO filterPageVO) {
+        filterPageVOSet(filterPageVO);
+        IPage<NumDTO> page = behospitalInfoFacade.resultStatisticsByDeptPage(filterPageVO);
+        return page;
+    }
+
+    /**
+     * 各科室甲级病历占比排行(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<QcResultPercentDTO> levelPercentGroupByDeptPage(FilterPageVO filterPageVO) {
+        filterPageVOSet(filterPageVO);
+        IPage<QcResultPercentDTO> page = qcresultInfoFacade.levelPercentGroupByDeptPage(filterPageVO);
+        return page;
+    }
+    //endregion-----------------------分页接口结束-------------------------------
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatistics(FilterOrderVO filterOrderVO) {
+        String hosptialId = SysUserUtils.getCurrentHospitalID();
+        String startDate = filterFacade.getStartDateStr(filterOrderVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterOrderVO.getType(), null);
+        filterOrderVO.setStartDate(startDate);
+        filterOrderVO.setEndDate(endDate);
+        filterOrderVO.setHospitalId(hosptialId);
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.levelStatistics(filterOrderVO);
+        return records;
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO) {
+        String hosptialId = SysUserUtils.getCurrentHospitalID();
+        String startDate = filterFacade.getStartDateStr(filterOrderVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterOrderVO.getType(), null);
+        filterOrderVO.setStartDate(startDate);
+        filterOrderVO.setEndDate(endDate);
+        filterOrderVO.setHospitalId(hosptialId);
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.homePageLevelStatistics(filterOrderVO);
+        return records;
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelLimit(FilterOrderVO filterOrderVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        String hosptialId = SysUserUtils.getCurrentHospitalID();
+        String startDate = filterFacade.getStartDateStr(filterOrderVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterOrderVO.getType(), null);
+        filterOrderVO.setStartDate(startDate);
+        filterOrderVO.setEndDate(endDate);
+        filterOrderVO.setHospitalId(hosptialId);
+        if (filterOrderVO.getLimitCount() == null || filterOrderVO.getLimitCount().equals(0)) {
+            filterOrderVO.setLimitCount(10);
+        }
+        List<LevelStatisticsDTO> records = behospitalInfoFacade.homePageLevelStatistics(filterOrderVO);
+
+        //增加全院
+        LevelStatisticsDTO item = new LevelStatisticsDTO();
+        Integer mrNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getMrNum)
+                .reduce(0, Integer::sum);
+        if (mrNum == null || mrNum == 0) {
+            return Lists.newLinkedList();
+        }
+        Integer entryNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getEntryNum)
+                .reduce(0, Integer::sum);
+        Double totleFee = records
+                .stream()
+                .map(i -> BigDecimal.valueOf(i.getTotleValue()))
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .doubleValue();
+        Double averageFee = BigDecimal.valueOf(totleFee)
+                .divide(BigDecimal.valueOf(mrNum), 2, RoundingMode.HALF_UP)
+                .doubleValue();
+        Integer firstLevelNum = records
+                .stream()
+                .map(LevelStatisticsDTO::getFirstLevelNum)
+                .reduce(0, Integer::sum);
+        Double firstLevelPercent = BigDecimal.valueOf(firstLevelNum)
+                .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String firstLevelPercentStr
+                = df.format(BigDecimal.valueOf(firstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        Integer secondLevelNum = mrNum - firstLevelNum;
+        Double secondLevelPercent = BigDecimal.valueOf(secondLevelNum)
+                .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String secondLevelPercentStr
+                = df.format(BigDecimal.valueOf(secondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        item.setDeptName("全院");
+        item.setEntryNum(entryNum);
+        item.setMrNum(mrNum);
+        item.setTotleValue(totleFee);
+        item.setAverageValue(averageFee);
+        item.setFirstLevelNum(firstLevelNum);
+        item.setFirstLevelPercent(firstLevelPercent);
+        item.setFirstLevelPercentStr(firstLevelPercentStr);
+        item.setSecondLevelNum(secondLevelNum);
+        item.setSecondLevelPercent(secondLevelPercent);
+        item.setSecondLevelPercentStr(secondLevelPercentStr);
+
+        records.add(0, item);
+
+        records = records
+                .stream()
+                .limit(filterOrderVO.getLimitCount())
+                .collect(Collectors.toList());
+
+        return records;
+    }
 }

+ 13 - 0
src/main/java/com/diagbot/facade/MedQcresultCasesFacade.java

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.MedQcresultCasesServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/5/19 9:20
+ */
+@Component
+public class MedQcresultCasesFacade extends MedQcresultCasesServiceImpl {
+}

+ 131 - 0
src/main/java/com/diagbot/facade/ModelHospitalFacade.java

@@ -0,0 +1,131 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.ModelHospitalAllDTO;
+import com.diagbot.entity.MedicalRecord;
+import com.diagbot.entity.ModelHospital;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.ModelHospitalService;
+import com.diagbot.service.impl.ModelHospitalServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
+import com.diagbot.vo.ModelHospitalAllVO;
+import com.diagbot.vo.ModelHospitalUpdataVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-05-15 14:42
+ */
+@Component
+public class ModelHospitalFacade extends ModelHospitalServiceImpl {
+
+    @Autowired
+    ModelHospitalService modelHospitalService;
+    @Autowired
+    MedicalRecordFacade medicalRecordFacade;
+
+    /**
+     *
+     * @param modelHospitalAllVO
+     * @return
+     */
+    public IPage<List<ModelHospitalAllDTO>> getModelHospitalAlls(ModelHospitalAllVO modelHospitalAllVO) {
+        IPage<List<ModelHospitalAllDTO>> data =  modelHospitalService.getModelHospitalAll(modelHospitalAllVO);
+        return data;
+    }
+
+    /**
+     *
+     * @param modeId
+     * @return
+     */
+    public ModelHospitalAllDTO getModelHospitalById(Long modeId) {
+        QueryWrapper<ModelHospital> queryModelHospital = new QueryWrapper<>();
+        queryModelHospital.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id",modeId);
+        ModelHospital modelHospital = modelHospitalService.getOne(queryModelHospital);
+        if(modelHospital == null){
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该数据不存在!");
+        }
+        ModelHospitalAllDTO modelHospitalData =  new ModelHospitalAllDTO();
+        BeanUtil.copyProperties(modelHospital,modelHospitalData);
+        return  modelHospitalData;
+    }
+
+    public Boolean updataModelHospitals(ModelHospitalUpdataVO modelHospitalUpdataVO) {
+        QueryWrapper<ModelHospital> queryModelHospital = new QueryWrapper<>();
+        queryModelHospital.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .ne("id",modelHospitalUpdataVO.getId()==null? -1:modelHospitalUpdataVO.getId())
+                .eq("hospital_model_name",modelHospitalUpdataVO.getHospitalModelName());
+        int sum = modelHospitalService.count(queryModelHospital);
+        if(sum != 0){
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该名称已存在");
+        }
+        boolean res= false;
+        QueryWrapper<ModelHospital> modelHospitalQuery = new QueryWrapper<>();
+        modelHospitalQuery.eq("id",modelHospitalUpdataVO.getId())
+                .eq("is_deleted", IsDeleteEnum.N.getKey());
+        ModelHospital data = modelHospitalService.getOne(modelHospitalQuery);
+        Date date = DateUtil.now();
+        if(data!=null){
+            ModelHospital modelHospitals  = new ModelHospital();
+            BeanUtil.copyProperties(modelHospitalUpdataVO,modelHospitals);
+            modelHospitals.setGmtModified(date);
+            res = modelHospitalService.updateById(modelHospitals);
+            if(res) {
+                UpdateWrapper<MedicalRecord> medicalRecordData = new UpdateWrapper<>();
+                medicalRecordData.eq("rec_title", modelHospitalUpdataVO.getHospitalModelName())
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_id", modelHospitalUpdataVO.getHospitalId())
+                        .set("mode_id", modelHospitals.getId())
+                        .set("gmt_create",date);
+                medicalRecordFacade.update(medicalRecordData);
+            }
+        }else {
+            ModelHospital modelHospitalDatas = new ModelHospital();
+            BeanUtil.copyProperties(modelHospitalUpdataVO,modelHospitalDatas);
+            modelHospitalDatas.setGmtCreate(date);
+            modelHospitalDatas.setGmtModified(date);
+            res= modelHospitalService.save(modelHospitalDatas);
+            if(res) {
+                UpdateWrapper<MedicalRecord> medicalRecordData = new UpdateWrapper<>();
+                medicalRecordData.eq("rec_title", modelHospitalUpdataVO.getHospitalModelName())
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_id", modelHospitalUpdataVO.getHospitalId())
+                        .set("mode_id", modelHospitalDatas.getId())
+                        .set("gmt_create",date);
+                medicalRecordFacade.update(medicalRecordData);
+            }
+        }
+
+        return res;
+    }
+
+    public Boolean clearModelHospital(Long modeId) {
+        boolean res= false;
+        Date date = DateUtil.now();
+        UpdateWrapper<ModelHospital> modelHospitalData = new UpdateWrapper<>();
+        modelHospitalData.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id", modeId)
+                .set("is_deleted", IsDeleteEnum.Y.getKey())
+                .set("gmt_create",date);
+        res = modelHospitalService.update(modelHospitalData);
+        UpdateWrapper<MedicalRecord> medicalRecordData = new UpdateWrapper<>();
+        medicalRecordData.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("mode_id", modeId)
+                .set("mode_id", 0)
+                .set("gmt_create",date);
+        medicalRecordFacade.update(medicalRecordData);
+        return  res ;
+    }
+}

+ 76 - 0
src/main/java/com/diagbot/facade/QcAbnormalFacade.java

@@ -0,0 +1,76 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QcAbnormalDTO;
+import com.diagbot.entity.QcAbnormal;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.QcAbnormalServiceImpl;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.QcAbnormalDelVO;
+import com.diagbot.vo.QcAbnormalSaveVO;
+import com.diagbot.vo.QcAbnormalVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/5/15 9:26
+ */
+@Component
+public class QcAbnormalFacade extends QcAbnormalServiceImpl {
+
+    @Autowired
+    private FilterFacade filterFacade;
+    /**
+     * 查询异常数据监控信息
+     *
+     * @param qcAbnormalVO 异常数据监控信息查询参数
+     * @return 异常数据监控信息
+     */
+    public IPage<QcAbnormalDTO> getQcAnnormalFac(QcAbnormalVO qcAbnormalVO) {
+        String startDate = filterFacade.getStartDateStr(qcAbnormalVO.getStatisticsType(), null);
+        String endDate = filterFacade.getEndDateStr(qcAbnormalVO.getStatisticsType(), null);
+        qcAbnormalVO.setStartDate(startDate);
+        qcAbnormalVO.setEndDate(endDate);
+        qcAbnormalVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        return this.getQcAnnormal(qcAbnormalVO);
+    }
+
+    /**
+     * 更新异常数据监控信息
+     *
+     * @param qcAbnormalSaveVO 异常数据监控信息更新参数
+     * @return 是否成功
+     */
+    public Boolean saveQcAnnormal(QcAbnormalSaveVO qcAbnormalSaveVO) {
+        return this.update(new UpdateWrapper<QcAbnormal>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", SysUserUtils.getCurrentHospitalID())
+                .eq("id", qcAbnormalSaveVO.getId())
+                .set("status", qcAbnormalSaveVO.getStatus())
+                .set("remark", qcAbnormalSaveVO.getRemark())
+                .set("gmt_modified", DateUtil.now())
+                .set("modifier", SysUserUtils.getCurrentPrincipleID())
+        );
+    }
+
+    /**
+     * 删除异常数据监控信息
+     *
+     * @param qcAbnormalDelVO 异常数据监控信息更新参数
+     * @return 是否成功
+     */
+    public Boolean delQcAnnormal(QcAbnormalDelVO qcAbnormalDelVO) {
+        return this.update(new UpdateWrapper<QcAbnormal>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", SysUserUtils.getCurrentHospitalID())
+                .eq("id", qcAbnormalDelVO.getId())
+                .set("is_deleted", IsDeleteEnum.Y.getKey())
+                .set("gmt_modified", DateUtil.now())
+                .set("modifier", SysUserUtils.getCurrentPrincipleID())
+        );
+    }
+}

+ 16 - 0
src/main/java/com/diagbot/facade/QcModeFacade.java

@@ -1,15 +1,19 @@
 package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.QcModeAllDTO;
 import com.diagbot.dto.QcModeDTO;
 import com.diagbot.entity.QcMode;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.QcModeService;
 import com.diagbot.service.impl.QcModeServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -21,6 +25,9 @@ import java.util.Map;
 @Component
 public class QcModeFacade extends QcModeServiceImpl {
 
+    @Autowired
+    QcModeService qcModeService;
+
     public List<QcModeDTO> getMenu(Map<String, Object> pageData) {
         List<QcMode> qcModeList = this.list(new QueryWrapper<QcMode>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -51,4 +58,13 @@ public class QcModeFacade extends QcModeServiceImpl {
         }
         return res;
     }
+
+
+    public List<QcModeAllDTO> getModeAll() {
+        List<QcMode> data = qcModeService.list();
+        List<QcModeAllDTO> dataNew = new ArrayList<QcModeAllDTO>();
+        dataNew = BeanUtil.listCopyTo(data, QcModeAllDTO.class);
+        return dataNew;
+
+    }
 }

+ 39 - 0
src/main/java/com/diagbot/facade/QcModelHospitalFacade.java

@@ -0,0 +1,39 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.entity.QcModelHospital;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.QcModelHospitalServiceImpl;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Component;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/12 11:39
+ */
+@Component
+public class QcModelHospitalFacade extends QcModelHospitalServiceImpl {
+
+    /**
+     * 获取医院对应的模块信息
+     */
+    @Cacheable(value = "cache", key = "'qcHosModel'")
+    public Map<String, QcModelHospital> getHospitalModel() {
+        Map<String, QcModelHospital> hospitalModelMap = new LinkedHashMap<>();
+        List<QcModelHospital> basHospitalInfoList = this.list(new QueryWrapper<QcModelHospital>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .isNotNull("stand_model_id")
+                .isNotNull("stand_model_name")
+        );
+        hospitalModelMap = basHospitalInfoList.stream()
+                .collect(Collectors.toMap(r -> r.getHospitalId() + "##" + r.getHospitalModelName(), r -> r));
+        return hospitalModelMap;
+    }
+
+}

+ 2 - 1
src/main/java/com/diagbot/facade/QcModuleInfoFacade.java

@@ -17,6 +17,7 @@ import com.diagbot.vo.GetModuleInfoOneVO;
 import com.diagbot.vo.GetModuleMapVO;
 import com.diagbot.vo.QuestionIdsVO;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Component;
 
 import java.util.HashMap;
@@ -81,7 +82,7 @@ public class QcModuleInfoFacade extends QcModuleInfoServiceImpl {
      * @param getModuleMapVO
      * @return
      */
-//    @Cacheable(value = "cache", key = "'qcmodule'")
+    @Cacheable(value = "cache", key = "'qcmodule:hospId_'+#getModuleMapVO.hospitalId")
     public Map<Long, GetModuleInfoOneDTO> getModuleMap(GetModuleMapVO getModuleMapVO) {
         Map<Long, GetModuleInfoOneDTO> res = new LinkedHashMap<>();
         List<QcModuleInfo> qcModuleInfoList = this.list(new QueryWrapper<QcModuleInfo>()

+ 36 - 0
src/main/java/com/diagbot/facade/QcresultInfoFacade.java

@@ -6,11 +6,13 @@ import com.diagbot.dto.AlgorithmDTO;
 import com.diagbot.dto.AnalyzeDTO;
 import com.diagbot.dto.QcResultDTO;
 import com.diagbot.entity.BehospitalInfo;
+import com.diagbot.entity.MedQcresultCases;
 import com.diagbot.entity.QcresultDetail;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.service.impl.MedQcresultCasesServiceImpl;
 import com.diagbot.service.impl.QcresultDetailServiceImpl;
 import com.diagbot.service.impl.QcresultInfoServiceImpl;
 import com.diagbot.util.BeanUtil;
@@ -21,6 +23,7 @@ import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.AlgorithmVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.GetDetailVO;
+import com.diagbot.vo.MedQcresultCasesVO;
 import com.diagbot.vo.QcResultAlgVO;
 import com.diagbot.vo.QcresultVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,6 +48,9 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
     private AlgorithmFacade algorithmFacade;
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    @Qualifier("medQcresultCasesServiceImpl")
+    private MedQcresultCasesServiceImpl medQcresultCasesService;
 
     /**
      * 修改评分结果信息
@@ -98,6 +104,8 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
         algorithmVO.setType(qcresultVO.getType());
         algorithmVO.setOptResultAlgVO(qcresultVO.getOptResultAlgVO());
         algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
+        algorithmVO.setHospitalId(hospitalId);
+        algorithmVO.setBehospitalCode(qcresultVO.getBehospitalCode());
         AlgorithmDTO algorithmDTO = algorithmFacade.getAlgorithmRes(algorithmVO);
         //更新质控评分结果信息
         AnalyzeVO analyzeVO = new AnalyzeVO();
@@ -198,10 +206,38 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                 qcresultDetail.setCreator(useId.toString());
                 qcresultDetail.setGmtModified(now);
                 qcresultDetail.setModifier(useId.toString());
+                qcresultDetail.setInfo(StringUtil.isNotBlank(qcResultAlgVO.getInfo()) ? qcResultAlgVO.getInfo() : "");
                 qcresultDetailList.add(qcresultDetail);
             }
             qcresultDetailServiceImpl.saveBatch(qcresultDetailList);
         }
+        //长兴的数据
+        if (algorithmVO.getHospitalId().equals(1L)) {
+            //质控模块评分数据
+            //逻辑删除数据
+            medQcresultCasesService.update(new UpdateWrapper<MedQcresultCases>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("hospital_id", analyzeVO.getHospitalId())
+                    .eq("behospital_code", analyzeVO.getBehospitalCode())
+                    .set("is_deleted", IsDeleteEnum.Y.getKey())
+                    .set("modifier", useId)
+                    .set("gmt_modified", now));
+            //批量插入新的数据
+            List<MedQcresultCases> medQcresultCasesList = new ArrayList<>();
+            List<MedQcresultCasesVO> medQcresultCasesVOList = algorithmVO.getMedQcresultCasesVOList();
+            if (ListUtil.isNotEmpty(medQcresultCasesVOList)) {
+                for (MedQcresultCasesVO medQcresultCasesVO : medQcresultCasesVOList) {
+                    MedQcresultCases medQcresultCases = new MedQcresultCases();
+                    BeanUtil.copyProperties(medQcresultCasesVO, medQcresultCases);
+                    medQcresultCases.setGmtCreate(now);
+                    medQcresultCases.setCreator(useId.toString());
+                    medQcresultCases.setGmtModified(now);
+                    medQcresultCases.setModifier(useId.toString());
+                    medQcresultCasesList.add(medQcresultCases);
+                }
+                medQcresultCasesService.saveBatch(medQcresultCasesList);
+            }
+        }
         return now;
     }
 

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

@@ -399,7 +399,7 @@ public class SysUserFacade extends SysUserServiceImpl {
         checkUser(sysUserBaseVO.getUserId());
         SysUserRoleDTO sysUserRoleDTO = new SysUserRoleDTO();
         sysUserRoleDTO.setUserId(sysUserBaseVO.getUserId());
-        List<SysRoleDTO> sysRoleDTOList = sysRoleFacade.listForUser();
+        List<SysRoleDTO> sysRoleDTOList = sysRoleFacade.listFac();
         List<SysUserRole> sysUserRoleList
                 = sysUserRoleService.list(new QueryWrapper<SysUserRole>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())

+ 3 - 3
src/main/java/com/diagbot/mapper/BasDeptInfoMapper.java

@@ -5,7 +5,7 @@ import com.diagbot.dto.BasDeptInfoDTO;
 import com.diagbot.dto.DeptBaseDTO;
 import com.diagbot.entity.BasDeptInfo;
 import com.diagbot.vo.BasDeptInfoVO;
-import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterVO;
 
 import java.util.List;
 
@@ -25,8 +25,8 @@ public interface BasDeptInfoMapper extends BaseMapper<BasDeptInfo> {
     /**
      * 查询用户关联科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
      * @return
      */
-    List<DeptBaseDTO> getDeptByUser(FilterByDeptVO filterByDeptVO);
+    List<DeptBaseDTO> getDeptByUser(FilterVO filterVO);
 }

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

@@ -3,15 +3,22 @@ package com.diagbot.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.entity.BehospitalInfo;
+import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
-import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterOrderByDeptVO;
+import com.diagbot.vo.FilterOrderVO;
+import com.diagbot.vo.FilterPageByDeptVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
-import com.diagbot.vo.HPFilterByDeptVO;
 import com.diagbot.vo.HomePageFilterVO;
+import org.apache.ibatis.annotations.Param;
+import com.diagbot.vo.TaskVO;
 
 import java.util.List;
 
@@ -29,6 +36,8 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
 
     public List<MsgDTO> getMsg(AnalyzeVO analyzeVO);
 
+    public List<MsgDTO> getMsgByEntryCode(AnalyzeCodeVO analyzeCodeVO);
+
     /**
      * 缺陷排行列表统计
      *
@@ -69,8 +78,7 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      */
     public int getTotleResultNum(FilterVO filterVO);
 
-
-    public List<BehospitalInfo> getNoGrade();
+    public List<BehospitalInfo> getNoGrade(TaskVO taskVO);
 
     IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO);
 
@@ -95,16 +103,64 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
     /**
      * 按科室统计病案首页病历数
      *
-     * @param hpFilterByDeptVO
+     * @param homePageFilterVO
      * @return
      */
-    public List<NumDTO> homePageCountByDept(HPFilterByDeptVO hpFilterByDeptVO);
+    public List<NumDTO> homePageCountByDept(HomePageFilterVO homePageFilterVO);
 
     /**
      * 按科室统计病案首页手术病历数
      *
-     * @param filterByDeptVO
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> homePageCountForOperationByDept(FilterVO filterVO);
+
+    /**
+     * 各科室缺陷占比排行(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> resultStatisticsByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatistics(FilterOrderVO filterOrderVO);
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO);
+
+    /**
+     * 各科室缺陷占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO);
+
+    /**
+     * 病案首页合格率占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO);
+
+    /**
+     * 科室缺陷占比-科室(分页)
+     *
+     * @param filterPageByDeptVO
      * @return
      */
-    public List<NumDTO> homePageCountForOperationByDept(FilterByDeptVO filterByDeptVO);
+    public IPage<DeptNumDTO> resultStatisticsByDeptAndDoctorPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
 }

+ 19 - 0
src/main/java/com/diagbot/mapper/HomePageMapper.java

@@ -1,9 +1,13 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.entity.HomePage;
+import com.diagbot.vo.FilterPageByAverageVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -33,4 +37,19 @@ public interface HomePageMapper extends BaseMapper<HomePage> {
      */
     public List<AverageStatisticsDTO> getAverageFee(FilterVO filterVO);
 
+    /**
+     * 按科室统计平均住院天数(分页)
+     *
+     * @param filterPageByAverageVO
+     * @return
+     */
+    public IPage<AverageStatisticsDTO> getAverageDayNumPage(@Param("filterPageByAverageVO") FilterPageByAverageVO filterPageByAverageVO);
+
+    /**
+     * 按科室统计平均费用(分页)
+     *
+     * @param filterPageByAverageVO
+     * @return
+     */
+    public IPage<AverageStatisticsDTO> getAverageFeePage(@Param("filterPageByAverageVO") FilterPageByAverageVO filterPageByAverageVO);
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.MedQcresultCases;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 质控评分模块评分信息 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-19
+ */
+public interface MedQcresultCasesMapper extends BaseMapper<MedQcresultCases> {
+
+}

+ 22 - 0
src/main/java/com/diagbot/mapper/ModelHospitalMapper.java

@@ -0,0 +1,22 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.ModelHospitalAllDTO;
+import com.diagbot.entity.ModelHospital;
+import com.diagbot.vo.ModelHospitalAllVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-05-15
+ */
+public interface ModelHospitalMapper extends BaseMapper<ModelHospital> {
+
+    IPage<List<ModelHospitalAllDTO>> getModelHospitalAll(ModelHospitalAllVO modelHospitalAllVO);
+}

+ 19 - 0
src/main/java/com/diagbot/mapper/QcAbnormalMapper.java

@@ -0,0 +1,19 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QcAbnormalDTO;
+import com.diagbot.entity.QcAbnormal;
+import com.diagbot.vo.QcAbnormalVO;
+
+/**
+ * <p>
+ * 异常数据监控信息 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-15
+ */
+public interface QcAbnormalMapper extends BaseMapper<QcAbnormal> {
+    IPage<QcAbnormalDTO> getQcAnnormal(QcAbnormalVO qcAbnormalVO);
+}

+ 1 - 0
src/main/java/com/diagbot/mapper/QcCasesEntryMapper.java

@@ -18,6 +18,7 @@ import java.util.List;
  * @since 2020-04-13
  */
 public interface QcCasesEntryMapper extends BaseMapper<QcCasesEntry> {
+
     List<QcCasesEntryDTO> getQcCasesEntry(AnalyzeVO analyzeVO);
 
     List<QcResultAlgVO> getQcResultAlgVO(QcResultAlgQueryVO qcResultAlgQueryVO);

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.QcModelHospital;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-05-13
+ */
+public interface QcModelHospitalMapper extends BaseMapper<QcModelHospital> {
+
+}

+ 56 - 8
src/main/java/com/diagbot/mapper/QcresultInfoMapper.java

@@ -1,15 +1,17 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
-import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterPageByDeptVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
-import com.diagbot.vo.QcresultFilterByDeptVO;
 import com.diagbot.vo.QcresultFilterVO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -75,24 +77,70 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
     /**
      * 按科室统计质控病历数
      *
-     * @param qcresultFilterByDeptVO
+     * @param qcresultFilterVO
      * @return
      */
-    public List<NumDTO> resultCountByDept(QcresultFilterByDeptVO qcresultFilterByDeptVO);
+    public List<NumDTO> resultCountByDept(QcresultFilterVO qcresultFilterVO);
 
     /**
      * 各模块缺陷占比-按科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
      * @return
      */
-    public List<DeptNumDTO> entryCountGroupByCaseAndDept(FilterByDeptVO filterByDeptVO);
+    public List<DeptNumDTO> entryCountGroupByCaseAndDept(FilterVO filterVO);
 
     /**
      * 条目缺陷占比-按科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
+     * @return
+     */
+    public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterVO filterVO);
+
+    /**
+     * 各模块缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByCasePage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 条目缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 各科室质控平均分(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<AverageStatisticsDTO> getAverageScoreByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 各科室甲级病历占比排行(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<QcResultPercentDTO> levelPercentGroupByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 各模块缺陷占比-科室(分页)
+     * @param filterPageByDeptVO
+     * @return
+     */
+    public IPage<DeptNumDTO> entryCountGroupByCaseAndDeptPage(@Param("filterPageByDeptVO")FilterPageByDeptVO filterPageByDeptVO);
+
+    /**
+     * 条目缺陷占比-科室(分页)
+     * @param filterPageByDeptVO
      * @return
      */
-    public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO);
+    public IPage<DeptNumDTO> entryCountGroupByEntryAndDeptPage(@Param("filterPageByDeptVO")FilterPageByDeptVO filterPageByDeptVO);
 }

+ 4 - 4
src/main/java/com/diagbot/service/BasDeptInfoService.java

@@ -1,11 +1,11 @@
 package com.diagbot.service;
 
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.dto.BasDeptInfoDTO;
 import com.diagbot.dto.DeptBaseDTO;
 import com.diagbot.entity.BasDeptInfo;
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.vo.BasDeptInfoVO;
-import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterVO;
 
 import java.util.List;
 
@@ -25,8 +25,8 @@ public interface BasDeptInfoService extends IService<BasDeptInfo> {
     /**
      * 查询用户关联科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
      * @return
      */
-    List<DeptBaseDTO> getDeptByUser(FilterByDeptVO filterByDeptVO);
+    List<DeptBaseDTO> getDeptByUser(FilterVO filterVO);
 }

+ 64 - 7
src/main/java/com/diagbot/service/BehospitalInfoService.java

@@ -3,15 +3,22 @@ package com.diagbot.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.entity.BehospitalInfo;
+import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
-import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterOrderByDeptVO;
+import com.diagbot.vo.FilterOrderVO;
+import com.diagbot.vo.FilterPageByDeptVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
-import com.diagbot.vo.HPFilterByDeptVO;
 import com.diagbot.vo.HomePageFilterVO;
+import org.apache.ibatis.annotations.Param;
+import com.diagbot.vo.TaskVO;
 
 import java.util.List;
 
@@ -29,6 +36,8 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
 
     public List<MsgDTO> getMsg(AnalyzeVO analyzeVO);
 
+    public List<MsgDTO> getMsgByEntryCode(AnalyzeCodeVO analyzeCodeVO);
+
     /**
      * 缺陷排行列表统计
      *
@@ -70,7 +79,7 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
     public int getTotleResultNum(FilterVO filterVO);
 
 
-    public List<BehospitalInfo> getNoGrade();
+    public List<BehospitalInfo> getNoGrade(TaskVO taskVO);
 
     IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO);
 
@@ -95,16 +104,64 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
     /**
      * 按科室统计病案首页病历数
      *
-     * @param hpFilterByDeptVO
+     * @param homePageFilterVO
      * @return
      */
-    public List<NumDTO> homePageCountByDept(HPFilterByDeptVO hpFilterByDeptVO);
+    public List<NumDTO> homePageCountByDept(HomePageFilterVO homePageFilterVO);
 
     /**
      * 按科室统计病案首页手术病历数
      *
-     * @param filterByDeptVO
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> homePageCountForOperationByDept(FilterVO filterVO);
+
+    /**
+     * 各科室缺陷占比排行(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> resultStatisticsByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatistics(FilterOrderVO filterOrderVO);
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO);
+
+    /**
+     * 各科室缺陷占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO);
+
+    /**
+     * 病案首页合格率占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> homePageLevelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO);
+
+    /**
+     * 缺陷明细-科室(分页)
+     *
+     * @param filterPageByDeptVO
      * @return
      */
-    public List<NumDTO> homePageCountForOperationByDept(FilterByDeptVO filterByDeptVO);
+    public IPage<DeptNumDTO> resultStatisticsByDeptAndDoctorPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
 }

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

@@ -1,9 +1,13 @@
 package com.diagbot.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.entity.HomePage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.FilterPageByAverageVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -31,4 +35,20 @@ public interface HomePageService extends IService<HomePage> {
      * @return
      */
     public List<AverageStatisticsDTO> getAverageFee(FilterVO filterVO);
+
+    /**
+     * 按科室统计平均住院天数(分页)
+     *
+     * @param filterPageByAverageVO
+     * @return
+     */
+    public IPage<AverageStatisticsDTO> getAverageDayNumPage(@Param("filterPageByAverageVO") FilterPageByAverageVO filterPageByAverageVO);
+
+    /**
+     * 按科室统计平均费用(分页)
+     *
+     * @param filterPageByAverageVO
+     * @return
+     */
+    public IPage<AverageStatisticsDTO> getAverageFeePage(@Param("filterPageByAverageVO") FilterPageByAverageVO filterPageByAverageVO);
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.MedQcresultCases;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 质控评分模块评分信息 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-19
+ */
+public interface MedQcresultCasesService extends IService<MedQcresultCases> {
+
+}

+ 22 - 0
src/main/java/com/diagbot/service/ModelHospitalService.java

@@ -0,0 +1,22 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.ModelHospitalAllDTO;
+import com.diagbot.entity.ModelHospital;
+import com.diagbot.vo.ModelHospitalAllVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-05-15
+ */
+public interface ModelHospitalService extends IService<ModelHospital> {
+
+    IPage<List<ModelHospitalAllDTO>> getModelHospitalAll(ModelHospitalAllVO modelHospitalAllVO);
+}

+ 19 - 0
src/main/java/com/diagbot/service/QcAbnormalService.java

@@ -0,0 +1,19 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QcAbnormalDTO;
+import com.diagbot.entity.QcAbnormal;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.QcAbnormalVO;
+
+/**
+ * <p>
+ * 异常数据监控信息 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-15
+ */
+public interface QcAbnormalService extends IService<QcAbnormal> {
+    IPage<QcAbnormalDTO> getQcAnnormal(QcAbnormalVO qcAbnormalVO);
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.QcModelHospital;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-05-13
+ */
+public interface QcModelHospitalService extends IService<QcModelHospital> {
+
+}

+ 56 - 8
src/main/java/com/diagbot/service/QcresultInfoService.java

@@ -1,15 +1,17 @@
 package com.diagbot.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
-import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterPageByDeptVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
-import com.diagbot.vo.QcresultFilterByDeptVO;
 import com.diagbot.vo.QcresultFilterVO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -76,24 +78,70 @@ public interface QcresultInfoService extends IService<QcresultInfo> {
     /**
      * 按科室统计质控病历数
      *
-     * @param qcresultFilterByDeptVO
+     * @param qcresultFilterVO
      * @return
      */
-    public List<NumDTO> resultCountByDept(QcresultFilterByDeptVO qcresultFilterByDeptVO);
+    public List<NumDTO> resultCountByDept(QcresultFilterVO qcresultFilterVO);
 
     /**
      * 各模块缺陷占比-按科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
      * @return
      */
-    public List<DeptNumDTO> entryCountGroupByCaseAndDept(FilterByDeptVO filterByDeptVO);
+    public List<DeptNumDTO> entryCountGroupByCaseAndDept(FilterVO filterVO);
 
     /**
      * 条目缺陷占比-按科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
+     * @return
+     */
+    public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterVO filterVO);
+
+    /**
+     * 各模块缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByCasePage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 条目缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 各科室质控平均分(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<AverageStatisticsDTO> getAverageScoreByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 各科室甲级病历占比排行(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<QcResultPercentDTO> levelPercentGroupByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 各模块缺陷占比-科室(分页)
+     * @param filterPageByDeptVO
+     * @return
+     */
+    public IPage<DeptNumDTO> entryCountGroupByCaseAndDeptPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
+
+    /**
+     * 条目缺陷占比-科室(分页)
+     * @param filterPageByDeptVO
      * @return
      */
-    public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO);
+    public IPage<DeptNumDTO> entryCountGroupByEntryAndDeptPage(@Param("filterPageByDeptVO")FilterPageByDeptVO filterPageByDeptVO);
 }

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

@@ -7,7 +7,7 @@ import com.diagbot.entity.BasDeptInfo;
 import com.diagbot.mapper.BasDeptInfoMapper;
 import com.diagbot.service.BasDeptInfoService;
 import com.diagbot.vo.BasDeptInfoVO;
-import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterVO;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -36,11 +36,11 @@ public class BasDeptInfoServiceImpl extends ServiceImpl<BasDeptInfoMapper, BasDe
     /**
      * 查询用户关联科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
      * @return
      */
     @Override
-    public List<DeptBaseDTO> getDeptByUser(FilterByDeptVO filterByDeptVO) {
-        return baseMapper.getDeptByUser(filterByDeptVO);
+    public List<DeptBaseDTO> getDeptByUser(FilterVO filterVO) {
+        return baseMapper.getDeptByUser(filterVO);
     }
 }

+ 87 - 10
src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java

@@ -3,17 +3,24 @@ package com.diagbot.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.mapper.BehospitalInfoMapper;
 import com.diagbot.service.BehospitalInfoService;
+import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
-import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterOrderByDeptVO;
+import com.diagbot.vo.FilterOrderVO;
+import com.diagbot.vo.FilterPageByDeptVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
-import com.diagbot.vo.HPFilterByDeptVO;
 import com.diagbot.vo.HomePageFilterVO;
+import org.apache.ibatis.annotations.Param;
+import com.diagbot.vo.TaskVO;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -39,6 +46,11 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
         return baseMapper.getMsg(analyzeVO);
     }
 
+    @Override
+    public List<MsgDTO> getMsgByEntryCode(AnalyzeCodeVO analyzeCodeVO) {
+        return baseMapper.getMsgByEntryCode(analyzeCodeVO);
+    }
+
     /**
      * 缺陷排行列表统计
      *
@@ -95,8 +107,8 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
     }
 
     @Override
-    public List<BehospitalInfo> getNoGrade() {
-        return baseMapper.getNoGrade();
+    public List<BehospitalInfo> getNoGrade(TaskVO taskVO) {
+        return baseMapper.getNoGrade(taskVO);
     }
 
     @Override
@@ -134,22 +146,87 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
     /**
      * 按科室统计病案首页病历数
      *
-     * @param hpFilterByDeptVO
+     * @param homePageFilterVO
      * @return
      */
     @Override
-    public List<NumDTO> homePageCountByDept(HPFilterByDeptVO hpFilterByDeptVO) {
-        return baseMapper.homePageCountByDept(hpFilterByDeptVO);
+    public List<NumDTO> homePageCountByDept(HomePageFilterVO homePageFilterVO) {
+        return baseMapper.homePageCountByDept(homePageFilterVO);
     }
 
     /**
      * 按科室统计病案首页手术病历数
      *
-     * @param filterByDeptVO
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<NumDTO> homePageCountForOperationByDept(FilterVO filterVO) {
+        return baseMapper.homePageCountForOperationByDept(filterVO);
+    }
+
+    /**
+     * 各科室缺陷占比排行(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @Override
+    public IPage<NumDTO> resultStatisticsByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO) {
+        return baseMapper.resultStatisticsByDeptPage(filterPageVO);
+    }
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @Override
+    public List<LevelStatisticsDTO> levelStatistics(FilterOrderVO filterOrderVO) {
+        return baseMapper.levelStatistics(filterOrderVO);
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @Override
+    public List<LevelStatisticsDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO) {
+        return baseMapper.homePageLevelStatistics(filterOrderVO);
+    }
+
+    /**
+     * 各科室缺陷占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
      * @return
      */
     @Override
-    public List<NumDTO> homePageCountForOperationByDept(FilterByDeptVO filterByDeptVO) {
-        return baseMapper.homePageCountForOperationByDept(filterByDeptVO);
+    public List<LevelStatisticsDTO> levelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO) {
+        return baseMapper.levelStatisticsByDept(filterOrderByDeptVO);
+    }
+
+    /**
+     * 病案首页合格率占比(主任医生)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    @Override
+    public List<LevelStatisticsDTO> homePageLevelStatisticsByDept(FilterOrderByDeptVO filterOrderByDeptVO) {
+        return baseMapper.homePageLevelStatisticsByDept(filterOrderByDeptVO);
+    }
+
+    /**
+     * 缺陷明细-科室(分页)
+     *
+     * @param filterPageByDeptVO
+     * @return
+     */
+    public IPage<DeptNumDTO> resultStatisticsByDeptAndDoctorPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO) {
+        return baseMapper.resultStatisticsByDeptAndDoctorPage(filterPageByDeptVO);
     }
 }

+ 25 - 0
src/main/java/com/diagbot/service/impl/HomePageServiceImpl.java

@@ -1,11 +1,15 @@
 package com.diagbot.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.entity.HomePage;
 import com.diagbot.mapper.HomePageMapper;
 import com.diagbot.service.HomePageService;
+import com.diagbot.vo.FilterPageByAverageVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -42,4 +46,25 @@ public class HomePageServiceImpl extends ServiceImpl<HomePageMapper, HomePage> i
     public List<AverageStatisticsDTO> getAverageFee(FilterVO filterVO) {
         return baseMapper.getAverageFee(filterVO);
     }
+
+    /**
+     * 按科室统计平均住院天数(分页)
+     *
+     * @param filterPageByAverageVO
+     * @return
+     */
+    @Override
+    public IPage<AverageStatisticsDTO> getAverageDayNumPage(@Param("filterPageByAverageVO") FilterPageByAverageVO filterPageByAverageVO) {
+        return baseMapper.getAverageDayNumPage(filterPageByAverageVO);
+    }
+
+    /**
+     * 按科室统计平均费用(分页)
+     *
+     * @param filterPageByAverageVO
+     * @return
+     */
+    public IPage<AverageStatisticsDTO> getAverageFeePage(@Param("filterPageByAverageVO") FilterPageByAverageVO filterPageByAverageVO) {
+        return baseMapper.getAverageFeePage(filterPageByAverageVO);
+    }
 }

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.MedQcresultCases;
+import com.diagbot.mapper.MedQcresultCasesMapper;
+import com.diagbot.service.MedQcresultCasesService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 质控评分模块评分信息 服务实现类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-19
+ */
+@Service
+public class MedQcresultCasesServiceImpl extends ServiceImpl<MedQcresultCasesMapper, MedQcresultCases> implements MedQcresultCasesService {
+
+}

+ 29 - 0
src/main/java/com/diagbot/service/impl/ModelHospitalServiceImpl.java

@@ -0,0 +1,29 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.ModelHospitalAllDTO;
+import com.diagbot.entity.ModelHospital;
+import com.diagbot.mapper.ModelHospitalMapper;
+import com.diagbot.service.ModelHospitalService;
+import com.diagbot.vo.ModelHospitalAllVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-05-15
+ */
+@Service
+public class ModelHospitalServiceImpl extends ServiceImpl<ModelHospitalMapper, ModelHospital> implements ModelHospitalService {
+
+    @Override
+    public IPage<List<ModelHospitalAllDTO>> getModelHospitalAll(ModelHospitalAllVO modelHospitalAllVO) {
+        return baseMapper.getModelHospitalAll(modelHospitalAllVO);
+    }
+}

+ 25 - 0
src/main/java/com/diagbot/service/impl/QcAbnormalServiceImpl.java

@@ -0,0 +1,25 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QcAbnormalDTO;
+import com.diagbot.entity.QcAbnormal;
+import com.diagbot.mapper.QcAbnormalMapper;
+import com.diagbot.service.QcAbnormalService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.QcAbnormalVO;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 异常数据监控信息 服务实现类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-15
+ */
+@Service
+public class QcAbnormalServiceImpl extends ServiceImpl<QcAbnormalMapper, QcAbnormal> implements QcAbnormalService {
+    public IPage<QcAbnormalDTO> getQcAnnormal(QcAbnormalVO qcAbnormalVO){
+        return baseMapper.getQcAnnormal(qcAbnormalVO);
+    }
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.QcModelHospital;
+import com.diagbot.mapper.QcModelHospitalMapper;
+import com.diagbot.service.QcModelHospitalService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-05-13
+ */
+@Service
+public class QcModelHospitalServiceImpl extends ServiceImpl<QcModelHospitalMapper, QcModelHospital> implements QcModelHospitalService {
+
+}

+ 79 - 11
src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java

@@ -1,5 +1,6 @@
 package com.diagbot.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.DeptNumDTO;
@@ -8,10 +9,11 @@ import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.mapper.QcresultInfoMapper;
 import com.diagbot.service.QcresultInfoService;
-import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterPageByDeptVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
-import com.diagbot.vo.QcresultFilterByDeptVO;
 import com.diagbot.vo.QcresultFilterVO;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -98,33 +100,99 @@ public class QcresultInfoServiceImpl extends ServiceImpl<QcresultInfoMapper, Qcr
     /**
      * 按科室统计质控病历数
      *
-     * @param qcresultFilterByDeptVO
+     * @param qcresultFilterVO
      * @return
      */
     @Override
-    public List<NumDTO> resultCountByDept(QcresultFilterByDeptVO qcresultFilterByDeptVO) {
-        return baseMapper.resultCountByDept(qcresultFilterByDeptVO);
+    public List<NumDTO> resultCountByDept(QcresultFilterVO qcresultFilterVO) {
+        return baseMapper.resultCountByDept(qcresultFilterVO);
     }
 
     /**
      * 各模块缺陷占比-按科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
      * @return
      */
     @Override
-    public List<DeptNumDTO> entryCountGroupByCaseAndDept(FilterByDeptVO filterByDeptVO) {
-        return baseMapper.entryCountGroupByCaseAndDept(filterByDeptVO);
+    public List<DeptNumDTO> entryCountGroupByCaseAndDept(FilterVO filterVO) {
+        return baseMapper.entryCountGroupByCaseAndDept(filterVO);
     }
 
     /**
      * 条目缺陷占比-按科室
      *
-     * @param filterByDeptVO
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterVO filterVO) {
+        return baseMapper.entryCountGroupByEntryAndDept(filterVO);
+    }
+
+    /**
+     * 各模块缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @Override
+    public IPage<NumDTO> entryCountGroupByCasePage(@Param("filterPageVO") FilterPageVO filterPageVO) {
+        return baseMapper.entryCountGroupByCasePage(filterPageVO);
+    }
+
+    /**
+     * 条目缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @Override
+    public IPage<NumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO) {
+        return baseMapper.entryCountGroupByEntryPage(filterPageVO);
+    }
+
+    /**
+     * 各科室质控平均分(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @Override
+    public IPage<AverageStatisticsDTO> getAverageScoreByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO) {
+        return baseMapper.getAverageScoreByDeptPage(filterPageVO);
+    }
+
+    /**
+     * 各科室甲级病历占比排行(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @Override
+    public IPage<QcResultPercentDTO> levelPercentGroupByDeptPage(@Param("filterPageVO") FilterPageVO filterPageVO) {
+        return baseMapper.levelPercentGroupByDeptPage(filterPageVO);
+    }
+
+    /**
+     * 各模块缺陷占比-科室(分页)
+     *
+     * @param filterPageByDeptVO
+     * @return
+     */
+    @Override
+    public IPage<DeptNumDTO> entryCountGroupByCaseAndDeptPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO) {
+        return baseMapper.entryCountGroupByCaseAndDeptPage(filterPageByDeptVO);
+    }
+
+    /**
+     * 条目缺陷占比-科室(分页)
+     *
+     * @param filterPageByDeptVO
      * @return
      */
     @Override
-    public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO) {
-        return baseMapper.entryCountGroupByEntryAndDept(filterByDeptVO);
+    public IPage<DeptNumDTO> entryCountGroupByEntryAndDeptPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO) {
+        return baseMapper.entryCountGroupByEntryAndDeptPage(filterPageByDeptVO);
     }
 }

+ 72 - 0
src/main/java/com/diagbot/task/TASK_CX.java

@@ -0,0 +1,72 @@
+package com.diagbot.task;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.entity.SysTaskCron;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.facade.BehospitalInfoFacade;
+import com.diagbot.facade.SysTaskCronFacade;
+import com.diagbot.util.StringUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.Trigger;
+import org.springframework.scheduling.TriggerContext;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/15 17:45
+ */
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+@Slf4j
+public class TASK_CX implements SchedulingConfigurer {
+    @Autowired
+    private SysTaskCronFacade sysTaskCronFacade;
+
+    private SysTaskCron task = new SysTaskCron();
+
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+
+    /**
+     * 执行定时任务.
+     */
+    @Override
+    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+        taskRegistrar.addTriggerTask(new Runnable() {
+            @Override
+            public void run() {
+                //1.添加任务内容(Runnable)
+                if (null != task
+                        && task.getIsDeleted().equals(IsDeleteEnum.N.getKey())
+                        && task.getIsUsed().equals(1)) {
+                    log.info("执行动态定时任务: " + LocalDateTime.now().toLocalTime());
+                    behospitalInfoFacade.execute2();
+                }
+            }
+        }, new Trigger() {
+            @Override
+            public Date nextExecutionTime(TriggerContext triggerContext) {
+                //2.1 从数据库获取执行周期
+                task = sysTaskCronFacade.getOne(new QueryWrapper<SysTaskCron>()
+                        .eq("cron_code", "TASK_CX")
+                );
+                String cron = "0/5 * * * * ?";
+                //2.2 合法性校验.
+                if (null != task && StringUtil.isNotBlank(task.getCron())) {
+                    cron = task.getCron();
+                }
+                CronTrigger trigger = new CronTrigger(cron);
+                return trigger.nextExecutionTime(triggerContext);
+            }
+        });
+    }
+}

+ 11 - 0
src/main/java/com/diagbot/vo/AlgorithmVO.java

@@ -3,6 +3,7 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -19,4 +20,14 @@ public class AlgorithmVO {
     private QcResultAlgVO optResultAlgVO;
     //扣分条目
     private List<QcResultAlgVO> qcResultAlgVOList;
+    //-------长兴特殊算分用开始-----------
+    //医院ID
+    private Long hospitalId;
+    // 病历id
+    private String behospitalCode;
+    //质控评分模块评分信息
+    private List<MedQcresultCasesVO> medQcresultCasesVOList = new ArrayList<>();
+    //是否病案首页
+    private Boolean isHomePage = false;
+    //-------长兴特殊算分用结束-----------
 }

+ 20 - 0
src/main/java/com/diagbot/vo/AnalyzeCodeVO.java

@@ -0,0 +1,20 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @author: zhoutg
+ * @time: 2020/4/13 18:31
+ */
+@Data
+public class AnalyzeCodeVO {
+    // 条目编码
+    private List<String> codeList;
+    // 医院ID
+    private Long hospitalId;
+    // modeId
+    private Long modeId;
+}

+ 24 - 0
src/main/java/com/diagbot/vo/AnalyzeRunVO.java

@@ -0,0 +1,24 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description:
+ * @author: zhoutg
+ * @time: 2020/4/13 18:31
+ */
+@Data
+public class AnalyzeRunVO {
+    // 病历id
+    @NotBlank(message = "behospitalCode不能为空")
+    private String behospitalCode;
+    // 医院ID
+    @NotNull(message = "hospitalId不能为空")
+    private Long hospitalId;
+    // 模块id
+    @NotNull(message = "modeId不能为空")
+    private Long modeId;
+}

+ 2 - 0
src/main/java/com/diagbot/vo/AnalyzeVO.java

@@ -16,4 +16,6 @@ public class AnalyzeVO {
     private Long hospitalId; //医院ID
     @ApiModelProperty(hidden = true)
     private Boolean isTask = false;
+    @ApiModelProperty(hidden = true)
+    private Long modeId;
 }

+ 0 - 17
src/main/java/com/diagbot/vo/FilterByDeptVO.java

@@ -1,17 +0,0 @@
-package com.diagbot.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @Description:主任医生过滤
- * @Author:zhaops
- * @time: 2020/5/8 17:02
- */
-@Getter
-@Setter
-public class FilterByDeptVO extends FilterVO {
-    @ApiModelProperty(hidden = true)
-    private Long userId;
-}

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

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/19 18:05
+ */
+@Getter
+@Setter
+public class FilterOrderByDeptVO extends FilterOrderVO {
+    private String deptName;
+}

+ 33 - 0
src/main/java/com/diagbot/vo/FilterOrderVO.java

@@ -0,0 +1,33 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/19 13:39
+ */
+@Getter
+@Setter
+public class FilterOrderVO extends FilterVO {
+    /**
+     * 等级
+     */
+    private String level;
+
+    /**
+     * 排序(升序)
+     */
+    private String asc;
+
+    /**
+     * 排序(降序)
+     */
+    private String desc;
+
+    /**
+     * 科室名称/主管医生名称
+     */
+    private String name;
+}

+ 35 - 0
src/main/java/com/diagbot/vo/FilterPageByAverageVO.java

@@ -0,0 +1,35 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/21 19:35
+ */
+@Getter
+@Setter
+public class FilterPageByAverageVO extends FilterPageVO {
+    /**
+     * 上一统计区间起始时间
+     */
+    @ApiModelProperty(hidden = true)
+    private String lastStartDate;
+    /**
+     * 上一统计区间结束时间
+     */
+    @ApiModelProperty(hidden = true)
+    private String lastEndDate;
+    /**
+     * 去年同一区间起始时间
+     */
+    @ApiModelProperty(hidden = true)
+    private String lastYearStartDate;
+    /**
+     * 去年同一区间结束时间
+     */
+    @ApiModelProperty(hidden = true)
+    private String lastYearEndDate;
+}

+ 4 - 4
src/main/java/com/diagbot/vo/HPFilterByDeptVO.java

@@ -6,13 +6,13 @@ import lombok.Setter;
 /**
  * @Description:
  * @Author:zhaops
- * @time: 2020/5/8 19:27
+ * @time: 2020/5/15 11:32
  */
 @Getter
 @Setter
-public class HPFilterByDeptVO extends FilterByDeptVO {
+public class FilterPageByDeptVO extends FilterPageVO {
     /**
-     * 死亡
+     * 医生名称
      */
-    private Integer death;
+    private String doctorName;
 }

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

@@ -0,0 +1,55 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/14 14:57
+ */
+@Getter
+@Setter
+public class FilterPageVO extends Page {
+    /**
+     * 统计维度 1-本月,2-本年
+     */
+    private Integer type;
+    /**
+     * 时间类型 1-本月/本年,2-上月/去年,3-去年本月/去年
+     */
+    private Integer dateType;
+    /**
+     * 起始时间
+     */
+    @ApiModelProperty(hidden = true)
+    private String startDate;
+    /**
+     * 结束时间
+     */
+    @ApiModelProperty(hidden = true)
+    private String endDate;
+    /**
+     * 医院id
+     */
+    @ApiModelProperty(hidden = true)
+    private String hospitalId;
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(hidden = true)
+    private Long userId;
+    private String name;
+
+    /**
+     * 科室名称
+     */
+    private String deptName;
+
+    /**
+     * 模块id:243=病案首页
+     */
+    private Long casesId;
+}

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

@@ -36,4 +36,7 @@ public class FilterVO {
      */
     @ApiModelProperty(hidden = true)
     private Integer limitCount;
+
+    @ApiModelProperty(hidden = true)
+    private Long userId;
 }

+ 40 - 0
src/main/java/com/diagbot/vo/MedQcresultCasesVO.java

@@ -0,0 +1,40 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description: 质控评分模块评分信息
+ * @author: gaodm
+ * @time: 2020/5/19 9:37
+ */
+@Getter
+@Setter
+public class MedQcresultCasesVO {
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 病人住院ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 数据模块ID(0:其他模块)
+     */
+    private Long casesId;
+
+    /**
+     * 最后得分
+     */
+    private BigDecimal scoreRes;
+
+    /**
+     * 等级
+     */
+    private String level;
+}

+ 23 - 0
src/main/java/com/diagbot/vo/ModelHospitalAllVO.java

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-05-15 14:52
+ */
+@Setter
+@Getter
+public class ModelHospitalAllVO extends Page {
+
+    private Long hospitalId;
+
+    private String hospitalModelName;
+
+    private Long standModelId;
+
+    private String standModelName;
+}

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

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-05-15 15:19
+ */
+@Setter
+@Getter
+public class ModelHospitalIdVO {
+    @NotNull(message = "请输入模块id")
+      private Long  ModeId;
+}

+ 29 - 0
src/main/java/com/diagbot/vo/ModelHospitalUpdataVO.java

@@ -0,0 +1,29 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-05-15 15:37
+ */
+@Setter
+@Getter
+public class ModelHospitalUpdataVO {
+
+
+    private Long id;
+
+    private Long hospitalId;
+
+    private String hospitalModelName;
+
+    private Long standModelId;
+
+    private String standModelName;
+    /**
+     * 备注
+     */
+    private String remark;
+}

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

@@ -0,0 +1,21 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/5/15 10:16
+ */
+@Getter
+@Setter
+public class QcAbnormalDelVO {
+    /**
+     * 主键
+     */
+    @NotNull(message = "请输入异常数据监控ID")
+    private Long id;
+}

+ 32 - 0
src/main/java/com/diagbot/vo/QcAbnormalSaveVO.java

@@ -0,0 +1,32 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/5/15 10:16
+ */
+@Getter
+@Setter
+public class QcAbnormalSaveVO {
+    /**
+     * 主键
+     */
+    @NotNull(message = "请输入异常数据监控ID")
+    private Long id;
+
+    /**
+     * 状态(0:未处理,1:已处理)
+     */
+    @NotNull(message = "请输入处理状态")
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 49 - 0
src/main/java/com/diagbot/vo/QcAbnormalVO.java

@@ -0,0 +1,49 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/5/15 10:16
+ */
+@Getter
+@Setter
+public class QcAbnormalVO extends Page {
+    /**
+     * 病人住院ID
+     */
+    private String behospitalCode;
+
+    /**
+     * 异常类型(1:数据模块 2:质控类型 3:XML结构)
+     */
+    private Integer type;
+
+    /**
+     * 状态(0:未处理,1:已处理)
+     */
+    private Integer status;
+
+    /**
+     * 统计维度 1-本月,2-本年
+     */
+    private Integer statisticsType;
+    /**
+     * 起始时间
+     */
+    @ApiModelProperty(hidden = true)
+    private String startDate;
+    /**
+     * 结束时间
+     */
+    @ApiModelProperty(hidden = true)
+    private String endDate;
+
+    //医院ID
+    @ApiModelProperty(hidden = true)
+    private Long hospitalId;
+}

+ 0 - 23
src/main/java/com/diagbot/vo/QcresultFilterByDeptVO.java

@@ -1,23 +0,0 @@
-package com.diagbot.vo;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @Description:
- * @Author:zhaops
- * @time: 2020/5/8 19:50
- */
-@Getter
-@Setter
-public class QcresultFilterByDeptVO extends FilterByDeptVO{
-    /**
-     * 等级
-     */
-    private String level;
-
-    /**
-     * 评分类型
-     */
-    private Integer gradeType;
-}

+ 17 - 0
src/main/java/com/diagbot/vo/TaskVO.java

@@ -0,0 +1,17 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/14 9:53
+ */
+@Data
+public class TaskVO {
+
+    // 出院时间过滤
+    private Date leaveDate;
+}

+ 17 - 1
src/main/java/com/diagbot/web/BehospitalInfoController.java

@@ -3,11 +3,13 @@ package com.diagbot.web;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.AnalyzeDTO;
+import com.diagbot.dto.AnalyzeRunDTO;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.BehospitalInfoFacade;
 import com.diagbot.facade.QcresultInfoFacade;
 import com.diagbot.vo.AnalyzeApiVO;
+import com.diagbot.vo.AnalyzeRunVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.GetDetailVO;
@@ -22,6 +24,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
+import javax.validation.Valid;
 import java.util.Map;
 
 /**
@@ -65,7 +68,6 @@ public class BehospitalInfoController {
         return RespDTO.onSuc(data);
     }
 
-
     @ApiOperation(value = "评分[by:zhoutg]",
             notes = "")
     @PostMapping("/analyze")
@@ -75,6 +77,20 @@ public class BehospitalInfoController {
         return RespDTO.onSuc(behospitalInfoFacade.analyze(analyzeVO));
     }
 
+    @ApiOperation(value = "评分-运行质控[by:zhoutg]",
+            notes = "    // 病历id\n" +
+                    "     String behospitalCode;\n" +
+                    "    // 医院ID\n" +
+                    "     Long hospitalId;\n" +
+                    "    // 模块id\n" +
+                    "     Long modeId;")
+    @PostMapping("/analyze_run")
+    @SysLogger("analyze_run")
+    @Transactional
+    public RespDTO<AnalyzeRunDTO> analyzeRun(@Valid @RequestBody AnalyzeRunVO analyzeRunVO) {
+        return RespDTO.onSuc(behospitalInfoFacade.analyzeRun(analyzeRunVO));
+    }
+
     @ApiOperation(value = "定时任务评分[by:zhoutg]",
             notes = "")
     @PostMapping("/analyze_rpc")

+ 130 - 14
src/main/java/com/diagbot/web/ConsoleByDeptController.java

@@ -1,9 +1,15 @@
 package com.diagbot.web;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.DeptBaseDTO;
+import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.ConsoleByDeptFacade;
-import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterOrderByDeptVO;
+import com.diagbot.vo.FilterPageByDeptVO;
+import com.diagbot.vo.FilterVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,7 +17,9 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -27,39 +35,147 @@ public class ConsoleByDeptController {
     @Autowired
     private ConsoleByDeptFacade consoleByDeptFacade;
 
-    @ApiOperation(value = "出院病人统计(科室)[by:zhaops]",
+    //region --------------------------首页接口开始------------------------------
+    @ApiOperation(value = "出院病人统计(科室)-首页[by:zhaops]",
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/leaveHosCountByDept")
     @SysLogger("leaveHosCountByDept")
-    public RespDTO<Map<String, Object>> leaveHosCountByDept(@RequestBody FilterByDeptVO filterByDeptVO) {
-        Map<String, Object> data = consoleByDeptFacade.leaveHosCountByDept(filterByDeptVO);
+    public RespDTO<Map<String, Object>> leaveHosCountByDept(@RequestBody FilterVO filterVO) {
+        Map<String, Object> data = consoleByDeptFacade.leaveHosCountByDept(filterVO);
         return RespDTO.onSuc(data);
     }
 
-    @ApiOperation(value = "病历数统计(科室)[by:zhaops]",
+    @ApiOperation(value = "病历数统计(科室)-首页[by:zhaops]",
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/mrCountByDept")
     @SysLogger("mrCountByDept")
-    public RespDTO<Map<String, Object>> mrCountByDept(@RequestBody FilterByDeptVO filterByDeptVO) {
-        Map<String, Object> data = consoleByDeptFacade.mrCountByDept(filterByDeptVO);
+    public RespDTO<Map<String, Object>> mrCountByDept(@RequestBody FilterVO filterVO) {
+        Map<String, Object> data = consoleByDeptFacade.mrCountByDept(filterVO);
         return RespDTO.onSuc(data);
     }
 
-    @ApiOperation(value = "各模块缺陷占比排名(科室)[by:zhaops]",
+    @ApiOperation(value = "各模块缺陷占比排名(科室)-首页[by:zhaops]",
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/entryCountGroupByCaseAndDept")
     @SysLogger("entryCountGroupByCaseAndDept")
-    public RespDTO<Map<String, Object>> entryCountGroupByCaseAndDept(@RequestBody FilterByDeptVO filterByDeptVO) {
-        Map<String, Object> data = consoleByDeptFacade.entryCountGroupByCaseAndDept(filterByDeptVO);
+    public RespDTO<Map<String, Object>> entryCountGroupByCaseAndDept(@RequestBody FilterVO filterVO) {
+        Map<String, Object> data = consoleByDeptFacade.entryCountGroupByCaseAndDept(filterVO);
         return RespDTO.onSuc(data);
     }
 
-    @ApiOperation(value = "条目缺陷占比(科室)[by:zhaops]",
+    @ApiOperation(value = "条目缺陷占比(科室)-首页[by:zhaops]",
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/entryCountGroupByEntryAndDept")
     @SysLogger("entryCountGroupByEntryAndDept")
-    public RespDTO<Map<String, Object>> entryCountGroupByEntryAndDept(@RequestBody FilterByDeptVO filterByDeptVO) {
-        Map<String, Object> data = consoleByDeptFacade.entryCountGroupByEntryAndDept(filterByDeptVO);
+    public RespDTO<Map<String, Object>> entryCountGroupByEntryAndDept(@RequestBody FilterVO filterVO) {
+        Map<String, Object> data = consoleByDeptFacade.entryCountGroupByEntryAndDept(filterVO);
         return RespDTO.onSuc(data);
     }
-}
+
+    /**
+     * 病案首页合格率占比(首页)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    @ApiOperation(value = "病案首页合格率占比-首页[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 主治医生名称 <br>" +
+                    "deptName: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/homePageLevelByDeptLimit")
+    @SysLogger("homePageLevelByDeptLimit")
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelByDeptLimit(@RequestBody FilterOrderByDeptVO filterOrderByDeptVO) {
+        return RespDTO.onSuc(consoleByDeptFacade.homePageLevelByDeptLimit(filterOrderByDeptVO));
+    }
+    //endregion -----------------------首页接口结束------------------------------
+
+    @ApiOperation(value = "用户关联科室[by:zhaops]",
+            notes = "")
+    @PostMapping("/getDept")
+    @SysLogger("getDept")
+    public RespDTO<List<DeptBaseDTO>> getDept() {
+        List<DeptBaseDTO> data = consoleByDeptFacade.getDept();
+        return RespDTO.onSuc(data);
+    }
+
+    //region --------------------------内页接口开始------------------------------
+    @ApiOperation(value = "各模块缺陷占比排名-科室(分页)-内页[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "name: 模块名称<br>" +
+                    "deptName: 科室名称(必填)<br>")
+    @PostMapping("/entryCountGroupByCaseAndDeptPage")
+    @SysLogger("entryCountGroupByCaseAndDeptPage")
+    public RespDTO<IPage<DeptNumDTO>> entryCountGroupByCaseAndDeptPage(@RequestBody FilterPageByDeptVO filterPageByDeptVO) {
+        IPage<DeptNumDTO> data = consoleByDeptFacade.entryCountGroupByCaseAndDeptPage(filterPageByDeptVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "条目缺陷占比-科室(分页)-内页[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "name: 缺陷名称<br>" +
+                    "deptName: 科室名称(必填)<br>" +
+                    "casesId: 模块id:243=病案首页 <br>")
+    @PostMapping("/entryCountGroupByEntryAndDeptPage")
+    @SysLogger("entryCountGroupByEntryAndDeptPage")
+    public RespDTO<IPage<DeptNumDTO>> entryCountGroupByEntryAndDeptPage(@RequestBody FilterPageByDeptVO filterPageByDeptVO) {
+        IPage<DeptNumDTO> data = consoleByDeptFacade.entryCountGroupByEntryAndDeptPage(filterPageByDeptVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "缺陷明细-科室(分页)-内页[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "name: 缺陷名称<br>" +
+                    "deptName: 科室名称(必填)<br>" +
+                    "doctorName: 医生名称(必填)<br>")
+    @PostMapping("/resultStatisticsByDeptAndDoctorPage")
+    @SysLogger("resultStatisticsByDeptAndDoctorPage")
+    @ApiIgnore
+    public RespDTO<IPage<DeptNumDTO>> resultStatisticsByDeptAndDoctorPage(@RequestBody FilterPageByDeptVO filterPageByDeptVO) {
+        IPage<DeptNumDTO> data = consoleByDeptFacade.resultStatisticsByDeptAndDoctorPage(filterPageByDeptVO);
+        return RespDTO.onSuc(data);
+    }
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    @ApiOperation(value = "各科室缺陷占比(组合)-内页[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 主治医生名称 <br>" +
+                    "deptName: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/levelStatisticsByDept")
+    @SysLogger("levelStatisticsByDept")
+    public RespDTO<List<LevelStatisticsDTO>> levelStatisticsByDept(@RequestBody FilterOrderByDeptVO filterOrderByDeptVO) {
+        return RespDTO.onSuc(consoleByDeptFacade.levelStatisticsByDept(filterOrderByDeptVO));
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderByDeptVO
+     * @return
+     */
+    @ApiOperation(value = "病案首页合格率占比(科室)-内页[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 主治医生名称 <br>" +
+                    "deptName: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/homePageLevelStatisticsByDept")
+    @SysLogger("homePageLevelStatisticsByDept")
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelStatisticsByDept(@RequestBody FilterOrderByDeptVO filterOrderByDeptVO) {
+        return RespDTO.onSuc(consoleByDeptFacade.homePageLevelStatisticsByDept(filterOrderByDeptVO));
+    }
+
+    //endregion -----------------------内页接口结束------------------------------
+
+}

+ 172 - 4
src/main/java/com/diagbot/web/ConsoleController.java

@@ -1,8 +1,15 @@
 package com.diagbot.web;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.AverageStatisticsDTO;
+import com.diagbot.dto.LevelStatisticsDTO;
+import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.ConsoleFacade;
+import com.diagbot.vo.FilterOrderVO;
+import com.diagbot.vo.FilterPageByAverageVO;
+import com.diagbot.vo.FilterPageVO;
 import com.diagbot.vo.FilterVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -13,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -29,7 +37,7 @@ public class ConsoleController {
     @Autowired
     private ConsoleFacade consoleFacade;
 
-    //-----------------------聚合接口开始-------------------------------
+    //region-----------------------聚合接口开始-------------------------------
     @ApiOperation(value = "病历相关统计[by:zhaops]",
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/mrStatistics")
@@ -59,9 +67,9 @@ public class ConsoleController {
         Map<String, Object> data = consoleFacade.averageStatistics(filterVO);
         return RespDTO.onSuc(data);
     }
-    //-----------------------聚合接口结束-------------------------------
+    //endregion-----------------------聚合接口结束-------------------------------
 
-    //-----------------------单独接口开始-------------------------------
+    //region-----------------------单独接口开始-------------------------------
 
     /**
      * 平均住院天数
@@ -188,5 +196,165 @@ public class ConsoleController {
     public RespDTO<Map<String, Object>> entryByDept(@RequestBody FilterVO filterVO) {
         return RespDTO.onSuc(consoleFacade.entryByDept(filterVO));
     }
-    //-----------------------单独接口结束-------------------------------
+    //endregion-----------------------单独接口结束-------------------------------
+
+    //region-----------------------分页接口开始-------------------------------
+
+    /**
+     * 各模块缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @ApiOperation(value = "各模块缺陷占比(分页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
+    @PostMapping("/entryCountGroupByCasePage")
+    @SysLogger("entryCountGroupByCasePage")
+    public RespDTO<IPage<NumDTO>> entryCountGroupByCasePage(@RequestBody FilterPageVO filterPageVO) {
+        return RespDTO.onSuc(consoleFacade.entryCountGroupByCasePage(filterPageVO));
+    }
+
+    /**
+     * 条目缺陷占比(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @ApiOperation(value = "条目缺陷占比(分页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>"+
+                    "deptName: 科室名称 <br>"+
+                    "casesId: 模块id:243=病案首页 <br>")
+    @PostMapping("/entryCountGroupByEntryPage")
+    @SysLogger("entryCountGroupByEntryPage")
+    public RespDTO<IPage<NumDTO>> entryCountGroupByEntryPage(@RequestBody FilterPageVO filterPageVO) {
+        return RespDTO.onSuc(consoleFacade.entryCountGroupByEntryPage(filterPageVO));
+    }
+
+    /**
+     * 按科室统计平均住院天数(分页)
+     *
+     * @param filterPageByAverageVO
+     * @return
+     */
+    @ApiOperation(value = "按科室统计平均住院天数(分页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年<br>" +
+                    "dateType: 时间类型 1-本月/本年,2-上月/去年,3-去年本月/去年<br>")
+    @PostMapping("/getAverageDayNumPage")
+    @SysLogger("getAverageDayNumPage")
+    public RespDTO<IPage<AverageStatisticsDTO>> getAverageDayNumPage(@RequestBody FilterPageByAverageVO filterPageByAverageVO) {
+        return RespDTO.onSuc(consoleFacade.getAverageDayNumPage(filterPageByAverageVO));
+    }
+
+    /**
+     * 按科室统计平均住院费用(分页)
+     *
+     * @param filterPageByAverageVO
+     * @return
+     */
+    @ApiOperation(value = "按科室统计平均住院费用(分页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年<br>" +
+                    "dateType: 时间类型 1-本月/本年,2-上月/去年,3-去年本月/去年<br>")
+    @PostMapping("/getAverageFeePage")
+    @SysLogger("getAverageFeePage")
+    public RespDTO<IPage<AverageStatisticsDTO>> getAverageFeePage(@RequestBody FilterPageByAverageVO filterPageByAverageVO) {
+        return RespDTO.onSuc(consoleFacade.getAverageFeePage(filterPageByAverageVO));
+    }
+
+    /**
+     * 各科室质控平均分(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @ApiOperation(value = "各科室质控平均分(分页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
+    @PostMapping("/getAverageScoreByDeptPage")
+    @SysLogger("getAverageScoreByDeptPage")
+    public RespDTO<IPage<AverageStatisticsDTO>> getAverageScoreByDeptPage(@RequestBody FilterPageVO filterPageVO) {
+        return RespDTO.onSuc(consoleFacade.getAverageScoreByDeptPage(filterPageVO));
+    }
+
+    /**
+     * 各科室缺陷占比排行(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @ApiOperation(value = "各科室缺陷占比排行(分页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
+    @PostMapping("/resultStatisticsByDeptPage")
+    @SysLogger("resultStatisticsByDeptPage")
+    public RespDTO<IPage<NumDTO>> resultStatisticsByDeptPage(@RequestBody FilterPageVO filterPageVO) {
+        return RespDTO.onSuc(consoleFacade.resultStatisticsByDeptPage(filterPageVO));
+    }
+
+    /**
+     * 各科室甲级病历占比排行(分页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @ApiOperation(value = "各科室甲级病历占比排行(分页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
+    @PostMapping("/levelPercentGroupByDeptPage")
+    @SysLogger("levelPercentGroupByDeptPage")
+    public RespDTO<IPage<NumDTO>> levelPercentGroupByDeptPage(@RequestBody FilterPageVO filterPageVO) {
+        return RespDTO.onSuc(consoleFacade.levelPercentGroupByDeptPage(filterPageVO));
+    }
+
+    //endregion-----------------------分页接口结束-------------------------------
+
+    /**
+     * 各科室缺陷占比(组合)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @ApiOperation(value = "各科室缺陷占比(组合)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/levelStatistics")
+    @SysLogger("levelStatistics")
+    public RespDTO<List<LevelStatisticsDTO>> levelStatistics(@RequestBody FilterOrderVO filterOrderVO) {
+        return RespDTO.onSuc(consoleFacade.levelStatistics(filterOrderVO));
+    }
+
+    /**
+     * 病案首页合格率占比
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @ApiOperation(value = "病案首页合格率占比[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/homePageLevelStatistics")
+    @SysLogger("homePageLevelStatistics")
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelStatistics(@RequestBody FilterOrderVO filterOrderVO) {
+        return RespDTO.onSuc(consoleFacade.homePageLevelStatistics(filterOrderVO));
+    }
+
+    /**
+     * 病案首页合格率占比(首页)
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @ApiOperation(value = "病案首页合格率占比(首页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 科室名称 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/homePageLevelLimit")
+    @SysLogger("homePageLevelLimit")
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelLimit(@RequestBody FilterOrderVO filterOrderVO) {
+        return RespDTO.onSuc(consoleFacade.homePageLevelLimit(filterOrderVO));
+    }
 }

+ 75 - 0
src/main/java/com/diagbot/web/ModelHospitalController.java

@@ -0,0 +1,75 @@
+package com.diagbot.web;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.ModelHospitalAllDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.ModelHospitalFacade;
+import com.diagbot.vo.ModelHospitalAllVO;
+import com.diagbot.vo.ModelHospitalIdVO;
+import com.diagbot.vo.ModelHospitalUpdataVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-05-15
+ */
+@RestController
+@RequestMapping("/qc/modelHospital")
+@Api(value = "医院数据模块相关接口API", tags = { "医院数据模块相关接口API" })
+@SuppressWarnings("unchecked")
+public class ModelHospitalController {
+
+    @Autowired
+    ModelHospitalFacade modelHospitalFacade;
+
+    @ApiOperation(value = "获取全部条目[by:wangfeng]",
+            notes = "获取全部条目")
+    @PostMapping("/getModelHospitalAll")
+    @SysLogger("getModelHospitalAll")
+    public RespDTO<IPage<List<ModelHospitalAllDTO>>> getModelHospitalAll(@RequestBody ModelHospitalAllVO modelHospitalAllVO) {
+        IPage<List<ModelHospitalAllDTO>> data = modelHospitalFacade.getModelHospitalAlls(modelHospitalAllVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "根据id获取医院数据[by:wangfeng]",
+            notes = "根据id获取医院数据")
+    @PostMapping("/getModelHospitalById")
+    @SysLogger("getModelHospitalById")
+    public RespDTO<ModelHospitalAllDTO> getModelHospitalById(@RequestBody ModelHospitalIdVO modelHospitalIdVO) {
+        ModelHospitalAllDTO data = modelHospitalFacade.getModelHospitalById(modelHospitalIdVO.getModeId());
+        return RespDTO.onSuc(data);
+    }
+    @ApiOperation(value = "添加和修改医院数据模块[by:wangfeng]",
+            notes = "添加和修改医院数据模块")
+    @PostMapping("/saveAndupdataModel")
+    @SysLogger("saveAndupdataModel")
+    public RespDTO<Boolean> updataModelHospital(@RequestBody ModelHospitalUpdataVO modelHospitalUpdataVO) {
+        Boolean res = modelHospitalFacade.updataModelHospitals(modelHospitalUpdataVO);
+        return RespDTO.onSuc(res);
+    }
+
+    @ApiOperation(value = "删除医院数据模块[by:wangfeng]",
+            notes = "删除医院数据模块")
+    @PostMapping("/clearModelHospital")
+    @SysLogger("clearModelHospital")
+    public RespDTO<Boolean> clearModelHospital(@RequestBody ModelHospitalIdVO modelHospitalIdVO) {
+        Boolean res = modelHospitalFacade.clearModelHospital(modelHospitalIdVO.getModeId());
+        return RespDTO.onSuc(res);
+    }
+
+
+}

+ 69 - 0
src/main/java/com/diagbot/web/QcAbnormalController.java

@@ -0,0 +1,69 @@
+package com.diagbot.web;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.QcAbnormalDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.QcAbnormalFacade;
+import com.diagbot.vo.QcAbnormalDelVO;
+import com.diagbot.vo.QcAbnormalSaveVO;
+import com.diagbot.vo.QcAbnormalVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+/**
+ * <p>
+ * 异常数据监控信息 前端控制器
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-05-15
+ */
+@RequestMapping("/qc/abnormal")
+@RestController
+@Api(value = "异常数据监控相关API", tags = { "异常数据监控相关API" })
+@SuppressWarnings("unchecked")
+public class QcAbnormalController {
+    @Autowired
+    private QcAbnormalFacade qcAbnormalFacade;
+
+    @ApiOperation(value = "查询异常数据监控信息[by:gaodm]",
+            notes = "behospitalCode: 病人住院ID<br>" +
+                    "type: 异常类型(1:数据模块 2:质控类型 3:XML结构)<br>" +
+                    "status: 状态(0:未处理,1:已处理)<br>" +
+                    "statisticsType: 统计维度 1-本月,2-本年<br>")
+    @PostMapping("/getQcAnnormal")
+    @SysLogger("getQcAnnormal")
+    public RespDTO<IPage<QcAbnormalDTO>> getQcAnnormal(@RequestBody QcAbnormalVO qcAbnormalVO) {
+        return RespDTO.onSuc(qcAbnormalFacade.getQcAnnormalFac(qcAbnormalVO));
+    }
+
+    @ApiOperation(value = "更新异常数据监控信息[by:gaodm]",
+            notes = "id: 异常数据监控ID<br>" +
+                    "status: 状态(0:未处理,1:已处理)<br>" +
+                    "remark: 备注<br>")
+    @PostMapping("/saveQcAnnormal")
+    @SysLogger("saveQcAnnormal")
+    @Transactional
+    public RespDTO<Boolean> saveQcAnnormal(@RequestBody @Valid QcAbnormalSaveVO qcAbnormalSaveVO) {
+        return RespDTO.onSuc(qcAbnormalFacade.saveQcAnnormal(qcAbnormalSaveVO));
+    }
+
+    @ApiOperation(value = "删除异常数据监控信息[by:gaodm]",
+            notes = "id: 异常数据监控ID<br>")
+    @PostMapping("/delQcAnnormal")
+    @SysLogger("delQcAnnormal")
+    @Transactional
+    public RespDTO<Boolean> delQcAnnormal(@RequestBody @Valid QcAbnormalDelVO qcAbnormalDelVO) {
+        return RespDTO.onSuc(qcAbnormalFacade.delQcAnnormal(qcAbnormalDelVO));
+    }
+}

+ 30 - 13
src/main/java/com/diagbot/web/QcModeController.java

@@ -1,10 +1,19 @@
 package com.diagbot.web;
 
 
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.QcModeAllDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.QcModeFacade;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * <p>
  * 菜单 前端控制器
@@ -15,20 +24,28 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @RestController
 @RequestMapping("/qc/mode")
-@Api(value = "菜单相关API", tags = { "菜单相关API" })
+@Api(value = "医院模块菜单相关API", tags = { "医院模块菜单相关API" })
 @SuppressWarnings("unchecked")
-@Deprecated
 public class QcModeController {
 
-//    @Autowired
-//    QcModeFacade qcModeFacade;
-//
-//    @ApiOperation(value = "获取菜单信息[by:zhoutg]",
-//            notes = "")
-//    @PostMapping("/getMenu")
-//    @SysLogger("getMenu")
-//    public RespDTO<List<QcModeDTO> > getMenu() {
-//        List<QcModeDTO> data = qcModeFacade.getMenu();
-//        return RespDTO.onSuc(data);
-//    }
+        @Autowired
+        QcModeFacade qcModeFacade;
+    //
+    //    @ApiOperation(value = "获取菜单信息[by:zhoutg]",
+    //            notes = "")
+    //    @PostMapping("/getMenu")
+    //    @SysLogger("getMenu")
+    //    public RespDTO<List<QcModeDTO> > getMenu() {
+    //        List<QcModeDTO> data = qcModeFacade.getMenu();
+    //        return RespDTO.onSuc(data);
+    //    }
+    @ApiOperation(value = "获取医院全部模块[by:wangfeng]",
+            notes = "获取医院全部模块")
+    @PostMapping("/getModes")
+    @SysLogger("getModes")
+    public RespDTO<List<QcModeAllDTO>> getModeAlls() {
+
+        return RespDTO.onSuc(qcModeFacade.getModeAll());
+    }
+
 }

+ 1 - 1
src/main/java/com/diagbot/web/SysRoleController.java

@@ -48,7 +48,7 @@ public class SysRoleController {
     @PostMapping("/listForUser")
     @SysLogger("listForUser")
     public RespDTO<List<SysRoleDTO>> listForUser() {
-        return RespDTO.onSuc(sysRoleFacade.listForUser());
+        return RespDTO.onSuc(sysRoleFacade.listFac());
     }
 
     @ApiOperation(value = "获取角色菜权限单等数据[by:gaodm]",

+ 1 - 1
src/main/resources/mapper/BasDeptInfoMapper.xml

@@ -57,7 +57,7 @@
     </select>
 
     <!-- 查询用户关联科室 -->
-    <select id="getDeptByUser" parameterType="com.diagbot.vo.FilterByDeptVO" resultType="com.diagbot.dto.DeptBaseDTO">
+    <select id="getDeptByUser" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.DeptBaseDTO">
         SELECT
         b.dept_id as deptId,
         b.dept_name as deptName

File diff suppressed because it is too large
+ 975 - 36
src/main/resources/mapper/BehospitalInfoMapper.xml


+ 415 - 0
src/main/resources/mapper/HomePageMapper.xml

@@ -200,4 +200,419 @@
         a.beh_dept_name
     </select>
 
+    <!-- 按科室统计平均住院天数 (分页)-->
+    <select id="getAverageDayNumPage" resultType="com.diagbot.dto.AverageStatisticsDTO">
+        SELECT
+        id,
+        NAME,
+        averageValue,
+        lastAverageValue,
+        lastYearAverageValue
+        FROM
+        (
+        SELECT
+        dept.id,
+        dept.NAME,
+        t1.averageValue,
+        t2.lastAverageValue,
+        t3.lastYearAverageValue
+        FROM
+        (
+        SELECT DISTINCT
+        id,
+        NAME
+        FROM
+        (
+        (
+        SELECT DISTINCT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.startDate != null and filterPageByAverageVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.startDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.endDate != null and filterPageByAverageVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.endDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        ) UNION
+        (
+        SELECT DISTINCT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.lastStartDate != null and filterPageByAverageVO.lastStartDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.lastStartDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.lastEndDate != null and filterPageByAverageVO.lastEndDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.lastEndDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        ) UNION
+        (
+        SELECT DISTINCT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.lastYearStartDate != null and filterPageByAverageVO.lastYearStartDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.lastYearStartDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.lastYearEndDate != null and filterPageByAverageVO.lastYearEndDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.lastYearEndDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        ))dept1
+        ) dept
+        LEFT JOIN (
+        SELECT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME,
+        count(*) AS num,
+        round( sum( CAST( b.behospital_day_num AS DECIMAL ))/ count(*), 2 ) AS averageValue,
+        round( sum( CAST( b.behospital_day_num AS DECIMAL )), 2 ) AS totleValue
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.startDate != null and filterPageByAverageVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.startDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.endDate != null and filterPageByAverageVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.endDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) t1 ON dept.id = t1.id
+        AND dept.NAME = t1.
+        NAME LEFT JOIN (
+        SELECT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME,
+        count(*) AS num,
+        round( sum( CAST( b.behospital_day_num AS DECIMAL ))/ count(*), 2 ) AS lastAverageValue,
+        round( sum( CAST( b.behospital_day_num AS DECIMAL )), 2 ) AS totleValue
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.lastStartDate != null and filterPageByAverageVO.lastStartDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.lastStartDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.lastEndDate != null and filterPageByAverageVO.lastEndDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.lastEndDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) t2 ON dept.id = t2.id
+        AND dept.NAME = t2.
+        NAME LEFT JOIN (
+        SELECT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME,
+        count(*) AS num,
+        round( sum( CAST( b.behospital_day_num AS DECIMAL ))/ count(*), 2 ) AS lastYearAverageValue,
+        round( sum( CAST( b.behospital_day_num AS DECIMAL )), 2 ) AS totleValue
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.lastYearStartDate != null and filterPageByAverageVO.lastYearStartDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.lastYearStartDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.lastYearEndDate != null and filterPageByAverageVO.lastYearEndDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.lastYearEndDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) t3 ON dept.id = t3.id
+        AND dept.NAME = t3.NAME
+        ORDER BY
+        t1.averageValue DESC,
+        t2.lastAverageValue DESC,
+        t3.lastYearAverageValue DESC
+        )t
+    </select>
+
+    <!-- 按科室统计平均费用(分页) -->
+    <select id="getAverageFeePage"   resultType="com.diagbot.dto.AverageStatisticsDTO">
+        SELECT
+        id,
+        NAME,
+        averageValue,
+        lastAverageValue,
+        lastYearAverageValue
+        FROM
+        (
+        SELECT
+        dept.id,
+        dept.NAME,
+        t1.averageValue,
+        t2.lastAverageValue,
+        t3.lastYearAverageValue
+        FROM
+        (
+        SELECT DISTINCT
+        id,
+        NAME
+        FROM
+        (
+        (
+        SELECT DISTINCT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.startDate != null and filterPageByAverageVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.startDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.endDate != null and filterPageByAverageVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.endDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        ) UNION
+        (
+        SELECT DISTINCT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.lastStartDate != null and filterPageByAverageVO.lastStartDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.lastStartDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.lastEndDate != null and filterPageByAverageVO.lastEndDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.lastEndDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        ) UNION
+        (
+        SELECT DISTINCT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.lastYearStartDate != null and filterPageByAverageVO.lastYearStartDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.lastYearStartDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.lastYearEndDate != null and filterPageByAverageVO.lastYearEndDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.lastYearEndDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        ))dept1
+        ) dept
+        LEFT JOIN (
+        SELECT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME,
+        count(*) AS num,
+        round( sum( CAST( b.total_fee AS DECIMAL ))/ count(*), 2 ) AS averageValue,
+        round( sum( CAST( b.total_fee AS DECIMAL )), 2 ) AS totleValue
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.startDate != null and filterPageByAverageVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.startDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.endDate != null and filterPageByAverageVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.endDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) t1 ON dept.id = t1.id
+        AND dept.NAME = t1.
+        NAME LEFT JOIN (
+        SELECT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME,
+        count(*) AS num,
+        round( sum( CAST( b.total_fee AS DECIMAL ))/ count(*), 2 ) AS lastAverageValue,
+        round( sum( CAST( b.total_fee AS DECIMAL )), 2 ) AS totleValue
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.lastStartDate != null and filterPageByAverageVO.lastStartDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.lastStartDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.lastEndDate != null and filterPageByAverageVO.lastEndDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.lastEndDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) t2 ON dept.id = t2.id
+        AND dept.NAME = t2.
+        NAME LEFT JOIN (
+        SELECT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME,
+        count(*) AS num,
+        round( sum( CAST( b.total_fee AS DECIMAL ))/ count(*), 2 ) AS lastYearAverageValue,
+        round( sum( CAST( b.total_fee AS DECIMAL )), 2 ) AS totleValue
+        FROM
+        med_behospital_info a,
+        med_home_page b
+        WHERE
+        a.hospital_id = b.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
+        </if>
+        <if test="filterPageByAverageVO.lastYearStartDate != null and filterPageByAverageVO.lastYearStartDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByAverageVO.lastYearStartDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.lastYearEndDate != null and filterPageByAverageVO.lastYearEndDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByAverageVO.lastYearEndDate})]]>
+        </if>
+        <if test="filterPageByAverageVO.name != null and filterPageByAverageVO.name != ''">
+            AND a.beh_dept_name like CONCAT('%', #{filterPageByAverageVO.name},'%')
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) t3 ON dept.id = t3.id
+        AND dept.NAME = t3.NAME
+        ORDER BY
+        t1.averageValue DESC,
+        t2.lastAverageValue DESC,
+        t3.lastYearAverageValue DESC
+        )t
+    </select>
 </mapper>

+ 21 - 0
src/main/resources/mapper/MedQcresultCasesMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.MedQcresultCasesMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.MedQcresultCases">
+        <id column="id" property="id" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="behospital_code" property="behospitalCode" />
+        <result column="cases_id" property="casesId" />
+        <result column="score_res" property="scoreRes" />
+        <result column="level" property="level" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 46 - 0
src/main/resources/mapper/ModelHospitalMapper.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.ModelHospitalMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.ModelHospital">
+        <id column="id" property="id"/>
+        <result column="hospital_id" property="hospitalId"/>
+        <result column="hospital_model_name" property="hospitalModelName"/>
+        <result column="stand_model_id" property="standModelId"/>
+        <result column="stand_model_name" property="standModelName"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="gmt_create" property="gmtCreate"/>
+        <result column="gmt_modified" property="gmtModified"/>
+        <result column="creator" property="creator"/>
+        <result column="modifier" property="modifier"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+    <select id="getModelHospitalAll" parameterType="com.diagbot.vo.ModelHospitalAllVO"
+            resultType="com.diagbot.dto.ModelHospitalAllDTO">
+        select id as id ,
+        hospital_id as hospitalId,
+        hospital_model_name as hospitalModelName,
+        stand_model_id as standModelId,
+        stand_model_name as standModelName,
+        gmt_create as gmtCreate ,
+        gmt_modified as gmtModified,
+        creator as creator,
+        modifier as modifier,
+        remark as remark
+        from qc_model_hospital where is_deleted = "N"
+        <if test="hospitalId != null and hospitalId != ''">
+            AND hospital_id = #{hospitalId}
+        </if>
+        <if test="hospitalModelName != null and hospitalModelName != ''">
+            AND UPPER(hospital_model_name) LIKE CONCAT('%', UPPER(trim(#{hospitalModelName})), '%')
+        </if>
+        <if test="standModelId != null and standModelId != ''">
+            AND stand_model_id = #{standModelId}
+        </if>
+        <if test="standModelName != null and standModelName != ''">
+            AND UPPER(stand_model_name) LIKE CONCAT('%', UPPER(trim(#{standModelName})), '%')
+        </if>
+    </select>
+
+</mapper>

+ 48 - 0
src/main/resources/mapper/QcAbnormalMapper.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.QcAbnormalMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.QcAbnormal">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="behospital_code" property="behospitalCode" />
+        <result column="type" property="type" />
+        <result column="description" property="description" />
+        <result column="status" property="status" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <select id="getQcAnnormal" resultType="com.diagbot.dto.QcAbnormalDTO" parameterType="com.diagbot.vo.QcAbnormalVO">
+        SELECT
+        t1.*
+        FROM
+        `qc_abnormal` t1
+        WHERE
+        t1.is_deleted = 'N'
+        <if test="hospitalId != null">
+            and t1.hospital_id = #{hospitalId}
+        </if>
+        <if test="type != null">
+            and t1.type = #{type}
+        </if>
+        <if test="status != null">
+            and t1.status = #{status}
+        </if>
+        <if test="behospitalCode != null and behospitalCode != ''">
+            and t1.behospital_code like CONCAT('%',#{behospitalCode},'%')
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and t1.gmt_create >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[ and t1.gmt_create < DATE(#{endDate})]]>
+        </if>
+        order by t1.gmt_create desc
+    </select>
+</mapper>

+ 0 - 0
src/main/resources/mapper/QcCasesEntryMapper.xml


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