123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- package com.yihu.ehr.svrinspection.service;
- import com.yihu.ehr.model.geography.MGeographyDict;
- import com.yihu.ehr.model.org.MOrganization;
- import com.yihu.ehr.profile.core.ResourceCore;
- import com.yihu.ehr.solr.SolrUtil;
- import com.yihu.ehr.svrinspection.commons.exception.ManageException;
- import com.yihu.ehr.svrinspection.commons.service.BaseService;
- import com.yihu.ehr.svrinspection.feign.AddressClient;
- import com.yihu.ehr.util.datetime.DateUtil;
- import com.yihu.ehr.util.log.LogService;
- import org.apache.commons.lang.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.util.*;
- /**
- * 检验数据统计-solr
- * @author HZY
- * @created 2018/11/15 14:01
- */
- @Component
- public class ExamStatisticsService extends BaseService {
- private static String core = ResourceCore.SubTable;
- @Autowired
- private AddressClient addressClient;
- @Autowired
- private SolrUtil solrUtil;
- @Autowired
- private AssistanceApplyService assistanceApplyService;
- /**
- * 区域检验统计分布
- *
- * @param pid 上级区域编码
- * @param field 分组字段
- * @param eventDate
- * @return
- * @throws Exception
- */
- public List<Map<String,Object>> areaGroupCount(Integer pid, String field, String eventDate) throws Exception {
- List<Map<String,Object>> resultList = new ArrayList<>();
- StringBuilder fq = new StringBuilder();
- Map<String, Long> result = new TreeMap<>();
- String q = "(rowkey:*HDSD00_79* OR rowkey:*HDSD00_77*)";//solr细表中的检查检验
- if (StringUtils.isBlank(eventDate)) {
- LogService.getLogger().error("eventDate is null,check your params");
- throw new Exception("eventDate is null,check your params");
- }
- //事件日期
- fq.append("event_date:[" + eventDate + "T00:00:00Z TO " + eventDate + "T23:59:59Z]");
- //统计查询
- Map<String, Long> facetField = solrUtil.groupCount(core,q, fq.toString(),field, 0, -1);
- //获取区县列表
- List<MGeographyDict> addressList = addressClient.getAddressDictByPid(pid);
- addressList.stream().forEach(address ->{
- Map<String,Object> areaData = areaData = new HashMap<>();
- areaData.put("areaCode",address.getPid());
- areaData.put("areaName",address.getName());
- if (facetField.get(String.valueOf(address.getId())) == null) {
- areaData.put("count",0);
- }else {
- areaData.put("count",facetField.get(String.valueOf(address.getId())));
- }
- resultList.add(areaData);
- });
- comparator(resultList,"count");
- return resultList;
- }
- /**
- * 医院检验统计分布
- *
- * @param areaCode 区域编码
- * @param field 分组字段
- * @param eventDate 事件时间
- * @return
- * @throws Exception
- */
- public List<Map<String,Object>> hospitalGroupCount(String areaCode, String field, String eventDate) throws Exception {
- List<Map<String,Object>> resultList = new ArrayList<>();
- StringBuilder fq = new StringBuilder();
- String q = "(rowkey:*HDSD00_79* OR rowkey:*HDSD00_77*)";//solr细表中的检查检验
- if (StringUtils.isBlank(areaCode)) {
- throw new ManageException("areaCode is null,check your params");
- }
- if (StringUtils.isBlank(eventDate)) {
- throw new ManageException("eventDate is null,check your params");
- }
- //区域编码
- fq.append("org_area:"+areaCode);
- //事件日期
- fq.append(" && event_date:[" + eventDate + "T00:00:00Z TO " + eventDate + "T23:59:59Z]");
- //统计查询
- Map<String, Long> facetField = solrUtil.groupCount(core,q, fq.toString(),field, 0, -1);
- //获取区县列表
- List<MOrganization> addressList = addressClient.getOrganizationByAreaCode(areaCode);
- addressList.stream().forEach(organization ->{
- //只显示有检验数的医院
- if (facetField.get(organization.getOrgCode()) != null) {
- Map<String,Object> areaData = areaData = new HashMap<>();
- areaData.put("orgCode",organization.getOrgCode());
- areaData.put("orgName",organization.getFullName());
- areaData.put("count",facetField.get(organization.getOrgCode()));
- resultList.add(areaData);
- }
- });
- comparator(resultList,"count");
- return resultList;
- }
- /**
- * 区域检验数统计
- *
- * TODO 累计数和新增数先从solr获取,后期考虑是否同步到mysql中
- * @param areaCode
- * @param eventDate
- * @return
- */
- public Map<String,Object> areaExamStatistics(String areaCode, String eventDate) throws Exception {
- Map<String,Object> result = new HashMap<>();
- //累计检验数
- long total = totalCount(areaCode, eventDate);
- //今日新增数
- long today = todayIncreaseCount(areaCode);
- //已申请数
- long apply = assistanceApplyService.toDayCount(0);
- //已处理数
- long solution = assistanceApplyService.toDayCount(1);
- //业务分布
- List<Map<String, Object>> list = examEventRanking(areaCode, eventDate);
- result.put("total",total);
- result.put("increase",today);
- result.put("applied",apply);
- result.put("solution",solution);
- result.put("eventPercentage",solution);
- return result;
- }
- /**
- * solr 获取检验累计总数
- *
- * @param areaCode 区域编码
- * @param eventDate 时间
- * @return
- * @throws ManageException
- */
- public long totalCount(String areaCode, String eventDate) throws ManageException {
- long total = 0;
- StringBuilder fq = new StringBuilder();
- String q = "(rowkey:*HDSD00_79* OR rowkey:*HDSD00_77*)";//solr细表中的检查检验
- if (!StringUtils.isBlank(areaCode)) {
- //区域编码
- fq.append("org_area:"+areaCode);
- }
- if (StringUtils.isBlank(eventDate)) {
- throw new ManageException("eventDate is null,check your params");
- }
- //事件日期
- fq.append(" && event_date:[" + eventDate + "T00:00:00Z TO " + eventDate + "T23:59:59Z]");
- //统计查询
- try {
- total = solrUtil.count(core,q, fq.toString());
- } catch (Exception e) {
- throw new ManageException("获取累计统计数异常",e);
- }
- return total;
- }
- /**
- * 今日新增检验数
- *
- * @param areaCode 区域编码
- * @return
- * @throws ManageException
- */
- public long todayIncreaseCount(String areaCode) throws ManageException {
- long total = 0;
- StringBuilder fq = new StringBuilder();
- String q = "(rowkey:*HDSD00_79* OR rowkey:*HDSD00_77*)";//solr细表中的检查检验
- if (!StringUtils.isBlank(areaCode)) {
- //区域编码
- fq.append("org_area:"+areaCode);
- }
- String createDate = DateUtil.getNowDate(DateUtil.DEFAULT_DATE_YMD_FORMAT);
- //创建日期
- fq.append(" && create_date:[" + createDate + "T00:00:00Z TO " + createDate + "T23:59:59Z]");
- //统计查询
- try {
- total = solrUtil.count(core,q, fq.toString());
- } catch (Exception e) {
- throw new ManageException("获取今日新增档案数异常",e);
- }
- return total;
- }
- /**
- * 检验次数业务分布
- *
- * @param areaCode 区域编码
- * @param eventDate 时间
- * @return
- * @throws Exception
- */
- public List<Map<String,Object>> examEventRanking(String areaCode, String eventDate) throws Exception {
- List<Map<String,Object>> resultList = new ArrayList<>();
- StringBuilder fq = new StringBuilder();
- String q = "(rowkey:*HDSD00_79* OR rowkey:*HDSD00_77*)";//solr细表中的检查检验
- if (StringUtils.isBlank(areaCode)) {
- throw new ManageException("areaCode is null,check your params");
- }
- if (StringUtils.isBlank(eventDate)) {
- throw new ManageException("eventDate is null,check your params");
- }
- //区域编码
- fq.append("org_area:"+areaCode);
- //事件日期
- fq.append(" && event_date:[" + eventDate + "T00:00:00Z TO " + eventDate + "T23:59:59Z]");
- //统计查询
- Map<String, Long> facetField = solrUtil.groupCount(core,q, fq.toString(),"event_type", 0, -1);
- comparator(resultList,"count");
- return resultList;
- }
- }
|