|
@ -1,47 +1,40 @@
|
|
|
package com.yihu.quota.controller;
|
|
|
|
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
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.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 com.yihu.quota.vo.ViewQuotaFilterModel;
|
|
|
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.apache.commons.lang3.StringUtils;
|
|
|
import org.elasticsearch.search.aggregations.Aggregations;
|
|
|
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.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* @author janseny
|
|
|
* @date 2018年9月26日
|
|
|
*/
|
|
|
@RestController
|
|
|
@RequestMapping(ApiVersion.Version1_0 )
|
|
|
@RequestMapping(ApiVersion.Version1_0)
|
|
|
@Api(description = "OLAP 视图 控制入口")
|
|
|
public class ViewController extends BaseController {
|
|
|
public class ViewController extends EnvelopRestEndPoint {
|
|
|
|
|
|
@Autowired
|
|
|
private ViewService viewService;
|
|
@ -53,8 +46,6 @@ public class ViewController extends BaseController {
|
|
|
private ViewQuotaService viewQuotaService;
|
|
|
@Autowired
|
|
|
private ElasticSearchHandler elasticSearchHandler;
|
|
|
@Autowired
|
|
|
private AggregationBuildHandler aggregationBuildHandler;
|
|
|
|
|
|
@ApiOperation(value = "添加视图")
|
|
|
@RequestMapping(value = ServiceApi.StatisticView.View.Add, method = RequestMethod.GET)
|
|
@ -70,7 +61,7 @@ public class ViewController extends BaseController {
|
|
|
@ApiParam(name = "isDrill", value = "可钻取 1:可以,2:不可以", required = false)
|
|
|
@RequestParam(value = "isDrill", required = false) String isDrill
|
|
|
|
|
|
){
|
|
|
) {
|
|
|
Envelop envelop = new Envelop();
|
|
|
envelop.setSuccessFlg(true);
|
|
|
try {
|
|
@ -83,7 +74,7 @@ public class ViewController extends BaseController {
|
|
|
view.setDisplayType(displayType != null ? displayType : "1");
|
|
|
view.setIsDrill(isDrill != null ? isDrill : "1");
|
|
|
viewService.save(view);
|
|
|
}catch (Exception e){
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
envelop.setSuccessFlg(false);
|
|
|
}
|
|
@ -94,7 +85,7 @@ public class ViewController extends BaseController {
|
|
|
@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){
|
|
|
@RequestParam(value = "id", required = true) int id) {
|
|
|
Envelop envelop = new Envelop();
|
|
|
envelop.setSuccessFlg(true);
|
|
|
viewService.delete(id);
|
|
@ -106,70 +97,30 @@ public class ViewController extends BaseController {
|
|
|
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\":\">=\",\"filterValue\":\"2017-06-11\"}]'")
|
|
|
@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 = "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 {
|
|
|
// 根据视图规则,获取统计结果
|
|
|
viewService.statViewResult(viewCode, filters);
|
|
|
// 将统计结果,转换成展示的数据格式
|
|
|
// TODO
|
|
|
|
|
|
}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);
|
|
|
List<ViewQuotaFilterModel> filterModelList = new ArrayList<>();
|
|
|
if (StringUtils.isNotEmpty(filters)) {
|
|
|
filterModelList = objectMapper.readValue(filters, new TypeReference<List<ViewQuotaFilterModel>>() {
|
|
|
});
|
|
|
}
|
|
|
Aggregations aggregations = viewService.statViewResult(viewCode, filterModelList);
|
|
|
|
|
|
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"))
|
|
|
);
|
|
|
// TODO 将统计结果转换成展示的数据格式
|
|
|
|
|
|
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){
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
envelop.setSuccessFlg(false);
|
|
|
}
|
|
|
return envelop;
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|