Browse Source

Merge branch 'master' into 122run

gaodm 5 years atrás
parent
commit
4bdb6a4409
91 changed files with 4918 additions and 1426 deletions
  1. 29 0
      doc/004.20200527v.1.3.0/qc_init.sql
  2. 1056 0
      doc/005.20200528v1.2.x/qc_init.sql
  3. 9 0
      pom.xml
  4. 1 1
      src/main/java/com/diagbot/aggregate/AverageStatisticsAggregate.java
  5. 4 10
      src/main/java/com/diagbot/aggregate/MrStatisticsAggregate.java
  6. 4 54
      src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java
  7. 5 0
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  8. 5 0
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  9. 6 4
      src/main/java/com/diagbot/dto/AverageStatisticsDTO.java
  10. 18 0
      src/main/java/com/diagbot/dto/CaseAndDeptNumDTO.java
  11. 16 0
      src/main/java/com/diagbot/dto/CaseNumDTO.java
  12. 33 0
      src/main/java/com/diagbot/dto/ExportExcelBehospitalDTO.java
  13. 9 0
      src/main/java/com/diagbot/dto/ExportExcelCase.java
  14. 23 0
      src/main/java/com/diagbot/dto/ExportExcelCaseDTO.java
  15. 26 0
      src/main/java/com/diagbot/dto/ExportExcelDTO.java
  16. 17 0
      src/main/java/com/diagbot/dto/ExportExcelMsgDTO.java
  17. 58 0
      src/main/java/com/diagbot/dto/ExportQcresultDTO.java
  18. 3 0
      src/main/java/com/diagbot/dto/LevelStatisticsDTO.java
  19. 34 0
      src/main/java/com/diagbot/dto/MedicalRecordDTO.java
  20. 9 0
      src/main/java/com/diagbot/dto/MsgDTO.java
  21. 29 0
      src/main/java/com/diagbot/dto/QcAbnormalModeDTO.java
  22. 38 0
      src/main/java/com/diagbot/dto/QcCasesEntrySimpleDTO.java
  23. 25 0
      src/main/java/com/diagbot/dto/QcTypeDTO.java
  24. 66 0
      src/main/java/com/diagbot/dto/QcTypePageDTO.java
  25. 10 0
      src/main/java/com/diagbot/dto/RecordContentDTO.java
  26. 43 1
      src/main/java/com/diagbot/entity/BehospitalInfo.java
  27. 19 0
      src/main/java/com/diagbot/entity/CommonParam.java
  28. 5 0
      src/main/java/com/diagbot/entity/MedicalRecord.java
  29. 15 1
      src/main/java/com/diagbot/entity/QcType.java
  30. 10 0
      src/main/java/com/diagbot/entity/QcresultDetail.java
  31. 6 94
      src/main/java/com/diagbot/entity/SysTaskCron.java
  32. 50 0
      src/main/java/com/diagbot/enums/InsertOrUpdateEnum.java
  33. 198 131
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  34. 35 74
      src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java
  35. 51 17
      src/main/java/com/diagbot/facade/ConsoleFacade.java
  36. 33 40
      src/main/java/com/diagbot/facade/ModelHospitalFacade.java
  37. 60 0
      src/main/java/com/diagbot/facade/QcAbnormalFacade.java
  38. 1 1
      src/main/java/com/diagbot/facade/QcModeFacade.java
  39. 11 0
      src/main/java/com/diagbot/facade/QcTypeCasesEntryFacade.java
  40. 248 0
      src/main/java/com/diagbot/facade/QcTypeFacade.java
  41. 68 25
      src/main/java/com/diagbot/facade/QcresultInfoFacade.java
  42. 63 27
      src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java
  43. 8 1
      src/main/java/com/diagbot/mapper/QcCasesEntryMapper.java
  44. 5 0
      src/main/java/com/diagbot/mapper/QcTypeCasesEntryMapper.java
  45. 10 0
      src/main/java/com/diagbot/mapper/QcTypeMapper.java
  46. 33 6
      src/main/java/com/diagbot/mapper/QcresultInfoMapper.java
  47. 64 28
      src/main/java/com/diagbot/service/BehospitalInfoService.java
  48. 7 0
      src/main/java/com/diagbot/service/QcCasesEntryService.java
  49. 6 2
      src/main/java/com/diagbot/service/QcTypeCasesEntryService.java
  50. 5 1
      src/main/java/com/diagbot/service/QcTypeService.java
  51. 32 5
      src/main/java/com/diagbot/service/QcresultInfoService.java
  52. 92 51
      src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java
  53. 66 0
      src/main/java/com/diagbot/service/impl/ExcelExportStylerUserImpl.java
  54. 13 0
      src/main/java/com/diagbot/service/impl/QcCasesEntryServiceImpl.java
  55. 9 2
      src/main/java/com/diagbot/service/impl/QcTypeCasesEntryServiceImpl.java
  56. 7 1
      src/main/java/com/diagbot/service/impl/QcTypeServiceImpl.java
  57. 40 6
      src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java
  58. 6 1
      src/main/java/com/diagbot/task/BehospitalInfoAnalyzeTask.java
  59. 7 1
      src/main/java/com/diagbot/task/TASK_CX.java
  60. 143 0
      src/main/java/com/diagbot/util/ExcelUtils.java
  61. 12 0
      src/main/java/com/diagbot/vo/BehospitalPageVO.java
  62. 19 0
      src/main/java/com/diagbot/vo/DeleteQcTypeVO.java
  63. 23 0
      src/main/java/com/diagbot/vo/ExportQcresultVO.java
  64. 9 1
      src/main/java/com/diagbot/vo/FilterPageVO.java
  65. 8 0
      src/main/java/com/diagbot/vo/FilterVO.java
  66. 0 23
      src/main/java/com/diagbot/vo/HomePageFilterVO.java
  67. 9 5
      src/main/java/com/diagbot/vo/ModelHospitalUpdataVO.java
  68. 22 0
      src/main/java/com/diagbot/vo/QcAbnormalModeVO.java
  69. 25 0
      src/main/java/com/diagbot/vo/QcAbnormalSaveNameVO.java
  70. 18 0
      src/main/java/com/diagbot/vo/QcEntryHospitalVO.java
  71. 15 0
      src/main/java/com/diagbot/vo/QcTypeCasesEntryVO.java
  72. 24 0
      src/main/java/com/diagbot/vo/QcTypeIndexVO.java
  73. 22 0
      src/main/java/com/diagbot/vo/QcTypePageVO.java
  74. 26 0
      src/main/java/com/diagbot/vo/QcTypeSaveVO.java
  75. 18 0
      src/main/java/com/diagbot/vo/QcTypeVO.java
  76. 10 1
      src/main/java/com/diagbot/vo/TaskVO.java
  77. 43 8
      src/main/java/com/diagbot/web/BehospitalInfoController.java
  78. 33 14
      src/main/java/com/diagbot/web/ConsoleByDeptController.java
  79. 78 28
      src/main/java/com/diagbot/web/ConsoleController.java
  80. 4 3
      src/main/java/com/diagbot/web/ModelHospitalController.java
  81. 11 0
      src/main/java/com/diagbot/web/QcAbnormalController.java
  82. 108 0
      src/main/java/com/diagbot/web/QcTypeController.java
  83. 818 419
      src/main/resources/mapper/BehospitalInfoMapper.xml
  84. 70 234
      src/main/resources/mapper/HomePageMapper.xml
  85. 1 1
      src/main/resources/mapper/MedicalRecordMapper.xml
  86. 41 0
      src/main/resources/mapper/QcCasesEntryMapper.xml
  87. 39 0
      src/main/resources/mapper/QcTypeCasesEntryMapper.xml
  88. 13 0
      src/main/resources/mapper/QcTypeMapper.xml
  89. 8 1
      src/main/resources/mapper/QcresultDetailMapper.xml
  90. 387 101
      src/main/resources/mapper/QcresultInfoMapper.xml
  91. 2 2
      src/test/java/com/diagbot/CodeGeneration.java

+ 29 - 0
doc/004.20200527v.1.3.0/qc_init.sql

@@ -0,0 +1,29 @@
+use `qc`;
+
+INSERT INTO `qc`.`sys_menu` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ('32', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控类型维护', '2', 'YH-JCSJWH-ZKLXWH', '1', '0', '3', '用户-基础数据维护-质控类型维护');
+
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('78', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '分页列表', 'FUNC000078', '/qc/qcType/page', 'ALL', '用户-质控类型维护-分页列表', NULL);
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('79', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '新增或更新', 'FUNC000079', '/qc/qcType/saveOrUpdate', 'ALL', '用户-质控类型维护-新增或更新', NULL);
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('80', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '新增时质控条目分组信息', 'FUNC000080', '/qc/qcType/getEntryByHospital', 'ALL', '用户-质控类型维护-新增时质控条目分组信息', NULL);
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('81', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '质控条目检索', 'FUNC000081', '/qc/qcType/index', 'ALL', '用户-质控类型维护-质控条目检索', NULL);
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('82', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '删除', 'FUNC000082', '/qc/qcType/delete', 'ALL', '用户-质控类型维护-删除', NULL);
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('83', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '根据id返回内容', 'FUNC000083', '/qc/qcType/getById', 'ALL', '用户-质控类型维护-根据id返回内容', NULL);
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('84', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取医院数据全部条目', 'FUNC000084', '/qc/modelHospital/getModelHospitalAll', 'ALL', '用户-质控类型维护-获取医院数据全部条目', NULL);
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('85', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '根据id获取医院数据', 'FUNC000085', '/qc/modelHospital/getModelHospitalById', 'ALL', '用户-质控类型维护-根据id获取医院数据', NULL);
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('86', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '添加和修改医院数据模块', 'FUNC000086', '/qc/modelHospital/saveAndupdataModel', 'ALL', '用户-质控类型维护-添加和修改医院数据模块', NULL);
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('87', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '删除医院数据模块', 'FUNC000087', '/qc/modelHospital/clearModelHospital', 'ALL', '用户-质控类型维护-删除医院数据模块', NULL);
+INSERT INTO `qc`.`sys_permission` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `permissionUrl`, `method`, `descritpion`, `remark`) VALUES ('88', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '获取医院全部模块', 'FUNC0000888', '/qc/mode/getModes', 'ALL', '用户-质控类型维护-获取医院全部模块', NULL);
+
+INSERT INTO `qc`.`sys_role_menu` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '32', '用户-基础数据维护-质控类型维护');
+
+INSERT INTO `qc`.`sys_role_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '78', '用户-质控类型维护-分页列表');
+INSERT INTO `qc`.`sys_role_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '79', '用户-质控类型维护-新增或更新');
+INSERT INTO `qc`.`sys_role_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '80', '用户-质控类型维护-新增时质控条目分组信息');
+INSERT INTO `qc`.`sys_role_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '81', '用户-质控类型维护-质控条目检索');
+INSERT INTO `qc`.`sys_role_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '82', '用户-质控类型维护-删除');
+INSERT INTO `qc`.`sys_role_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '83', '用户-质控类型维护-根据id返回内容');
+INSERT INTO `qc`.`sys_role_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '84', '用户-质控类型维护-获取医院数据全部条目');
+INSERT INTO `qc`.`sys_role_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '85', '用户-质控类型维护-根据id获取医院数据');
+INSERT INTO `qc`.`sys_role_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '86', '用户-质控类型维护-添加和修改医院数据模块');
+INSERT INTO `qc`.`sys_role_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '87', '用户-质控类型维护-删除医院数据模块');
+INSERT INTO `qc`.`sys_role_permission` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `permission_id`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', '88', '用户-质控类型维护-获取医院全部模块');

File diff suppressed because it is too large
+ 1056 - 0
doc/005.20200528v1.2.x/qc_init.sql


+ 9 - 0
pom.xml

@@ -35,6 +35,7 @@
         <poi.version>4.1.1</poi.version>
         <aggregator.version>1.1.0</aggregator.version>
         <okhttp.version>4.2.2</okhttp.version>
+        <easypoi.version>4.2.0</easypoi.version>
         <docker-maven-plugin.version>1.2.1</docker-maven-plugin.version>
         <docker.image.prefix>192.168.2.122:5000/diagbotcloud</docker.image.prefix>
         <registryUrl>http://192.168.2.122:5000/repository/diagbotcloud/</registryUrl>
@@ -189,6 +190,14 @@
             <version>${aggregator.version}</version>
         </dependency>
 
+        <!-- easypoi -->
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-spring-boot-starter</artifactId>
+            <version>${easypoi.version}</version>
+        </dependency>
+
+
     </dependencies>
 
     <!-- 私有仓库 -->

+ 1 - 1
src/main/java/com/diagbot/aggregate/AverageStatisticsAggregate.java

@@ -253,7 +253,7 @@ public class AverageStatisticsAggregate {
     @DataProvider("getAverageScore")
     public List<AverageStatisticsDTO> getAverageScore(@InvokeParameter("filterVO") FilterVO filterVO) {
         List<AverageStatisticsDTO> retAverageScoreList = Lists.newLinkedList();
-        List<AverageStatisticsDTO> averageScoreList = qcresultInfoFacade.getAverageScoreByDept(filterVO);
+        List<AverageStatisticsDTO> averageScoreList = qcresultInfoFacade.getAverageScore(filterVO);
         Integer limitCount = filterVO.getLimitCount();
         //质控平均分
         if (ListUtil.isNotEmpty(averageScoreList)) {

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

@@ -7,7 +7,6 @@ import com.diagbot.facade.QcresultInfoFacade;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.vo.FilterVO;
-import com.diagbot.vo.HomePageFilterVO;
 import com.diagbot.vo.QcresultFilterVO;
 import com.google.common.collect.Lists;
 import io.github.lvyahui8.spring.annotation.DataConsumer;
@@ -89,15 +88,10 @@ public class MrStatisticsAggregate {
         retMap.put("死亡人数", 0);
         retMap.put("新生儿人数", 0);
         retMap.put("手术病人数", 0);
-        HomePageFilterVO homePageFilterVO = new HomePageFilterVO();
-        BeanUtil.copyProperties(filterVO, homePageFilterVO);
-        Integer totleNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
-        homePageFilterVO.setDeath(1);
-        Integer deathNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
-        homePageFilterVO.setDeath(null);
-        homePageFilterVO.setNewBorn(1);
-        Integer newBornNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
-        Integer operationNum = behospitalInfoFacade.homePageCountForOperation(filterVO);
+        Integer totleNum = behospitalInfoFacade.leaveHosCount(filterVO);
+        Integer deathNum = behospitalInfoFacade.deathCount(filterVO);
+        Integer newBornNum = behospitalInfoFacade.newBornCount(filterVO);
+        Integer operationNum = behospitalInfoFacade.operationCount(filterVO);
         retMap.put("总人数", totleNum);
         retMap.put("死亡人数", deathNum);
         retMap.put("新生儿人数", newBornNum);

+ 4 - 54
src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java

@@ -136,64 +136,14 @@ public class ResultStatisticsAggregate {
      */
     @DataProvider("entryCountGroupByEntry")
     public List<NumDTO> entryCountGroupByEntry(@InvokeParameter("filterVO") FilterVO filterVO) {
-        DecimalFormat df = new DecimalFormat("#0.00");
         Integer limitCount = filterVO.getLimitCount();
         List<NumDTO> numDTOList = qcresultInfoFacade.entryCountGroupByEntry(filterVO);
         if (ListUtil.isNotEmpty(numDTOList)) {
-            int totle = numDTOList
-                    .stream()
-                    .map(NumDTO::getNum)
-                    .reduce(0, Integer::sum);
             List<NumDTO> retList = Lists.newLinkedList();
-            numDTOList.forEach(numDTO -> {
-                numDTO.setTotleNum(totle);
-                Double percent = BigDecimal.valueOf(numDTO.getNum())
-                        .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
-                        .doubleValue();
-                numDTO.setPercent(percent);
-                String percentStr
-                        = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
-                numDTO.setPercentStr(percentStr);
-            });
-
-            //降序排序
-            Collections.sort(numDTOList, new Comparator<NumDTO>() {
-                @Override
-                public int compare(NumDTO o1, NumDTO o2) {
-                    return o2.getPercent().compareTo(o1.getPercent());
-                }
-            });
-
-            //top9+其他
             if (numDTOList.size() <= limitCount) {
-                retList.addAll(numDTOList);
+                retList = numDTOList;
             } else {
-                int count = 0;
-                double sumPercent = 0d;
-                for (NumDTO numDTO : numDTOList) {
-                    if (retList.size() < limitCount - 1) {
-                        retList.add(numDTO);
-                        count += numDTO.getNum();
-                        sumPercent = BigDecimal.valueOf(sumPercent)
-                                .add(BigDecimal.valueOf(numDTO.getPercent()))
-                                .doubleValue();
-                    } else {
-                        NumDTO otherNumDTO = new NumDTO();
-                        int num = totle - count;
-                        otherNumDTO.setName("其他");
-                        otherNumDTO.setNum(num);
-                        otherNumDTO.setTotleNum(totle);
-                        Double percent = BigDecimal.valueOf(num)
-                                .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
-                                .doubleValue();
-                        otherNumDTO.setPercent(percent);
-                        String percentStr
-                                = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
-                        otherNumDTO.setPercentStr(percentStr);
-                        retList.add(otherNumDTO);
-                        break;
-                    }
-                }
+                retList = numDTOList.subList(0, limitCount);
             }
             return retList;
         }
@@ -201,7 +151,7 @@ public class ResultStatisticsAggregate {
     }
 
     /**
-     * 各科室缺陷占比
+     * 各科室缺陷占比-全院-首页
      *
      * @param filterVO
      * @return
@@ -209,7 +159,7 @@ public class ResultStatisticsAggregate {
     @DataProvider("entryByDept")
     public List<NumDTO> entryByDept(@InvokeParameter("filterVO") FilterVO filterVO) {
         Integer limitCount = filterVO.getLimitCount();
-        List<NumDTO> numDTOList = behospitalInfoFacade.resultStatisticsByDept2(filterVO);
+        List<NumDTO> numDTOList = behospitalInfoFacade.entryByDept(filterVO);
         if (ListUtil.isNotEmpty(numDTOList)) {
             int totle = numDTOList
                     .stream()

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

@@ -60,6 +60,11 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/qc/behospitalInfo/page_dept").permitAll()
                 .antMatchers("/qc/behospitalInfo/page_person").permitAll()
                 .antMatchers("/consoleByDept/getDept").permitAll()
+                .antMatchers("/qc/casesEntryHospital/findQcCasesEntry").permitAll()
+                .antMatchers("/qc/behospitalInfo/exportExcel").permitAll()
+                .antMatchers("/qc/behospitalInfo/exportQcresult").permitAll()
+                .antMatchers("/qc/behospitalInfo/exportQcresultByDept").permitAll()
+                .antMatchers("/qc/abnormal/getQcAnnormalMode").permitAll()
                 .antMatchers("/**").authenticated();
 //                .antMatchers("/**").permitAll();
     }

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

@@ -103,6 +103,11 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/qc/behospitalInfo/page_dept", request)
                 || matchers("/qc/behospitalInfo/page_person", request)
                 || matchers("/consoleByDept/getDept", request)
+                || matchers("/qc/casesEntryHospital/findQcCasesEntry", request)
+                || matchers("/qc/behospitalInfo/exportExcel", request)
+                || matchers("/qc/behospitalInfo/exportQcresult", request)
+                || matchers("/qc/behospitalInfo/exportQcresultByDept", request)
+                || matchers("/qc/abnormal/getQcAnnormalMode", request)
                 || matchers("/", request)) {
             return true;
         }

+ 6 - 4
src/main/java/com/diagbot/dto/AverageStatisticsDTO.java

@@ -14,10 +14,12 @@ public class AverageStatisticsDTO {
     private String id;
     private String name;
     private Integer num;
-    private Double averageValue=0d;
-    private Double totleValue=0d;
+    private Double averageValue = 0d;
+    private Double totleValue = 0d;
     //环比平均值
-    private Double lastAverageValue=0d;
+    private Double lastAverageValue = 0d;
     //同比平均值
-    private Double lastYearAverageValue=0d;
+    private Double lastYearAverageValue = 0d;
+    //科室分类
+    private String deptClass;
 }

+ 18 - 0
src/main/java/com/diagbot/dto/CaseAndDeptNumDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/28 14:49
+ */
+@Getter
+@Setter
+public class CaseAndDeptNumDTO extends NumDTO {
+    private String deptId;
+    private String deptName;
+    private Long casesId;
+    private String casesName;
+}

+ 16 - 0
src/main/java/com/diagbot/dto/CaseNumDTO.java

@@ -0,0 +1,16 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/28 14:45
+ */
+@Getter
+@Setter
+public class CaseNumDTO extends NumDTO {
+    private Long casesId;
+    private String casesName;
+}

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

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

+ 9 - 0
src/main/java/com/diagbot/dto/ExportExcelCase.java

@@ -0,0 +1,9 @@
+package com.diagbot.dto;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/6/2 19:47
+ */
+public class ExportExcelCase {
+}

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

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

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

@@ -0,0 +1,26 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/6/2 19:00
+ */
+@Getter
+@Setter
+public class ExportExcelDTO {
+    @Excel(name = "出院科室", needMerge = true)
+    private String behDeptName;
+    @Excel(name = "平均分数", needMerge = true)
+    private String avgScore;
+    @ExcelCollection(name = "")
+    private List<ExportExcelBehospitalDTO> excelBehospitalDTOS;
+
+
+}

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

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

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

@@ -0,0 +1,58 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/6/2 19:57
+ */
+@Getter
+@Setter
+public class ExportQcresultDTO {
+    /**
+     * 科室编码/科室id
+     */
+    private String deptId;
+    /**
+     * 科室名称
+     */
+    private String deptName;
+    /**
+     * 主管医生名称(主任医生+主治医生)
+     */
+    private String doctorName;
+    /**
+     * 患者姓名
+     */
+    private String patientName;
+    /**
+     * 病历号
+     */
+    private String behospitalCode;
+    /**
+     * 入院日期
+     */
+    private String behospitalDate;
+    /**
+     * 出院日期
+     */
+    private String leaveHospitalDate;
+    /**
+     * 质控评分
+     */
+    private Double scoreRes;
+    /**
+     * 科室质控平均分
+     */
+    private Double averageScore;
+    /**
+     * 存在问题
+     */
+    private String msg;
+    /**
+     * 错误所属区块
+     */
+    private String casesName;
+}

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

@@ -28,4 +28,7 @@ public class LevelStatisticsDTO {
     private String firstLevelPercentStr;
     private String secondLevelPercentStr;
     private String thirdLevelPercentStr;
+
+    private String deptClassId;
+    private String deptClass;
 }

+ 34 - 0
src/main/java/com/diagbot/dto/MedicalRecordDTO.java

@@ -0,0 +1,34 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-13
+ */
+@Data
+public class MedicalRecordDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 模块id
+     */
+    private Long modeId;
+
+    /**
+     * 病历标题
+     */
+    private String recTitle;
+
+    /**
+     * 病历日期
+     */
+    private String recDate;
+}

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

@@ -5,6 +5,7 @@ import lombok.Setter;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -27,6 +28,10 @@ public class MsgDTO {
     private String info;
     //标准提示信息
     private String standardMsg;
+    // 操作类型(1:新增,2:删除,3:修改)
+    private Integer optType;
+    // 初始类型(1:机器,2:人工)
+    private Integer gradeType;
     //单项否决
     private String isReject;
     //模块名称
@@ -39,6 +44,10 @@ public class MsgDTO {
     private BigDecimal casesScore;
     // 条目ID
     private Long casesEntryId;
+    // 记录创建时间
+    private Date gmtCreate;
+    // 记录修改时间,如果时间是1970年则表示纪录未修改
+    private Date gmtModified;
     // 条目id对应页面数据的key值
     private List<Long> pageKeyList = new ArrayList<>();
 }

+ 29 - 0
src/main/java/com/diagbot/dto/QcAbnormalModeDTO.java

@@ -0,0 +1,29 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-06-03 10:56
+ */
+@Setter
+@Getter
+public class QcAbnormalModeDTO {
+    /**
+     * 异常描述
+     */
+    private String description;
+
+    private Long modeId;
+    /**
+     * 模块名称
+     */
+    private String modeMame;
+
+
+    private List<QcModeAllDTO> QcModeDatas;
+}

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

@@ -0,0 +1,38 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author zhoutg
+ * @Description:
+ * @date 2020-04-27 10:09
+ */
+@Setter
+@Getter
+public class QcCasesEntrySimpleDTO {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 条目
+     */
+    private String name;
+
+    /**
+     * 0-未启用 1-启用
+     */
+    private String isUsed;
+
+    /**
+     * modeName
+     */
+    private String modeName;
+
+    /**
+     * 是否勾选
+     */
+    private Integer sel;
+}

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

@@ -0,0 +1,25 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class QcTypeDTO {
+    // 主键
+    private Long id;
+    // 医院ID
+    private Long hospitalId;
+    // 质控类型名称
+    private String name;
+    // 质控类型和质控条目对应关系
+    private Map<String, List<QcCasesEntrySimpleDTO>> entryMap;
+}

+ 66 - 0
src/main/java/com/diagbot/dto/QcTypePageDTO.java

@@ -0,0 +1,66 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 质控类型标准
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-05-14
+ */
+@Data
+public class QcTypePageDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 质控类型名称
+     */
+    private String name;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+}

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

@@ -46,4 +46,14 @@ public class RecordContentDTO implements Serializable {
      */
     private String recTitle;
 
+    /**
+     * 病历类别编号
+     */
+    private String recTypeId;
+
+    /**
+     * 模块id
+     */
+    private Long modeId;
+
 }

+ 43 - 1
src/main/java/com/diagbot/entity/BehospitalInfo.java

@@ -25,7 +25,7 @@ public class BehospitalInfo implements Serializable {
     /**
      * 病人住院ID
      */
-    @TableId(value = "behospital_code",type = IdType.INPUT)
+    @TableId(value = "behospital_code", type = IdType.INPUT)
     private String behospitalCode;
 
     /**
@@ -148,6 +148,11 @@ public class BehospitalInfo implements Serializable {
      */
     private String directorDoctorName;
 
+    /**
+     * 是否归档(0:未归档,1:已归档)
+     */
+    private String isPlacefile;
+
     /**
      * 是否删除,N:未删除,Y:删除
      */
@@ -180,6 +185,7 @@ public class BehospitalInfo implements Serializable {
     public void setBehospitalCode(String behospitalCode) {
         this.behospitalCode = behospitalCode;
     }
+
     public Long getHospitalId() {
         return hospitalId;
     }
@@ -187,6 +193,7 @@ public class BehospitalInfo implements Serializable {
     public void setHospitalId(Long hospitalId) {
         this.hospitalId = hospitalId;
     }
+
     public String getName() {
         return name;
     }
@@ -194,6 +201,7 @@ public class BehospitalInfo implements Serializable {
     public void setName(String name) {
         this.name = name;
     }
+
     public String getSex() {
         return sex;
     }
@@ -201,6 +209,7 @@ public class BehospitalInfo implements Serializable {
     public void setSex(String sex) {
         this.sex = sex;
     }
+
     public Date getBirthday() {
         return birthday;
     }
@@ -208,6 +217,7 @@ public class BehospitalInfo implements Serializable {
     public void setBirthday(Date birthday) {
         this.birthday = birthday;
     }
+
     public String getFileCode() {
         return fileCode;
     }
@@ -215,6 +225,7 @@ public class BehospitalInfo implements Serializable {
     public void setFileCode(String fileCode) {
         this.fileCode = fileCode;
     }
+
     public Long getQcTypeId() {
         return qcTypeId;
     }
@@ -222,6 +233,7 @@ public class BehospitalInfo implements Serializable {
     public void setQcTypeId(Long qcTypeId) {
         this.qcTypeId = qcTypeId;
     }
+
     public String getWardCode() {
         return wardCode;
     }
@@ -229,6 +241,7 @@ public class BehospitalInfo implements Serializable {
     public void setWardCode(String wardCode) {
         this.wardCode = wardCode;
     }
+
     public String getWardName() {
         return wardName;
     }
@@ -236,6 +249,7 @@ public class BehospitalInfo implements Serializable {
     public void setWardName(String wardName) {
         this.wardName = wardName;
     }
+
     public String getBehDeptId() {
         return behDeptId;
     }
@@ -243,6 +257,7 @@ public class BehospitalInfo implements Serializable {
     public void setBehDeptId(String behDeptId) {
         this.behDeptId = behDeptId;
     }
+
     public String getBehDeptName() {
         return behDeptName;
     }
@@ -250,6 +265,7 @@ public class BehospitalInfo implements Serializable {
     public void setBehDeptName(String behDeptName) {
         this.behDeptName = behDeptName;
     }
+
     public String getBedCode() {
         return bedCode;
     }
@@ -257,6 +273,7 @@ public class BehospitalInfo implements Serializable {
     public void setBedCode(String bedCode) {
         this.bedCode = bedCode;
     }
+
     public String getBedName() {
         return bedName;
     }
@@ -264,6 +281,7 @@ public class BehospitalInfo implements Serializable {
     public void setBedName(String bedName) {
         this.bedName = bedName;
     }
+
     public String getInsuranceName() {
         return insuranceName;
     }
@@ -271,6 +289,7 @@ public class BehospitalInfo implements Serializable {
     public void setInsuranceName(String insuranceName) {
         this.insuranceName = insuranceName;
     }
+
     public String getJobType() {
         return jobType;
     }
@@ -278,6 +297,7 @@ public class BehospitalInfo implements Serializable {
     public void setJobType(String jobType) {
         this.jobType = jobType;
     }
+
     public Date getBehospitalDate() {
         return behospitalDate;
     }
@@ -285,6 +305,7 @@ public class BehospitalInfo implements Serializable {
     public void setBehospitalDate(Date behospitalDate) {
         this.behospitalDate = behospitalDate;
     }
+
     public Date getLeaveHospitalDate() {
         return leaveHospitalDate;
     }
@@ -292,6 +313,7 @@ public class BehospitalInfo implements Serializable {
     public void setLeaveHospitalDate(Date leaveHospitalDate) {
         this.leaveHospitalDate = leaveHospitalDate;
     }
+
     public String getDiagnoseIcd() {
         return diagnoseIcd;
     }
@@ -299,6 +321,7 @@ public class BehospitalInfo implements Serializable {
     public void setDiagnoseIcd(String diagnoseIcd) {
         this.diagnoseIcd = diagnoseIcd;
     }
+
     public String getDiagnose() {
         return diagnose;
     }
@@ -306,6 +329,7 @@ public class BehospitalInfo implements Serializable {
     public void setDiagnose(String diagnose) {
         this.diagnose = diagnose;
     }
+
     public String getBehDoctorId() {
         return behDoctorId;
     }
@@ -313,6 +337,7 @@ public class BehospitalInfo implements Serializable {
     public void setBehDoctorId(String behDoctorId) {
         this.behDoctorId = behDoctorId;
     }
+
     public String getBehDoctorName() {
         return behDoctorName;
     }
@@ -320,6 +345,7 @@ public class BehospitalInfo implements Serializable {
     public void setBehDoctorName(String behDoctorName) {
         this.behDoctorName = behDoctorName;
     }
+
     public String getDoctorId() {
         return doctorId;
     }
@@ -327,6 +353,7 @@ public class BehospitalInfo implements Serializable {
     public void setDoctorId(String doctorId) {
         this.doctorId = doctorId;
     }
+
     public String getDoctorName() {
         return doctorName;
     }
@@ -334,6 +361,7 @@ public class BehospitalInfo implements Serializable {
     public void setDoctorName(String doctorName) {
         this.doctorName = doctorName;
     }
+
     public String getDirectorDoctorId() {
         return directorDoctorId;
     }
@@ -341,6 +369,7 @@ public class BehospitalInfo implements Serializable {
     public void setDirectorDoctorId(String directorDoctorId) {
         this.directorDoctorId = directorDoctorId;
     }
+
     public String getDirectorDoctorName() {
         return directorDoctorName;
     }
@@ -348,6 +377,15 @@ public class BehospitalInfo implements Serializable {
     public void setDirectorDoctorName(String directorDoctorName) {
         this.directorDoctorName = directorDoctorName;
     }
+
+    public String getIsPlacefile() {
+        return isPlacefile;
+    }
+
+    public void setIsPlacefile(String isPlacefile) {
+        this.isPlacefile = isPlacefile;
+    }
+
     public String getIsDeleted() {
         return isDeleted;
     }
@@ -355,6 +393,7 @@ public class BehospitalInfo implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
+
     public Date getGmtCreate() {
         return gmtCreate;
     }
@@ -362,6 +401,7 @@ public class BehospitalInfo implements Serializable {
     public void setGmtCreate(Date gmtCreate) {
         this.gmtCreate = gmtCreate;
     }
+
     public Date getGmtModified() {
         return gmtModified;
     }
@@ -369,6 +409,7 @@ public class BehospitalInfo implements Serializable {
     public void setGmtModified(Date gmtModified) {
         this.gmtModified = gmtModified;
     }
+
     public String getCreator() {
         return creator;
     }
@@ -376,6 +417,7 @@ public class BehospitalInfo implements Serializable {
     public void setCreator(String creator) {
         this.creator = creator;
     }
+
     public String getModifier() {
         return modifier;
     }

+ 19 - 0
src/main/java/com/diagbot/entity/CommonParam.java

@@ -0,0 +1,19 @@
+package com.diagbot.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @Author: ztg
+ * @Date: 2018/12/14 14:15
+ */
+@Getter
+@Setter
+public class CommonParam {
+    private String person;     //操作人
+    private Date now;          //当前时间
+    private int insertOrUpdate;//更新或新增标识
+}

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

@@ -45,6 +45,11 @@ public class MedicalRecord implements Serializable {
      */
     private String recTypeId;
 
+    /**
+     * 模块id
+     */
+    private Long modeId;
+
     /**
      * 病历日期
      */

+ 15 - 1
src/main/java/com/diagbot/entity/QcType.java

@@ -12,7 +12,7 @@ import java.util.Date;
  * </p>
  *
  * @author gaodm
- * @since 2020-04-13
+ * @since 2020-05-27
  */
 public class QcType implements Serializable {
 
@@ -24,6 +24,11 @@ public class QcType implements Serializable {
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
     /**
      * 质控类型名称
      */
@@ -67,6 +72,14 @@ public class QcType implements Serializable {
         this.id = id;
     }
 
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+
     public String getName() {
         return name;
     }
@@ -127,6 +140,7 @@ public class QcType implements Serializable {
     public String toString() {
         return "QcType{" +
                 "id=" + id +
+                ", hospitalId=" + hospitalId +
                 ", name=" + name +
                 ", remark=" + remark +
                 ", isDeleted=" + isDeleted +

+ 10 - 0
src/main/java/com/diagbot/entity/QcresultDetail.java

@@ -72,6 +72,16 @@ public class QcresultDetail implements Serializable {
      */
     private Integer isReject;
 
+    /**
+     * 初始类型(1:机器,2:人工)
+     */
+    private Integer gradeType;
+
+    /**
+     * 操作类型(1:新增,2:删除,3:修改)
+     */
+    private Integer optType;
+
     /**
      * 是否删除,N:未删除,Y:删除
      */

+ 6 - 94
src/main/java/com/diagbot/entity/SysTaskCron.java

@@ -2,6 +2,7 @@ package com.diagbot.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -14,6 +15,7 @@ import java.util.Date;
  * @author gaodm
  * @since 2020-04-15
  */
+@Data
 public class SysTaskCron implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -69,98 +71,8 @@ public class SysTaskCron implements Serializable {
      */
     private String remark;
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getIsDeleted() {
-        return isDeleted;
-    }
-
-    public void setIsDeleted(String isDeleted) {
-        this.isDeleted = isDeleted;
-    }
-
-    public 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 getCronCode() {
-        return cronCode;
-    }
-
-    public void setCronCode(String cronCode) {
-        this.cronCode = cronCode;
-    }
-
-    public String getCron() {
-        return cron;
-    }
-
-    public void setCron(String cron) {
-        this.cron = cron;
-    }
-
-    public Integer getIsUsed() {
-        return isUsed;
-    }
-
-    public void setIsUsed(Integer isUsed) {
-        this.isUsed = isUsed;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    @Override
-    public String toString() {
-        return "SysTaskCron{" +
-                "id=" + id +
-                ", isDeleted=" + isDeleted +
-                ", gmtCreate=" + gmtCreate +
-                ", gmtModified=" + gmtModified +
-                ", creator=" + creator +
-                ", modifier=" + modifier +
-                ", cronCode=" + cronCode +
-                ", cron=" + cron +
-                ", remark=" + remark +
-                "}";
-    }
+    /**
+     * 参数
+     */
+    private String param;
 }

+ 50 - 0
src/main/java/com/diagbot/enums/InsertOrUpdateEnum.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 InsertOrUpdateEnum implements KeyedNamed {
+    Insert(1, "新增"),
+    Update(2, "修改");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    InsertOrUpdateEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static InsertOrUpdateEnum getEnum(int key) {
+        for (InsertOrUpdateEnum item : InsertOrUpdateEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        InsertOrUpdateEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}
+

+ 198 - 131
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -10,6 +10,8 @@ import com.diagbot.dto.AnalyzeDTO;
 import com.diagbot.dto.AnalyzeRunDTO;
 import com.diagbot.dto.BehosDTO;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.ExportExcelDTO;
+import com.diagbot.dto.MedicalRecordDTO;
 import com.diagbot.dto.MsgApiDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.OutputInfo;
@@ -25,6 +27,7 @@ import com.diagbot.entity.DoctorAdvice;
 import com.diagbot.entity.HomeDiagnoseInfo;
 import com.diagbot.entity.HomeOperationInfo;
 import com.diagbot.entity.HomePage;
+import com.diagbot.entity.MedicalRecord;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
@@ -33,6 +36,7 @@ import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.EncrypDES;
 import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.MapUtil;
 import com.diagbot.util.StringUtil;
@@ -43,6 +47,7 @@ import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeRunVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.ExportQcresultVO;
 import com.diagbot.vo.GetDetailVO;
 import com.diagbot.vo.MedrecVo;
 import com.diagbot.vo.QcResultAlgQueryVO;
@@ -54,6 +59,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
@@ -106,6 +112,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     QcQuestionFacade qcQuestionFacade;
     @Autowired
     QcModelHospitalFacade qcModelHospitalFacade;
+    @Autowired
+    private FilterFacade filterFacade;
 
     /**
      * 分页
@@ -114,32 +122,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
      * @return
      */
     public IPage<BehospitalInfoDTO> pageFac(BehospitalPageVO behospitalPageVO) {
-        //入参验证
-        //入院时间
-        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart()) {
-            behospitalPageVO.setBehosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getBehosDateStart()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateEnd()) {
-            behospitalPageVO.setBehosDateEnd(DateUtil.getLastTimeOfDay(behospitalPageVO.getBehosDateEnd()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart() && null != behospitalPageVO.getBehosDateEnd()) {
-            if (DateUtil.after(behospitalPageVO.getBehosDateStart(), behospitalPageVO.getBehosDateEnd())) {
-                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "入院时间的开始时间必须小于结束时间!");
-            }
-        }
-        //出院时间
-        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart()) {
-            behospitalPageVO.setLeaveHosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getLeaveHosDateStart()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateEnd()) {
-            behospitalPageVO.setLeaveHosDateEnd(DateUtil.getLastTimeOfDay(behospitalPageVO.getLeaveHosDateEnd()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart() && null != behospitalPageVO.getLeaveHosDateEnd()) {
-            if (DateUtil.after(behospitalPageVO.getLeaveHosDateStart(), behospitalPageVO.getLeaveHosDateEnd())) {
-                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "出院时间的开始时间必须小于结束时间!");
-            }
-        }
-        behospitalPageVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
+        behospitalPageSet(behospitalPageVO);
         IPage<BehospitalInfoDTO> res = getPage(behospitalPageVO);
         return res;
     }
@@ -220,7 +203,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     public QueryVo dealCommonData(Long hospitalId, AnalyzeVO analyzeVO) {
         // 获取质控条目
         List<QcCasesEntryDTO> qcCasesEntryDTOList = qcCasesEntryFacade.getQcCasesEntry(analyzeVO);
-        if(ListUtil.isEmpty(qcCasesEntryDTOList)){
+        if (ListUtil.isEmpty(qcCasesEntryDTOList)) {
             throw new CommonException(CommonErrorCode.NOT_EXISTS, "该病历无关联的质控条目!");
         }
 
@@ -269,6 +252,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .eq("hospital_id", hospitalId)
                     .eq("home_page_id", homePage.getHomePageId())
+                    .orderByAsc("diagnose_order_no")
             );
 
             // 获取首页手术信息
@@ -276,6 +260,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                     .eq("is_deleted", IsDeleteEnum.N.getKey())
                     .eq("hospital_id", hospitalId)
                     .eq("home_page_id", homePage.getHomePageId())
+                    .orderByAsc("operation_order_no")
             );
         }
 
@@ -287,6 +272,22 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         queryVo.setInputCatalogueMap(getInputCatalogueMap(qcCasesEntryDTOList)); // 设置质控条目编码
         List<MedrecVo> medrecVoList = new ArrayList<>(); // 设置内容
 
+
+        // 添加住院病历信息
+        List<BehospitalInfo> behospitalInfoList = this.list(new QueryWrapper<BehospitalInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", hospitalId)
+                .eq("behospital_code", analyzeVO.getBehospitalCode())
+        );
+        if (ListUtil.isNotEmpty(behospitalInfoList)) {
+            MedrecVo medrecVo = new MedrecVo();
+            medrecVo.setTitle("住院病历信息");
+            Map<String, Object> content = new HashMap<>();
+            content.put("content", behospitalInfoList);
+            medrecVo.setContent(content);
+            medrecVoList.add(medrecVo);
+        }
+
         addData("入院记录", recMap, medrecVoList);
         addData("病危通知书", recMap, medrecVoList);
         addData("阶段小结", recMap, medrecVoList);
@@ -346,7 +347,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         if (!analyzeVO.getIsTask()) {
             hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
         }
-//        Long hospitalId = 1L; // 写死
+        //        Long hospitalId = 1L; // 写死
         analyzeVO.setHospitalId(hospitalId);
 
         // 处理公共数据
@@ -379,7 +380,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         }
 
         // 对info赋值
-        for(QcResultAlgVO bean : qcResultAlgVOList) {
+        for (QcResultAlgVO bean : qcResultAlgVOList) {
             String info = codeToInfoMap.get(bean.getCode());
             if (StringUtil.isNotBlank(info)) {
                 bean.setInfo(info);
@@ -395,6 +396,19 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         AlgorithmDTO algorithmDTO = algorithmFacade.getAlgorithmRes(algorithmVO);
         //保存
         Map<String, Object> pageMap = outputInfo.getPageData();
+        // 手动拼接数据【知情同意书】【谈话告知书】
+        List<MedicalRecord> recordList = medicalRecordFacade.list(new QueryWrapper<MedicalRecord>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("behospital_code", analyzeVO.getBehospitalCode())
+                .eq("hospital_id", hospitalId)
+                .in("mode_id", Arrays.asList(53, 54))
+                .orderByAsc("rec_date")
+        );
+        List<MedicalRecordDTO> medicalRecordDTOList = BeanUtil.listCopyTo(recordList, MedicalRecordDTO.class);
+        Map<Long, List<MedicalRecordDTO>> recordMap = EntityUtil.makeEntityListMap(medicalRecordDTOList, "modeId");
+        pageMap.put("知情同意书", recordMap.get(53L));
+        pageMap.put("谈话告知书", recordMap.get(54L));
+
         String pageData = JSON.toJSONString(pageMap);
         // 获取菜单信息
         List<QcModeDTO> qcModeDTOList = qcModeFacade.getMenu(pageMap);
@@ -403,8 +417,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         Date date = qcresultInfoFacade.saveQcResult(algorithmDTO, algorithmVO, analyzeVO, pageData, menuData, analyzeVO.getIsTask());
 
         // 返回提示信息
-//        List<MsgDTO> msgDTOList = getMsg(analyzeVO);
-//        Map<String, List<MsgDTO>> msgMap = EntityUtil.makeEntityListMap(msgDTOList, "modelName");
+        //        List<MsgDTO> msgDTOList = getMsg(analyzeVO);
+        //        Map<String, List<MsgDTO>> msgMap = EntityUtil.makeEntityListMap(msgDTOList, "modelName");
 
         //返回参数组装
         AnalyzeDTO analyzeDTO = new AnalyzeDTO();
@@ -433,7 +447,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             MedrecVo medrecVo = new MedrecVo();
             medrecVo.setTitle(key);
             Map<String, Object> content = new HashMap<>();
-            content.put("content", list.stream().map(r -> r.getXmlText()).collect(Collectors.toList()));
+            content.put("content", list);
             medrecVo.setContent(content);
             medrecVoList.add(medrecVo);
         }
@@ -452,18 +466,18 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         MedrecVo medrecVo = new MedrecVo();
         medrecVo.setTitle(key);
         Map<String, Object> content = new HashMap<>();
-        Map<String, List<String>> listMap = new HashMap<>();
+        Map<String, Object> listMap = new HashMap<>();
         Boolean flag = false;
         for (String k : keyList) {
             if (ListUtil.isNotEmpty(recMap.get(k))) {
-                listMap.put(k, recMap.get(k).stream().map(r -> r.getXmlText()).collect(Collectors.toList()));
+                listMap.put(k, recMap.get(k));
                 flag = true;
             }
         }
         if (flag) {
             // 会诊记录特殊处理,有会诊申请单,没有会诊结果单,复制一份到会诊结果单
-            if ("会诊记录".equals(key) && ListUtil.isNotEmpty(listMap.get("会诊申请单"))
-                    && ListUtil.isEmpty(listMap.get("会诊结果单"))) {
+            if ("会诊记录".equals(key) && listMap.get("会诊申请单") != null
+                    && listMap.get("会诊结果单") == null) {
                 listMap.put("会诊结果单", listMap.get("会诊申请单"));
             }
             content.put("content", listMap);
@@ -484,7 +498,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         MedrecVo medrecVo = new MedrecVo();
         medrecVo.setTitle(key);
         Map<String, Object> content = new HashMap<>();
-        Map<String, List<String>> listMap = new HashMap<>();
+        Map<String, Object> listMap = new HashMap<>();
         List<RecordContentDTO> recordContentDTOList = recMap.get(key);
         if (ListUtil.isNotEmpty(recordContentDTOList)) {
             Map<String, List<RecordContentDTO>> keyMap =
@@ -492,7 +506,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             Set<String> keyList = keyMap.keySet();
             for (String k : keyList) {
                 if (ListUtil.isNotEmpty(keyMap.get(k))) {
-                    listMap.put(k, keyMap.get(k).stream().map(r -> r.getXmlText()).collect(Collectors.toList()));
+                    listMap.put(k, keyMap.get(k));
                 }
             }
             content.put("content", listMap);
@@ -509,8 +523,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
      * @param medrecVoList
      * @param map
      */
-    public void addDataWithKeyConvert(String key,  List<DoctorAdvice> list,
-                               List<MedrecVo> medrecVoList, Map<String, String> map, List<String> dateList) {
+    public void addDataWithKeyConvert(String key, List<DoctorAdvice> list,
+                                      List<MedrecVo> medrecVoList, Map<String, String> map, List<String> dateList) {
         MedrecVo medrecVo = new MedrecVo();
         medrecVo.setTitle(key);
         Map<String, Object> content = new HashMap<>();
@@ -523,7 +537,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
                 for (String objKey : objectMap.keySet()) {
                     if (map.get(objKey) != null) {
                         if (dateList.contains(objKey)) {
-                            Date date = (Date)objectMap.get(objKey);
+                            Date date = (Date) objectMap.get(objKey);
                             res.put(map.get(objKey), DateUtil.formatDateTime(date).replaceAll("null", ""));
                         } else {
                             res.put(map.get(objKey), String.valueOf(objectMap.get(objKey)).replaceAll("null", ""));
@@ -556,7 +570,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         for (String objKey : objectMap.keySet()) {
             if (dicMap.containsKey(objKey)) {
                 if (dateList.contains(objKey)) {
-                    Date date = (Date)objectMap.get(objKey);
+                    Date date = (Date) objectMap.get(objKey);
                     res.put(dicMap.get(objKey), DateUtil.formatDateTime(date).replaceAll("null", ""));
                 } else {
                     res.put(dicMap.get(objKey), String.valueOf(objectMap.get(objKey)).replaceAll("null", ""));
@@ -568,6 +582,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
     /**
      * 拼接数据(病案首页),从数据字典获取信息转换
+     *
      * @param key
      * @param homePage
      * @param medrecVoList
@@ -575,7 +590,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
      * @param homeDiagnoseInfoList
      * @param homeOperationInfoList
      */
-    public void addDataWithFirstPage(String key,  HomePage homePage, List<MedrecVo> medrecVoList, Map<String, Map<String, String>> dicMap,
+    public void addDataWithFirstPage(String key, HomePage homePage, List<MedrecVo> medrecVoList, Map<String, Map<String, String>> dicMap,
                                      List<HomeDiagnoseInfo> homeDiagnoseInfoList, List<HomeOperationInfo> homeOperationInfoList) {
         MedrecVo medrecVo = new MedrecVo();
         medrecVo.setTitle(key);
@@ -588,8 +603,12 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             for (String objKey : objectMap.keySet()) {
                 if (map.containsKey(objKey)) {
                     if (firstPageDate.contains(objKey)) {
-                        Date date = (Date)objectMap.get(objKey);
-                        content.put(map.get(objKey), DateUtil.formatDateTime(date).replaceAll("null", ""));
+                        Date date = (Date) objectMap.get(objKey);
+                        if ("birthday".equals(objKey)) {
+                            content.put(map.get(objKey), DateUtil.formatDate(date));
+                        } else {
+                            content.put(map.get(objKey), DateUtil.formatDateTime(date));
+                        }
                     } else {
                         content.put(map.get(objKey), String.valueOf(objectMap.get(objKey)).replaceAll("null", ""));
                     }
@@ -655,44 +674,33 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
 
     /**
-     * 执行未评分的病历
+     * 处理定时任务入参
+     *
+     * @param param
+     * @param taskVO
      */
-    public void execute() {
-        TaskVO taskVO = new TaskVO();
-        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);
+    public void dealTaskVO(String param, TaskVO taskVO) {
+        if (StringUtil.isNotBlank(param)) {
+            String[] hos = param.split(",");
+            List<Long> hosptialIdList = new ArrayList<>();
+            for (String id : hos) {
+                hosptialIdList.add(Long.parseLong(id));
+            }
+            taskVO.setHosptialIdList(hosptialIdList);
         }
-
-//        List<BehospitalInfo> behospitalInfoList = this.list(new QueryWrapper<BehospitalInfo>()
-//                .eq("is_deleted", IsDeleteEnum.N.getKey())
-//        );
-//
-//        int i = 1;
-//        while(i < 100) {
-//            for (BehospitalInfo bean : behospitalInfoList) {
-//                AnalyzeVO analyzeVO = new AnalyzeVO();
-//                analyzeVO.setIsTask(true);
-//                analyzeVO.setHospitalId(bean.getHospitalId());
-//                analyzeVO.setBehospitalCode(bean.getBehospitalCode());
-//                authServiceClient.analyze_rpc(analyzeVO);
-//                System.out.println(i++);
-//            }
-//        }
     }
 
-
     /**
-     * 对出院日期之前3天的未评分的病历进行评分
+     * 评分
      */
-    public void execute2() {
-        TaskVO taskVO = new TaskVO();
-        Date date = DateUtil.addDay(DateUtil.now(), -3);
-        taskVO.setLeaveDate(date);
+    public void execute(TaskVO taskVO, String param) {
+        // 处理医院信息
+        dealTaskVO(param, taskVO);
+        // 处理时间过滤
+        if (taskVO.getType() != null && taskVO.getType() == 1) {
+            Date date = DateUtil.addDay(DateUtil.now(), -3);
+            taskVO.setLeaveDate(date);
+        }
         List<BehospitalInfo> behospitalInfoList = getNoGrade(taskVO);
         for (BehospitalInfo bean : behospitalInfoList) {
             AnalyzeVO analyzeVO = new AnalyzeVO();
@@ -703,6 +711,21 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         }
     }
 
+
+    // /**
+    //  * 对出院日期之前3天的未评分的病历进行评分
+    //  */
+    // public void execute2(TaskVO taskVO) {
+    //     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
      *
@@ -751,7 +774,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         if (qcResultDTO == null) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
                     "该病历未评分!【hospitalId=" + hospitalId + "】【behospitalCode="
-                    + getDetailVO.getBehospitalCode() + "】");
+                            + getDetailVO.getBehospitalCode() + "】");
         }
         QcResultApiDTO qcResultApiDTO = new QcResultApiDTO();
         BeanUtil.copyProperties(qcResultDTO, qcResultApiDTO);
@@ -769,69 +792,18 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     }
 
     /**
-     *
      * @param behospitalPageVO
      * @return
      */
     public IPage<BehospitalInfoDTO> pagePerson(BehospitalPageVO behospitalPageVO) {
-        //入参验证
-        //入院时间
-        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart()) {
-            behospitalPageVO.setBehosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getBehosDateStart()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateEnd()) {
-            behospitalPageVO.setBehosDateEnd(DateUtil.getLastTimeOfDay(behospitalPageVO.getBehosDateEnd()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart() && null != behospitalPageVO.getBehosDateEnd()) {
-            if (DateUtil.after(behospitalPageVO.getBehosDateStart(), behospitalPageVO.getBehosDateEnd())) {
-                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "入院时间的开始时间必须小于结束时间!");
-            }
-        }
-        //出院时间
-        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart()) {
-            behospitalPageVO.setLeaveHosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getLeaveHosDateStart()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateEnd()) {
-            behospitalPageVO.setLeaveHosDateEnd(DateUtil.getLastTimeOfDay(behospitalPageVO.getLeaveHosDateEnd()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart() && null != behospitalPageVO.getLeaveHosDateEnd()) {
-            if (DateUtil.after(behospitalPageVO.getLeaveHosDateStart(), behospitalPageVO.getLeaveHosDateEnd())) {
-                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "出院时间的开始时间必须小于结束时间!");
-            }
-        }
-        behospitalPageVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
+        behospitalPageSet(behospitalPageVO);
         behospitalPageVO.setUserId(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
         IPage<BehospitalInfoDTO> res = getPageByPerson(behospitalPageVO);
         return res;
     }
 
     public IPage<BehospitalInfoDTO> pageDept(BehospitalPageVO behospitalPageVO) {
-        //入参验证
-        //入院时间
-        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart()) {
-            behospitalPageVO.setBehosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getBehosDateStart()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateEnd()) {
-            behospitalPageVO.setBehosDateEnd(DateUtil.getLastTimeOfDay(behospitalPageVO.getBehosDateEnd()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart() && null != behospitalPageVO.getBehosDateEnd()) {
-            if (DateUtil.after(behospitalPageVO.getBehosDateStart(), behospitalPageVO.getBehosDateEnd())) {
-                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "入院时间的开始时间必须小于结束时间!");
-            }
-        }
-        //出院时间
-        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart()) {
-            behospitalPageVO.setLeaveHosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getLeaveHosDateStart()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateEnd()) {
-            behospitalPageVO.setLeaveHosDateEnd(DateUtil.getLastTimeOfDay(behospitalPageVO.getLeaveHosDateEnd()));
-        }
-        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart() && null != behospitalPageVO.getLeaveHosDateEnd()) {
-            if (DateUtil.after(behospitalPageVO.getLeaveHosDateStart(), behospitalPageVO.getLeaveHosDateEnd())) {
-                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "出院时间的开始时间必须小于结束时间!");
-            }
-        }
-        behospitalPageVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
+        behospitalPageSet(behospitalPageVO);
         behospitalPageVO.setUserId(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
         IPage<BehospitalInfoDTO> res = getPageByDept(behospitalPageVO);
         return res;
@@ -921,4 +893,99 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         return analyzeRunDTO;
     }
 
+    private void behospitalPageSet(BehospitalPageVO behospitalPageVO) {
+        //入参验证
+        //入院时间
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart()) {
+            behospitalPageVO.setBehosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getBehosDateStart()));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateEnd()) {
+            behospitalPageVO.setBehosDateEnd(DateUtil.getFirstTimeOfDay(DateUtil.addDay(behospitalPageVO.getBehosDateEnd(), 1)));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart() && null != behospitalPageVO.getBehosDateEnd()) {
+            if (DateUtil.after(behospitalPageVO.getBehosDateStart(), behospitalPageVO.getBehosDateEnd())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "入院时间的开始时间必须小于结束时间!");
+            }
+        }
+        //出院时间
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart()) {
+            behospitalPageVO.setLeaveHosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getLeaveHosDateStart()));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateEnd()) {
+            behospitalPageVO.setLeaveHosDateEnd(DateUtil.getFirstTimeOfDay(DateUtil.addDay(behospitalPageVO.getLeaveHosDateEnd(), 1)));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart() && null != behospitalPageVO.getLeaveHosDateEnd()) {
+            if (DateUtil.after(behospitalPageVO.getLeaveHosDateStart(), behospitalPageVO.getLeaveHosDateEnd())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "出院时间的开始时间必须小于结束时间!");
+            }
+        }
+        behospitalPageVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
+        behospitalPageVO.setIsPlacefile("1");
+        if (null != behospitalPageVO.getStatisticsType()
+                && null == behospitalPageVO.getLeaveHosDateStart()
+                && null == behospitalPageVO.getLeaveHosDateEnd()) {
+            String startDate = filterFacade.getStartDateStr(behospitalPageVO.getStatisticsType(), null);
+            String endDate = filterFacade.getEndDateStr(behospitalPageVO.getStatisticsType(), null);
+            behospitalPageVO.setLeaveHosDateStart(DateUtil.parseDate(startDate));
+            behospitalPageVO.setLeaveHosDateEnd(DateUtil.parseDate(endDate));
+        }
+    }
+
+    public void exportExcelFac(HttpServletResponse response) {
+        List<ExportExcelDTO> res = this.exportExcel();
+        String fileName = "mrqc";
+        ExcelUtils.exportExcelUser(res, null, "病案质控", ExportExcelDTO.class, fileName + ".xls", response);
+    }
+
+    /**
+     * 质控结果导出
+     *
+     * @param response
+     * @param exportQcresultVO
+     */
+    public void exportQcresult(HttpServletResponse response, ExportQcresultVO exportQcresultVO) {
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        exportQcresultVO.setHospitalId(hospitalId);
+        Date startDate = exportQcresultVO.getLeaveHosDateStart();
+        Date endDate = exportQcresultVO.getLeaveHosDateEnd();
+        //时间间隔7天
+        long interval = 7 * 24 * 60 * 60 * 1000;
+        if (endDate.getTime() < startDate.getTime()) {
+            throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
+        }
+        if (endDate.getTime() - startDate.getTime() > interval) {
+            throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于7天");
+        }
+
+        List<ExportExcelDTO> res = this.exportQcresult(exportQcresultVO);
+        response.setContentType("text/html;charset=UTF-8");
+        ExcelUtils.exportExcel(res, null, "导出sheet1", ExportExcelDTO.class, "测试user.xls", response);
+    }
+
+    /**
+     * 科室质控结果导出
+     *
+     * @param response
+     * @param exportQcresultVO
+     */
+    public void exportQcresultByDept(HttpServletResponse response, ExportQcresultVO exportQcresultVO) {
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        exportQcresultVO.setHospitalId(hospitalId);
+        exportQcresultVO.setUserId(Long.valueOf(userId));
+        Date startDate = exportQcresultVO.getLeaveHosDateStart();
+        Date endDate = exportQcresultVO.getLeaveHosDateEnd();
+        //时间间隔7天
+        long interval = 7 * 24 * 60 * 60 * 1000;
+        if (endDate.getTime() < startDate.getTime()) {
+            throw new CommonException(CommonErrorCode.PARAM_ERROR, "截止时间不能小于起始时间");
+        }
+        if (endDate.getTime() - startDate.getTime() > interval) {
+            throw new CommonException(CommonErrorCode.PARAM_ERROR, "统计区间不能大于7天");
+        }
+
+        List<ExportExcelDTO> res = this.exportQcresultByDept(exportQcresultVO);
+        response.setContentType("text/html;charset=UTF-8");
+        ExcelUtils.exportExcel(res, null, "导出sheet1", ExportExcelDTO.class, "测试user.xls", response);
+    }
 }

+ 35 - 74
src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java

@@ -1,6 +1,7 @@
 package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.CaseAndDeptNumDTO;
 import com.diagbot.dto.DeptBaseDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
@@ -14,7 +15,6 @@ import com.diagbot.util.SysUserUtils;
 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;
@@ -67,26 +67,28 @@ public class ConsoleByDeptFacade {
         filterVO.setUserId(Long.valueOf(userId));
         filterVO.setStartDate(startDate);
         filterVO.setEndDate(endDate);
-        HomePageFilterVO homePageFilterVO = new HomePageFilterVO();
-        BeanUtil.copyProperties(filterVO, homePageFilterVO);
         //关联科室
         Map<String, Object> deptMap = getDeptByUser(filterVO);
         if (deptMap == null) {
             return retMap;
         }
         //出院总人数
-        List<NumDTO> totleNumList = behospitalInfoFacade.homePageCountByDept(homePageFilterVO);
+        List<NumDTO> totleNumList = behospitalInfoFacade.leaveHosCountByDept(filterVO);
         Map<String, NumDTO> totleMap = ListUtil.isEmpty(totleNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityMap(totleNumList, "name");
+        //新生儿人数
+        List<NumDTO> newBornNumList = behospitalInfoFacade.newBornCountByDept(filterVO);
+        Map<String, NumDTO> newBornMap = ListUtil.isEmpty(newBornNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(newBornNumList, "name");
         //死亡人数
-        homePageFilterVO.setDeath(1);
-        List<NumDTO> deathNumList = behospitalInfoFacade.homePageCountByDept(homePageFilterVO);
+        List<NumDTO> deathNumList = behospitalInfoFacade.deathCountByDept(filterVO);
         Map<String, NumDTO> deathMap = ListUtil.isEmpty(deathNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityMap(deathNumList, "name");
         //手术人数
-        List<NumDTO> operationNumList = behospitalInfoFacade.homePageCountForOperationByDept(filterVO);
+        List<NumDTO> operationNumList = behospitalInfoFacade.operationCountByDept(filterVO);
         Map<String, NumDTO> operationMap = ListUtil.isEmpty(operationNumList)
                 ? new HashMap<>()
                 : EntityUtil.makeEntityMap(operationNumList, "name");
@@ -335,7 +337,6 @@ public class ConsoleByDeptFacade {
      * @return
      */
     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();
@@ -365,63 +366,19 @@ public class ConsoleByDeptFacade {
             }
             List<DeptNumDTO> listByDept = numListMap.get(deptName);
             if (ListUtil.isNotEmpty(listByDept)) {
-                List<NumDTO> entryByDeptList = BeanUtil.listCopyTo(listByDept, NumDTO.class);
-                int totle = entryByDeptList
-                        .stream()
-                        .map(NumDTO::getNum)
-                        .reduce(0, Integer::sum);
-                List<NumDTO> retList = Lists.newLinkedList();
-                entryByDeptList.forEach(numDTO -> {
-                    numDTO.setTotleNum(totle);
-                    Double percent = BigDecimal.valueOf(numDTO.getNum())
-                            .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
-                            .doubleValue();
-                    numDTO.setPercent(percent);
-                    String percentStr
-                            = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
-                    numDTO.setPercentStr(percentStr);
-                });
-
                 //降序排序
-                Collections.sort(entryByDeptList, new Comparator<NumDTO>() {
+                Collections.sort(listByDept, new Comparator<DeptNumDTO>() {
                     @Override
-                    public int compare(NumDTO o1, NumDTO o2) {
+                    public int compare(DeptNumDTO o1, DeptNumDTO o2) {
                         return o2.getPercent().compareTo(o1.getPercent());
                     }
                 });
 
-                //top9+其他
-                if (entryByDeptList.size() <= limitCount) {
-                    retList.addAll(entryByDeptList);
+                if (listByDept.size() <= limitCount) {
+                    retMap.put(deptName, listByDept);
                 } else {
-                    int count = 0;
-                    double sumPercent = 0d;
-                    for (NumDTO numDTO : entryByDeptList) {
-                        if (retList.size() < limitCount - 1) {
-                            retList.add(numDTO);
-                            count += numDTO.getNum();
-                            sumPercent = BigDecimal.valueOf(sumPercent)
-                                    .add(BigDecimal.valueOf(numDTO.getPercent()))
-                                    .doubleValue();
-                        } else {
-                            NumDTO otherNumDTO = new NumDTO();
-                            int num = totle - count;
-                            otherNumDTO.setName("其他");
-                            otherNumDTO.setNum(num);
-                            otherNumDTO.setTotleNum(totle);
-                            Double percent = BigDecimal.valueOf(num)
-                                    .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
-                                    .doubleValue();
-                            otherNumDTO.setPercent(percent);
-                            String percentStr
-                                    = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
-                            otherNumDTO.setPercentStr(percentStr);
-                            retList.add(otherNumDTO);
-                            break;
-                        }
-                    }
+                    retMap.put(deptName, listByDept.subList(0, limitCount));
                 }
-                retMap.put(deptName, retList);
             }
         }
         return retMap;
@@ -527,12 +484,12 @@ public class ConsoleByDeptFacade {
     }
 
     /**
-     * 条目缺陷占比-科室(分页)
+     * 缺陷详情-科室(分页)
      *
      * @param filterPageByDeptVO
      * @return
      */
-    public IPage<DeptNumDTO> entryCountGroupByEntryAndDeptPage(FilterPageByDeptVO filterPageByDeptVO) {
+    public IPage<CaseAndDeptNumDTO> entryCountGroupByEntryAndDeptPage(FilterPageByDeptVO filterPageByDeptVO) {
         if (StringUtil.isBlank(filterPageByDeptVO.getDeptName())) {
             List<DeptBaseDTO> deptList = this.getDept();
             //默认取第一个科室
@@ -540,22 +497,8 @@ public class ConsoleByDeptFacade {
                 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);
+        IPage<CaseAndDeptNumDTO> page = qcresultInfoFacade.entryCountGroupByEntryAndDeptPage(filterPageByDeptVO);
         return page;
     }
 
@@ -578,6 +521,24 @@ public class ConsoleByDeptFacade {
         return page;
     }
 
+    /**
+     * 条目缺陷占比-科室(内页)
+     *
+     * @param filterPageByDeptVO
+     * @return
+     */
+    public IPage<DeptNumDTO> entryGroupByEntryAndDeptInnerPage(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.entryGroupByEntryAndDeptInnerPage(filterPageByDeptVO);
+        return page;
+    }
 
     /**
      * 各科室缺陷占比(组合)

+ 51 - 17
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -5,6 +5,7 @@ import com.diagbot.aggregate.AverageStatisticsAggregate;
 import com.diagbot.aggregate.MrStatisticsAggregate;
 import com.diagbot.aggregate.ResultStatisticsAggregate;
 import com.diagbot.dto.AverageStatisticsDTO;
+import com.diagbot.dto.CaseNumDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
@@ -195,6 +196,24 @@ public class ConsoleFacade {
         return retMap;
     }
 
+    /**
+     * 各科室质控平均分(首页)-根据内外科系统统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<AverageStatisticsDTO> getAverageScoreByDeptClass(FilterVO filterVO) {
+        filterVOSet(filterVO);
+        List<AverageStatisticsDTO> retAverageScoreList = Lists.newLinkedList();
+        List<AverageStatisticsDTO> averageScoreList = qcresultInfoFacade.getAverageScoreByDeptClass(filterVO);
+        Integer limitCount = filterVO.getLimitCount();
+        //质控平均分
+        if (ListUtil.isNotEmpty(averageScoreList)) {
+            retAverageScoreList = averageStatisticsAggregate.getLimitAverageList(averageScoreList, limitCount);
+        }
+        return retAverageScoreList;
+    }
+
     /**
      * 各科室甲级病历占比
      *
@@ -391,28 +410,14 @@ public class ConsoleFacade {
     }
 
     /**
-     * 条目缺陷占比(分页)
+     * 缺陷详情(分页)
      *
      * @param filterPageVO
      * @return
      */
-    public IPage<NumDTO> entryCountGroupByEntryPage(FilterPageVO filterPageVO) {
-        DecimalFormat df = new DecimalFormat("#0.00");
+    public IPage<CaseNumDTO> entryCountGroupByEntryPage(FilterPageVO filterPageVO) {
         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);
+        IPage<CaseNumDTO> page = qcresultInfoFacade.entryCountGroupByEntryPage(filterPageVO);
         return page;
     }
 
@@ -475,6 +480,18 @@ public class ConsoleFacade {
         IPage<QcResultPercentDTO> page = qcresultInfoFacade.levelPercentGroupByDeptPage(filterPageVO);
         return page;
     }
+
+    /**
+     * 条目缺陷占比(内页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    public IPage<NumDTO> entryGroupByEntryInnerPage(FilterPageVO filterPageVO) {
+        filterPageVOSet(filterPageVO);
+        IPage<NumDTO> page = qcresultInfoFacade.entryGroupByEntryInnerPage(filterPageVO);
+        return page;
+    }
     //endregion-----------------------分页接口结束-------------------------------
 
     /**
@@ -494,6 +511,23 @@ public class ConsoleFacade {
         return records;
     }
 
+    /**
+     * 各科室缺陷占比(组合)-全院-根据内外科系统统计
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatisticsByDeptClass(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.levelStatisticsByDeptClass(filterOrderVO);
+        return records;
+    }
+
     /**
      * 病案首页合格率占比
      *

+ 33 - 40
src/main/java/com/diagbot/facade/ModelHospitalFacade.java

@@ -33,6 +33,8 @@ public class ModelHospitalFacade extends ModelHospitalServiceImpl {
     ModelHospitalService modelHospitalService;
     @Autowired
     MedicalRecordFacade medicalRecordFacade;
+    @Autowired
+    QcAbnormalFacade qcAbnormalFacade;
 
     /**
      *
@@ -62,51 +64,42 @@ public class ModelHospitalFacade extends ModelHospitalServiceImpl {
         return  modelHospitalData;
     }
 
+    /**
+     * 先查询qc_model_hospital表, 把该医院数据模块的数据全删, 在重新添加,更新med_medical_record
+     * 得到的qc_model_hospital的id更新到med_medical_record表的modeId,再把qc_abnormal的状态更行。
+     * @param modelHospitalUpdataVO
+     * @return
+     */
     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);
+                .eq("hospital_id", modelHospitalUpdataVO.getHospitalId())
+                .ne("id", modelHospitalUpdataVO.getId() == null ? -1 : modelHospitalUpdataVO.getId())
+                .eq("hospital_model_name", modelHospitalUpdataVO.getHospitalModelName());
+        modelHospitalService.remove(queryModelHospital);
+
+        boolean res = false;
         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);
-            }
+        //保存数据
+        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_modified", date);
+            //更新med_medical_record表的modeId
+            medicalRecordFacade.update(medicalRecordData);
+            //更新异常数据状态
+            qcAbnormalFacade.saveQcAnnormalNameAll(modelHospitalUpdataVO.getQcAbnormalName());
         }
+        /* }*/
 
         return res;
     }

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

@@ -1,19 +1,27 @@
 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.QcAbnormalDTO;
+import com.diagbot.dto.QcAbnormalModeDTO;
+import com.diagbot.dto.QcModeAllDTO;
+import com.diagbot.entity.ModelHospital;
 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.QcAbnormalModeVO;
+import com.diagbot.vo.QcAbnormalSaveNameVO;
 import com.diagbot.vo.QcAbnormalSaveVO;
 import com.diagbot.vo.QcAbnormalVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 /**
  * @Description:
  * @author: gaodm
@@ -24,6 +32,10 @@ public class QcAbnormalFacade extends QcAbnormalServiceImpl {
 
     @Autowired
     private FilterFacade filterFacade;
+    @Autowired
+    QcModeFacade qcModeFacade;
+    @Autowired
+    ModelHospitalFacade modelHospitalFacade;
     /**
      * 查询异常数据监控信息
      *
@@ -73,4 +85,52 @@ public class QcAbnormalFacade extends QcAbnormalServiceImpl {
                 .set("modifier", SysUserUtils.getCurrentPrincipleID())
         );
     }
+    /**
+     * 根据异常异常描述和异常类型 更新所有异常异常描一样的数据。
+     *
+     * @param qcAbnormalSaveNameVO 异常数据监控信息更新参数
+     * @return 是否成功
+     */
+    public Boolean saveQcAnnormalNameAll(QcAbnormalSaveNameVO qcAbnormalSaveNameVO) {
+
+        boolean res = false;
+            res = this.update(new UpdateWrapper<QcAbnormal>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("hospital_id", SysUserUtils.getCurrentHospitalID())
+                    .eq("type", 1)//异常类型(1:数据模块 2:质控类型 3:XML结构)
+                    .eq("description", qcAbnormalSaveNameVO.getDescription())
+                    .set("status", qcAbnormalSaveNameVO.getStatus())
+                    .set("gmt_modified", DateUtil.now())
+                    .set("modifier", SysUserUtils.getCurrentPrincipleID())
+            );
+            //最后更新备注
+            res = this.update(new UpdateWrapper<QcAbnormal>()
+                    .eq("id", qcAbnormalSaveNameVO.getId())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .set("remark", qcAbnormalSaveNameVO.getRemark())
+            );
+        return res;
+    }
+
+
+    public QcAbnormalModeDTO getQcAnnormalMode(QcAbnormalModeVO qcAbnormalModeVO) {
+        QcAbnormalModeDTO data = new QcAbnormalModeDTO();
+
+        QueryWrapper<ModelHospital> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", SysUserUtils.getCurrentHospitalID())
+                .eq("hospital_model_name", qcAbnormalModeVO.getDescription());
+        ModelHospital modeHospital = modelHospitalFacade.getOne(queryWrapper);
+        List<QcModeAllDTO> dataMode = qcModeFacade.getModeAll();
+        data.setQcModeDatas(dataMode);
+        data.setDescription(qcAbnormalModeVO.getDescription());
+        if(modeHospital==null){
+            data.setModeId(0L);
+            data.setModeMame("");
+        }else {
+            data.setModeId(modeHospital.getStandModelId());
+            data.setModeMame(modeHospital.getStandModelName());
+        }
+        return data;
+    }
 }

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

@@ -36,7 +36,7 @@ public class QcModeFacade extends QcModeServiceImpl {
 
         for (int i = 0; i < qcModeList.size(); i++) {
             String key = qcModeList.get(i).getName();
-            if (!pageData.containsKey(qcModeList.get(i).getName()) && !"病程信息".equals(key)) {
+            if (!pageData.containsKey(key) && !"病程信息".equals(key)) {
                 qcModeList.remove(i--);
             }
         }

+ 11 - 0
src/main/java/com/diagbot/facade/QcTypeCasesEntryFacade.java

@@ -0,0 +1,11 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.QcTypeCasesEntryServiceImpl;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/5/26 16:20
+ */
+public class QcTypeCasesEntryFacade extends QcTypeCasesEntryServiceImpl {
+}

+ 248 - 0
src/main/java/com/diagbot/facade/QcTypeFacade.java

@@ -0,0 +1,248 @@
+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.QcCasesEntrySimpleDTO;
+import com.diagbot.dto.QcTypeDTO;
+import com.diagbot.dto.QcTypePageDTO;
+import com.diagbot.entity.CommonParam;
+import com.diagbot.entity.QcType;
+import com.diagbot.entity.QcTypeCasesEntry;
+import com.diagbot.enums.InsertOrUpdateEnum;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.impl.QcTypeCasesEntryServiceImpl;
+import com.diagbot.service.impl.QcTypeServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.DeleteQcTypeVO;
+import com.diagbot.vo.QcEntryHospitalVO;
+import com.diagbot.vo.QcTypeCasesEntryVO;
+import com.diagbot.vo.QcTypeIndexVO;
+import com.diagbot.vo.QcTypePageVO;
+import com.diagbot.vo.QcTypeSaveVO;
+import com.diagbot.vo.QcTypeVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2018/11/23 11:37
+ */
+@Component
+public class QcTypeFacade extends QcTypeServiceImpl {
+
+
+    @Autowired
+    @Qualifier("qcTypeCasesEntryServiceImpl")
+    QcTypeCasesEntryServiceImpl qcTypeCasesEntryService;
+    @Autowired
+    QcCasesEntryFacade qcCasesEntryFacade;
+
+    /**
+     * 保存
+     *
+     * @param qcTypeSaveVO
+     */
+    public void saveOrUpdate(QcTypeSaveVO qcTypeSaveVO) {
+        CommonParam param = initCommonParam();
+        qcTypeSaveVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        // 保存主表
+        saveQcType(qcTypeSaveVO, param);
+        // 保存质控类型和质控条目映射关系
+        saveQcTypeCasesEntry(qcTypeSaveVO, param);
+    }
+
+    /**
+     * 初始化参数
+     *
+     * @return
+     */
+    public CommonParam initCommonParam() {
+        CommonParam param = new CommonParam();
+        String person = SysUserUtils.getCurrentPrincipleID();
+        param.setNow(DateUtil.now());
+        param.setPerson(person);
+        param.setInsertOrUpdate(InsertOrUpdateEnum.Insert.getKey());
+        return param;
+    }
+
+    /**
+     * 保存映射关系
+     *
+     * @param qcTypeSaveVO
+     * @param param
+     */
+    public void saveQcTypeCasesEntry(QcTypeSaveVO qcTypeSaveVO, CommonParam param) {
+        Date now = param.getNow();
+        String person = param.getPerson();
+        // 先删除原明细(物理删除)
+        qcTypeCasesEntryService.remove(new QueryWrapper<QcTypeCasesEntry>()
+                .eq("type_id", qcTypeSaveVO.getId())
+        );
+        // 再插入新明细
+        List<QcTypeCasesEntryVO> qcTypeCasesEntryVOList = qcTypeSaveVO.getQcTypeCasesEntryVOList();
+        if (ListUtil.isNotEmpty(qcTypeCasesEntryVOList)) {
+            List<QcTypeCasesEntry> saveQcTypeCasesEntry = new ArrayList<>();
+            for (QcTypeCasesEntryVO mapping : qcTypeCasesEntryVOList) {
+                QcTypeCasesEntry bean = new QcTypeCasesEntry();
+                bean.setCaseEntryId(mapping.getCaseEntryId());
+                bean.setCreator(person);
+                bean.setGmtCreate(now);
+                bean.setModifier(person);
+                bean.setGmtModified(now);
+                bean.setTypeId(qcTypeSaveVO.getId());
+                saveQcTypeCasesEntry.add(bean);
+            }
+            qcTypeCasesEntryService.saveBatch(saveQcTypeCasesEntry);
+        }
+    }
+
+    /**
+     * 保存主表
+     *
+     * @param qcTypeSaveVO
+     * @param param
+     */
+    public void saveQcType(QcTypeSaveVO qcTypeSaveVO, CommonParam param) {
+        QcType qcType = new QcType();
+        Long id = qcTypeSaveVO.getId();
+
+        // 保存主表
+        if (qcTypeSaveVO.getId() != null) {
+            qcType = this.getOne(new QueryWrapper<QcType>()
+                    .eq("id", id)
+                    .eq("hospital_id", qcTypeSaveVO.getHospitalId())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()), false);
+            if (qcType == null) { //校验
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "当前质控类型不存在【id=" + id + "】");
+            }
+            param.setInsertOrUpdate(InsertOrUpdateEnum.Update.getKey());
+        }
+        BeanUtil.copyProperties(qcTypeSaveVO, qcType);
+        Integer count = this.count(new QueryWrapper<QcType>()
+                .eq("name", qcTypeSaveVO.getName())
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", qcTypeSaveVO.getHospitalId())
+                .ne("id", id == null ? -1 : id));
+        // 质控类型hospitalId、name唯一
+        if (count > 0) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "质控类型已存在");
+        }
+        if (InsertOrUpdateEnum.Insert.getKey() == param.getInsertOrUpdate()) {
+            qcType.setCreator(param.getPerson()); //创建人
+            qcType.setGmtCreate(param.getNow());//创建时间
+        }
+        qcType.setGmtModified(param.getNow());//修改时间
+        qcType.setModifier(param.getPerson());//修改人
+        this.saveOrUpdate(qcType);
+        qcTypeSaveVO.setId(qcType.getId());
+    }
+
+    /**
+     * 标签列表
+     *
+     * @param qcTypePageVO
+     * @return
+     */
+    public IPage<QcTypePageDTO> getListFac(QcTypePageVO qcTypePageVO) {
+        qcTypePageVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        IPage<QcTypePageDTO> res = this.getList(qcTypePageVO);
+        return res;
+    }
+
+    /**
+     * 新增时质控条目分组信息
+     *
+     * @param qcEntryHospitalVO
+     * @return
+     */
+    public Map<String, List<QcCasesEntrySimpleDTO>> getEntryByHospital(@RequestBody QcEntryHospitalVO qcEntryHospitalVO) {
+        qcEntryHospitalVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        List<QcCasesEntrySimpleDTO> qcCasesEntrySimpleDTOList = qcCasesEntryFacade.getEntryByHospital(qcEntryHospitalVO);
+        return EntityUtil.makeEntityListMap(qcCasesEntrySimpleDTOList, "modeName");
+    }
+
+    /**
+     * 检索
+     *
+     * @param qcTypeIndexVO
+     * @return
+     */
+    public List<QcCasesEntrySimpleDTO> indexFac(QcTypeIndexVO qcTypeIndexVO) {
+        qcTypeIndexVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        List<QcCasesEntrySimpleDTO> res = qcCasesEntryFacade.index(qcTypeIndexVO);
+        return res;
+    }
+
+    /**
+     * 根据参数返回质控类型内容
+     *
+     * @param qcTypeVO 获取质控类型内容参数
+     * @return 标签内容
+     */
+    public QcTypeDTO getById(QcTypeVO qcTypeVO) {
+        QcTypeDTO qcTypeDTO = new QcTypeDTO();
+        qcTypeVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        QcType qcType = this.getOne(new QueryWrapper<QcType>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", qcTypeVO.getHospitalId())
+                .eq("id", qcTypeVO.getId()), false
+        );
+        if (qcType == null) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
+                    "当前质控类型不存在或已删除【id=" + qcTypeVO.getId() + "】");
+        }
+        BeanUtil.copyProperties(qcType, qcTypeDTO);
+        List<QcCasesEntrySimpleDTO> list = qcTypeCasesEntryService.getByTypeId(qcTypeVO);
+        Map<String, List<QcCasesEntrySimpleDTO>> entryMap = EntityUtil.makeEntityListMap(list, "modeName");
+        qcTypeDTO.setEntryMap(entryMap);
+        return qcTypeDTO;
+    }
+
+    /**
+     * 根据id删除质控类型
+     *
+     * @param deleteQcTypeVO
+     * @return
+     */
+    public Boolean deleteByIdsFac(DeleteQcTypeVO deleteQcTypeVO) {
+        Date now = DateUtil.now();
+        String person = SysUserUtils.getCurrentPrincipleID();
+        // 更新主表
+        Boolean res =
+                this.update(new UpdateWrapper<QcType>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_id", SysUserUtils.getCurrentHospitalID())
+                        .in("id", deleteQcTypeVO.getIds())
+                        .set("is_deleted", IsDeleteEnum.Y.getKey())
+                        .set("gmt_modified", now)
+                        .set("modifier", person)
+                );
+
+        if (!res){
+            throw new CommonException(CommonErrorCode.UPDATE_INFO_FAIL);
+        }
+        // 删除明细表
+        if (ListUtil.isNotEmpty(deleteQcTypeVO.getIds())) {
+            qcTypeCasesEntryService.remove(new QueryWrapper<QcTypeCasesEntry>()
+                    .in("type_id", deleteQcTypeVO.getIds())
+            );
+        }
+        return true;
+    }
+
+}

+ 68 - 25
src/main/java/com/diagbot/facade/QcresultInfoFacade.java

@@ -185,32 +185,75 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
         qcresultInfo.setModifier(useId.toString());
         this.save(qcresultInfo);
         //更新质控评分明细信息
-        //逻辑删除记录
-        qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
-                .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("hospital_id", analyzeVO.getHospitalId())
-                .eq("behospital_code", analyzeVO.getBehospitalCode())
-                .set("is_deleted", IsDeleteEnum.Y.getKey())
-                .set("modifier", useId)
-                .set("gmt_modified", now));
-        //批量插入新的数据
-        List<QcresultDetail> qcresultDetailList = new ArrayList<>();
-        List<QcResultAlgVO> qcResultAlgVORes = algorithmVO.getQcResultAlgVOList();
-        if (ListUtil.isNotEmpty(qcResultAlgVORes)) {
-            for (QcResultAlgVO qcResultAlgVO : qcResultAlgVORes) {
-                QcresultDetail qcresultDetail = new QcresultDetail();
-                BeanUtil.copyProperties(qcResultAlgVO, qcresultDetail);
-                qcresultDetail.setHospitalId(analyzeVO.getHospitalId());
-                qcresultDetail.setBehospitalCode(analyzeVO.getBehospitalCode());
-                qcresultDetail.setGmtCreate(now);
-                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);
+        switch (algorithmVO.getType()) {
+            //自动评分
+            case 0:
+                //删除记录
+                qcresultDetailServiceImpl.remove(new QueryWrapper<QcresultDetail>()
+                        .eq("hospital_id", analyzeVO.getHospitalId())
+                        .eq("behospital_code", analyzeVO.getBehospitalCode()));
+                //批量插入新的数据
+                List<QcresultDetail> qcresultDetailList = new ArrayList<>();
+                List<QcResultAlgVO> qcResultAlgVORes = algorithmVO.getQcResultAlgVOList();
+                if (ListUtil.isNotEmpty(qcResultAlgVORes)) {
+                    for (QcResultAlgVO qcResultAlgVO : qcResultAlgVORes) {
+                        QcresultDetail qcresultDetail = new QcresultDetail();
+                        BeanUtil.copyProperties(qcResultAlgVO, qcresultDetail);
+                        qcresultDetail.setHospitalId(analyzeVO.getHospitalId());
+                        qcresultDetail.setBehospitalCode(analyzeVO.getBehospitalCode());
+                        qcresultDetail.setGradeType(1);
+                        qcresultDetail.setOptType(1);
+                        qcresultDetail.setGmtCreate(now);
+                        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);
+                }
+                break;
+            case 1:
+                //新增条目
+                QcresultDetail qcresultDetailAdd = new QcresultDetail();
+                BeanUtil.copyProperties(algorithmVO.getOptResultAlgVO(), qcresultDetailAdd);
+                qcresultDetailAdd.setGradeType(2);
+                qcresultDetailAdd.setOptType(1);
+                qcresultDetailAdd.setHospitalId(analyzeVO.getHospitalId());
+                qcresultDetailAdd.setBehospitalCode(analyzeVO.getBehospitalCode());
+                qcresultDetailAdd.setGmtCreate(now);
+                qcresultDetailAdd.setCreator(useId.toString());
+                qcresultDetailAdd.setGmtModified(now);
+                qcresultDetailAdd.setModifier(useId.toString());
+                qcresultDetailServiceImpl.save(qcresultDetailAdd);
+                break;
+            case 2:
+                //删除条目
+                qcresultDetailServiceImpl.remove(new QueryWrapper<QcresultDetail>()
+                        .eq("id", algorithmVO.getOptResultAlgVO().getId())
+                        .eq("hospital_id", analyzeVO.getHospitalId())
+                        .eq("behospital_code", analyzeVO.getBehospitalCode())
+                );
+                break;
+            case 3:
+                //修改条目
+                qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
+                        .eq("id", algorithmVO.getOptResultAlgVO().getId())
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_id", analyzeVO.getHospitalId())
+                        .eq("behospital_code", analyzeVO.getBehospitalCode())
+                        .set("msg", algorithmVO.getOptResultAlgVO().getMsg())
+                        .set("score", algorithmVO.getOptResultAlgVO().getScore())
+                        .set("opt_type", 3)
+                        .set("modifier", useId)
+                        .set("gmt_modified", now)
+                );
+                break;
+            default:
+                /* DO NOTHING */
+                break;
         }
+
         //长兴的数据
         if (algorithmVO.getHospitalId().equals(1L)) {
             //质控模块评分数据

+ 63 - 27
src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java

@@ -4,6 +4,7 @@ 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.ExportExcelDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
@@ -11,14 +12,14 @@ import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.ExportQcresultVO;
 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.HomePageFilterVO;
-import org.apache.ibatis.annotations.Param;
 import com.diagbot.vo.TaskVO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -39,82 +40,90 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
     public List<MsgDTO> getMsgByEntryCode(AnalyzeCodeVO analyzeCodeVO);
 
     /**
-     * 缺陷排行列表统计
+     * 各科室缺陷占比-全院-首页
      *
      * @param filterVO
      * @return
      */
-    public List<NumDTO> resultStatistics(FilterVO filterVO);
+    public List<NumDTO> entryByDept(FilterVO filterVO);
 
     /**
-     * 各科室缺陷占比
+     * 质控结果缺陷总数查询
      *
      * @param filterVO
      * @return
      */
-    public List<NumDTO> resultStatisticsByDept(FilterVO filterVO);
+    public int getTotleResultNum(FilterVO filterVO);
+
+    public List<BehospitalInfo> getNoGrade(TaskVO taskVO);
+
+    IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO);
+
+    IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO);
 
     /**
-     * 缺陷排行列表统计-百分比未计算
+     * 出院总人数统计-全院-首页
      *
      * @param filterVO
      * @return
      */
-    public List<NumDTO> resultStatistics2(FilterVO filterVO);
+    public int leaveHosCount(FilterVO filterVO);
 
     /**
-     * 各科室缺陷占比-百分比未计算
+     * 新生儿出院人数统计-全院-首页
      *
      * @param filterVO
      * @return
      */
-    public List<NumDTO> resultStatisticsByDept2(FilterVO filterVO);
+    public int newBornCount(FilterVO filterVO);
 
     /**
-     * 缺陷总数
+     * 死亡人数统计-全院-首页
      *
      * @param filterVO
      * @return
      */
-    public int getTotleResultNum(FilterVO filterVO);
+    public int deathCount(FilterVO filterVO);
 
-    public List<BehospitalInfo> getNoGrade(TaskVO taskVO);
-
-    IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO);
-
-    IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO);
+    /**
+     * 手术人数统计-全院-首页
+     *
+     * @param filterVO
+     * @return
+     */
+    public int operationCount(FilterVO filterVO);
 
     /**
-     * 病案首页相关病历数统计
+     * 出院总人数统计-科室-首页
      *
-     * @param homePageFilterVO
+     * @param filterVO
      * @return
      */
-    public int homePageCount(HomePageFilterVO homePageFilterVO);
+    public List<NumDTO> leaveHosCountByDept(FilterVO filterVO);
 
     /**
-     * 手术病历数统计
+     * 新生儿出院人数统计-科室-首页
      *
      * @param filterVO
      * @return
      */
-    public int homePageCountForOperation(FilterVO filterVO);
+    public List<NumDTO> newBornCountByDept(FilterVO filterVO);
 
     /**
-     * 按科室统计病案首页病历数
+     * 死亡人数统计-科室-首页
      *
-     * @param homePageFilterVO
+     * @param filterVO
      * @return
      */
-    public List<NumDTO> homePageCountByDept(HomePageFilterVO homePageFilterVO);
+    public List<NumDTO> deathCountByDept(FilterVO filterVO);
 
     /**
-     * 按科室统计病案首页手术病历数
+     * 手术人数统计-科室-首页
      *
      * @param filterVO
      * @return
      */
-    public List<NumDTO> homePageCountForOperationByDept(FilterVO filterVO);
+    public List<NumDTO> operationCountByDept(FilterVO filterVO);
 
     /**
      * 各科室缺陷占比排行(分页)
@@ -163,4 +172,31 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @return
      */
     public IPage<DeptNumDTO> resultStatisticsByDeptAndDoctorPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
+
+    /**
+     * 各科室缺陷占比(组合)-全院-根据内外科系统统计
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatisticsByDeptClass(FilterOrderVO filterOrderVO);
+
+
+    List<ExportExcelDTO> exportExcel();
+
+    /**
+     * 质控评分导出到excel
+     *
+     * @param exportQcresultVO
+     * @return
+     */
+    public List<ExportExcelDTO> exportQcresult(ExportQcresultVO exportQcresultVO);
+
+    /**
+     * 科室质控评分导出到excel
+     *
+     * @param exportQcresultVO
+     * @return
+     */
+    public List<ExportExcelDTO> exportQcresultByDept(ExportQcresultVO exportQcresultVO);
 }

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

@@ -1,11 +1,14 @@
 package com.diagbot.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.diagbot.dto.QcCasesEntryDTO;
+import com.diagbot.dto.QcCasesEntrySimpleDTO;
 import com.diagbot.entity.QcCasesEntry;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.diagbot.vo.AnalyzeVO;
+import com.diagbot.vo.QcEntryHospitalVO;
 import com.diagbot.vo.QcResultAlgQueryVO;
 import com.diagbot.vo.QcResultAlgVO;
+import com.diagbot.vo.QcTypeIndexVO;
 
 import java.util.List;
 
@@ -22,4 +25,8 @@ public interface QcCasesEntryMapper extends BaseMapper<QcCasesEntry> {
     List<QcCasesEntryDTO> getQcCasesEntry(AnalyzeVO analyzeVO);
 
     List<QcResultAlgVO> getQcResultAlgVO(QcResultAlgQueryVO qcResultAlgQueryVO);
+
+    List<QcCasesEntrySimpleDTO> index(QcTypeIndexVO qcTypeIndexVO);
+
+    List<QcCasesEntrySimpleDTO> getEntryByHospital(QcEntryHospitalVO qcEntryHospitalVO);
 }

+ 5 - 0
src/main/java/com/diagbot/mapper/QcTypeCasesEntryMapper.java

@@ -1,7 +1,11 @@
 package com.diagbot.mapper;
 
+import com.diagbot.dto.QcCasesEntrySimpleDTO;
 import com.diagbot.entity.QcTypeCasesEntry;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.vo.QcTypeVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface QcTypeCasesEntryMapper extends BaseMapper<QcTypeCasesEntry> {
 
+    List<QcCasesEntrySimpleDTO> getByTypeId(QcTypeVO qcTypeVO);
 }

+ 10 - 0
src/main/java/com/diagbot/mapper/QcTypeMapper.java

@@ -1,7 +1,10 @@
 package com.diagbot.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QcTypePageDTO;
 import com.diagbot.entity.QcType;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.vo.QcTypePageVO;
 
 /**
  * <p>
@@ -13,4 +16,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface QcTypeMapper extends BaseMapper<QcType> {
 
+    /**
+     * 获取标签列表
+     *
+     * @param qcTypePageVO
+     * @return
+     */
+    IPage<QcTypePageDTO> getList(QcTypePageVO qcTypePageVO);
 }

+ 33 - 6
src/main/java/com/diagbot/mapper/QcresultInfoMapper.java

@@ -3,6 +3,8 @@ 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.CaseAndDeptNumDTO;
+import com.diagbot.dto.CaseNumDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
@@ -72,7 +74,7 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
      * @param filterVO
      * @return
      */
-    public List<AverageStatisticsDTO> getAverageScoreByDept(FilterVO filterVO);
+    public List<AverageStatisticsDTO> getAverageScore(FilterVO filterVO);
 
     /**
      * 按科室统计质控病历数
@@ -107,12 +109,12 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
     public IPage<NumDTO> entryCountGroupByCasePage(@Param("filterPageVO") FilterPageVO filterPageVO);
 
     /**
-     * 条目缺陷占比(分页)
+     * 缺陷详情(分页)
      *
      * @param filterPageVO
      * @return
      */
-    public IPage<NumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+    public IPage<CaseNumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO);
 
     /**
      * 各科室质控平均分(分页)
@@ -132,15 +134,40 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
 
     /**
      * 各模块缺陷占比-科室(分页)
+     *
      * @param filterPageByDeptVO
      * @return
      */
-    public IPage<DeptNumDTO> entryCountGroupByCaseAndDeptPage(@Param("filterPageByDeptVO")FilterPageByDeptVO filterPageByDeptVO);
+    public IPage<DeptNumDTO> entryCountGroupByCaseAndDeptPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
 
     /**
-     * 条目缺陷占比-科室(分页)
+     * 缺陷详情-科室(分页)
+     *
      * @param filterPageByDeptVO
      * @return
      */
-    public IPage<DeptNumDTO> entryCountGroupByEntryAndDeptPage(@Param("filterPageByDeptVO")FilterPageByDeptVO filterPageByDeptVO);
+    public IPage<CaseAndDeptNumDTO> entryCountGroupByEntryAndDeptPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
+
+    /**
+     * 条目缺陷占比(内页)
+     *
+     * @return
+     */
+    public IPage<NumDTO> entryGroupByEntryInnerPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 条目缺陷占比-科室(内页)
+     *
+     * @param filterPageByDeptVO
+     * @return
+     */
+    public IPage<DeptNumDTO> entryGroupByEntryAndDeptInnerPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
+
+    /**
+     * 各科室质控平均分(首页)-根据内外科系统统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<AverageStatisticsDTO> getAverageScoreByDeptClass(FilterVO filterVO);
 }

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

@@ -4,6 +4,8 @@ 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.ExportExcelDTO;
+import com.diagbot.dto.ExportQcresultDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
@@ -11,14 +13,14 @@ import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.ExportQcresultVO;
 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.HomePageFilterVO;
-import org.apache.ibatis.annotations.Param;
 import com.diagbot.vo.TaskVO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -39,83 +41,91 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
     public List<MsgDTO> getMsgByEntryCode(AnalyzeCodeVO analyzeCodeVO);
 
     /**
-     * 缺陷排行列表统计
+     * 各科室缺陷占比-全院-首页
      *
      * @param filterVO
      * @return
      */
-    public List<NumDTO> resultStatistics(FilterVO filterVO);
+    public List<NumDTO> entryByDept(FilterVO filterVO);
 
     /**
-     * 各科室缺陷占比
+     * 质控结果缺陷总数查询
      *
      * @param filterVO
      * @return
      */
-    public List<NumDTO> resultStatisticsByDept(FilterVO filterVO);
+    public int getTotleResultNum(FilterVO filterVO);
+
+
+    public List<BehospitalInfo> getNoGrade(TaskVO taskVO);
+
+    IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO);
+
+    IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO);
 
     /**
-     * 缺陷排行列表统计-百分比未计算
+     * 出院总人数统计-全院-首页
      *
      * @param filterVO
      * @return
      */
-    public List<NumDTO> resultStatistics2(FilterVO filterVO);
+    public int leaveHosCount(FilterVO filterVO);
 
     /**
-     * 各科室缺陷占比-百分比未计算
+     * 新生儿出院人数统计-全院-首页
      *
      * @param filterVO
      * @return
      */
-    public List<NumDTO> resultStatisticsByDept2(FilterVO filterVO);
+    public int newBornCount(FilterVO filterVO);
 
     /**
-     * 缺陷总数
+     * 死亡人数统计-全院-首页
      *
      * @param filterVO
      * @return
      */
-    public int getTotleResultNum(FilterVO filterVO);
+    public int deathCount(FilterVO filterVO);
 
-
-    public List<BehospitalInfo> getNoGrade(TaskVO taskVO);
-
-    IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO);
-
-    IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO);
+    /**
+     * 手术人数统计-全院-首页
+     *
+     * @param filterVO
+     * @return
+     */
+    public int operationCount(FilterVO filterVO);
 
     /**
-     * 病案首页相关病历数统计
+     * 出院总人数统计-科室-首页
      *
-     * @param homePageFilterVO
+     * @param filterVO
      * @return
      */
-    public int homePageCount(HomePageFilterVO homePageFilterVO);
+    public List<NumDTO> leaveHosCountByDept(FilterVO filterVO);
 
     /**
-     * 手术病历数统计
+     * 新生儿出院人数统计-科室-首页
      *
      * @param filterVO
      * @return
      */
-    public int homePageCountForOperation(FilterVO filterVO);
+    public List<NumDTO> newBornCountByDept(FilterVO filterVO);
 
     /**
-     * 按科室统计病案首页病历数
+     * 死亡人数统计-科室-首页
      *
-     * @param homePageFilterVO
+     * @param filterVO
      * @return
      */
-    public List<NumDTO> homePageCountByDept(HomePageFilterVO homePageFilterVO);
+    public List<NumDTO> deathCountByDept(FilterVO filterVO);
 
     /**
-     * 按科室统计病案首页手术病历数
+     * 手术人数统计-科室-首页
      *
      * @param filterVO
      * @return
      */
-    public List<NumDTO> homePageCountForOperationByDept(FilterVO filterVO);
+    public List<NumDTO> operationCountByDept(FilterVO filterVO);
 
     /**
      * 各科室缺陷占比排行(分页)
@@ -164,4 +174,30 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @return
      */
     public IPage<DeptNumDTO> resultStatisticsByDeptAndDoctorPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
+
+    /**
+     * 各科室缺陷占比(组合)-全院-根据内外科系统统计
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    public List<LevelStatisticsDTO> levelStatisticsByDeptClass(FilterOrderVO filterOrderVO);
+
+    List<ExportExcelDTO> exportExcel();
+
+    /**
+     * 质控评分导出到excel
+     *
+     * @param exportQcresultVO
+     * @return
+     */
+    public List<ExportExcelDTO> exportQcresult(ExportQcresultVO exportQcresultVO);
+
+    /**
+     * 科室质控评分导出到excel
+     *
+     * @param exportQcresultVO
+     * @return
+     */
+    public List<ExportExcelDTO> exportQcresultByDept(ExportQcresultVO exportQcresultVO);
 }

+ 7 - 0
src/main/java/com/diagbot/service/QcCasesEntryService.java

@@ -1,11 +1,14 @@
 package com.diagbot.service;
 
 import com.diagbot.dto.QcCasesEntryDTO;
+import com.diagbot.dto.QcCasesEntrySimpleDTO;
 import com.diagbot.entity.QcCasesEntry;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.vo.AnalyzeVO;
+import com.diagbot.vo.QcEntryHospitalVO;
 import com.diagbot.vo.QcResultAlgQueryVO;
 import com.diagbot.vo.QcResultAlgVO;
+import com.diagbot.vo.QcTypeIndexVO;
 
 import java.util.List;
 
@@ -21,4 +24,8 @@ public interface QcCasesEntryService extends IService<QcCasesEntry> {
     List<QcCasesEntryDTO> getQcCasesEntry(AnalyzeVO analyzeVO);
 
     List<QcResultAlgVO> getQcResultAlgVO(QcResultAlgQueryVO qcResultAlgQueryVO);
+
+    List<QcCasesEntrySimpleDTO> index(QcTypeIndexVO qcTypeIndexVO);
+
+    List<QcCasesEntrySimpleDTO> getEntryByHospital(QcEntryHospitalVO qcEntryHospitalVO);
 }

+ 6 - 2
src/main/java/com/diagbot/service/QcTypeCasesEntryService.java

@@ -1,7 +1,11 @@
 package com.diagbot.service;
 
-import com.diagbot.entity.QcTypeCasesEntry;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.QcCasesEntrySimpleDTO;
+import com.diagbot.entity.QcTypeCasesEntry;
+import com.diagbot.vo.QcTypeVO;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2020-04-13
  */
 public interface QcTypeCasesEntryService extends IService<QcTypeCasesEntry> {
-
+    List<QcCasesEntrySimpleDTO> getByTypeId(QcTypeVO qcTypeVO);
 }

+ 5 - 1
src/main/java/com/diagbot/service/QcTypeService.java

@@ -1,7 +1,10 @@
 package com.diagbot.service;
 
-import com.diagbot.entity.QcType;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.QcTypePageDTO;
+import com.diagbot.entity.QcType;
+import com.diagbot.vo.QcTypePageVO;
 
 /**
  * <p>
@@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface QcTypeService extends IService<QcType> {
 
+    IPage<QcTypePageDTO> getList(QcTypePageVO qcTypePageVO);
 }

+ 32 - 5
src/main/java/com/diagbot/service/QcresultInfoService.java

@@ -3,6 +3,8 @@ 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.CaseAndDeptNumDTO;
+import com.diagbot.dto.CaseNumDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
@@ -73,7 +75,7 @@ public interface QcresultInfoService extends IService<QcresultInfo> {
      * @param filterVO
      * @return
      */
-    public List<AverageStatisticsDTO> getAverageScoreByDept(FilterVO filterVO);
+    public List<AverageStatisticsDTO> getAverageScore(FilterVO filterVO);
 
     /**
      * 按科室统计质控病历数
@@ -108,12 +110,12 @@ public interface QcresultInfoService extends IService<QcresultInfo> {
     public IPage<NumDTO> entryCountGroupByCasePage(@Param("filterPageVO") FilterPageVO filterPageVO);
 
     /**
-     * 条目缺陷占比(分页)
+     * 缺陷详情(分页)
      *
      * @param filterPageVO
      * @return
      */
-    public IPage<NumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+    public IPage<CaseNumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO);
 
     /**
      * 各科室质控平均分(分页)
@@ -133,15 +135,40 @@ public interface QcresultInfoService extends IService<QcresultInfo> {
 
     /**
      * 各模块缺陷占比-科室(分页)
+     *
      * @param filterPageByDeptVO
      * @return
      */
     public IPage<DeptNumDTO> entryCountGroupByCaseAndDeptPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
 
     /**
-     * 条目缺陷占比-科室(分页)
+     * 缺陷详情-科室(分页)
+     *
      * @param filterPageByDeptVO
      * @return
      */
-    public IPage<DeptNumDTO> entryCountGroupByEntryAndDeptPage(@Param("filterPageByDeptVO")FilterPageByDeptVO filterPageByDeptVO);
+    public IPage<CaseAndDeptNumDTO> entryCountGroupByEntryAndDeptPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
+
+    /**
+     * 条目缺陷占比(内页)
+     *
+     * @return
+     */
+    public IPage<NumDTO> entryGroupByEntryInnerPage(@Param("filterPageVO") FilterPageVO filterPageVO);
+
+    /**
+     * 条目缺陷占比-科室(内页)
+     *
+     * @param filterPageByDeptVO
+     * @return
+     */
+    public IPage<DeptNumDTO> entryGroupByEntryAndDeptInnerPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO);
+
+    /**
+     * 各科室质控平均分(首页)-根据内外科系统统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<AverageStatisticsDTO> getAverageScoreByDeptClass(FilterVO filterVO);
 }

+ 92 - 51
src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java

@@ -4,6 +4,8 @@ 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.ExportQcresultDTO;
+import com.diagbot.dto.ExportExcelDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.NumDTO;
@@ -13,14 +15,14 @@ import com.diagbot.service.BehospitalInfoService;
 import com.diagbot.vo.AnalyzeCodeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.ExportQcresultVO;
 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.HomePageFilterVO;
-import org.apache.ibatis.annotations.Param;
 import com.diagbot.vo.TaskVO;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -52,117 +54,120 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
     }
 
     /**
-     * 缺陷排行列表统计
+     * 各科室缺陷占比-全院-首页
      *
      * @param filterVO
      * @return
      */
     @Override
-    public List<NumDTO> resultStatistics(FilterVO filterVO) {
-        return baseMapper.resultStatistics(filterVO);
+    public List<NumDTO> entryByDept(FilterVO filterVO) {
+        return baseMapper.entryByDept(filterVO);
     }
 
     /**
-     * 各科室缺陷占比
+     * 质控结果缺陷总数查询
      *
      * @param filterVO
      * @return
      */
     @Override
-    public List<NumDTO> resultStatisticsByDept(FilterVO filterVO) {
-        return baseMapper.resultStatisticsByDept(filterVO);
+    public int getTotleResultNum(FilterVO filterVO) {
+        return baseMapper.getTotleResultNum(filterVO);
+    }
+
+    @Override
+    public List<BehospitalInfo> getNoGrade(TaskVO taskVO) {
+        return baseMapper.getNoGrade(taskVO);
+    }
+
+    @Override
+    public IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO) {
+        return baseMapper.getPageByDept(behospitalPageVO);
+    }
+
+    @Override
+    public IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO) {
+        return baseMapper.getPageByPerson(behospitalPageVO);
     }
 
     /**
-     * 缺陷排行列表统计-百分比未计算
+     * 出院总人数统计-全院-首页
      *
      * @param filterVO
      * @return
      */
-    @Override
-    public List<NumDTO> resultStatistics2(FilterVO filterVO) {
-        return baseMapper.resultStatistics2(filterVO);
+    public int leaveHosCount(FilterVO filterVO) {
+        return baseMapper.leaveHosCount(filterVO);
     }
 
     /**
-     * 各科室缺陷占比-百分比未计算
+     * 新生儿出院人数统计-全院-首页
      *
      * @param filterVO
      * @return
      */
-    @Override
-    public List<NumDTO> resultStatisticsByDept2(FilterVO filterVO) {
-        return baseMapper.resultStatisticsByDept2(filterVO);
+    public int newBornCount(FilterVO filterVO) {
+        return baseMapper.newBornCount(filterVO);
     }
 
     /**
-     * 缺陷总数
+     * 死亡人数统计-全院-首页
      *
      * @param filterVO
      * @return
      */
-    @Override
-    public int getTotleResultNum(FilterVO filterVO) {
-        return baseMapper.getTotleResultNum(filterVO);
-    }
-
-    @Override
-    public List<BehospitalInfo> getNoGrade(TaskVO taskVO) {
-        return baseMapper.getNoGrade(taskVO);
+    public int deathCount(FilterVO filterVO) {
+        return baseMapper.deathCount(filterVO);
     }
 
-    @Override
-    public IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO) {
-        return baseMapper.getPageByDept(behospitalPageVO);
-    }
-
-    @Override
-    public IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO) {
-        return baseMapper.getPageByPerson(behospitalPageVO);
+    /**
+     * 手术人数统计-全院-首页
+     *
+     * @param filterVO
+     * @return
+     */
+    public int operationCount(FilterVO filterVO) {
+        return baseMapper.operationCount(filterVO);
     }
 
     /**
-     * 病案首页相关病历数统计
+     * 出院总人数统计-科室-首页
      *
-     * @param homePageFilterVO
+     * @param filterVO
      * @return
      */
-    @Override
-    public int homePageCount(HomePageFilterVO homePageFilterVO) {
-        return baseMapper.homePageCount(homePageFilterVO);
+    public List<NumDTO> leaveHosCountByDept(FilterVO filterVO) {
+        return baseMapper.leaveHosCountByDept(filterVO);
     }
 
     /**
-     * 手术病历数统计
+     * 新生儿出院人数统计-科室-首页
      *
      * @param filterVO
      * @return
      */
-    @Override
-    public int homePageCountForOperation(FilterVO filterVO) {
-        return baseMapper.homePageCountForOperation(filterVO);
+    public List<NumDTO> newBornCountByDept(FilterVO filterVO) {
+        return baseMapper.newBornCountByDept(filterVO);
     }
 
     /**
-     * 按科室统计病案首页病历数
+     * 死亡人数统计-科室-首页
      *
-     * @param homePageFilterVO
+     * @param filterVO
      * @return
      */
-    @Override
-    public List<NumDTO> homePageCountByDept(HomePageFilterVO homePageFilterVO) {
-        return baseMapper.homePageCountByDept(homePageFilterVO);
+    public List<NumDTO> deathCountByDept(FilterVO filterVO) {
+        return baseMapper.deathCountByDept(filterVO);
     }
 
     /**
-     * 按科室统计病案首页手术病历数
+     * 手术人数统计-科室-首页
      *
      * @param filterVO
      * @return
      */
-    @Override
-    public List<NumDTO> homePageCountForOperationByDept(FilterVO filterVO) {
-        return baseMapper.homePageCountForOperationByDept(filterVO);
+    public List<NumDTO> operationCountByDept(FilterVO filterVO) {
+        return baseMapper.operationCountByDept(filterVO);
     }
 
     /**
@@ -229,4 +234,40 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
     public IPage<DeptNumDTO> resultStatisticsByDeptAndDoctorPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO) {
         return baseMapper.resultStatisticsByDeptAndDoctorPage(filterPageByDeptVO);
     }
+
+    /**
+     * 各科室缺陷占比(组合)-全院-根据内外科系统统计
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @Override
+    public List<LevelStatisticsDTO> levelStatisticsByDeptClass(FilterOrderVO filterOrderVO) {
+        return baseMapper.levelStatisticsByDeptClass(filterOrderVO);
+    }
+
+    @Override
+    public List<ExportExcelDTO> exportExcel(){
+        return baseMapper.exportExcel();
+    }
+
+    /**
+     * 质控评分导出到excel
+     *
+     * @param exportQcresultVO
+     * @return
+     */
+    public List<ExportExcelDTO> exportQcresult(ExportQcresultVO exportQcresultVO) {
+        return baseMapper.exportQcresult(exportQcresultVO);
+    }
+
+    /**
+     * 科室质控评分导出到excel
+     *
+     * @param exportQcresultVO
+     * @return
+     */
+    public List<ExportExcelDTO> exportQcresultByDept(ExportQcresultVO exportQcresultVO){
+        return baseMapper.exportQcresultByDept(exportQcresultVO);
+    }
 }

+ 66 - 0
src/main/java/com/diagbot/service/impl/ExcelExportStylerUserImpl.java

@@ -0,0 +1,66 @@
+package com.diagbot.service.impl;
+
+import cn.afterturn.easypoi.excel.export.styler.AbstractExcelExportStyler;
+import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+import org.apache.poi.ss.usermodel.Workbook;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/6/3 11:45
+ */
+public class ExcelExportStylerUserImpl extends AbstractExcelExportStyler implements IExcelExportStyler {
+    public ExcelExportStylerUserImpl(Workbook workbook) {
+        super.createStyles(workbook);
+    }
+
+    public CellStyle getTitleStyle(short color) {
+        CellStyle titleStyle = this.workbook.createCellStyle();
+        titleStyle.setAlignment(HorizontalAlignment.CENTER);
+        titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        titleStyle.setWrapText(true);
+        return titleStyle;
+    }
+
+    public CellStyle stringSeptailStyle(Workbook workbook, boolean isWarp) {
+        CellStyle style = workbook.createCellStyle();
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        style.setDataFormat(STRING_FORMAT);
+        if (isWarp) {
+            style.setWrapText(true);
+        } else {
+            style.setAlignment(HorizontalAlignment.LEFT);
+        }
+
+        return style;
+    }
+
+    public CellStyle getHeaderStyle(short color) {
+        CellStyle titleStyle = this.workbook.createCellStyle();
+        Font font = this.workbook.createFont();
+        font.setFontHeightInPoints((short) 12);
+        titleStyle.setFont(font);
+        titleStyle.setAlignment(HorizontalAlignment.CENTER);
+        titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        return titleStyle;
+    }
+
+    public CellStyle stringNoneStyle(Workbook workbook, boolean isWarp) {
+        CellStyle style = workbook.createCellStyle();
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        style.setDataFormat(STRING_FORMAT);
+        if (isWarp) {
+            style.setWrapText(true);
+        } else {
+            style.setAlignment(HorizontalAlignment.LEFT);
+        }
+
+        return style;
+    }
+}

+ 13 - 0
src/main/java/com/diagbot/service/impl/QcCasesEntryServiceImpl.java

@@ -1,13 +1,16 @@
 package com.diagbot.service.impl;
 
 import com.diagbot.dto.QcCasesEntryDTO;
+import com.diagbot.dto.QcCasesEntrySimpleDTO;
 import com.diagbot.entity.QcCasesEntry;
 import com.diagbot.mapper.QcCasesEntryMapper;
 import com.diagbot.service.QcCasesEntryService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.vo.AnalyzeVO;
+import com.diagbot.vo.QcEntryHospitalVO;
 import com.diagbot.vo.QcResultAlgQueryVO;
 import com.diagbot.vo.QcResultAlgVO;
+import com.diagbot.vo.QcTypeIndexVO;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -31,4 +34,14 @@ public class QcCasesEntryServiceImpl extends ServiceImpl<QcCasesEntryMapper, QcC
     public List<QcResultAlgVO> getQcResultAlgVO(QcResultAlgQueryVO qcResultAlgQueryVO){
         return baseMapper.getQcResultAlgVO(qcResultAlgQueryVO);
     }
+
+    @Override
+    public List<QcCasesEntrySimpleDTO> index(QcTypeIndexVO qcTypeIndexVO) {
+        return baseMapper.index(qcTypeIndexVO);
+    }
+
+    @Override
+    public List<QcCasesEntrySimpleDTO> getEntryByHospital(QcEntryHospitalVO qcEntryHospitalVO) {
+        return baseMapper.getEntryByHospital(qcEntryHospitalVO);
+    }
 }

+ 9 - 2
src/main/java/com/diagbot/service/impl/QcTypeCasesEntryServiceImpl.java

@@ -1,11 +1,15 @@
 package com.diagbot.service.impl;
 
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.QcCasesEntrySimpleDTO;
 import com.diagbot.entity.QcTypeCasesEntry;
 import com.diagbot.mapper.QcTypeCasesEntryMapper;
 import com.diagbot.service.QcTypeCasesEntryService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.QcTypeVO;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 质控类型和质控条目关联表 服务实现类
@@ -16,5 +20,8 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class QcTypeCasesEntryServiceImpl extends ServiceImpl<QcTypeCasesEntryMapper, QcTypeCasesEntry> implements QcTypeCasesEntryService {
-
+    @Override
+    public List<QcCasesEntrySimpleDTO> getByTypeId(QcTypeVO qcTypeVO) {
+        return baseMapper.getByTypeId(qcTypeVO);
+    }
 }

+ 7 - 1
src/main/java/com/diagbot/service/impl/QcTypeServiceImpl.java

@@ -1,9 +1,12 @@
 package com.diagbot.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.QcTypePageDTO;
 import com.diagbot.entity.QcType;
 import com.diagbot.mapper.QcTypeMapper;
 import com.diagbot.service.QcTypeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.QcTypePageVO;
 import org.springframework.stereotype.Service;
 
 /**
@@ -16,5 +19,8 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class QcTypeServiceImpl extends ServiceImpl<QcTypeMapper, QcType> implements QcTypeService {
-
+    @Override
+    public IPage<QcTypePageDTO> getList(QcTypePageVO qcTypePageVO) {
+        return baseMapper.getList(qcTypePageVO);
+    }
 }

+ 40 - 6
src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java

@@ -3,6 +3,8 @@ 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.CaseAndDeptNumDTO;
+import com.diagbot.dto.CaseNumDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
@@ -93,8 +95,8 @@ public class QcresultInfoServiceImpl extends ServiceImpl<QcresultInfoMapper, Qcr
      * @return
      */
     @Override
-    public List<AverageStatisticsDTO> getAverageScoreByDept(FilterVO filterVO) {
-        return baseMapper.getAverageScoreByDept(filterVO);
+    public List<AverageStatisticsDTO> getAverageScore(FilterVO filterVO) {
+        return baseMapper.getAverageScore(filterVO);
     }
 
     /**
@@ -142,13 +144,13 @@ public class QcresultInfoServiceImpl extends ServiceImpl<QcresultInfoMapper, Qcr
     }
 
     /**
-     * 条目缺陷占比(分页)
+     * 缺陷详情(分页)
      *
      * @param filterPageVO
      * @return
      */
     @Override
-    public IPage<NumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO) {
+    public IPage<CaseNumDTO> entryCountGroupByEntryPage(@Param("filterPageVO") FilterPageVO filterPageVO) {
         return baseMapper.entryCountGroupByEntryPage(filterPageVO);
     }
 
@@ -186,13 +188,45 @@ public class QcresultInfoServiceImpl extends ServiceImpl<QcresultInfoMapper, Qcr
     }
 
     /**
-     * 条目缺陷占比-科室(分页)
+     * 缺陷详情-科室(分页)
      *
      * @param filterPageByDeptVO
      * @return
      */
     @Override
-    public IPage<DeptNumDTO> entryCountGroupByEntryAndDeptPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO) {
+    public IPage<CaseAndDeptNumDTO> entryCountGroupByEntryAndDeptPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO) {
         return baseMapper.entryCountGroupByEntryAndDeptPage(filterPageByDeptVO);
     }
+
+    /**
+     * 条目缺陷占比(内页)
+     *
+     * @return
+     */
+    @Override
+    public IPage<NumDTO> entryGroupByEntryInnerPage(@Param("filterPageVO") FilterPageVO filterPageVO) {
+        return baseMapper.entryGroupByEntryInnerPage(filterPageVO);
+    }
+
+    /**
+     * 条目缺陷占比-科室(内页)
+     *
+     * @param filterPageByDeptVO
+     * @return
+     */
+    @Override
+    public IPage<DeptNumDTO> entryGroupByEntryAndDeptInnerPage(@Param("filterPageByDeptVO") FilterPageByDeptVO filterPageByDeptVO) {
+        return baseMapper.entryGroupByEntryAndDeptInnerPage(filterPageByDeptVO);
+    }
+
+    /**
+     * 各科室质控平均分(首页)-根据内外科系统统计
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<AverageStatisticsDTO> getAverageScoreByDeptClass(FilterVO filterVO) {
+        return baseMapper.getAverageScoreByDeptClass(filterVO);
+    }
 }

+ 6 - 1
src/main/java/com/diagbot/task/BehospitalInfoAnalyzeTask.java

@@ -6,6 +6,7 @@ import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.facade.BehospitalInfoFacade;
 import com.diagbot.facade.SysTaskCronFacade;
 import com.diagbot.util.StringUtil;
+import com.diagbot.vo.TaskVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
@@ -33,6 +34,8 @@ public class BehospitalInfoAnalyzeTask implements SchedulingConfigurer {
 
     private SysTaskCron task001 = new SysTaskCron();
 
+    private String param = "";
+
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
 
@@ -49,7 +52,8 @@ public class BehospitalInfoAnalyzeTask implements SchedulingConfigurer {
                         && task001.getIsDeleted().equals(IsDeleteEnum.N.getKey())
                         && task001.getIsUsed().equals(1)) {
                     log.info("执行动态定时任务: " + LocalDateTime.now().toLocalTime());
-                    behospitalInfoFacade.execute();
+                    TaskVO taskVO = new TaskVO();
+                    behospitalInfoFacade.execute(taskVO, param);
                 }
             }
         }, new Trigger() {
@@ -62,6 +66,7 @@ public class BehospitalInfoAnalyzeTask implements SchedulingConfigurer {
                 //2.2 合法性校验.
                 if (null != task001 && StringUtil.isNotBlank(task001.getCron())) {
                     cron = task001.getCron();
+                    param = task001.getParam();
                 }
                 CronTrigger trigger = new CronTrigger(cron);
                 return trigger.nextExecutionTime(triggerContext);

+ 7 - 1
src/main/java/com/diagbot/task/TASK_CX.java

@@ -6,6 +6,7 @@ import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.facade.BehospitalInfoFacade;
 import com.diagbot.facade.SysTaskCronFacade;
 import com.diagbot.util.StringUtil;
+import com.diagbot.vo.TaskVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
@@ -33,6 +34,8 @@ public class TASK_CX implements SchedulingConfigurer {
 
     private SysTaskCron task = new SysTaskCron();
 
+    private String param = "";
+
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
 
@@ -49,7 +52,9 @@ public class TASK_CX implements SchedulingConfigurer {
                         && task.getIsDeleted().equals(IsDeleteEnum.N.getKey())
                         && task.getIsUsed().equals(1)) {
                     log.info("执行动态定时任务: " + LocalDateTime.now().toLocalTime());
-                    behospitalInfoFacade.execute2();
+                    TaskVO taskVO = new TaskVO();
+                    taskVO.setType(1); // 类型过滤(1:出院时间比当前时间早3天前的病历(例如:长兴病历))
+                    behospitalInfoFacade.execute(taskVO, param);
                 }
             }
         }, new Trigger() {
@@ -63,6 +68,7 @@ public class TASK_CX implements SchedulingConfigurer {
                 //2.2 合法性校验.
                 if (null != task && StringUtil.isNotBlank(task.getCron())) {
                     cron = task.getCron();
+                    param = task.getParam();
                 }
                 CronTrigger trigger = new CronTrigger(cron);
                 return trigger.nextExecutionTime(triggerContext);

+ 143 - 0
src/main/java/com/diagbot/util/ExcelUtils.java

@@ -0,0 +1,143 @@
+package com.diagbot.util;
+
+
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.ImportParams;
+import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.impl.ExcelExportStylerUserImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+/**
+ * @Description: excel 导入导出工具类
+ * @author: gaodm
+ * @time: 2020/6/2 19:18
+ */
+public class ExcelUtils {
+    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName,
+                                   boolean isCreateHeader, HttpServletResponse response) {
+        ExportParams exportParams = new ExportParams(title, sheetName);
+        exportParams.setCreateHeadRows(isCreateHeader);
+        defaultExport(list, pojoClass, fileName, response, exportParams);
+    }
+
+    public static void exportExcelUser(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName,
+                                       HttpServletResponse response) {
+        ExportParams exportParams = new ExportParams(title, sheetName);
+        exportParams.setStyle(ExcelExportStylerUserImpl.class);
+        userExport(list, pojoClass, fileName, response, exportParams);
+    }
+
+    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName,
+                                   HttpServletResponse response) {
+        defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));
+    }
+
+    public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {
+        defaultExport(list, fileName, response);
+    }
+
+    private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response,
+                                      ExportParams exportParams) {
+        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
+        if (workbook != null) {
+            ;
+        }
+        downLoadExcel(fileName, response, workbook);
+    }
+
+    private static void userExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response,
+                                      ExportParams exportParams) {
+        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
+        if (workbook != null) {
+            Sheet sheet = workbook.getSheetAt(0);
+            //列宽设置
+            sheet.setColumnWidth(8, 256*20);
+            sheet.setColumnWidth(9, 256*50);
+            int rowNum = sheet.getLastRowNum();
+            Row row = sheet.getRow(0);
+            for (int i = 1; i <= rowNum; i++) {
+                row = sheet.getRow(i);
+                row.setHeightInPoints(12.8f);
+            }
+        }
+        downLoadExcel(fileName, response, workbook);
+    }
+
+    private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
+        try {
+            response.setCharacterEncoding("UTF-8");
+            response.setHeader("content-Type", "application/vnd.ms-excel");
+            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
+            workbook.write(response.getOutputStream());
+        } catch (IOException e) {
+            // throw new NormalException(e.getMessage());
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "导出Excel异常");
+        }
+    }
+
+    private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {
+        Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);
+        if (workbook != null) {
+            ;
+        }
+        downLoadExcel(fileName, response, workbook);
+    }
+
+    public static <T> List<T> importExcel(String filePath, Integer titleRows, Integer headerRows, Class<T> pojoClass) {
+        if (StringUtils.isBlank(filePath)) {
+            return null;
+        }
+        ImportParams params = new ImportParams();
+        params.setTitleRows(titleRows);
+        params.setHeadRows(headerRows);
+        List<T> list = null;
+        try {
+            list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);
+        } catch (NoSuchElementException e) {
+            // throw new NormalException("模板不能为空");
+        } catch (Exception e) {
+            e.printStackTrace();
+            // throw new NormalException(e.getMessage());
+        }
+        return list;
+    }
+
+    public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows,
+                                          Class<T> pojoClass) {
+        if (file == null) {
+            return null;
+        }
+        ImportParams params = new ImportParams();
+        params.setTitleRows(titleRows);
+        params.setHeadRows(headerRows);
+        List<T> list = null;
+        try {
+            list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);
+        } catch (NoSuchElementException e) {
+            // throw new NormalException("excel文件不能为空");
+        } catch (Exception e) {
+            // throw new NormalException(e.getMessage());
+            System.out.println(e.getMessage());
+        }
+        return list;
+    }
+
+}

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

@@ -80,4 +80,16 @@ public class BehospitalPageVO extends Page implements Serializable {
     private Long userId;
 
     private Long doctorCode;
+
+    /**
+     * 统计维度 1-本月,2-本年
+     */
+    private Integer statisticsType;
+
+
+    /**
+     * 是否归档(0:未归档,1:已归档)
+     */
+    @ApiModelProperty(hidden = true)
+    private String isPlacefile;
 }

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

@@ -0,0 +1,19 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: ztg
+ * @time: 2019/1/28 15:45
+ */
+@Getter
+@Setter
+public class DeleteQcTypeVO {
+    @NotEmpty(message = "ids不能为空")
+    private List<Long> ids;
+}

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

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/6/2 20:09
+ */
+@Getter
+@Setter
+public class ExportQcresultVO {
+    private Date leaveHosDateStart;
+    private Date leaveHosDateEnd;
+    @ApiModelProperty(hidden = true)
+    private String hospitalId;
+    @ApiModelProperty(hidden = true)
+    private Long userId;
+}

+ 9 - 1
src/main/java/com/diagbot/vo/FilterPageVO.java

@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * @Description:
  * @Author:zhaops
@@ -16,6 +18,7 @@ public class FilterPageVO extends Page {
     /**
      * 统计维度 1-本月,2-本年
      */
+    @NotNull(message = "请输入本年或本月")
     private Integer type;
     /**
      * 时间类型 1-本月/本年,2-上月/去年,3-去年本月/去年
@@ -52,4 +55,9 @@ public class FilterPageVO extends Page {
      * 模块id:243=病案首页
      */
     private Long casesId;
-}
+
+    /**
+     * 模块名称
+     */
+    private String casesName;
+}

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

@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * @Description:
  * @Author:zhaops
@@ -15,6 +17,7 @@ public class FilterVO {
     /**
      * 统计维度 1-本月,2-本年
      */
+    @NotNull(message = "请输入本年或本月")
     private Integer type;
     /**
      * 起始时间
@@ -39,4 +42,9 @@ public class FilterVO {
 
     @ApiModelProperty(hidden = true)
     private Long userId;
+
+    /**
+     * 科室分类
+     */
+    private String deptClass;
 }

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

@@ -1,23 +0,0 @@
-package com.diagbot.vo;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @Description:
- * @Author:zhaops
- * @time: 2020/5/6 11:29
- */
-@Getter
-@Setter
-public class HomePageFilterVO extends FilterVO {
-    /**
-     * 死亡
-     */
-    private Integer death;
-
-    /**
-     * 新生儿
-     */
-    private Integer newBorn;
-}

+ 9 - 5
src/main/java/com/diagbot/vo/ModelHospitalUpdataVO.java

@@ -3,6 +3,9 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 /**
  * @author wangfeng
  * @Description:
@@ -12,18 +15,19 @@ import lombok.Setter;
 @Getter
 public class ModelHospitalUpdataVO {
 
-
     private Long id;
-
+    @NotNull(message = "请输入医院Id")
     private Long hospitalId;
-
+    @NotBlank(message = "请输入医院数据模块名")
     private String hospitalModelName;
-
+    //@NotNull(message = "请输入数据模块Id")
     private Long standModelId;
-
+    //@NotBlank(message = "请输入数据模块名")
     private String standModelName;
     /**
      * 备注
      */
     private String remark;
+
+    private QcAbnormalSaveNameVO qcAbnormalName;
 }

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

@@ -0,0 +1,22 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-06-03 10:56
+ */
+@Setter
+@Getter
+public class QcAbnormalModeVO {
+    /**
+     * 异常描述
+     */
+    @NotBlank(message = "请输入异常数据说明")
+    private String description;
+
+}

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

@@ -0,0 +1,25 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-05-27 13:49
+ */
+@Setter
+@Getter
+public class QcAbnormalSaveNameVO {
+    @NotNull(message = "请输入Id")
+    private  Long id;
+    @NotBlank(message = "请输入异常描述")
+    private  String description;
+    @NotNull(message = "请输入处理状态")
+    private  Integer status;
+    private  String remark;
+
+}

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

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2018/11/29 15:09
+ */
+@Getter
+@Setter
+public class QcEntryHospitalVO {
+    // 医院id
+    @ApiModelProperty(hidden = true)
+    private Long hospitalId;
+}

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

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+/**
+ * @Description:
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Data
+public class QcTypeCasesEntryVO {
+
+    // 质控条目id
+    private Long caseEntryId;
+}

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

@@ -0,0 +1,24 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2018/11/29 15:09
+ */
+@Getter
+@Setter
+public class QcTypeIndexVO {
+    // 界面输入
+    private String input;
+    // 医院id
+    @ApiModelProperty(hidden = true)
+    private Long hospitalId;
+    // 过滤caseEntryId
+    private List<Long> notIds;
+}

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

@@ -0,0 +1,22 @@
+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: ztg
+ * @Date: 2018/12/13 10:07
+ */
+@Getter
+@Setter
+public class QcTypePageVO extends Page {
+
+    // 名称
+    private String name;
+    // 医院id
+    @ApiModelProperty(hidden = true)
+    private Long hospitalId;
+}

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

@@ -0,0 +1,26 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 质控类型保存入参
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Data
+public class QcTypeSaveVO {
+
+    // 主键
+    private Long id;
+    // 医院ID
+    @ApiModelProperty(hidden = true)
+    private Long hospitalId;
+    // 质控类型名称
+    private String name;
+    // 质控类型和质控条目关联信息
+    private List<QcTypeCasesEntryVO> qcTypeCasesEntryVOList = new ArrayList<>();
+}

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

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2018/8/6 10:16
+ */
+@Getter
+@Setter
+public class QcTypeVO {
+    private Long id;
+    @ApiModelProperty(hidden = true)
+    private Long hospitalId;
+}

+ 10 - 1
src/main/java/com/diagbot/vo/TaskVO.java

@@ -1,8 +1,10 @@
 package com.diagbot.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Description:
@@ -11,7 +13,14 @@ import java.util.Date;
  */
 @Data
 public class TaskVO {
-
+    // 类型过滤(1:出院时间比当前时间早3天前的病历(例如:长兴病历))
+    private Integer type;
+    @ApiModelProperty(hidden = true)
     // 出院时间过滤
     private Date leaveDate;
+    // 医院列表id,1:长兴,3:台州,2:邵逸夫
+    private List<Long> hosptialIdList;
+    // 筛选病历数据:0:未评分的病历,推荐使用;1:全部病历,谨慎使用
+    private Integer filterFlag = 0;
+
 }

+ 43 - 8
src/main/java/com/diagbot/web/BehospitalInfoController.java

@@ -12,8 +12,10 @@ import com.diagbot.vo.AnalyzeApiVO;
 import com.diagbot.vo.AnalyzeRunVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.ExportQcresultVO;
 import com.diagbot.vo.GetDetailVO;
 import com.diagbot.vo.QcresultVO;
+import com.diagbot.vo.TaskVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,6 +26,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.util.Map;
 
@@ -48,6 +51,7 @@ public class BehospitalInfoController {
     @ApiOperation(value = "病历分页列表[by:zhoutg]",
             notes = "name:姓名<br>" +
                     "fileCode:档案号<br>" +
+                    "statisticsType: 统计维度 1-本月,2-本年<br>" +
                     "behosDateStart:入院时间开始时间<br>" +
                     "behosDateEnd:入院时间结束时间<br>" +
                     "leaveHosDateStart:出院时间开始时间<br>" +
@@ -107,7 +111,7 @@ public class BehospitalInfoController {
     @PostMapping("/analyze_api")
     @SysLogger("analyze_api")
     @Transactional
-//    @ApiIgnore
+    //    @ApiIgnore
     public RespDTO<Map<String, Object>> analyzeApi(@RequestBody AnalyzeApiVO analyzeApiVO) {
         return RespDTO.onSuc(behospitalInfoFacade.analyzeApi(analyzeApiVO));
     }
@@ -118,7 +122,7 @@ public class BehospitalInfoController {
     @PostMapping("/addCase")
     @SysLogger("addCase")
     @Transactional
-    public RespDTO<AnalyzeDTO> addCase(@RequestBody QcresultVO qcresultVO){
+    public RespDTO<AnalyzeDTO> addCase(@RequestBody QcresultVO qcresultVO) {
         qcresultVO.setType(1);
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
     }
@@ -129,7 +133,7 @@ public class BehospitalInfoController {
     @PostMapping("/delCase")
     @SysLogger("delCase")
     @Transactional
-    public RespDTO<AnalyzeDTO> delCase(@RequestBody QcresultVO qcresultVO){
+    public RespDTO<AnalyzeDTO> delCase(@RequestBody QcresultVO qcresultVO) {
         qcresultVO.setType(2);
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
     }
@@ -139,23 +143,28 @@ public class BehospitalInfoController {
     @PostMapping("/updCase")
     @SysLogger("updCase")
     @Transactional
-    public RespDTO<AnalyzeDTO> updCase(@RequestBody QcresultVO qcresultVO){
+    public RespDTO<AnalyzeDTO> updCase(@RequestBody QcresultVO qcresultVO) {
         qcresultVO.setType(3);
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
     }
 
-    @ApiOperation(value = "将未评分的病历进行评分[by:zhoutg]",
-            notes = "")
+    @ApiOperation(value = "对病历进行评分[by:zhoutg]",
+            notes = "参数内容清空:【所有医院】【未评分】病历数据<br>" +
+                    "<br>" +
+                    "type:类型过滤(1:出院时间比当前时间早3天前的病历(例如:长兴病历))<br>" +
+                    "hosptialIdList:医院列表id,1:长兴,3:台州,2:邵逸夫<br>" +
+                    "filterFlag: 筛选病历数据:0:未评分的病历,【推荐使用】;1:全部病历,【谨慎使用】")
     @PostMapping("/execule")
     @SysLogger("execule")
-    public RespDTO<Boolean> execule(){
-        behospitalInfoFacade.execute();
+    public RespDTO<Boolean> execule(@RequestBody TaskVO taskVO) {
+        behospitalInfoFacade.execute(taskVO, "");
         return RespDTO.onSuc(true);
     }
 
     @ApiOperation(value = "病历分页列表(科室)[by:zhoutg]",
             notes = "name:姓名<br>" +
                     "fileCode:档案号<br>" +
+                    "statisticsType: 统计维度 1-本月,2-本年<br>" +
                     "behosDateStart:入院时间开始时间<br>" +
                     "behosDateEnd:入院时间结束时间<br>" +
                     "leaveHosDateStart:出院时间开始时间<br>" +
@@ -170,6 +179,7 @@ public class BehospitalInfoController {
     @ApiOperation(value = "病历分页列表(个人)[by:zhoutg]",
             notes = "name:姓名<br>" +
                     "fileCode:档案号<br>" +
+                    "statisticsType: 统计维度 1-本月,2-本年<br>" +
                     "behosDateStart:入院时间开始时间<br>" +
                     "behosDateEnd:入院时间结束时间<br>" +
                     "leaveHosDateStart:出院时间开始时间<br>" +
@@ -180,4 +190,29 @@ public class BehospitalInfoController {
         IPage<BehospitalInfoDTO> data = behospitalInfoFacade.pagePerson(behospitalPageVO);
         return RespDTO.onSuc(data);
     }
+
+
+    @ApiOperation(value = "导出病历[by:gaodm]",
+            notes = "")
+    @PostMapping("/exportExcel")
+    @SysLogger("exportExcel")
+    public void exportExcel(HttpServletResponse response) {
+        behospitalInfoFacade.exportExcelFac(response);
+    }
+
+    @ApiOperation(value = "质控结果导出[by:zhaops]",
+            notes = "")
+    @PostMapping("/exportQcresult")
+    @SysLogger("exportQcresult")
+    public void exportQcresult(HttpServletResponse response, @RequestBody ExportQcresultVO exportQcresultVO) {
+        behospitalInfoFacade.exportQcresult(response, exportQcresultVO);
+    }
+
+    @ApiOperation(value = "科室质控结果导出[by:zhaops]",
+            notes = "")
+    @PostMapping("/exportQcresultByDept")
+    @SysLogger("exportQcresultByDept")
+    public void exportQcresultByDept(HttpServletResponse response, @RequestBody ExportQcresultVO exportQcresultVO) {
+        behospitalInfoFacade.exportQcresultByDept(response, exportQcresultVO);
+    }
 }

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

@@ -2,6 +2,7 @@ package com.diagbot.web;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.CaseAndDeptNumDTO;
 import com.diagbot.dto.DeptBaseDTO;
 import com.diagbot.dto.DeptNumDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
@@ -19,6 +20,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.List;
 import java.util.Map;
 
@@ -40,7 +42,7 @@ public class ConsoleByDeptController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/leaveHosCountByDept")
     @SysLogger("leaveHosCountByDept")
-    public RespDTO<Map<String, Object>> leaveHosCountByDept(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> leaveHosCountByDept(@RequestBody @Valid FilterVO filterVO) {
         Map<String, Object> data = consoleByDeptFacade.leaveHosCountByDept(filterVO);
         return RespDTO.onSuc(data);
     }
@@ -49,7 +51,7 @@ public class ConsoleByDeptController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/mrCountByDept")
     @SysLogger("mrCountByDept")
-    public RespDTO<Map<String, Object>> mrCountByDept(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> mrCountByDept(@RequestBody @Valid FilterVO filterVO) {
         Map<String, Object> data = consoleByDeptFacade.mrCountByDept(filterVO);
         return RespDTO.onSuc(data);
     }
@@ -58,7 +60,7 @@ public class ConsoleByDeptController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/entryCountGroupByCaseAndDept")
     @SysLogger("entryCountGroupByCaseAndDept")
-    public RespDTO<Map<String, Object>> entryCountGroupByCaseAndDept(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> entryCountGroupByCaseAndDept(@RequestBody @Valid FilterVO filterVO) {
         Map<String, Object> data = consoleByDeptFacade.entryCountGroupByCaseAndDept(filterVO);
         return RespDTO.onSuc(data);
     }
@@ -67,7 +69,7 @@ public class ConsoleByDeptController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/entryCountGroupByEntryAndDept")
     @SysLogger("entryCountGroupByEntryAndDept")
-    public RespDTO<Map<String, Object>> entryCountGroupByEntryAndDept(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> entryCountGroupByEntryAndDept(@RequestBody @Valid FilterVO filterVO) {
         Map<String, Object> data = consoleByDeptFacade.entryCountGroupByEntryAndDept(filterVO);
         return RespDTO.onSuc(data);
     }
@@ -87,7 +89,7 @@ public class ConsoleByDeptController {
                     "desc: 排序(降序) <br>")
     @PostMapping("/homePageLevelByDeptLimit")
     @SysLogger("homePageLevelByDeptLimit")
-    public RespDTO<List<LevelStatisticsDTO>> homePageLevelByDeptLimit(@RequestBody FilterOrderByDeptVO filterOrderByDeptVO) {
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelByDeptLimit(@RequestBody @Valid FilterOrderByDeptVO filterOrderByDeptVO) {
         return RespDTO.onSuc(consoleByDeptFacade.homePageLevelByDeptLimit(filterOrderByDeptVO));
     }
     //endregion -----------------------首页接口结束------------------------------
@@ -108,20 +110,21 @@ public class ConsoleByDeptController {
                     "deptName: 科室名称(必填)<br>")
     @PostMapping("/entryCountGroupByCaseAndDeptPage")
     @SysLogger("entryCountGroupByCaseAndDeptPage")
-    public RespDTO<IPage<DeptNumDTO>> entryCountGroupByCaseAndDeptPage(@RequestBody FilterPageByDeptVO filterPageByDeptVO) {
+    public RespDTO<IPage<DeptNumDTO>> entryCountGroupByCaseAndDeptPage(@RequestBody @Valid FilterPageByDeptVO filterPageByDeptVO) {
         IPage<DeptNumDTO> data = consoleByDeptFacade.entryCountGroupByCaseAndDeptPage(filterPageByDeptVO);
         return RespDTO.onSuc(data);
     }
 
-    @ApiOperation(value = "条目缺陷占比-科室(分页)-内页[by:zhaops]",
+    @ApiOperation(value = "缺陷详情-科室(分页)-内页[by:zhaops]",
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
                     "name: 缺陷名称<br>" +
                     "deptName: 科室名称(必填)<br>" +
-                    "casesId: 模块id:243=病案首页 <br>")
+                    "casesId: 模块id:243=病案首页 <br>" +
+                    "casesName: 模块名称<br>")
     @PostMapping("/entryCountGroupByEntryAndDeptPage")
     @SysLogger("entryCountGroupByEntryAndDeptPage")
-    public RespDTO<IPage<DeptNumDTO>> entryCountGroupByEntryAndDeptPage(@RequestBody FilterPageByDeptVO filterPageByDeptVO) {
-        IPage<DeptNumDTO> data = consoleByDeptFacade.entryCountGroupByEntryAndDeptPage(filterPageByDeptVO);
+    public RespDTO<IPage<CaseAndDeptNumDTO>> entryCountGroupByEntryAndDeptPage(@RequestBody @Valid FilterPageByDeptVO filterPageByDeptVO) {
+        IPage<CaseAndDeptNumDTO> data = consoleByDeptFacade.entryCountGroupByEntryAndDeptPage(filterPageByDeptVO);
         return RespDTO.onSuc(data);
     }
 
@@ -133,11 +136,28 @@ public class ConsoleByDeptController {
     @PostMapping("/resultStatisticsByDeptAndDoctorPage")
     @SysLogger("resultStatisticsByDeptAndDoctorPage")
     @ApiIgnore
-    public RespDTO<IPage<DeptNumDTO>> resultStatisticsByDeptAndDoctorPage(@RequestBody FilterPageByDeptVO filterPageByDeptVO) {
+    public RespDTO<IPage<DeptNumDTO>> resultStatisticsByDeptAndDoctorPage(@RequestBody @Valid FilterPageByDeptVO filterPageByDeptVO) {
         IPage<DeptNumDTO> data = consoleByDeptFacade.resultStatisticsByDeptAndDoctorPage(filterPageByDeptVO);
         return RespDTO.onSuc(data);
     }
 
+    /**
+     * 条目缺陷占比-内页
+     *
+     * @param filterPageByDeptVO
+     * @return
+     */
+    @ApiOperation(value = "条目缺陷占比-内页(分页)-内页[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "name: 缺陷名称<br>" +
+                    "deptName: 科室名称(必填)<br>")
+    @PostMapping("/entryGroupByEntryAndDeptInnerPage")
+    @SysLogger("entryGroupByEntryAndDeptInnerPage")
+    public RespDTO<IPage<DeptNumDTO>> entryGroupByEntryAndDeptInnerPage(@RequestBody @Valid FilterPageByDeptVO filterPageByDeptVO) {
+        IPage<DeptNumDTO> data = consoleByDeptFacade.entryGroupByEntryAndDeptInnerPage(filterPageByDeptVO);
+        return RespDTO.onSuc(data);
+    }
+
     /**
      * 各科室缺陷占比(组合)
      *
@@ -153,7 +173,7 @@ public class ConsoleByDeptController {
                     "desc: 排序(降序) <br>")
     @PostMapping("/levelStatisticsByDept")
     @SysLogger("levelStatisticsByDept")
-    public RespDTO<List<LevelStatisticsDTO>> levelStatisticsByDept(@RequestBody FilterOrderByDeptVO filterOrderByDeptVO) {
+    public RespDTO<List<LevelStatisticsDTO>> levelStatisticsByDept(@RequestBody @Valid FilterOrderByDeptVO filterOrderByDeptVO) {
         return RespDTO.onSuc(consoleByDeptFacade.levelStatisticsByDept(filterOrderByDeptVO));
     }
 
@@ -172,10 +192,9 @@ public class ConsoleByDeptController {
                     "desc: 排序(降序) <br>")
     @PostMapping("/homePageLevelStatisticsByDept")
     @SysLogger("homePageLevelStatisticsByDept")
-    public RespDTO<List<LevelStatisticsDTO>> homePageLevelStatisticsByDept(@RequestBody FilterOrderByDeptVO filterOrderByDeptVO) {
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelStatisticsByDept(@RequestBody @Valid FilterOrderByDeptVO filterOrderByDeptVO) {
         return RespDTO.onSuc(consoleByDeptFacade.homePageLevelStatisticsByDept(filterOrderByDeptVO));
     }
 
     //endregion -----------------------内页接口结束------------------------------
-
 }

+ 78 - 28
src/main/java/com/diagbot/web/ConsoleController.java

@@ -3,6 +3,7 @@ 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.CaseNumDTO;
 import com.diagbot.dto.LevelStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.RespDTO;
@@ -20,6 +21,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.List;
 import java.util.Map;
 
@@ -43,7 +45,7 @@ public class ConsoleController {
     @PostMapping("/mrStatistics")
     @SysLogger("mrStatistics")
     @ApiIgnore
-    public RespDTO<Map<String, Object>> mrStatistics(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> mrStatistics(@RequestBody @Valid FilterVO filterVO) {
         Map<String, Object> data = consoleFacade.mrStatistics(filterVO);
         return RespDTO.onSuc(data);
     }
@@ -53,7 +55,7 @@ public class ConsoleController {
     @PostMapping("/resultStatistics")
     @SysLogger("resultStatistics")
     @ApiIgnore
-    public RespDTO<Map<String, Object>> resultStatistics(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> resultStatistics(@RequestBody @Valid FilterVO filterVO) {
         Map<String, Object> data = consoleFacade.resultStatistics(filterVO);
         return RespDTO.onSuc(data);
     }
@@ -63,7 +65,7 @@ public class ConsoleController {
     @PostMapping("/averageStatistics")
     @SysLogger("averageStatistics")
     @ApiIgnore
-    public RespDTO<Map<String, Object>> averageStatistics(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> averageStatistics(@RequestBody @Valid FilterVO filterVO) {
         Map<String, Object> data = consoleFacade.averageStatistics(filterVO);
         return RespDTO.onSuc(data);
     }
@@ -81,7 +83,7 @@ public class ConsoleController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/getAverageDayNum")
     @SysLogger("getAverageDayNum")
-    public RespDTO<Map<String, Object>> getAverageDayNum(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> getAverageDayNum(@RequestBody @Valid FilterVO filterVO) {
         return RespDTO.onSuc(consoleFacade.getAverageDayNum(filterVO));
     }
 
@@ -95,7 +97,7 @@ public class ConsoleController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/getAverageFee")
     @SysLogger("getAverageFee")
-    public RespDTO<Map<String, Object>> getAverageFee(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> getAverageFee(@RequestBody @Valid FilterVO filterVO) {
         return RespDTO.onSuc(consoleFacade.getAverageFee(filterVO));
     }
 
@@ -109,10 +111,25 @@ public class ConsoleController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/getAverageScore")
     @SysLogger("getAverageScore")
-    public RespDTO<Map<String, Object>> getAverageScore(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> getAverageScore(@RequestBody @Valid FilterVO filterVO) {
         return RespDTO.onSuc(consoleFacade.getAverageScore(filterVO));
     }
 
+    /**
+     * 各科室质控平均分(首页)-根据内外科系统统计
+     *
+     * @param filterVO
+     * @return
+     */
+    @ApiOperation(value = "各科室质控平均分(首页)-根据内外科系统统计[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "deptClass: 科室分类:内科/外科,全部不传 <br>" )
+    @PostMapping("/getAverageScoreByDeptClass")
+    @SysLogger("getAverageScoreByDeptClass")
+    public RespDTO<Map<String, Object>> getAverageScoreByDeptClass(@RequestBody @Valid FilterVO filterVO) {
+        return RespDTO.onSuc(consoleFacade.getAverageScoreByDeptClass(filterVO));
+    }
+
     /**
      * 各科室甲级病历占比
      *
@@ -123,7 +140,7 @@ public class ConsoleController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/getLevelResultDept")
     @SysLogger("getLevelResultDept")
-    public RespDTO<Map<String, Object>> getLevelResultDept(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> getLevelResultDept(@RequestBody @Valid FilterVO filterVO) {
         return RespDTO.onSuc(consoleFacade.getLevelResultDept(filterVO));
     }
 
@@ -137,7 +154,7 @@ public class ConsoleController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/leaveHosCount")
     @SysLogger("leaveHosCount")
-    public RespDTO<Map<String, Object>> leaveHosCount(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> leaveHosCount(@RequestBody @Valid FilterVO filterVO) {
         return RespDTO.onSuc(consoleFacade.leaveHosCount(filterVO));
     }
 
@@ -151,7 +168,7 @@ public class ConsoleController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/mrCount")
     @SysLogger("mrCount")
-    public RespDTO<Map<String, Object>> mrCount(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> mrCount(@RequestBody @Valid FilterVO filterVO) {
         return RespDTO.onSuc(consoleFacade.mrCount(filterVO));
     }
 
@@ -161,11 +178,11 @@ public class ConsoleController {
      * @param filterVO
      * @return
      */
-    @ApiOperation(value = "各模块缺陷占比排行[by:zhaops]",
+    @ApiOperation(value = "各模块缺陷占比排行(首页)[by:zhaops]",
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/entryCountGroupByCase")
     @SysLogger("entryCountGroupByCase")
-    public RespDTO<Map<String, Object>> entryCountGroupByCase(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> entryCountGroupByCase(@RequestBody @Valid FilterVO filterVO) {
         return RespDTO.onSuc(consoleFacade.entryCountGroupByCase(filterVO));
     }
 
@@ -175,11 +192,11 @@ public class ConsoleController {
      * @param filterVO
      * @return
      */
-    @ApiOperation(value = "条目缺陷占比[by:zhaops]",
+    @ApiOperation(value = "条目缺陷占比(首页)[by:zhaops]",
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/entryCountGroupByEntry")
     @SysLogger("entryCountGroupByEntry")
-    public RespDTO<Map<String, Object>> entryCountGroupByEntry(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> entryCountGroupByEntry(@RequestBody @Valid FilterVO filterVO) {
         return RespDTO.onSuc(consoleFacade.entryCountGroupByEntry(filterVO));
     }
 
@@ -193,7 +210,7 @@ public class ConsoleController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/entryByDept")
     @SysLogger("entryByDept")
-    public RespDTO<Map<String, Object>> entryByDept(@RequestBody FilterVO filterVO) {
+    public RespDTO<Map<String, Object>> entryByDept(@RequestBody @Valid FilterVO filterVO) {
         return RespDTO.onSuc(consoleFacade.entryByDept(filterVO));
     }
     //endregion-----------------------单独接口结束-------------------------------
@@ -210,7 +227,7 @@ public class ConsoleController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/entryCountGroupByCasePage")
     @SysLogger("entryCountGroupByCasePage")
-    public RespDTO<IPage<NumDTO>> entryCountGroupByCasePage(@RequestBody FilterPageVO filterPageVO) {
+    public RespDTO<IPage<NumDTO>> entryCountGroupByCasePage(@RequestBody @Valid FilterPageVO filterPageVO) {
         return RespDTO.onSuc(consoleFacade.entryCountGroupByCasePage(filterPageVO));
     }
 
@@ -220,13 +237,14 @@ public class ConsoleController {
      * @param filterPageVO
      * @return
      */
-    @ApiOperation(value = "条目缺陷占比(分页)[by:zhaops]",
-            notes = "type: 统计维度 1-本月,2-本年(必填)<br>"+
-                    "deptName: 科室名称 <br>"+
-                    "casesId: 模块id:243=病案首页 <br>")
+    @ApiOperation(value = "缺陷详情(分页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "deptName: 科室名称 <br>" +
+                    "casesId: 模块id:243=病案首页 <br>" +
+                    "casesName: 模块名称 <br>")
     @PostMapping("/entryCountGroupByEntryPage")
     @SysLogger("entryCountGroupByEntryPage")
-    public RespDTO<IPage<NumDTO>> entryCountGroupByEntryPage(@RequestBody FilterPageVO filterPageVO) {
+    public RespDTO<IPage<CaseNumDTO>> entryCountGroupByEntryPage(@RequestBody @Valid FilterPageVO filterPageVO) {
         return RespDTO.onSuc(consoleFacade.entryCountGroupByEntryPage(filterPageVO));
     }
 
@@ -241,7 +259,7 @@ public class ConsoleController {
                     "dateType: 时间类型 1-本月/本年,2-上月/去年,3-去年本月/去年<br>")
     @PostMapping("/getAverageDayNumPage")
     @SysLogger("getAverageDayNumPage")
-    public RespDTO<IPage<AverageStatisticsDTO>> getAverageDayNumPage(@RequestBody FilterPageByAverageVO filterPageByAverageVO) {
+    public RespDTO<IPage<AverageStatisticsDTO>> getAverageDayNumPage(@RequestBody @Valid FilterPageByAverageVO filterPageByAverageVO) {
         return RespDTO.onSuc(consoleFacade.getAverageDayNumPage(filterPageByAverageVO));
     }
 
@@ -256,7 +274,7 @@ public class ConsoleController {
                     "dateType: 时间类型 1-本月/本年,2-上月/去年,3-去年本月/去年<br>")
     @PostMapping("/getAverageFeePage")
     @SysLogger("getAverageFeePage")
-    public RespDTO<IPage<AverageStatisticsDTO>> getAverageFeePage(@RequestBody FilterPageByAverageVO filterPageByAverageVO) {
+    public RespDTO<IPage<AverageStatisticsDTO>> getAverageFeePage(@RequestBody @Valid FilterPageByAverageVO filterPageByAverageVO) {
         return RespDTO.onSuc(consoleFacade.getAverageFeePage(filterPageByAverageVO));
     }
 
@@ -270,7 +288,7 @@ public class ConsoleController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/getAverageScoreByDeptPage")
     @SysLogger("getAverageScoreByDeptPage")
-    public RespDTO<IPage<AverageStatisticsDTO>> getAverageScoreByDeptPage(@RequestBody FilterPageVO filterPageVO) {
+    public RespDTO<IPage<AverageStatisticsDTO>> getAverageScoreByDeptPage(@RequestBody @Valid FilterPageVO filterPageVO) {
         return RespDTO.onSuc(consoleFacade.getAverageScoreByDeptPage(filterPageVO));
     }
 
@@ -284,7 +302,7 @@ public class ConsoleController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/resultStatisticsByDeptPage")
     @SysLogger("resultStatisticsByDeptPage")
-    public RespDTO<IPage<NumDTO>> resultStatisticsByDeptPage(@RequestBody FilterPageVO filterPageVO) {
+    public RespDTO<IPage<NumDTO>> resultStatisticsByDeptPage(@RequestBody @Valid FilterPageVO filterPageVO) {
         return RespDTO.onSuc(consoleFacade.resultStatisticsByDeptPage(filterPageVO));
     }
 
@@ -298,10 +316,23 @@ public class ConsoleController {
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/levelPercentGroupByDeptPage")
     @SysLogger("levelPercentGroupByDeptPage")
-    public RespDTO<IPage<NumDTO>> levelPercentGroupByDeptPage(@RequestBody FilterPageVO filterPageVO) {
+    public RespDTO<IPage<NumDTO>> levelPercentGroupByDeptPage(@RequestBody @Valid FilterPageVO filterPageVO) {
         return RespDTO.onSuc(consoleFacade.levelPercentGroupByDeptPage(filterPageVO));
     }
 
+    /**
+     * 条目缺陷占比(内页)
+     *
+     * @param filterPageVO
+     * @return
+     */
+    @ApiOperation(value = "条目缺陷占比(分页)[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
+    @PostMapping("/entryGroupByEntryInnerPage")
+    @SysLogger("entryGroupByEntryInnerPage")
+    public RespDTO<IPage<NumDTO>> entryGroupByEntryInnerPage(@RequestBody @Valid FilterPageVO filterPageVO) {
+        return RespDTO.onSuc(consoleFacade.entryGroupByEntryInnerPage(filterPageVO));
+    }
     //endregion-----------------------分页接口结束-------------------------------
 
     /**
@@ -318,10 +349,29 @@ public class ConsoleController {
                     "desc: 排序(降序) <br>")
     @PostMapping("/levelStatistics")
     @SysLogger("levelStatistics")
-    public RespDTO<List<LevelStatisticsDTO>> levelStatistics(@RequestBody FilterOrderVO filterOrderVO) {
+    public RespDTO<List<LevelStatisticsDTO>> levelStatistics(@RequestBody @Valid FilterOrderVO filterOrderVO) {
         return RespDTO.onSuc(consoleFacade.levelStatistics(filterOrderVO));
     }
 
+    /**
+     * 各科室缺陷占比(组合)-全院-根据内外科系统统计
+     *
+     * @param filterOrderVO
+     * @return
+     */
+    @ApiOperation(value = "各科室缺陷占比(组合)-全院-根据内外科系统统计[by:zhaops]",
+            notes = "type: 统计维度 1-本月,2-本年(必填)<br>" +
+                    "level: 病历等级 <br>" +
+                    "name: 科室名称 <br>" +
+                    "deptClass: 科室分类:内科/外科,全部不传 <br>" +
+                    "asc: 排序(升序) <br>" +
+                    "desc: 排序(降序) <br>")
+    @PostMapping("/levelStatisticsByDeptClass")
+    @SysLogger("levelStatisticsByDeptClass")
+    public RespDTO<List<LevelStatisticsDTO>> levelStatisticsByDeptClass(@RequestBody @Valid FilterOrderVO filterOrderVO) {
+        return RespDTO.onSuc(consoleFacade.levelStatisticsByDeptClass(filterOrderVO));
+    }
+
     /**
      * 病案首页合格率占比
      *
@@ -336,7 +386,7 @@ public class ConsoleController {
                     "desc: 排序(降序) <br>")
     @PostMapping("/homePageLevelStatistics")
     @SysLogger("homePageLevelStatistics")
-    public RespDTO<List<LevelStatisticsDTO>> homePageLevelStatistics(@RequestBody FilterOrderVO filterOrderVO) {
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelStatistics(@RequestBody @Valid FilterOrderVO filterOrderVO) {
         return RespDTO.onSuc(consoleFacade.homePageLevelStatistics(filterOrderVO));
     }
 
@@ -354,7 +404,7 @@ public class ConsoleController {
                     "desc: 排序(降序) <br>")
     @PostMapping("/homePageLevelLimit")
     @SysLogger("homePageLevelLimit")
-    public RespDTO<List<LevelStatisticsDTO>> homePageLevelLimit(@RequestBody FilterOrderVO filterOrderVO) {
+    public RespDTO<List<LevelStatisticsDTO>> homePageLevelLimit(@RequestBody @Valid FilterOrderVO filterOrderVO) {
         return RespDTO.onSuc(consoleFacade.homePageLevelLimit(filterOrderVO));
     }
 }

+ 4 - 3
src/main/java/com/diagbot/web/ModelHospitalController.java

@@ -17,6 +17,7 @@ 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;
 import java.util.List;
 
 /**
@@ -49,7 +50,7 @@ public class ModelHospitalController {
             notes = "根据id获取医院数据")
     @PostMapping("/getModelHospitalById")
     @SysLogger("getModelHospitalById")
-    public RespDTO<ModelHospitalAllDTO> getModelHospitalById(@RequestBody ModelHospitalIdVO modelHospitalIdVO) {
+    public RespDTO<ModelHospitalAllDTO> getModelHospitalById(@RequestBody @Valid ModelHospitalIdVO modelHospitalIdVO) {
         ModelHospitalAllDTO data = modelHospitalFacade.getModelHospitalById(modelHospitalIdVO.getModeId());
         return RespDTO.onSuc(data);
     }
@@ -57,7 +58,7 @@ public class ModelHospitalController {
             notes = "添加和修改医院数据模块")
     @PostMapping("/saveAndupdataModel")
     @SysLogger("saveAndupdataModel")
-    public RespDTO<Boolean> updataModelHospital(@RequestBody ModelHospitalUpdataVO modelHospitalUpdataVO) {
+    public RespDTO<Boolean> updataModelHospital(@RequestBody @Valid ModelHospitalUpdataVO modelHospitalUpdataVO) {
         Boolean res = modelHospitalFacade.updataModelHospitals(modelHospitalUpdataVO);
         return RespDTO.onSuc(res);
     }
@@ -66,7 +67,7 @@ public class ModelHospitalController {
             notes = "删除医院数据模块")
     @PostMapping("/clearModelHospital")
     @SysLogger("clearModelHospital")
-    public RespDTO<Boolean> clearModelHospital(@RequestBody ModelHospitalIdVO modelHospitalIdVO) {
+    public RespDTO<Boolean> clearModelHospital(@RequestBody @Valid ModelHospitalIdVO modelHospitalIdVO) {
         Boolean res = modelHospitalFacade.clearModelHospital(modelHospitalIdVO.getModeId());
         return RespDTO.onSuc(res);
     }

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

@@ -4,9 +4,11 @@ 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.QcAbnormalModeDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.QcAbnormalFacade;
 import com.diagbot.vo.QcAbnormalDelVO;
+import com.diagbot.vo.QcAbnormalModeVO;
 import com.diagbot.vo.QcAbnormalSaveVO;
 import com.diagbot.vo.QcAbnormalVO;
 import io.swagger.annotations.Api;
@@ -66,4 +68,13 @@ public class QcAbnormalController {
     public RespDTO<Boolean> delQcAnnormal(@RequestBody @Valid QcAbnormalDelVO qcAbnormalDelVO) {
         return RespDTO.onSuc(qcAbnormalFacade.delQcAnnormal(qcAbnormalDelVO));
     }
+
+    @ApiOperation(value = "根据id查询数据模块信息[by:wangfeng]",
+            notes = "description: 异常说明"
+                    )
+    @PostMapping("/getQcAnnormalMode")
+    @SysLogger("getQcAnnormalMode")
+    public RespDTO<QcAbnormalModeDTO> getQcAnnormalMode(@RequestBody @Valid QcAbnormalModeVO qcAbnormalModeVO) {
+        return RespDTO.onSuc(qcAbnormalFacade.getQcAnnormalMode(qcAbnormalModeVO));
+    }
 }

+ 108 - 0
src/main/java/com/diagbot/web/QcTypeController.java

@@ -0,0 +1,108 @@
+package com.diagbot.web;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.QcCasesEntrySimpleDTO;
+import com.diagbot.dto.QcTypeDTO;
+import com.diagbot.dto.QcTypePageDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.QcQuestionInfo;
+import com.diagbot.facade.QcTypeFacade;
+import com.diagbot.vo.DeleteQcTypeVO;
+import com.diagbot.vo.QcEntryHospitalVO;
+import com.diagbot.vo.QcTypeIndexVO;
+import com.diagbot.vo.QcTypePageVO;
+import com.diagbot.vo.QcTypeSaveVO;
+import com.diagbot.vo.QcTypeVO;
+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 springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 质控类型标准 前端控制器
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-05-14
+ */
+@RestController
+@RequestMapping("/qc/qcType")
+@SuppressWarnings("unchecked")
+@Api(value = "质控类型相关API", tags = { "质控类型相关API" })
+public class QcTypeController {
+
+    @Autowired
+    QcTypeFacade qcTypeFacade;
+
+    @ApiOperation(value = "新增或更新[by:gaodm]",
+            notes = "")
+    @PostMapping("/saveOrUpdate")
+    @SysLogger("saveOrUpdate")
+    @Transactional
+    public RespDTO<Boolean> saveOrUpdate(@RequestBody QcTypeSaveVO qcTypeSaveVO) {
+        qcTypeFacade.saveOrUpdate(qcTypeSaveVO);
+        return RespDTO.onSuc(true);
+    }
+
+    @ApiOperation(value = "分页列表[by:gaodm]",
+            notes = "    // 名称\n" +
+                    "     String name;")
+    @PostMapping("/page")
+    @SysLogger("page")
+    public RespDTO<IPage<QcTypePageDTO>> list(@RequestBody QcTypePageVO qcTypePageVO) {
+        IPage<QcTypePageDTO> data = qcTypeFacade.getListFac(qcTypePageVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "新增时质控条目分组信息[by:gaodm]",
+            notes = "")
+    @PostMapping("/getEntryByHospital")
+    @SysLogger("getEntryByHospital")
+    public RespDTO<Map<String, List<QcCasesEntrySimpleDTO>>> getEntryByHospital(@RequestBody QcEntryHospitalVO qcEntryHospitalVO) {
+        Map<String, List<QcCasesEntrySimpleDTO>> data = qcTypeFacade.getEntryByHospital(qcEntryHospitalVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "质控条目检索[by:gaodm]",
+            notes = "    // 界面输入\n" +
+                    "     String input;\n" +
+                    "    // 过滤caseEntryId\n" +
+                    "     List<Long> notIds;")
+    @PostMapping("/index")
+    @SysLogger("index")
+    @ApiIgnore
+    public RespDTO<List<QcQuestionInfo>> index(@RequestBody QcTypeIndexVO qcTypeIndexVO) {
+        List<QcCasesEntrySimpleDTO> data = qcTypeFacade.indexFac(qcTypeIndexVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "删除[by:gaodm]",
+            notes = "")
+    @PostMapping("/delete")
+    @SysLogger("delete")
+    @Transactional
+    public RespDTO<Boolean> delete(@Valid @RequestBody DeleteQcTypeVO deleteQcTypeVO) {
+        qcTypeFacade.deleteByIdsFac(deleteQcTypeVO);
+        return RespDTO.onSuc(true);
+    }
+
+    @ApiOperation(value = "根据id返回内容[by:gaodm]",
+            notes = "id: qcTypeId<br>" )
+    @PostMapping("/getById")
+    @SysLogger("getById")
+    public RespDTO<QcTypeDTO> getById(@RequestBody QcTypeVO qcTypeVO) {
+        QcTypeDTO data = qcTypeFacade.getById(qcTypeVO);
+        return RespDTO.onSuc(data);
+    }
+}

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


+ 70 - 234
src/main/resources/mapper/HomePageMapper.xml

@@ -144,8 +144,8 @@
         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
+        round( sum( CAST(b.behospital_day_num AS DECIMAL ( 18, 2 ) ))/ count(*), 2 ) AS averageValue,
+        round( sum( CAST(b.behospital_day_num AS DECIMAL ( 18, 2 ) )), 2 ) AS totleValue
         FROM
         med_behospital_info a,
         med_home_page b
@@ -154,6 +154,7 @@
         AND a.behospital_code = b.behospital_code
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -175,8 +176,8 @@
         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
+        round( sum( CAST(b.total_fee AS DECIMAL ( 18, 2 ) ))/ count(*), 2 ) AS averageValue,
+        round( sum( CAST(b.total_fee AS DECIMAL ( 18, 2 ) )), 2 ) AS totleValue
         FROM
         med_behospital_info a,
         med_home_page b
@@ -185,6 +186,7 @@
         AND a.behospital_code = b.behospital_code
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -202,113 +204,24 @@
 
     <!-- 按科室统计平均住院天数 (分页)-->
     <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
+        SELECT t1.*
         FROM
-        (
-        (
-        SELECT DISTINCT
-        a.beh_dept_id AS id,
-        a.beh_dept_name AS NAME
+        (SELECT
+        t.id,
+        t.NAME,
+        sum( t.averageValue ) AS averageValue,
+        sum( t.lastAverageValue ) AS lastAverageValue,
+        sum( t.lastYearAverageValue ) AS lastYearAverageValue
         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
+        round( sum( CAST( b.behospital_day_num AS DECIMAL ( 18, 2 ) ))/ count(*), 2 ) AS averageValue,
+        0 AS lastAverageValue,
+        0 AS lastYearAverageValue
         FROM
         med_behospital_info a,
         med_home_page b
@@ -317,6 +230,7 @@
         AND a.behospital_code = b.behospital_code
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
@@ -333,15 +247,15 @@
         GROUP BY
         a.beh_dept_id,
         a.beh_dept_name
-        ) t1 ON dept.id = t1.id
-        AND dept.NAME = t1.
-        NAME LEFT JOIN (
+        ) UNION
+        (
         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
+        0 AS averageValue,
+        round( sum( CAST( b.behospital_day_num AS DECIMAL ( 18, 2 ) ))/ count(*), 2 ) AS lastAverageValue,
+        0 AS lastYearAverageValue
         FROM
         med_behospital_info a,
         med_home_page b
@@ -350,6 +264,7 @@
         AND a.behospital_code = b.behospital_code
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
@@ -366,15 +281,15 @@
         GROUP BY
         a.beh_dept_id,
         a.beh_dept_name
-        ) t2 ON dept.id = t2.id
-        AND dept.NAME = t2.
-        NAME LEFT JOIN (
+        ) UNION
+        (
         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
+        0 AS averageValue,
+        0 AS lastAverageValue,
+        round( sum( CAST( b.behospital_day_num AS DECIMAL ( 18, 2 ) ))/ count(*), 2 ) AS lastYearAverageValue
         FROM
         med_behospital_info a,
         med_home_page b
@@ -383,6 +298,7 @@
         AND a.behospital_code = b.behospital_code
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
@@ -399,124 +315,38 @@
         GROUP BY
         a.beh_dept_id,
         a.beh_dept_name
-        ) t3 ON dept.id = t3.id
-        AND dept.NAME = t3.NAME
+        )
+        ) t
+        GROUP BY
+        t.id,
+        t.NAME
         ORDER BY
-        t1.averageValue DESC,
-        t2.lastAverageValue DESC,
-        t3.lastYearAverageValue DESC
-        )t
+        t.averageValue DESC,
+        t.lastAverageValue DESC,
+        t.lastYearAverageValue DESC)
+        t1
     </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
+        SELECT t1.*
         FROM
-        (
-        (
-        SELECT DISTINCT
-        a.beh_dept_id AS id,
-        a.beh_dept_name AS NAME
+        (SELECT
+        t.id,
+        t.NAME,
+        sum( t.averageValue ) AS averageValue,
+        sum( t.lastAverageValue ) AS lastAverageValue,
+        sum( t.lastYearAverageValue ) AS lastYearAverageValue
         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
+        round( sum( CAST( b.total_fee AS DECIMAL ( 18, 2 ) ))/ count(*), 2 ) AS averageValue,
+        0 AS lastAverageValue,
+        0 AS lastYearAverageValue
         FROM
         med_behospital_info a,
         med_home_page b
@@ -525,6 +355,7 @@
         AND a.behospital_code = b.behospital_code
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
@@ -541,15 +372,15 @@
         GROUP BY
         a.beh_dept_id,
         a.beh_dept_name
-        ) t1 ON dept.id = t1.id
-        AND dept.NAME = t1.
-        NAME LEFT JOIN (
+        ) UNION
+        (
         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
+        0 AS averageValue,
+        round( sum( CAST( b.total_fee AS DECIMAL ( 18, 2 ) ))/ count(*), 2 ) AS lastAverageValue,
+        0 AS lastYearAverageValue
         FROM
         med_behospital_info a,
         med_home_page b
@@ -558,6 +389,7 @@
         AND a.behospital_code = b.behospital_code
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
@@ -574,15 +406,15 @@
         GROUP BY
         a.beh_dept_id,
         a.beh_dept_name
-        ) t2 ON dept.id = t2.id
-        AND dept.NAME = t2.
-        NAME LEFT JOIN (
+        ) UNION
+        (
         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
+        0 AS averageValue,
+        0 AS lastAverageValue,
+        round( sum( CAST( b.total_fee AS DECIMAL ( 18, 2 ) ))/ count(*), 2 ) AS lastYearAverageValue
         FROM
         med_behospital_info a,
         med_home_page b
@@ -591,6 +423,7 @@
         AND a.behospital_code = b.behospital_code
         AND a.is_deleted = 'N'
         AND b.is_deleted = 'N'
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageByAverageVO.hospitalId != null and filterPageByAverageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageByAverageVO.hospitalId}
@@ -607,12 +440,15 @@
         GROUP BY
         a.beh_dept_id,
         a.beh_dept_name
-        ) t3 ON dept.id = t3.id
-        AND dept.NAME = t3.NAME
+        )
+        ) t
+        GROUP BY
+        t.id,
+        t.NAME
         ORDER BY
-        t1.averageValue DESC,
-        t2.lastAverageValue DESC,
-        t3.lastYearAverageValue DESC
-        )t
+        t.averageValue DESC,
+        t.lastAverageValue DESC,
+        t.lastYearAverageValue DESC)
+        t1
     </select>
 </mapper>

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

@@ -19,7 +19,7 @@
     </resultMap>
 
     <select id="getRecordContent"  resultType="com.diagbot.dto.RecordContentDTO">
-        select t1.rec_id, t1.rec_title, t2.name stand_model_name, t3.content_text, t3.html_text, t3.xml_text
+        select t1.rec_id, t1.rec_title, t1.rec_type_id, t1.mode_id , t2.name stand_model_name, t3.content_text, t3.html_text, t3.xml_text
         from med_medical_record t1, qc_mode t2, med_medical_record_content t3
         where
              t1.is_deleted = 'N'

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

@@ -84,4 +84,45 @@
             </foreach>
         </if>
     </select>
+
+    <select id="index" resultType="com.diagbot.dto.QcCasesEntrySimpleDTO">
+        SELECT distinct t3.msg name, t2.id
+        FROM
+        qc_cases_entry t2,
+        qc_cases_entry_hospital t3
+        where t2.is_deleted = 'N'
+        and t3.is_deleted = 'N'
+        and t2.id = t3.cases_entry_id
+        and t3.is_used = 1
+        <if test="hospitalId != null">
+            and t3.hospital_id = #{hospitalId}
+        </if>
+        <if test="input != null and input != ''">
+            and t2.name like concat('%', #{input}, '%')
+        </if>
+        <if test="notIds != null and notIds.size > 0">
+            and t2.id not in
+            <foreach item="item" collection="notIds" open="(" separator="," close=")" >
+                #{item}
+            </foreach>
+        </if>
+        order by t2.order_no
+    </select>
+
+    <select id="getEntryByHospital" resultType="com.diagbot.dto.QcCasesEntrySimpleDTO">
+        SELECT
+            t1.`name`, t1.id, t3.`name` mode_name, t2.is_used, 1 as sel
+        FROM
+            qc_cases_entry t1,
+            qc_cases_entry_hospital t2,
+            qc_mode t3
+        WHERE
+            t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
+        AND t1.id = t2.cases_entry_id
+        AND t1.mode_id = t3.id
+        AND t2.hospital_id = #{hospitalId}
+        ORDER BY t3.order_no,t1.order_no
+    </select>
 </mapper>

+ 39 - 0
src/main/resources/mapper/QcTypeCasesEntryMapper.xml

@@ -15,4 +15,43 @@
         <result column="modifier" property="modifier" />
     </resultMap>
 
+    <select id="getByTypeId" resultType="com.diagbot.dto.QcCasesEntrySimpleDTO">
+        SELECT
+            a1.*,IF (a2.case_entry_id IS NULL,NULL,1) sel
+        FROM
+            (
+                SELECT
+                    t1.`name`,
+                    t1.id,
+                    t3.`name` mode_name,
+                    t2.is_used,
+                    t3.order_no mode_order,
+                    t1.order_no
+                FROM
+                    qc_cases_entry t1,
+                    qc_cases_entry_hospital t2,
+                    qc_mode t3
+                WHERE
+                    t1.is_deleted = 'N'
+                AND t2.is_deleted = 'N'
+                AND t3.is_deleted = 'N'
+                AND t1.id = t2.cases_entry_id
+                AND t1.mode_id = t3.id
+                AND t2.hospital_id = #{hospitalId}
+            ) a1
+        LEFT JOIN (
+            SELECT
+                q2.case_entry_id
+            FROM
+                qc_type q1,
+                qc_type_cases_entry q2
+            WHERE
+                q1.is_deleted = 'N'
+            AND q2.is_deleted = 'N'
+            AND q1.id = q2.type_id
+            AND q1.hospital_id = #{hospitalId}
+            AND q1.id = #{id}
+        ) a2 ON a1.id = a2.case_entry_id
+        ORDER BY a1.mode_order, a1.order_no
+    </select>
 </mapper>

+ 13 - 0
src/main/resources/mapper/QcTypeMapper.xml

@@ -5,6 +5,7 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.diagbot.entity.QcType">
         <id column="id" property="id" />
+        <result column="hospital_id" property="hospitalId" />
         <result column="name" property="name" />
         <result column="remark" property="remark" />
         <result column="is_deleted" property="isDeleted" />
@@ -14,4 +15,16 @@
         <result column="modifier" property="modifier" />
     </resultMap>
 
+    <!--分页-->
+    <select id="getList" resultType="com.diagbot.dto.QcTypePageDTO">
+        SELECT a.* FROM `qc_type` a
+        WHERE a.is_deleted = 'N'
+        <if test="hospitalId != null">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="name != null and name != ''">
+            AND UPPER(a.name) like concat ('%', UPPER(trim(#{name})), '%')
+        </if>
+        order by a.gmt_modified desc
+    </select>
 </mapper>

+ 8 - 1
src/main/resources/mapper/QcresultDetailMapper.xml

@@ -6,9 +6,16 @@
     <resultMap id="BaseResultMap" type="com.diagbot.entity.QcresultDetail">
         <id column="id" property="id" />
         <result column="hospital_id" property="hospitalId" />
-        <result column="cases_entry_id" property="casesEntryId" />
         <result column="behospital_code" property="behospitalCode" />
+        <result column="cases_id" property="casesId" />
+        <result column="cases_score" property="casesScore" />
+        <result column="cases_entry_id" property="casesEntryId" />
         <result column="score" property="score" />
+        <result column="msg" property="msg" />
+        <result column="info" property="info" />
+        <result column="is_reject" property="isReject" />
+        <result column="grade_type" property="gradeType" />
+        <result column="opt_type" property="optType" />
         <result column="is_deleted" property="isDeleted" />
         <result column="gmt_create" property="gmtCreate" />
         <result column="gmt_modified" property="gmtModified" />

+ 387 - 101
src/main/resources/mapper/QcresultInfoMapper.xml

@@ -24,15 +24,11 @@
         count(1)
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c
         WHERE
-        a.hospital_id = b.hospital_id
-        AND a.behospital_code = b.behospital_code
-        AND a.hospital_id = c.hospital_id
+        a.hospital_id = c.hospital_id
         AND a.behospital_code = c.behospital_code
         AND a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
@@ -58,16 +54,13 @@
         COUNT(*)
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -100,16 +93,13 @@
         concat( ROUND( sum( c.`level` = '丙' )/ count(*)* 100, 2 ), '%' ) AS thirdPercent
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -133,27 +123,24 @@
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c,
         med_qcresult_detail d,
         qc_cases e,
         qc_cases_entry f
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
         AND e.is_deleted = 'N'
         AND f.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         AND a.hospital_id = d.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.behospital_code = d.behospital_code
         AND d.cases_id = e.id
         AND d.cases_entry_id = f.id
         AND e.id = f.cases_id
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -169,32 +156,37 @@
         e.`name`
     </select>
 
-    <!-- 条目缺陷分组统计 -->
+    <!-- 条目缺陷占比(首页) -->
     <select id="entryCountGroupByEntry" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.NumDTO">
+        SELECT
+        t1.NAME AS NAME,
+        t1.num AS num,
+        t2.mrNum AS totleNum,
+        Round( t1.num / t2.mrNum, 4 ) AS percent,
+        CONCAT( Round( t1.num / t2.mrNum * 100, 2 ), '%' ) AS percentStr
+        FROM
+        (
         SELECT
         e.id,
         e.NAME,
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c,
         med_qcresult_detail d,
         qc_cases_entry e
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
         AND e.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         AND a.hospital_id = d.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.behospital_code = d.behospital_code
         AND d.cases_id = e.cases_id
         AND d.cases_entry_id = e.id
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -208,28 +200,127 @@
         GROUP BY
         e.id,
         e.NAME
+        ) t1,
+        (
+        SELECT
+        count(*) AS mrNum
+        FROM
+        med_behospital_info a,
+        med_qcresult_info c
+        WHERE
+        a.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.is_placefile = '1'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        ) t2
+        ORDER BY
+        percent DESC
+    </select>
+
+    <!-- 条目缺陷占比(内页) -->
+    <select id="entryGroupByEntryInnerPage" resultType="com.diagbot.dto.NumDTO">
+        SELECT t.*
+        FROM
+        (SELECT
+        t1.NAME AS NAME,
+        t1.num AS num,
+        t2.mrNum AS totleNum,
+        Round( t1.num / t2.mrNum, 4 ) AS percent,
+        CONCAT( Round( t1.num / t2.mrNum * 100, 2 ), '%' ) AS percentStr
+        FROM
+        (
+        SELECT
+        e.id,
+        e.NAME,
+        count(*) AS num
+        FROM
+        med_behospital_info a,
+        med_qcresult_info c,
+        med_qcresult_detail d,
+        qc_cases_entry e
+        WHERE
+        a.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND e.is_deleted = 'N'
+        AND a.hospital_id = c.hospital_id
+        AND a.hospital_id = d.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.behospital_code = d.behospital_code
+        AND d.cases_id = e.cases_id
+        AND d.cases_entry_id = e.id
+        AND a.is_placefile = '1'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageVO.hospitalId}
+        </if>
+        <if test="filterPageVO.startDate != null and filterPageVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageVO.startDate})]]>
+        </if>
+        <if test="filterPageVO.endDate != null and filterPageVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageVO.endDate})]]>
+        </if>
+        <if test="filterPageVO.name != null and filterPageVO.name != ''">
+            AND e.name like CONCAT('%', #{filterPageVO.name},'%')
+        </if>
+        GROUP BY
+        e.id,
+        e.NAME
+        ) t1,
+        (
+        SELECT
+        count(*) AS mrNum
+        FROM
+        med_behospital_info a,
+        med_qcresult_info c
+        WHERE
+        a.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.is_placefile = '1'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageVO.hospitalId}
+        </if>
+        <if test="filterPageVO.startDate != null and filterPageVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageVO.startDate})]]>
+        </if>
+        <if test="filterPageVO.endDate != null and filterPageVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageVO.endDate})]]>
+        </if>
+        ) t2
+        )t
     </select>
 
-    <!-- 质控平均分按科室统计 -->
-    <select id="getAverageScoreByDept" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.AverageStatisticsDTO">
+    <!-- 各科室质控平均分(首页) -->
+    <select id="getAverageScore" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.AverageStatisticsDTO">
         SELECT
         a.beh_dept_id AS id,
         a.beh_dept_name AS name,
-        ROUND( sum( CAST( c.score_res AS DECIMAL )), 2 ) AS totleValue,
-        ROUND( sum( CAST( c.score_res AS DECIMAL ))/ count(*), 2 ) AS averageValue,
+        ROUND( sum( CAST( c.score_res AS DECIMAL ( 18, 2 ) )), 2 ) AS totleValue,
+        ROUND( sum( CAST( c.score_res AS DECIMAL ( 18, 2 ) ))/ count(*), 2 ) AS averageValue,
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
@@ -245,6 +336,50 @@
         a.beh_dept_name
     </select>
 
+    <!-- 各科室质控平均分(首页)-根据内外科系统统计 -->
+    <select id="getAverageScoreByDeptClass" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.AverageStatisticsDTO">
+        SELECT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS NAME,
+        ROUND( sum( CAST( c.score_res AS DECIMAL ( 18, 2 ) )), 2 ) AS totleValue,
+        ROUND( sum( CAST( c.score_res AS DECIMAL ( 18, 2 ) ))/ count(*), 2 ) AS averageValue,
+        count(*) AS num ,
+        e.dept_name as deptClass
+        FROM
+        med_behospital_info a,
+        med_qcresult_info c,
+        bas_dept_info d,
+        bas_dept_info e
+        WHERE
+        a.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND e.is_deleted = 'N'
+        AND a.hospital_id = c.hospital_id
+        AND a.hospital_id = d.hospital_id
+        AND a.hospital_id = e.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.beh_dept_id = d.dept_id
+        AND d.parent_dept_id = e.dept_id
+        AND a.is_placefile = '1'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ AND a.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        <if test="deptClass != null and deptClass != ''">
+            AND e.dept_name = #{deptClass}
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+    </select>
+
     <!-- 按科室统计质控病历数 -->
     <select id="resultCountByDept" parameterType="com.diagbot.vo.QcresultFilterVO" resultType="com.diagbot.dto.NumDTO">
         SELECT
@@ -253,20 +388,17 @@
         COUNT(*) AS num
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c,
         sys_user_dept d
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         AND a.hospital_id = d.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.beh_dept_id = d.dept_id
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="userId!=null">
             AND d.user_id = #{userId}
@@ -301,7 +433,6 @@
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c,
         med_qcresult_detail d,
         qc_cases e,
@@ -309,23 +440,21 @@
         sys_user_dept g
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
         AND e.is_deleted = 'N'
         AND f.is_deleted = 'N'
         AND g.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         AND a.hospital_id = d.hospital_id
         AND a.hospital_id = g.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.behospital_code = d.behospital_code
         AND d.cases_id = e.id
         AND d.cases_entry_id = f.id
         AND e.id = f.cases_id
         AND a.beh_dept_id = g.dept_id
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="userId!=null">
             AND g.user_id = #{userId}
@@ -346,8 +475,18 @@
         a.beh_dept_name
     </select>
 
-    <!-- 条目缺陷分组统计 -->
+    <!-- 条目缺陷占比-科室(首页) -->
     <select id="entryCountGroupByEntryAndDept" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.DeptNumDTO">
+        SELECT
+        t1.deptId AS deptId,
+        t1.deptName AS deptName,
+        t1.NAME AS NAME,
+        t1.num AS num,
+        t2.mrNum AS totleNum,
+        Round( t1.num / t2.mrNum, 4 ) AS percent,
+        CONCAT( Round( t1.num / t2.mrNum * 100, 2 ), '%' ) AS percentStr
+        FROM
+        (
         SELECT
         e.id,
         e.NAME,
@@ -356,28 +495,25 @@
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c,
         med_qcresult_detail d,
         qc_cases_entry e,
         sys_user_dept f
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
         AND e.is_deleted = 'N'
         AND f.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         AND a.hospital_id = d.hospital_id
         AND a.hospital_id = f.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.behospital_code = d.behospital_code
         AND d.cases_id = e.cases_id
         AND d.cases_entry_id = e.id
         AND a.beh_dept_id = f.dept_id
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="userId!=null">
             AND f.user_id = #{userId}
@@ -396,6 +532,159 @@
         e.NAME,
         a.beh_dept_id,
         a.beh_dept_name
+        ) t1,
+        (
+        SELECT
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        count(*) AS mrNum
+        FROM
+        med_behospital_info a,
+        med_qcresult_info c,
+        sys_user_dept f
+        WHERE
+        a.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND f.is_deleted = 'N'
+        AND a.hospital_id = c.hospital_id
+        AND a.hospital_id = f.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.beh_dept_id = f.dept_id
+        AND a.is_placefile = '1'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="userId!=null">
+            AND f.user_id = #{userId}
+        </if>
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) t2
+        WHERE
+        t1.deptId = t2.deptId
+        AND t1.deptName = t2.deptName
+        ORDER BY
+        percent DESC,
+        num DESC
+    </select>
+
+    <!-- 条目缺陷占比-科室(内页) -->
+    <select id="entryGroupByEntryAndDeptInnerPage" resultType="com.diagbot.dto.DeptNumDTO">
+        SELECT t.*
+        FROM
+        (SELECT
+        t1.deptId AS deptId,
+        t1.deptName AS deptName,
+        t1.NAME AS NAME,
+        t1.num AS num,
+        t2.mrNum AS totleNum,
+        Round( t1.num / t2.mrNum, 4 ) AS percent,
+        CONCAT( Round( t1.num / t2.mrNum * 100, 2 ), '%' ) AS percentStr
+        FROM
+        (
+        SELECT
+        e.id,
+        e.NAME,
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        count(*) AS num
+        FROM
+        med_behospital_info a,
+        med_qcresult_info c,
+        med_qcresult_detail d,
+        qc_cases_entry e,
+        sys_user_dept f
+        WHERE
+        a.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND e.is_deleted = 'N'
+        AND f.is_deleted = 'N'
+        AND a.hospital_id = c.hospital_id
+        AND a.hospital_id = d.hospital_id
+        AND a.hospital_id = f.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.behospital_code = d.behospital_code
+        AND d.cases_id = e.cases_id
+        AND d.cases_entry_id = e.id
+        AND a.beh_dept_id = f.dept_id
+        AND a.is_placefile = '1'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByDeptVO.userId!=null">
+            AND f.user_id = #{filterPageByDeptVO.userId}
+        </if>
+        <if test="filterPageByDeptVO.hospitalId != null and filterPageByDeptVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByDeptVO.hospitalId}
+        </if>
+        <if test="filterPageByDeptVO.startDate != null and filterPageByDeptVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByDeptVO.startDate})]]>
+        </if>
+        <if test="filterPageByDeptVO.endDate != null and filterPageByDeptVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByDeptVO.endDate})]]>
+        </if>
+        <if test="filterPageByDeptVO.deptName != null and filterPageByDeptVO.deptName != ''">
+            AND a.beh_dept_name = #{filterPageByDeptVO.deptName}
+        </if>
+        <if test="filterPageByDeptVO.name != null and filterPageByDeptVO.name != ''">
+            AND e.name like CONCAT('%', #{filterPageByDeptVO.name},'%')
+        </if>
+        GROUP BY
+        e.id,
+        e.NAME,
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) t1,
+        (
+        SELECT
+        a.beh_dept_id AS deptId,
+        a.beh_dept_name AS deptName,
+        count(*) AS mrNum
+        FROM
+        med_behospital_info a,
+        med_qcresult_info c,
+        sys_user_dept f
+        WHERE
+        a.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND f.is_deleted = 'N'
+        AND a.hospital_id = c.hospital_id
+        AND a.hospital_id = f.hospital_id
+        AND a.behospital_code = c.behospital_code
+        AND a.beh_dept_id = f.dept_id
+        AND a.is_placefile = '1'
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <![CDATA[AND a.qc_type_id <>0 ]]>
+        <if test="filterPageByDeptVO.userId!=null">
+            AND f.user_id = #{filterPageByDeptVO.userId}
+        </if>
+        <if test="filterPageByDeptVO.hospitalId != null and filterPageByDeptVO.hospitalId != ''">
+            AND a.hospital_id = #{filterPageByDeptVO.hospitalId}
+        </if>
+        <if test="filterPageByDeptVO.startDate != null and filterPageByDeptVO.startDate != ''">
+            <![CDATA[ and a.leave_hospital_date >= DATE(#{filterPageByDeptVO.startDate})]]>
+        </if>
+        <if test="filterPageByDeptVO.endDate != null and filterPageByDeptVO.endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{filterPageByDeptVO.endDate})]]>
+        </if>
+        <if test="filterPageByDeptVO.deptName != null and filterPageByDeptVO.deptName != ''">
+            AND a.beh_dept_name = #{filterPageByDeptVO.deptName}
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ) t2
+        WHERE
+        t1.deptId = t2.deptId
+        AND t1.deptName = t2.deptName
+        )t
     </select>
 
     <!-- 按模块统计质控缺陷数(分页) -->
@@ -426,27 +715,24 @@
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c,
         med_qcresult_detail d,
         qc_cases e,
         qc_cases_entry f
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
         AND e.is_deleted = 'N'
         AND f.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         AND a.hospital_id = d.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.behospital_code = d.behospital_code
         AND d.cases_id = e.id
         AND d.cases_entry_id = f.id
         AND e.id = f.cases_id
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageVO.hospitalId}
@@ -472,16 +758,13 @@
         COUNT(*) AS mrNum
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageVO.hospitalId}
@@ -523,23 +806,28 @@
         ) t
     </select>
 
-    <!-- 条目缺陷占比(分页) -->
-    <select id="entryCountGroupByEntryPage"  resultType="com.diagbot.dto.NumDTO">
+    <!-- 缺陷详情(分页) -->
+    <select id="entryCountGroupByEntryPage"  resultType="com.diagbot.dto.CaseNumDTO">
         SELECT t.*
         FROM
         (SELECT
         t1.id,
         t1.NAME,
+        t1.casesId,
+        t1.casesName,
         count(*) AS num,
-        t2.totleNum
+        t2.totleNum,
+        ROUND( count(*) /t2.totleNum , 4 ) AS percent,
+        CONCAT(ROUND( count(*) /t2.totleNum * 100, 2 ), '%' ) AS percentStr
         FROM
         (
         SELECT
         e.id AS id,
-        e.NAME AS NAME
+        e.NAME AS NAME,
+        e.cases_id as casesId,
+        e.cases_name as casesName
         FROM
         med_behospital_info a,
-        med_home_page b,
         <if test="filterPageVO.casesId != null and filterPageVO.casesId ==243">
             med_qcresult_cases c,
         </if>
@@ -550,16 +838,14 @@
         qc_cases_entry e
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
         and e.is_deleted='N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         and a.hospital_id = d.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.behospital_code = d.behospital_code
+        AND a.is_placefile = '1'
         <if test="filterPageVO.casesId != null and filterPageVO.casesId ==243">
             AND c.cases_id = d.cases_id
         </if>
@@ -569,6 +855,9 @@
         <if test="filterPageVO.casesId != null and filterPageVO.casesId != 0">
             AND d.cases_id = #{filterPageVO.casesId}
         </if>
+        <if test="filterPageVO.casesName != null and filterPageVO.casesName != ''">
+            AND e.cases_name like CONCAT('%', #{filterPageVO.casesName},'%')
+        </if>
         <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageVO.hospitalId}
         </if>
@@ -589,7 +878,6 @@
         count(*) AS totleNum
         FROM
         med_behospital_info a,
-        med_home_page b,
         <if test="filterPageVO.casesId != null and filterPageVO.casesId ==243">
             med_qcresult_cases c,
         </if>
@@ -600,25 +888,26 @@
         qc_cases_entry e
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
         and e.is_deleted='N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         and a.hospital_id = d.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.behospital_code = d.behospital_code
+        AND a.is_placefile = '1'
         <if test="filterPageVO.casesId != null and filterPageVO.casesId ==243">
             AND c.cases_id = d.cases_id
         </if>
         AND d.cases_id = e.cases_id
         AND d.cases_entry_id = e.id
         <![CDATA[AND a.qc_type_id <>0 ]]>
-        <if test="filterPageVO.casesId != null and filterPageVO.casesId != ''">
+        <if test="filterPageVO.casesId != null and filterPageVO.casesId != 0">
             AND d.cases_id = #{filterPageVO.casesId}
         </if>
+        <if test="filterPageVO.casesName != null and filterPageVO.casesName != ''">
+            AND e.cases_name like CONCAT('%', #{filterPageVO.casesName},'%')
+        </if>
         <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageVO.hospitalId}
         </if>
@@ -637,9 +926,10 @@
         ) t2
         GROUP BY
         t1.id,
-        t1.NAME
-        ORDER BY
-        count(*) DESC)t
+        t1.NAME,
+        t1.casesId,
+        t1.casesName
+        )t
     </select>
 
     <!-- 质控平均分按科室统计(分页) -->
@@ -649,21 +939,18 @@
         (SELECT
         a.beh_dept_id AS id,
         a.beh_dept_name AS name,
-        ROUND( sum( CAST( c.score_res AS DECIMAL )), 2 ) AS totleValue,
-        ROUND( sum( CAST( c.score_res AS DECIMAL ))/ count(*), 2 ) AS averageValue,
+        ROUND( sum( CAST( c.score_res AS DECIMAL ( 18, 2 ) )), 2 ) AS totleValue,
+        ROUND( sum( CAST( c.score_res AS DECIMAL ( 18, 2 ) ))/ count(*), 2 ) AS averageValue,
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageVO.hospitalId}
@@ -680,7 +967,7 @@
         GROUP BY
         a.beh_dept_id,
         a.beh_dept_name
-        ORDER BY ROUND( sum( CAST( c.score_res AS DECIMAL ))/ count(*), 2 ) DESC ) t
+        ORDER BY averageValue DESC ) t
     </select>
 
     <!-- 按科室统计质控病历数(分页) -->
@@ -699,16 +986,13 @@
         concat( ROUND( sum( c.`level` = '丙' )/ count(*)* 100, 2 ), '%' ) AS thirdPercent
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageVO.hospitalId != null and filterPageVO.hospitalId != ''">
             AND a.hospital_id = #{filterPageVO.hospitalId}
@@ -760,7 +1044,6 @@
         count(*) AS num
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c,
         med_qcresult_detail d,
         qc_cases e,
@@ -768,23 +1051,21 @@
         sys_user_dept g
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
         AND e.is_deleted = 'N'
         AND f.is_deleted = 'N'
         AND g.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         AND a.hospital_id = d.hospital_id
         AND a.hospital_id = g.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.behospital_code = d.behospital_code
         AND d.cases_id = e.id
         AND d.cases_entry_id = f.id
         AND e.id = f.cases_id
         AND a.beh_dept_id = g.dept_id
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageByDeptVO.userId!=null">
             AND g.user_id = #{filterPageByDeptVO.userId}
@@ -817,20 +1098,17 @@
         COUNT(*) AS mrNum
         FROM
         med_behospital_info a,
-        med_home_page b,
         med_qcresult_info c,
         sys_user_dept d
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         AND a.hospital_id = d.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.beh_dept_id = d.dept_id
+        AND a.is_placefile = '1'
         <![CDATA[AND a.qc_type_id <>0 ]]>
         <if test="filterPageByDeptVO.userId!=null">
             AND d.user_id = #{filterPageByDeptVO.userId}
@@ -877,8 +1155,8 @@
         ) t
     </select>
 
-    <!-- 条目缺陷占比-科室(分页) -->
-    <select id="entryCountGroupByEntryAndDeptPage"  resultType="com.diagbot.dto.DeptNumDTO">
+    <!-- 缺陷详情-科室(分页) -->
+    <select id="entryCountGroupByEntryAndDeptPage"  resultType="com.diagbot.dto.CaseAndDeptNumDTO">
         SELECT
         t.*
         FROM
@@ -886,18 +1164,25 @@
         SELECT
         t1.id,
         t1.NAME,
+        t1.casesId,
+        t1.casesName,
+        t1.deptId,
+        t1.deptName,
         count(*) AS num,
-        t2.totleNum
+        t2.totleNum,
+        ROUND( count(*) /t2.totleNum , 4 ) AS percent,
+        CONCAT(ROUND( count(*) /t2.totleNum * 100, 2 ), '%' ) AS percentStr
         FROM
         (
         SELECT
         e.id,
         e.NAME,
+        e.cases_id as casesId,
+        e.cases_name as casesName,
         a.beh_dept_id AS deptId,
         a.beh_dept_name AS deptName
         FROM
         med_behospital_info a,
-        med_home_page b,
         <if test="filterPageByDeptVO.casesId != null and filterPageByDeptVO.casesId ==243">
             med_qcresult_cases c,
         </if>
@@ -909,18 +1194,16 @@
         sys_user_dept f
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
         AND e.is_deleted = 'N'
         AND f.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         AND a.hospital_id = d.hospital_id
         AND a.hospital_id = f.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.behospital_code = d.behospital_code
+        AND a.is_placefile = '1'
         <if test="filterPageByDeptVO.casesId != null and filterPageByDeptVO.casesId ==243">
             AND c.cases_id = d.cases_id
         </if>
@@ -928,9 +1211,12 @@
         AND d.cases_entry_id = e.id
         AND a.beh_dept_id = f.dept_id
         <![CDATA[AND a.qc_type_id <>0 ]]>
-        <if test="filterPageByDeptVO.casesId != null and filterPageByDeptVO.casesId != ''">
+        <if test="filterPageByDeptVO.casesId != null and filterPageByDeptVO.casesId != 0">
             AND d.cases_id = #{filterPageByDeptVO.casesId}
         </if>
+        <if test="filterPageByDeptVO.casesName != null and filterPageByDeptVO.casesName != ''">
+            AND e.cases_name like CONCAT('%', #{filterPageByDeptVO.casesName},'%')
+        </if>
         <if test="filterPageByDeptVO.userId!=null">
             AND f.user_id = #{filterPageByDeptVO.userId}
         </if>
@@ -957,7 +1243,6 @@
         count(*) AS totleNum
         FROM
         med_behospital_info a,
-        med_home_page b,
         <if test="filterPageByDeptVO.casesId != null and filterPageByDeptVO.casesId ==243">
             med_qcresult_cases c,
         </if>
@@ -969,18 +1254,16 @@
         sys_user_dept f
         WHERE
         a.is_deleted = 'N'
-        AND b.is_deleted = 'N'
         AND c.is_deleted = 'N'
         AND d.is_deleted = 'N'
         AND e.is_deleted = 'N'
         AND f.is_deleted = 'N'
-        AND a.hospital_id = b.hospital_id
         AND a.hospital_id = c.hospital_id
         AND a.hospital_id = d.hospital_id
         AND a.hospital_id = f.hospital_id
-        AND a.behospital_code = b.behospital_code
         AND a.behospital_code = c.behospital_code
         AND a.behospital_code = d.behospital_code
+        AND a.is_placefile = '1'
         <if test="filterPageByDeptVO.casesId != null and filterPageByDeptVO.casesId ==243">
             AND c.cases_id = d.cases_id
         </if>
@@ -988,9 +1271,12 @@
         AND d.cases_entry_id = e.id
         AND a.beh_dept_id = f.dept_id
         <![CDATA[AND a.qc_type_id <>0 ]]>
-        <if test="filterPageByDeptVO.casesId != null and filterPageByDeptVO.casesId != ''">
+        <if test="filterPageByDeptVO.casesId != null and filterPageByDeptVO.casesId != 0">
             AND d.cases_id = #{filterPageByDeptVO.casesId}
         </if>
+        <if test="filterPageByDeptVO.casesName != null and filterPageByDeptVO.casesName != ''">
+            AND e.cases_name like CONCAT('%', #{filterPageByDeptVO.casesName},'%')
+        </if>
         <if test="filterPageByDeptVO.userId!=null">
             AND f.user_id = #{filterPageByDeptVO.userId}
         </if>
@@ -1016,10 +1302,10 @@
         GROUP BY
         t1.id,
         t1.NAME,
+        t1.casesId,
+        t1.casesName,
         t1.deptId,
         t1.deptName
-        ORDER BY
-        count(*) DESC
         )t
     </select>
 </mapper>

+ 2 - 2
src/test/java/com/diagbot/CodeGeneration.java

@@ -33,7 +33,7 @@ public class CodeGeneration {
         gc.setEnableCache(false);// XML 二级缓存
         gc.setBaseResultMap(true);// XML ResultMap
         gc.setBaseColumnList(false);// XML columList
-        gc.setAuthor("zhoutg");// 作者
+        gc.setAuthor("gaodm");// 作者
 
         // 自定义文件命名,注意 %s 会自动填充表实体属性!
         gc.setControllerName("%sController");
@@ -56,7 +56,7 @@ public class CodeGeneration {
         StrategyConfig strategy = new StrategyConfig();
 //        strategy.setTablePrefix(new String[] { "med_" });// 此处可以修改为您的表前缀
         strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
-        strategy.setInclude(new String[] { "qc_model_hospital"}); // 需要生成的表
+        strategy.setInclude(new String[] { "med_qcresult_detail","med_behospital_info"}); // 需要生成的表
 
         strategy.setSuperServiceClass(null);
         strategy.setSuperServiceImplClass(null);