Jelajahi Sumber

Merge remote-tracking branch 'origin/dev/20200426_2nd' into debug

zhaops 5 tahun lalu
induk
melakukan
329e8800b7

+ 145 - 14
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,15 @@ 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.Date;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
 /**
- * @Description:
+ * @Description:平均值相关统计
  * @Author:zhaops
  * @time: 2020/4/23 14:11
  */
@@ -26,20 +33,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;
     }
 
@@ -53,13 +69,43 @@ public class AverageStatisticsAggregate {
     public List<AverageStatisticsDTO> getAverageDayNum(@InvokeParameter("filterVO") FilterVO filterVO) {
         List<AverageStatisticsDTO> retAverageDayNumList = Lists.newLinkedList();
         List<AverageStatisticsDTO> averageDayNumList = homePageFacade.getAverageDayNum(filterVO);
-        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
-            filterVO.setLimitCount(10);
+
+        //上月、去年
+        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");
+
+        averageDayNumList.forEach(item -> {
+            if (lastMap.containsKey(item.getName())) {
+                item.setLastAverageValue(lastMap.get(item.getName()));
+            }
+            if (lastYearMap.containsKey(item.getName())) {
+                item.setLastYearAverageValue(lastYearMap.get(item.getName()));
+            }
+        });
+        if (averageDayNumList.size() <= 10) {
+            retAverageDayNumList = averageDayNumList;
+        } else {
+            retAverageDayNumList = averageDayNumList.subList(0, 10);
         }
         return retAverageDayNumList;
     }
@@ -74,14 +120,99 @@ public class AverageStatisticsAggregate {
     public List<AverageStatisticsDTO> getAverageFee(@InvokeParameter("filterVO") FilterVO filterVO) {
         List<AverageStatisticsDTO> retAverageFeeList = Lists.newLinkedList();
         List<AverageStatisticsDTO> averageFeeList = homePageFacade.getAverageFee(filterVO);
+        //上月、去年
+        String startDate = filterFacade.getLastStartDateStr(filterVO.getType());
+        String endDate = filterFacade.getLastEndDateStr(filterVO.getType());
+        filterVO.setStartDate(startDate);
+        filterVO.setEndDate(endDate);
+        List<AverageStatisticsDTO> lastAverageFeeList = homePageFacade.getAverageDayNum(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);
+        }
+        //按年统计,同比环比相同
+        List<AverageStatisticsDTO> lastYearAverageFeeList = homePageFacade.getAverageDayNum(filterVO);
+
+        Map<String, Double> lastYearMap
+                = EntityUtil.makeMapWithKeyValue(lastYearAverageFeeList, "name", "averageValue");
+
+        averageFeeList.forEach(item -> {
+            if (lastMap.containsKey(item.getName())) {
+                item.setLastAverageValue(lastMap.get(item.getName()));
+            }
+            if (lastYearMap.containsKey(item.getName())) {
+                item.setLastYearAverageValue(lastYearMap.get(item.getName()));
+            }
+        });
+        if (averageFeeList.size() <= 10) {
+            retAverageFeeList = averageFeeList;
+        } else {
+            retAverageFeeList = averageFeeList.subList(0, 10);
+        }
+        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);
         if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
             filterVO.setLimitCount(10);
         }
         Integer limitCount = filterVO.getLimitCount();
-        //平均住院费用
-        if (ListUtil.isNotEmpty(averageFeeList)) {
-            retAverageFeeList = consoleFacade.getLimitAverageList(averageFeeList, limitCount);
+        //质控平均分
+        if (ListUtil.isNotEmpty(averageScoreList)) {
+            retAverageScoreList = getLimitAverageList(averageScoreList, limitCount);
         }
-        return retAverageFeeList;
+        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;
     }
 }

+ 0 - 107
src/main/java/com/diagbot/aggregate/DeptStatisticsAggregate.java

@@ -1,107 +0,0 @@
-package com.diagbot.aggregate;
-
-import com.diagbot.dto.QcResultPercentDTO;
-import com.diagbot.dto.ResultDetailDTO;
-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.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 DeptStatisticsAggregate {
-    @Autowired
-    private BehospitalInfoFacade behospitalInfoFacade;
-    @Autowired
-    private QcresultInfoFacade qcresultInfoFacade;
-
-    @DataProvider("setAllDept")
-    public Map<String, Object> setAllDept(
-            @InvokeParameter("filterVO") FilterVO filterVO,
-            @DataConsumer("getLevelResultDept") List<QcResultPercentDTO> levelResults,
-            @DataConsumer("getResultDept") List<ResultDetailDTO> results) {
-        Map<String, Object> retMap = new LinkedHashMap<>();
-        if (ListUtil.isNotEmpty(levelResults)) {
-            retMap.put("各科室甲级病历占比", levelResults);
-        }
-        if (ListUtil.isNotEmpty(results)) {
-            retMap.put("各科室缺陷占比", results);
-        }
-        return retMap;
-    }
-
-    @DataProvider("getLevelResultDept")
-    public List<QcResultPercentDTO> getLevelResultDept(@InvokeParameter("filterVO") FilterVO filterVO) {
-        List<QcResultPercentDTO> qcResultPercentList = qcresultInfoFacade.levelPercentGroupByDept(filterVO);
-        qcResultPercentList = qcResultPercentList.stream().limit(10).collect(Collectors.toList());
-        return qcResultPercentList;
-    }
-
-
-    @DataProvider("getResultDept")
-    public List<ResultDetailDTO> getResultDept(@InvokeParameter("filterVO") FilterVO filterVO) {
-        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept2(filterVO);
-        if (ListUtil.isNotEmpty(results2)) {
-            int totle = results2
-                    .stream()
-                    .map(ResultDetailDTO::getNum)
-                    .reduce(0, Integer::sum);
-            results2.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() <= 10) {
-                retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
-            } else {
-
-                Double rate = 0d;
-                Integer num = 0;
-                for (ResultDetailDTO result : results2) {
-                    if (retResults.size() < 9) {
-                        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);
-            });
-            return retResults;
-        }
-        return null;
-    }
-}

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

@@ -0,0 +1,164 @@
+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);
+        qcResultPercentList = qcResultPercentList.stream().limit(10).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);
+        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;
+    }
+}

+ 141 - 39
src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java

@@ -34,60 +34,42 @@ import java.util.stream.Collectors;
  */
 @Component
 public class ResultStatisticsAggregate {
-    @Autowired
-    private BehospitalInfoFacade behospitalInfoFacade;
     @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("entryCountGroupByCase") List<NumDTO> entryNums) {
+            @DataConsumer("getResultDept") List<ResultDetailDTO> results,
+            @DataConsumer("entryCountGroupByEntry") List<NumDTO> entryList,
+            @DataConsumer("entryCountGroupByCase") List<NumDTO> caseList) {
         Map<String, Object> retMap = new LinkedHashMap<>();
-        if (ListUtil.isNotEmpty(entryNums)) {
-            retMap.put("各模块缺陷占比排行", entryNums);
-        }
+        retMap.put("各科室缺陷占比", Lists.newLinkedList());
+        retMap.put("各模块缺陷占比排行", Lists.newLinkedList());
+        retMap.put("条目缺陷占比", Lists.newLinkedList());
         if (ListUtil.isNotEmpty(results)) {
-            retMap.put("条目缺陷占比", results);
+            retMap.put("各科室缺陷占比", results);
         }
-        return retMap;
-    }
-
-    @DataProvider("getResult")
-    public List<ResultDetailDTO> getResult(@InvokeParameter("filterVO") FilterVO filterVO) {
-        List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics2(filterVO);
-
-        if (ListUtil.isNotEmpty(results)) {
-            int totle = results
-                    .stream()
-                    .map(ResultDetailDTO::getNum)
-                    .reduce(0, Integer::sum);
-            List<ResultDetailDTO> retResutls = Lists.newLinkedList();
-            results.forEach(result -> {
-                Double percent = BigDecimal.valueOf(result.getNum())
-                        .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
-                        .doubleValue();
-                result.setPercent(percent);
-                DecimalFormat df = new DecimalFormat("#0.00");
-                String percentStr
-                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
-                result.setPercentStr(percentStr);
-                //top9+其他
-                if (retResutls.size() < 10) {
-                    retResutls.add(result);
-                } else {
-                }
-
-            });
-            return retResutls;
+        if (ListUtil.isNotEmpty(caseList)) {
+            retMap.put("各模块缺陷占比排行", caseList);
+        }
+        if (ListUtil.isNotEmpty(entryList)) {
+            retMap.put("条目缺陷占比", entryList);
         }
 
-        return null;
+        return retMap;
     }
 
+    /**
+     * 各模块缺陷占比排行
+     *
+     * @param filterVO
+     * @return
+     */
     @DataProvider("entryCountGroupByCase")
     public List<NumDTO> entryCountGroupByCase(@InvokeParameter("filterVO") FilterVO filterVO) {
         QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
@@ -142,4 +124,124 @@ public class ResultStatisticsAggregate {
 
         return standardEntryNumList;
     }
+
+    /**
+     * 条目缺陷占比
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("entryCountGroupByEntry")
+    public List<NumDTO> entryCountGroupByEntry(@InvokeParameter("filterVO") FilterVO filterVO) {
+        DecimalFormat df = new DecimalFormat("#0.00");
+        List<NumDTO> numDTOList = qcresultInfoFacade.entryCountGroupByEntry(filterVO);
+        if (ListUtil.isNotEmpty(numDTOList)) {
+            int totle = numDTOList
+                    .stream()
+                    .map(NumDTO::getNum)
+                    .reduce(0, Integer::sum);
+            List<NumDTO> retList = Lists.newLinkedList();
+            numDTOList.forEach(numDTO -> {
+                Double percent = BigDecimal.valueOf(numDTO.getNum())
+                        .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                numDTO.setPercent(percent);
+                String percentStr
+                        = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                numDTO.setPercentStr(percentStr);
+            });
+
+            //降序排序
+            Collections.sort(numDTOList, new Comparator<NumDTO>() {
+                @Override
+                public int compare(NumDTO o1, NumDTO o2) {
+                    return o2.getPercent().compareTo(o1.getPercent());
+                }
+            });
+
+            //top9+其他
+            if (numDTOList.size() <= 10) {
+                retList.addAll(numDTOList);
+            } else {
+                int count = 0;
+                for (NumDTO numDTO : numDTOList) {
+                    if (retList.size() < 10) {
+                        retList.add(numDTO);
+                        count += numDTO.getNum();
+                    } else {
+                        NumDTO otherNumDTO = new NumDTO();
+                        int num = totle - count;
+                        otherNumDTO.setName("其他");
+                        otherNumDTO.setNum(num);
+                        otherNumDTO.setTotleNum(totle);
+                        Double percent = BigDecimal.valueOf(numDTO.getNum())
+                                .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
+                                .doubleValue();
+                        otherNumDTO.setPercent(percent);
+                        String percentStr
+                                = df.format(BigDecimal.valueOf(percent).multiply(BigDecimal.valueOf(100))) + "%";
+                        otherNumDTO.setPercentStr(percentStr);
+                        retList.add(otherNumDTO);
+                        break;
+                    }
+                }
+            }
+            return retList;
+        }
+        return null;
+    }
+
+    /**
+     * 各科室缺陷占比
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("getResultDept")
+    public List<ResultDetailDTO> getResultDept(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept2(filterVO);
+        if (ListUtil.isNotEmpty(results2)) {
+            int totle = results2
+                    .stream()
+                    .map(ResultDetailDTO::getNum)
+                    .reduce(0, Integer::sum);
+            results2.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() <= 10) {
+                retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
+            } else {
+
+                Double rate = 0d;
+                Integer num = 0;
+                for (ResultDetailDTO result : results2) {
+                    if (retResults.size() < 9) {
+                        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);
+            });
+            return retResults;
+        }
+        return null;
+    }
 }

+ 6 - 2
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 lastAverageValue;
+    //同比平均值
+    private Double lastYearAverageValue;
 }

+ 8 - 239
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -1,27 +1,16 @@
 package com.diagbot.facade;
 
-import com.diagbot.dto.AverageStatisticsDTO;
-import com.diagbot.dto.NumDTO;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
-import com.diagbot.util.BeanUtil;
-import com.diagbot.util.DateUtil;
 import com.diagbot.util.SysUserUtils;
 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.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.text.DecimalFormat;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -31,136 +20,30 @@ import java.util.Map;
  */
 @Component
 public class ConsoleFacade {
-
-    @Autowired
-    private QcresultInfoFacade qcresultInfoFacade;
     @Autowired
-    private BehospitalInfoFacade behospitalInfoFacade;
+    private FilterFacade filterFacade;
     @Autowired
     private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
 
-
     /**
-     * 出院人数统计
+     * 病历相关统计
      *
      * @param filterVO
      * @return
      */
-    public Map<String, Object> leaveHosStatistics(FilterVO filterVO) {
-        Map<String, Object> retMap = new LinkedHashMap<>();
-        String hospitalId = SysUserUtils.getCurrentHospitalID();
-        retMap.put("总人数", 0);
-        retMap.put("死亡人数", 0);
-        retMap.put("新生儿人数", 0);
-        retMap.put("手术病人数", 0);
-        filterVO.setHospitalId(hospitalId);
-        filterVO.setStartDate(getStartDateStr(filterVO.getType()));
-        filterVO.setEndDate(getEndDateStr(filterVO.getType()));
-        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
-     */
     public Map<String, Object> mrStatistics(FilterVO filterVO) {
-        DecimalFormat df = new DecimalFormat("#0.00");
-        Map<String, Object> retMap = new LinkedHashMap<>();
-        String hospitalId = SysUserUtils.getCurrentHospitalID();
-        String startDate = getStartDateStr(filterVO.getType());
-        String endDate = getEndDateStr(filterVO.getType());
-        filterVO.setStartDate(startDate);
-        filterVO.setEndDate(endDate);
-        filterVO.setHospitalId(hospitalId);
-        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
-        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
-
-        int totleNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
-        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);
-        retMap.put("累计质控病历数", totleNumDTO);
-        retMap.put("甲级病历", firstLevelNumDTO);
-        retMap.put("乙级病历", secondLevelNumDTO);
-        retMap.put("丙级病历", thirdLevelNumDTO);
-        return retMap;
-    }
-
-    /**
-     * 按科室统计
-     *
-     * @param filterVO
-     * @return
-     */
-    public Map<String, Object> deptStatistics(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());
-        String endDate = getEndDateStr(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);
-        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
-        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
         try {
             Map<String, Object> invokeParams = new HashMap<>();
             invokeParams.put("filterVO", filterVO);
             retMap
-                    = dataBeanAggregateQueryFacade.get("setAllDept", invokeParams, Map.class);
+                    = dataBeanAggregateQueryFacade.get("setAllMr", invokeParams, Map.class);
         } catch (Exception e) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
         }
@@ -175,10 +58,8 @@ 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());
+        String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
         filterVO.setStartDate(startDate);
         filterVO.setHospitalId(hospitalId);
         try {
@@ -193,43 +74,17 @@ 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();
         filterVO.setHospitalId(hospitalId);
-        String startDate = getStartDateStr(filterVO.getType());
+        String startDate = filterFacade.getStartDateStr(filterVO.getType(), null);
         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);
-
-        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);
@@ -238,92 +93,6 @@ public class ConsoleFacade {
         } catch (Exception e) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
         }
-
         return retMap;
     }
-
-    /**
-     * 筛选起始时间
-     *
-     * @param type
-     * @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";
-        }
-        return startDate;
-    }
-
-    /**
-     * 筛选截止时间
-     *
-     * @param type
-     * @return
-     */
-    public String getEndDateStr(Integer type) {
-        Date date = new Date();
-        String endDate = "";
-        String year = DateUtil.getYear(date);
-        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 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 {
-            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;
-            }
-        }
-        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);
+    }
+}

+ 17 - 0
src/main/java/com/diagbot/mapper/QcresultInfoMapper.java

@@ -1,6 +1,7 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
@@ -51,4 +52,20 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
      * @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);
 }

+ 17 - 0
src/main/java/com/diagbot/service/QcresultInfoService.java

@@ -1,6 +1,7 @@
 package com.diagbot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
@@ -52,4 +53,20 @@ public interface QcresultInfoService extends IService<QcresultInfo> {
      * @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);
 }

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

@@ -1,6 +1,7 @@
 package com.diagbot.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.NumDTO;
 import com.diagbot.dto.QcResultPercentDTO;
 import com.diagbot.entity.QcresultInfo;
@@ -68,4 +69,26 @@ public class QcresultInfoServiceImpl extends ServiceImpl<QcresultInfoMapper, Qcr
     public List<NumDTO> entryCountGroupByCase(FilterVO filterVO) {
         return baseMapper.entryCountGroupByCase(filterVO);
     }
+
+    /**
+     * 条目缺陷分组统计
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<NumDTO> entryCountGroupByEntry(FilterVO filterVO) {
+        return baseMapper.entryCountGroupByEntry(filterVO);
+    }
+
+    /**
+     * 质控平均分按科室统计
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<AverageStatisticsDTO> getAverageScoreByDept(FilterVO filterVO) {
+        return baseMapper.getAverageScoreByDept(filterVO);
+    }
 }

+ 1 - 19
src/main/java/com/diagbot/web/ConsoleController.java

@@ -46,7 +46,7 @@ public class ConsoleController {
         return RespDTO.onSuc(data);
     }
 
-    @ApiOperation(value = "医院运营相关统计[by:zhaops]",
+    @ApiOperation(value = "平均值相关统计[by:zhaops]",
             notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
     @PostMapping("/averageStatistics")
     @SysLogger("averageStatistics")
@@ -54,22 +54,4 @@ public class ConsoleController {
         Map<String, Object> data = consoleFacade.averageStatistics(filterVO);
         return RespDTO.onSuc(data);
     }
-
-    @ApiOperation(value = "科室相关统计[by:zhaops]",
-            notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
-    @PostMapping("/deptStatistics")
-    @SysLogger("deptStatistics")
-    public RespDTO<Map<String, Object>> deptStatistics(@RequestBody FilterVO filterVO) {
-        Map<String, Object> data = consoleFacade.deptStatistics(filterVO);
-        return RespDTO.onSuc(data);
-    }
-
-    @ApiOperation(value = "出院相关统计[by:zhaops]",
-            notes = "type: 统计维度 1-本月,2-本年(必填)<br>")
-    @PostMapping("/leaveHosStatistics")
-    @SysLogger("leaveHosStatistics")
-    public RespDTO<Map<String, Object>> leaveHosStatistics(@RequestBody FilterVO filterVO) {
-        Map<String, Object> data = consoleFacade.leaveHosStatistics(filterVO);
-        return RespDTO.onSuc(data);
-    }
 }

+ 1 - 1
src/main/resources/application-pro.yml

@@ -156,7 +156,7 @@ io.github.lvyahui8.spring:
 
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}
-qc.address: http://192.168.2.232:6009
+qc.address: http://192.168.2.123:6009
 
 # 加解密开关
 encrypt:

+ 1 - 1
src/main/resources/application-test.yml

@@ -156,7 +156,7 @@ io.github.lvyahui8.spring:
 
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}
-qc.address: http://192.168.2.232:6009
+qc.address: http://192.168.2.241:6009
 
 # 加解密开关
 encrypt:

+ 16 - 10
src/main/resources/mapper/HomePageMapper.xml

@@ -141,11 +141,11 @@
     <!-- 按科室统计平均住院天数 -->
     <select id="getAverageDayNum"  parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.AverageStatisticsDTO">
         SELECT
-        a.beh_dept_id as deptId,
-        a.beh_dept_name as deptName,
+        a.beh_dept_id as id,
+        a.beh_dept_name as name,
         count(*) AS num,
-        round( sum( b.behospital_day_num )/ count(*), 2 ) AS averageValue,
-        round( sum( b.behospital_day_num ), 2 ) AS totleValue
+        round( sum( CAST(b.behospital_day_num AS DECIMAL ))/ count(*), 2 ) AS averageValue,
+        round( sum( CAST(b.behospital_day_num AS DECIMAL )), 2 ) AS totleValue
         FROM
         med_behospital_info a,
         med_home_page b
@@ -158,7 +158,10 @@
             AND a.hospital_id = #{hospitalId}
         </if>
         <if test="startDate != null and startDate != ''">
-            <![CDATA[ and a.behospital_date >= #{startDate}]]>
+            <![CDATA[ and a.behospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
         </if>
         GROUP BY
         a.beh_dept_id,
@@ -170,11 +173,11 @@
     <!-- 按科室统计平均费用 -->
     <select id="getAverageFee"  parameterType="com.diagbot.vo.FilterVO"  resultType="com.diagbot.dto.AverageStatisticsDTO">
         SELECT
-        a.beh_dept_id as deptId,
-        a.beh_dept_name as deptName,
+        a.beh_dept_id as id,
+        a.beh_dept_name as name,
         count(*) AS num,
-        round( sum( b.total_fee )/ count(*), 2 ) AS averageValue,
-        round( sum( b.total_fee ), 2 ) AS totleValue
+        round( sum( CAST(b.total_fee AS DECIMAL ))/ count(*), 2 ) AS averageValue,
+        round( sum( CAST(b.total_fee AS DECIMAL )), 2 ) AS totleValue
         FROM
         med_behospital_info a,
         med_home_page b
@@ -187,7 +190,10 @@
             AND a.hospital_id = #{hospitalId}
         </if>
         <if test="startDate != null and startDate != ''">
-            <![CDATA[ and a.behospital_date >= #{startDate}]]>
+            <![CDATA[ and a.behospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
         </if>
         GROUP BY
         a.beh_dept_id,

+ 70 - 0
src/main/resources/mapper/QcresultInfoMapper.xml

@@ -157,4 +157,74 @@
         d.cases_id,
         e.`name`
     </select>
+
+    <!-- 条目缺陷分组统计 -->
+    <select id="entryCountGroupByEntry" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.NumDTO">
+        SELECT
+        d.id,
+        d.NAME,
+        count(*) AS num
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_detail c,
+        qc_cases_entry d
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND a.hospital_id = b.hospital_id
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.behospital_code = c.behospital_code
+        AND c.cases_id = d.cases_id
+        AND c.cases_entry_id = d.id
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        GROUP BY
+        d.id,
+        d.NAME
+    </select>
+
+    <!-- 质控平均分按科室统计 -->
+    <select id="getAverageScoreByDept" parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.AverageStatisticsDTO">
+        SELECT
+        a.beh_dept_id AS id,
+        a.beh_dept_name AS name,
+        ROUND( sum( CAST( c.score_res AS DECIMAL )), 2 ) AS totleValue,
+        ROUND( sum( CAST( c.score_res AS DECIMAL ))/ count(*), 2 ) AS averageValue,
+        count(*) AS num
+        FROM
+        med_behospital_info a,
+        med_home_page b,
+        med_qcresult_info c
+        WHERE
+        a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        AND a.hospital_id = b.hospital_id
+        AND a.hospital_id = c.hospital_id
+        AND a.behospital_code = b.behospital_code
+        AND a.behospital_code = c.behospital_code
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= DATE(#{startDate})]]>
+        </if>
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[AND a.leave_hospital_date < DATE(#{endDate})]]>
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+    </select>
 </mapper>