|
@ -2,10 +2,14 @@ package com.yihu.wlyy.statistics.util;
|
|
|
|
|
|
import com.alibaba.druid.sql.ast.SQLExpr;
|
|
|
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
|
|
|
import com.alibaba.druid.sql.parser.ParserException;
|
|
|
import com.alibaba.druid.sql.parser.SQLExprParser;
|
|
|
import com.alibaba.druid.sql.parser.Token;
|
|
|
import com.yihu.wlyy.statistics.etl.save.es.ElasticFactory;
|
|
|
import com.yihu.wlyy.statistics.vo.SaveModel;
|
|
|
import org.elasticsearch.action.search.SearchResponse;
|
|
|
import org.elasticsearch.client.Client;
|
|
|
import org.elasticsearch.search.SearchHit;
|
|
|
import org.nlpcn.es4sql.domain.Select;
|
|
|
import org.nlpcn.es4sql.jdbc.ObjectResult;
|
|
|
import org.nlpcn.es4sql.jdbc.ObjectResultsExtractor;
|
|
@ -254,7 +258,7 @@ public class ElasticsearchUtil {
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
//根据 childAreaLevel group by
|
|
|
if (SaveModel.teamLevel.equals(childAreaLevel)) {
|
|
|
sql.append("select team,teamName,result1,result2 from wlyy_quota_test where '");
|
|
|
sql.append("select team,teamName,result1,result2 from wlyy_quota_test where ");
|
|
|
} else if (SaveModel.OrgLevel.equals(childAreaLevel)) {
|
|
|
sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where ");
|
|
|
groupBy.append(" group by hospital,hospitalName");
|
|
@ -305,7 +309,9 @@ public class ElasticsearchUtil {
|
|
|
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);
|
|
|
|
|
@ -319,11 +325,13 @@ public class ElasticsearchUtil {
|
|
|
requestBuilder = action.explain();
|
|
|
} else {
|
|
|
//封装成自己的Select对象
|
|
|
queryAction = new DefaultQueryAction(elasticFactory.getTransportClient(), select);
|
|
|
Client client = elasticFactory.getTransportClient();
|
|
|
queryAction = new DefaultQueryAction(client, select);
|
|
|
requestBuilder = queryAction.explain();
|
|
|
}
|
|
|
SearchResponse response = (SearchResponse) requestBuilder.get();
|
|
|
ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(response.getAggregations(), true);
|
|
|
// ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(response.getAggregations(), true);
|
|
|
ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(response.getHits(), true);
|
|
|
List<String> heads = temp.getHeaders();
|
|
|
temp.getLines().stream().forEach(one -> {
|
|
|
try {
|
|
@ -331,6 +339,9 @@ public class ElasticsearchUtil {
|
|
|
for (int i = 0; i < one.size(); i++) {
|
|
|
String key = null;
|
|
|
Object value = one.get(i);
|
|
|
if(heads.get(i).startsWith("_")){
|
|
|
continue;
|
|
|
}
|
|
|
if (heads.get(i).contains("date_histogram")) {
|
|
|
key = "setQuotaDate";
|
|
|
value=DateUtil.strToDate(String.valueOf(value),"yyyy-MM-dd HH:mm:ss");
|