Commit ad0421a2 authored by H2T's avatar H2T

根据需求文档,相似警情结果限制两小时内的警情

parent 125ff0a6
...@@ -26,6 +26,8 @@ import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilde ...@@ -26,6 +26,8 @@ import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilde
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil; import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Date; import java.util.Date;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
...@@ -164,7 +166,10 @@ public class ESAlertCalledService { ...@@ -164,7 +166,10 @@ public class ESAlertCalledService {
boolMust.must(qbstatus); boolMust.must(qbstatus);
// 如果没有搜索条件不搜索 // 如果没有搜索条件不搜索
boolean flag = true; boolean flag = true;
// ①事发地点一致,或相距不超过200米的;&& ②警情类别一致;&& ③完成状态:未完成 // 获取当前的UTC时间戳和两小时前的时间戳
Instant now = Instant.now();
Instant twoHoursBefore = now.minus(2, ChronoUnit.HOURS);
// ①事发地点一致,或相距不超过200米的;&& ②警情类别一致; && ③报警时间:距离当前时间不超过两小时的
if (!ValidationUtil.isEmpty(alertCalled.getAddress()) && !ValidationUtil.isEmpty(alertCalled.getAlarmTypeCode()) && !ValidationUtil.isEmpty(alertCalled.getAlarmTypeCode())) if (!ValidationUtil.isEmpty(alertCalled.getAddress()) && !ValidationUtil.isEmpty(alertCalled.getAlarmTypeCode()) && !ValidationUtil.isEmpty(alertCalled.getAlarmTypeCode()))
{ {
flag = false; flag = false;
...@@ -176,10 +181,14 @@ public class ESAlertCalledService { ...@@ -176,10 +181,14 @@ public class ESAlertCalledService {
BoolQueryBuilder temp2 = QueryBuilders.boolQuery() BoolQueryBuilder temp2 = QueryBuilders.boolQuery()
.filter(QueryBuilders.matchQuery("alarmTypeCode", alertCalled.getAlarmTypeCode())); .filter(QueryBuilders.matchQuery("alarmTypeCode", alertCalled.getAlarmTypeCode()));
qb0.must(temp2); qb0.must(temp2);
BoolQueryBuilder temp3 = QueryBuilders.boolQuery() // BoolQueryBuilder temp3 = QueryBuilders.boolQuery()
.filter(QueryBuilders.matchQuery("alertStatusStr", AlertStatusEnum.UNCLOSED.getCode())); // .filter(QueryBuilders.matchQuery("alertStatusStr", AlertStatusEnum.UNCLOSED.getCode()));
qb0.must(temp3); // qb0.must(temp3);
BoolQueryBuilder temp4 = QueryBuilders.boolQuery()
.filter(QueryBuilders.rangeQuery("callTimeLong")
.gte(twoHoursBefore.toEpochMilli())
.lte(now.toEpochMilli()));
qb0.must(temp4);
boolMust.should(qb0); boolMust.should(qb0);
} }
// 报警电话一致; // 报警电话一致;
...@@ -191,7 +200,7 @@ public class ESAlertCalledService { ...@@ -191,7 +200,7 @@ public class ESAlertCalledService {
tempQb.must(tempQb1); tempQb.must(tempQb1);
boolMust.should(tempQb); boolMust.should(tempQb);
} }
// 使用单位名称一致;&& ②警情类别一致;&& ③完成状态:未完成 // 使用单位名称一致;&& ②警情类别一致;&& ③报警时间:距离当前时间不超过两小时的
if (!ValidationUtil.isEmpty(alertCalled.getUseUnit()) && !ValidationUtil.isEmpty(alertCalled.getAlarmTypeCode()) ) { if (!ValidationUtil.isEmpty(alertCalled.getUseUnit()) && !ValidationUtil.isEmpty(alertCalled.getAlarmTypeCode()) ) {
flag = false; flag = false;
BoolQueryBuilder qb0 = QueryBuilders.boolQuery(); BoolQueryBuilder qb0 = QueryBuilders.boolQuery();
...@@ -202,23 +211,33 @@ public class ESAlertCalledService { ...@@ -202,23 +211,33 @@ public class ESAlertCalledService {
BoolQueryBuilder temp2 = QueryBuilders.boolQuery() BoolQueryBuilder temp2 = QueryBuilders.boolQuery()
.filter(QueryBuilders.termQuery("alarmTypeCode.keyword", alertCalled.getAlarmTypeCode())); .filter(QueryBuilders.termQuery("alarmTypeCode.keyword", alertCalled.getAlarmTypeCode()));
qb0.must(temp2); qb0.must(temp2);
BoolQueryBuilder temp3 = QueryBuilders.boolQuery() // BoolQueryBuilder temp3 = QueryBuilders.boolQuery()
.filter(QueryBuilders.matchQuery("alertStatusStr", AlertStatusEnum.UNCLOSED.getCode())); // .filter(QueryBuilders.matchQuery("alertStatusStr", AlertStatusEnum.UNCLOSED.getCode()));
qb0.must(temp3); // qb0.must(temp3);
BoolQueryBuilder temp4 = QueryBuilders.boolQuery()
.filter(QueryBuilders.rangeQuery("callTimeLong")
.gte(twoHoursBefore.toEpochMilli())
.lte(now.toEpochMilli()));
qb0.must(temp4);
boolMust.should(qb0); boolMust.should(qb0);
} }
// 电梯识别码一致;&& ③完成状态:未完成 // 电梯识别码一致;&& ③报警时间:距离当前时间不超过两小时的
if (!ValidationUtil.isEmpty(alertCalled.getDeviceId())) { if (!ValidationUtil.isEmpty(alertCalled.getDeviceId())) {
flag = false; flag = false;
BoolQueryBuilder qb0 = QueryBuilders.boolQuery(); BoolQueryBuilder qb0 = QueryBuilders.boolQuery();
BoolQueryBuilder temp = QueryBuilders.boolQuery() BoolQueryBuilder temp = QueryBuilders.boolQuery()
.filter(QueryBuilders.termQuery("deviceId.keyword", alertCalled.getDeviceId())); .filter(QueryBuilders.termQuery("deviceId.keyword", alertCalled.getDeviceId()));
qb0.must(temp); qb0.must(temp);
BoolQueryBuilder temp2 = QueryBuilders.boolQuery() // BoolQueryBuilder temp2 = QueryBuilders.boolQuery()
.filter(QueryBuilders.matchQuery("alertStatusStr", AlertStatusEnum.UNCLOSED.getCode())); // .filter(QueryBuilders.matchQuery("alertStatusStr", AlertStatusEnum.UNCLOSED.getCode()));
qb0.must(temp2); // qb0.must(temp2);
BoolQueryBuilder temp3 = QueryBuilders.boolQuery()
.filter(QueryBuilders.rangeQuery("callTimeLong")
.gte(twoHoursBefore.toEpochMilli())
.lte(now.toEpochMilli()));
qb0.must(temp3);
boolMust.should(qb0); boolMust.should(qb0);
} }
boolMust.minimumShouldMatch(1);//至少满足一个 boolMust.minimumShouldMatch(1);//至少满足一个
......
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