123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package com.yihu.quota.controller;
- import com.fasterxml.jackson.core.type.TypeReference;
- import com.github.abel533.echarts.Option;
- import com.yihu.ehr.constants.ApiVersion;
- import com.yihu.ehr.constants.ServiceApi;
- import com.yihu.ehr.controller.EnvelopRestEndPoint;
- 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.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 com.yihu.quota.util.ReportOption;
- import com.yihu.quota.vo.ViewQuotaFilterModel;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import io.swagger.annotations.ApiParam;
- import org.apache.commons.lang3.StringUtils;
- 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.Aggregation;
- import org.elasticsearch.search.aggregations.AggregationBuilders;
- import org.elasticsearch.search.aggregations.Aggregations;
- import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder;
- 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.ArrayList;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.Map;
- /**
- * @author janseny
- * @date 2018年9月26日
- */
- @RestController
- @RequestMapping(ApiVersion.Version1_0)
- @Api(description = "OLAP 视图 控制入口")
- public class ViewController extends EnvelopRestEndPoint {
- @Autowired
- private ViewService viewService;
- @Autowired
- private CubeService cubeService;
- @Autowired
- private AggregationBuildHandler aggregationBuildHandler;
- @ApiOperation(value = "添加视图")
- @RequestMapping(value = ServiceApi.StatisticView.View.Add, method = RequestMethod.GET)
- public Envelop add(
- @ApiParam(name = "code", value = "视图code", required = true)
- @RequestParam(value = "code", required = true) String code,
- @ApiParam(name = "name", value = "视图名称", required = true)
- @RequestParam(value = "name", required = true) String name,
- @ApiParam(name = "cubeId", value = "多维数据集ID", required = true)
- @RequestParam(value = "cubeId", required = true) int cubeId,
- @ApiParam(name = "displayType", value = "展示类型 1:数值,2:普通表格,3:树形表格,4:饼图,5:折线图,6:柱状图,7:组合图(折线图+柱状图),8:雷达图,9:旭日图", required = false)
- @RequestParam(value = "displayType", required = false) String displayType,
- @ApiParam(name = "isDrill", value = "可钻取 1:可以,2:不可以", required = false)
- @RequestParam(value = "isDrill", required = false) String isDrill
- ) {
- Envelop envelop = new Envelop();
- envelop.setSuccessFlg(true);
- try {
- View view = new View();
- Cube cube = cubeService.findOne(cubeId);
- view.setCode(code);
- view.setName(name);
- view.setEsIndex(cube.getIndexName());
- view.setEsType(cube.getIndexType());
- view.setDisplayType(displayType != null ? displayType : "1");
- view.setIsDrill(isDrill != null ? isDrill : "1");
- viewService.save(view);
- } catch (Exception e) {
- e.printStackTrace();
- envelop.setSuccessFlg(false);
- }
- return envelop;
- }
- @ApiOperation(value = "删除视图")
- @RequestMapping(value = ServiceApi.StatisticView.View.Delete, method = RequestMethod.DELETE)
- public Envelop delete(
- @ApiParam(name = "id", value = "ID", required = true)
- @RequestParam(value = "id", required = true) int id) {
- Envelop envelop = new Envelop();
- envelop.setSuccessFlg(true);
- viewService.delete(id);
- return envelop;
- }
- @ApiOperation(value = "获取视图的统计结果,并转换成展示的数据格式")
- @RequestMapping(value = ServiceApi.StatisticView.View.GetViewStatisticData, method = RequestMethod.GET)
- public Envelop getViewStatisticData(
- @ApiParam(name = "viewCode", value = "视图编码", required = true)
- @RequestParam(value = "viewCode") String viewCode,
- @ApiParam(name = "filters", value = "过滤条件JSON字符串,如:'[{\"relationType\":\"and\",\"field\":\"event_date\",\"compareType\":\"belong\",\"filterValue\":\"2017-06-11\"}]'")
- @RequestParam(value = "filters", required = false) String filters,
- @ApiParam(name = "sort", value = "排序JSON字符串,排序字段从可排序的维度中挑选,如:'{\"field\":\"event_date\",\"type\":\"asc\"}'")
- @RequestParam(value = "sort", required = false) String sort,
- @ApiParam(name = "drillDimension", value = "钻取维度编码,如:'{\"field\":\"event_date\"}'")
- @RequestParam(value = "drillDimension", required = false) String drillDimension) {
- Envelop envelop = new Envelop();
- envelop.setSuccessFlg(true);
- try {
- // 根据视图规则,获取统计结果
- List<ViewQuotaFilterModel> filterModelList = new ArrayList<>();
- if (StringUtils.isNotEmpty(filters)) {
- filterModelList = objectMapper.readValue(filters, new TypeReference<List<ViewQuotaFilterModel>>() {
- });
- }
- View view = viewService.findByCode(viewCode);
- if(view == null){
- logger.debug("视图不存在");
- return null;
- }
- Aggregations aggregations = viewService.statViewResult(viewCode, filterModelList);
- if(view.getDisplayType().equals("1")){
- //数值型
- Map<String, Object> resultMap = aggregationBuildHandler.numericalDataParsing(view, aggregations.getAsMap());
- envelop.setObj(resultMap);
- }else if(view.getDisplayType().equals("2")){
- //普通表格
- List<Map<String, Object>> resultList = aggregationBuildHandler.tableDataParsing(view, aggregations.getAsMap());
- envelop.setObj(resultList);
- }else if(view.getDisplayType().equals("3")){
- //树形表格
- }else {
- //图表
- Option option = aggregationBuildHandler.ehartDataParsing(view, aggregations.getAsMap());
- String echartJson = option.toString();
- envelop.setObj(echartJson);
- }
- } catch (Exception e) {
- e.printStackTrace();
- envelop.setSuccessFlg(false);
- }
- return envelop;
- }
- }
|