ソースを参照

app监控- 健康档案建档数接口

huangzhiyong 6 年 前
コミット
a3903857d5

+ 19 - 0
src/main/java/com/yihu/ehr/analyze/controller/dataQuality/DataQualityHomeEndpoint.java

@ -231,4 +231,23 @@ public class DataQualityHomeEndpoint extends EnvelopRestEndPoint {
        return envelop;
    }
    @RequestMapping(value = ServiceApi.DataQuality.HomeHealthArchiveTrend, method = RequestMethod.GET)
    @ApiOperation(value = "app质量监控首页--电子健康档案数-建档趋势")
    public Envelop healthArchive(
            @ApiParam(name = "flag", value = "类型(10:按月,20:按日)")
            @RequestParam(value = "flag", required = true) String flag,
            @ApiParam(name = "month", value = "月份")
            @RequestParam(value = "month", required = false) String month
    ) throws Exception {
        Envelop envelop = new Envelop();
        try {
            return success(dataQualityHomeService.getHealthyArchiveTrend(flag, month));
        }catch (Exception e){
            e.printStackTrace();
            envelop.setSuccessFlg(false);
            envelop.setErrorMsg(e.getMessage());
        }
        return envelop;
    }
}

+ 102 - 0
src/main/java/com/yihu/ehr/analyze/service/dataQuality/DataQualityHomeService.java

@ -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;
    }
}