ソースを参照

olap 视图ES查询 相关接口

jkzlzhoujie 6 年 前
コミット
8faacf1239
1 ファイル変更93 行追加0 行削除
  1. 93 0
      src/main/java/com/yihu/quota/controller/ViewController.java

+ 93 - 0
src/main/java/com/yihu/quota/controller/ViewController.java

@ -4,17 +4,35 @@ import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.model.cube.Cube;
import com.yihu.quota.model.view.View;
import com.yihu.quota.model.view.ViewDimension;
import com.yihu.quota.model.view.ViewQuota;
import com.yihu.quota.service.cube.CubeService;
import com.yihu.quota.service.view.ViewDimensionService;
import com.yihu.quota.service.view.ViewQuotaService;
import com.yihu.quota.service.view.ViewService;
import com.yihu.quota.util.AggregationBuildHandler;
import com.yihu.quota.util.ElasticSearchHandler;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder;
import org.elasticsearch.search.aggregations.metrics.MetricsAggregationBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
 * @author janseny
 * @date 2018年9月26日
@ -28,6 +46,14 @@ public class ViewController extends BaseController {
    private ViewService viewService;
    @Autowired
    private CubeService cubeService;
    @Autowired
    private ViewDimensionService viewDimensionService;
    @Autowired
    private ViewQuotaService viewQuotaService;
    @Autowired
    private ElasticSearchHandler elasticSearchHandler;
    @Autowired
    private AggregationBuildHandler aggregationBuildHandler;
    @ApiOperation(value = "添加视图")
    @RequestMapping(value = "/addView", method = RequestMethod.GET)
@ -74,4 +100,71 @@ public class ViewController extends BaseController {
    }
    @ApiOperation(value = "根据维度配置查询视图数据")
    @RequestMapping(value = "/getEsDataGrammar", method = RequestMethod.DELETE)
    public Envelop getEsDataGrammar(
            @ApiParam(name = "id", value = "视图ID", required = true)
            @RequestParam(value = "id", required = true) int id){
        Envelop envelop = new Envelop();
        envelop.setSuccessFlg(true);
        try {
            View view = viewService.findOne(id);
            List<ViewDimension> viewDimensions = viewDimensionService.findByField("viewId",id);
            List<ViewQuota> viewQuotas = viewQuotaService.findByField("viewId",id);
        }catch (Exception e){
            e.printStackTrace();
            envelop.setSuccessFlg(false);
        }
        return envelop;
    }
    /**
     * 例5:展示2017年区县、性别的就诊人次数,以及合计。
     * @return
     */
    @ApiOperation(value = "Test 例五 二维表")
    @RequestMapping(value = "/test5", method = RequestMethod.DELETE)
    public Envelop test5(){
        Envelop envelop = new Envelop();
        envelop.setSuccessFlg(true);
        try {
            BoolQueryBuilder boolQueryBuilder = null;
//            RangeQueryBuilder rangeQueryStartTime = QueryBuilders.rangeQuery("quotaDate").gte("2017-01-01");
//            boolQueryBuilder.must(rangeQueryStartTime);
//            RangeQueryBuilder rangeQueryEndTime = QueryBuilders.rangeQuery("quotaDate").lte("2017-12-31");
//            boolQueryBuilder.must(rangeQueryEndTime);
            TransportClient client = elasticSearchHandler.getTransportClient();
//            ValueCountBuilder firstAgg = AggregationBuilders.count("count_result").field("rowkey");
//            TermsBuilder secondAgg = AggregationBuilders.terms("合计_性别_terms").field("sex")
//                    .subAggregation(AggregationBuilders.count("count_result").field("rowkey"));
//            TermsBuilder threeAgg = AggregationBuilders.terms("区县_terms").field("area.town")
//                    .subAggregation(AggregationBuilders.count("合计_count_result").field("rowkey"))
//                    .subAggregation(AggregationBuilders.terms("性别_terms").field("sex")
//                                    .subAggregation(AggregationBuilders.count("count_result").field("rowkey"))
//                    );
            AbstractAggregationBuilder firstAgg = aggregationBuildHandler.addAggregationBuilder("count","count_result","rowkey");
            AbstractAggregationBuilder secondAgg = aggregationBuildHandler.addTermAggregationBuilder("合计_性别_terms","sex","count", "count_result", "rowkey");
            AbstractAggregationBuilder threeAgg = aggregationBuildHandler.addTermsBuilder("区县_terms", "area.town")
                    .subAggregation(aggregationBuildHandler.addAggregationBuilder("count", "合计_count_result", "rowkey"))
                    .subAggregation(aggregationBuildHandler.addTermsBuilder("性别_terms","sex")
                                    .subAggregation(aggregationBuildHandler.addAggregationBuilder("count", "count_result", "rowkey"))
                    );
            LinkedList<AbstractAggregationBuilder> aggBuildList = new LinkedList<>();
            aggBuildList.add(firstAgg);
            aggBuildList.add(secondAgg);
            aggBuildList.add(threeAgg);
            List<Map<String, Object>> resultList = aggregationBuildHandler.structAggregationQuery(client,"patient_event","info", boolQueryBuilder, aggBuildList);
            envelop.setDetailModelList(resultList);
        }catch (Exception e){
            e.printStackTrace();
            envelop.setSuccessFlg(false);
        }
        return envelop;
    }
}