|
@ -3,6 +3,7 @@ package com.yihu.ehr.analyze.service.dataQuality;
|
|
|
|
|
|
import com.yihu.ehr.analyze.dao.DqPaltformReceiveWarningDao;
|
|
|
import com.yihu.ehr.analyze.service.pack.PackQcReportService;
|
|
|
import com.yihu.ehr.elasticsearch.ElasticSearchPool;
|
|
|
import com.yihu.ehr.elasticsearch.ElasticSearchUtil;
|
|
|
import com.yihu.ehr.entity.quality.DqPaltformReceiveWarning;
|
|
|
import com.yihu.ehr.profile.qualilty.DqDataType;
|
|
@ -11,6 +12,17 @@ import com.yihu.ehr.redis.client.RedisClient;
|
|
|
import com.yihu.ehr.util.datetime.DateUtil;
|
|
|
import com.yihu.ehr.util.rest.Envelop;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.elasticsearch.action.search.SearchRequestBuilder;
|
|
|
import org.elasticsearch.action.search.SearchResponse;
|
|
|
import org.elasticsearch.client.transport.TransportClient;
|
|
|
import org.elasticsearch.index.query.BoolQueryBuilder;
|
|
|
import org.elasticsearch.index.query.QueryBuilders;
|
|
|
import org.elasticsearch.index.query.RangeQueryBuilder;
|
|
|
import org.elasticsearch.search.aggregations.AggregationBuilder;
|
|
|
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
|
|
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
|
|
|
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
|
|
|
import org.elasticsearch.search.sort.SortOrder;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@ -50,6 +62,8 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
private RedisClient redisClient;
|
|
|
@Autowired
|
|
|
private ApplicationContext context;
|
|
|
@Autowired
|
|
|
private ElasticSearchPool elasticSearchPool;
|
|
|
|
|
|
private Map<DqDataType, DataQualityBaseService> dqBaseServiceMap;
|
|
|
@PostConstruct
|
|
@ -718,4 +732,92 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
public Map<String, Object> getHealthyArchiveTrend(String flag,String month) throws Exception {
|
|
|
Map<String, Object> resMap = new HashMap<>();
|
|
|
List<String> date = new ArrayList<>();
|
|
|
List<Long> receiveCount = new ArrayList<>();
|
|
|
List<Long> storageCount = new ArrayList<>();
|
|
|
//采集量统计
|
|
|
Map<String, Object> receive = getHealthyTrend(flag, "receive_date", month);
|
|
|
//入库量统计
|
|
|
Map<String, Object> storage = getHealthyTrend(flag, "finish_date", month);
|
|
|
//前端趋势图 格式生成
|
|
|
for (String key : receive.keySet()) {
|
|
|
Long receiveValue = receive.get(key) == null ? 0 : (Long) receive.get(key);
|
|
|
Long storageValue = storage.get(key) == null ? 0 : (Long) storage.get(key);
|
|
|
receiveCount.add(receiveValue);
|
|
|
storageCount.add(storageValue);
|
|
|
date.add(key);
|
|
|
}
|
|
|
resMap.put("name",date);
|
|
|
resMap.put("receiveData",receiveCount);
|
|
|
resMap.put("storageData",storageCount);
|
|
|
return resMap;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 健康档案建档数
|
|
|
* @param flag 10按月 20按日
|
|
|
* @param dateField 分组时间字段 receive_date:采集维度,finish_date:入库维度
|
|
|
* @param month
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public Map<String, Object> getHealthyTrend(String flag, String dateField, String month) throws Exception {
|
|
|
TreeMap<String, Object> map = new TreeMap<>();
|
|
|
TransportClient transportClient = elasticSearchPool.getClient();
|
|
|
String start = "";
|
|
|
String end = "";
|
|
|
AggregationBuilder aggregation =null;
|
|
|
if("10".equals(flag)){//按月
|
|
|
start = DateUtil.formatDate(DateUtil.addMonth(-6, DateUtil.formatCharDateYMD(month+"-01")), "yyyy-MM") + "-01";
|
|
|
end = DateUtil.getLastDate (month + "-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
aggregation = AggregationBuilders.dateHistogram("agg").field("receive_date")
|
|
|
.interval(DateHistogramInterval.MONTH).format("yyyy-MM");
|
|
|
|
|
|
}else{//按日
|
|
|
//当前月份显示最近30天,否则显示当月的数据
|
|
|
if(month.equals(DateUtil.toString(new Date(), "yyyy-MM"))){
|
|
|
start = DateUtil.toString(DateUtil.addDate(-30,new Date()));
|
|
|
end = DateUtil.getLastDate (month+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
}else{
|
|
|
start = month+"-01";
|
|
|
end = DateUtil.getLastDate (month+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
}
|
|
|
aggregation = AggregationBuilders.dateHistogram("agg").field(dateField)
|
|
|
.interval(DateHistogramInterval.DAY).format("yyyy-MM-dd");
|
|
|
}
|
|
|
|
|
|
// 声明where 条件
|
|
|
BoolQueryBuilder qbs = QueryBuilders.boolQuery();
|
|
|
RangeQueryBuilder startRange = QueryBuilders.rangeQuery(dateField);
|
|
|
startRange.gte(start + " 00:00:00");
|
|
|
qbs.must(startRange);
|
|
|
|
|
|
RangeQueryBuilder endRange = QueryBuilders.rangeQuery(dateField);
|
|
|
endRange.lt(end+" 23:59:59");
|
|
|
qbs.must(endRange);
|
|
|
|
|
|
SearchRequestBuilder requestBuilder = transportClient.prepareSearch("json_archives")
|
|
|
.setTypes("info");
|
|
|
requestBuilder.setQuery(qbs);
|
|
|
requestBuilder.addAggregation(aggregation);
|
|
|
requestBuilder.addSort(dateField, SortOrder.DESC);
|
|
|
SearchResponse response = requestBuilder.execute().actionGet();
|
|
|
Histogram agg = response.getAggregations().get("agg");
|
|
|
|
|
|
// For each entry
|
|
|
for (Histogram.Bucket entry : agg.getBuckets()) {
|
|
|
String key = entry.getKey().toString();
|
|
|
String keyAsString = entry.getKeyAsString();
|
|
|
long docCount = entry.getDocCount();
|
|
|
map.put(keyAsString,docCount);
|
|
|
System.out.println("key [{" + keyAsString + "}]");
|
|
|
System.out.println("date [{" + key + "}]");
|
|
|
System.out.println("doc_count [{" + docCount + "}]");
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
}
|