DataCompleteService.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. package com.yihu.ehr.analyze.service.dataQuality;
  2. import com.yihu.ehr.util.datetime.DateUtil;
  3. import org.apache.commons.lang.StringUtils;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.stereotype.Service;
  9. import java.util.*;
  10. /**
  11. * 质控管理首页- 完整性逻辑类
  12. *
  13. * @author HZY
  14. * @created 2018/8/17 11:24
  15. */
  16. @Service
  17. public class DataCompleteService extends DataQualityBaseService {
  18. private final static Logger logger = LoggerFactory.getLogger(DataCompleteService.class);
  19. @Value("${quality.orgCode}")
  20. private String defaultOrgCode;
  21. @Value("${quality.cloud}")
  22. private String cloud;
  23. @Value("${quality.cloudName}")
  24. private String cloudName;
  25. @Autowired
  26. private DataCorrectService dataCorrectService;
  27. /**
  28. * 【完整性】 获取区域数据 - 行政区号分组
  29. *
  30. * @param startDate
  31. * @param endDate
  32. * @return
  33. * @throws Exception
  34. */
  35. @Override
  36. public List<Map<String, Object>> getAreaDataQuality(Integer dataLevel, String startDate, String endDate) throws Exception {
  37. //String end = DateUtil.addDate(1, endDate, DateUtil.DEFAULT_DATE_YMD_FORMAT);
  38. Map<String, Object> resMap = null;
  39. List<Map<String, Object>> list = new ArrayList<>();
  40. double totalNum = 0;//平台总数
  41. double totalHospitalNum = 0;//医院总数
  42. //机构数据
  43. List<Map<String, Object>> groupList = dataCorrectService.getOrgDataMap(dataLevel, "event_date", startDate, endDate, null);
  44. //平台接收数据量
  45. Map<String, Object> platformDataGroup = getPlatformDataGroup(dataLevel, "event_date", startDate, endDate, null);
  46. // 计算
  47. for (Map<String, Object> map : groupList) {
  48. resMap = new HashMap<String, Object>();
  49. String type = platformDataGroup.get("type").toString();
  50. String code = "";
  51. double platPormNum = 0;
  52. if ("org_area".equals(type)) {
  53. platPormNum = getDoubleValue(platformDataGroup.get(map.get("org_area")));
  54. code = map.get("org_area").toString();
  55. } else {
  56. platPormNum = getDoubleValue(platformDataGroup.get(map.get("org_code")));
  57. code = map.get("org_code").toString();
  58. }
  59. double orgNum = getDoubleValue(map.get("count"));
  60. double rate = calDoubleRate(platPormNum, orgNum);
  61. if (!"".equals(code)) {
  62. resMap.put("code", code);
  63. resMap.put("name", map.get("name"));
  64. //平台接收,去重后的数据
  65. resMap.put("count", platPormNum);
  66. //医院的数据(质控上报的数据)
  67. resMap.put("total", orgNum);
  68. resMap.put("rate", rate);
  69. totalNum += platPormNum;
  70. list.add(resMap);
  71. } else {
  72. totalHospitalNum = platPormNum;
  73. }
  74. }
  75. //排序
  76. rateComparator(list);
  77. //添加总计
  78. if (totalHospitalNum !=0) {
  79. Map<String, Object> totalMap = genTotalData("上饶市",totalNum,totalHospitalNum);
  80. list.add(0, totalMap);
  81. }
  82. return list;
  83. }
  84. @Override
  85. public List<Map<String, Object>> getOrgDataQuality(Integer dataLevel, String areaCode, String startDate, String endDate) throws Exception {
  86. String end = DateUtil.addDate(1, endDate, DateUtil.DEFAULT_DATE_YMD_FORMAT);
  87. Map<String, Object> resMap = null;
  88. List<Map<String, Object>> list = new ArrayList<>();
  89. double totalNum = 0;//平台总数
  90. double totalHospitalNum = 0;//医院总数
  91. //机构数据
  92. List<Map<String, Object>> groupList = dataCorrectService.getOrgDataMap(dataLevel, "event_date", startDate, end, areaCode);
  93. //平台接收数据量
  94. Map<String, Object> platformDataGroup = getPlatformDataGroup(dataLevel, "event_date", startDate, endDate, areaCode);
  95. // 计算
  96. for (Map<String, Object> map : groupList) {
  97. resMap = new HashMap<String, Object>();
  98. String type = platformDataGroup.get("type").toString();
  99. String code = "";
  100. double platPormNum = 0;
  101. if ("org_area".equals(type)) {
  102. platPormNum = getDoubleValue(platformDataGroup.get(map.get("org_area")));
  103. code = map.get("org_area").toString();
  104. } else {
  105. platPormNum = getDoubleValue(platformDataGroup.get(map.get("org_code")));
  106. code = map.get("org_code").toString();
  107. }
  108. double orgNum = getDoubleValue(map.get("count"));
  109. double rate = calDoubleRate(platPormNum, orgNum);
  110. if (!"".equals(code)) {
  111. resMap.put("code", code);
  112. resMap.put("name", map.get("name"));
  113. resMap.put("count", platPormNum);
  114. resMap.put("total", orgNum);
  115. resMap.put("rate", rate);
  116. totalNum += platPormNum;
  117. list.add(resMap);
  118. } else {
  119. totalHospitalNum = platPormNum;
  120. }
  121. }
  122. //排序
  123. rateComparator(list);
  124. //添加总计
  125. if (totalHospitalNum !=0) {
  126. Map<String, Object> totalMap = genTotalData("全部机构", totalNum, totalHospitalNum);
  127. list.add(0, totalMap);
  128. }
  129. return list;
  130. }
  131. /**
  132. * 获取平台区域分组档案数据量 - (区域编码分组)
  133. *
  134. * @param dataLevel 数据层级,:0:区域,1:机构
  135. * @param start
  136. * @param end
  137. * @return
  138. * @throws Exception
  139. */
  140. public Map<String, Object> getPlatformDataGroup(Integer dataLevel, String dateField, String start, String end, String orgArea) throws Exception {
  141. Map<String, Object> resMap = new HashMap<>();
  142. String dateStr = DateUtil.toString(new Date());
  143. double totalAreaCout = 0;//总计
  144. if (StringUtils.isBlank(start)) {
  145. start = dateStr;
  146. }
  147. if (StringUtils.isBlank(end)) {
  148. end = dateStr;
  149. }
  150. List<String> fields = new ArrayList<String>();
  151. fields.add("count");
  152. String sql1 = "";
  153. if (StringUtils.isNotEmpty(orgArea)) {
  154. //添加标识,标识是机构数据
  155. resMap.put("type", "org_code");
  156. fields.add("org_code");
  157. sql1 = "SELECT count(DISTINCT profile_id) as count ,org_code FROM json_archives/info where pack_type=1 and analyze_status=3 and org_area='" + orgArea + "' and " +
  158. dateField + ">='" + start + " 00:00:00' and " + dateField + "<='" + end + " 23:59:59' group by org_code";
  159. } else if (StringUtils.isEmpty(orgArea) && (dataLevel == 0 && StringUtils.isEmpty(orgArea))) {
  160. resMap.put("type", "org_area");
  161. fields.add("org_area");
  162. sql1 = "SELECT count(DISTINCT profile_id) as count ,org_area FROM json_archives/info where pack_type=1 and analyze_status=3 and " +
  163. dateField + ">='" + start + " 00:00:00' and " + dateField + "<='" + end + " 23:59:59' group by org_area";
  164. } else if (StringUtils.isEmpty(orgArea) && (dataLevel == 1 && StringUtils.isEmpty(orgArea))) {
  165. resMap.put("type", "org_code");
  166. fields.add("org_code");
  167. sql1 = "SELECT count(DISTINCT profile_id) as count ,org_code FROM json_archives/info where pack_type=1 and analyze_status=3 and " +
  168. dateField + ">='" + start + " 00:00:00' and " + dateField + "<='" + end + " 23:59:59' group by org_code";
  169. }
  170. List<Map<String, Object>> resultList = elasticSearchUtil.findBySql(fields, sql1);
  171. for (Map<String, Object> map : resultList) {
  172. totalAreaCout += getDoubleValue(map.get("count"));
  173. if (StringUtils.isNotEmpty(orgArea) || (dataLevel == 1 && StringUtils.isEmpty(orgArea))) {
  174. resMap.put(map.get("org_code").toString(), map.get("count"));
  175. } else {
  176. resMap.put(map.get("org_area").toString(), map.get("count"));
  177. }
  178. }
  179. if (!resMap.isEmpty()) {
  180. //总计
  181. if (dataLevel == 0) {
  182. //TODO 默认写上饶市,后面需要修改
  183. resMap.put("", totalAreaCout);
  184. } else {
  185. resMap.put("", totalAreaCout);
  186. }
  187. }
  188. return resMap;
  189. }
  190. }