Commit d3970aba authored by tianyiming's avatar tianyiming

refactor: 提交大屏综合统计查询接口

parent bee59c90
...@@ -34,6 +34,15 @@ public enum StatisticalAnalysisEnum { ...@@ -34,6 +34,15 @@ public enum StatisticalAnalysisEnum {
} }
} }
public static Map<String, String> getKey = new HashMap<>();
static {
for (StatisticalAnalysisEnum e : StatisticalAnalysisEnum.values()) {
getKey.put(e.code, e.key);
}
}
/** /**
* 根据code获取枚举实例(优化版) * 根据code获取枚举实例(优化版)
* @param code 枚举编码 * @param code 枚举编码
......
...@@ -189,11 +189,11 @@ public class ComprehensiveStatisticalAnalysisController extends BaseController { ...@@ -189,11 +189,11 @@ public class ComprehensiveStatisticalAnalysisController extends BaseController {
* @return inspectStatus * @return inspectStatus
*/ */
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/dp/page") @PostMapping(value = "/dp/statistics")
@ApiOperation(httpMethod = "POST", value = "大屏综合统计查询接口", notes = "大屏综合统计查询接口") @ApiOperation(httpMethod = "POST", value = "大屏综合统计查询接口", notes = "大屏综合统计查询接口")
public ResponseModel<JSONObject> queryDpStatistics(@RequestBody Map<String, Object> map) { public ResponseModel<JSONObject> queryDpStatistics(@RequestBody Map<String, Object> map) {
JSONObject jsonObject = new JSONObject(map); JSONObject jsonObject = new JSONObject(map);
return ResponseHelper.buildResponse(statisticalAnalysisService.queryForPage(jsonObject)); return ResponseHelper.buildResponse(statisticalAnalysisService.queryDpStatistics(jsonObject));
} }
/** /**
......
...@@ -552,7 +552,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl { ...@@ -552,7 +552,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
BoolQueryBuilder boolMust = QueryBuilders.boolQuery(); BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
String orgCode = filter.getString("orgCode"); String orgCode = filter.getString("orgCode");
boolMust.must(QueryBuilders.prefixQuery("superviseOrgCode.keyword", orgCode)); boolMust.must(QueryBuilders.prefixQuery("superviseOrgCode", orgCode));
JSONObject filterParams = null; JSONObject filterParams = null;
if (!ObjectUtils.isEmpty(filter.get("filterParams"))) { if (!ObjectUtils.isEmpty(filter.get("filterParams"))) {
filterParams = JSONObject.parseObject(JSONObject.toJSONString(filter.get("filterParams"))); filterParams = JSONObject.parseObject(JSONObject.toJSONString(filter.get("filterParams")));
...@@ -781,174 +781,8 @@ public class ComprehensiveStatisticalAnalysisServiceImpl { ...@@ -781,174 +781,8 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
if (!ObjectUtils.isEmpty(filter.get("filterParams"))) { if (!ObjectUtils.isEmpty(filter.get("filterParams"))) {
filterParams = JSONObject.parseObject(JSONObject.toJSONString(filter.get("filterParams"))); filterParams = JSONObject.parseObject(JSONObject.toJSONString(filter.get("filterParams")));
String filterType = filter.getString("filterType"); String filterType = filter.getString("filterType");
//快捷筛选和自定义筛选解析筛选规则不一致 // 组装查询条件
if (filterType.equals("advanced")) { getEquipmentBoolQueryBuilder(boolMust, filterParams, filterType);
JSONObject finalFilterParams = filterParams;
filterParams.forEach((k, v) -> {
if (k.equals("techParam")) {
JSONArray techParams = (JSONArray) v;
if (!techParams.contains("all") && techParams.size() == 1) {
JSONObject paramRangeJson = JSONObject.parseObject(JSONObject.toJSONString(finalFilterParams.get("paramRange")));
String paramKey = techParams.getString(0);
String condition = paramRangeJson.getString("condition");
Object value = paramRangeJson.getString("value");
String fieldType = paramRangeJson.getString("fieldType");
if (!ObjectUtils.isEmpty(condition) && !ObjectUtils.isEmpty(value) && !ObjectUtils.isEmpty(fieldType)) {
getParamQuery(paramKey, condition, value, fieldType, false, boolMust, null, null);
}
}
} else if (!k.equals("paramRange")) {
if (v instanceof JSONArray) {
// 判断是否需要解析参数
Boolean parseParam = getParamAnalysis(v);
if (parseParam) {
String field = k;
if (k.equals("NEXT_INSPECT_DATE")) {
String finalField = field;
EnhancedDynamicQueryBuilder queryBuilder = new EnhancedDynamicQueryBuilder();
((JSONArray) v).forEach(item -> {
if (item.equals("overdue")) {
// 超期:小于当前日期
queryBuilder.add(QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(finalField).lt(LocalDate.now().format(formatter))), or);
} else if (item.equals("near")) {
// 临期:小于等于当前日期加上30天
queryBuilder.add(QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(finalField).gte(LocalDate.now().format(formatter)).lte(LocalDate.now().plusDays(30).format(formatter))), or);
} else if (item.equals("normal")) {
// 正常:大于当前日期加上30天
queryBuilder.add(QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(finalField).gt(LocalDate.now().plusDays(30).format(formatter))), or);
} else {
queryBuilder.add(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(finalField)), or);
}
});
boolMust.must(queryBuilder.build());
} else if (k.equals("registerStatus")) {
EnhancedDynamicQueryBuilder enhancedDynamicQueryBuilder = new EnhancedDynamicQueryBuilder();
((JSONArray) v).forEach(item -> {
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
if ("1".equals(item)) {
queryBuilder.must(QueryBuilders.termsQuery("IS_INTO_MANAGEMENT", Boolean.TRUE))
.must(QueryBuilders.existsQuery("USE_ORG_CODE"));
} else {
queryBuilder.should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("IS_INTO_MANAGEMENT")))
.should(QueryBuilders.matchQuery("IS_INTO_MANAGEMENT", Boolean.FALSE))
.should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("USE_ORG_CODE")))
.minimumShouldMatch(1);
}
enhancedDynamicQueryBuilder.add(queryBuilder, or);
});
boolMust.must(enhancedDynamicQueryBuilder.build());
} else if (k.equals("PRODUCE_DATE") || k.equals("issueDate") || k.equals("designDate") || k.equals("nextInspectDate") || k.equals("USE_DATE")) {
field = k.equals("nextInspectDate") ? "NEXT_INSPECT_DATE" : k;
JSONArray dates = (JSONArray) v;
String startDate = dates.getString(0);
String endDate = dates.getString(1);
if (k.equals("USE_DATE") || k.equals("issueDate")) {
boolMust.filter(QueryBuilders.rangeQuery(field).gte(startDate).lt(endDate));
} else {
boolMust.filter(QueryBuilders.rangeQuery(field).gte(startDate).lte(endDate));
}
} else if (k.equals("EQU_LIST") || k.equals("EQU_CATEGORY") || k.equals("EQU_DEFINE") || k.equals("DATA_QUALITY_SCORE")) {
if (k.equals("EQU_LIST")) {
field = "EQU_LIST_CODE";
} else if (k.equals("EQU_CATEGORY")) {
field = "EQU_CATEGORY_CODE";
} else if (k.equals("EQU_DEFINE")) {
field = "EQU_DEFINE_CODE";
}
TermsQueryBuilder termsQuery = QueryBuilders.termsQuery(field, (JSONArray) v);
boolMust.must(termsQuery);
} else if (k.equals("EQU_STATE")) {
EnhancedDynamicQueryBuilder queryBuilder = new EnhancedDynamicQueryBuilder();
((JSONArray) v).forEach(item -> {
if (!item.equals("99")) {
queryBuilder.add(QueryBuilders.matchQuery(k, item.toString()), or);
} else {
queryBuilder.add(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(k)), or);
}
});
boolMust.must(queryBuilder.build());
} else if (k.equals("JDJY") || k.equals("DQJY") || k.equals("SCJY") || k.equals("DTJY")) {
String path = "inspections";
String typeField = path + ".inspectType";
String dateField = path + ".inspectDate";
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
if (k.equals("JDJY")) {
queryBuilder.must(QueryBuilders.wildcardQuery(typeField, "*JDJY*"));
} else {
queryBuilder.must(QueryBuilders.termsQuery(typeField, k));
}
NestedQueryBuilder fieldQuery = QueryBuilders.nestedQuery(
path,
queryBuilder,
ScoreMode.None
);
JSONArray dates = (JSONArray) v;
String startDate = dates.getString(0);
String endDate = dates.getString(1);
NestedQueryBuilder dateQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.rangeQuery(dateField).gte(startDate).lte(endDate),
ScoreMode.None
);
boolMust.must(fieldQuery);
boolMust.filter(dateQuery);
} else if (k.equals("QZ_OR_TANK")) {
EnhancedDynamicQueryBuilder queryBuilder = new EnhancedDynamicQueryBuilder();
((JSONArray) v).forEach(item -> {
if (!"".equals(item)) {
queryBuilder.add(QueryBuilders.matchQuery(item.toString(), "1"), or);
}
});
boolMust.must(queryBuilder.build());
}
}
} else if (v instanceof String) {
if (k.equals("fuzzyInput")) {
String fuzzyValue = String.valueOf(v);
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.should(QueryBuilders.wildcardQuery("EQU_LIST", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("EQU_CATEGORY", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("EQU_DEFINE", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("PRODUCT_NAME", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("USE_ORG_CODE", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("USE_UNIT_NAME", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("SAFETY_MANAGER", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("ORG_BRANCH_NAME", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("MAINTAIN_UNIT_NAME", "*" + fuzzyValue + "*"));
queryBuilder.minimumShouldMatch(1);
boolMust.must(queryBuilder);
} else if (k.equals("WHETHER_VEHICLE_CYLINDER")) {
if (!"".equals(v)) {
boolMust.must(QueryBuilders.matchQuery(k, v.toString()));
}
}
}
}
});
} else {
JSONArray leftGroup = filterParams.getJSONArray("group1");
JSONArray rightGroup = filterParams.getJSONArray("group2");
JSONArray equListCodes = new JSONArray();
leftGroup.forEach(item -> {
JSONObject left = JSONObject.parseObject(JSONObject.toJSONString(item));
String leftField = left.getString("field");
String leftValue = left.getString("value");
if (!ObjectUtils.isEmpty(leftField) && leftField.equals("EQU_LIST_CODE") && !ObjectUtils.isEmpty(leftValue)) {
equListCodes.add(leftValue);
}
});
rightGroup.forEach(item -> {
JSONObject left = JSONObject.parseObject(JSONObject.toJSONString(item));
String rightField = left.getString("field");
String rightValue = left.getString("value");
if (!ObjectUtils.isEmpty(rightField) && rightField.equals("EQU_LIST_CODE") && !ObjectUtils.isEmpty(rightValue)) {
equListCodes.add(rightValue);
}
});
filterParams.put("EQU_LIST", equListCodes);
Boolean isOrGroup = or.equals(filterParams.getString("groupAndOr")) ? Boolean.TRUE : Boolean.FALSE;
handleAdvancedFilter(boolMust, leftGroup, rightGroup, isOrGroup);
}
} }
// 排序 // 排序
...@@ -1065,6 +899,177 @@ public class ComprehensiveStatisticalAnalysisServiceImpl { ...@@ -1065,6 +899,177 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
return result; return result;
} }
private void getEquipmentBoolQueryBuilder(BoolQueryBuilder boolMust, JSONObject filterParams, String filterType) {
//快捷筛选和自定义筛选解析筛选规则不一致
if (filterType.equals("advanced")) {
JSONObject finalFilterParams = filterParams;
filterParams.forEach((k, v) -> {
if (k.equals("techParam")) {
JSONArray techParams = (JSONArray) v;
if (!techParams.contains("all") && techParams.size() == 1) {
JSONObject paramRangeJson = JSONObject.parseObject(JSONObject.toJSONString(finalFilterParams.get("paramRange")));
String paramKey = techParams.getString(0);
String condition = paramRangeJson.getString("condition");
Object value = paramRangeJson.getString("value");
String fieldType = paramRangeJson.getString("fieldType");
if (!ObjectUtils.isEmpty(condition) && !ObjectUtils.isEmpty(value) && !ObjectUtils.isEmpty(fieldType)) {
getParamQuery(paramKey, condition, value, fieldType, false, boolMust, null, null);
}
}
} else if (!k.equals("paramRange")) {
if (v instanceof JSONArray) {
// 判断是否需要解析参数
Boolean parseParam = getParamAnalysis(v);
if (parseParam) {
String field = k;
if (k.equals("NEXT_INSPECT_DATE")) {
String finalField = field;
EnhancedDynamicQueryBuilder queryBuilder = new EnhancedDynamicQueryBuilder();
((JSONArray) v).forEach(item -> {
if (item.equals("overdue")) {
// 超期:小于当前日期
queryBuilder.add(QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(finalField).lt(LocalDate.now().format(formatter))), or);
} else if (item.equals("near")) {
// 临期:小于等于当前日期加上30天
queryBuilder.add(QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(finalField).gte(LocalDate.now().format(formatter)).lte(LocalDate.now().plusDays(30).format(formatter))), or);
} else if (item.equals("normal")) {
// 正常:大于当前日期加上30天
queryBuilder.add(QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(finalField).gt(LocalDate.now().plusDays(30).format(formatter))), or);
} else {
queryBuilder.add(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(finalField)), or);
}
});
boolMust.must(queryBuilder.build());
} else if (k.equals("registerStatus")) {
EnhancedDynamicQueryBuilder enhancedDynamicQueryBuilder = new EnhancedDynamicQueryBuilder();
((JSONArray) v).forEach(item -> {
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
if ("1".equals(item)) {
queryBuilder.must(QueryBuilders.termsQuery("IS_INTO_MANAGEMENT", Boolean.TRUE))
.must(QueryBuilders.existsQuery("USE_ORG_CODE"));
} else {
queryBuilder.should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("IS_INTO_MANAGEMENT")))
.should(QueryBuilders.matchQuery("IS_INTO_MANAGEMENT", Boolean.FALSE))
.should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("USE_ORG_CODE")))
.minimumShouldMatch(1);
}
enhancedDynamicQueryBuilder.add(queryBuilder, or);
});
boolMust.must(enhancedDynamicQueryBuilder.build());
} else if (k.equals("PRODUCE_DATE") || k.equals("issueDate") || k.equals("designDate") || k.equals("nextInspectDate") || k.equals("USE_DATE")) {
field = k.equals("nextInspectDate") ? "NEXT_INSPECT_DATE" : k;
JSONArray dates = (JSONArray) v;
String startDate = dates.getString(0);
String endDate = dates.getString(1);
if (k.equals("USE_DATE") || k.equals("issueDate")) {
boolMust.filter(QueryBuilders.rangeQuery(field).gte(startDate).lt(endDate));
} else {
boolMust.filter(QueryBuilders.rangeQuery(field).gte(startDate).lte(endDate));
}
} else if (k.equals("EQU_LIST") || k.equals("EQU_CATEGORY") || k.equals("EQU_DEFINE") || k.equals("DATA_QUALITY_SCORE")) {
if (k.equals("EQU_LIST")) {
field = "EQU_LIST_CODE";
} else if (k.equals("EQU_CATEGORY")) {
field = "EQU_CATEGORY_CODE";
} else if (k.equals("EQU_DEFINE")) {
field = "EQU_DEFINE_CODE";
}
TermsQueryBuilder termsQuery = QueryBuilders.termsQuery(field, (JSONArray) v);
boolMust.must(termsQuery);
} else if (k.equals("EQU_STATE")) {
EnhancedDynamicQueryBuilder queryBuilder = new EnhancedDynamicQueryBuilder();
((JSONArray) v).forEach(item -> {
if (!item.equals("99")) {
queryBuilder.add(QueryBuilders.matchQuery(k, item.toString()), or);
} else {
queryBuilder.add(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(k)), or);
}
});
boolMust.must(queryBuilder.build());
} else if (k.equals("JDJY") || k.equals("DQJY") || k.equals("SCJY") || k.equals("DTJY")) {
String path = "inspections";
String typeField = path + ".inspectType";
String dateField = path + ".inspectDate";
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
if (k.equals("JDJY")) {
queryBuilder.must(QueryBuilders.wildcardQuery(typeField, "*JDJY*"));
} else {
queryBuilder.must(QueryBuilders.termsQuery(typeField, k));
}
NestedQueryBuilder fieldQuery = QueryBuilders.nestedQuery(
path,
queryBuilder,
ScoreMode.None
);
JSONArray dates = (JSONArray) v;
String startDate = dates.getString(0);
String endDate = dates.getString(1);
NestedQueryBuilder dateQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.rangeQuery(dateField).gte(startDate).lte(endDate),
ScoreMode.None
);
boolMust.must(fieldQuery);
boolMust.filter(dateQuery);
} else if (k.equals("QZ_OR_TANK")) {
EnhancedDynamicQueryBuilder queryBuilder = new EnhancedDynamicQueryBuilder();
((JSONArray) v).forEach(item -> {
if (!"".equals(item)) {
queryBuilder.add(QueryBuilders.matchQuery(item.toString(), "1"), or);
}
});
boolMust.must(queryBuilder.build());
}
}
} else if (v instanceof String) {
if (k.equals("fuzzyInput")) {
String fuzzyValue = String.valueOf(v);
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
queryBuilder.should(QueryBuilders.wildcardQuery("EQU_LIST", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("EQU_CATEGORY", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("EQU_DEFINE", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("PRODUCT_NAME", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("USE_ORG_CODE", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("USE_UNIT_NAME", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("SAFETY_MANAGER", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("ORG_BRANCH_NAME", "*" + fuzzyValue + "*"));
queryBuilder.should(QueryBuilders.wildcardQuery("MAINTAIN_UNIT_NAME", "*" + fuzzyValue + "*"));
queryBuilder.minimumShouldMatch(1);
boolMust.must(queryBuilder);
} else if (k.equals("WHETHER_VEHICLE_CYLINDER")) {
if (!"".equals(v)) {
boolMust.must(QueryBuilders.matchQuery(k, v.toString()));
}
}
}
}
});
} else {
JSONArray leftGroup = filterParams.getJSONArray("group1");
JSONArray rightGroup = filterParams.getJSONArray("group2");
JSONArray equListCodes = new JSONArray();
leftGroup.forEach(item -> {
JSONObject left = JSONObject.parseObject(JSONObject.toJSONString(item));
String leftField = left.getString("field");
String leftValue = left.getString("value");
if (!ObjectUtils.isEmpty(leftField) && leftField.equals("EQU_LIST_CODE") && !ObjectUtils.isEmpty(leftValue)) {
equListCodes.add(leftValue);
}
});
rightGroup.forEach(item -> {
JSONObject left = JSONObject.parseObject(JSONObject.toJSONString(item));
String rightField = left.getString("field");
String rightValue = left.getString("value");
if (!ObjectUtils.isEmpty(rightField) && rightField.equals("EQU_LIST_CODE") && !ObjectUtils.isEmpty(rightValue)) {
equListCodes.add(rightValue);
}
});
filterParams.put("EQU_LIST", equListCodes);
Boolean isOrGroup = or.equals(filterParams.getString("groupAndOr")) ? Boolean.TRUE : Boolean.FALSE;
handleAdvancedFilter(boolMust, leftGroup, rightGroup, isOrGroup);
}
}
private void getEquipStatusStatic(BoolQueryBuilder boolMust, SearchSourceBuilder builder, List<Map<String, Object>> statics) { private void getEquipStatusStatic(BoolQueryBuilder boolMust, SearchSourceBuilder builder, List<Map<String, Object>> statics) {
SearchRequest request = new SearchRequest(); SearchRequest request = new SearchRequest();
request.indices(StatisticalAnalysisEnum.equip.getKey()); request.indices(StatisticalAnalysisEnum.equip.getKey());
...@@ -2553,7 +2558,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl { ...@@ -2553,7 +2558,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
} }
public JSONArray queryQzOrTank() { public JSONArray queryQzOrTank() {
//是否车用气瓶 //撬装球罐
JSONArray qzOrTank = new JSONArray(); JSONArray qzOrTank = new JSONArray();
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
JSONObject object = new JSONObject(); JSONObject object = new JSONObject();
...@@ -2572,7 +2577,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl { ...@@ -2572,7 +2577,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
} }
public JSONArray queryRegisterStatus() { public JSONArray queryRegisterStatus() {
//是否车用气瓶 //登记状态
JSONArray registerStatus = new JSONArray(); JSONArray registerStatus = new JSONArray();
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
JSONObject object = new JSONObject(); JSONObject object = new JSONObject();
...@@ -2590,4 +2595,130 @@ public class ComprehensiveStatisticalAnalysisServiceImpl { ...@@ -2590,4 +2595,130 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
return registerStatus; return registerStatus;
} }
public JSONObject queryDpStatistics(JSONObject filter) {
JSONObject result = new JSONObject();
String businessType = filter.getString("businessType");
if (ObjectUtils.isEmpty(businessType)) {
return result;
}
SearchRequest request = new SearchRequest();
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.trackTotalHits(true);
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
Map<String, Object> tabTotalMap = new HashMap<>();
String orgCode = filter.getString("orgCode");
if (StatisticalAnalysisEnum.equip.getCode().equals(businessType)) {
boolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
result = queryDpEquipStatistics(filter, request, builder, boolMust, tabTotalMap);
} else if (StatisticalAnalysisEnum.company.getCode().equals(businessType)) {
boolMust.must(QueryBuilders.prefixQuery("superviseOrgCode", orgCode));
result = queryDpCompanyStatistics(filter, request, builder, boolMust, tabTotalMap);
} else {
boolMust.must(QueryBuilders.prefixQuery("superviseOrgCode", orgCode));
result = queryDpPersonStatistics(filter, request, builder, boolMust, tabTotalMap);
}
getOtherTypeCount(businessType, tabTotalMap, orgCode);
result.put("tabTotalMap", tabTotalMap);
return result;
}
private void getOtherTypeCount(String businessType, Map<String, Object> tabTotalMap, String orgCode) {
BoolQueryBuilder equipBoolMust = QueryBuilders.boolQuery();
equipBoolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
BoolQueryBuilder companyBoolMust = QueryBuilders.boolQuery();
companyBoolMust.must(QueryBuilders.prefixQuery("superviseOrgCode", orgCode));
BoolQueryBuilder personBoolMust = QueryBuilders.boolQuery();
personBoolMust.must(QueryBuilders.prefixQuery("superviseOrgCode", orgCode));
String equipIndex = StatisticalAnalysisEnum.equip.getKey();
String companyIndex = StatisticalAnalysisEnum.company.getKey();
String personIndex = StatisticalAnalysisEnum.person.getKey();
if (businessType.equals(StatisticalAnalysisEnum.equip.getCode())) {
// 获取企业总数
Long companyCount = getStaticCount(companyBoolMust, companyIndex);
// 获取人员总数
Long personCount = getStaticCount(personBoolMust, personIndex);
tabTotalMap.put(StatisticalAnalysisEnum.company.getCode(), companyCount);
tabTotalMap.put(StatisticalAnalysisEnum.person.getCode(), personCount);
} else if (businessType.equals(StatisticalAnalysisEnum.company.getCode())) {
// 获取设备总数
Long equipCount = getStaticCount(equipBoolMust, equipIndex);
// 获取人员总数
Long personCount = getStaticCount(personBoolMust, personIndex);
tabTotalMap.put(StatisticalAnalysisEnum.equip.getCode(), equipCount);
tabTotalMap.put(StatisticalAnalysisEnum.person.getCode(), personCount);
} else {
// 获取设备总数
Long equipCount = getStaticCount(equipBoolMust, equipIndex);
// 获取企业总数
Long companyCount = getStaticCount(companyBoolMust, companyIndex);
tabTotalMap.put(StatisticalAnalysisEnum.equip.getCode(), equipCount);
tabTotalMap.put(StatisticalAnalysisEnum.company.getCode(), companyCount);
}
}
private JSONObject queryDpPersonStatistics(JSONObject filter, SearchRequest request, SearchSourceBuilder builder, BoolQueryBuilder boolMust, Map<String, Object> tabTotalMap) {
return null;
}
private JSONObject queryDpCompanyStatistics(JSONObject filter, SearchRequest request, SearchSourceBuilder builder, BoolQueryBuilder boolMust, Map<String, Object> tabTotalMap) {
return null;
}
private JSONObject queryDpEquipStatistics(JSONObject filter, SearchRequest request, SearchSourceBuilder builder, BoolQueryBuilder boolMust, Map<String, Object> tabTotalMap) {
request.indices(StatisticalAnalysisEnum.equip.getKey());
JSONObject filterParams = new JSONObject();
// 筛选
if (!ObjectUtils.isEmpty(filter.get("filterParams"))) {
filterParams = JSONObject.parseObject(JSONObject.toJSONString(filter.get("filterParams")));
String filterType = "advanced";
// 组装查询条件
getEquipmentBoolQueryBuilder(boolMust, filterParams, filterType);
}
JSONArray typeData = filter.getJSONArray("typeData");
String groupField = "EQU_LIST_CODE";
if (!ObjectUtils.isEmpty(typeData)) {
if (typeData.size() == 1) {
groupField = "EQU_LIST_CODE";
} else if (typeData.size() == 2) {
groupField = "EQU_CATEGORY_CODE";
} else if (typeData.size() == 3) {
groupField = "EQU_DEFINE_CODE";
}
}
Map<String, Object> staticCountByGroup = getStaticCountByGroup(request, builder, boolMust, groupField);
return JSONObject.parseObject(JSON.toJSONString(staticCountByGroup));
}
private Map<String, Object> getStaticCountByGroup(SearchRequest request, SearchSourceBuilder builder, BoolQueryBuilder boolMust, String groupField) {
builder.query(boolMust);
builder.aggregation(AggregationBuilders.terms(groupField).field(groupField).missing("null"));
request.source(builder);
try {
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
Terms terms = response.getAggregations().get(groupField);
Map<String, Object> tabTotalMap = new HashMap<>();
for (Terms.Bucket bucket : terms.getBuckets()) {
tabTotalMap.put(bucket.getKeyAsString(), bucket.getDocCount());
}
return tabTotalMap;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
} }
\ No newline at end of file
...@@ -4,7 +4,7 @@ import org.elasticsearch.index.query.BoolQueryBuilder; ...@@ -4,7 +4,7 @@ import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
public class QueryBuilderUtils { public class QueryBuilderUtils {
// 复制BoolQueryBuilder
public static BoolQueryBuilder copyBoolQuery(BoolQueryBuilder original) { public static BoolQueryBuilder copyBoolQuery(BoolQueryBuilder original) {
if (original == null) { if (original == null) {
return QueryBuilders.boolQuery(); return QueryBuilders.boolQuery();
......
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