ConsoleFacade.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. package com.diagbot.facade;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.diagbot.dto.AverageStatisticsDTO;
  4. import com.diagbot.entity.BehospitalInfo;
  5. import com.diagbot.enums.IsDeleteEnum;
  6. import com.diagbot.exception.CommonErrorCode;
  7. import com.diagbot.exception.CommonException;
  8. import com.diagbot.util.BeanUtil;
  9. import com.diagbot.util.DateUtil;
  10. import com.diagbot.util.ListUtil;
  11. import com.diagbot.util.SysUserUtils;
  12. import com.diagbot.vo.FilterVO;
  13. import com.diagbot.vo.QcresultFilterVO;
  14. import com.google.common.collect.Lists;
  15. import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Component;
  18. import java.math.BigDecimal;
  19. import java.math.RoundingMode;
  20. import java.util.Date;
  21. import java.util.HashMap;
  22. import java.util.LinkedHashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. /**
  26. * @Description:
  27. * @Author:zhaops
  28. * @time: 2020/4/13 16:45
  29. */
  30. @Component
  31. public class ConsoleFacade {
  32. @Autowired
  33. private QcresultInfoFacade qcresultInfoFacade;
  34. @Autowired
  35. private BehospitalInfoFacade behospitalInfoFacade;
  36. @Autowired
  37. private HomePageFacade homePageFacade;
  38. @Autowired
  39. private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
  40. /**
  41. * 病历相关统计
  42. *
  43. * @return
  44. */
  45. public Map<String, Object> mrStatistics(FilterVO filterVO) {
  46. Map<String, Object> retMap = new LinkedHashMap<>();
  47. String hospitalId = SysUserUtils.getCurrentHospitalID();
  48. String startDate = getStartDateStr(filterVO.getType());
  49. filterVO.setStartDate(startDate);
  50. filterVO.setHospitalId(hospitalId);
  51. QueryWrapper<BehospitalInfo> behospitalInfoQueryWrapper = new QueryWrapper<>();
  52. behospitalInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
  53. .eq("hospital_id", hospitalId)
  54. .ge("behospital_date", startDate);
  55. int behospitalInfoCount = behospitalInfoFacade.count(behospitalInfoQueryWrapper);
  56. //病历数
  57. if (filterVO.getType().equals(1)) {
  58. retMap.put("本月病历数", behospitalInfoCount);
  59. } else if (filterVO.getType().equals(2)) {
  60. retMap.put("本年病历数", behospitalInfoCount);
  61. }
  62. QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
  63. BeanUtil.copyProperties(filterVO, qcresultFilterVO);
  64. //本月质控数-人工
  65. qcresultFilterVO.setGradeType(2);
  66. qcresultFilterVO.setLevel("");
  67. int qcresultByGradeType2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
  68. if (qcresultFilterVO.getType().equals(1)) {
  69. retMap.put("本月质控数-人工", qcresultByGradeType2Count);
  70. } else if (qcresultFilterVO.getType().equals(2)) {
  71. retMap.put("本年质控数-人工", qcresultByGradeType2Count);
  72. }
  73. //本月质控数-机器
  74. qcresultFilterVO.setGradeType(1);
  75. qcresultFilterVO.setLevel("");
  76. int qcresultByGradeType1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
  77. if (qcresultFilterVO.getType().equals(1)) {
  78. retMap.put("本月质控数-机器", qcresultByGradeType1Count);
  79. } else if (qcresultFilterVO.getType().equals(2)) {
  80. retMap.put("本年质控数-机器", qcresultByGradeType1Count);
  81. }
  82. //本月甲级病历-人工
  83. qcresultFilterVO.setGradeType(2);
  84. qcresultFilterVO.setLevel("甲");
  85. int qcresultByGradeType2AndLevel1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
  86. if (qcresultFilterVO.getType().equals(1)) {
  87. retMap.put("本月甲级病历-人工", qcresultByGradeType2AndLevel1Count);
  88. } else if (qcresultFilterVO.getType().equals(2)) {
  89. retMap.put("本年甲级病历-人工", qcresultByGradeType2AndLevel1Count);
  90. }
  91. //本月甲级病历-机器
  92. qcresultFilterVO.setGradeType(1);
  93. qcresultFilterVO.setLevel("甲");
  94. int qcresultByGradeType1AndLevel1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
  95. if (qcresultFilterVO.getType().equals(1)) {
  96. retMap.put("本月甲级病历-机器", qcresultByGradeType1AndLevel1Count);
  97. } else if (qcresultFilterVO.getType().equals(2)) {
  98. retMap.put("本年甲级病历-机器", qcresultByGradeType1AndLevel1Count);
  99. }
  100. //本月乙级病历-人工
  101. qcresultFilterVO.setGradeType(2);
  102. qcresultFilterVO.setLevel("乙");
  103. int qcresultByGradeType2AndLevel2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
  104. if (qcresultFilterVO.getType().equals(1)) {
  105. retMap.put("本月乙级病历-人工", qcresultByGradeType2AndLevel2Count);
  106. } else if (qcresultFilterVO.getType().equals(2)) {
  107. retMap.put("本年乙级病历-人工", qcresultByGradeType2AndLevel2Count);
  108. }
  109. //本月乙级病历-机器
  110. qcresultFilterVO.setGradeType(1);
  111. qcresultFilterVO.setLevel("乙");
  112. int qcresultByGradeType1AndLevel2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
  113. if (qcresultFilterVO.getType().equals(1)) {
  114. retMap.put("本月乙级病历-机器", qcresultByGradeType1AndLevel2Count);
  115. } else if (qcresultFilterVO.getType().equals(2)) {
  116. retMap.put("本年乙级病历-机器", qcresultByGradeType1AndLevel2Count);
  117. }
  118. //本月乙级病历-人工
  119. qcresultFilterVO.setGradeType(2);
  120. qcresultFilterVO.setLevel("丙");
  121. int qcresultByGradeType2AndLevel3Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
  122. if (qcresultFilterVO.getType().equals(1)) {
  123. retMap.put("本月不合格病历-人工", qcresultByGradeType2AndLevel3Count);
  124. } else if (qcresultFilterVO.getType().equals(2)) {
  125. retMap.put("本年不合格病历-人工", qcresultByGradeType2AndLevel3Count);
  126. }
  127. //本月乙级病历-机器
  128. qcresultFilterVO.setGradeType(1);
  129. qcresultFilterVO.setLevel("丙");
  130. int qcresultByGradeType1AndLevel3Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
  131. if (filterVO.getType().equals(1)) {
  132. retMap.put("本月不合格病历-机器", qcresultByGradeType1AndLevel3Count);
  133. } else if (filterVO.getType().equals(2)) {
  134. retMap.put("本年不合格病历-机器", qcresultByGradeType1AndLevel3Count);
  135. }
  136. return retMap;
  137. }
  138. /**
  139. * 缺陷相关统计
  140. *
  141. * @param filterVO
  142. * @return
  143. */
  144. public Map<String, Object> resultStatistics(FilterVO filterVO) {
  145. Map<String, Object> retMap = new LinkedHashMap<>();
  146. retMap.put("缺陷排行列表", Lists.newLinkedList());
  147. retMap.put("各科室缺陷占比", Lists.newLinkedList());
  148. String hospitalId = SysUserUtils.getCurrentHospitalID();
  149. String startDate = getStartDateStr(filterVO.getType());
  150. filterVO.setStartDate(startDate);
  151. filterVO.setHospitalId(hospitalId);
  152. /*if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
  153. filterVO.setLimitCount(10);
  154. }*/
  155. // List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics(filterVO);
  156. // if (ListUtil.isNotEmpty(results)) {
  157. // results.forEach(result -> {
  158. // DecimalFormat df = new DecimalFormat("#0.00");
  159. // String percentStr
  160. // = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
  161. // result.setPercentStr(percentStr);
  162. // });
  163. // retMap.put("缺陷排行列表", results);
  164. // }
  165. // List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept(filterVO);
  166. // if (ListUtil.isNotEmpty(results2)) {
  167. // List<ResultDetailDTO> retResults = Lists.newLinkedList();
  168. // if (results2.size() <= 6) {
  169. // retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
  170. // } else {
  171. //
  172. // Double rate = 0d;
  173. // Integer num = 0;
  174. // for (ResultDetailDTO result : results2) {
  175. // if (retResults.size() < 5) {
  176. // rate = BigDecimal.valueOf(rate)
  177. // .add(BigDecimal.valueOf(Double.valueOf(result.getPercent())))
  178. // .doubleValue();
  179. // retResults.add(result);
  180. // } else {
  181. // num += result.getNum();
  182. // }
  183. // }
  184. // ResultDetailDTO retResult = new ResultDetailDTO();
  185. // retResult.setName("其他");
  186. // retResult.setNum(num);
  187. // retResult.setPercent(BigDecimal.valueOf(1).subtract(BigDecimal.valueOf(rate)).doubleValue());
  188. // retResults.add(retResult);
  189. // }
  190. // retResults.forEach(result -> {
  191. // DecimalFormat df = new DecimalFormat("#0.00");
  192. // String percentStr
  193. // = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
  194. // result.setPercentStr(percentStr);
  195. // });
  196. // retMap.put("各科室缺陷占比", retResults);
  197. // }
  198. try {
  199. Map<String, Object> invokeParams = new HashMap<>();
  200. invokeParams.put("filterVO", filterVO);
  201. retMap
  202. = dataBeanAggregateQueryFacade.get("setAllResult", invokeParams, Map.class);
  203. } catch (Exception e) {
  204. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
  205. }
  206. return retMap;
  207. }
  208. /**
  209. * 医院运营相关统计
  210. *
  211. * @param filterVO
  212. * @return
  213. */
  214. public Map<String, Object> averageStatistics(FilterVO filterVO) {
  215. Map<String, Object> retMap = new LinkedHashMap<>();
  216. List<AverageStatisticsDTO> retAverageDayNumList = Lists.newLinkedList();
  217. List<AverageStatisticsDTO> retAverageFeeList = Lists.newLinkedList();
  218. retMap.put("平均住院日", Lists.newLinkedList());
  219. retMap.put("平均住院费用", Lists.newLinkedList());
  220. String hospitalId = SysUserUtils.getCurrentHospitalID();
  221. filterVO.setHospitalId(hospitalId);
  222. String startDate = getStartDateStr(filterVO.getType());
  223. filterVO.setStartDate(startDate);
  224. List<AverageStatisticsDTO> averageDayNumList = homePageFacade.getAverageDayNum(filterVO);
  225. List<AverageStatisticsDTO> averageFeeList = homePageFacade.getAverageFee(filterVO);
  226. if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
  227. filterVO.setLimitCount(10);
  228. }
  229. Integer limitCount = filterVO.getLimitCount();
  230. //平均住院日
  231. if (ListUtil.isNotEmpty(averageDayNumList)) {
  232. retAverageDayNumList = getLimitAverageList(averageDayNumList, limitCount);
  233. retMap.put("平均住院日", retAverageDayNumList);
  234. }
  235. //平均住院费用
  236. if (ListUtil.isNotEmpty(averageFeeList)) {
  237. retAverageFeeList = getLimitAverageList(averageFeeList, limitCount);
  238. retMap.put("平均住院费用", retAverageFeeList);
  239. }
  240. return retMap;
  241. }
  242. /**
  243. * 筛选起始时间
  244. *
  245. * @param type
  246. * @return
  247. */
  248. public String getStartDateStr(Integer type) {
  249. Date date = new Date();
  250. String startDate = "";
  251. String year = DateUtil.getYear(date);
  252. int month = DateUtil.getMonth(date);
  253. if (type.equals(1)) {
  254. //本月统计
  255. startDate = year + "-" + month + "-1";
  256. } else if (type.equals(2)) {
  257. //本年统计
  258. startDate = year + "-1-1";
  259. }
  260. return startDate;
  261. }
  262. /**
  263. * 根据限制数量重组统计结果
  264. *
  265. * @param averageList
  266. * @param limitCount
  267. * @return
  268. */
  269. public List<AverageStatisticsDTO> getLimitAverageList(List<AverageStatisticsDTO> averageList, Integer limitCount) {
  270. List<AverageStatisticsDTO> retAverageList = Lists.newLinkedList();
  271. if (averageList.size() < limitCount) {
  272. retAverageList = BeanUtil.listCopyTo(averageList, AverageStatisticsDTO.class);
  273. } else {
  274. Double averageValue = 0d;
  275. Double totleValue = 0d;
  276. Integer num = 0;
  277. for (AverageStatisticsDTO averageStatisticsDTO : averageList) {
  278. if (retAverageList.size() < limitCount - 1) {
  279. retAverageList.add(averageStatisticsDTO);
  280. } else {
  281. totleValue = BigDecimal
  282. .valueOf(totleValue)
  283. .add(BigDecimal.valueOf(averageStatisticsDTO.getTotleValue()))
  284. .doubleValue();
  285. num += averageStatisticsDTO.getNum();
  286. }
  287. }
  288. averageValue = BigDecimal.valueOf(totleValue)
  289. .divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP)
  290. .doubleValue();
  291. AverageStatisticsDTO retAverageStatistics = new AverageStatisticsDTO();
  292. retAverageStatistics.setDeptName("其他");
  293. retAverageStatistics.setNum(num);
  294. retAverageStatistics.setAverageValue(averageValue);
  295. retAverageStatistics.setTotleValue(totleValue);
  296. retAverageList.add(retAverageStatistics);
  297. }
  298. return retAverageList;
  299. }
  300. }