|
@ -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;
|
|
@ -49,12 +61,11 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
@Autowired
|
|
|
private RedisClient redisClient;
|
|
|
@Autowired
|
|
|
private DataCompleteService dataCompleteService;
|
|
|
@Autowired
|
|
|
private ApplicationContext context;
|
|
|
@Autowired
|
|
|
private ElasticSearchPool elasticSearchPool;
|
|
|
|
|
|
private Map<DqDataType, DataQualityBaseService> dqBaseServiceMap;
|
|
|
|
|
|
@PostConstruct
|
|
|
private void init() {
|
|
|
dqBaseServiceMap = new HashMap<>();
|
|
@ -152,7 +163,7 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
if (molecular == 0) {
|
|
|
return "0.00%";
|
|
|
} else if (denominator == 0) {
|
|
|
return "100.00%";
|
|
|
return "--";
|
|
|
}
|
|
|
DecimalFormat decimalFormat = new DecimalFormat("0.00%");
|
|
|
return decimalFormat.format(molecular / denominator);
|
|
@ -177,17 +188,10 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
end = dateStr;
|
|
|
}
|
|
|
|
|
|
//初始化 及时率预警信息
|
|
|
DqPaltformReceiveWarning warning = dqPaltformReceiveWarningDao.findByOrgCode(defaultOrgCode);
|
|
|
|
|
|
int totalHospitalNum = 0;//医院总就诊数
|
|
|
double hospitalOutpatientNum = 0;//总门诊数
|
|
|
double hospitalExamNum = 0;//总体检数
|
|
|
double hospitalInpatientNum = 0;//总住院数
|
|
|
|
|
|
double totalOutpatientNum = 0;//总门诊数
|
|
|
double totalExamNum = 0;//总体检数
|
|
|
double totalInpatientNum = 0;//总住院数
|
|
|
double totalInTime = 0;//总及时数
|
|
|
double totalVisitNum = 0;//总完整数(平台总就诊数)
|
|
|
double totalCorrect = 0;//总准确数
|
|
@ -203,15 +207,12 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
Map<String, Object> dataMap = new HashMap<>();
|
|
|
//2. 平台就诊完整数
|
|
|
getPatientCount("receive_date",start, end, null, dataMap);
|
|
|
totalOutpatientNum = Double.valueOf(dataMap.get("outpatientIntegrity").toString());//门诊完整数
|
|
|
totalInpatientNum = Double.valueOf(dataMap.get("hospitalIntegrity").toString());//住院完整数
|
|
|
totalExamNum = Double.valueOf(dataMap.get("peIntegrity").toString());//体检完整数
|
|
|
totalVisitNum = Double.valueOf(dataMap.get("visitIntegrity").toString());//就诊完整数
|
|
|
//3. 及时数
|
|
|
totalInTime = getInTimeNum("receive_date" ,start, end, warning);
|
|
|
// 3. 准确数
|
|
|
totalInTime = getInTimeNum("receive_date" ,start, end);
|
|
|
// 3. 去重准确数【】
|
|
|
totalCorrect = getErrorDataSetData("receive_date",start, end, null);
|
|
|
//4. 数据集总条数
|
|
|
//4. 数据集总量
|
|
|
int dataSetsMun = getDataSetsMap(start, end, null);
|
|
|
|
|
|
totalMap.put("orgCode", cloud);//机构code
|
|
@ -238,6 +239,108 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 质控分析 - 完整性统计
|
|
|
*
|
|
|
* @param start 就诊时间- 起始
|
|
|
* @param end 就诊时间- 截止
|
|
|
* 【目前取的是平台全部机构,若做多区域平台的话,需要添加区域参数】
|
|
|
*/
|
|
|
public Map<String, Object> getCompleteStatistics(String start, String end) throws Exception {
|
|
|
Map<String, Object> totalMap = new HashMap<>();
|
|
|
String dateStr = DateUtil.toString(new Date());
|
|
|
if (StringUtils.isBlank(start)) {
|
|
|
start = dateStr;
|
|
|
}
|
|
|
if (StringUtils.isBlank(end)) {
|
|
|
end = dateStr;
|
|
|
}
|
|
|
|
|
|
int totalHospitalNum = 0;//医院总就诊数
|
|
|
double totalVisitNum = 0;//总完整数(平台总就诊数)
|
|
|
|
|
|
//1. 获取医院档案量;
|
|
|
Envelop envelop = packQcReportService.dailyReport("create_date", start + "T00:00:00Z", end + "T23:59:59Z", null);
|
|
|
Map<String, Object> hospitalDataMap = (Map<String, Object>) envelop.getDetailModelList().get(0);
|
|
|
//医院总数据量
|
|
|
totalHospitalNum = (int) hospitalDataMap.get("total");
|
|
|
Map<String, Object> dataMap = new HashMap<>();
|
|
|
//2. 平台就诊完整数
|
|
|
getPatientCount("receive_date",start, end, null, dataMap);
|
|
|
totalVisitNum = Double.valueOf(dataMap.get("visitIntegrity").toString());
|
|
|
totalMap.put("totalComplete", totalVisitNum);//总就诊完整数
|
|
|
totalMap.put("totalHospital", totalHospitalNum);//医院总就诊数
|
|
|
//计算完整率,
|
|
|
totalMap.put("completeRate", calRate(totalVisitNum, totalHospitalNum));//完整率
|
|
|
return totalMap;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 质控分析 - 准确率统计
|
|
|
*
|
|
|
* @param start 就诊时间- 起始
|
|
|
* @param end 就诊时间- 截止
|
|
|
*/
|
|
|
public Map<String, Object> getCorrectStatistics(String start, String end) throws Exception {
|
|
|
Map<String, Object> totalMap = new HashMap<>();
|
|
|
String dateStr = DateUtil.toString(new Date());
|
|
|
if (StringUtils.isBlank(start)) {
|
|
|
start = dateStr;
|
|
|
}
|
|
|
if (StringUtils.isBlank(end)) {
|
|
|
end = dateStr;
|
|
|
}
|
|
|
|
|
|
double totalCorrect = 0;//总准确数
|
|
|
Map<String, Object> dataMap = new HashMap<>();
|
|
|
//1. 去重准确数
|
|
|
totalCorrect = getErrorDataSetData("receive_date",start, end, null);
|
|
|
//2. 数据集总量
|
|
|
int dataSetsMun = getDataSetsMap(start, end, null);
|
|
|
totalMap.put("totalCorrect", totalCorrect);//准确数
|
|
|
totalMap.put("totalDataSet", dataSetsMun);//数据集总行数
|
|
|
//3 计算准确性
|
|
|
totalMap.put("correctRate", calRate(totalCorrect, dataSetsMun));//数据集准确率
|
|
|
return totalMap;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 质控分析 - 及时率统计
|
|
|
*
|
|
|
* @param start 就诊时间- 起始
|
|
|
* @param end 就诊时间- 截止
|
|
|
*/
|
|
|
public Map<String, Object> getInTimeStatistics(String start, String end) throws Exception {
|
|
|
Map<String, Object> totalMap = new HashMap<>();
|
|
|
String dateStr = DateUtil.toString(new Date());
|
|
|
if (StringUtils.isBlank(start)) {
|
|
|
start = dateStr;
|
|
|
}
|
|
|
if (StringUtils.isBlank(end)) {
|
|
|
end = dateStr;
|
|
|
}
|
|
|
|
|
|
int totalHospitalNum = 0;//医院总就诊数
|
|
|
double totalInTime = 0;//总及时数
|
|
|
//1. 获取医院档案量;
|
|
|
Envelop envelop = packQcReportService.dailyReport("create_date", start + "T00:00:00Z", end + "T23:59:59Z", null);
|
|
|
Map<String, Object> hospitalDataMap = (Map<String, Object>) envelop.getDetailModelList().get(0);
|
|
|
//医院总数据量
|
|
|
totalHospitalNum = (int) hospitalDataMap.get("total");
|
|
|
Map<String, Object> dataMap = new HashMap<>();
|
|
|
//2. 及时数
|
|
|
totalInTime = getInTimeNum("receive_date" ,start, end);
|
|
|
totalMap.put("totalInTime", totalInTime);//及时数
|
|
|
totalMap.put("totalHospital", totalHospitalNum);//医院总就诊数
|
|
|
//3 计算及时率
|
|
|
totalMap.put("inTimeRate", calRate(totalInTime, totalHospitalNum));//及时率
|
|
|
return totalMap;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取质控错误 - 数据集总条数
|
|
|
* @param dateField 时间区间查询字段
|
|
@ -292,7 +395,7 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
* @return
|
|
|
*/
|
|
|
public int getDataSetsMap(String start, String end, String orgCode) throws IOException {
|
|
|
// TODO 数据集总量
|
|
|
// 数据集总量
|
|
|
int totalNum = 0;
|
|
|
String dateStr = DateUtil.toString(new Date());
|
|
|
if (StringUtils.isBlank(start)) {
|
|
@ -310,48 +413,50 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
List<Map<String, Object>> dataSets = elasticSearchUtil.list("json_archives_qc", "qc_dataset_detail", stringBuilder1.toString());
|
|
|
for (Map<String, Object> dataSet : dataSets) {
|
|
|
for (Map.Entry<String, Object> entry : dataSet.entrySet()) {
|
|
|
totalNum += (Integer) dataSet.get("row");
|
|
|
totalNum += (Integer) dataSet.get("count");
|
|
|
}
|
|
|
}
|
|
|
return totalNum;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取及时上传数
|
|
|
* 获取所有及时上传数
|
|
|
* @param dateField 时间区间查询字段
|
|
|
* @param start
|
|
|
* @param end
|
|
|
* @param warning 预警信息
|
|
|
* @return
|
|
|
*/
|
|
|
public double getInTimeNum(String dateField,String start, String end, DqPaltformReceiveWarning warning) {
|
|
|
public double getInTimeNum(String dateField,String start, String end) {
|
|
|
double totalInTime = 0;
|
|
|
//及时率
|
|
|
try {
|
|
|
Map<String, Object> resMap = new HashMap<>();
|
|
|
DataQualityBaseService dataQualityBaseService = getInstance(DqDataType.create(1));
|
|
|
//获取有数据的医院code列表
|
|
|
List<String> orgList = dataQualityBaseService.hasDataHospital(dateField, start, end);
|
|
|
for (String orgCode : orgList) {
|
|
|
//初始化 及时率预警信息
|
|
|
DqPaltformReceiveWarning warning = dqPaltformReceiveWarningDao.findByOrgCode(orgCode);
|
|
|
if (warning == null) {
|
|
|
warning = dqPaltformReceiveWarningDao.findByOrgCode(defaultOrgCode);
|
|
|
}
|
|
|
long starttime = System.currentTimeMillis();
|
|
|
String sql0 = "SELECT COUNT(DISTINCT event_no) FROM json_archives WHERE event_type=2 AND pack_type=1 AND " + dateField +
|
|
|
" BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getPeInTime();
|
|
|
|
|
|
String sql1 = "SELECT COUNT(DISTINCT event_no) FROM json_archives WHERE event_type=1 AND pack_type=1 AND " + dateField +
|
|
|
" BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getHospitalInTime();
|
|
|
|
|
|
String sql2 = "SELECT COUNT(DISTINCT event_no) FROM json_archives WHERE event_type=0 AND pack_type=1 AND " + dateField +
|
|
|
" BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getOutpatientInTime();
|
|
|
String sql0 = "";
|
|
|
List<String> fields = new ArrayList<String>();
|
|
|
fields.add("count");
|
|
|
try {
|
|
|
sql0 = "SELECT COUNT(DISTINCT event_no) as count FROM json_archives WHERE pack_type=1 AND org_code='" + orgCode + "' AND " + dateField +
|
|
|
" BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getPeInTime() ;
|
|
|
|
|
|
List<Map<String, Object>> resultSet0 = elasticSearchUtil.findBySql(fields, sql0);
|
|
|
for (Map<String, Object> orgData : resultSet0) {
|
|
|
double newValue = (double) orgData.get("count");
|
|
|
totalInTime +=newValue;
|
|
|
}
|
|
|
|
|
|
ResultSet resultSet0 = elasticSearchUtil.findBySql(sql0);
|
|
|
ResultSet resultSet1 = elasticSearchUtil.findBySql(sql1);
|
|
|
ResultSet resultSet2 = elasticSearchUtil.findBySql(sql2);
|
|
|
resultSet0.next();
|
|
|
resultSet1.next();
|
|
|
resultSet2.next();
|
|
|
double outpatientInTime = new Double(resultSet2.getObject("COUNT(DISTINCT event_no)").toString());//门诊及时数
|
|
|
double inpatientInTime = new Double(resultSet1.getObject("COUNT(DISTINCT event_no)").toString());//住院及时数
|
|
|
double examInTime = new Double(resultSet0.getObject("COUNT(DISTINCT event_no)").toString());//体检及时数
|
|
|
totalInTime = outpatientInTime + inpatientInTime + examInTime; // //就诊及时性
|
|
|
logger.info("平台就诊及时人数 去重复:" + (System.currentTimeMillis() - starttime) + "ms");
|
|
|
} catch (Exception e) {
|
|
|
if (!"Error".equals(e.getMessage())) {
|
|
|
e.printStackTrace();
|
|
|
logger.info("平台就诊及时人数 去重复:" + (System.currentTimeMillis() - starttime) + "ms");
|
|
|
} catch (Exception e) {
|
|
|
if (!"Error".equals(e.getMessage())) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return totalInTime;
|
|
@ -481,6 +586,8 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
for(Map<String,Object> map:list){
|
|
|
map.put("dataset_name", redisClient.get("std_data_set_" + map.get("version") + ":" + map.get("dataset") + ":name"));
|
|
|
}
|
|
|
DataQualityBaseService dataQualityBaseService = getInstance(DqDataType.create(1));
|
|
|
dataQualityBaseService.comparator(list,"count",1);//降序排序
|
|
|
return list;
|
|
|
}
|
|
|
|
|
@ -523,6 +630,194 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
for(Map<String,Object> map:list){
|
|
|
map.put("metadata_name", redisClient.get("std_meta_data_" + map.get("version") + ":" + map.get("dataset")+"."+ map.get("metadata")+ ":name"));
|
|
|
}
|
|
|
DataQualityBaseService dataQualityBaseService = getInstance(DqDataType.create(1));
|
|
|
dataQualityBaseService.comparator(list,"count",1);//降序排序
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 完整率、准确率、及时率趋势
|
|
|
* @param flag 10按月 20按日
|
|
|
* @param dataType 0: 完整性,1:及时性,2:准确性
|
|
|
* @param month
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public Map<String, Object> homeTrend(String flag, int dataType, String month) throws Exception {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
List<Double> data = new ArrayList<>();
|
|
|
List<String> name = new ArrayList<>();
|
|
|
if("10".equals(flag)){//按月
|
|
|
for(int i=0;i<6;i++){
|
|
|
String start = DateUtil.formatDate(DateUtil.addMonth(0-i, DateUtil.formatCharDateYMD(month+"-01")), "yyyy-MM");
|
|
|
String end = DateUtil.getLastDate (start+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
double rate = getRate(dataType, start+"-01", end);
|
|
|
data.add((double) Math.round(rate * 100) / 100);
|
|
|
name.add(start);
|
|
|
}
|
|
|
}else{//按日
|
|
|
//当前月份显示最近30天,否则显示当月的数据
|
|
|
if(month.equals(DateUtil.toString(new Date(), "yyyy-MM"))){
|
|
|
for(int i=0;i<30;i++){
|
|
|
String date = DateUtil.toString(DateUtil.addDate(0-i,new Date()));
|
|
|
double rate = getRate(dataType, date, date);
|
|
|
data.add (0,(double) Math.round(rate * 100) / 100);
|
|
|
name.add(0,date);
|
|
|
}
|
|
|
}else{
|
|
|
String end = DateUtil.getLastDate (month+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
for(int i=0;i<32;i++){
|
|
|
String date = DateUtil.toString(DateUtil.addDate(i,DateUtil.strToDate(month+"-01")));
|
|
|
double rate = getRate(dataType, date, date);
|
|
|
data.add ((double) Math.round(rate * 100) / 100);
|
|
|
name.add(date);
|
|
|
if(date.equals(end)){
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
map.put("data", data);
|
|
|
map.put("name", name);
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取比例
|
|
|
* @param dataType
|
|
|
* @param start
|
|
|
* @param end
|
|
|
* @return
|
|
|
*/
|
|
|
public double getRate(int dataType, String start, String end) throws Exception{
|
|
|
int totalHospitalNum = 0;//医院总就诊数
|
|
|
double totalInTime = 0;//总及时数
|
|
|
double totalVisitNum = 0;//总完整数(平台总就诊数)
|
|
|
double totalCorrect = 0;//总准确数
|
|
|
|
|
|
//1. 获取医院档案量;
|
|
|
Envelop envelop = packQcReportService.dailyReport("create_date", start + "T00:00:00Z", end + "T23:59:59Z", null);
|
|
|
Map<String, Object> hospitalDataMap = (Map<String, Object>) envelop.getDetailModelList().get(0);
|
|
|
//医院总数据量
|
|
|
totalHospitalNum = (int) hospitalDataMap.get("total");
|
|
|
|
|
|
if(dataType==0){
|
|
|
//1. 平台就诊完整数
|
|
|
Map<String, Object> dataMap = new HashMap<>();
|
|
|
getPatientCount("receive_date",start, end, null, dataMap);
|
|
|
totalVisitNum = Double.valueOf(dataMap.get("visitIntegrity").toString());//就诊完整数
|
|
|
if(totalHospitalNum==0){
|
|
|
return 0.0;
|
|
|
}else{
|
|
|
return totalVisitNum/totalHospitalNum*100;
|
|
|
}
|
|
|
}else if (dataType==1){
|
|
|
//2. 及时数
|
|
|
totalInTime = getInTimeNum("receive_date" ,start, end);
|
|
|
if(totalHospitalNum==0){
|
|
|
return 0.0;
|
|
|
}else{
|
|
|
return totalInTime/totalHospitalNum*100;
|
|
|
}
|
|
|
}else{
|
|
|
//3. 去重准确数【】
|
|
|
totalCorrect = getErrorDataSetData("receive_date",start, end, null);
|
|
|
//4. 数据集总量
|
|
|
int dataSetsMun = getDataSetsMap(start, end, null);
|
|
|
if(dataSetsMun==0){
|
|
|
return 0.0;
|
|
|
}else{
|
|
|
return totalCorrect/dataSetsMun*100;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
}
|