Commit c1d8cfad authored by tianyiming's avatar tianyiming

综合统计分析列表查询设备/企业/人员快捷筛选完善嵌套查询逻辑

parent 14c4564e
......@@ -31,8 +31,10 @@ import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.*;
import org.elasticsearch.script.Script;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.NestedQueryBuilder;
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.SortOrder;
......@@ -144,11 +146,11 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
public JSONArray queryAdvancedSearch(String type) {
JSONArray all = new JSONArray();
if("equip".equals(type)) {
if ("equip".equals(type)) {
all = AdvanceSearchEnum.getAll();
}else if("company".equals(type)){
} else if ("company".equals(type)) {
}else if("person".equals(type)){
} else if ("person".equals(type)) {
}
return all;
......@@ -211,21 +213,75 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
boolMust.must(QueryBuilders.existsQuery(field));
TermsQueryBuilder termsQuery = QueryBuilders.termsQuery(field, (JSONArray) v);
boolMust.must(termsQuery);
} else if (k.equals("licenses")) {
} else if (k.equals("certNo") || k.equals("expiryDate") || k.equals("permissionLevel") || k.equals("certType") || k.equals("jobItem") || k.equals("issueDate")) {
String path = "licenses";
((JSONArray) v).forEach(item -> {
String compareString = "doc['" + k + "'].length" + (item.equals("1") ? " > 0" : "= 0");
// 检查嵌套字段存在且长度大于0
Script script = new Script(compareString);
ScriptQueryBuilder scriptQuery = QueryBuilders.scriptQuery(script);
NestedQueryBuilder nestedExistsQuery = QueryBuilders.nestedQuery(
k,
scriptQuery,
ScoreMode.None
String nestedField = path + "." + k;
// 根据证书编号判断有无资质
if (k.equals("certNo")) {
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.existsQuery(nestedField),
ScoreMode.Avg
);
if (item.equals("1")) {
boolMust.must(nestedQuery);
} else {
boolMust.mustNot(nestedQuery);
}
} else if (k.equals("expiryDate")) {
if (item.equals("overdue")) {
// 超期:小于当前日期
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(nestedField).lt(LocalDate.now().format(formatter))),
ScoreMode.Avg
);
boolMust.must(nestedQuery);
} else if (item.equals("near")) {
// 临期:小于等于当前日期加上30天
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(nestedField).lte(LocalDate.now().plusDays(30).format(formatter))),
ScoreMode.Avg
);
boolMust.must(nestedQuery);
} else if (item.equals("normal")) {
// 正常:大于当前日期加上30天
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(nestedField).gt(LocalDate.now().plusDays(30).format(formatter))),
ScoreMode.Avg
);
boolMust.must(nestedQuery);
} else {
// 无资质要求
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.existsQuery(nestedField),
ScoreMode.Avg
);
boolMust.mustNot(nestedQuery);
}
} else if (k.equals("certType") || k.equals("permissionLevel") || k.equals("jobItem")) {
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.termsQuery(nestedField, (JSONArray) v)),
ScoreMode.Avg
);
BoolQueryBuilder query = QueryBuilders.boolQuery()
.must(nestedExistsQuery);
boolMust.must(query);
boolMust.must(nestedQuery);
}
});
} else if (k.equals("issueDate")) {
JSONArray issueDates = (JSONArray) v;
String startDate = DateUtils.convertDateToString(issueDates.getDate(0), DateUtils.DATE_PATTERN);
String endDate = DateUtils.convertDateToString(issueDates.getDate(1), DateUtils.DATE_PATTERN);
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
"licenses",
QueryBuilders.rangeQuery("issueDate").gte(startDate).lte(endDate),
ScoreMode.Avg
);
boolMust.filter(nestedQuery);
}
} else {
//todo 高级筛选
......@@ -305,22 +361,46 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
boolMust.must(QueryBuilders.existsQuery(field));
TermsQueryBuilder termsQuery = QueryBuilders.termsQuery(field, (JSONArray) v);
boolMust.must(termsQuery);
} else if (k.equals("itemCode") || k.equals("subItemCode")) {
} else if (k.equals("itemCode") || k.equals("subItemCode") || k.equals("permitStatus")) {
String path = "licenses";
((JSONArray) v).forEach(item -> {
String nestedField = path + "." + k + ".keyword";
String nestedField = path + "." + (k.equals("permitStatus") ? "expiryDate" : k + ".keyword");
if (k.equals("permitStatus")) {
if (item.equals("overdue")) {
// 超期:小于当前日期
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(nestedField).lt(LocalDate.now().format(formatter))),
ScoreMode.Avg
);
boolMust.must(nestedQuery);
} else if (item.equals("near")) {
// 临期:小于等于当前日期加上30天
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(nestedField).lte(LocalDate.now().plusDays(30).format(formatter)).gte(LocalDate.now().format(formatter))),
ScoreMode.Avg
);
boolMust.must(nestedQuery);
} else if (item.equals("normal")) {
// 正常:大于当前日期加上30天
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery(nestedField).gt(LocalDate.now().plusDays(30).format(formatter))),
ScoreMode.Avg
);
boolMust.must(nestedQuery);
}
} else {
// 创建嵌套查询
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery(nestedField, v)),
QueryBuilders.termsQuery(nestedField, item),
ScoreMode.Avg
);
boolMust.must(nestedQuery);
System.out.println(boolMust.toString());
}
});
} else if (k.equals("permitStatus")) {
}
}
}
......@@ -432,8 +512,8 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
boolMust.filter(QueryBuilders.rangeQuery(finalField).lt(LocalDate.now().minusYears(5).format(formatter)));
}
});
} else if (k.equals("IS_SUPERVISORY")) {
String finalField = "SUPERVISORY_CODE";
} else if (k.equals("IS_SUPERVISORY_CODE")) {
String finalField = "IS_SUPERVISORY_CODE";
((JSONArray) v).forEach(item -> {
if (item.equals("1")) {
boolMust.must(QueryBuilders.existsQuery(finalField));
......@@ -444,8 +524,8 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
});
} else if (k.equals("createDate")) {
JSONArray createDates = (JSONArray) v;
String startDate = DateUtils.convertDateToString(createDates.getDate(0), "yyyy-MM-dd HH:mm:ss");
String endDate = DateUtils.convertDateToString(createDates.getDate(1), "yyyy-MM-dd HH:mm:ss");
String startDate = DateUtils.convertDateToString(createDates.getDate(0), DateUtils.DATE_TIME_PATTERN);
String endDate = DateUtils.convertDateToString(createDates.getDate(1), DateUtils.DATE_TIME_PATTERN);
boolMust.filter(QueryBuilders.rangeQuery("createDate").gte(startDate.replace(" ", "T")).lte(endDate.replace(" ", "T")));
} else if (k.equals("EQU_LIST") || k.equals("EQU_CATEGORY") || k.equals("EQU_DEFINE") || k.equals("EQU_STATE") || k.equals("DATA_QUALITY_SCORE") || k.equals("DATA_SOURCE")) {
if (k.equals("EQU_LIST")) {
......@@ -573,17 +653,17 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
//许可状态
JSONArray permitStatusData = new JSONArray();
for(int i=0;i<3;i++){
for (int i = 0; i < 3; i++) {
JSONObject object = new JSONObject();
if(0==i){
if (0 == i) {
object.put("key", "0");
object.put("value", "0");
object.put("label", "超期");
}else if(1==i){
} else if (1 == i) {
object.put("key", "1");
object.put("value", "1");
object.put("label", "临期");
}else{
} else {
object.put("key", "2");
object.put("value", "2");
object.put("label", "正常");
......@@ -595,7 +675,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
//监管设备类型
List<EquipmentCategoryDto> equipmentCategoryDtos = equipmentCategoryMapper.selectClassify();
JSONArray equipCategoryData = new JSONArray();
for(int i=0;i<equipmentCategoryDtos.size();i++){
for (int i = 0; i < equipmentCategoryDtos.size(); i++) {
JSONObject object = new JSONObject();
object.put("key", equipmentCategoryDtos.get(i).getCode());
object.put("value", equipmentCategoryDtos.get(i).getCode());
......@@ -629,10 +709,10 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
public JSONArray queryXK(String type) {
JSONArray result = new JSONArray();
if(ValidationUtil.isEmpty(type)){
if (ValidationUtil.isEmpty(type)) {
List<DataDictionary> xkxm = dataDictionaryService.lambdaQuery().like(DataDictionary::getType, "XKXM").eq(BaseEntity::getIsDelete, false).list();
result = deployDictionary(xkxm);
}else {
} else {
List<DataDictionary> childrenxkxm = dataDictionaryService.lambdaQuery().eq(DataDictionary::getTypeDesc, type).eq(BaseEntity::getIsDelete, false).list();
result = deployDictionary(childrenxkxm);
}
......@@ -642,7 +722,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
public JSONArray queryRYLX(String type) {
JSONArray result = new JSONArray();
if(ValidationUtil.isEmpty(type)){
if (ValidationUtil.isEmpty(type)) {
List<String> typeList = new ArrayList<>(Arrays.asList(
"QYRYGW",
"QYRYGW-SYDW",
......@@ -656,12 +736,13 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
.isNull(DataDictionary::getParent)
.in(DataDictionary::getType, typeList)
.list());
}else {
} else {
List<DataDictionary> childrenrylx = dataDictionaryService.lambdaQuery()
.in(DataDictionary::getParent, type)
.like(DataDictionary::getType, "QYRYGW")
.orderByAsc(DataDictionary::getSortNum)
.list();;
.list();
;
result = deployDictionary(childrenrylx);
}
return result;
......
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