|
@ -0,0 +1,1523 @@
|
|
|
package com.yihu.jw.es.util;
|
|
|
|
|
|
import com.alibaba.druid.sql.ast.SQLExpr;
|
|
|
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
|
|
|
import com.alibaba.druid.sql.parser.SQLExprParser;
|
|
|
|
|
|
|
|
|
import com.yihu.jw.es.es.ElasticFactory;
|
|
|
import com.yihu.jw.util.date.DateUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.elasticsearch.action.search.SearchResponse;
|
|
|
import org.elasticsearch.client.Client;
|
|
|
import org.nlpcn.es4sql.domain.Select;
|
|
|
import org.nlpcn.es4sql.jdbc.ObjectResult;
|
|
|
import org.nlpcn.es4sql.jdbc.ObjectResultsExtractor;
|
|
|
import org.nlpcn.es4sql.parse.ElasticSqlExprParser;
|
|
|
import org.nlpcn.es4sql.parse.SqlParser;
|
|
|
import org.nlpcn.es4sql.query.AggregationQueryAction;
|
|
|
import org.nlpcn.es4sql.query.DefaultQueryAction;
|
|
|
import org.nlpcn.es4sql.query.SqlElasticSearchRequestBuilder;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.lang.reflect.Field;
|
|
|
import java.sql.Timestamp;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* Created by chenweida on 2017/7/17.
|
|
|
* SELECT town,townName,sum(result1) result1 FROM wlyy_quota_test
|
|
|
* where quotaCode='1'
|
|
|
* group by town,townName , date_histogram(field='quotaDate','interval'='week')
|
|
|
*/
|
|
|
@Component
|
|
|
public class ElasticsearchUtil {
|
|
|
|
|
|
private Logger logger = LoggerFactory.getLogger(ElasticsearchUtil.class);
|
|
|
|
|
|
private final String commonParams = "xmijk_quota";
|
|
|
|
|
|
@Autowired
|
|
|
private ElasticFactory elasticFactory;
|
|
|
@Autowired
|
|
|
private StringRedisTemplate redisTemplate;
|
|
|
@Value("${es.type.Statistics}")
|
|
|
private String esType;
|
|
|
@Value("${es.index.Statistics}")
|
|
|
private String esIndex;
|
|
|
|
|
|
public List excute(String sql, Class clazz, String esType, String esIndex) {
|
|
|
List saveModels = new ArrayList<>();
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX");
|
|
|
SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
try {
|
|
|
//解决 group by之后默认是200的问题
|
|
|
if (sql.toLowerCase().contains("group by")) {
|
|
|
sql = sql + " limit 0,2000";
|
|
|
}
|
|
|
|
|
|
SQLExprParser parser = new ElasticSqlExprParser(sql);
|
|
|
SQLExpr expr = parser.expr();
|
|
|
SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
|
|
|
|
|
|
Select select = null;
|
|
|
select = new SqlParser().parseSelect(queryExpr);
|
|
|
|
|
|
//通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
|
|
|
AggregationQueryAction action = null;
|
|
|
DefaultQueryAction queryAction = null;
|
|
|
SqlElasticSearchRequestBuilder requestBuilder = null;
|
|
|
if (select.isAgg) {
|
|
|
//包含计算的的排序分组的
|
|
|
action = new AggregationQueryAction(elasticFactory.getTransportClient(), select);
|
|
|
requestBuilder = action.explain();
|
|
|
} else {
|
|
|
//封装成自己的Select对象
|
|
|
queryAction = new DefaultQueryAction(elasticFactory.getTransportClient(), select);
|
|
|
requestBuilder = queryAction.explain();
|
|
|
}
|
|
|
SearchResponse response = (SearchResponse) requestBuilder.get();
|
|
|
Object queryResult = null;
|
|
|
if (sql.toUpperCase().indexOf("GROUP") != -1 || sql.toUpperCase().indexOf("SUM") != -1 || select.isAgg) {
|
|
|
queryResult = response.getAggregations();
|
|
|
} else {
|
|
|
queryResult = response.getHits();
|
|
|
}
|
|
|
ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(queryResult, true);
|
|
|
List<String> heads = temp.getHeaders();
|
|
|
temp.getLines().forEach(one -> {
|
|
|
Object saveModel = null;
|
|
|
try {
|
|
|
|
|
|
saveModel = clazz.newInstance();
|
|
|
} catch (Exception e) {
|
|
|
logger.error(e.getMessage());
|
|
|
}
|
|
|
for (int i = 0; i < one.size(); i++) {
|
|
|
try {
|
|
|
String key = null;
|
|
|
Object value = one.get(i);
|
|
|
if (heads.get(i).startsWith("_")) {
|
|
|
if(heads.get(i).contains("_id")){
|
|
|
clazz.getMethod("setId", String.class).invoke(saveModel, value);
|
|
|
}
|
|
|
continue;
|
|
|
}
|
|
|
key = "set" + UpFirstStr(heads.get(i));
|
|
|
if (heads.get(i).contains("quotaDate") || heads.get(i).contains("createTime") || heads.get(i).contains("date_histogram") || heads.get(i).contains("czrq")) {
|
|
|
if (heads.get(i).contains("date_histogram")) {
|
|
|
key = "setQuotaDate";
|
|
|
}
|
|
|
if(heads.get(i).contains("czrq") && one.get(i) == null ){
|
|
|
continue;
|
|
|
}
|
|
|
try {
|
|
|
//yyyy-MM-dd'T'HH:mm:ssXX
|
|
|
value = dateFormat.parse(String.valueOf(one.get(i)));
|
|
|
} catch (Exception e) {
|
|
|
//yyyy-MM-dd HH:mm:ss
|
|
|
try {
|
|
|
value = dateFormat1.parse(String.valueOf(one.get(i)));
|
|
|
}catch (Exception e1){
|
|
|
Timestamp ts = new Timestamp(Long.parseLong(String.valueOf(one.get(i))));
|
|
|
try {
|
|
|
Date date = new Date();
|
|
|
date = ts;
|
|
|
value =date;
|
|
|
|
|
|
} catch (Exception e2) {
|
|
|
value = String.valueOf(one.get(i));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
// value = DateUtil.strToDate(String.valueOf(value).replace("T00:00:00+0800", " 00:00:00"), "yyyy-MM-dd HH:mm:ss");
|
|
|
}
|
|
|
|
|
|
if (value instanceof String) {
|
|
|
clazz.getMethod(key, String.class).invoke(saveModel, value);
|
|
|
} else if (value instanceof Integer) {
|
|
|
Field field = clazz.getDeclaredField(heads.get(i));
|
|
|
if(field.getGenericType().getTypeName().equals("java.lang.Long")) {
|
|
|
clazz.getMethod(key, Long.class).invoke(saveModel, Long.valueOf(value + ""));
|
|
|
} else {
|
|
|
clazz.getMethod(key, Integer.class).invoke(saveModel, value);
|
|
|
}
|
|
|
} else if (value instanceof Double) {
|
|
|
clazz.getMethod(key, Double.class).invoke(saveModel, value);
|
|
|
} else if (value instanceof java.util.Date) {
|
|
|
clazz.getMethod(key, java.util.Date.class).invoke(saveModel, value);
|
|
|
} else if (value instanceof java.util.List) {
|
|
|
Field field = clazz.getDeclaredField(heads.get(i));
|
|
|
if(field.getGenericType().getTypeName().equals("java.util.Set<java.lang.String>")){
|
|
|
Set<String> set = new HashSet<>();
|
|
|
for(Object s : (ArrayList) value){
|
|
|
set.add(s + "");
|
|
|
}
|
|
|
clazz.getMethod(key, java.util.Set.class).invoke(saveModel, set);
|
|
|
}else {
|
|
|
clazz.getMethod(key, java.util.List.class).invoke(saveModel, value);
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
logger.warn(e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
saveModels.add(saveModel);
|
|
|
});
|
|
|
} catch (Exception e) {
|
|
|
logger.error(e.getMessage());
|
|
|
}
|
|
|
return saveModels;
|
|
|
}
|
|
|
|
|
|
public Long excuteForLong(String sql, String esType, String esIndex) {
|
|
|
try {
|
|
|
SQLExprParser parser = new ElasticSqlExprParser(sql);
|
|
|
SQLExpr expr = parser.expr();
|
|
|
SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
|
|
|
|
|
|
Select select = null;
|
|
|
select = new SqlParser().parseSelect(queryExpr);
|
|
|
|
|
|
//通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
|
|
|
AggregationQueryAction action = null;
|
|
|
DefaultQueryAction queryAction = null;
|
|
|
SqlElasticSearchRequestBuilder requestBuilder = null;
|
|
|
if (select.isAgg) {
|
|
|
//包含计算的的排序分组的
|
|
|
action = new AggregationQueryAction(elasticFactory.getTransportClient(), select);
|
|
|
requestBuilder = action.explain();
|
|
|
} else {
|
|
|
//封装成自己的Select对象
|
|
|
queryAction = new DefaultQueryAction(elasticFactory.getTransportClient(), select);
|
|
|
requestBuilder = queryAction.explain();
|
|
|
}
|
|
|
SearchResponse response = (SearchResponse) requestBuilder.get();
|
|
|
ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(response.getAggregations(), true);
|
|
|
Long Longvalue = ((Double) temp.getLines().get(0).get(0)).longValue();
|
|
|
return Longvalue;
|
|
|
} catch (Exception e) {
|
|
|
logger.error(e.getMessage());
|
|
|
}
|
|
|
return 0L;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 首字母大写
|
|
|
*
|
|
|
* @param str
|
|
|
* @return
|
|
|
*/
|
|
|
private String UpFirstStr(String str) {
|
|
|
return str.replaceFirst(str.substring(0, 1), str.substring(0, 1).toUpperCase());
|
|
|
}
|
|
|
|
|
|
public Object excuteOneObject(String sql, Class clazz, String esType, String esIndex) {
|
|
|
try {
|
|
|
SQLExprParser parser = new ElasticSqlExprParser(sql);
|
|
|
SQLExpr expr = parser.expr();
|
|
|
SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
|
|
|
|
|
|
Select select = null;
|
|
|
select = new SqlParser().parseSelect(queryExpr);
|
|
|
|
|
|
//通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
|
|
|
AggregationQueryAction action = null;
|
|
|
DefaultQueryAction queryAction = null;
|
|
|
SqlElasticSearchRequestBuilder requestBuilder = null;
|
|
|
if (select.isAgg) {
|
|
|
//包含计算的的排序分组的
|
|
|
action = new AggregationQueryAction(elasticFactory.getTransportClient(), select);
|
|
|
requestBuilder = action.explain();
|
|
|
} else {
|
|
|
//封装成自己的Select对象
|
|
|
queryAction = new DefaultQueryAction(elasticFactory.getTransportClient(), select);
|
|
|
requestBuilder = queryAction.explain();
|
|
|
}
|
|
|
SearchResponse response = (SearchResponse) requestBuilder.get();
|
|
|
ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(response.getHits(), true);
|
|
|
List<String> heads = temp.getHeaders();
|
|
|
Object saveModel = clazz.newInstance();
|
|
|
try {
|
|
|
for (int i = 0; i < temp.getLines().get(0).size(); i++) {
|
|
|
String key = null;
|
|
|
Object value = temp.getLines().get(0).get(i);
|
|
|
if (heads.get(i).contains("createTime")) {
|
|
|
key = "setCreateTime";
|
|
|
value = DateUtil.strToDate(String.valueOf(value).replace("+0800", "").replace("T", " "), "yyyy-MM-dd HH:mm:ss");
|
|
|
} else {
|
|
|
key = "set" + UpFirstStr(heads.get(i));
|
|
|
}
|
|
|
|
|
|
if (value instanceof String) {
|
|
|
clazz.getMethod(key, String.class).invoke(saveModel, value);
|
|
|
} else if (value instanceof Integer) {
|
|
|
clazz.getMethod(key, Integer.class).invoke(saveModel, value);
|
|
|
} else if (value instanceof Double) {
|
|
|
clazz.getMethod(key, Double.class).invoke(saveModel, value);
|
|
|
} else if (value instanceof java.util.Date) {
|
|
|
clazz.getMethod(key, java.util.Date.class).invoke(saveModel, value);
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
logger.warn(e.getMessage());
|
|
|
}
|
|
|
return saveModel;
|
|
|
} catch (Exception e) {
|
|
|
logger.error(e.getMessage());
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 0级指标查询列表
|
|
|
* 获取所有指标的增量、到达量
|
|
|
* 备注:原来接口的一级指标对应现在的
|
|
|
*
|
|
|
* @param startDate 开始时间
|
|
|
* @param endDate 结束时间
|
|
|
* @param area 区域code
|
|
|
* @param level 等级
|
|
|
* @param index 指标
|
|
|
* @param timeLevel 1增量 2到达量
|
|
|
* @param interval 1日 2周 3月
|
|
|
* @param lowLevel 下一级区域等级
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public List findDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel) throws Exception {
|
|
|
|
|
|
//时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
if (StringUtils.isNotEmpty(startDate)) {
|
|
|
if (startDate.length() > 10) {
|
|
|
startDate = changeTime(startDate);
|
|
|
} else {
|
|
|
startDate = changeDate(startDate);
|
|
|
}
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(endDate)) {
|
|
|
if (endDate.length() > 10) {
|
|
|
endDate = changeTime(endDate);
|
|
|
} else {
|
|
|
endDate = changeDate(endDate);
|
|
|
}
|
|
|
}
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
String low_level = level + "";
|
|
|
if (StringUtils.isNotEmpty(lowLevel)) {
|
|
|
low_level = lowLevel;
|
|
|
}
|
|
|
if (SaveModel.doctorLevel.equals(low_level)) {
|
|
|
sql.append("select doctor,doctorName,sum(result1) result1, sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by doctor,doctorName");
|
|
|
}else if (SaveModel.deptLevel.equals(low_level)) {
|
|
|
sql.append("select dept,deptName,sum(result1) result1, sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by dept,deptName");
|
|
|
} else if (SaveModel.OrgLevel.equals(low_level)) {
|
|
|
sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by hospital,hospitalName");
|
|
|
} else if (SaveModel.townLevel.equals(low_level)) {
|
|
|
sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by town,townName");
|
|
|
} else if (SaveModel.cityLevel.equals(low_level)) {
|
|
|
sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by city,cityName");
|
|
|
}
|
|
|
|
|
|
if (StringUtils.isNotEmpty(area)) {
|
|
|
|
|
|
if (SaveModel.doctorLevel.equals(level + "")) {
|
|
|
sql.append(" doctor='" + area + "'");
|
|
|
}else if (SaveModel.deptLevel.equals(level + "")) {
|
|
|
sql.append(" dept='" + area + "'");
|
|
|
} else if (SaveModel.OrgLevel.equals(level + "")) {
|
|
|
sql.append(" hospital='" + area + "'");
|
|
|
} else if (SaveModel.townLevel.equals(level + "")) {
|
|
|
sql.append(" town='" + area + "'");
|
|
|
} else if (SaveModel.cityLevel.equals(level + "")) {
|
|
|
sql.append(" city='" + area + "'");
|
|
|
}
|
|
|
sql.append(" and ");
|
|
|
}
|
|
|
// sql.append(" quotaCode='" + index + "' ");
|
|
|
sql.append(" quotaCode in(" + index + ") ");
|
|
|
sql.append(" and timeLevel='" + timeLevel + "' ");
|
|
|
sql.append(" and areaLevel='6'");
|
|
|
if (StringUtils.isNotEmpty(startDate)) {
|
|
|
sql.append(" and quotaDate>='" + startDate + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(endDate)) {
|
|
|
sql.append(" and quotaDate<='" + endDate + "'");
|
|
|
}
|
|
|
|
|
|
|
|
|
//根据时间维度分组
|
|
|
if (StringUtils.isNotEmpty(interval)) {
|
|
|
if (SaveModel.interval_month.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
} else if (SaveModel.interval_week.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
} else if (SaveModel.interval_day.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
}
|
|
|
}
|
|
|
sql.append(groupBy);
|
|
|
|
|
|
return excute(sql.toString(), SaveModel.class, "", "");
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 一级指标查询列表
|
|
|
* 获取一级指标的增量、到达量
|
|
|
* 备注:原接口的二级指标对应现在的一级指标
|
|
|
*
|
|
|
* @param startDate 开始时间
|
|
|
* @param endDate 结束时间
|
|
|
* @param area 区域code
|
|
|
* @param level 等级
|
|
|
* @param index 指标
|
|
|
* @param timeLevel 1增量 2到达量
|
|
|
* @param slaveKey1 一级维度
|
|
|
* @param interval 1日 2周 3月
|
|
|
* @param lowLevel 下个等级
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public List findDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String interval, String lowLevel) throws Exception {
|
|
|
|
|
|
//时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
if (StringUtils.isNotEmpty(startDate)) {
|
|
|
if (startDate.length() > 10) {
|
|
|
startDate = changeTime(startDate);
|
|
|
} else {
|
|
|
startDate = changeDate(startDate);
|
|
|
}
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(endDate)) {
|
|
|
if (endDate.length() > 10) {
|
|
|
endDate = changeTime(endDate);
|
|
|
} else {
|
|
|
endDate = changeDate(endDate);
|
|
|
}
|
|
|
}
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
String low_level = level + "";
|
|
|
if (StringUtils.isNotEmpty(lowLevel)) {
|
|
|
low_level = lowLevel;
|
|
|
}
|
|
|
if (SaveModel.doctorLevel.equals(low_level)) {
|
|
|
sql.append("select doctor,doctorName,slaveKey1,slaveKey1Name,sum(result1) result1, sum(result2) result2,quotaDate from " + esIndex + " where ");
|
|
|
groupBy.append(" group by doctor,doctorName");
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)&&!slaveKey1.contains(",")&&(!org.springframework.util.StringUtils.isEmpty(slaveKey1) || commonParams.equals(slaveKey1))) {
|
|
|
groupBy.append(",slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
}
|
|
|
if (SaveModel.deptLevel.equals(low_level)) {
|
|
|
sql.append("select dept,deptName,slaveKey1,slaveKey1Name,sum(result1) result1, sum(result2) result2,quotaDate from " + esIndex + " where ");
|
|
|
groupBy.append(" group by dept,deptName");
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)&&!slaveKey1.contains(",")&&(!org.springframework.util.StringUtils.isEmpty(slaveKey1) || commonParams.equals(slaveKey1))) {
|
|
|
groupBy.append(",slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
} else if (SaveModel.OrgLevel.equals(low_level)) {
|
|
|
sql.append("select hospital,hospitalName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2,quotaDate from " + esIndex + " where ");
|
|
|
groupBy.append(" group by hospital,hospitalName");
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)&&!slaveKey1.contains(",")&&(!org.springframework.util.StringUtils.isEmpty(slaveKey1) || commonParams.equals(slaveKey1))) {
|
|
|
groupBy.append(",slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
} else if (SaveModel.townLevel.equals(low_level)) {
|
|
|
sql.append("select town,townName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2,quotaDate from " + esIndex + " where ");
|
|
|
groupBy.append(" group by town,townName");
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)&&!slaveKey1.contains(",")&&(!org.springframework.util.StringUtils.isEmpty(slaveKey1) || commonParams.equals(slaveKey1))) {
|
|
|
groupBy.append(",slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
} else if (SaveModel.cityLevel.equals(low_level)) {
|
|
|
sql.append("select city,cityName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2,quotaDate from " + esIndex + " where ");
|
|
|
groupBy.append(" group by city,cityName");
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey1)&&!slaveKey1.contains(",")&&(!org.springframework.util.StringUtils.isEmpty(slaveKey1) || commonParams.equals(slaveKey1))) {
|
|
|
groupBy.append(",slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (StringUtils.isNotEmpty(area)) {
|
|
|
if (SaveModel.doctorLevel.equals(level + "")) {
|
|
|
sql.append(" doctor='" + area + "'");
|
|
|
}else if (SaveModel.deptLevel.equals(level + "")) {
|
|
|
sql.append(" dept='" + area + "'");
|
|
|
} else if (SaveModel.OrgLevel.equals(level + "")) {
|
|
|
sql.append(" hospital='" + area + "'");
|
|
|
} else if (SaveModel.townLevel.equals(level + "")) {
|
|
|
sql.append(" town='" + area + "'");
|
|
|
} else if (SaveModel.cityLevel.equals(level + "")) {
|
|
|
sql.append(" city='" + area + "'");
|
|
|
}
|
|
|
sql.append(" and ");
|
|
|
}
|
|
|
// sql.append(" quotaCode='" + index + "' ");
|
|
|
sql.append(" quotaCode in(" + index + ") ");
|
|
|
sql.append(" and timeLevel='" + timeLevel + "' ");
|
|
|
sql.append(" and areaLevel='6'");
|
|
|
if (StringUtils.isNotEmpty(startDate)) {
|
|
|
sql.append(" and quotaDate>='" + startDate + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(endDate)) {
|
|
|
sql.append(" and quotaDate<='" + endDate + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(slaveKey1) && !commonParams.equals(slaveKey1)) {
|
|
|
String[] temp = slaveKey1.split(",");
|
|
|
String slaveKey1Temp = "";
|
|
|
for(String one : temp){
|
|
|
slaveKey1Temp += ",'"+one+"'";
|
|
|
}
|
|
|
sql.append(" and slaveKey1 in ("+slaveKey1Temp.substring(1)+")");
|
|
|
}
|
|
|
|
|
|
//根据时间维度分组
|
|
|
if (StringUtils.isNotEmpty(interval)) {
|
|
|
if (SaveModel.interval_month.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
} else if (SaveModel.interval_week.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
} else if (SaveModel.interval_day.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
}
|
|
|
}
|
|
|
sql.append(groupBy);
|
|
|
|
|
|
return excute(sql.toString(), SaveModel.class, "", "");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 二级指标查询列表
|
|
|
* 获取二级指标的增量、到达量
|
|
|
* 备注:原接口的三级指标对应现在的二级指标
|
|
|
*
|
|
|
* @param startDate 开始时间
|
|
|
* @param endDate 结束时间
|
|
|
* @param area 区域code
|
|
|
* @param level 等级
|
|
|
* @param index 指标
|
|
|
* @param timeLevel 1增量 2到达量
|
|
|
* @param slaveKey1 一级维度code
|
|
|
* @param slaveKey2 二级维度code
|
|
|
* @param interval 1日 2周 3月
|
|
|
* @param lowLevel 下一等级
|
|
|
* @return
|
|
|
*/
|
|
|
public List findDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String slaveKey2, String interval, String lowLevel) {
|
|
|
|
|
|
//时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
if (StringUtils.isNotEmpty(startDate)) {
|
|
|
if (startDate.length() > 10) {
|
|
|
startDate = changeTime(startDate);
|
|
|
} else {
|
|
|
startDate = changeDate(startDate);
|
|
|
}
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(endDate)) {
|
|
|
if (endDate.length() > 10) {
|
|
|
endDate = changeTime(endDate);
|
|
|
} else {
|
|
|
endDate = changeDate(endDate);
|
|
|
}
|
|
|
}
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
String low_level = level + "";
|
|
|
if (StringUtils.isNotEmpty(lowLevel)) {
|
|
|
low_level = lowLevel;
|
|
|
}
|
|
|
if (SaveModel.doctorLevel.equals(low_level)) {
|
|
|
sql.append("select doctor,doctorName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by doctor,doctorName");
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey1) || commonParams.equals(slaveKey1)) {
|
|
|
groupBy.append(",slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey2) || commonParams.equals(slaveKey2)) {
|
|
|
groupBy.append(",slaveKey2,slaveKey2Name");
|
|
|
}
|
|
|
}else if (SaveModel.deptLevel.equals(low_level)) {
|
|
|
sql.append("select dept,deptName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by dept,deptName");
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey1) || commonParams.equals(slaveKey1)) {
|
|
|
groupBy.append(",slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey2) || commonParams.equals(slaveKey2)) {
|
|
|
groupBy.append(",slaveKey2,slaveKey2Name");
|
|
|
}
|
|
|
} else if (SaveModel.OrgLevel.equals(low_level)) {
|
|
|
sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by hospital,hospitalName");
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey1) || commonParams.equals(slaveKey1)) {
|
|
|
groupBy.append(",slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey2) || commonParams.equals(slaveKey2)) {
|
|
|
groupBy.append(",slaveKey2,slaveKey2Name");
|
|
|
}
|
|
|
} else if (SaveModel.townLevel.equals(low_level)) {
|
|
|
sql.append("select town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by town,townName");
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey1) || commonParams.equals(slaveKey1)) {
|
|
|
groupBy.append(",slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey2) || commonParams.equals(slaveKey2)) {
|
|
|
groupBy.append(",slaveKey2,slaveKey2Name");
|
|
|
}
|
|
|
} else if (SaveModel.cityLevel.equals(low_level)) {
|
|
|
sql.append("select city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by city,cityName");
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey1) || commonParams.equals(slaveKey1)) {
|
|
|
groupBy.append(",slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(slaveKey2) || commonParams.equals(slaveKey2)) {
|
|
|
groupBy.append(",slaveKey2,slaveKey2Name");
|
|
|
}
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(area)) {
|
|
|
|
|
|
if (SaveModel.doctorLevel.equals(level + "")) {
|
|
|
sql.append(" doctor='" + area + "'");
|
|
|
}else if (SaveModel.deptLevel.equals(level + "")) {
|
|
|
sql.append(" dept='" + area + "'");
|
|
|
} else if (SaveModel.OrgLevel.equals(level + "")) {
|
|
|
sql.append(" hospital='" + area + "'");
|
|
|
} else if (SaveModel.townLevel.equals(level + "")) {
|
|
|
sql.append(" town='" + area + "'");
|
|
|
} else if (SaveModel.cityLevel.equals(level + "")) {
|
|
|
sql.append(" city='" + area + "'");
|
|
|
}
|
|
|
sql.append(" and ");
|
|
|
}
|
|
|
sql.append(" quotaCode in(" + index + ") ");
|
|
|
sql.append(" and timeLevel='" + timeLevel + "' ");
|
|
|
sql.append(" and areaLevel='6'");
|
|
|
if (StringUtils.isNotEmpty(startDate)) {
|
|
|
sql.append(" and quotaDate>='" + startDate + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(endDate)) {
|
|
|
sql.append(" and quotaDate<='" + endDate + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(slaveKey1) && (!commonParams.equals(slaveKey1))) {
|
|
|
String[] str = slaveKey1.split(",");
|
|
|
StringBuffer buffer = new StringBuffer();
|
|
|
for (int i=0;i<str.length;i++){
|
|
|
buffer.append("'"+str[i]+"',");
|
|
|
}
|
|
|
buffer.deleteCharAt(buffer.length()-1);
|
|
|
sql.append(" and slaveKey1 in (" + buffer + ")");
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(slaveKey2) && (!commonParams.equals(slaveKey2))) {
|
|
|
String[] str = slaveKey2.split(",");
|
|
|
StringBuffer buffer = new StringBuffer();
|
|
|
for (int i=0;i<str.length;i++){
|
|
|
buffer.append("'"+str[i]+"',");
|
|
|
}
|
|
|
buffer.deleteCharAt(buffer.length()-1);
|
|
|
sql.append(" and slaveKey2 in (" + buffer + ")");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
//根据时间维度分组
|
|
|
if (StringUtils.isNotEmpty(interval)) {
|
|
|
if (SaveModel.interval_month.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
} else if (SaveModel.interval_week.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
} else if (SaveModel.interval_day.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
}
|
|
|
}
|
|
|
sql.append(groupBy);
|
|
|
return excute(sql.toString(), SaveModel.class, "", "");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
*
|
|
|
* @param quotaDate
|
|
|
*/
|
|
|
public String changeDate(String quotaDate) {
|
|
|
try {
|
|
|
quotaDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd").parse(quotaDate));
|
|
|
} catch (ParseException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return quotaDate;
|
|
|
}
|
|
|
|
|
|
public String changeTime(String time) {
|
|
|
try {
|
|
|
if (time.length() == 10) {
|
|
|
time = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd").parse(time));
|
|
|
} else if (time.length() == 19) {
|
|
|
time = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time));
|
|
|
}
|
|
|
} catch (ParseException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return time;
|
|
|
}
|
|
|
|
|
|
//获取最新更新的时间
|
|
|
public String getQuotaTime() {
|
|
|
String date = redisTemplate.opsForValue().get("quota:date");
|
|
|
// date = date.replace(" ","T")+"+0800";
|
|
|
try {
|
|
|
date = new SimpleDateFormat("yyyy-MM-dd").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date));
|
|
|
} catch (ParseException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return date;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取一个指标下所有一级维度按维度分组的数据
|
|
|
*
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param timeLevel
|
|
|
* @param interval
|
|
|
* @param lowLevel
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public List findDateAllQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel) throws Exception {
|
|
|
|
|
|
//时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
if (StringUtils.isNotEmpty(startDate)) {
|
|
|
if (startDate.length() > 10) {
|
|
|
startDate = changeTime(startDate);
|
|
|
} else {
|
|
|
startDate = changeDate(startDate);
|
|
|
}
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(endDate)) {
|
|
|
if (endDate.length() > 10) {
|
|
|
endDate = changeTime(endDate);
|
|
|
} else {
|
|
|
endDate = changeDate(endDate);
|
|
|
}
|
|
|
}
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
String low_level = level + "";
|
|
|
if (StringUtils.isNotEmpty(lowLevel)) {
|
|
|
low_level = lowLevel;
|
|
|
}
|
|
|
if (SaveModel.doctorLevel.equals(low_level)) {
|
|
|
sql.append("select doctor,doctorName,slaveKey1,slaveKey1Name,sum(result1) result1, sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by doctor,doctorName,slaveKey1,slaveKey1Name");
|
|
|
}else if (SaveModel.deptLevel.equals(low_level)) {
|
|
|
sql.append("select dept,deptName,slaveKey1,slaveKey1Name,sum(result1) result1, sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by dept,deptName,slaveKey1,slaveKey1Name");
|
|
|
} else if (SaveModel.OrgLevel.equals(low_level)) {
|
|
|
sql.append("select hospital,hospitalName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by hospital,hospitalName,slaveKey1,slaveKey1Name");
|
|
|
} else if (SaveModel.townLevel.equals(low_level)) {
|
|
|
sql.append("select town,townName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by town,townName,slaveKey1,slaveKey1Name");
|
|
|
} else if (SaveModel.cityLevel.equals(low_level)) {
|
|
|
sql.append("select city,cityName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by city,cityName,slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
|
|
|
if (StringUtils.isNotEmpty(area)) {
|
|
|
if (SaveModel.doctorLevel.equals(level + "")) {
|
|
|
sql.append(" doctor='" + area + "'");
|
|
|
}else if (SaveModel.deptLevel.equals(level + "")) {
|
|
|
sql.append(" dept='" + area + "'");
|
|
|
} else if (SaveModel.OrgLevel.equals(level + "")) {
|
|
|
sql.append(" hospital='" + area + "'");
|
|
|
} else if (SaveModel.townLevel.equals(level + "")) {
|
|
|
sql.append(" town='" + area + "'");
|
|
|
} else if (SaveModel.cityLevel.equals(level + "")) {
|
|
|
sql.append(" city='" + area + "'");
|
|
|
}
|
|
|
sql.append(" and ");
|
|
|
}
|
|
|
sql.append(" quotaCode='" + index + "' ");
|
|
|
sql.append(" and timeLevel='" + timeLevel + "' ");
|
|
|
sql.append(" and areaLevel='6'");
|
|
|
if (StringUtils.isNotEmpty(startDate)) {
|
|
|
sql.append(" and quotaDate>='" + startDate + "'");
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(endDate)) {
|
|
|
sql.append(" and quotaDate<='" + endDate + "'");
|
|
|
}
|
|
|
|
|
|
//根据时间维度分组
|
|
|
if (StringUtils.isNotEmpty(interval)) {
|
|
|
if (SaveModel.interval_month.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
} else if (SaveModel.interval_week.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
} else if (SaveModel.interval_day.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00','alias'='quotaDate') ");
|
|
|
}
|
|
|
}
|
|
|
sql.append(groupBy);
|
|
|
|
|
|
return excute(sql.toString(), SaveModel.class, "", "");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 0级维度
|
|
|
* 查询某一天某一个0级维度的指标
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @return
|
|
|
*/
|
|
|
public SaveModel findOneDateQuotaLevel0(String quotaDate, String area, int level, String index, String timelevel) throws Exception {
|
|
|
List list = findDateQuotaLevel0(quotaDate, quotaDate, area, level, index, timelevel, null, null);
|
|
|
return (SaveModel) list.get(0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 0级维度
|
|
|
* 查询某个时间区间某一个0级维度的指标
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd
|
|
|
* @param endDate 结束时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5科室 6医生
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @return
|
|
|
*/
|
|
|
public SaveModel findOneDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timelevel) throws Exception {
|
|
|
List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, null, null);
|
|
|
return (SaveModel) list.get(0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 1级维度
|
|
|
* 查询某一天某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5科室 6医生
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @param slaveKey1 一级维度的key 不传返回全部
|
|
|
* @return
|
|
|
*/
|
|
|
public SaveModel findOneDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, null, null);
|
|
|
if (list.size() > 0) {
|
|
|
return (SaveModel) list.get(0);
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 1级维度
|
|
|
* 查询某一天某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5科室 6医生
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @return
|
|
|
*/
|
|
|
public SaveModel findOneDateQuotaLevel1NoSlaveKey1(String quotaDate, String area, int level, String index, String timelevel) throws Exception {
|
|
|
List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel, null, null, null);
|
|
|
return (SaveModel) list.get(0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 1级维度
|
|
|
* 查询某一个时间区间某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者
|
|
|
*
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param timelevel
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public SaveModel findOneDateQuotaLevel1NoSlaveKey1(String startDate, String endDate, String area, int level, String index, String timelevel) throws Exception {
|
|
|
List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, null, null, null);
|
|
|
return (SaveModel) list.get(0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 1级维度
|
|
|
* 查询某个时间区间某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd
|
|
|
* @param endDate 结束时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5科室 6团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @param slaveKey1 一级维度的key 不传返回全部
|
|
|
* @return
|
|
|
*/
|
|
|
public SaveModel findOneDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, slaveKey1, null, null);
|
|
|
return (SaveModel) list.get(0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 1级维度
|
|
|
* 查询某一天某一个所有1级维度下的指标 例如某个机构下的所有维度的患者列表
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findOneDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel) throws Exception {
|
|
|
List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel, commonParams, null, null);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 1级维度
|
|
|
* 查询某一天某一个所有1级维度下的指标 例如某个机构下的所有维度的患者列表
|
|
|
*
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findOneDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel) throws Exception {
|
|
|
List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, commonParams, null, null);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 2级维度
|
|
|
* 查询某一天某一个2级维度的某个1级维度和2级维度下的指标 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @param slaveKey1 一级维度的key
|
|
|
* @param slaveKey2 二级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findOneDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1, String slaveKey2) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey2)) {
|
|
|
slaveKey2 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, null);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据2级维度的2级指标去聚合 没有一级维度
|
|
|
* 查询某一天某一个2级维度的某个1级维度和2级维度下的指标 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @param slaveKey2 二级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public SaveModel findOneDateQuotaLevel2NoSlaveKey1(String quotaDate, String area, int level, String index, String timelevel, String slaveKey2) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey2)) {
|
|
|
slaveKey2 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, null, slaveKey2, null, null);
|
|
|
return (SaveModel) list.get(0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据2级维度的1级指标去聚合 没有2级维度
|
|
|
* 查询某一天某一个2级维度的某个1级维度和2级维度下的指标 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @param slaveKey1 二级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public SaveModel findOneDateQuotaLevel2NoSlaveKey2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, null, null, null);
|
|
|
return (SaveModel) list.get(0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 2级维度
|
|
|
* 查询某个时间区间某一个2级维度的某个1级维度和2级维度下的指标 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd
|
|
|
* @param endDate 结束时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @param slaveKey1 一级维度的key
|
|
|
* @param slaveKey2 二级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public SaveModel findOneDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1, String slaveKey2) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey2)) {
|
|
|
slaveKey2 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, null);
|
|
|
return calculateResult(list);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 对ES查询出来的结果的result1进行求和计算(可能有多条记录)
|
|
|
* @param list
|
|
|
* @return
|
|
|
*/
|
|
|
private SaveModel calculateResult(List<SaveModel> list) {
|
|
|
SaveModel saveModel = list.get(0);
|
|
|
double sum = list.stream().mapToDouble(SaveModel::getResult1).sum();
|
|
|
double sum2 = list.stream().mapToDouble(SaveModel::getResult2).sum();
|
|
|
saveModel.setResult1(sum);
|
|
|
saveModel.setResult2(sum2);
|
|
|
return saveModel;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 2级维度
|
|
|
* 查询某个时间区间某一个2级维度的某个1级维度和2级维度下的指标 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd
|
|
|
* @param endDate 结束时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @param slaveKey1 一级维度的key
|
|
|
* @param slaveKey2 二级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public SaveModel findOneDateQuotaLevel3(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1, String slaveKey2) throws Exception {
|
|
|
List<SaveModel> list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, null);
|
|
|
SaveModel saveModel =(SaveModel) list.get(0);
|
|
|
double result1 = 0L;
|
|
|
double result2 = 0L;
|
|
|
for (SaveModel saveModel1:list){
|
|
|
result1+=saveModel1.getResult1();
|
|
|
result2+=saveModel1.getResult2();
|
|
|
}
|
|
|
saveModel.setResult1(result1);
|
|
|
saveModel.setResult1(result2);
|
|
|
return saveModel;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 2级维度
|
|
|
* 查询某一天某个1级维度下所有2级维度的指标 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd
|
|
|
* @param area code 厦门市 350200
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel // 1日 2年
|
|
|
* @param slaveKey1 一级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findOneDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, commonParams, null, null);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 折线图
|
|
|
* 0级维度
|
|
|
* 查询某个0级维度的指标折线图
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd 包含头
|
|
|
* @param endDate 结束时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param interval 1日 2周 3月 (按照日周月聚合)
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public List<SaveModel> findLineChartDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timelevel, String interval) throws Exception {
|
|
|
List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, interval, null);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 折线图
|
|
|
* 1级维度
|
|
|
* 查询某个1级维度的某个1级维度下的折线图 例如查询65岁以上患者
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd 包含头
|
|
|
* @param endDate 结束时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param interval 1日 2周 3月 (按照日周月聚合)
|
|
|
* @param slaveKey1 一级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findLineChartDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey1) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, slaveKey1, interval, null);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 折线图
|
|
|
* 1级维度
|
|
|
* 查询某个1级维度的某个1级维度下的折线图 例如查询65岁以上患者
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd 包含头
|
|
|
* @param endDate 结束时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param interval 1日 2周 3月 (按照日周月聚合)
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findLineChartDateQuotaLevel1NoSlaveKey1(String startDate, String endDate, String area, int level, String index, String timelevel, String interval) throws Exception {
|
|
|
List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, null, interval, null);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 折线图
|
|
|
* 2级维度
|
|
|
* 查询某个2级维度的某个1级维度和2级维度下的折线图 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd 包含头
|
|
|
* @param endDate 结束时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param interval 1日 2周 3月 (按照日周月聚合)
|
|
|
* @param slaveKey1 一级维度的key
|
|
|
* @param slaveKey2 二级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findLineChartDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey1, String slaveKey2) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey2)) {
|
|
|
slaveKey2 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, slaveKey1, slaveKey2, interval, null);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
public List<SaveModel> findLineChartDateQuotaLevel3(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey1, String slaveKey2) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, slaveKey1, slaveKey2, interval, null);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 折线图
|
|
|
* 2级维度只根绝第二个指标聚合
|
|
|
* 查询某个2级维度的某个1级维度和2级维度下的折线图 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd 包含头
|
|
|
* @param endDate 结束时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param interval 1日 2周 3月 (按照日周月聚合)
|
|
|
* @param slaveKey2 二级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findLineChartDateQuotaLevel2NoSlaveKey1(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey2) throws Exception {
|
|
|
List list = findLineChartDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, interval, null, slaveKey2);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 折线图
|
|
|
* 2级维度只根绝第一个指标聚合
|
|
|
* 查询某个2级维度的某个1级维度和2级维度下的折线图 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd 包含头
|
|
|
* @param endDate 结束时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param interval 1日 2周 3月 (按照日周月聚合)
|
|
|
* @param slaveKey1 一级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findLineChartDateQuotaLevel2NoSlaveKey2(String startDate, String endDate, String area, int level, String index, String timelevel, String interval, String slaveKey1) throws Exception {
|
|
|
List list = findLineChartDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, interval, slaveKey1, null);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 折线图
|
|
|
* 2级维度只根绝第一个指标聚合
|
|
|
* 查询某个2级维度的某个1级维度和2级维度下的折线图 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd 包含头
|
|
|
* @param endDate 结束时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param interval 1日 2周 3月 (按照日周月聚合)
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findLineChartDateQuotaLevel2NoSlaveKey1NoSlaveKey2(String startDate, String endDate, String area, int level, String index, String timelevel, String interval) throws Exception {
|
|
|
List list = findLineChartDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, interval, null, null);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 列表
|
|
|
* 0级维度
|
|
|
* 查询某一天某个0级维度的指标列表
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public List<SaveModel> findListDateQuotaLevel0(String quotaDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception {
|
|
|
List list = findDateQuotaLevel0(quotaDate, quotaDate, area, level, index, timelevel, null, lowLevel);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 列表
|
|
|
* 0级维度
|
|
|
* 查询某个区间某个0级维度的指标列表
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd 包含头
|
|
|
* @param endDate 结束时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队.
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public List<SaveModel> findListDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception {
|
|
|
List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, null, lowLevel);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 列表
|
|
|
* 1级维度
|
|
|
* 查询某个1级维度的某个1级维度下的列表 例如查询65岁以上患者
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param slaveKey1 一级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findListDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, null, lowLevel);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 列表
|
|
|
* 1级维度
|
|
|
* 查询某个1级维度的某个1级维度下的列表 例如查询65岁以上患者
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findListDateQuotaLevel1NoSlaveKey1(String quotaDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception {
|
|
|
List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel, null, null, lowLevel);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 列表
|
|
|
* 1级维度
|
|
|
* 查询某个区间某个1级维度的某个1级维度下的列表 例如查询65岁以上患者
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd 包含头
|
|
|
* @param endDate 结束时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param slaveKey1 一级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findListDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, slaveKey1, null, lowLevel);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 列表
|
|
|
* 2级维度
|
|
|
* 查询某个2级维度的某个1级维度和2级维度下的列表 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param quotaDate 时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param slaveKey1 一级维度的key
|
|
|
* @param slaveKey2 二级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findListDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1, String slaveKey2) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey2)) {
|
|
|
slaveKey2 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, lowLevel);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
public List<SaveModel> findListDateQuotaLevel2NoSlaveKey1(String quotaDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey2) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey2)) {
|
|
|
slaveKey2 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, null, slaveKey2, null, lowLevel);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
public List<SaveModel> findListDateQuotaLevel2NoSlaveKey2(String quotaDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, slaveKey1, null, null, lowLevel);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
public List<SaveModel> findListDateQuotaLevel2NoSlaveKey1NoSlaveKey2(String quotaDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception {
|
|
|
List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel, null, null, null, lowLevel);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 列表
|
|
|
* 2级维度
|
|
|
* 查询某个区间某个2级维度的某个1级维度和2级维度下的列表 例如查询65岁以上的高血压患者
|
|
|
*
|
|
|
* @param startDate 开始时间 yyyy-mm-dd 包含头
|
|
|
* @param endDate 结束时间 yyyy-mm-dd 包含头
|
|
|
* @param area code 厦门市 350200 code 和level是对应的
|
|
|
* @param level 等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param index 指标code
|
|
|
* @param timelevel 1增量 2到达量(按照年度)
|
|
|
* @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队
|
|
|
* @param slaveKey1 一级维度的key
|
|
|
* @param slaveKey2 二级维度的key
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SaveModel> findListDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timelevel, String lowLevel, String slaveKey1, String slaveKey2) throws Exception {
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey1)) {
|
|
|
slaveKey1 = commonParams;
|
|
|
}
|
|
|
if (org.springframework.util.StringUtils.isEmpty(slaveKey2)) {
|
|
|
slaveKey2 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, slaveKey1, slaveKey2, null, lowLevel);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 将参数转换成需要的SaveModel里的标识
|
|
|
*
|
|
|
* @param level 等级 5 市 4区 3社区 2科室 1医生
|
|
|
* 转换后的level 等级 2 市 3区 4社区 5团队
|
|
|
* @return
|
|
|
* @author zhangdan
|
|
|
* @time 2017-10-18
|
|
|
*/
|
|
|
public int changeLevel(int level) {
|
|
|
int resultLevel = 0;
|
|
|
if (level == 1) {
|
|
|
//团队转成SaveModel里的标识
|
|
|
resultLevel = Integer.valueOf(SaveModel.doctorLevel);
|
|
|
}else if (level == 2) {
|
|
|
//团队转成SaveModel里的标识
|
|
|
resultLevel = Integer.valueOf(SaveModel.deptLevel);
|
|
|
} else if (level == 3) {
|
|
|
//社区转成SaveModel里的标识
|
|
|
resultLevel = Integer.valueOf(SaveModel.OrgLevel);
|
|
|
} else if (level == 4) {
|
|
|
//区转成SaveModel里的标识
|
|
|
resultLevel = Integer.valueOf(SaveModel.townLevel);
|
|
|
} else if (level == 5) {
|
|
|
//市转成SaveModel里的标识
|
|
|
resultLevel = Integer.valueOf(SaveModel.cityLevel);
|
|
|
}
|
|
|
if (resultLevel == 0) {
|
|
|
resultLevel = level;
|
|
|
}
|
|
|
return resultLevel;
|
|
|
}
|
|
|
|
|
|
public List<Map<String, Object>> excuteDataModel(String sql) {
|
|
|
List<Map<String, Object>> returnModels = new ArrayList<>();
|
|
|
try {
|
|
|
SQLExprParser parser = new ElasticSqlExprParser(sql);
|
|
|
SQLExpr expr = parser.expr();
|
|
|
SQLQueryExpr queryExpr = (SQLQueryExpr) expr;
|
|
|
// if (parser.getLexer().token() != Token.EOF) {
|
|
|
// throw new ParserException("illegal sql expr : " + sql);
|
|
|
// }
|
|
|
Select select = null;
|
|
|
select = new SqlParser().parseSelect(queryExpr);
|
|
|
|
|
|
//通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等
|
|
|
AggregationQueryAction action = null;
|
|
|
DefaultQueryAction queryAction = null;
|
|
|
SqlElasticSearchRequestBuilder requestBuilder = null;
|
|
|
if (select.isAgg) {
|
|
|
//包含计算的的排序分组的
|
|
|
action = new AggregationQueryAction(elasticFactory.getTransportClient(), select);
|
|
|
requestBuilder = action.explain();
|
|
|
} else {
|
|
|
//封装成自己的Select对象
|
|
|
Client client = elasticFactory.getTransportClient();
|
|
|
queryAction = new DefaultQueryAction(client, select);
|
|
|
requestBuilder = queryAction.explain();
|
|
|
}
|
|
|
SearchResponse response = (SearchResponse) requestBuilder.get();
|
|
|
Object queryResult = null;
|
|
|
if (sql.toUpperCase().indexOf("GROUP") != -1 || sql.toUpperCase().indexOf("SUM") != -1) {
|
|
|
queryResult = response.getAggregations();
|
|
|
} else {
|
|
|
queryResult = response.getHits();
|
|
|
}
|
|
|
ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(queryResult, true);
|
|
|
List<String> heads = temp.getHeaders();
|
|
|
temp.getLines().stream().forEach(one -> {
|
|
|
try {
|
|
|
Map<String, Object> oneMap = new HashMap<String, Object>();
|
|
|
for (int i = 0; i < one.size(); i++) {
|
|
|
String key = null;
|
|
|
Object value = one.get(i);
|
|
|
key = heads.get(i);
|
|
|
oneMap.put(key, value);
|
|
|
}
|
|
|
returnModels.add(oneMap);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
});
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return returnModels;
|
|
|
}
|
|
|
|
|
|
public List findDateQuotaWithoutLevel(String startDate, String endDate, String index, String slaveKey) throws Exception {
|
|
|
//时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
if (StringUtils.isNotEmpty(startDate)) {
|
|
|
if (startDate.length() > 10) {
|
|
|
startDate = changeTime(startDate);
|
|
|
} else {
|
|
|
startDate = changeDate(startDate);
|
|
|
}
|
|
|
}
|
|
|
if (StringUtils.isNotEmpty(endDate)) {
|
|
|
if (endDate.length() > 10) {
|
|
|
endDate = changeTime(endDate);
|
|
|
} else {
|
|
|
endDate = changeDate(endDate);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
StringBuffer sb = new StringBuffer();
|
|
|
sb.append("select sum(result1) result1,sum(result2) result2 from ").append(esIndex)
|
|
|
.append(" where city='350200' and quotaCode in(").append(index)
|
|
|
.append(") and timeLevel='1' and areaLevel='6' and quotaDate>='").append(startDate).append("' ");
|
|
|
sb.append("and quotaDate<='").append(endDate).append("'");
|
|
|
if (StringUtils.isNotEmpty(slaveKey)) {
|
|
|
sb.append(" and slaveKey1='").append(slaveKey).append("'");
|
|
|
}
|
|
|
sb.append(" group by town,townName,hospital,hospitalName order by town,townName, hospital,hospitalName");
|
|
|
|
|
|
return excute(sb.toString(), SaveModel.class, "", "");
|
|
|
}
|
|
|
}
|