MrStatisticsAggregate.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package com.diagbot.aggregate;
  2. import com.diagbot.dto.NumDTO;
  3. import com.diagbot.dto.QcResultPercentDTO;
  4. import com.diagbot.facade.BehospitalInfoFacade;
  5. import com.diagbot.facade.QcresultInfoFacade;
  6. import com.diagbot.util.BeanUtil;
  7. import com.diagbot.util.ListUtil;
  8. import com.diagbot.vo.FilterVO;
  9. import com.diagbot.vo.HomePageFilterVO;
  10. import com.diagbot.vo.QcresultFilterVO;
  11. import com.google.common.collect.Lists;
  12. import io.github.lvyahui8.spring.annotation.DataConsumer;
  13. import io.github.lvyahui8.spring.annotation.DataProvider;
  14. import io.github.lvyahui8.spring.annotation.InvokeParameter;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Component;
  17. import java.math.BigDecimal;
  18. import java.math.RoundingMode;
  19. import java.text.DecimalFormat;
  20. import java.util.LinkedHashMap;
  21. import java.util.List;
  22. import java.util.Map;
  23. import java.util.stream.Collectors;
  24. /**
  25. * @Description:病历相关统计
  26. * @Author:zhaops
  27. * @time: 2020/5/6 17:21
  28. */
  29. @Component
  30. public class MrStatisticsAggregate {
  31. @Autowired
  32. private BehospitalInfoFacade behospitalInfoFacade;
  33. @Autowired
  34. private QcresultInfoFacade qcresultInfoFacade;
  35. @DataProvider("setAllMr")
  36. public Map<String, Object> setAllDept(
  37. @InvokeParameter("filterVO") FilterVO filterVO,
  38. @DataConsumer("getLevelResultDept") List<QcResultPercentDTO> levelResults,
  39. @DataConsumer("leaveHosCount") Map<String, Object> leaveHosMap,
  40. @DataConsumer("mrCount") List<NumDTO> mrCountList) {
  41. Map<String, Object> retMap = new LinkedHashMap<>();
  42. retMap.put("各科室甲级病历占比", Lists.newLinkedList());
  43. retMap.put("病历数统计", Lists.newLinkedList());
  44. retMap.put("出院人数统计", new LinkedHashMap<>());
  45. if (ListUtil.isNotEmpty(levelResults)) {
  46. retMap.put("各科室甲级病历占比", levelResults);
  47. }
  48. if (leaveHosMap != null) {
  49. retMap.put("出院人数统计", leaveHosMap);
  50. }
  51. if (ListUtil.isNotEmpty(mrCountList)) {
  52. retMap.put("病历数统计", mrCountList);
  53. }
  54. return retMap;
  55. }
  56. /**
  57. * 各科室甲级病历占比
  58. *
  59. * @param filterVO
  60. * @return
  61. */
  62. @DataProvider("getLevelResultDept")
  63. public List<QcResultPercentDTO> getLevelResultDept(@InvokeParameter("filterVO") FilterVO filterVO) {
  64. List<QcResultPercentDTO> qcResultPercentList = qcresultInfoFacade.levelPercentGroupByDept(filterVO);
  65. qcResultPercentList = qcResultPercentList.stream().limit(10).collect(Collectors.toList());
  66. return qcResultPercentList;
  67. }
  68. /**
  69. * 出院人数统计
  70. *
  71. * @param filterVO
  72. * @return
  73. */
  74. @DataProvider("leaveHosCount")
  75. public Map<String, Object> leaveHosCount(@InvokeParameter("filterVO") FilterVO filterVO) {
  76. Map<String, Object> retMap = new LinkedHashMap<>();
  77. retMap.put("总人数", 0);
  78. retMap.put("死亡人数", 0);
  79. retMap.put("新生儿人数", 0);
  80. retMap.put("手术病人数", 0);
  81. HomePageFilterVO homePageFilterVO = new HomePageFilterVO();
  82. BeanUtil.copyProperties(filterVO, homePageFilterVO);
  83. Integer totleNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
  84. homePageFilterVO.setDeath(1);
  85. Integer deathNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
  86. homePageFilterVO.setDeath(null);
  87. homePageFilterVO.setNewBorn(1);
  88. Integer newBornNum = behospitalInfoFacade.homePageCount(homePageFilterVO);
  89. Integer operationNum = behospitalInfoFacade.homePageCountForOperation(filterVO);
  90. retMap.put("总人数", totleNum);
  91. retMap.put("死亡人数", deathNum);
  92. retMap.put("新生儿人数", newBornNum);
  93. retMap.put("手术病人数", operationNum);
  94. return retMap;
  95. }
  96. /**
  97. * 质控病历统计
  98. *
  99. * @return
  100. */
  101. @DataProvider("mrCount")
  102. public List<NumDTO> mrCount(@InvokeParameter("filterVO") FilterVO filterVO) {
  103. DecimalFormat df = new DecimalFormat("#0.00");
  104. List<NumDTO> retList = Lists.newLinkedList();
  105. QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
  106. BeanUtil.copyProperties(filterVO, qcresultFilterVO);
  107. int totleNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
  108. qcresultFilterVO.setLevel("甲");
  109. int firstLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
  110. qcresultFilterVO.setLevel("乙");
  111. int secondLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
  112. qcresultFilterVO.setLevel("丙");
  113. int thirdLevelNum = qcresultInfoFacade.resultCount(qcresultFilterVO);
  114. NumDTO totleNumDTO = new NumDTO();
  115. totleNumDTO.setName("累计质控病历数");
  116. totleNumDTO.setTotleNum(totleNum);
  117. totleNumDTO.setNum(totleNum);
  118. NumDTO firstLevelNumDTO = new NumDTO();
  119. firstLevelNumDTO.setName("甲级病历");
  120. firstLevelNumDTO.setNum(firstLevelNum);
  121. firstLevelNumDTO.setTotleNum(totleNum);
  122. Double firstPercent = BigDecimal.valueOf(firstLevelNum)
  123. .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
  124. .doubleValue();
  125. String firstPercentStr = df.format(BigDecimal.valueOf(firstPercent).multiply(BigDecimal.valueOf(100))) + "%";
  126. firstLevelNumDTO.setPercent(firstPercent);
  127. firstLevelNumDTO.setPercentStr(firstPercentStr);
  128. NumDTO secondLevelNumDTO = new NumDTO();
  129. secondLevelNumDTO.setName("乙级病历");
  130. secondLevelNumDTO.setNum(secondLevelNum);
  131. secondLevelNumDTO.setTotleNum(totleNum);
  132. Double secondPercent = BigDecimal.valueOf(secondLevelNum)
  133. .divide(BigDecimal.valueOf(totleNum), 4, RoundingMode.HALF_UP)
  134. .doubleValue();
  135. String secondPercentStr = df.format(BigDecimal.valueOf(secondPercent).multiply(BigDecimal.valueOf(100))) + "%";
  136. secondLevelNumDTO.setPercent(secondPercent);
  137. secondLevelNumDTO.setPercentStr(secondPercentStr);
  138. NumDTO thirdLevelNumDTO = new NumDTO();
  139. thirdLevelNumDTO.setName("丙级病历");
  140. thirdLevelNumDTO.setNum(thirdLevelNum);
  141. thirdLevelNumDTO.setTotleNum(totleNum);
  142. Double thirdPercent = BigDecimal.valueOf(1)
  143. .subtract(BigDecimal.valueOf(firstPercent))
  144. .subtract(BigDecimal.valueOf(secondPercent))
  145. .doubleValue();
  146. String thirdPercentStr = df.format(BigDecimal.valueOf(thirdPercent).multiply(BigDecimal.valueOf(100))) + "%";
  147. thirdLevelNumDTO.setPercent(thirdPercent);
  148. thirdLevelNumDTO.setPercentStr(thirdPercentStr);
  149. retList.add(totleNumDTO);
  150. retList.add(firstLevelNumDTO);
  151. retList.add(secondLevelNumDTO);
  152. retList.add(thirdLevelNumDTO);
  153. return retList;
  154. }
  155. }