Commit e63ee483 authored by tianyiming's avatar tianyiming

feat(statistics): 完善设备技术参数相关查询

parent 2aefe430
......@@ -37,6 +37,8 @@ import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermsQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -294,7 +296,10 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
// 排序
if (!ObjectUtils.isEmpty(filter.get("sort"))) {
JSONObject sort = JSONObject.parseObject(JSONObject.toJSONString(filter.get("sort")));
builder.sort(sort.getString("field"), sort.getString("order").equals("desc") ? SortOrder.DESC : SortOrder.ASC);
String field = sort.getString("filed");
SortOrder sortOrder = sort.getString("order").equals("desc") ? SortOrder.DESC : SortOrder.ASC;
FieldSortBuilder sortBuilder = SortBuilders.fieldSort(field + ".keyword").order(sortOrder);
builder.sort(sortBuilder);
}
builder.query(boolMust);
builder.from((current - 1) * size);
......@@ -412,7 +417,10 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
// 排序
if (!ObjectUtils.isEmpty(filter.get("sort"))) {
JSONObject sort = JSONObject.parseObject(JSONObject.toJSONString(filter.get("sort")));
builder.sort(sort.getString("field"), sort.getString("order").equals("desc") ? SortOrder.DESC : SortOrder.ASC);
String field = sort.getString("filed");
SortOrder sortOrder = sort.getString("order").equals("desc") ? SortOrder.DESC : SortOrder.ASC;
FieldSortBuilder sortBuilder = SortBuilders.fieldSort(field + ".keyword").order(sortOrder);
builder.sort(sortBuilder);
}
builder.query(boolMust);
......@@ -461,7 +469,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
String orgCode = filter.getString("orgCode");
boolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
JSONObject filterParams = null;
JSONObject filterParams;
// 筛选
if (!ObjectUtils.isEmpty(filter.get("filterParams"))) {
filterParams = JSONObject.parseObject(JSONObject.toJSONString(filter.get("filterParams")));
......@@ -470,9 +478,15 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
if (filterType.equals("advanced")) {
filterParams.forEach((k, v) -> {
if (k.equals("techParam")) {
// todo 计数参数筛选
} else {
JSONArray techParams = (JSONArray) v;
if (!techParams.contains("all") && techParams.size() == 1) {
JSONObject paramRangeJson = JSONObject.parseObject(JSONObject.toJSONString(filterParams.get("paramRange")));
String paramKey = techParams.getString(0);
String condition = paramRangeJson.getString("condition");
Object value = paramRangeJson.getString("value");
getParamQuery(paramKey, condition, value, boolMust);
}
} else if (!k.equals("paramRange")) {
if (v instanceof JSONArray) {
if (!((JSONArray) v).contains("all")) {
String field = k;
......@@ -548,18 +562,22 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
// todo 自定义筛选
}
} else {
filterParams = null;
}
// 排序
if (!ObjectUtils.isEmpty(filter.get("sort"))) {
JSONObject sort = JSONObject.parseObject(JSONObject.toJSONString(filter.get("sort")));
String field = sort.getString("field");
String field = sort.getString("filed");
if (field.equals("EQU_LIST")) {
field = "EQU_LIST_CODE";
} else if (field.equals("EQU_CATEGORY")) {
field = "EQU_CATEGORY_CODE";
} else if (field.equals("EQU_DEFINE")) {
field = "EQU_DEFINE_CODE";
} else {
field = field + ".keyword";
}
builder.sort(field, sort.getString("order").equals("desc") ? SortOrder.DESC : SortOrder.ASC);
}
......@@ -634,6 +652,112 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
return result;
}
private void getParamQuery(String paramKey, String condition, Object value, BoolQueryBuilder boolMust) {
String path = "techParams";
String nestedFieldKey = path + ".paramKey";
String nestedFieldValue = path + ".strValue";
NestedQueryBuilder keyNestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.termsQuery(nestedFieldKey, paramKey)),
ScoreMode.Avg
);
boolMust.must(keyNestedQuery);
switch (condition) {
case "eq":
NestedQueryBuilder eqQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.termsQuery(nestedFieldValue, value)),
ScoreMode.Avg
);
boolMust.must(eqQuery);
break;
case "neq":
boolMust.must(keyNestedQuery);
NestedQueryBuilder neqQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(nestedFieldValue, value)),
ScoreMode.Avg
);
boolMust.mustNot(neqQuery);
break;
case "like":
NestedQueryBuilder likeQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().should(QueryBuilders.wildcardQuery(nestedFieldValue, "*" + value + "*")),
ScoreMode.Avg
);
boolMust.must(likeQuery);
break;
case "notLike":
NestedQueryBuilder notLikeQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().should(QueryBuilders.wildcardQuery(nestedFieldValue, "*" + value + "*")),
ScoreMode.Avg
);
boolMust.mustNot(notLikeQuery);
break;
case "gt":
NestedQueryBuilder gtQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery(nestedFieldValue).gt(Double.parseDouble(value.toString()))),
ScoreMode.Avg
);
boolMust.must(gtQuery);
break;
case "gte":
NestedQueryBuilder gteQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery(nestedFieldValue).gte(Double.parseDouble(value.toString()))),
ScoreMode.Avg
);
boolMust.must(gteQuery);
break;
case "lt":
NestedQueryBuilder ltQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery(nestedFieldValue).lt(Double.parseDouble(value.toString()))),
ScoreMode.Avg
);
boolMust.must(ltQuery);
break;
case "lte":
NestedQueryBuilder lteQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery(nestedFieldValue).lte(Double.parseDouble(value.toString()))),
ScoreMode.Avg
);
boolMust.must(lteQuery);
break;
case "between":
JSONArray btValues = (JSONArray) value;
NestedQueryBuilder betweenQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery(nestedFieldValue).gte(Double.parseDouble(btValues.get(0).toString())).lte(Double.parseDouble(btValues.get(1).toString()))),
ScoreMode.Avg
);
boolMust.must(betweenQuery);
break;
case "in":
JSONArray inValues = (JSONArray) value;
NestedQueryBuilder inQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.termsQuery(nestedFieldValue, inValues)),
ScoreMode.Avg
);
boolMust.must(inQuery);
break;
case "notIn":
JSONArray notInValues = (JSONArray) value;
NestedQueryBuilder notInQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.termsQuery(nestedFieldValue, notInValues)),
ScoreMode.Avg
);
boolMust.mustNot(notInQuery);
break;
}
}
public JSONArray queryUnitType() {
return UnitTypeEnum.getAll();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment