Selaa lähdekoodia

Merge branch 'master' into 122run

gaodm 5 vuotta sitten
vanhempi
commit
3fbbf891bb
100 muutettua tiedostoa jossa 23350 lisäystä ja 650 poistoa
  1. 17943 0
      doc/002.20200426第二版/qc_init.sql
  2. 228 16
      src/main/java/com/diagbot/aggregate/AverageStatisticsAggregate.java
  3. 171 0
      src/main/java/com/diagbot/aggregate/MrStatisticsAggregate.java
  4. 182 49
      src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java
  5. 1 1
      src/main/java/com/diagbot/config/MybatisPlusConfigurer.java
  6. 11 1
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  7. 11 1
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  8. 8 4
      src/main/java/com/diagbot/dto/AverageStatisticsDTO.java
  9. 23 0
      src/main/java/com/diagbot/dto/BasDeptInfoDTO.java
  10. 1 1
      src/main/java/com/diagbot/dto/BehosDTO.java
  11. 4 1
      src/main/java/com/diagbot/dto/BehospitalInfoDTO.java
  12. 4 5
      src/main/java/com/diagbot/dto/ResultStatisticsDTO.java
  13. 16 0
      src/main/java/com/diagbot/dto/DeptNumDTO.java
  14. 29 0
      src/main/java/com/diagbot/dto/GetModuleInfoOneDTO.java
  15. 3 1
      src/main/java/com/diagbot/dto/MsgDTO.java
  16. 4 14
      src/main/java/com/diagbot/dto/ResultDetailDTO.java
  17. 32 0
      src/main/java/com/diagbot/dto/QcModuleDetailDTO.java
  18. 23 0
      src/main/java/com/diagbot/dto/QcResultPercentDTO.java
  19. 34 0
      src/main/java/com/diagbot/dto/QuestionDTO.java
  20. 17 0
      src/main/java/com/diagbot/dto/QuestionEntryDTO.java
  21. 21 0
      src/main/java/com/diagbot/dto/SysMenuPermissionDTO.java
  22. 18 0
      src/main/java/com/diagbot/dto/SysPermissionDTO.java
  23. 55 0
      src/main/java/com/diagbot/dto/SysRoleDTO.java
  24. 24 0
      src/main/java/com/diagbot/dto/SysRoleMenuDTO.java
  25. 19 0
      src/main/java/com/diagbot/dto/SysUserDeptDTO.java
  26. 33 0
      src/main/java/com/diagbot/dto/SysUserPermissionDTO.java
  27. 27 0
      src/main/java/com/diagbot/dto/SysUserQueryDTO.java
  28. 19 0
      src/main/java/com/diagbot/dto/SysUserRoleDTO.java
  29. 177 0
      src/main/java/com/diagbot/entity/BasDeptInfo.java
  30. 275 3
      src/main/java/com/diagbot/entity/BehospitalInfo.java
  31. 78 0
      src/main/java/com/diagbot/entity/QcModuleDetail.java
  32. 73 0
      src/main/java/com/diagbot/entity/QcModuleInfo.java
  33. 123 0
      src/main/java/com/diagbot/entity/QcQuestionInfo.java
  34. 73 0
      src/main/java/com/diagbot/entity/QcQuestionMapping.java
  35. 7 140
      src/main/java/com/diagbot/entity/QcresultDetail.java
  36. 15 104
      src/main/java/com/diagbot/entity/SysMenu.java
  37. 12 14
      src/main/java/com/diagbot/entity/SysPermission.java
  38. 185 0
      src/main/java/com/diagbot/entity/SysRole.java
  39. 153 0
      src/main/java/com/diagbot/entity/SysRoleMenu.java
  40. 153 0
      src/main/java/com/diagbot/entity/SysRolePermission.java
  41. 27 17
      src/main/java/com/diagbot/entity/SysTaskCron.java
  42. 35 12
      src/main/java/com/diagbot/entity/SysUser.java
  43. 167 0
      src/main/java/com/diagbot/entity/SysUserDept.java
  44. 153 0
      src/main/java/com/diagbot/entity/SysUserHospital.java
  45. 153 0
      src/main/java/com/diagbot/entity/SysUserRole.java
  46. 21 0
      src/main/java/com/diagbot/entity/wrapper/QuestionInfoWrapper.java
  47. 42 0
      src/main/java/com/diagbot/entity/wrapper/QuestionMappingWrapper.java
  48. 35 0
      src/main/java/com/diagbot/entity/wrapper/QuestionWrapper.java
  49. 2 1
      src/main/java/com/diagbot/entity/wrapper/SysMenuWrapper.java
  50. 50 0
      src/main/java/com/diagbot/enums/StatusEnum.java
  51. 1 1
      src/main/java/com/diagbot/exception/ServiceErrorCode.java
  52. 44 0
      src/main/java/com/diagbot/facade/BasDeptInfoFacade.java
  53. 111 20
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  54. 434 0
      src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java
  55. 182 222
      src/main/java/com/diagbot/facade/ConsoleFacade.java
  56. 94 0
      src/main/java/com/diagbot/facade/FilterFacade.java
  57. 14 0
      src/main/java/com/diagbot/facade/QcModuleDetailFacade.java
  58. 103 0
      src/main/java/com/diagbot/facade/QcModuleInfoFacade.java
  59. 117 0
      src/main/java/com/diagbot/facade/QcQuestionFacade.java
  60. 14 0
      src/main/java/com/diagbot/facade/QcQuestionMappingFacade.java
  61. 15 0
      src/main/java/com/diagbot/facade/QuestionVO.java
  62. 206 0
      src/main/java/com/diagbot/facade/SysRoleFacade.java
  63. 13 0
      src/main/java/com/diagbot/facade/SysUserDeptFacade.java
  64. 302 4
      src/main/java/com/diagbot/facade/SysUserFacade.java
  65. 13 0
      src/main/java/com/diagbot/facade/SysUserHospitalFacade.java
  66. 13 0
      src/main/java/com/diagbot/facade/SysUserRoleFacade.java
  67. 32 0
      src/main/java/com/diagbot/mapper/BasDeptInfoMapper.java
  68. 44 5
      src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java
  69. 8 0
      src/main/java/com/diagbot/mapper/QcCasesMapper.java
  70. 16 0
      src/main/java/com/diagbot/mapper/QcModuleDetailMapper.java
  71. 19 0
      src/main/java/com/diagbot/mapper/QcModuleInfoMapper.java
  72. 25 0
      src/main/java/com/diagbot/mapper/QcQuestionInfoMapper.java
  73. 16 0
      src/main/java/com/diagbot/mapper/QcQuestionMappingMapper.java
  74. 74 1
      src/main/java/com/diagbot/mapper/QcresultInfoMapper.java
  75. 3 0
      src/main/java/com/diagbot/mapper/SysMenuMapper.java
  76. 21 0
      src/main/java/com/diagbot/mapper/SysRoleMapper.java
  77. 16 0
      src/main/java/com/diagbot/mapper/SysRoleMenuMapper.java
  78. 16 0
      src/main/java/com/diagbot/mapper/SysRolePermissionMapper.java
  79. 16 0
      src/main/java/com/diagbot/mapper/SysUserDeptMapper.java
  80. 16 0
      src/main/java/com/diagbot/mapper/SysUserHospitalMapper.java
  81. 5 2
      src/main/java/com/diagbot/mapper/SysUserMapper.java
  82. 16 0
      src/main/java/com/diagbot/mapper/SysUserRoleMapper.java
  83. 32 0
      src/main/java/com/diagbot/service/BasDeptInfoService.java
  84. 45 6
      src/main/java/com/diagbot/service/BehospitalInfoService.java
  85. 9 1
      src/main/java/com/diagbot/service/QcCasesService.java
  86. 16 0
      src/main/java/com/diagbot/service/QcModuleDetailService.java
  87. 19 0
      src/main/java/com/diagbot/service/QcModuleInfoService.java
  88. 30 0
      src/main/java/com/diagbot/service/QcQuestionInfoService.java
  89. 16 0
      src/main/java/com/diagbot/service/QcQuestionMappingService.java
  90. 75 1
      src/main/java/com/diagbot/service/QcresultInfoService.java
  91. 3 0
      src/main/java/com/diagbot/service/SysMenuService.java
  92. 16 0
      src/main/java/com/diagbot/service/SysRoleMenuService.java
  93. 16 0
      src/main/java/com/diagbot/service/SysRolePermissionService.java
  94. 20 0
      src/main/java/com/diagbot/service/SysRoleService.java
  95. 12 1
      src/main/java/com/diagbot/service/SysTokenService.java
  96. 16 0
      src/main/java/com/diagbot/service/SysUserDeptService.java
  97. 16 0
      src/main/java/com/diagbot/service/SysUserHospitalService.java
  98. 16 0
      src/main/java/com/diagbot/service/SysUserRoleService.java
  99. 4 1
      src/main/java/com/diagbot/service/SysUserService.java
  100. 0 0
      src/main/java/com/diagbot/service/impl/BasDeptInfoServiceImpl.java

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 17943 - 0
doc/002.20200426第二版/qc_init.sql


+ 228 - 16
src/main/java/com/diagbot/aggregate/AverageStatisticsAggregate.java

@@ -1,8 +1,12 @@
 package com.diagbot.aggregate;
 
 import com.diagbot.dto.AverageStatisticsDTO;
-import com.diagbot.facade.ConsoleFacade;
+import com.diagbot.facade.FilterFacade;
 import com.diagbot.facade.HomePageFacade;
+import com.diagbot.facade.QcresultInfoFacade;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.vo.FilterVO;
 import com.google.common.collect.Lists;
@@ -12,12 +16,18 @@ import io.github.lvyahui8.spring.annotation.InvokeParameter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
- * @Description:
+ * @Description:平均值相关统计
  * @Author:zhaops
  * @time: 2020/4/23 14:11
  */
@@ -26,20 +36,29 @@ public class AverageStatisticsAggregate {
     @Autowired
     private HomePageFacade homePageFacade;
     @Autowired
-    private ConsoleFacade consoleFacade;
+    private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private FilterFacade filterFacade;
 
     @DataProvider("setAllAverage")
     public Map<String, Object> setAllResult(
             @InvokeParameter("filterVO") FilterVO filterVO,
             @DataConsumer("getAverageDayNum") List<AverageStatisticsDTO> averageDayNumList,
-            @DataConsumer("getAverageFee") List<AverageStatisticsDTO> averageFeeList) {
+            @DataConsumer("getAverageFee") List<AverageStatisticsDTO> averageFeeList,
+            @DataConsumer("getAverageScore") List<AverageStatisticsDTO> averageScoreList) {
         Map<String, Object> retMap = new LinkedHashMap<>();
+        retMap.put("平均住院日", Lists.newLinkedList());
+        retMap.put("平均住院费用", Lists.newLinkedList());
+        retMap.put("各科室质控平均分", Lists.newLinkedList());
         if (ListUtil.isNotEmpty(averageDayNumList)) {
             retMap.put("平均住院日", averageDayNumList);
         }
         if (ListUtil.isNotEmpty(averageFeeList)) {
             retMap.put("平均住院费用", averageFeeList);
         }
+        if (ListUtil.isNotEmpty(averageScoreList)) {
+            retMap.put("各科室质控平均分", averageScoreList);
+        }
         return retMap;
     }
 
@@ -51,15 +70,85 @@ public class AverageStatisticsAggregate {
      */
     @DataProvider("getAverageDayNum")
     public List<AverageStatisticsDTO> getAverageDayNum(@InvokeParameter("filterVO") FilterVO filterVO) {
+        Integer limitCount = filterVO.getLimitCount();
         List<AverageStatisticsDTO> retAverageDayNumList = Lists.newLinkedList();
+        //本月、本年
         List<AverageStatisticsDTO> averageDayNumList = homePageFacade.getAverageDayNum(filterVO);
-        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
-            filterVO.setLimitCount(10);
+        Map<String, Double> averageMap
+                = EntityUtil.makeMapWithKeyValue(averageDayNumList, "name", "averageValue");
+
+        //上月、去年
+        String startDate = filterFacade.getLastStartDateStr(filterVO.getType());
+        String endDate = filterFacade.getLastEndDateStr(filterVO.getType());
+        filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
+        List<AverageStatisticsDTO> lastAverageDayNumList = homePageFacade.getAverageDayNum(filterVO);
+        Map<String, Double> lastMap
+                = EntityUtil.makeMapWithKeyValue(lastAverageDayNumList, "name", "averageValue");
+
+        //去年本月
+        if (filterVO.getType().equals(1)) {
+            Date date = new Date();
+            String year = DateUtil.getYear(date);
+            startDate = filterFacade.getStartDateStr(filterVO.getType(), Integer.valueOf(year) - 1);
+            endDate = filterFacade.getEndDateStr(filterVO.getType(), Integer.valueOf(year) - 1);
+            filterVO.setStartDate(startDate);
+            filterVO.setEndDate(endDate);
         }
-        Integer limitCount = filterVO.getLimitCount();
-        //平均住院日
-        if (ListUtil.isNotEmpty(averageDayNumList)) {
-            retAverageDayNumList = consoleFacade.getLimitAverageList(averageDayNumList, limitCount);
+        //按年统计,同比环比相同
+        List<AverageStatisticsDTO> lastYearAverageDayNumList = homePageFacade.getAverageDayNum(filterVO);
+        Map<String, Double> lastYearMap
+                = EntityUtil.makeMapWithKeyValue(lastYearAverageDayNumList, "name", "averageValue");
+
+        //获取所有出现的科室
+        List<String> nameList = Lists.newLinkedList();
+        nameList.addAll(averageMap.keySet());
+        nameList.addAll(lastMap.keySet());
+        nameList.addAll(lastYearMap.keySet());
+        nameList = nameList
+                .stream()
+                .distinct()
+                .collect(Collectors.toList());
+
+        for (String name : nameList) {
+            AverageStatisticsDTO item = new AverageStatisticsDTO();
+            item.setName(name);
+            if (averageMap.containsKey(name)) {
+                item.setAverageValue(averageMap.get(name));
+            }
+            if (lastMap.containsKey(name)) {
+                item.setLastAverageValue(lastMap.get(name));
+            }
+            if (lastYearMap.containsKey(name)) {
+                item.setLastYearAverageValue(lastYearMap.get(name));
+            }
+            retAverageDayNumList.add(item);
+        }
+
+        //排序
+        Collections.sort(retAverageDayNumList, new Comparator<AverageStatisticsDTO>() {
+            @Override
+            public int compare(AverageStatisticsDTO o1, AverageStatisticsDTO o2) {
+                Double value1 = o1.getAverageValue();
+                Double lastValue1 = o1.getLastAverageValue();
+                Double lastYearValue1 = o1.getLastYearAverageValue();
+                Double value2 = o2.getAverageValue();
+                Double lastValue2 = o2.getLastAverageValue();
+                Double lastYearValue2 = o2.getLastYearAverageValue();
+                Integer count1 = 0;
+                count1 += Double.compare(value1, 0) == 0 ? 0 : 1;
+                count1 += Double.compare(lastValue1, 0) == 0 ? 0 : 1;
+                count1 += Double.compare(lastYearValue1, 0) == 0 ? 0 : 1;
+                Integer count2 = 0;
+                count2 += Double.compare(value2, 0) == 0 ? 0 : 1;
+                count2 += Double.compare(lastValue2, 0) == 0 ? 0 : 1;
+                count2 += Double.compare(lastYearValue2, 0) == 0 ? 0 : 1;
+                return (count1 > count2) ? -1 : ((count1 < count2) ? 1 : 0);
+            }
+        });
+
+        if (retAverageDayNumList.size() > limitCount) {
+            retAverageDayNumList = retAverageDayNumList.subList(0, limitCount);
         }
         return retAverageDayNumList;
     }
@@ -72,16 +161,139 @@ public class AverageStatisticsAggregate {
      */
     @DataProvider("getAverageFee")
     public List<AverageStatisticsDTO> getAverageFee(@InvokeParameter("filterVO") FilterVO filterVO) {
+        Integer limitCount = filterVO.getLimitCount();
         List<AverageStatisticsDTO> retAverageFeeList = Lists.newLinkedList();
+        //本月、本年
         List<AverageStatisticsDTO> averageFeeList = homePageFacade.getAverageFee(filterVO);
-        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
-            filterVO.setLimitCount(10);
+        Map<String, Double> averageMap
+                = EntityUtil.makeMapWithKeyValue(averageFeeList, "name", "averageValue");
+
+        //上月、去年
+        String startDate = filterFacade.getLastStartDateStr(filterVO.getType());
+        String endDate = filterFacade.getLastEndDateStr(filterVO.getType());
+        filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
+        List<AverageStatisticsDTO> lastAverageFeeList = homePageFacade.getAverageFee(filterVO);
+        Map<String, Double> lastMap
+                = EntityUtil.makeMapWithKeyValue(lastAverageFeeList, "name", "averageValue");
+
+        //去年本月
+        if (filterVO.getType().equals(1)) {
+            Date date = new Date();
+            String year = DateUtil.getYear(date);
+            startDate = filterFacade.getStartDateStr(filterVO.getType(), Integer.valueOf(year) - 1);
+            endDate = filterFacade.getEndDateStr(filterVO.getType(), Integer.valueOf(year) - 1);
+            filterVO.setStartDate(startDate);
+            filterVO.setEndDate(endDate);
         }
-        Integer limitCount = filterVO.getLimitCount();
-        //平均住院费用
-        if (ListUtil.isNotEmpty(averageFeeList)) {
-            retAverageFeeList = consoleFacade.getLimitAverageList(averageFeeList, limitCount);
+        //按年统计,同比环比相同
+        List<AverageStatisticsDTO> lastYearAverageFeeList = homePageFacade.getAverageFee(filterVO);
+        Map<String, Double> lastYearMap
+                = EntityUtil.makeMapWithKeyValue(lastYearAverageFeeList, "name", "averageValue");
+
+        //获取所有出现的科室
+        List<String> nameList = Lists.newLinkedList();
+        nameList.addAll(averageMap.keySet());
+        nameList.addAll(lastMap.keySet());
+        nameList.addAll(lastYearMap.keySet());
+        nameList = nameList
+                .stream()
+                .distinct()
+                .collect(Collectors.toList());
+
+        for (String name : nameList) {
+            AverageStatisticsDTO item = new AverageStatisticsDTO();
+            item.setName(name);
+            if (averageMap.containsKey(name)) {
+                item.setAverageValue(averageMap.get(name));
+            }
+            if (lastMap.containsKey(name)) {
+                item.setLastAverageValue(lastMap.get(name));
+            }
+            if (lastYearMap.containsKey(name)) {
+                item.setLastYearAverageValue(lastYearMap.get(name));
+            }
+            retAverageFeeList.add(item);
+        }
+
+        //排序
+        Collections.sort(retAverageFeeList, new Comparator<AverageStatisticsDTO>() {
+            @Override
+            public int compare(AverageStatisticsDTO o1, AverageStatisticsDTO o2) {
+                Double value1 = o1.getAverageValue();
+                Double lastValue1 = o1.getLastAverageValue();
+                Double lastYearValue1 = o1.getLastYearAverageValue();
+                Double value2 = o2.getAverageValue();
+                Double lastValue2 = o2.getLastAverageValue();
+                Double lastYearValue2 = o2.getLastYearAverageValue();
+                Integer count1 = 0;
+                count1 += Double.compare(value1, 0) == 0 ? 0 : 1;
+                count1 += Double.compare(lastValue1, 0) == 0 ? 0 : 1;
+                count1 += Double.compare(lastYearValue1, 0) == 0 ? 0 : 1;
+                Integer count2 = 0;
+                count2 += Double.compare(value2, 0) == 0 ? 0 : 1;
+                count2 += Double.compare(lastValue2, 0) == 0 ? 0 : 1;
+                count2 += Double.compare(lastYearValue2, 0) == 0 ? 0 : 1;
+                return (count1 > count2) ? -1 : ((count1 < count2) ? 1 : 0);
+            }
+        });
+
+        if (retAverageFeeList.size() > limitCount) {
+            retAverageFeeList = retAverageFeeList.subList(0, limitCount);
         }
         return retAverageFeeList;
     }
+
+    /**
+     * 质控平均分按科室统计
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("getAverageScore")
+    public List<AverageStatisticsDTO> getAverageScore(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<AverageStatisticsDTO> retAverageScoreList = Lists.newLinkedList();
+        List<AverageStatisticsDTO> averageScoreList = qcresultInfoFacade.getAverageScoreByDept(filterVO);
+        Integer limitCount = filterVO.getLimitCount();
+        //质控平均分
+        if (ListUtil.isNotEmpty(averageScoreList)) {
+            retAverageScoreList = getLimitAverageList(averageScoreList, limitCount);
+        }
+        return retAverageScoreList;
+    }
+
+    /**
+     * 根据限制数量重组统计结果
+     *
+     * @param averageList
+     * @param limitCount
+     * @return
+     */
+    public List<AverageStatisticsDTO> getLimitAverageList(List<AverageStatisticsDTO> averageList, Integer limitCount) {
+        List<AverageStatisticsDTO> retAverageList = Lists.newLinkedList();
+        if (averageList.size() <= limitCount) {
+            retAverageList = BeanUtil.listCopyTo(averageList, AverageStatisticsDTO.class);
+        } else {
+            retAverageList = averageList.subList(0, limitCount - 1);
+            List<AverageStatisticsDTO> otherList = averageList.subList(limitCount - 1, averageList.size());
+            Double totleValue = otherList
+                    .stream()
+                    .map(i -> BigDecimal.valueOf(i.getTotleValue()))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add).doubleValue();
+            Integer num = otherList
+                    .stream()
+                    .map(AverageStatisticsDTO::getNum)
+                    .reduce(0, Integer::sum);
+            Double averageValue = BigDecimal.valueOf(totleValue)
+                    .divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP)
+                    .doubleValue();
+            AverageStatisticsDTO retAverageStatistics = new AverageStatisticsDTO();
+            retAverageStatistics.setName("其他");
+            retAverageStatistics.setNum(num);
+            retAverageStatistics.setAverageValue(averageValue);
+            retAverageStatistics.setTotleValue(totleValue);
+            retAverageList.add(retAverageStatistics);
+        }
+        return retAverageList;
+    }
 }

+ 171 - 0
src/main/java/com/diagbot/aggregate/MrStatisticsAggregate.java

@@ -0,0 +1,171 @@
+package com.diagbot.aggregate;
+
+import com.diagbot.dto.NumDTO;
+import com.diagbot.dto.QcResultPercentDTO;
+import com.diagbot.facade.BehospitalInfoFacade;
+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;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:病历相关统计
+ * @Author:zhaops
+ * @time: 2020/5/6 17:21
+ */
+@Component
+public class MrStatisticsAggregate {
+
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private QcresultInfoFacade qcresultInfoFacade;
+
+    @DataProvider("setAllMr")
+    public Map<String, Object> setAllDept(
+            @InvokeParameter("filterVO") FilterVO filterVO,
+            @DataConsumer("getLevelResultDept") List<QcResultPercentDTO> levelResults,
+            @DataConsumer("leaveHosCount") Map<String, Object> leaveHosMap,
+            @DataConsumer("mrCount") List<NumDTO> mrCountList) {
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        retMap.put("各科室甲级病历占比", Lists.newLinkedList());
+        retMap.put("病历数统计", Lists.newLinkedList());
+        retMap.put("出院人数统计", new LinkedHashMap<>());
+        if (ListUtil.isNotEmpty(levelResults)) {
+            retMap.put("各科室甲级病历占比", levelResults);
+        }
+        if (leaveHosMap != null) {
+            retMap.put("出院人数统计", leaveHosMap);
+        }
+        if (ListUtil.isNotEmpty(mrCountList)) {
+            retMap.put("病历数统计", mrCountList);
+        }
+        return retMap;
+    }
+
+    /**
+     * 各科室甲级病历占比
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("getLevelResultDept")
+    public List<QcResultPercentDTO> getLevelResultDept(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<QcResultPercentDTO> qcResultPercentList = qcresultInfoFacade.levelPercentGroupByDept(filterVO);
+        Integer limitCount = filterVO.getLimitCount();
+        qcResultPercentList = qcResultPercentList
+                .stream()
+                .limit(limitCount)
+                .collect(Collectors.toList());
+        return qcResultPercentList;
+    }
+
+    /**
+     * 出院人数统计
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("leaveHosCount")
+    public Map<String, Object> leaveHosCount(@InvokeParameter("filterVO") FilterVO filterVO) {
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        retMap.put("总人数", 0);
+        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);
+        retMap.put("总人数", totleNum);
+        retMap.put("死亡人数", deathNum);
+        retMap.put("新生儿人数", newBornNum);
+        retMap.put("手术病人数", operationNum);
+        return retMap;
+    }
+
+    /**
+     * 质控病历统计
+     *
+     * @return
+     */
+    @DataProvider("mrCount")
+    public List<NumDTO> mrCount(@InvokeParameter("filterVO") FilterVO filterVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        List<NumDTO> retList = Lists.newLinkedList();
+        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
+        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
+
+        int totleNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
+        if (totleNum == 0){
+            return retList;
+        }
+        qcresultFilterVO.setLevel("甲");
+        int firstLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
+        qcresultFilterVO.setLevel("乙");
+        int secondLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
+        qcresultFilterVO.setLevel("丙");
+        int thirdLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
+        NumDTO totleNumDTO = new NumDTO();
+        totleNumDTO.setName("累计质控病历数");
+        totleNumDTO.setTotleNum(totleNum);
+        totleNumDTO.setNum(totleNum);
+        NumDTO firstLevelNumDTO = new NumDTO();
+        firstLevelNumDTO.setName("甲级病历");
+        firstLevelNumDTO.setNum(firstLevelNum);
+        firstLevelNumDTO.setTotleNum(totleNum);
+        Double firstPercent = BigDecimal.valueOf(firstLevelNum)
+                .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String firstPercentStr = df.format(BigDecimal.valueOf(firstPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        firstLevelNumDTO.setPercent(firstPercent);
+        firstLevelNumDTO.setPercentStr(firstPercentStr);
+        NumDTO secondLevelNumDTO = new NumDTO();
+        secondLevelNumDTO.setName("乙级病历");
+        secondLevelNumDTO.setNum(secondLevelNum);
+        secondLevelNumDTO.setTotleNum(totleNum);
+        Double secondPercent = BigDecimal.valueOf(secondLevelNum)
+                .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                .doubleValue();
+        String secondPercentStr = df.format(BigDecimal.valueOf(secondPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        secondLevelNumDTO.setPercent(secondPercent);
+        secondLevelNumDTO.setPercentStr(secondPercentStr);
+        NumDTO thirdLevelNumDTO = new NumDTO();
+        thirdLevelNumDTO.setName("丙级病历");
+        thirdLevelNumDTO.setNum(thirdLevelNum);
+        thirdLevelNumDTO.setTotleNum(totleNum);
+        Double thirdPercent = BigDecimal.valueOf(1)
+                .subtract(BigDecimal.valueOf(firstPercent))
+                .subtract(BigDecimal.valueOf(secondPercent))
+                .doubleValue();
+        String thirdPercentStr = df.format(BigDecimal.valueOf(thirdPercent).multiply(BigDecimal.valueOf(100))) + "%";
+        thirdLevelNumDTO.setPercent(thirdPercent);
+        thirdLevelNumDTO.setPercentStr(thirdPercentStr);
+        retList.add(totleNumDTO);
+        retList.add(firstLevelNumDTO);
+        retList.add(secondLevelNumDTO);
+        retList.add(thirdLevelNumDTO);
+        return retList;
+    }
+}

+ 182 - 49
src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java

@@ -1,10 +1,14 @@
 package com.diagbot.aggregate;
 
-import com.diagbot.dto.ResultDetailDTO;
+import com.diagbot.dto.NumDTO;
 import com.diagbot.facade.BehospitalInfoFacade;
+import com.diagbot.facade.QcCasesFacade;
+import com.diagbot.facade.QcresultInfoFacade;
 import com.diagbot.util.BeanUtil;
+import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.QcresultFilterVO;
 import com.google.common.collect.Lists;
 import io.github.lvyahui8.spring.annotation.DataConsumer;
 import io.github.lvyahui8.spring.annotation.DataProvider;
@@ -15,110 +19,239 @@ import org.springframework.stereotype.Component;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
- * @Description:
+ * @Description:缺陷相关统计
  * @author: gaodm
  * @time: 2020/4/22 18:09
  */
 @Component
 public class ResultStatisticsAggregate {
+    @Autowired
+    private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private QcCasesFacade qcCasesFacade;
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
 
     @DataProvider("setAllResult")
     public Map<String, Object> setAllResult(
             @InvokeParameter("filterVO") FilterVO filterVO,
-            @DataConsumer("getResult") List<ResultDetailDTO> results,
-            @DataConsumer("getResultDept") List<ResultDetailDTO> results2) {
+            @DataConsumer("entryByDept") List<NumDTO> deptList,
+            @DataConsumer("entryCountGroupByEntry") List<NumDTO> entryList,
+            @DataConsumer("entryCountGroupByCase") List<NumDTO> caseList) {
         Map<String, Object> retMap = new LinkedHashMap<>();
-        if (ListUtil.isNotEmpty(results)) {
-            retMap.put("缺陷排行列表", results);
+        retMap.put("各科室缺陷占比", Lists.newLinkedList());
+        retMap.put("各模块缺陷占比排行", Lists.newLinkedList());
+        retMap.put("条目缺陷占比", Lists.newLinkedList());
+        if (ListUtil.isNotEmpty(deptList)) {
+            retMap.put("各科室缺陷占比", deptList);
         }
-        if (ListUtil.isNotEmpty(results2)) {
-            retMap.put("各科室缺陷占比", results2);
+        if (ListUtil.isNotEmpty(caseList)) {
+            retMap.put("各模块缺陷占比排行", caseList);
         }
+        if (ListUtil.isNotEmpty(entryList)) {
+            retMap.put("条目缺陷占比", entryList);
+        }
+
         return retMap;
     }
 
-    @DataProvider("getResult")
-    public List<ResultDetailDTO> getResult(@InvokeParameter("filterVO") FilterVO filterVO) {
-        List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics2(filterVO);
+    /**
+     * 各模块缺陷占比排行
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("entryCountGroupByCase")
+    public List<NumDTO> entryCountGroupByCase(@InvokeParameter("filterVO") FilterVO filterVO) {
+        Integer limitCount = filterVO.getLimitCount();
+        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
+        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
+        int mrNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
+        List<NumDTO> qcEntryNumList = qcresultInfoFacade.entryCountGroupByCase(filterVO);
+        List<NumDTO> standardEntryNumList = qcCasesFacade.entryGroupByCase();
+        if (ListUtil.isEmpty(qcEntryNumList)) {
+            standardEntryNumList.forEach(entryNum -> {
+                Integer totleNum = entryNum.getNum() * mrNum;
+                entryNum.setNum(0);
+                entryNum.setPercent(0d);
+                entryNum.setPercentStr("0%");
+                entryNum.setTotleNum(totleNum);
+            });
+        } else {
+            Map<Long, Integer> qcEntryNumMap
+                    = EntityUtil.makeMapWithKeyValue(qcEntryNumList, "id", "num");
+            if (ListUtil.isNotEmpty(standardEntryNumList)) {
+                standardEntryNumList.forEach(entryNum -> {
+                    Integer totleNum = entryNum.getNum() * mrNum;
+                    if (qcEntryNumMap.containsKey(entryNum.getId())) {
+                        entryNum.setNum(qcEntryNumMap.get(entryNum.getId()));
+                        Double percent = BigDecimal.valueOf(entryNum.getNum())
+                                .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                                .doubleValue();
+                        DecimalFormat df = new DecimalFormat("#0.00");
+                        String percentStr
+                                = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                        entryNum.setTotleNum(totleNum);
+                        entryNum.setPercent(percent);
+                        entryNum.setPercentStr(percentStr);
+                    } else {
+                        entryNum.setNum(0);
+                        entryNum.setPercent(0d);
+                        entryNum.setPercentStr("0%");
+                        entryNum.setTotleNum(totleNum);
+                    }
+                });
+            }
+            //降序排序
+            Collections.sort(standardEntryNumList, new Comparator<NumDTO>() {
+                @Override
+                public int compare(NumDTO o1, NumDTO o2) {
+                    return o2.getPercent().compareTo(o1.getPercent());
+                }
+            });
+        }
+
+        //取top10
+        standardEntryNumList = standardEntryNumList
+                .stream()
+                .limit(limitCount)
+                .collect(Collectors.toList());
+
+        return standardEntryNumList;
+    }
 
-        if (ListUtil.isNotEmpty(results)) {
-            int totle = results
+    /**
+     * 条目缺陷占比
+     *
+     * @param filterVO
+     * @return
+     */
+    @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(ResultDetailDTO::getNum)
+                    .map(NumDTO::getNum)
                     .reduce(0, Integer::sum);
-            List<ResultDetailDTO> retResutls = Lists.newLinkedList();
-            results.forEach(result -> {
-                Double percent = BigDecimal.valueOf(result.getNum())
+            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();
-                result.setPercent(percent);
-                DecimalFormat df = new DecimalFormat("#0.00");
+                numDTO.setPercent(percent);
                 String percentStr
-                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
-                result.setPercentStr(percentStr);
-                if (retResutls.size() < 10) {
-                    retResutls.add(result);
-                }
+                        = 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());
+                }
             });
-            return retResutls;
-        }
 
+            //top9+其他
+            if (numDTOList.size() <= limitCount) {
+                retList.addAll(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(1)
+                                .subtract(BigDecimal.valueOf(sumPercent))
+                                .doubleValue();
+                        otherNumDTO.setPercent(percent);
+                        String percentStr
+                                = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                        otherNumDTO.setPercentStr(percentStr);
+                        retList.add(otherNumDTO);
+                        break;
+                    }
+                }
+            }
+            return retList;
+        }
         return null;
     }
 
-    @DataProvider("getResultDept")
-    public List<ResultDetailDTO> getResultDept(@InvokeParameter("filterVO") FilterVO filterVO) {
-        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept2(filterVO);
-        if (ListUtil.isNotEmpty(results2)) {
-            int totle = results2
+    /**
+     * 各科室缺陷占比
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("entryByDept")
+    public List<NumDTO> entryByDept(@InvokeParameter("filterVO") FilterVO filterVO) {
+        Integer limitCount = filterVO.getLimitCount();
+        List<NumDTO> numDTOList = behospitalInfoFacade.resultStatisticsByDept2(filterVO);
+        if (ListUtil.isNotEmpty(numDTOList)) {
+            int totle = numDTOList
                     .stream()
-                    .map(ResultDetailDTO::getNum)
+                    .map(NumDTO::getNum)
                     .reduce(0, Integer::sum);
-            results2.forEach(result -> {
+            numDTOList.forEach(result -> {
                 Double percent = BigDecimal.valueOf(result.getNum())
                         .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
                         .doubleValue();
                 result.setPercent(percent);
             });
-            List<ResultDetailDTO> retResults = Lists.newLinkedList();
-            if (results2.size() <= 6) {
-                retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
+            List<NumDTO> retList = Lists.newLinkedList();
+            if (numDTOList.size() <= limitCount) {
+                retList = BeanUtil.listCopyTo(numDTOList, NumDTO.class);
             } else {
 
                 Double rate = 0d;
                 Integer num = 0;
-                for (ResultDetailDTO result : results2) {
-                    if (retResults.size() < 5) {
+                for (NumDTO numDTO : numDTOList) {
+                    if (retList.size() < limitCount - 1) {
                         rate = BigDecimal.valueOf(rate)
-                                .add(BigDecimal.valueOf(Double.valueOf(result.getPercent())))
+                                .add(BigDecimal.valueOf(Double.valueOf(numDTO.getPercent())))
                                 .doubleValue();
-                        retResults.add(result);
+                        retList.add(numDTO);
                     } else {
-                        num += result.getNum();
+                        num += numDTO.getNum();
                     }
                 }
-                ResultDetailDTO retResult = new ResultDetailDTO();
-                retResult.setName("其他");
-                retResult.setNum(num);
-                retResult.setPercent(BigDecimal.valueOf(1).subtract(BigDecimal.valueOf(rate)).doubleValue());
-                retResults.add(retResult);
+                NumDTO otherNumDTO = new NumDTO();
+                otherNumDTO.setName("其他");
+                otherNumDTO.setNum(num);
+                otherNumDTO.setPercent(BigDecimal.valueOf(1).subtract(BigDecimal.valueOf(rate)).doubleValue());
+                retList.add(otherNumDTO);
             }
-            retResults.forEach(result -> {
+            retList.forEach(result -> {
                 DecimalFormat df = new DecimalFormat("#0.00");
                 String percentStr
                         = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
                 result.setPercentStr(percentStr);
             });
-            return retResults;
+            return retList;
         }
         return null;
     }
-}
+}

+ 1 - 1
src/main/java/com/diagbot/config/MybatisPlusConfigurer.java

@@ -26,7 +26,7 @@ public class MybatisPlusConfigurer {
         // 设置请求的页面大于最大页后操作,true调回到首页,false继续请求,默认false
         //paginationInterceptor.setOverflow(false);
         // 设置最大单页限制数量,默认500条,-1不受限制
-        paginationInterceptor.setLimit(500L);
+        paginationInterceptor.setLimit(-1L);
         return paginationInterceptor;
     }
 

+ 11 - 1
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -46,8 +46,18 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/cache/clear").permitAll()
                 .antMatchers("/qc/behospitalInfo/execule").permitAll()
                 .antMatchers("/qc/behospitalInfo/analyze_rpc").permitAll()
-                .antMatchers("/qc/behospitalInfo/analyze").permitAll()
                 .antMatchers("/qc/behospitalInfo/analyze_api").permitAll()
+                .antMatchers("/qc/module/getById").permitAll()
+                .antMatchers("/qc/module/getModuleMap").permitAll()
+                .antMatchers("/qc/cases/getQcCases").permitAll()
+                .antMatchers("/qc/behospitalInfo/page").permitAll()
+                .antMatchers("/qc/casesEntryHospital/getQcCasesEntryAll").permitAll()
+                .antMatchers("/qc/casesEntryHospital/getQcCasesAll").permitAll()
+                .antMatchers("/qc/behospitalInfo/getByBehospitalCode").permitAll()
+                .antMatchers("/bas/dept/getList").permitAll()
+                .antMatchers("/bas/dept/getListUser").permitAll()
+                .antMatchers("/qc/behospitalInfo/page_dept").permitAll()
+                .antMatchers("/qc/behospitalInfo/page_person").permitAll()
                 .antMatchers("/**").authenticated();
 //                .antMatchers("/**").permitAll();
     }

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

@@ -89,8 +89,18 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/cache/clear", request)
                 || matchers("/qc/behospitalInfo/execule", request)
                 || matchers("/qc/behospitalInfo/analyze_rpc", request)
-                || matchers("/qc/behospitalInfo/analyze", request)
                 || matchers("/qc/behospitalInfo/analyze_api", request)
+                || matchers("/qc/module/getById", request)
+                || matchers("/qc/module/getModuleMap", request)
+                || matchers("/qc/cases/getQcCases", request)
+                || matchers("/qc/behospitalInfo/page", request)
+                || matchers("/qc/casesEntryHospital/getQcCasesEntryAll", request)
+                || matchers("/qc/casesEntryHospital/getQcCasesAll", request)
+                || matchers("/qc/behospitalInfo/getByBehospitalCode", request)
+                || matchers("/bas/dept/getList", request)
+                || matchers("/bas/dept/getListUser", request)
+                || matchers("/qc/behospitalInfo/page_dept", request)
+                || matchers("/qc/behospitalInfo/page_person", request)
                 || matchers("/", request)) {
             return true;
         }

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

@@ -11,9 +11,13 @@ import lombok.Setter;
 @Getter
 @Setter
 public class AverageStatisticsDTO {
-    private String deptId;
-    private String deptName;
+    private String id;
+    private String name;
     private Integer num;
-    private Double averageValue;
-    private Double totleValue;
+    private Double averageValue=0d;
+    private Double totleValue=0d;
+    //环比平均值
+    private Double lastAverageValue=0d;
+    //同比平均值
+    private Double lastYearAverageValue=0d;
 }

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

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/27 18:56
+ */
+@Getter
+@Setter
+public class BasDeptInfoDTO {
+    /**
+     * 科室编码(HIS导入)
+     */
+    private String deptId;
+
+    /**
+     * 科室名称
+     */
+    private String deptName;
+}

+ 1 - 1
src/main/java/com/diagbot/dto/BehosDTO.java

@@ -81,6 +81,6 @@ public class BehosDTO implements Serializable {
     /**
      * 年龄
      */
-    private Integer age;
+    private String age;
 
 }

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

@@ -81,7 +81,7 @@ public class BehospitalInfoDTO implements Serializable {
     /**
      * 年龄
      */
-    private Integer age;
+    private String age;
 
     /**
      * 病历等级
@@ -103,4 +103,7 @@ public class BehospitalInfoDTO implements Serializable {
      */
     private Date gradeTime;
 
+    private String directorDoctorName ;
+
+    private String behDoctorName;
 }

+ 4 - 5
src/main/java/com/diagbot/dto/ResultStatisticsDTO.java

@@ -3,15 +3,14 @@ package com.diagbot.dto;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.List;
-
 /**
  * @Description:
  * @Author:zhaops
- * @time: 2020/4/15 15:59
+ * @time: 2020/5/8 19:11
  */
 @Getter
 @Setter
-public class ResultStatisticsDTO {
-    List<ResultDetailDTO> details;
+public class DeptBaseDTO {
+    private String deptId;
+    private String deptName;
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/8 20:02
+ */
+@Getter
+@Setter
+public class DeptNumDTO extends NumDTO {
+    private String deptId;
+    private String deptName;
+}

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

@@ -0,0 +1,29 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2018/12/28 17:11
+ */
+@Setter
+@Getter
+public class GetModuleInfoOneDTO {
+    //模板id
+    private Long id;
+    //模板名称
+    private String name;
+    //医院ID
+    private Long hospitalId;
+    //数据模块ID
+    private Long modeId;
+    //数据模块名称
+    private String modeName;
+    //模板明细
+    private Map<Integer, List<QcModuleDetailDTO>> moduleDetail;
+}

+ 3 - 1
src/main/java/com/diagbot/dto/MsgDTO.java

@@ -21,6 +21,8 @@ public class MsgDTO {
     private BigDecimal score;
     //提示信息
     private String msg;
+    //提示信息
+    private String info;
     //标准提示信息
     private String standardMsg;
     //单项否决
@@ -36,5 +38,5 @@ public class MsgDTO {
     // 条目ID
     private Long casesEntryId;
     // 条目id对应页面数据的key值
-    private List<String> pageKeyList = new ArrayList<>();
+    private List<Long> pageKeyList = new ArrayList<>();
 }

+ 4 - 14
src/main/java/com/diagbot/dto/ResultDetailDTO.java

@@ -6,25 +6,15 @@ import lombok.Setter;
 /**
  * @Description:
  * @Author:zhaops
- * @time: 2020/4/15 16:26
+ * @time: 2020/5/6 15:55
  */
 @Getter
 @Setter
-public class ResultDetailDTO {
-    /**
-     * 缺陷名称/科室名称
-     */
+public class NumDTO {
+    private String id;
     private String name;
-    /**
-     * 数量
-     */
+    private Integer totleNum;
     private Integer num;
-    /**
-     * 占比
-     */
     private Double percent;
-    /**
-     * 百分比
-     */
     private String percentStr;
 }

+ 32 - 0
src/main/java/com/diagbot/dto/QcModuleDetailDTO.java

@@ -0,0 +1,32 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 模型明细表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+@Data
+public class QcModuleDetailDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 分组Id
+     */
+    private Integer groupId;
+
+    /**
+     * questionId
+     */
+    private Long questionId;
+
+    private QuestionDTO questionDTO;
+
+}

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

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/6 13:20
+ */
+@Getter
+@Setter
+public class QcResultPercentDTO {
+    private String deptId;
+    private String deptName;
+    private Integer totleNum;
+    private Integer firstLevelNum;
+    //private Integer secondLevelNum;
+    //private Integer thirdLevelNum;
+    private String firstPercent;
+    //private String secondPercent;
+    //private String thirdPercent;
+}

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

@@ -0,0 +1,34 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 返回标签内容
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class QuestionDTO {
+
+    private Long id;// id
+    private String name;//key
+    private String val;//value
+    private String tagName;//标签名称
+    private Integer controlType; //控件类型
+    private Integer tagType; //标签标识
+    private Long hospitalId; //医院ID
+    private Long modeId; //数据模块ID
+    private Integer retract; //缩进(0:不缩进 1:缩进)
+    private Integer addLine; //内容换行(0:不换行,1:换行)
+    private Integer monoLine; //独占一行(0:不换行,1:换行)
+    private Integer bold;//换行(0:不换行,1:加粗)
+    private Integer position; //显示位置(1:靠右显示)
+    private String casesEntryIds;//质控条目id列表
+    private List<QuestionDTO> questionMapping = new ArrayList<>();     //下级标签
+//    private String remark;//备注
+}

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

@@ -0,0 +1,17 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 返回标签和质控条目的映射内容
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class QuestionEntryDTO {
+
+    private Long id;// id
+    private Long casesEntryId;//casesEntryId
+}

+ 21 - 0
src/main/java/com/diagbot/dto/SysMenuPermissionDTO.java

@@ -0,0 +1,21 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/27 13:40
+ */
+@Getter
+@Setter
+public class SysMenuPermissionDTO {
+    private Long menuId;
+    private String menuName;
+    private Long parentId;
+    private Integer haveMenu;
+    private Long permissionId;
+    private String permissionName;
+    private Integer havePermission;
+}

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

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/27 13:40
+ */
+@Getter
+@Setter
+public class SysPermissionDTO {
+    private Long permissionId;
+    private String permissionName;
+    private Integer havePermission;
+    private Long parentId;
+}

+ 55 - 0
src/main/java/com/diagbot/dto/SysRoleDTO.java

@@ -0,0 +1,55 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/27 10:59
+ */
+@Getter
+@Setter
+public class SysRoleDTO {
+    /**
+     * 角色ID
+     */
+    private Long id;
+
+//    /**
+//     * 是否删除,N:未删除,Y:删除
+//     */
+//    private String isDeleted;
+//
+//    /**
+//     * 记录创建时间
+//     */
+//    private Date gmtCreate;
+//
+//    /**
+//     * 记录修改时间,如果时间是1970年则表示纪录未修改
+//     */
+//    private Date gmtModified;
+//
+//    /**
+//     * 创建人,0表示无创建人值
+//     */
+//    private String creator;
+//
+//    /**
+//     * 修改人,如果为0则表示纪录未修改
+//     */
+//    private String modifier;
+
+    /**
+     * 角色名称
+     */
+    private String name;
+
+    /**
+     * 角色描述
+     */
+    private String descritpion;
+}

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

@@ -0,0 +1,24 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/27 11:06
+ */
+@Getter
+@Setter
+public class SysRoleMenuDTO {
+    private Long menuId;
+    private String menuName;
+    private Long parentId;
+    private Integer haveMenu;
+    //权限
+    private List<SysPermissionDTO> sysPermissionDTOList;
+    //子菜单
+    private List<SysRoleMenuDTO> sonMenuDTOList;
+}

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

@@ -0,0 +1,19 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/28 9:26
+ */
+@Getter
+@Setter
+public class SysUserDeptDTO {
+    private Long userId;
+    private List<BasDeptInfoDTO> notSelDepts;
+    private List<BasDeptInfoDTO> selDepts;
+}

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

@@ -0,0 +1,33 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/27 17:14
+ */
+@Getter
+@Setter
+public class SysUserPermissionDTO {
+    /**
+     * 菜单ID
+     */
+    private Long menuId;
+
+    /**
+     * 权限ID
+     */
+    private Long permissionId;
+
+    /**
+     * 资源名称
+     */
+    private String name;
+
+    /**
+     * 资源编码
+     */
+    private String code;
+}

+ 27 - 0
src/main/java/com/diagbot/dto/SysUserQueryDTO.java

@@ -0,0 +1,27 @@
+package com.diagbot.dto;
+
+import com.diagbot.enums.StatusEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/28 9:17
+ */
+@Getter
+@Setter
+public class SysUserQueryDTO {
+    private Long userId;
+    private String userName;
+    private String linkman;
+    private String deptName;
+    private String roleName;
+    private Integer status;
+    private String statusName;
+
+
+    public String getStatusName() {
+        return StatusEnum.getName(this.status);
+    }
+}

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

@@ -0,0 +1,19 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/28 9:26
+ */
+@Getter
+@Setter
+public class SysUserRoleDTO {
+    private Long userId;
+    private List<SysRoleDTO> notSelRoles;
+    private List<SysRoleDTO> selRoles;
+}

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

@@ -0,0 +1,177 @@
+package com.diagbot.entity;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 医院科室信息
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public class BasDeptInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 科室编码(HIS导入)
+     */
+    private String deptId;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    private String parentDeptId;
+
+    /**
+     * 科室名称
+     */
+    private String deptName;
+
+    /**
+     * 科室类别
+     */
+    private String deptType;
+
+    /**
+     * 首字母拼音
+     */
+    private String spell;
+
+    /**
+     * 区域类别(门诊、工作站、住院等)
+     */
+    private String station;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private LocalDateTime gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private LocalDateTime gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    public String getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(String deptId) {
+        this.deptId = deptId;
+    }
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+    public String getParentDeptId() {
+        return parentDeptId;
+    }
+
+    public void setParentDeptId(String parentDeptId) {
+        this.parentDeptId = parentDeptId;
+    }
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+    public String getDeptType() {
+        return deptType;
+    }
+
+    public void setDeptType(String deptType) {
+        this.deptType = deptType;
+    }
+    public String getSpell() {
+        return spell;
+    }
+
+    public void setSpell(String spell) {
+        this.spell = spell;
+    }
+    public String getStation() {
+        return station;
+    }
+
+    public void setStation(String station) {
+        this.station = station;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public LocalDateTime getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(LocalDateTime gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public LocalDateTime getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(LocalDateTime gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    @Override
+    public String toString() {
+        return "BasDeptInfo{" +
+            "deptId=" + deptId +
+            ", hospitalId=" + hospitalId +
+            ", parentDeptId=" + parentDeptId +
+            ", deptName=" + deptName +
+            ", deptType=" + deptType +
+            ", spell=" + spell +
+            ", station=" + station +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+        "}";
+    }
+}

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

@@ -36,7 +36,7 @@ public class BehospitalInfo implements Serializable {
     private String name;
 
     /**
-     * 性别
+     * 性别(男,女)
      */
     private String sex;
 
@@ -50,6 +50,11 @@ public class BehospitalInfo implements Serializable {
      */
     private String fileCode;
 
+    /**
+     * 质控类型
+     */
+    private Long qcTypeId;
+
     /**
      * 病区编码
      */
@@ -111,15 +116,35 @@ public class BehospitalInfo implements Serializable {
     private String diagnose;
 
     /**
-     * 医生ID
+     * 住院医生ID
+     */
+    private String behDoctorId;
+
+    /**
+     * 住院医生姓名
+     */
+    private String behDoctorName;
+
+    /**
+     * 主治医生ID
      */
     private String doctorId;
 
     /**
-     * 医生姓名
+     * 主治医生姓名
      */
     private String doctorName;
 
+    /**
+     * 主任医生ID
+     */
+    private String directorDoctorId;
+
+    /**
+     * 主任医生姓名
+     */
+    private String directorDoctorName;
+
     /**
      * 是否删除,N:未删除,Y:删除
      */
@@ -144,4 +169,251 @@ public class BehospitalInfo implements Serializable {
      * 修改人,如果为0则表示纪录未修改
      */
     private String modifier;
+
+    public String getBehospitalCode() {
+        return behospitalCode;
+    }
+
+    public void setBehospitalCode(String behospitalCode) {
+        this.behospitalCode = behospitalCode;
+    }
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+    public String getSex() {
+        return sex;
+    }
+
+    public void setSex(String sex) {
+        this.sex = sex;
+    }
+    public Date getBirthday() {
+        return birthday;
+    }
+
+    public void setBirthday(Date birthday) {
+        this.birthday = birthday;
+    }
+    public String getFileCode() {
+        return fileCode;
+    }
+
+    public void setFileCode(String fileCode) {
+        this.fileCode = fileCode;
+    }
+    public Long getQcTypeId() {
+        return qcTypeId;
+    }
+
+    public void setQcTypeId(Long qcTypeId) {
+        this.qcTypeId = qcTypeId;
+    }
+    public String getWardCode() {
+        return wardCode;
+    }
+
+    public void setWardCode(String wardCode) {
+        this.wardCode = wardCode;
+    }
+    public String getWardName() {
+        return wardName;
+    }
+
+    public void setWardName(String wardName) {
+        this.wardName = wardName;
+    }
+    public String getBehDeptId() {
+        return behDeptId;
+    }
+
+    public void setBehDeptId(String behDeptId) {
+        this.behDeptId = behDeptId;
+    }
+    public String getBehDeptName() {
+        return behDeptName;
+    }
+
+    public void setBehDeptName(String behDeptName) {
+        this.behDeptName = behDeptName;
+    }
+    public String getBedCode() {
+        return bedCode;
+    }
+
+    public void setBedCode(String bedCode) {
+        this.bedCode = bedCode;
+    }
+    public String getBedName() {
+        return bedName;
+    }
+
+    public void setBedName(String bedName) {
+        this.bedName = bedName;
+    }
+    public String getInsuranceName() {
+        return insuranceName;
+    }
+
+    public void setInsuranceName(String insuranceName) {
+        this.insuranceName = insuranceName;
+    }
+    public String getJobType() {
+        return jobType;
+    }
+
+    public void setJobType(String jobType) {
+        this.jobType = jobType;
+    }
+    public Date getBehospitalDate() {
+        return behospitalDate;
+    }
+
+    public void setBehospitalDate(Date behospitalDate) {
+        this.behospitalDate = behospitalDate;
+    }
+    public Date getLeaveHospitalDate() {
+        return leaveHospitalDate;
+    }
+
+    public void setLeaveHospitalDate(Date leaveHospitalDate) {
+        this.leaveHospitalDate = leaveHospitalDate;
+    }
+    public String getDiagnoseIcd() {
+        return diagnoseIcd;
+    }
+
+    public void setDiagnoseIcd(String diagnoseIcd) {
+        this.diagnoseIcd = diagnoseIcd;
+    }
+    public String getDiagnose() {
+        return diagnose;
+    }
+
+    public void setDiagnose(String diagnose) {
+        this.diagnose = diagnose;
+    }
+    public String getBehDoctorId() {
+        return behDoctorId;
+    }
+
+    public void setBehDoctorId(String behDoctorId) {
+        this.behDoctorId = behDoctorId;
+    }
+    public String getBehDoctorName() {
+        return behDoctorName;
+    }
+
+    public void setBehDoctorName(String behDoctorName) {
+        this.behDoctorName = behDoctorName;
+    }
+    public String getDoctorId() {
+        return doctorId;
+    }
+
+    public void setDoctorId(String doctorId) {
+        this.doctorId = doctorId;
+    }
+    public String getDoctorName() {
+        return doctorName;
+    }
+
+    public void setDoctorName(String doctorName) {
+        this.doctorName = doctorName;
+    }
+    public String getDirectorDoctorId() {
+        return directorDoctorId;
+    }
+
+    public void setDirectorDoctorId(String directorDoctorId) {
+        this.directorDoctorId = directorDoctorId;
+    }
+    public String getDirectorDoctorName() {
+        return directorDoctorName;
+    }
+
+    public void setDirectorDoctorName(String directorDoctorName) {
+        this.directorDoctorName = directorDoctorName;
+    }
+    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;
+    }
+
+    @Override
+    public String toString() {
+        return "MedBehospitalInfo{" +
+                "behospitalCode=" + behospitalCode +
+                ", hospitalId=" + hospitalId +
+                ", name=" + name +
+                ", sex=" + sex +
+                ", birthday=" + birthday +
+                ", fileCode=" + fileCode +
+                ", qcTypeId=" + qcTypeId +
+                ", wardCode=" + wardCode +
+                ", wardName=" + wardName +
+                ", behDeptId=" + behDeptId +
+                ", behDeptName=" + behDeptName +
+                ", bedCode=" + bedCode +
+                ", bedName=" + bedName +
+                ", insuranceName=" + insuranceName +
+                ", jobType=" + jobType +
+                ", behospitalDate=" + behospitalDate +
+                ", leaveHospitalDate=" + leaveHospitalDate +
+                ", diagnoseIcd=" + diagnoseIcd +
+                ", diagnose=" + diagnose +
+                ", behDoctorId=" + behDoctorId +
+                ", behDoctorName=" + behDoctorName +
+                ", doctorId=" + doctorId +
+                ", doctorName=" + doctorName +
+                ", directorDoctorId=" + directorDoctorId +
+                ", directorDoctorName=" + directorDoctorName +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                "}";
+    }
 }

+ 78 - 0
src/main/java/com/diagbot/entity/QcModuleDetail.java

@@ -0,0 +1,78 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 模型明细表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+@Data
+public class QcModuleDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * module_id
+     */
+    private Long moduleId;
+
+    /**
+     * 分组Id
+     */
+    private Integer groupId;
+
+    /**
+     * questionId
+     */
+    private Long questionId;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 73 - 0
src/main/java/com/diagbot/entity/QcModuleInfo.java

@@ -0,0 +1,73 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 模型表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+@Data
+public class QcModuleInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 模板名称
+     */
+    private String name;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 数据模块ID
+     */
+    private Long modeId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 123 - 0
src/main/java/com/diagbot/entity/QcQuestionInfo.java

@@ -0,0 +1,123 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 标签基础表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+@Data
+public class QcQuestionInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 数据模块ID
+     */
+    private Long modeId;
+
+    /**
+     * 标签名
+     */
+    private String tagName;
+
+    /**
+     * key
+     */
+    private String name;
+
+    /**
+     * value
+     */
+    private String val;
+
+    /**
+     * 标签标识(1:单标签 4:组合标签)
+     */
+    private Integer tagType;
+
+    /**
+     * 控件类型(0:无类型)
+     */
+    private Integer controlType;
+
+    /**
+     * 缩进(0:不缩进 1:缩进)
+     */
+    private Integer retract;
+
+    /**
+     * 内容换行(0:不换行,1:换行)
+     */
+    private Integer addLine;
+
+    /**
+     * 独占一行(0:不换行,1:换行)
+     */
+    private Integer monoLine;
+
+    /**
+     * 换行(0:不换行,1:加粗)
+     */
+    private Integer bold;
+
+    /**
+     * 显示位置(1:靠右显示)
+     */
+    private Integer position;
+
+    /**
+     * 质控条目id列表
+     */
+    private String casesEntryIds;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 73 - 0
src/main/java/com/diagbot/entity/QcQuestionMapping.java

@@ -0,0 +1,73 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 标签映射表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+@Data
+public class QcQuestionMapping implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 上级question
+     */
+    private Long parentQuestion;
+
+    /**
+     * 下级question
+     */
+    private Long sonQuestion;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 7 - 140
src/main/java/com/diagbot/entity/QcresultDetail.java

@@ -3,6 +3,7 @@ package com.diagbot.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -18,6 +19,7 @@ import java.util.Date;
  * @since 2020-04-14
  */
 @TableName("med_qcresult_detail")
+@Data
 public class QcresultDetail implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -60,6 +62,11 @@ public class QcresultDetail implements Serializable {
      */
     private String msg;
 
+    /**
+     * 质控返回提示信息
+     */
+    private String info;
+
     /**
      * 单项否决(1-单项否决 0-非)
      */
@@ -94,144 +101,4 @@ public class QcresultDetail implements Serializable {
      * 备注
      */
     private String remark;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getHospitalId() {
-        return hospitalId;
-    }
-
-    public void setHospitalId(Long hospitalId) {
-        this.hospitalId = hospitalId;
-    }
-
-    public String getBehospitalCode() {
-        return behospitalCode;
-    }
-
-    public void setBehospitalCode(String behospitalCode) {
-        this.behospitalCode = behospitalCode;
-    }
-
-    public Long getCasesId() {
-        return casesId;
-    }
-
-    public void setCasesId(Long casesId) {
-        this.casesId = casesId;
-    }
-
-    public BigDecimal getCasesScore() {
-        return casesScore;
-    }
-
-    public void setCasesScore(BigDecimal casesScore) {
-        this.casesScore = casesScore;
-    }
-
-    public Long getCasesEntryId() {
-        return casesEntryId;
-    }
-
-    public void setCasesEntryId(Long casesEntryId) {
-        this.casesEntryId = casesEntryId;
-    }
-
-    public BigDecimal getScore() {
-        return score;
-    }
-
-    public void setScore(BigDecimal score) {
-        this.score = score;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    public Integer getIsReject() {
-        return isReject;
-    }
-
-    public void setIsReject(Integer isReject) {
-        this.isReject = isReject;
-    }
-
-    public String getIsDeleted() {
-        return isDeleted;
-    }
-
-    public void setIsDeleted(String isDeleted) {
-        this.isDeleted = isDeleted;
-    }
-
-    public Date getGmtCreate() {
-        return gmtCreate;
-    }
-
-    public void setGmtCreate(Date gmtCreate) {
-        this.gmtCreate = gmtCreate;
-    }
-
-    public Date getGmtModified() {
-        return gmtModified;
-    }
-
-    public void setGmtModified(Date gmtModified) {
-        this.gmtModified = gmtModified;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public String getModifier() {
-        return modifier;
-    }
-
-    public void setModifier(String modifier) {
-        this.modifier = modifier;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    @Override
-    public String toString() {
-        return "QcresultDetail{" +
-                "id=" + id +
-                ", hospitalId=" + hospitalId +
-                ", behospitalCode=" + behospitalCode +
-                ", casesId=" + casesId +
-                ", casesScore=" + casesScore +
-                ", casesEntryId=" + casesEntryId +
-                ", score=" + score +
-                ", isReject=" + isReject +
-                ", isDeleted=" + isDeleted +
-                ", gmtCreate=" + gmtCreate +
-                ", gmtModified=" + gmtModified +
-                ", creator=" + creator +
-                ", modifier=" + modifier +
-                ", remark=" + remark +
-                "}";
-    }
 }

+ 15 - 104
src/main/java/com/diagbot/entity/SysMenu.java

@@ -2,6 +2,8 @@ package com.diagbot.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -14,6 +16,8 @@ import java.util.Date;
  * @author gaodm
  * @since 2020-04-12
  */
+@Getter
+@Setter
 public class SysMenu implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -64,6 +68,17 @@ public class SysMenu implements Serializable {
      */
     private String code;
 
+    /**
+     * 是否在右侧菜单显示(0:不显示,1:显示)
+     */
+    private Integer showStatus;
+
+
+    /**
+     * 是否可以维护(0:不可维护,1:可以维护)
+     */
+    private Integer maintainStatus;
+
     /**
      * 排序,从小到大
      */
@@ -74,108 +89,4 @@ public class SysMenu 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 getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Long getParentId() {
-        return parentId;
-    }
-
-    public void setParentId(Long parentId) {
-        this.parentId = parentId;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public Integer getOrderNo() {
-        return orderNo;
-    }
-
-    public void setOrderNo(Integer orderNo) {
-        this.orderNo = orderNo;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    @Override
-    public String toString() {
-        return "SysMenu{" +
-                "id=" + id +
-                ", isDeleted=" + isDeleted +
-                ", gmtCreate=" + gmtCreate +
-                ", gmtModified=" + gmtModified +
-                ", creator=" + creator +
-                ", modifier=" + modifier +
-                ", name=" + name +
-                ", parentId=" + parentId +
-                ", code=" + code +
-                ", orderNo=" + orderNo +
-                ", remark=" + remark +
-                "}";
-    }
 }

+ 12 - 14
src/main/java/com/diagbot/entity/SysPermission.java

@@ -57,6 +57,11 @@ public class SysPermission implements Serializable {
      */
     private String name;
 
+    /**
+     * 资源编码
+     */
+    private String code;
+
     /**
      * 资源Url
      */
@@ -154,19 +159,12 @@ public class SysPermission implements Serializable {
         this.descritpion = descritpion;
     }
 
-    @Override
-    public String toString() {
-        return "Permission{" +
-                "id=" + id +
-                ", isDeleted=" + isDeleted +
-                ", gmtCreate=" + gmtCreate +
-                ", gmtModified=" + gmtModified +
-                ", creator=" + creator +
-                ", modifier=" + modifier +
-                ", name=" + name +
-                ", permissionUrl=" + permissionUrl +
-                ", method=" + method +
-                ", descritpion=" + descritpion +
-                "}";
+    public String getCode() {
+        return code;
     }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
 }

+ 185 - 0
src/main/java/com/diagbot/entity/SysRole.java

@@ -0,0 +1,185 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 系统角色表
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public class SysRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 角色ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 角色名称
+     */
+    private String name;
+
+    /**
+     * 角色等级
+     */
+    @TableField("roleLevel")
+    private Integer roleLevel;
+
+    /**
+     * 角色描述
+     */
+    private String descritpion;
+
+    /**
+     * 菜单ID:对应角色ID(暂无用处)
+     */
+    @TableField("menuItems")
+    private String menuItems;
+
+    /**
+     * 备注
+     */
+    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 getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getRoleLevel() {
+        return roleLevel;
+    }
+
+    public void setRoleLevel(Integer roleLevel) {
+        this.roleLevel = roleLevel;
+    }
+
+    public String getDescritpion() {
+        return descritpion;
+    }
+
+    public void setDescritpion(String descritpion) {
+        this.descritpion = descritpion;
+    }
+
+    public String getMenuItems() {
+        return menuItems;
+    }
+
+    public void setMenuItems(String menuItems) {
+        this.menuItems = menuItems;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "SysRole{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", name=" + name +
+                ", roleLevel=" + roleLevel +
+                ", descritpion=" + descritpion +
+                ", menuItems=" + menuItems +
+                ", remark=" + remark +
+                "}";
+    }
+}

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

@@ -0,0 +1,153 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 角色和菜单的映射表
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public class SysRoleMenu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 角色id
+     */
+    private Long roleId;
+
+    /**
+     * 菜单id
+     */
+    private Long menuId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    public Long getRoleId() {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId) {
+        this.roleId = roleId;
+    }
+
+    public Long getMenuId() {
+        return menuId;
+    }
+
+    public void setMenuId(Long menuId) {
+        this.menuId = menuId;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "SysRoleMenu{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", roleId=" + roleId +
+                ", menuId=" + menuId +
+                ", remark=" + remark +
+                "}";
+    }
+}

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

@@ -0,0 +1,153 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 角色和资源的映射表
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public class SysRolePermission implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 角色id
+     */
+    private Long roleId;
+
+    /**
+     * 资源id
+     */
+    private Long permissionId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    public Long getRoleId() {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId) {
+        this.roleId = roleId;
+    }
+
+    public Long getPermissionId() {
+        return permissionId;
+    }
+
+    public void setPermissionId(Long permissionId) {
+        this.permissionId = permissionId;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "SysRolePermission{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", roleId=" + roleId +
+                ", permissionId=" + permissionId +
+                ", remark=" + remark +
+                "}";
+    }
+}

+ 27 - 17
src/main/java/com/diagbot/entity/SysTaskCron.java

@@ -2,8 +2,9 @@ package com.diagbot.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
+
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * <p>
@@ -31,12 +32,12 @@ public class SysTaskCron implements Serializable {
     /**
      * 记录创建时间
      */
-    private LocalDateTime gmtCreate;
+    private Date gmtCreate;
 
     /**
      * 记录修改时间,如果时间是1970年则表示纪录未修改
      */
-    private LocalDateTime gmtModified;
+    private Date gmtModified;
 
     /**
      * 创建人,0表示无创建人值
@@ -75,6 +76,7 @@ public class SysTaskCron implements Serializable {
     public void setId(Long id) {
         this.id = id;
     }
+
     public String getIsDeleted() {
         return isDeleted;
     }
@@ -82,20 +84,23 @@ public class SysTaskCron implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
-    public LocalDateTime getGmtCreate() {
+
+    public Date getGmtCreate() {
         return gmtCreate;
     }
 
-    public void setGmtCreate(LocalDateTime gmtCreate) {
+    public void setGmtCreate(Date gmtCreate) {
         this.gmtCreate = gmtCreate;
     }
-    public LocalDateTime getGmtModified() {
+
+    public Date getGmtModified() {
         return gmtModified;
     }
 
-    public void setGmtModified(LocalDateTime gmtModified) {
+    public void setGmtModified(Date gmtModified) {
         this.gmtModified = gmtModified;
     }
+
     public String getCreator() {
         return creator;
     }
@@ -103,6 +108,7 @@ public class SysTaskCron implements Serializable {
     public void setCreator(String creator) {
         this.creator = creator;
     }
+
     public String getModifier() {
         return modifier;
     }
@@ -110,6 +116,7 @@ public class SysTaskCron implements Serializable {
     public void setModifier(String modifier) {
         this.modifier = modifier;
     }
+
     public String getCronCode() {
         return cronCode;
     }
@@ -117,6 +124,7 @@ public class SysTaskCron implements Serializable {
     public void setCronCode(String cronCode) {
         this.cronCode = cronCode;
     }
+
     public String getCron() {
         return cron;
     }
@@ -124,6 +132,7 @@ public class SysTaskCron implements Serializable {
     public void setCron(String cron) {
         this.cron = cron;
     }
+
     public Integer getIsUsed() {
         return isUsed;
     }
@@ -131,6 +140,7 @@ public class SysTaskCron implements Serializable {
     public void setIsUsed(Integer isUsed) {
         this.isUsed = isUsed;
     }
+
     public String getRemark() {
         return remark;
     }
@@ -142,15 +152,15 @@ public class SysTaskCron implements Serializable {
     @Override
     public String toString() {
         return "SysTaskCron{" +
-            "id=" + id +
-            ", isDeleted=" + isDeleted +
-            ", gmtCreate=" + gmtCreate +
-            ", gmtModified=" + gmtModified +
-            ", creator=" + creator +
-            ", modifier=" + modifier +
-            ", cronCode=" + cronCode +
-            ", cron=" + cron +
-            ", remark=" + remark +
-        "}";
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", cronCode=" + cronCode +
+                ", cron=" + cron +
+                ", remark=" + remark +
+                "}";
     }
 }

+ 35 - 12
src/main/java/com/diagbot/entity/SysUser.java

@@ -71,6 +71,11 @@ public class SysUser implements Serializable {
      */
     private Integer type;
 
+    /**
+     * 是否启用(0:停用,1:启用)
+     */
+    private Integer status;
+
     /**
      * 备注
      */
@@ -83,6 +88,7 @@ public class SysUser implements Serializable {
     public void setId(Long id) {
         this.id = id;
     }
+
     public String getIsDeleted() {
         return isDeleted;
     }
@@ -90,6 +96,7 @@ public class SysUser implements Serializable {
     public void setIsDeleted(String isDeleted) {
         this.isDeleted = isDeleted;
     }
+
     public Date getGmtCreate() {
         return gmtCreate;
     }
@@ -97,6 +104,7 @@ public class SysUser implements Serializable {
     public void setGmtCreate(Date gmtCreate) {
         this.gmtCreate = gmtCreate;
     }
+
     public Date getGmtModified() {
         return gmtModified;
     }
@@ -104,6 +112,7 @@ public class SysUser implements Serializable {
     public void setGmtModified(Date gmtModified) {
         this.gmtModified = gmtModified;
     }
+
     public String getCreator() {
         return creator;
     }
@@ -111,6 +120,7 @@ public class SysUser implements Serializable {
     public void setCreator(String creator) {
         this.creator = creator;
     }
+
     public String getModifier() {
         return modifier;
     }
@@ -118,6 +128,7 @@ public class SysUser implements Serializable {
     public void setModifier(String modifier) {
         this.modifier = modifier;
     }
+
     public String getUsername() {
         return username;
     }
@@ -125,6 +136,7 @@ public class SysUser implements Serializable {
     public void setUsername(String username) {
         this.username = username;
     }
+
     public String getPassword() {
         return password;
     }
@@ -132,6 +144,7 @@ public class SysUser implements Serializable {
     public void setPassword(String password) {
         this.password = password;
     }
+
     public String getLinkman() {
         return linkman;
     }
@@ -139,6 +152,7 @@ public class SysUser implements Serializable {
     public void setLinkman(String linkman) {
         this.linkman = linkman;
     }
+
     public Integer getType() {
         return type;
     }
@@ -146,6 +160,15 @@ public class SysUser implements Serializable {
     public void setType(Integer type) {
         this.type = type;
     }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
     public String getRemark() {
         return remark;
     }
@@ -157,17 +180,17 @@ public class SysUser implements Serializable {
     @Override
     public String toString() {
         return "User{" +
-            "id=" + id +
-            ", isDeleted=" + isDeleted +
-            ", gmtCreate=" + gmtCreate +
-            ", gmtModified=" + gmtModified +
-            ", creator=" + creator +
-            ", modifier=" + modifier +
-            ", username=" + username +
-            ", password=" + password +
-            ", linkman=" + linkman +
-            ", type=" + type +
-            ", remark=" + remark +
-        "}";
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", username=" + username +
+                ", password=" + password +
+                ", linkman=" + linkman +
+                ", type=" + type +
+                ", remark=" + remark +
+                "}";
     }
 }

+ 167 - 0
src/main/java/com/diagbot/entity/SysUserDept.java

@@ -0,0 +1,167 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户-医院科室映射表
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-28
+ */
+public class SysUserDept implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 用户主键
+     */
+    private Long userId;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 科室编码(HIS导入)
+     */
+    private String deptId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+
+    public String getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(String deptId) {
+        this.deptId = deptId;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "SysUserDept{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", userId=" + userId +
+                ", hospitalId=" + hospitalId +
+                ", deptId=" + deptId +
+                ", remark=" + remark +
+                "}";
+    }
+}

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

@@ -0,0 +1,153 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户-机构表映射表
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-28
+ */
+public class SysUserHospital implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 用户主键
+     */
+    private Long userId;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "SysUserHospital{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", userId=" + userId +
+                ", hospitalId=" + hospitalId +
+                ", remark=" + remark +
+                "}";
+    }
+}

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

@@ -0,0 +1,153 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 系统用户角色关联表
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-28
+ */
+public class SysUserRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户和角色关联ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 系统用户表.用户ID
+     */
+    private Long userId;
+
+    /**
+     * 系统角色表.角色ID
+     */
+    private Long roleId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getRoleId() {
+        return roleId;
+    }
+
+    public void setRoleId(Long roleId) {
+        this.roleId = roleId;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "SysUserRole{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", userId=" + userId +
+                ", roleId=" + roleId +
+                ", remark=" + remark +
+                "}";
+    }
+}

+ 21 - 0
src/main/java/com/diagbot/entity/wrapper/QuestionInfoWrapper.java

@@ -0,0 +1,21 @@
+package com.diagbot.entity.wrapper;
+
+import com.diagbot.entity.QcQuestionInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 标签扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-11-15
+ */
+@Getter
+@Setter
+public class QuestionInfoWrapper extends QcQuestionInfo {
+
+    private Long parentQuestion; //父级问题ID
+
+}

+ 42 - 0
src/main/java/com/diagbot/entity/wrapper/QuestionMappingWrapper.java

@@ -0,0 +1,42 @@
+package com.diagbot.entity.wrapper;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 标签映射表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+@Getter
+@Setter
+public class QuestionMappingWrapper implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 上级question
+     */
+    private Long parentQuestion;
+
+    /**
+     * 下级question
+     */
+    private Long sonQuestion;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+
+}

+ 35 - 0
src/main/java/com/diagbot/entity/wrapper/QuestionWrapper.java

@@ -0,0 +1,35 @@
+package com.diagbot.entity.wrapper;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 标签保存参数
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-12-03
+ */
+
+@Data
+public class QuestionWrapper implements Serializable {
+    private Long id; //主键
+    private Long hospitalId; //医院ID
+    private Long modeId; //数据模块ID
+    private String tagName; //标签名
+    private String name; //界面名称
+    private String val; // value
+    private Integer tagType; //标签显示类型
+    private Integer controlType; //控件类型
+    private Integer retract; // 缩进(0:不缩进 1:缩进)
+    private Integer addLine; // 换行(0:不换行,1:换行)
+    private Integer bold; //换行(0:不换行,1:加粗)
+    private Integer position; //显示位置(1:靠右显示)
+    private String casesEntryIds; //质控条目id列表
+    private String remark; //备注
+    private List<QuestionMappingWrapper> questionMappings = new ArrayList<>(); //映射关系
+}

+ 2 - 1
src/main/java/com/diagbot/entity/wrapper/SysMenuWrapper.java

@@ -1,5 +1,6 @@
 package com.diagbot.entity.wrapper;
 
+import com.diagbot.dto.SysUserPermissionDTO;
 import com.diagbot.entity.SysMenu;
 import lombok.Getter;
 import lombok.Setter;
@@ -15,6 +16,6 @@ import java.util.List;
 @Getter
 @Setter
 public class SysMenuWrapper extends SysMenu {
-
+    private List<SysUserPermissionDTO> sysUserPermissionDTOList = new ArrayList<>();
     private List<SysMenuWrapper> subMenuList = new ArrayList<>();
 }

+ 50 - 0
src/main/java/com/diagbot/enums/StatusEnum.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 StatusEnum implements KeyedNamed {
+    Disable(0, "禁用"),
+    Enable(1, "启用");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    StatusEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static StatusEnum getEnum(int key) {
+        for (StatusEnum item : StatusEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        StatusEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}
+

+ 1 - 1
src/main/java/com/diagbot/exception/ServiceErrorCode.java

@@ -8,7 +8,7 @@ package com.diagbot.exception;
  * @time: 2018/9/10 11:11
  */
 public enum ServiceErrorCode implements ErrorCode {
-    USER_NOT_FOUND("10020000", "该账号暂未注册"),
+    USER_NOT_FOUND("10020000", "该账号暂未注册或已被禁用,请联系管理员"),
     USER_PASSWORD_ERROR("10020001", "账号或密码不正确"),
     GET_TOKEN_FAIL("10020002", "获取token失败"),
     TOKEN_IS_NOT_MATCH_USER("10020003", "请使用自己的token进行接口请求"),

+ 44 - 0
src/main/java/com/diagbot/facade/BasDeptInfoFacade.java

@@ -0,0 +1,44 @@
+package com.diagbot.facade;
+
+import com.diagbot.dto.BasDeptInfoDTO;
+import com.diagbot.service.impl.BasDeptInfoServiceImpl;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.BasDeptInfoVO;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/27 18:58
+ */
+@Component
+public class BasDeptInfoFacade extends BasDeptInfoServiceImpl {
+
+    /**
+     * 获取医院科室下拉列表信息
+     *
+     * @param basDeptInfoVO 搜索参数
+     * @return 医院科室下拉列表信息
+     */
+    public List<BasDeptInfoDTO> listForUser(BasDeptInfoVO basDeptInfoVO) {
+        basDeptInfoVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        List<BasDeptInfoDTO> basDeptInfoDTOList = this.getList(basDeptInfoVO);
+        return basDeptInfoDTOList;
+    }
+
+
+    /**
+     * 获取医院用户下拉列表信息
+     *
+     * @param basDeptInfoVO 搜索参数
+     * @return 医院用户下拉列表信息
+     */
+    public List<BasDeptInfoDTO> getListUserFac(BasDeptInfoVO basDeptInfoVO) {
+        basDeptInfoVO.setUserId(Long.valueOf(SysUserUtils.getCurrentPrincipleID()));
+        basDeptInfoVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        List<BasDeptInfoDTO> basDeptInfoDTOList = this.getListUser(basDeptInfoVO);
+        return basDeptInfoDTOList;
+    }
+}

+ 111 - 20
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -16,6 +16,7 @@ import com.diagbot.dto.QcCasesEntryDTO;
 import com.diagbot.dto.QcModeDTO;
 import com.diagbot.dto.QcResultApiDTO;
 import com.diagbot.dto.QcResultDTO;
+import com.diagbot.dto.QuestionEntryDTO;
 import com.diagbot.dto.RecordContentDTO;
 import com.diagbot.dto.Response;
 import com.diagbot.entity.BehospitalInfo;
@@ -23,7 +24,6 @@ import com.diagbot.entity.DoctorAdvice;
 import com.diagbot.entity.HomeDiagnoseInfo;
 import com.diagbot.entity.HomeOperationInfo;
 import com.diagbot.entity.HomePage;
-import com.diagbot.entity.QcCasesEntryPagedata;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
@@ -34,6 +34,7 @@ import com.diagbot.util.EncrypDES;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.MapUtil;
+import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.AlgorithmVO;
 import com.diagbot.vo.AnalyzeApiVO;
@@ -53,6 +54,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -96,6 +98,8 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     QcCasesEntryPagedataFacade qcCasesEntryPagedataFacade;
     @Value("${encrypt.enable}")
     Boolean encryptFlag;
+    @Autowired
+    QcQuestionFacade qcQuestionFacade;
 
     public IPage<BehospitalInfoDTO> pageFac(BehospitalPageVO behospitalPageVO) {
         //入参验证
@@ -168,22 +172,20 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             AnalyzeVO analyzeVO = new AnalyzeVO();
             BeanUtil.copyProperties(getDetailVO, analyzeVO);
             List<MsgDTO> msgDTOList = getMsg(analyzeVO);
-            List<Long> caseEntryId = msgDTOList.stream().map(r -> r.getCasesEntryId()).collect(Collectors.toList());
-            if (ListUtil.isNotEmpty(caseEntryId)) {
-                List<QcCasesEntryPagedata> qcCasesEntryPagedataList = qcCasesEntryPagedataFacade.list(new QueryWrapper<QcCasesEntryPagedata>()
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .eq("hospital_id", hospitalId)
-                        .in("cases_entry_id", caseEntryId)
-                );
-                Map<Long, List<QcCasesEntryPagedata>> pageKey = EntityUtil.makeEntityListMap(qcCasesEntryPagedataList, "casesEntryId");
+            if (ListUtil.isNotEmpty(msgDTOList)) {
+                // 从qc_question_info的cases_entry_ids获取
+                Map<String, Object> paramMap = new HashMap<>();
+                paramMap.put("hospitalId", hospitalId);
+                paramMap.put("casesEntryIds", msgDTOList.stream().map(r -> r.getCasesEntryId()).collect(Collectors.toList()));
+                Map<Long, List<QuestionEntryDTO>> quesEntryMap = qcQuestionFacade.getByCaseEntryIdsFac(paramMap);
                 for (MsgDTO msgDTO : msgDTOList) {
-                    List<QcCasesEntryPagedata> pagedata = pageKey.get(msgDTO.getCasesEntryId());
-                    if (ListUtil.isNotEmpty(pagedata)) {
-                        msgDTO.setPageKeyList(pagedata.stream().map(r -> r.getPageKey()).collect(Collectors.toList()));
+                    if (quesEntryMap.get(msgDTO.getCasesEntryId()) != null) {
+                        msgDTO.setPageKeyList(quesEntryMap.get(msgDTO.getCasesEntryId())
+                                .stream().map(r -> r.getId()).collect(Collectors.toList()));
                     }
                 }
             }
-
+            // 根据模块分组
             Map<String, List<MsgDTO>> msgMap = EntityUtil.makeEntityListMap(msgDTOList, "modelName");
             res.put("msg", msgMap);
         }
@@ -317,12 +319,28 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         //根据质控结果获取质控条目
         QcResultAlgQueryVO qcResultAlgQueryVO = new QcResultAlgQueryVO();
         List<String> codeList = new ArrayList<>();
-        for (Map.Entry<String, Map<String, String>> output : outputInfo.getResult().entrySet()) {
-            codeList.add(output.getKey());
+        // code和info的映射map
+        Map<String, String> codeToInfoMap = new LinkedHashMap<>();
+        Map<String, Map<String, String>> codeMap = outputInfo.getResult();
+        for (String key : codeMap.keySet()) {
+            codeList.add(key);
+            Map<String, String> mapInfo = codeMap.get(key);
+            if (mapInfo != null && StringUtil.isNotBlank(mapInfo.get("info"))) {
+                codeToInfoMap.put(key, mapInfo.get("info"));
+            }
         }
         qcResultAlgQueryVO.setCodeList(codeList);
         qcResultAlgQueryVO.setHospitalId(hospitalId);
         List<QcResultAlgVO> qcResultAlgVOList = qcCasesEntryFacade.getQcResultAlgVO(qcResultAlgQueryVO);
+
+        // 对info赋值
+        for(QcResultAlgVO bean : qcResultAlgVOList) {
+            String info = codeToInfoMap.get(bean.getCode());
+            if (StringUtil.isNotBlank(info)) {
+                bean.setInfo(info);
+            }
+        }
+
         // 评分
         AlgorithmVO algorithmVO = new AlgorithmVO();
         algorithmVO.setType(0);
@@ -338,9 +356,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();
@@ -658,14 +675,18 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
         BehosDTO behosDTO = new BehosDTO();
         if (behospitalInfo == null) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该病历已删除!");
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
+                    "该病历不存在!【hospitalId=" + hospitalId + "】【behospitalCode="
+                            + getDetailVO.getBehospitalCode() + "】");
         }
         BeanUtil.copyProperties(behospitalInfo, behosDTO);
 
         // 获取结果主表信息
         QcResultDTO qcResultDTO = qcresultInfoFacade.getByBehospitalCode(getDetailVO);
         if (qcResultDTO == null) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该病历未评分!");
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
+                    "该病历未评分!【hospitalId=" + hospitalId + "】【behospitalCode="
+                    + getDetailVO.getBehospitalCode() + "】");
         }
         QcResultApiDTO qcResultApiDTO = new QcResultApiDTO();
         BeanUtil.copyProperties(qcResultDTO, qcResultApiDTO);
@@ -681,4 +702,74 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         res.put("details", msgMap);
         return res;
     }
+
+    /**
+     *
+     * @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()));
+        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()));
+        behospitalPageVO.setUserId(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
+        IPage<BehospitalInfoDTO> res = getPageByDept(behospitalPageVO);
+        return res;
+    }
+
 }

+ 434 - 0
src/main/java/com/diagbot/facade/ConsoleByDeptFacade.java

@@ -0,0 +1,434 @@
+package com.diagbot.facade;
+
+import com.diagbot.dto.DeptBaseDTO;
+import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.NumDTO;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.HPFilterByDeptVO;
+import com.diagbot.vo.QcresultFilterByDeptVO;
+import com.google.common.collect.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:主任医生相关首页
+ * @Author:zhaops
+ * @time: 2020/5/8 17:05
+ */
+@Component
+public class ConsoleByDeptFacade {
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+    @Autowired
+    private QcresultInfoFacade qcresultInfoFacade;
+    @Autowired
+    private BasDeptInfoFacade basDeptInfoFacade;
+    @Autowired
+    private FilterFacade filterFacade;
+    @Autowired
+    private QcCasesFacade qcCasesFacade;
+
+    /**
+     * 出院人数统计-按科室
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    public Map<String, Object> leaveHosCountByDept(FilterByDeptVO filterByDeptVO) {
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String startDate = filterFacade.getStartDateStr(filterByDeptVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterByDeptVO.getType(), null);
+        filterByDeptVO.setHospitalId(hospitalId);
+        filterByDeptVO.setUserId(Long.valueOf(userId));
+        filterByDeptVO.setStartDate(startDate);
+        filterByDeptVO.setEndDate(endDate);
+        HPFilterByDeptVO hpFilterByDeptVO = new HPFilterByDeptVO();
+        BeanUtil.copyProperties(filterByDeptVO, hpFilterByDeptVO);
+        //关联科室
+        Map<String, Object> deptMap = getDeptByUser(filterByDeptVO);
+        if (deptMap == null) {
+            return retMap;
+        }
+        //出院总人数
+        List<NumDTO> totleNumList = behospitalInfoFacade.homePageCountByDept(hpFilterByDeptVO);
+        Map<String, NumDTO> totleMap = ListUtil.isEmpty(totleNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(totleNumList, "name");
+        //死亡人数
+        hpFilterByDeptVO.setDeath(1);
+        List<NumDTO> deathNumList = behospitalInfoFacade.homePageCountByDept(hpFilterByDeptVO);
+        Map<String, NumDTO> deathMap = ListUtil.isEmpty(deathNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(deathNumList, "name");
+        //手术人数
+        List<NumDTO> operationNumList = behospitalInfoFacade.homePageCountForOperationByDept(filterByDeptVO);
+        Map<String, NumDTO> operationMap = ListUtil.isEmpty(operationNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(operationNumList, "name");
+        for (String deptName : deptMap.keySet()) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("总人数", 0);
+            map.put("死亡人数", 0);
+            map.put("手术病人数", 0);
+
+            if (totleMap.containsKey(deptName)) {
+                map.put("总人数", totleMap.get(deptName).getNum());
+            }
+            if (deathMap.containsKey(deptName)) {
+                map.put("死亡人数", deathMap.get(deptName).getNum());
+            }
+            if (operationMap.containsKey(deptName)) {
+                map.put("手术病人数", operationMap.get(deptName).getNum());
+            }
+            retMap.put(deptName, map);
+        }
+        return retMap;
+    }
+
+    /**
+     * 病历数统计-按科室
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    public Map<String, Object> mrCountByDept(FilterByDeptVO filterByDeptVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String startDate = filterFacade.getStartDateStr(filterByDeptVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterByDeptVO.getType(), null);
+        filterByDeptVO.setHospitalId(hospitalId);
+        filterByDeptVO.setUserId(Long.valueOf(userId));
+        filterByDeptVO.setStartDate(startDate);
+        filterByDeptVO.setEndDate(endDate);
+        QcresultFilterByDeptVO qcresultFilterByDeptVO = new QcresultFilterByDeptVO();
+        BeanUtil.copyProperties(filterByDeptVO, qcresultFilterByDeptVO);
+        //关联科室
+        Map<String, Object> deptMap = getDeptByUser(filterByDeptVO);
+        if (deptMap == null) {
+            return retMap;
+        }
+        //质控病历总数
+        List<NumDTO> totleNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterByDeptVO);
+        Map<String, NumDTO> totleMap = ListUtil.isEmpty(totleNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(totleNumList, "name");
+        //甲级病历
+        qcresultFilterByDeptVO.setLevel("甲");
+        List<NumDTO> firstNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterByDeptVO);
+        Map<String, NumDTO> firstMap = ListUtil.isEmpty(firstNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(firstNumList, "name");
+        //乙级病历
+        qcresultFilterByDeptVO.setLevel("乙");
+        List<NumDTO> secondNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterByDeptVO);
+        Map<String, NumDTO> secondMap = ListUtil.isEmpty(secondNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(secondNumList, "name");
+        //丙级病历
+        qcresultFilterByDeptVO.setLevel("丙");
+        List<NumDTO> thirdNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterByDeptVO);
+        Map<String, NumDTO> thirdMap = ListUtil.isEmpty(thirdNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(thirdNumList, "name");
+        for (String deptName : deptMap.keySet()) {
+            List<NumDTO> retList = Lists.newLinkedList();
+            int totleNum = 0;
+            int firstLevelNum = 0;
+            int secondLevelNum = 0;
+            int thirdLevelNum = 0;
+            if (totleMap.containsKey(deptName)) {
+                totleNum = totleMap.get(deptName).getNum();
+            }
+            if (firstMap.containsKey(deptName)) {
+                firstLevelNum = firstMap.get(deptName).getNum();
+            }
+            if (secondMap.containsKey(deptName)) {
+                secondLevelNum = secondMap.get(deptName).getNum();
+            }
+            if (thirdMap.containsKey(deptName)) {
+                thirdLevelNum = thirdMap.get(deptName).getNum();
+            }
+            //总病历数为0
+            if (totleNum == 0) {
+                retMap.put(deptName, Lists.newLinkedList());
+                continue;
+            }
+            NumDTO totleNumDTO = new NumDTO();
+            totleNumDTO.setName("累计质控病历数");
+            totleNumDTO.setTotleNum(totleNum);
+            totleNumDTO.setNum(totleNum);
+            NumDTO firstLevelNumDTO = new NumDTO();
+            firstLevelNumDTO.setName("甲级病历");
+            firstLevelNumDTO.setNum(firstLevelNum);
+            firstLevelNumDTO.setTotleNum(totleNum);
+            Double firstPercent = BigDecimal.valueOf(firstLevelNum)
+                    .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                    .doubleValue();
+            String firstPercentStr = df.format(BigDecimal.valueOf(firstPercent).multiply(BigDecimal.valueOf(100))) + "%";
+            firstLevelNumDTO.setPercent(firstPercent);
+            firstLevelNumDTO.setPercentStr(firstPercentStr);
+            NumDTO secondLevelNumDTO = new NumDTO();
+            secondLevelNumDTO.setName("乙级病历");
+            secondLevelNumDTO.setNum(secondLevelNum);
+            secondLevelNumDTO.setTotleNum(totleNum);
+            Double secondPercent = BigDecimal.valueOf(secondLevelNum)
+                    .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                    .doubleValue();
+            String secondPercentStr = df.format(BigDecimal.valueOf(secondPercent).multiply(BigDecimal.valueOf(100))) + "%";
+            secondLevelNumDTO.setPercent(secondPercent);
+            secondLevelNumDTO.setPercentStr(secondPercentStr);
+            NumDTO thirdLevelNumDTO = new NumDTO();
+            thirdLevelNumDTO.setName("丙级病历");
+            thirdLevelNumDTO.setNum(thirdLevelNum);
+            thirdLevelNumDTO.setTotleNum(totleNum);
+            Double thirdPercent = BigDecimal.valueOf(1)
+                    .subtract(BigDecimal.valueOf(firstPercent))
+                    .subtract(BigDecimal.valueOf(secondPercent))
+                    .doubleValue();
+            String thirdPercentStr = df.format(BigDecimal.valueOf(thirdPercent).multiply(BigDecimal.valueOf(100))) + "%";
+            thirdLevelNumDTO.setPercent(thirdPercent);
+            thirdLevelNumDTO.setPercentStr(thirdPercentStr);
+            retList.add(totleNumDTO);
+            retList.add(firstLevelNumDTO);
+            retList.add(secondLevelNumDTO);
+            retList.add(thirdLevelNumDTO);
+            retMap.put(deptName, retList);
+        }
+        return retMap;
+    }
+
+    /**
+     * 各模块缺陷占比排名-按科室
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    public Map<String, Object> entryCountGroupByCaseAndDept(FilterByDeptVO filterByDeptVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String startDate = filterFacade.getStartDateStr(filterByDeptVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterByDeptVO.getType(), null);
+        filterByDeptVO.setHospitalId(hospitalId);
+        filterByDeptVO.setUserId(Long.valueOf(userId));
+        filterByDeptVO.setStartDate(startDate);
+        filterByDeptVO.setEndDate(endDate);
+        if (filterByDeptVO.getLimitCount() == null || filterByDeptVO.getLimitCount().equals(0)) {
+            filterByDeptVO.setLimitCount(10);
+        }
+        Integer limitCount = filterByDeptVO.getLimitCount();
+        QcresultFilterByDeptVO qcresultFilterByDeptVO = new QcresultFilterByDeptVO();
+        BeanUtil.copyProperties(filterByDeptVO, qcresultFilterByDeptVO);
+        //关联科室
+        Map<String, Object> deptMap = getDeptByUser(filterByDeptVO);
+        if (deptMap == null) {
+            return retMap;
+        }
+        List<NumDTO> mrNumList = qcresultInfoFacade.resultCountByDept(qcresultFilterByDeptVO);
+        Map<String, NumDTO> mrMap = ListUtil.isEmpty(mrNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityMap(mrNumList, "name");
+        List<DeptNumDTO> qcEntryNumList = qcresultInfoFacade.entryCountGroupByCaseAndDept(filterByDeptVO);
+        Map<String, List<DeptNumDTO>> qcEntryMap = ListUtil.isEmpty(qcEntryNumList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityListMap(qcEntryNumList, "deptName");
+        List<NumDTO> standardEntryNumList = qcCasesFacade.entryGroupByCase();
+        for (String deptName : deptMap.keySet()) {
+            //没有质控病历
+            if (!mrMap.containsKey(deptName)) {
+                retMap.put(deptName, Lists.newLinkedList());
+                continue;
+            }
+            //病历数
+            Integer mrNum = mrMap.get(deptName).getNum();
+            //没有缺陷
+            if (!qcEntryMap.containsKey(deptName)) {
+                retMap.put(deptName, Lists.newLinkedList());
+                continue;
+            }
+            //模块缺陷
+            List<DeptNumDTO> qcEntryNumByDeptList = qcEntryMap.get(deptName);
+            List<NumDTO> retList = Lists.newLinkedList();
+            retList = BeanUtil.listCopyTo(standardEntryNumList, NumDTO.class);
+            if (ListUtil.isEmpty(qcEntryNumByDeptList)) {
+                for (NumDTO entryNum : retList) {
+                    Integer totleNum = entryNum.getNum() * mrNum;
+                    entryNum.setNum(0);
+                    entryNum.setPercent(0d);
+                    entryNum.setPercentStr("0%");
+                    entryNum.setTotleNum(totleNum);
+                }
+            } else {
+                Map<Long, Integer> qcEntryNumMap
+                        = EntityUtil.makeMapWithKeyValue(qcEntryNumByDeptList, "id", "num");
+                if (ListUtil.isNotEmpty(standardEntryNumList)) {
+                    for (NumDTO entryNum : retList) {
+                        Integer totleNum = entryNum.getNum() * mrNum;
+                        if (qcEntryNumMap.containsKey(entryNum.getId())) {
+                            entryNum.setNum(qcEntryNumMap.get(entryNum.getId()));
+                            Double percent = BigDecimal.valueOf(entryNum.getNum())
+                                    .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
+                                    .doubleValue();
+                            String percentStr
+                                    = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                            entryNum.setTotleNum(totleNum);
+                            entryNum.setPercent(percent);
+                            entryNum.setPercentStr(percentStr);
+                        } else {
+                            entryNum.setNum(0);
+                            entryNum.setPercent(0d);
+                            entryNum.setPercentStr("0%");
+                            entryNum.setTotleNum(totleNum);
+                        }
+                    }
+                }
+                //降序排序
+                Collections.sort(retList, new Comparator<NumDTO>() {
+                    @Override
+                    public int compare(NumDTO o1, NumDTO o2) {
+                        return o2.getPercent().compareTo(o1.getPercent());
+                    }
+                });
+            }
+
+            //取top10
+            retList = retList
+                    .stream()
+                    .limit(limitCount)
+                    .collect(Collectors.toList());
+            retMap.put(deptName, retList);
+
+        }
+        return retMap;
+    }
+
+
+    /**
+     * 条目缺陷占比-按科室
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    public Map<String, Object> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        String startDate = filterFacade.getStartDateStr(filterByDeptVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterByDeptVO.getType(), null);
+        filterByDeptVO.setHospitalId(hospitalId);
+        filterByDeptVO.setUserId(Long.valueOf(userId));
+        filterByDeptVO.setStartDate(startDate);
+        filterByDeptVO.setEndDate(endDate);
+        if (filterByDeptVO.getLimitCount() == null || filterByDeptVO.getLimitCount().equals(0)) {
+            filterByDeptVO.setLimitCount(10);
+        }
+        Integer limitCount = filterByDeptVO.getLimitCount();
+        //关联科室
+        Map<String, Object> deptMap = getDeptByUser(filterByDeptVO);
+        if (deptMap == null) {
+            return retMap;
+        }
+        List<DeptNumDTO> entryList = qcresultInfoFacade.entryCountGroupByEntryAndDept(filterByDeptVO);
+        Map<String, List<DeptNumDTO>> numListMap = ListUtil.isEmpty(entryList)
+                ? new HashMap<>()
+                : EntityUtil.makeEntityListMap(entryList, "deptName");
+        for (String deptName : deptMap.keySet()) {
+            if (!numListMap.containsKey(deptName)) {
+                retMap.put(deptName, Lists.newLinkedList());
+                continue;
+            }
+            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>() {
+                    @Override
+                    public int compare(NumDTO o1, NumDTO o2) {
+                        return o2.getPercent().compareTo(o1.getPercent());
+                    }
+                });
+
+                //top9+其他
+                if (entryByDeptList.size() <= limitCount) {
+                    retList.addAll(entryByDeptList);
+                } 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(1)
+                                    .subtract(BigDecimal.valueOf(sumPercent))
+                                    .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, retList);
+            }
+        }
+        return retMap;
+    }
+
+    /**
+     * 用户关联科室
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    public Map<String, Object> getDeptByUser(FilterByDeptVO filterByDeptVO) {
+        List<DeptBaseDTO> deptList = basDeptInfoFacade.getDeptByUser(filterByDeptVO);
+        if (ListUtil.isNotEmpty(deptList)) {
+            return EntityUtil.makeMapWithKeyValue(deptList, "deptName", "deptId");
+        } else {
+            return null;
+        }
+    }
+}

+ 182 - 222
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1,24 +1,20 @@
 package com.diagbot.facade;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.aggregate.AverageStatisticsAggregate;
+import com.diagbot.aggregate.MrStatisticsAggregate;
+import com.diagbot.aggregate.ResultStatisticsAggregate;
 import com.diagbot.dto.AverageStatisticsDTO;
-import com.diagbot.entity.BehospitalInfo;
-import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.dto.NumDTO;
+import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
-import com.diagbot.util.BeanUtil;
-import com.diagbot.util.DateUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.FilterVO;
-import com.diagbot.vo.QcresultFilterVO;
-import com.google.common.collect.Lists;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -31,114 +27,44 @@ import java.util.Map;
  */
 @Component
 public class ConsoleFacade {
-
     @Autowired
-    private QcresultInfoFacade qcresultInfoFacade;
+    private FilterFacade filterFacade;
     @Autowired
-    private BehospitalInfoFacade behospitalInfoFacade;
+    private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
+
     @Autowired
-    private HomePageFacade homePageFacade;
+    private AverageStatisticsAggregate averageStatisticsAggregate;
     @Autowired
-    private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
+    private MrStatisticsAggregate mrStatisticsAggregate;
+    @Autowired
+    private ResultStatisticsAggregate resultStatisticsAggregate;
 
+    //-----------------------聚合接口开始-------------------------------
 
     /**
      * 病历相关统计
      *
+     * @param filterVO
      * @return
      */
     public Map<String, Object> mrStatistics(FilterVO filterVO) {
         Map<String, Object> retMap = new LinkedHashMap<>();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
-        String startDate = getStartDateStr(filterVO.getType());
+        String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterVO.getType(), null);
         filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
         filterVO.setHospitalId(hospitalId);
-
-        QueryWrapper<BehospitalInfo> behospitalInfoQueryWrapper = new QueryWrapper<>();
-        behospitalInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("hospital_id", hospitalId)
-                .ge("behospital_date", startDate);
-        int behospitalInfoCount = behospitalInfoFacade.count(behospitalInfoQueryWrapper);
-        //病历数
-        if (filterVO.getType().equals(1)) {
-            retMap.put("本月病历数", behospitalInfoCount);
-        } else if (filterVO.getType().equals(2)) {
-            retMap.put("本年病历数", behospitalInfoCount);
-        }
-
-        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
-        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
-        //本月质控数-人工
-        qcresultFilterVO.setGradeType(2);
-        qcresultFilterVO.setLevel("");
-        int qcresultByGradeType2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月质控数-人工", qcresultByGradeType2Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年质控数-人工", qcresultByGradeType2Count);
-        }
-        //本月质控数-机器
-        qcresultFilterVO.setGradeType(1);
-        qcresultFilterVO.setLevel("");
-        int qcresultByGradeType1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月质控数-机器", qcresultByGradeType1Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年质控数-机器", qcresultByGradeType1Count);
-        }
-        //本月甲级病历-人工
-        qcresultFilterVO.setGradeType(2);
-        qcresultFilterVO.setLevel("甲");
-        int qcresultByGradeType2AndLevel1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月甲级病历-人工", qcresultByGradeType2AndLevel1Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年甲级病历-人工", qcresultByGradeType2AndLevel1Count);
-        }
-        //本月甲级病历-机器
-        qcresultFilterVO.setGradeType(1);
-        qcresultFilterVO.setLevel("甲");
-        int qcresultByGradeType1AndLevel1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月甲级病历-机器", qcresultByGradeType1AndLevel1Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年甲级病历-机器", qcresultByGradeType1AndLevel1Count);
-        }
-        //本月乙级病历-人工
-        qcresultFilterVO.setGradeType(2);
-        qcresultFilterVO.setLevel("乙");
-        int qcresultByGradeType2AndLevel2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月乙级病历-人工", qcresultByGradeType2AndLevel2Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年乙级病历-人工", qcresultByGradeType2AndLevel2Count);
-        }
-        //本月乙级病历-机器
-        qcresultFilterVO.setGradeType(1);
-        qcresultFilterVO.setLevel("乙");
-        int qcresultByGradeType1AndLevel2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月乙级病历-机器", qcresultByGradeType1AndLevel2Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年乙级病历-机器", qcresultByGradeType1AndLevel2Count);
-        }
-        //本月乙级病历-人工
-        qcresultFilterVO.setGradeType(2);
-        qcresultFilterVO.setLevel("丙");
-        int qcresultByGradeType2AndLevel3Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (qcresultFilterVO.getType().equals(1)) {
-            retMap.put("本月丙级病历-人工", qcresultByGradeType2AndLevel3Count);
-        } else if (qcresultFilterVO.getType().equals(2)) {
-            retMap.put("本年丙级病历-人工", qcresultByGradeType2AndLevel3Count);
+        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
+            filterVO.setLimitCount(10);
         }
-        //本月乙级病历-机器
-        qcresultFilterVO.setGradeType(1);
-        qcresultFilterVO.setLevel("丙");
-        int qcresultByGradeType1AndLevel3Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
-        if (filterVO.getType().equals(1)) {
-            retMap.put("本月丙级病历-机器", qcresultByGradeType1AndLevel3Count);
-        } else if (filterVO.getType().equals(2)) {
-            retMap.put("本年丙级病历-机器", qcresultByGradeType1AndLevel3Count);
+        try {
+            Map<String, Object> invokeParams = new HashMap<>();
+            invokeParams.put("filterVO", filterVO);
+            retMap
+                    = dataBeanAggregateQueryFacade.get("setAllMr", invokeParams, Map.class);
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
         }
         return retMap;
     }
@@ -151,59 +77,15 @@ public class ConsoleFacade {
      */
     public Map<String, Object> resultStatistics(FilterVO filterVO) {
         Map<String, Object> retMap = new LinkedHashMap<>();
-        retMap.put("缺陷排行列表", Lists.newLinkedList());
-        retMap.put("各科室缺陷占比", Lists.newLinkedList());
         String hospitalId = SysUserUtils.getCurrentHospitalID();
-        String startDate = getStartDateStr(filterVO.getType());
-        filterVO.setStartDate(startDate);
+        String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterVO.getType(), null);
         filterVO.setHospitalId(hospitalId);
-        /*if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
+        filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
+        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
             filterVO.setLimitCount(10);
-        }*/
-        //        List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics(filterVO);
-        //        if (ListUtil.isNotEmpty(results)) {
-        //            results.forEach(result -> {
-        //                DecimalFormat df = new DecimalFormat("#0.00");
-        //                String percentStr
-        //                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
-        //                result.setPercentStr(percentStr);
-        //            });
-        //            retMap.put("缺陷排行列表", results);
-        //        }
-        //        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept(filterVO);
-        //        if (ListUtil.isNotEmpty(results2)) {
-        //            List<ResultDetailDTO> retResults = Lists.newLinkedList();
-        //            if (results2.size() <= 6) {
-        //                retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
-        //            } else {
-        //
-        //                Double rate = 0d;
-        //                Integer num = 0;
-        //                for (ResultDetailDTO result : results2) {
-        //                    if (retResults.size() < 5) {
-        //                        rate = BigDecimal.valueOf(rate)
-        //                                .add(BigDecimal.valueOf(Double.valueOf(result.getPercent())))
-        //                                .doubleValue();
-        //                        retResults.add(result);
-        //                    } else {
-        //                        num += result.getNum();
-        //                    }
-        //                }
-        //                ResultDetailDTO retResult = new ResultDetailDTO();
-        //                retResult.setName("其他");
-        //                retResult.setNum(num);
-        //                retResult.setPercent(BigDecimal.valueOf(1).subtract(BigDecimal.valueOf(rate)).doubleValue());
-        //                retResults.add(retResult);
-        //            }
-        //            retResults.forEach(result -> {
-        //                DecimalFormat df = new DecimalFormat("#0.00");
-        //                String percentStr
-        //                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
-        //                result.setPercentStr(percentStr);
-        //            });
-        //            retMap.put("各科室缺陷占比", retResults);
-        //        }
-
+        }
         try {
             Map<String, Object> invokeParams = new HashMap<>();
             invokeParams.put("filterVO", filterVO);
@@ -216,43 +98,22 @@ public class ConsoleFacade {
     }
 
     /**
-     * 医院运营相关统计
+     * 平局值相关统计
      *
      * @param filterVO
      * @return
      */
     public Map<String, Object> averageStatistics(FilterVO filterVO) {
         Map<String, Object> retMap = new LinkedHashMap<>();
-        retMap.put("平均住院日", Lists.newLinkedList());
-        retMap.put("平均住院费用", Lists.newLinkedList());
         String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterVO.getType(), null);
         filterVO.setHospitalId(hospitalId);
-        String startDate = getStartDateStr(filterVO.getType());
         filterVO.setStartDate(startDate);
-
-        /*
-        List<AverageStatisticsDTO> retAverageDayNumList = Lists.newLinkedList();
-        List<AverageStatisticsDTO> retAverageFeeList = Lists.newLinkedList();
-        List<AverageStatisticsDTO> averageDayNumList = homePageFacade.getAverageDayNum(filterVO);
-        List<AverageStatisticsDTO> averageFeeList = homePageFacade.getAverageFee(filterVO);
-
+        filterVO.setEndDate(endDate);
         if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
             filterVO.setLimitCount(10);
         }
-        Integer limitCount = filterVO.getLimitCount();
-
-        //平均住院日
-        if (ListUtil.isNotEmpty(averageDayNumList)) {
-            retAverageDayNumList = getLimitAverageList(averageDayNumList, limitCount);
-            retMap.put("平均住院日", retAverageDayNumList);
-        }
-
-        //平均住院费用
-        if (ListUtil.isNotEmpty(averageFeeList)) {
-            retAverageFeeList = getLimitAverageList(averageFeeList, limitCount);
-            retMap.put("平均住院费用", retAverageFeeList);
-        }*/
-
         try {
             Map<String, Object> invokeParams = new HashMap<>();
             invokeParams.put("filterVO", filterVO);
@@ -261,67 +122,166 @@ public class ConsoleFacade {
         } catch (Exception e) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
         }
+        return retMap;
+    }
 
+    //-----------------------聚合接口结束-------------------------------
+
+    //-----------------------单独接口开始-------------------------------
+    /**
+     * 平均住院天数
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> getAverageDayNum(FilterVO filterVO) {
+        Map<String, Object> retMap = new HashMap<>();
+        filterVOSet(filterVO);
+        List<AverageStatisticsDTO> averageDayNumList = averageStatisticsAggregate.getAverageDayNum(filterVO);
+        if (ListUtil.isNotEmpty(averageDayNumList)) {
+            retMap.put("平均住院日", averageDayNumList);
+        }
         return retMap;
     }
 
     /**
-     * 筛选起始时间
+     * 平均住院费用
      *
-     * @param type
+     * @param filterVO
      * @return
      */
-    public String getStartDateStr(Integer type) {
-        Date date = new Date();
-        String startDate = "";
-        String year = DateUtil.getYear(date);
-        int month = DateUtil.getMonth(date);
-        if (type.equals(1)) {
-            //本月统计
-            startDate = year + "-" + month + "-1";
-        } else if (type.equals(2)) {
-            //本年统计
-            startDate = year + "-1-1";
+    public Map<String, Object> getAverageFee(FilterVO filterVO) {
+        Map<String, Object> retMap = new HashMap<>();
+        filterVOSet(filterVO);
+        List<AverageStatisticsDTO> averageFeeList = averageStatisticsAggregate.getAverageFee(filterVO);
+        if (ListUtil.isNotEmpty(averageFeeList)) {
+            retMap.put("平均住院费用", averageFeeList);
         }
-        return startDate;
+        return retMap;
     }
 
     /**
-     * 根据限制数量重组统计结果
+     * 质控平均分按科室统计
      *
-     * @param averageList
-     * @param limitCount
+     * @param filterVO
      * @return
      */
-    public List<AverageStatisticsDTO> getLimitAverageList(List<AverageStatisticsDTO> averageList, Integer limitCount) {
-        List<AverageStatisticsDTO> retAverageList = Lists.newLinkedList();
-        if (averageList.size() < limitCount) {
-            retAverageList = BeanUtil.listCopyTo(averageList, AverageStatisticsDTO.class);
-        } else {
-            if (averageList.size() > limitCount) {
-                retAverageList = averageList.subList(0, limitCount - 1);
-                List<AverageStatisticsDTO> otherList = averageList.subList(limitCount - 1, averageList.size());
-                Double totleValue = otherList
-                        .stream()
-                        .map(i -> BigDecimal.valueOf(i.getTotleValue()))
-                        .reduce(BigDecimal.ZERO, BigDecimal::add).doubleValue();
-                Integer num = otherList
-                        .stream()
-                        .map(AverageStatisticsDTO::getNum)
-                        .reduce(0, Integer::sum);
-                Double averageValue = BigDecimal.valueOf(totleValue)
-                        .divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP)
-                        .doubleValue();
-                AverageStatisticsDTO retAverageStatistics = new AverageStatisticsDTO();
-                retAverageStatistics.setDeptName("其他");
-                retAverageStatistics.setNum(num);
-                retAverageStatistics.setAverageValue(averageValue);
-                retAverageStatistics.setTotleValue(totleValue);
-                retAverageList.add(retAverageStatistics);
-            } else {
-                retAverageList = averageList;
-            }
+    public Map<String, Object> getAverageScore(FilterVO filterVO) {
+        Map<String, Object> retMap = new HashMap<>();
+        filterVOSet(filterVO);
+        List<AverageStatisticsDTO> averageScoreList = averageStatisticsAggregate.getAverageScore(filterVO);
+        if (ListUtil.isNotEmpty(averageScoreList)) {
+            retMap.put("各科室质控平均分", averageScoreList);
+        }
+        return retMap;
+    }
+
+    /**
+     * 各科室甲级病历占比
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> getLevelResultDept(FilterVO filterVO) {
+        Map<String, Object> retMap = new HashMap<>();
+        filterVOSet(filterVO);
+        List<QcResultPercentDTO> levelResults = mrStatisticsAggregate.getLevelResultDept(filterVO);
+        if (ListUtil.isNotEmpty(levelResults)) {
+            retMap.put("各科室甲级病历占比", levelResults);
+        }
+        return retMap;
+    }
+
+    /**
+     * 出院人数统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> leaveHosCount(FilterVO filterVO) {
+        Map<String, Object> retMap = new HashMap<>();
+        filterVOSet(filterVO);
+        Map<String, Object> leaveHosMap = mrStatisticsAggregate.leaveHosCount(filterVO);
+        if (leaveHosMap != null) {
+            retMap.put("出院人数统计", leaveHosMap);
+        }
+        return retMap;
+    }
+
+    /**
+     * 质控病历统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> mrCount(FilterVO filterVO) {
+        Map<String, Object> retMap = new HashMap<>();
+        filterVOSet(filterVO);
+        List<NumDTO> mrCountList = mrStatisticsAggregate.mrCount(filterVO);
+        if (ListUtil.isNotEmpty(mrCountList)) {
+            retMap.put("病历数统计", mrCountList);
+        }
+        return retMap;
+    }
+
+    /**
+     * 各模块缺陷占比排行
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> entryCountGroupByCase(FilterVO filterVO) {
+        Map<String, Object> retMap = new HashMap<>();
+        filterVOSet(filterVO);
+        List<NumDTO> caseList = resultStatisticsAggregate.entryCountGroupByCase(filterVO);
+        if (ListUtil.isNotEmpty(caseList)) {
+            retMap.put("各模块缺陷占比排行", caseList);
+        }
+        return retMap;
+    }
+
+    /**
+     * 条目缺陷占比
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> entryCountGroupByEntry(FilterVO filterVO) {
+        Map<String, Object> retMap = new HashMap<>();
+        filterVOSet(filterVO);
+        List<NumDTO> entryList = resultStatisticsAggregate.entryCountGroupByEntry(filterVO);
+        if (ListUtil.isNotEmpty(entryList)) {
+            retMap.put("条目缺陷占比", entryList);
+        }
+        return retMap;
+    }
+
+    /**
+     * 各科室缺陷占比
+     *
+     * @param filterVO
+     * @return
+     */
+    public Map<String, Object> entryByDept(FilterVO filterVO) {
+        Map<String, Object> retMap = new HashMap<>();
+        filterVOSet(filterVO);
+        List<NumDTO> deptList = resultStatisticsAggregate.entryByDept(filterVO);
+        if (ListUtil.isNotEmpty(deptList)) {
+            retMap.put("各科室缺陷占比", deptList);
+        }
+        return retMap;
+    }
+
+    private void filterVOSet(FilterVO filterVO){
+        String hospitalId = SysUserUtils.getCurrentHospitalID();
+        String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
+        String endDate = filterFacade.getEndDateStr(filterVO.getType(), null);
+        filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
+        filterVO.setHospitalId(hospitalId);
+        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
+            filterVO.setLimitCount(10);
         }
-        return retAverageList;
     }
+    //-----------------------单独接口结束-------------------------------
 }

+ 94 - 0
src/main/java/com/diagbot/facade/FilterFacade.java

@@ -0,0 +1,94 @@
+package com.diagbot.facade;
+
+import com.diagbot.util.DateUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/5/7 13:53
+ */
+@Component
+public class FilterFacade {
+    /**
+     * 筛选起始时间
+     *
+     * @param type
+     * @return
+     */
+    public String getStartDateStr(Integer type, Integer optYear) {
+        Date date = new Date();
+        String startDate = "";
+        String year = optYear == null ? DateUtil.getYear(date) : optYear.toString();
+        int month = DateUtil.getMonth(date);
+        if (type.equals(1)) {
+            //本月统计
+            startDate = year + "-" + month + "-1";
+        } else if (type.equals(2)) {
+            //本年统计
+            startDate = year + "-1-1";
+        }
+        return startDate;
+    }
+
+    /**
+     * 筛选截止时间
+     *
+     * @param type
+     * @return
+     */
+    public String getEndDateStr(Integer type, Integer optYear) {
+        Date date = new Date();
+        String endDate = "";
+        String year = optYear == null ? DateUtil.getYear(date) : optYear.toString();
+        int month = DateUtil.getMonth(date);
+        if (type.equals(1)) {
+            //本月统计
+            if (month == 12) {
+                endDate = (Integer.valueOf(year) + 1) + "-1-1";
+            } else {
+                endDate = year + "-" + (month + 1) + "-1";
+            }
+        } else if (type.equals(2)) {
+            //本年统计
+            endDate = (Integer.valueOf(year) + 1) + "-1-1";
+        }
+        return endDate;
+    }
+
+    /**
+     * 上一统计周期(上月/去年)的起始时间
+     *
+     * @param type
+     * @return
+     */
+    public String getLastStartDateStr(Integer type) {
+        Date date = new Date();
+        String dateStr = "";
+        String year = DateUtil.getYear(date);
+        int month = DateUtil.getMonth(date);
+        if (type.equals(1)) {
+            if (month == 1) {
+                dateStr = (Integer.valueOf(year) - 1) + "-12-1";
+            } else {
+                dateStr = year + "-" + (month - 1) + "-1";
+            }
+        } else if (type.equals(2)) {
+            dateStr = (Integer.valueOf(year) - 1) + "-1-1";
+        }
+        return dateStr;
+    }
+
+    /**
+     * 获取上一统计周期(上月/去年)的起始时间
+     *
+     * @param type
+     * @return
+     */
+    public String getLastEndDateStr(Integer type) {
+        //上一统计周期的截止时间等于本周期的起始时间
+        return getStartDateStr(type, null);
+    }
+}

+ 14 - 0
src/main/java/com/diagbot/facade/QcModuleDetailFacade.java

@@ -0,0 +1,14 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.QcModuleDetailServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2018/11/23 11:37
+ */
+@Component
+public class QcModuleDetailFacade extends QcModuleDetailServiceImpl {
+
+}

+ 103 - 0
src/main/java/com/diagbot/facade/QcModuleInfoFacade.java

@@ -0,0 +1,103 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.GetModuleInfoOneDTO;
+import com.diagbot.dto.QcModuleDetailDTO;
+import com.diagbot.dto.QuestionDTO;
+import com.diagbot.entity.QcModuleDetail;
+import com.diagbot.entity.QcModuleInfo;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.impl.QcModuleInfoServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.GetModuleInfoOneVO;
+import com.diagbot.vo.GetModuleMapVO;
+import com.diagbot.vo.QuestionIdsVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2018/11/23 11:37
+ */
+@Component
+public class QcModuleInfoFacade extends QcModuleInfoServiceImpl {
+
+    @Autowired
+    QcModuleDetailFacade qcModuleDetailFacade;
+    @Autowired
+    QcQuestionFacade qcQuestionFacade;
+
+    /**
+     * 根据id获取模板信息
+     *
+     * @param getModuleInfoOneVO
+     * @return
+     */
+    public GetModuleInfoOneDTO getByIdFac(GetModuleInfoOneVO getModuleInfoOneVO) {
+        //获取模板信息
+        GetModuleInfoOneDTO getModuleInfoOneDTO = this.getById(getModuleInfoOneVO);
+
+        if (null == getModuleInfoOneDTO) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
+                    "模板已删除【" + getModuleInfoOneVO.getModuleId() + "】");
+        }
+        List<QcModuleDetail> qcModuleDetailList = qcModuleDetailFacade.list(new QueryWrapper<QcModuleDetail>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("module_id", getModuleInfoOneDTO.getId())
+                .orderByAsc("order_no")
+        );
+        List<QcModuleDetailDTO> qcModuleDetailDTOList = BeanUtil.listCopyTo(qcModuleDetailList, QcModuleDetailDTO.class);
+
+        // 根据questionId获取所有的标签
+        List<Long> questionIds = qcModuleDetailList.stream().map(r -> r.getQuestionId()).collect(Collectors.toList());
+        QuestionIdsVO questionIdsVO = new QuestionIdsVO();
+        questionIdsVO.setIds(questionIds);
+        Map<Long, QuestionDTO> questionDTOMap = qcQuestionFacade.getByIds(questionIdsVO);
+        for (QcModuleDetailDTO bean : qcModuleDetailDTOList) {
+            QuestionDTO questionDTO = questionDTOMap.get(bean.getQuestionId());
+            if (questionDTO != null) {
+                bean.setQuestionDTO(questionDTO);
+            }
+        }
+        Map<Integer, List<QcModuleDetailDTO>> map = EntityUtil.makeEntityListMap(qcModuleDetailDTOList, "groupId");
+        getModuleInfoOneDTO.setModuleDetail(map);
+        return getModuleInfoOneDTO;
+    }
+
+    /**
+     * 根据模块获取模板信息
+     *
+     * @param getModuleMapVO
+     * @return
+     */
+//    @Cacheable(value = "cache", key = "'qcmodule'")
+    public Map<Long, GetModuleInfoOneDTO> getModuleMap(GetModuleMapVO getModuleMapVO) {
+        Map<Long, GetModuleInfoOneDTO> res = new LinkedHashMap<>();
+        List<QcModuleInfo> qcModuleInfoList = this.list(new QueryWrapper<QcModuleInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq(getModuleMapVO.getModeId() != null, "mode_id", getModuleMapVO.getModeId())
+                .eq("hospital_id", getModuleMapVO.getHospitalId())
+        );
+        List<Long> ids = qcModuleInfoList.stream().map(r -> r.getId()).collect(Collectors.toList());
+        if (ListUtil.isEmpty(ids)) {
+            return new HashMap<>();
+        }
+        GetModuleInfoOneVO getModuleInfoOneVO = new GetModuleInfoOneVO();
+        for (Long id : ids) {
+            getModuleInfoOneVO.setModuleId(id);
+            res.put(id, getByIdFac(getModuleInfoOneVO));
+        }
+        return res;
+    }
+}

+ 117 - 0
src/main/java/com/diagbot/facade/QcQuestionFacade.java

@@ -0,0 +1,117 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.QuestionDTO;
+import com.diagbot.dto.QuestionEntryDTO;
+import com.diagbot.entity.QcQuestionInfo;
+import com.diagbot.entity.wrapper.QuestionInfoWrapper;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.QcQuestionInfoServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.QuestionIdsVO;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2018/11/23 11:37
+ */
+@Component
+public class QcQuestionFacade extends QcQuestionInfoServiceImpl {
+
+    /**
+     * 根据参数返回标签内容
+     *
+     * @param questionVO 获取标签内容参数
+     * @return 标签内容
+     */
+    public QuestionDTO getById(QuestionVO questionVO) {
+        Map paramMap = new HashMap<>();
+        paramMap.put("id", questionVO.getId());
+
+        QcQuestionInfo questionInfo = this.getOne(new QueryWrapper<QcQuestionInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id", questionVO.getId()), false
+        );
+        if (questionInfo == null) { //无数据直接返回,不通过报错的形式返回
+            return new QuestionDTO();
+        }
+        QuestionDTO res = new QuestionDTO();
+        BeanUtil.copyProperties(questionInfo, res);
+
+        //获取子标签
+        List<QuestionInfoWrapper> questionMapping = this.getByQuestionMapping(paramMap);
+        List<QuestionDTO> sonQuestionList = BeanUtil.listCopyTo(questionMapping, QuestionDTO.class);
+        res.setQuestionMapping(sonQuestionList);
+        return res;
+    }
+
+
+//    /**
+//     * 查询多个id返回标签内容
+//     *
+//     * @param questionIdsVO 获取标签内容参数
+//     * @return 标签内容
+//     */
+//    public Map<Long, QuestionDTO> getByIds(QuestionIdsVO questionIdsVO) {
+//        Map<Long, QuestionDTO> data = new HashMap<>();
+//        if (StringUtil.isEmpty(questionIdsVO.getIds())) {
+//            return data;
+//        }
+//        String[] ids = questionIdsVO.getIds().split(",");
+//        for (String id : ids) {
+//            QuestionVO questionVO = new QuestionVO();
+//            questionVO.setId(Long.parseLong(id));
+//            QuestionDTO item = this.getById(questionVO);
+//            data.put(item.getId(), item);
+//        }
+//        return data;
+//    }
+
+
+    /**
+     * 查询多个id返回标签内容【优化版】
+     *
+     * @param questionIdsVO 获取标签内容参数
+     * @return 标签内容Fac
+     */
+    public Map<Long, QuestionDTO> getByIds(QuestionIdsVO questionIdsVO) {
+        List<Long> idList = questionIdsVO.getIds();
+        if (ListUtil.isEmpty(idList)) {
+            return new HashMap<>();
+        }
+        List<QcQuestionInfo> qcQuestionInfoList = this.list(new QueryWrapper<QcQuestionInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .in("id", idList)
+        );
+        List<QuestionDTO> questionDTOList = BeanUtil.listCopyTo(qcQuestionInfoList, QuestionDTO.class);
+        if (ListUtil.isNotEmpty(questionDTOList)) {
+            List<Long> ids = questionDTOList.stream().map(r -> r.getId()).collect(Collectors.toList());
+            Map paramMap = new HashMap<>();
+            paramMap.put("ids", ids);
+            //获取子标签
+            List<QuestionInfoWrapper> questionMapping = this.getByQuestionMapping(paramMap);
+            Map<Long, List<QuestionInfoWrapper>> map = EntityUtil.makeEntityListMap(questionMapping, "parentQuestion");
+            for (QuestionDTO bean : questionDTOList) {
+                List<QuestionInfoWrapper> questionInfoWrapperList = map.get(bean.getId());
+                if (ListUtil.isNotEmpty(questionInfoWrapperList)) {
+                    bean.setQuestionMapping(BeanUtil.listCopyTo(questionInfoWrapperList, QuestionDTO.class));
+                }
+            }
+        }
+        return questionDTOList.stream().collect(Collectors.toMap(r -> r.getId(), r -> r));
+    }
+
+
+    public Map<Long, List<QuestionEntryDTO>> getByCaseEntryIdsFac(Map map) {
+        List<QuestionEntryDTO> questionEntryDTOList = this.getByCaseEntryIds(map);
+        return  EntityUtil.makeEntityListMap(questionEntryDTOList, "casesEntryId");
+    }
+}

+ 14 - 0
src/main/java/com/diagbot/facade/QcQuestionMappingFacade.java

@@ -0,0 +1,14 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.QcQuestionMappingServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zhoutg
+ * @Description:
+ * @date 2020-03-10 16:32
+ */
+@Component
+public class QcQuestionMappingFacade extends QcQuestionMappingServiceImpl {
+
+}

+ 15 - 0
src/main/java/com/diagbot/facade/QuestionVO.java

@@ -0,0 +1,15 @@
+package com.diagbot.facade;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2018/8/6 10:16
+ */
+@Getter
+@Setter
+public class QuestionVO {
+    private Long id;
+}

+ 206 - 0
src/main/java/com/diagbot/facade/SysRoleFacade.java

@@ -0,0 +1,206 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.diagbot.dto.SysMenuPermissionDTO;
+import com.diagbot.dto.SysPermissionDTO;
+import com.diagbot.dto.SysRoleDTO;
+import com.diagbot.dto.SysRoleMenuDTO;
+import com.diagbot.entity.SysRole;
+import com.diagbot.entity.SysRoleMenu;
+import com.diagbot.entity.SysRolePermission;
+import com.diagbot.entity.SysUserRole;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.SysRoleMenuServiceImpl;
+import com.diagbot.service.impl.SysRolePermissionServiceImpl;
+import com.diagbot.service.impl.SysRoleServiceImpl;
+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.SysMenuSaveVO;
+import com.diagbot.vo.SysPermissionSaveVO;
+import com.diagbot.vo.SysRoleMenuQueryVO;
+import com.diagbot.vo.SysRoleMenuSaveVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/27 10:13
+ */
+@Component
+public class SysRoleFacade extends SysRoleServiceImpl {
+    @Autowired
+    @Qualifier("sysRoleMenuServiceImpl")
+    private SysRoleMenuServiceImpl sysRoleMenuService;
+
+    @Autowired
+    @Qualifier("sysRolePermissionServiceImpl")
+    private SysRolePermissionServiceImpl sysRolePermissionService;
+
+    @Autowired
+    private SysUserRoleFacade sysUserRoleFacade;
+
+    @Autowired
+    private TokenFacade tokenFacade;
+
+    /**
+     * 获取角色列表信息
+     *
+     * @return 角色列表信息
+     */
+    public List<SysRoleDTO> listFac() {
+        List<SysRole> sysRoleList = this.list(new QueryWrapper<SysRole>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .gt("id", -1L)
+        );
+        return BeanUtil.listCopyTo(sysRoleList, SysRoleDTO.class);
+    }
+
+    /**
+     * 获取角色下拉列表信息
+     *
+     * @return 角色下拉列表信息
+     */
+    public List<SysRoleDTO> listForUser() {
+        List<SysRole> sysRoleList = this.list(new QueryWrapper<SysRole>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+        );
+        return BeanUtil.listCopyTo(sysRoleList, SysRoleDTO.class);
+    }
+
+    /**
+     * 获取角色菜权限单等数据
+     *
+     * @param sysRoleMenuQueryVO 获取角色菜权限单入参
+     * @return 是否成功
+     */
+    public List<SysRoleMenuDTO> getRoleMenu(SysRoleMenuQueryVO sysRoleMenuQueryVO) {
+        List<SysMenuPermissionDTO> sysMenuPermissionDTOList = this.getMenuPermission(sysRoleMenuQueryVO);
+        List<SysRoleMenuDTO> sysRoleMenuDTOList = new ArrayList<>();
+        List<Long> menuId = new ArrayList<>();
+        for (SysMenuPermissionDTO sysMenuPermissionDTO : sysMenuPermissionDTOList) {
+            if (!menuId.contains(sysMenuPermissionDTO.getMenuId())) {
+                menuId.add(sysMenuPermissionDTO.getMenuId());
+                SysRoleMenuDTO sysRoleMenuDTO = new SysRoleMenuDTO();
+                BeanUtil.copyProperties(sysMenuPermissionDTO, sysRoleMenuDTO);
+                sysRoleMenuDTOList.add(sysRoleMenuDTO);
+            }
+        }
+        Map<Long, List<SysMenuPermissionDTO>> menuPermissionMap = EntityUtil.makeEntityListMap(sysMenuPermissionDTOList, "menuId");
+        Map<Long, List<SysRoleMenuDTO>> menuMap = EntityUtil.makeEntityListMap(sysRoleMenuDTOList, "parentId");
+        List<SysRoleMenuDTO> menuRes = menuMap.get(-1L);
+        for (SysRoleMenuDTO bean : menuRes) {
+            getSonMenu(bean, menuMap, menuPermissionMap);
+        }
+        return menuRes;
+    }
+
+    /**
+     * 递归获取菜单结构
+     *
+     * @param menu              当前菜单
+     * @param menuMap           菜单集
+     * @param menuPermissionMap 菜单权限集
+     * @return 菜单结构
+     */
+    public void getSonMenu(SysRoleMenuDTO menu,
+                           Map<Long, List<SysRoleMenuDTO>> menuMap,
+                           Map<Long, List<SysMenuPermissionDTO>> menuPermissionMap) {
+        List<SysRoleMenuDTO> list = menuMap.get(menu.getMenuId());
+        List<SysMenuPermissionDTO> listPermission = menuPermissionMap.get(menu.getMenuId());
+        if (ListUtil.isNotEmpty(listPermission)) {
+            List<SysPermissionDTO> sysPermissionDTOList = new ArrayList<>();
+            for (SysMenuPermissionDTO sysMenuPermissionDTO : listPermission) {
+                if (null != sysMenuPermissionDTO.getPermissionId()) {
+                    SysPermissionDTO sysPermissionDTO = new SysPermissionDTO();
+                    BeanUtil.copyProperties(sysMenuPermissionDTO, sysPermissionDTO);
+                    sysPermissionDTO.setParentId(menu.getMenuId());
+                    sysPermissionDTOList.add(sysPermissionDTO);
+                }
+            }
+            menu.setSysPermissionDTOList(sysPermissionDTOList);
+        }
+        if (ListUtil.isNotEmpty(list)) {
+            menu.setSonMenuDTOList(list);
+            for (SysRoleMenuDTO bean : list) {
+                getSonMenu(bean, menuMap, menuPermissionMap);
+            }
+        }
+    }
+
+    /**
+     * 修改角色菜单权限数据
+     *
+     * @param sysRoleMenuSaveVO 修改角色菜单权限数据入参
+     * @return 是否成功
+     */
+    public Boolean saveRoleMenu(SysRoleMenuSaveVO sysRoleMenuSaveVO) {
+        Date now = DateUtil.now();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        //查询该角色的所有用户
+        List<Long> userIds = sysUserRoleFacade.list(new QueryWrapper<SysUserRole>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("role_id", sysRoleMenuSaveVO.getRoleId())
+        ).stream().distinct().map(SysUserRole::getUserId).collect(Collectors.toList());
+        //删除角色菜单和角色权限
+        sysRoleMenuService.update(new UpdateWrapper<SysRoleMenu>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("role_id", sysRoleMenuSaveVO.getRoleId())
+                .set("is_deleted", IsDeleteEnum.Y.getKey())
+                .set("modifier", userId)
+                .set("gmt_modified", now)
+        );
+        sysRolePermissionService.update(new UpdateWrapper<SysRolePermission>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("role_id", sysRoleMenuSaveVO.getRoleId())
+                .set("is_deleted", IsDeleteEnum.Y.getKey())
+                .set("modifier", userId)
+                .set("gmt_modified", now)
+        );
+        //新增角色菜单和角色权限
+        if (ListUtil.isNotEmpty(sysRoleMenuSaveVO.getSysMenuSaveVOList())) {
+            List<SysRoleMenu> sysRoleMenuList = new ArrayList<>();
+            for (SysMenuSaveVO sysMenuSaveVO : sysRoleMenuSaveVO.getSysMenuSaveVOList()) {
+                SysRoleMenu sysRoleMenu = new SysRoleMenu();
+                sysRoleMenu.setCreator(userId);
+                sysRoleMenu.setModifier(userId);
+                sysRoleMenu.setGmtCreate(now);
+                sysRoleMenu.setGmtModified(now);
+                sysRoleMenu.setRoleId(sysRoleMenuSaveVO.getRoleId());
+                sysRoleMenu.setMenuId(sysMenuSaveVO.getMenuId());
+                sysRoleMenuList.add(sysRoleMenu);
+            }
+            sysRoleMenuService.saveBatch(sysRoleMenuList);
+        }
+        if (ListUtil.isNotEmpty(sysRoleMenuSaveVO.getSysPermissionSaveVOList())) {
+            List<SysRolePermission> sysRolePermissionList = new ArrayList<>();
+            for (SysPermissionSaveVO sysPermissionSaveVO : sysRoleMenuSaveVO.getSysPermissionSaveVOList()) {
+                SysRolePermission sysRolePermission = new SysRolePermission();
+                sysRolePermission.setCreator(userId);
+                sysRolePermission.setModifier(userId);
+                sysRolePermission.setGmtCreate(now);
+                sysRolePermission.setGmtModified(now);
+                sysRolePermission.setRoleId(sysRoleMenuSaveVO.getRoleId());
+                sysRolePermission.setPermissionId(sysPermissionSaveVO.getPermissionId());
+                sysRolePermissionList.add(sysRolePermission);
+            }
+            sysRolePermissionService.saveBatch(sysRolePermissionList);
+        }
+        //清除该角色的所有用户的token缓存
+        if (ListUtil.isNotEmpty(userIds)) {
+            tokenFacade.deleteBatchToken(userIds);
+        }
+        return true;
+    }
+}

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

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.SysUserDeptServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/28 9:48
+ */
+@Component
+public class SysUserDeptFacade extends SysUserDeptServiceImpl {
+}

+ 302 - 4
src/main/java/com/diagbot/facade/SysUserFacade.java

@@ -1,21 +1,35 @@
 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.client.AuthServiceClient;
+import com.diagbot.dto.BasDeptInfoDTO;
 import com.diagbot.dto.BasHospitalInfoDTO;
 import com.diagbot.dto.JwtDTO;
 import com.diagbot.dto.LoginDTO;
+import com.diagbot.dto.SysRoleDTO;
+import com.diagbot.dto.SysUserDeptDTO;
+import com.diagbot.dto.SysUserPermissionDTO;
+import com.diagbot.dto.SysUserQueryDTO;
+import com.diagbot.dto.SysUserRoleDTO;
 import com.diagbot.dto.UserLoginDTO;
 import com.diagbot.entity.BasHospitalInfo;
 import com.diagbot.entity.JWT;
 import com.diagbot.entity.JwtStore;
 import com.diagbot.entity.SysUser;
+import com.diagbot.entity.SysUserDept;
+import com.diagbot.entity.SysUserHospital;
+import com.diagbot.entity.SysUserRole;
 import com.diagbot.entity.wrapper.SysMenuWrapper;
 import com.diagbot.enums.ConstantEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.StatusEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.exception.ServiceErrorCode;
+import com.diagbot.service.impl.SysUserDeptServiceImpl;
+import com.diagbot.service.impl.SysUserRoleServiceImpl;
 import com.diagbot.service.impl.SysUserServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
@@ -23,15 +37,24 @@ import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
+import com.diagbot.vo.BasDeptInfoVO;
+import com.diagbot.vo.SysUserBaseVO;
+import com.diagbot.vo.SysUserDeptVO;
+import com.diagbot.vo.SysUserQueryVO;
+import com.diagbot.vo.SysUserRoleVO;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.security.crypto.factory.PasswordEncoderFactories;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 用户业务层
@@ -53,6 +76,23 @@ public class SysUserFacade extends SysUserServiceImpl {
     @Autowired
     private BasHospitalInfoFacade basHospitalInfoFacade;
 
+    @Autowired
+    @Qualifier("sysUserRoleServiceImpl")
+    private SysUserRoleServiceImpl sysUserRoleService;
+
+    @Autowired
+    @Qualifier("sysUserDeptServiceImpl")
+    private SysUserDeptServiceImpl sysUserDeptService;
+
+    @Autowired
+    private BasDeptInfoFacade basDeptInfoFacade;
+
+    @Autowired
+    private SysRoleFacade sysRoleFacade;
+
+    @Autowired
+    private SysUserHospitalFacade sysUserHospitalFacade;
+
     /**
      * 获取jwt
      *
@@ -72,6 +112,7 @@ public class SysUserFacade extends SysUserServiceImpl {
         }
         QueryWrapper<SysUser> userQueryWrapper = new QueryWrapper<>();
         userQueryWrapper.eq("username", username)
+                .eq("status", StatusEnum.Enable.getKey())
                 .eq("is_deleted", IsDeleteEnum.N.getKey());
         SysUser user = this.getOne(userQueryWrapper, false);
         if (null == user) {
@@ -176,6 +217,7 @@ public class SysUserFacade extends SysUserServiceImpl {
         String userId = SysUserUtils.getCurrentPrincipleID();
         SysUser user = this.getOne(new QueryWrapper<SysUser>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("status", StatusEnum.Enable.getKey())
                 .eq("id", userId), false);
         if (null == user) {
             throw new CommonException(ServiceErrorCode.USER_NOT_FOUND);
@@ -204,7 +246,10 @@ public class SysUserFacade extends SysUserServiceImpl {
         LoginDTO data = new LoginDTO();
 
         Long userId = Long.parseLong(SysUserUtils.getCurrentPrincipleID());
-        SysUser user = this.getById(userId);
+        SysUser user = this.getOne(new QueryWrapper<SysUser>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("status", StatusEnum.Enable.getKey())
+                .eq("id", userId), false);
         if (user == null) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
                     "用户不存在【" + userId + "】");
@@ -227,10 +272,12 @@ public class SysUserFacade extends SysUserServiceImpl {
 
         //添加菜单信息
         List<SysMenuWrapper> menuList = sysMenuFacade.getByRole(user.getId());
+        List<SysUserPermissionDTO> sysUserPermissionDTOList = sysMenuFacade.getByRolePermission(user.getId());
         Map<Long, List<SysMenuWrapper>> menuMap = EntityUtil.makeEntityListMap(menuList, "parentId");
+        Map<Long, List<SysUserPermissionDTO>> menuPermissionMap = EntityUtil.makeEntityListMap(sysUserPermissionDTOList, "menuId");
         List<SysMenuWrapper> menuRes = menuMap.get(-1L);
         for (SysMenuWrapper bean : menuRes) {
-            getSonMenu(bean, menuMap);
+            getSonMenu(bean, menuMap, menuPermissionMap);
         }
         data.setMenuWrappers(menuRes);
         return data;
@@ -244,13 +291,19 @@ public class SysUserFacade extends SysUserServiceImpl {
      * @param menuMap 菜单集
      * @return 菜单结构
      */
-    public List<SysMenuWrapper> getSonMenu(SysMenuWrapper menu, Map<Long, List<SysMenuWrapper>> menuMap) {
+    public List<SysMenuWrapper> getSonMenu(SysMenuWrapper menu,
+                                           Map<Long, List<SysMenuWrapper>> menuMap,
+                                           Map<Long, List<SysUserPermissionDTO>> menuPermissionMap) {
         List<SysMenuWrapper> res = new ArrayList<>();
         List<SysMenuWrapper> list = menuMap.get(menu.getId());
+        List<SysUserPermissionDTO> listPermission = menuPermissionMap.get(menu.getId());
+        if (ListUtil.isNotEmpty(listPermission)) {
+            menu.setSysUserPermissionDTOList(listPermission);
+        }
         if (ListUtil.isNotEmpty(list)) {
             menu.setSubMenuList(list);
             for (SysMenuWrapper bean : list) {
-                getSonMenu(bean, menuMap);
+                getSonMenu(bean, menuMap, menuPermissionMap);
             }
         }
         return res;
@@ -282,5 +335,250 @@ public class SysUserFacade extends SysUserServiceImpl {
         return subMenu;
     }
 
+    //-------------用户维护BEGAIN------------------------
+
+    /**
+     * 用户列表翻页信息查询
+     *
+     * @param sysUserQueryVO 用户列表翻页信息入参
+     * @return 用户列表翻页信息
+     */
+    public IPage<SysUserQueryDTO> userPageFac(SysUserQueryVO sysUserQueryVO) {
+        sysUserQueryVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+        return this.userPage(sysUserQueryVO);
+    }
+
+    /**
+     * 获取用户科室
+     *
+     * @param sysUserBaseVO 获取用户科室入参
+     * @return 用户科室信息
+     */
+    public SysUserDeptDTO getUserDepts(SysUserBaseVO sysUserBaseVO) {
+        checkUser(sysUserBaseVO.getUserId());
+        SysUserDeptDTO sysUserDeptDTO = new SysUserDeptDTO();
+        sysUserDeptDTO.setUserId(sysUserBaseVO.getUserId());
+        BasDeptInfoVO basDeptInfoVO = new BasDeptInfoVO();
+        List<BasDeptInfoDTO> basDeptInfoDTOList = basDeptInfoFacade.listForUser(basDeptInfoVO);
+        List<SysUserDept> sysUserDeptList
+                = sysUserDeptService.list(new QueryWrapper<SysUserDept>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("user_id", sysUserBaseVO.getUserId())
+        );
+
+        if (ListUtil.isNotEmpty(sysUserDeptList)) {
+            List<BasDeptInfoDTO> notSelDepts = new ArrayList<>();
+            List<BasDeptInfoDTO> selDepts = new ArrayList<>();
+            Set<String> selDeptIds = sysUserDeptList.stream()
+                    .map(SysUserDept::getDeptId)
+                    .collect(Collectors.toSet());
+            for (BasDeptInfoDTO basDeptInfoDTO : basDeptInfoDTOList) {
+                if (selDeptIds.contains(basDeptInfoDTO.getDeptId())) {
+                    selDepts.add(basDeptInfoDTO);
+                } else {
+                    notSelDepts.add(basDeptInfoDTO);
+                }
+            }
+            sysUserDeptDTO.setNotSelDepts(notSelDepts);
+            sysUserDeptDTO.setSelDepts(selDepts);
+
+        } else {
+            sysUserDeptDTO.setNotSelDepts(basDeptInfoDTOList);
+        }
+
+        return sysUserDeptDTO;
+    }
+
+    /**
+     * 获取用户角色
+     *
+     * @param sysUserBaseVO 获取用户角色入参
+     * @return 用户角色信息
+     */
+    public SysUserRoleDTO getUserRoles(SysUserBaseVO sysUserBaseVO) {
+        checkUser(sysUserBaseVO.getUserId());
+        SysUserRoleDTO sysUserRoleDTO = new SysUserRoleDTO();
+        sysUserRoleDTO.setUserId(sysUserBaseVO.getUserId());
+        List<SysRoleDTO> sysRoleDTOList = sysRoleFacade.listForUser();
+        List<SysUserRole> sysUserRoleList
+                = sysUserRoleService.list(new QueryWrapper<SysUserRole>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("user_id", sysUserBaseVO.getUserId())
+        );
+
+        if (ListUtil.isNotEmpty(sysUserRoleList)) {
+            List<SysRoleDTO> notSelRoles = new ArrayList<>();
+            List<SysRoleDTO> selRoles = new ArrayList<>();
+            Set<Long> selRoleIds = sysUserRoleList.stream()
+                    .map(SysUserRole::getRoleId)
+                    .collect(Collectors.toSet());
+            for (SysRoleDTO sysRoleDTO : sysRoleDTOList) {
+                if (selRoleIds.contains(sysRoleDTO.getId())) {
+                    selRoles.add(sysRoleDTO);
+                } else {
+                    notSelRoles.add(sysRoleDTO);
+                }
+            }
+            sysUserRoleDTO.setNotSelRoles(notSelRoles);
+            sysUserRoleDTO.setSelRoles(selRoles);
+
+        } else {
+            sysUserRoleDTO.setNotSelRoles(sysRoleDTOList);
+        }
+
+        return sysUserRoleDTO;
+    }
+
+    /**
+     * 用户启用
+     *
+     * @param sysUserBaseVO 用户启用入参
+     * @return 是否成功
+     */
+    public Boolean enable(SysUserBaseVO sysUserBaseVO) {
+        checkUser(sysUserBaseVO.getUserId());
+        Date now = DateUtil.now();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        return this.update(new UpdateWrapper<SysUser>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id", sysUserBaseVO.getUserId())
+                .eq("status", StatusEnum.Disable.getKey())
+                .set("modifier", userId)
+                .set("gmt_modified", now)
+                .set("status", StatusEnum.Enable.getKey())
+        );
+    }
+
+    /**
+     * 用户停用
+     *
+     * @param sysUserBaseVO 用户停用入参
+     * @return 是否成功
+     */
+    public Boolean disable(SysUserBaseVO sysUserBaseVO) {
+        checkUser(sysUserBaseVO.getUserId());
+        Date now = DateUtil.now();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        Boolean res = this.update(new UpdateWrapper<SysUser>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id", sysUserBaseVO.getUserId())
+                .eq("status", StatusEnum.Enable.getKey())
+                .set("modifier", userId)
+                .set("gmt_modified", now)
+                .set("status", StatusEnum.Disable.getKey())
+        );
+        //删除Token
+        if (res) {
+            tokenFacade.deleteToken(sysUserBaseVO.getUserId().toString());
+        }
+
+        return res;
+    }
+
+    /**
+     * 编辑用户科室
+     *
+     * @param sysUserDeptVO 编辑用户科室入参
+     * @return 是否成功
+     */
+    public Boolean editUserDepts(SysUserDeptVO sysUserDeptVO) {
+        checkUser(sysUserDeptVO.getUserId());
+        Date now = DateUtil.now();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        //删除原科室
+        sysUserDeptService.update(new UpdateWrapper<SysUserDept>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("user_id", sysUserDeptVO.getUserId())
+                .set("is_deleted", IsDeleteEnum.Y.getKey())
+                .set("modifier", userId)
+                .set("gmt_modified", now)
+        );
+        //新增新科室
+        if (ListUtil.isNotEmpty(sysUserDeptVO.getDeptIds())) {
+            List<SysUserDept> sysUserDeptList = new ArrayList<>();
+            for (String deptId : sysUserDeptVO.getDeptIds()) {
+                SysUserDept sysUserDept = new SysUserDept();
+                sysUserDept.setUserId(sysUserDeptVO.getUserId());
+                sysUserDept.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
+                sysUserDept.setDeptId(deptId);
+                sysUserDept.setCreator(userId);
+                sysUserDept.setModifier(userId);
+                sysUserDept.setGmtCreate(now);
+                sysUserDept.setGmtModified(now);
+                sysUserDeptList.add(sysUserDept);
+            }
+            sysUserDeptService.saveBatch(sysUserDeptList);
+        }
+        //更新用户表
+        return this.update(new UpdateWrapper<SysUser>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id", sysUserDeptVO.getUserId())
+                .set("modifier", userId)
+                .set("gmt_modified", now)
+        );
+    }
+
+    /**
+     * 编辑用户角色
+     *
+     * @param sysUserRoleVO 编辑用户角色入参
+     * @return 是否成功
+     */
+    public Boolean editUserRoles(SysUserRoleVO sysUserRoleVO) {
+        checkUser(sysUserRoleVO.getUserId());
+        Date now = DateUtil.now();
+        String userId = SysUserUtils.getCurrentPrincipleID();
+        //删除原角色
+        sysUserRoleService.update(new UpdateWrapper<SysUserRole>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("user_id", sysUserRoleVO.getUserId())
+                .set("is_deleted", IsDeleteEnum.Y.getKey())
+                .set("modifier", userId)
+                .set("gmt_modified", now)
+        );
+        //新增角色
+        if (ListUtil.isNotEmpty(sysUserRoleVO.getRoleIds())) {
+            List<SysUserRole> sysUserRoleList = new ArrayList<>();
+            for (Long roleId : sysUserRoleVO.getRoleIds()) {
+                SysUserRole sysUserRole = new SysUserRole();
+                sysUserRole.setUserId(sysUserRoleVO.getUserId());
+                sysUserRole.setRoleId(roleId);
+                sysUserRole.setCreator(userId);
+                sysUserRole.setModifier(userId);
+                sysUserRole.setGmtCreate(now);
+                sysUserRole.setGmtModified(now);
+                sysUserRoleList.add(sysUserRole);
+            }
+            sysUserRoleService.saveBatch(sysUserRoleList);
+        }
+        //更新用户表
+        this.update(new UpdateWrapper<SysUser>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id", sysUserRoleVO.getUserId())
+                .set("modifier", userId)
+                .set("gmt_modified", now)
+        );
+        //删除Token
+        tokenFacade.deleteToken(sysUserRoleVO.getUserId().toString());
+        return true;
+    }
+
+    /**
+     * 确认用户是否是管理员下的用户
+     *
+     * @param userId 用户Id
+     */
+    private void checkUser(Long userId) {
+        //确认用户是否是管理员统一医院下的用户
+        Integer cnt = sysUserHospitalFacade.count(new QueryWrapper<SysUserHospital>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("user_id", userId)
+                .eq("hospital_id", SysUserUtils.getCurrentHospitalID())
+        );
+        if (cnt < 1) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "该医院下无该用户");
+        }
+    }
+    //-------------用户维护END---------------------------
 
 }

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

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.SysUserHospitalServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/28 15:03
+ */
+@Component
+public class SysUserHospitalFacade extends SysUserHospitalServiceImpl {
+}

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

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.SysUserRoleServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/28 9:48
+ */
+@Component
+public class SysUserRoleFacade extends SysUserRoleServiceImpl {
+}

+ 32 - 0
src/main/java/com/diagbot/mapper/BasDeptInfoMapper.java

@@ -0,0 +1,32 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.BasDeptInfoDTO;
+import com.diagbot.dto.DeptBaseDTO;
+import com.diagbot.entity.BasDeptInfo;
+import com.diagbot.vo.BasDeptInfoVO;
+import com.diagbot.vo.FilterByDeptVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 医院科室信息 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public interface BasDeptInfoMapper extends BaseMapper<BasDeptInfo> {
+    List<BasDeptInfoDTO> getList(BasDeptInfoVO basDeptInfoVO);
+
+    List<BasDeptInfoDTO> getListUser(BasDeptInfoVO basDeptInfoVO);
+
+    /**
+     * 查询用户关联科室
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    List<DeptBaseDTO> getDeptByUser(FilterByDeptVO filterByDeptVO);
+}

+ 44 - 5
src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java

@@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.MsgDTO;
-import com.diagbot.dto.ResultDetailDTO;
+import com.diagbot.dto.NumDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.FilterByDeptVO;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.HPFilterByDeptVO;
+import com.diagbot.vo.HomePageFilterVO;
 
 import java.util.List;
 
@@ -32,7 +35,7 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @param filterVO
      * @return
      */
-    public List<ResultDetailDTO> resultStatistics(FilterVO filterVO);
+    public List<NumDTO> resultStatistics(FilterVO filterVO);
 
     /**
      * 各科室缺陷占比
@@ -40,7 +43,7 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @param filterVO
      * @return
      */
-    public List<ResultDetailDTO> resultStatisticsByDept(FilterVO filterVO);
+    public List<NumDTO> resultStatisticsByDept(FilterVO filterVO);
 
     /**
      * 缺陷排行列表统计-百分比未计算
@@ -48,7 +51,7 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @param filterVO
      * @return
      */
-    public List<ResultDetailDTO> resultStatistics2(FilterVO filterVO);
+    public List<NumDTO> resultStatistics2(FilterVO filterVO);
 
     /**
      * 各科室缺陷占比-百分比未计算
@@ -56,7 +59,7 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @param filterVO
      * @return
      */
-    public List<ResultDetailDTO> resultStatisticsByDept2(FilterVO filterVO);
+    public List<NumDTO> resultStatisticsByDept2(FilterVO filterVO);
 
     /**
      * 缺陷总数
@@ -68,4 +71,40 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
 
 
     public List<BehospitalInfo> getNoGrade();
+
+    IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO);
+
+    IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO);
+
+    /**
+     * 病案首页相关病历数统计
+     *
+     * @param homePageFilterVO
+     * @return
+     */
+    public int homePageCount(HomePageFilterVO homePageFilterVO);
+
+    /**
+     * 手术病历数统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public int homePageCountForOperation(FilterVO filterVO);
+
+    /**
+     * 按科室统计病案首页病历数
+     *
+     * @param hpFilterByDeptVO
+     * @return
+     */
+    public List<NumDTO> homePageCountByDept(HPFilterByDeptVO hpFilterByDeptVO);
+
+    /**
+     * 按科室统计病案首页手术病历数
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    public List<NumDTO> homePageCountForOperationByDept(FilterByDeptVO filterByDeptVO);
 }

+ 8 - 0
src/main/java/com/diagbot/mapper/QcCasesMapper.java

@@ -1,6 +1,7 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcCasesDTO;
 import com.diagbot.entity.QcCases;
 import com.diagbot.vo.QcCasesQueryVO;
@@ -17,4 +18,11 @@ import java.util.List;
  */
 public interface QcCasesMapper extends BaseMapper<QcCases> {
     List<QcCasesDTO> getQcCases(QcCasesQueryVO queryVO);
+
+    /**
+     * 按模块统计条目数
+     *
+     * @return
+     */
+    List<NumDTO> entryGroupByCase();
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.QcModuleDetail;
+
+/**
+ * <p>
+ * 模型明细表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+public interface QcModuleDetailMapper extends BaseMapper<QcModuleDetail> {
+
+}

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

@@ -0,0 +1,19 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.GetModuleInfoOneDTO;
+import com.diagbot.entity.QcModuleInfo;
+import com.diagbot.vo.GetModuleInfoOneVO;
+
+/**
+ * <p>
+ * 模型表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+public interface QcModuleInfoMapper extends BaseMapper<QcModuleInfo> {
+
+    public GetModuleInfoOneDTO getById(GetModuleInfoOneVO getModuleInfoOneVO);
+}

+ 25 - 0
src/main/java/com/diagbot/mapper/QcQuestionInfoMapper.java

@@ -0,0 +1,25 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.QuestionEntryDTO;
+import com.diagbot.entity.QcQuestionInfo;
+import com.diagbot.entity.wrapper.QuestionInfoWrapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签基础表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+public interface QcQuestionInfoMapper extends BaseMapper<QcQuestionInfo> {
+
+    public List<QuestionInfoWrapper> getByQuestionMapping(Map map);
+
+    public List<QuestionEntryDTO> getByCaseEntryIds(Map map);
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.QcQuestionMapping;
+
+/**
+ * <p>
+ * 标签映射表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+public interface QcQuestionMappingMapper extends BaseMapper<QcQuestionMapping> {
+
+}

+ 74 - 1
src/main/java/com/diagbot/mapper/QcresultInfoMapper.java

@@ -1,9 +1,18 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.AverageStatisticsDTO;
+import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.NumDTO;
+import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
+import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.QcresultFilterByDeptVO;
 import com.diagbot.vo.QcresultFilterVO;
 
+import java.util.List;
+
 /**
  * <p>
  * 质控评分结果信息
@@ -22,4 +31,68 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
      * @return
      */
     public int getQcresultSelectively(QcresultFilterVO qcresultFilterVO);
-}
+
+    /**
+     * 质控病历数统计
+     *
+     * @param qcresultFilterVO
+     * @return
+     */
+    public int resultCount(QcresultFilterVO qcresultFilterVO);
+
+    /**
+     * 按科室统计各等级病历百分比
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<QcResultPercentDTO> levelPercentGroupByDept(FilterVO filterVO);
+
+    /**
+     * 按模块统计缺陷数
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> entryCountGroupByCase(FilterVO filterVO);
+
+    /**
+     * 条目缺陷分组统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> entryCountGroupByEntry(FilterVO filterVO);
+
+    /**
+     * 质控平均分按科室统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<AverageStatisticsDTO> getAverageScoreByDept(FilterVO filterVO);
+
+    /**
+     * 按科室统计质控病历数
+     *
+     * @param qcresultFilterByDeptVO
+     * @return
+     */
+    public List<NumDTO> resultCountByDept(QcresultFilterByDeptVO qcresultFilterByDeptVO);
+
+    /**
+     * 各模块缺陷占比-按科室
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    public List<DeptNumDTO> entryCountGroupByCaseAndDept(FilterByDeptVO filterByDeptVO);
+
+    /**
+     * 条目缺陷占比-按科室
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO);
+}

+ 3 - 0
src/main/java/com/diagbot/mapper/SysMenuMapper.java

@@ -1,5 +1,6 @@
 package com.diagbot.mapper;
 
+import com.diagbot.dto.SysUserPermissionDTO;
 import com.diagbot.entity.SysMenu;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.diagbot.entity.wrapper.SysMenuWrapper;
@@ -29,4 +30,6 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
      * @Date: 2018/9/14 13:59
      */
     public List<SysMenuWrapper> getSubMenuById(Long id);
+
+    public List<SysUserPermissionDTO> getByRolePermission(Long userId);
 }

+ 21 - 0
src/main/java/com/diagbot/mapper/SysRoleMapper.java

@@ -0,0 +1,21 @@
+package com.diagbot.mapper;
+
+import com.diagbot.dto.SysMenuPermissionDTO;
+import com.diagbot.dto.SysRoleMenuDTO;
+import com.diagbot.entity.SysRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.vo.SysRoleMenuQueryVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 系统角色表 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public interface SysRoleMapper extends BaseMapper<SysRole> {
+    List<SysMenuPermissionDTO> getMenuPermission(SysRoleMenuQueryVO sysRoleMenuQueryVO);
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.SysRoleMenu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 角色和菜单的映射表 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.SysRolePermission;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 角色和资源的映射表 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public interface SysRolePermissionMapper extends BaseMapper<SysRolePermission> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.SysUserDept;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 用户-医院科室映射表 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-28
+ */
+public interface SysUserDeptMapper extends BaseMapper<SysUserDept> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.SysUserHospital;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 用户-机构表映射表 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-28
+ */
+public interface SysUserHospitalMapper extends BaseMapper<SysUserHospital> {
+
+}

+ 5 - 2
src/main/java/com/diagbot/mapper/SysUserMapper.java

@@ -1,7 +1,10 @@
 package com.diagbot.mapper;
 
-import com.diagbot.entity.SysUser;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.SysUserQueryDTO;
+import com.diagbot.entity.SysUser;
+import com.diagbot.vo.SysUserQueryVO;
 
 /**
  * <p>
@@ -12,5 +15,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2020-04-09
  */
 public interface SysUserMapper extends BaseMapper<SysUser> {
-
+    IPage<SysUserQueryDTO> userPage(SysUserQueryVO sysUserQueryVO);
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.SysUserRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 系统用户角色关联表 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-28
+ */
+public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
+
+}

+ 32 - 0
src/main/java/com/diagbot/service/BasDeptInfoService.java

@@ -0,0 +1,32 @@
+package com.diagbot.service;
+
+import com.diagbot.dto.BasDeptInfoDTO;
+import com.diagbot.dto.DeptBaseDTO;
+import com.diagbot.entity.BasDeptInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.BasDeptInfoVO;
+import com.diagbot.vo.FilterByDeptVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 医院科室信息 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public interface BasDeptInfoService extends IService<BasDeptInfo> {
+    List<BasDeptInfoDTO> getList(BasDeptInfoVO basDeptInfoVO);
+
+    List<BasDeptInfoDTO> getListUser(BasDeptInfoVO basDeptInfoVO);
+
+    /**
+     * 查询用户关联科室
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    List<DeptBaseDTO> getDeptByUser(FilterByDeptVO filterByDeptVO);
+}

+ 45 - 6
src/main/java/com/diagbot/service/BehospitalInfoService.java

@@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.MsgDTO;
-import com.diagbot.dto.ResultDetailDTO;
+import com.diagbot.dto.NumDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
+import com.diagbot.vo.FilterByDeptVO;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.HPFilterByDeptVO;
+import com.diagbot.vo.HomePageFilterVO;
 
 import java.util.List;
 
@@ -32,7 +35,7 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @param filterVO
      * @return
      */
-    public List<ResultDetailDTO> resultStatistics(FilterVO filterVO);
+    public List<NumDTO> resultStatistics(FilterVO filterVO);
 
     /**
      * 各科室缺陷占比
@@ -40,7 +43,7 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @param filterVO
      * @return
      */
-    public List<ResultDetailDTO> resultStatisticsByDept(FilterVO filterVO);
+    public List<NumDTO> resultStatisticsByDept(FilterVO filterVO);
 
     /**
      * 缺陷排行列表统计-百分比未计算
@@ -48,7 +51,7 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @param filterVO
      * @return
      */
-    public List<ResultDetailDTO> resultStatistics2(FilterVO filterVO);
+    public List<NumDTO> resultStatistics2(FilterVO filterVO);
 
     /**
      * 各科室缺陷占比-百分比未计算
@@ -56,7 +59,7 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @param filterVO
      * @return
      */
-    public List<ResultDetailDTO> resultStatisticsByDept2(FilterVO filterVO);
+    public List<NumDTO> resultStatisticsByDept2(FilterVO filterVO);
 
     /**
      * 缺陷总数
@@ -68,4 +71,40 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
 
 
     public List<BehospitalInfo> getNoGrade();
-}
+
+    IPage<BehospitalInfoDTO> getPageByDept(BehospitalPageVO behospitalPageVO);
+
+    IPage<BehospitalInfoDTO> getPageByPerson(BehospitalPageVO behospitalPageVO);
+
+    /**
+     * 病案首页相关病历数统计
+     *
+     * @param homePageFilterVO
+     * @return
+     */
+    public int homePageCount(HomePageFilterVO homePageFilterVO);
+
+    /**
+     * 手术病历数统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public int homePageCountForOperation(FilterVO filterVO);
+
+    /**
+     * 按科室统计病案首页病历数
+     *
+     * @param hpFilterByDeptVO
+     * @return
+     */
+    public List<NumDTO> homePageCountByDept(HPFilterByDeptVO hpFilterByDeptVO);
+
+    /**
+     * 按科室统计病案首页手术病历数
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    public List<NumDTO> homePageCountForOperationByDept(FilterByDeptVO filterByDeptVO);
+}

+ 9 - 1
src/main/java/com/diagbot/service/QcCasesService.java

@@ -1,6 +1,7 @@
 package com.diagbot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcCasesDTO;
 import com.diagbot.entity.QcCases;
 import com.diagbot.vo.QcCasesQueryVO;
@@ -17,4 +18,11 @@ import java.util.List;
  */
 public interface QcCasesService extends IService<QcCases> {
     List<QcCasesDTO> getQcCases(QcCasesQueryVO queryVO);
-}
+
+    /**
+     * 按模块统计条目数
+     *
+     * @return
+     */
+    List<NumDTO> entryGroupByCase();
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.QcModuleDetail;
+
+/**
+ * <p>
+ * 模型明细表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+public interface QcModuleDetailService extends IService<QcModuleDetail> {
+
+}

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

@@ -0,0 +1,19 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.GetModuleInfoOneDTO;
+import com.diagbot.entity.QcModuleInfo;
+import com.diagbot.vo.GetModuleInfoOneVO;
+
+/**
+ * <p>
+ * 模型表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+public interface QcModuleInfoService extends IService<QcModuleInfo> {
+
+    public GetModuleInfoOneDTO getById(GetModuleInfoOneVO getModuleInfoOneVO);
+}

+ 30 - 0
src/main/java/com/diagbot/service/QcQuestionInfoService.java

@@ -0,0 +1,30 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.QuestionEntryDTO;
+import com.diagbot.entity.QcQuestionInfo;
+import com.diagbot.entity.wrapper.QuestionInfoWrapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签基础表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+public interface QcQuestionInfoService extends IService<QcQuestionInfo> {
+
+    /**
+     * 根据questionMapping获取标签信息
+     *
+     * @param map 参数
+     * @return
+     */
+    public List<QuestionInfoWrapper> getByQuestionMapping(Map map);
+
+    public List<QuestionEntryDTO> getByCaseEntryIds(Map map);
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.QcQuestionMapping;
+
+/**
+ * <p>
+ * 标签映射表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-27
+ */
+public interface QcQuestionMappingService extends IService<QcQuestionMapping> {
+
+}

+ 75 - 1
src/main/java/com/diagbot/service/QcresultInfoService.java

@@ -1,9 +1,18 @@
 package com.diagbot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.AverageStatisticsDTO;
+import com.diagbot.dto.DeptNumDTO;
+import com.diagbot.dto.NumDTO;
+import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
+import com.diagbot.vo.FilterByDeptVO;
+import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.QcresultFilterByDeptVO;
 import com.diagbot.vo.QcresultFilterVO;
 
+import java.util.List;
+
 /**
  * <p>
  * 质控评分结果信息
@@ -22,4 +31,69 @@ public interface QcresultInfoService extends IService<QcresultInfo> {
      * @return
      */
     public int getQcresultSelectively(QcresultFilterVO qcresultFilterVO);
-}
+
+    /**
+     * 质控病历数统计
+     *
+     * @param qcresultFilterVO
+     * @return
+     */
+    public int resultCount(QcresultFilterVO qcresultFilterVO);
+
+
+    /**
+     * 按科室统计各等级病历百分比
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<QcResultPercentDTO> levelPercentGroupByDept(FilterVO filterVO);
+
+    /**
+     * 按模块统计缺陷数
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> entryCountGroupByCase(FilterVO filterVO);
+
+    /**
+     * 条目缺陷分组统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<NumDTO> entryCountGroupByEntry(FilterVO filterVO);
+
+    /**
+     * 质控平均分按科室统计
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<AverageStatisticsDTO> getAverageScoreByDept(FilterVO filterVO);
+
+    /**
+     * 按科室统计质控病历数
+     *
+     * @param qcresultFilterByDeptVO
+     * @return
+     */
+    public List<NumDTO> resultCountByDept(QcresultFilterByDeptVO qcresultFilterByDeptVO);
+
+    /**
+     * 各模块缺陷占比-按科室
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    public List<DeptNumDTO> entryCountGroupByCaseAndDept(FilterByDeptVO filterByDeptVO);
+
+    /**
+     * 条目缺陷占比-按科室
+     *
+     * @param filterByDeptVO
+     * @return
+     */
+    public List<DeptNumDTO> entryCountGroupByEntryAndDept(FilterByDeptVO filterByDeptVO);
+}

+ 3 - 0
src/main/java/com/diagbot/service/SysMenuService.java

@@ -1,5 +1,6 @@
 package com.diagbot.service;
 
+import com.diagbot.dto.SysUserPermissionDTO;
 import com.diagbot.entity.SysMenu;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.diagbot.entity.wrapper.SysMenuWrapper;
@@ -30,4 +31,6 @@ public interface SysMenuService extends IService<SysMenu> {
      * @Date: 2018/9/17 15:44
      */
     public List<SysMenuWrapper> getSubMenuById(Long id);
+
+    public List<SysUserPermissionDTO> getByRolePermission(Long userId);
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.SysRoleMenu;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 角色和菜单的映射表 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public interface SysRoleMenuService extends IService<SysRoleMenu> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.SysRolePermission;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 角色和资源的映射表 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public interface SysRolePermissionService extends IService<SysRolePermission> {
+
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.service;
+
+import com.diagbot.dto.SysMenuPermissionDTO;
+import com.diagbot.entity.SysRole;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.SysRoleMenuQueryVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 系统角色表 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-27
+ */
+public interface SysRoleService extends IService<SysRole> {
+    List<SysMenuPermissionDTO> getMenuPermission(SysRoleMenuQueryVO sysRoleMenuQueryVO);
+}

+ 12 - 1
src/main/java/com/diagbot/service/SysTokenService.java

@@ -2,6 +2,8 @@ package com.diagbot.service;
 
 import com.diagbot.entity.JwtStore;
 
+import java.util.List;
+
 /**
  * @Description: Token验证类
  * @author: gaodm
@@ -27,9 +29,18 @@ public interface SysTokenService {
     Boolean verifyToken(String token, Integer type);
 
     /**
-     *  删除用户token
+     * 删除用户token
+     *
      * @param userId 用户ID
      * @return 删除是否成功
      */
     Boolean deleteToken(String userId);
+
+    /**
+     * 批量删除用户token
+     *
+     * @param userIds 用户列表
+     * @return 删除是否成功
+     */
+    Boolean deleteBatchToken(List<Long> userIds);
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.SysUserDept;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 用户-医院科室映射表 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-28
+ */
+public interface SysUserDeptService extends IService<SysUserDept> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.SysUserHospital;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 用户-机构表映射表 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-28
+ */
+public interface SysUserHospitalService extends IService<SysUserHospital> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.SysUserRole;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 系统用户角色关联表 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-28
+ */
+public interface SysUserRoleService extends IService<SysUserRole> {
+
+}

+ 4 - 1
src/main/java/com/diagbot/service/SysUserService.java

@@ -1,7 +1,10 @@
 package com.diagbot.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.SysUserQueryDTO;
 import com.diagbot.entity.SysUser;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.SysUserQueryVO;
 
 /**
  * <p>
@@ -12,5 +15,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2020-04-09
  */
 public interface SysUserService extends IService<SysUser> {
-
+    IPage<SysUserQueryDTO> userPage(SysUserQueryVO sysUserQueryVO);
 }

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


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä