|
@@ -3,6 +3,10 @@ package com.diagbot.aggregate;
|
|
|
import com.diagbot.dto.AverageStatisticsDTO;
|
|
|
import com.diagbot.facade.ConsoleFacade;
|
|
|
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,6 +16,9 @@ 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;
|
|
@@ -26,13 +33,16 @@ public class AverageStatisticsAggregate {
|
|
|
@Autowired
|
|
|
private HomePageFacade homePageFacade;
|
|
|
@Autowired
|
|
|
+ private QcresultInfoFacade qcresultInfoFacade;
|
|
|
+ @Autowired
|
|
|
private ConsoleFacade consoleFacade;
|
|
|
|
|
|
@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<>();
|
|
|
if (ListUtil.isNotEmpty(averageDayNumList)) {
|
|
|
retMap.put("平均住院日", averageDayNumList);
|
|
@@ -40,6 +50,9 @@ public class AverageStatisticsAggregate {
|
|
|
if (ListUtil.isNotEmpty(averageFeeList)) {
|
|
|
retMap.put("平均住院费用", averageFeeList);
|
|
|
}
|
|
|
+ if (ListUtil.isNotEmpty(averageScoreList)) {
|
|
|
+ retMap.put("各科室质控平均分", averageScoreList);
|
|
|
+ }
|
|
|
return retMap;
|
|
|
}
|
|
|
|
|
@@ -53,14 +66,40 @@ 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);
|
|
|
- }
|
|
|
- Integer limitCount = filterVO.getLimitCount();
|
|
|
- //平均住院日
|
|
|
- if (ListUtil.isNotEmpty(averageDayNumList)) {
|
|
|
- retAverageDayNumList = consoleFacade.getLimitAverageList(averageDayNumList, limitCount);
|
|
|
+
|
|
|
+ //上月、去年
|
|
|
+ String startDate = consoleFacade.getLastStartDateStr(filterVO.getType());
|
|
|
+ String endDate = consoleFacade.getLastEndDateStr(filterVO.getType());
|
|
|
+ filterVO.setStartDate(startDate);
|
|
|
+ filterVO.setEndDate(endDate);
|
|
|
+ List<AverageStatisticsDTO> lastAverageDayNumList = homePageFacade.getAverageDayNum(filterVO);
|
|
|
+ Map<String, Double> lastMap
|
|
|
+ = EntityUtil.makeMapWithKeyValue(lastAverageDayNumList, "deptName", "averageValue");
|
|
|
+
|
|
|
+ //去年本月
|
|
|
+ if (filterVO.getType().equals(1)) {
|
|
|
+ Date date = new Date();
|
|
|
+ String year = DateUtil.getYear(date);
|
|
|
+ startDate = consoleFacade.getStartDateStr(filterVO.getType(), Integer.valueOf(year) - 1);
|
|
|
+ endDate = consoleFacade.getEndDateStr(filterVO.getType(), Integer.valueOf(year) - 1);
|
|
|
+ filterVO.setStartDate(startDate);
|
|
|
+ filterVO.setEndDate(endDate);
|
|
|
}
|
|
|
+ //按年统计,同比环比相同
|
|
|
+ List<AverageStatisticsDTO> lastYearAverageDayNumList = homePageFacade.getAverageDayNum(filterVO);
|
|
|
+
|
|
|
+ Map<String, Double> lastYearMap
|
|
|
+ = EntityUtil.makeMapWithKeyValue(lastYearAverageDayNumList, "deptName", "averageValue");
|
|
|
+
|
|
|
+ averageDayNumList.forEach(item -> {
|
|
|
+ if (lastMap.containsKey(item.getDeptName())) {
|
|
|
+ item.setLastAverageValue(lastMap.get(item.getDeptName()));
|
|
|
+ }
|
|
|
+ if (lastYearMap.containsKey(item.getDeptName())) {
|
|
|
+ item.setLastYearAverageValue(lastYearMap.get(item.getDeptName()));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ retAverageDayNumList = averageDayNumList.subList(0, 10);
|
|
|
return retAverageDayNumList;
|
|
|
}
|
|
|
|
|
@@ -74,14 +113,95 @@ public class AverageStatisticsAggregate {
|
|
|
public List<AverageStatisticsDTO> getAverageFee(@InvokeParameter("filterVO") FilterVO filterVO) {
|
|
|
List<AverageStatisticsDTO> retAverageFeeList = Lists.newLinkedList();
|
|
|
List<AverageStatisticsDTO> averageFeeList = homePageFacade.getAverageFee(filterVO);
|
|
|
+ //上月、去年
|
|
|
+ String startDate = consoleFacade.getLastStartDateStr(filterVO.getType());
|
|
|
+ String endDate = consoleFacade.getLastEndDateStr(filterVO.getType());
|
|
|
+ filterVO.setStartDate(startDate);
|
|
|
+ filterVO.setEndDate(endDate);
|
|
|
+ List<AverageStatisticsDTO> lastAverageFeeList = homePageFacade.getAverageDayNum(filterVO);
|
|
|
+ Map<String, Double> lastMap
|
|
|
+ = EntityUtil.makeMapWithKeyValue(lastAverageFeeList, "deptName", "averageValue");
|
|
|
+
|
|
|
+ //去年本月
|
|
|
+ if (filterVO.getType().equals(1)) {
|
|
|
+ Date date = new Date();
|
|
|
+ String year = DateUtil.getYear(date);
|
|
|
+ startDate = consoleFacade.getStartDateStr(filterVO.getType(), Integer.valueOf(year) - 1);
|
|
|
+ endDate = consoleFacade.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, "deptName", "averageValue");
|
|
|
+
|
|
|
+ averageFeeList.forEach(item -> {
|
|
|
+ if (lastMap.containsKey(item.getDeptName())) {
|
|
|
+ item.setLastAverageValue(lastMap.get(item.getDeptName()));
|
|
|
+ }
|
|
|
+ if (lastYearMap.containsKey(item.getDeptName())) {
|
|
|
+ item.setLastYearAverageValue(lastYearMap.get(item.getDeptName()));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ 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.setDeptName("其他");
|
|
|
+ retAverageStatistics.setNum(num);
|
|
|
+ retAverageStatistics.setAverageValue(averageValue);
|
|
|
+ retAverageStatistics.setTotleValue(totleValue);
|
|
|
+ retAverageList.add(retAverageStatistics);
|
|
|
+ }
|
|
|
+ return retAverageList;
|
|
|
}
|
|
|
}
|