|
|
@@ -15,6 +15,7 @@ import com.shkpr.service.warncore.dbdao.services.intef.OrdWarnPlanInfoDBService;
|
|
|
import com.shkpr.service.warncore.dbdao.services.intef.OrdWarnPlanRulesDBService;
|
|
|
import com.shkpr.service.warncore.dbdao.tables.OrdWarnEventInfoTable;
|
|
|
import com.shkpr.service.warncore.dbdao.tables.OrdWarnPlanInfoTable;
|
|
|
+import com.shkpr.service.warncore.dbdao.tables.OrdWarnTriggerSampleHisTable;
|
|
|
import com.shkpr.service.warncore.dto.*;
|
|
|
import com.shkpr.service.warncore.jsonbean.JPGetRegionData;
|
|
|
import com.shkpr.service.warncore.jsonbean.JPGetRegionReport;
|
|
|
@@ -185,7 +186,7 @@ public class SiteDataWarnHandler {
|
|
|
if (getWarnPlanInfoDBService().updatePlanForTrigger(new HashMap<String, Object>(){{
|
|
|
put(OrdWarnPlanInfoTable.W_INFO.UNIQUE_ID, planDetail.getUid());
|
|
|
put(OrdWarnPlanInfoTable.W_INFO.VERSION, planDetail.getVersion());
|
|
|
- }}, updatePlan, null, null) <= 0){
|
|
|
+ }}, updatePlan, null, null, null, false, "") <= 0){
|
|
|
step = "Update warn plan trigger result to db failed.";
|
|
|
code = ResponseCode.RESULT_BAD;
|
|
|
}
|
|
|
@@ -204,7 +205,9 @@ public class SiteDataWarnHandler {
|
|
|
SiteSampleDataResult siteSampleData = null;
|
|
|
Map<String, Long> oldEvent2EndUTC = new HashMap<>();//需要更新预警事件的样本截止时间
|
|
|
Map<String, JPOrdWarnEventInfo> newEvent2Gen = new HashMap<>();
|
|
|
-
|
|
|
+ Map<String, List<SiteSampleGroupItem>> ownerId2TriggerSample = new HashMap<>();//触发规则的样本数据
|
|
|
+ String eventIdAcceptPlanHisTriggerSam = "";//将预案的历史触发样本数据迁移到该事件
|
|
|
+ boolean clearPlanHisTriggerSam = false;//是否需要清空预案的历史触发样本数据
|
|
|
do {
|
|
|
JPGetRegionData jpParam = new JPGetRegionData();
|
|
|
jpParam.setTotal(1);
|
|
|
@@ -279,6 +282,12 @@ public class SiteDataWarnHandler {
|
|
|
}
|
|
|
if (code != ResponseCode.RESULT_NORMAL)
|
|
|
break;
|
|
|
+
|
|
|
+ List<SiteSampleGroupItem> planOfSample = ownerId2TriggerSample.get(planDetail.getUid());
|
|
|
+ if (planOfSample == null){
|
|
|
+ planOfSample = new ArrayList<>();
|
|
|
+ ownerId2TriggerSample.put(planDetail.getUid(), planOfSample);
|
|
|
+ }
|
|
|
if (!matched){//本次没有匹配成功
|
|
|
step = "This is not matched.";
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
@@ -287,8 +296,14 @@ public class SiteDataWarnHandler {
|
|
|
thisTempStep.setFirstMatchSampleTime(0L);
|
|
|
thisTempStep.setLastEventId("");
|
|
|
thisTempStep.setLastEventTime(0L);
|
|
|
+
|
|
|
+ planOfSample.clear();
|
|
|
+ if (StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam))
|
|
|
+ clearPlanHisTriggerSam = true;
|
|
|
continue;
|
|
|
- }//本次匹配成功进入下一步
|
|
|
+ }else{
|
|
|
+ planOfSample.add(sampleItem);
|
|
|
+ }
|
|
|
|
|
|
if (thisTempStep.getLastCompareSampleResult() <= COMPARE_FALSE){//上一次没有匹配成功
|
|
|
step = "This is matched, but last is not matched.";
|
|
|
@@ -345,6 +360,15 @@ public class SiteDataWarnHandler {
|
|
|
thisTempStep.setLastEventAction(newEvent.getAction());
|
|
|
thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
|
|
|
//[!!!]do not change the FirstMatchSampleTime[!!!]
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam))
|
|
|
+ eventIdAcceptPlanHisTriggerSam = newEvent.getUid();
|
|
|
+ List<SiteSampleGroupItem> eventSampleHis = ownerId2TriggerSample.get(newEvent.getUid());
|
|
|
+ if (eventSampleHis == null){
|
|
|
+ eventSampleHis = new ArrayList<>();
|
|
|
+ ownerId2TriggerSample.put(newEvent.getUid(), eventSampleHis);
|
|
|
+ }
|
|
|
+ eventSampleHis.addAll(ownerId2TriggerSample.remove(planDetail.getUid()));
|
|
|
}
|
|
|
}else {//之前有预警事件
|
|
|
if (planDetail.getMergeToEvent() == 0 || thisTempStep.getLastEventAction() >= EventAction.DONE){//之前的预警事件已处理,则可认为进行重新计数
|
|
|
@@ -364,6 +388,16 @@ public class SiteDataWarnHandler {
|
|
|
}else
|
|
|
oldEvent2EndUTC.put(thisTempStep.getLastEventId(), sampleRecordTm);
|
|
|
thisTempStep.setLastCompareSampleExplain(step);
|
|
|
+
|
|
|
+ final String lastEventID = thisTempStep.getLastEventId();
|
|
|
+ if (StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam))
|
|
|
+ eventIdAcceptPlanHisTriggerSam = lastEventID;
|
|
|
+ List<SiteSampleGroupItem> eventSampleHis = ownerId2TriggerSample.get(lastEventID);
|
|
|
+ if (eventSampleHis == null){
|
|
|
+ eventSampleHis = new ArrayList<>();
|
|
|
+ ownerId2TriggerSample.put(lastEventID, eventSampleHis);
|
|
|
+ }
|
|
|
+ eventSampleHis.addAll(ownerId2TriggerSample.remove(planDetail.getUid()));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -389,10 +423,24 @@ public class SiteDataWarnHandler {
|
|
|
}});
|
|
|
}
|
|
|
}
|
|
|
+ List<Map<String, Object>> triggerSampleHisObj = null;
|
|
|
+ if (CommTool.mapSize(ownerId2TriggerSample) > 0){
|
|
|
+ triggerSampleHisObj = new ArrayList<>();
|
|
|
+ for (Map.Entry<String, List<SiteSampleGroupItem>> entry:ownerId2TriggerSample.entrySet()){
|
|
|
+ if (CommTool.listSize(entry.getValue()) > 0){
|
|
|
+ triggerSampleHisObj.add(new HashMap<String, Object>(){{
|
|
|
+ put(OrdWarnTriggerSampleHisTable.W_INFO.OWNER_ID, entry.getKey());
|
|
|
+ put(OrdWarnTriggerSampleHisTable.W_INFO.SAMPLE, FastJsonUtil.toJSON(entry.getValue()));
|
|
|
+ }});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ownerId2TriggerSample.clear();
|
|
|
+ }
|
|
|
+
|
|
|
if (getWarnPlanInfoDBService().updatePlanForTrigger(new HashMap<String, Object>(){{
|
|
|
put(OrdWarnPlanInfoTable.W_INFO.UNIQUE_ID, planDetail.getUid());
|
|
|
put(OrdWarnPlanInfoTable.W_INFO.VERSION, planDetail.getVersion());
|
|
|
- }}, updatePlan, genNewEventObj, genOldEventObj) <= 0){
|
|
|
+ }}, updatePlan, genNewEventObj, genOldEventObj, triggerSampleHisObj, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
|
|
|
step = "Update warn plan trigger result to db failed.";
|
|
|
code = ResponseCode.RESULT_BAD;
|
|
|
}
|
|
|
@@ -411,6 +459,9 @@ public class SiteDataWarnHandler {
|
|
|
SiteStatsDataResult siteStatsData = null;
|
|
|
Map<String, Long> oldEvent2EndUTC = new HashMap<>();//需要更新预警事件的样本截止时间
|
|
|
Map<String, JPOrdWarnEventInfo> newEvent2Gen = new HashMap<>();
|
|
|
+ Map<String, List<SiteStatsDataItem>> ownerId2TriggerSample = new HashMap<>();//触发规则的样本数据
|
|
|
+ String eventIdAcceptPlanHisTriggerSam = "";//将预案的历史触发样本数据迁移到该事件
|
|
|
+ boolean clearPlanHisTriggerSam = false;//是否需要清空预案的历史触发样本数据
|
|
|
|
|
|
List<Long> tagTime = new ArrayList<>();//每个整点时刻,用于查询站点的统计数据
|
|
|
long tmpStepToStep = thisTempStep.getQueryBeginUTC();
|
|
|
@@ -507,6 +558,11 @@ public class SiteDataWarnHandler {
|
|
|
if (code != ResponseCode.RESULT_NORMAL)
|
|
|
break;
|
|
|
|
|
|
+ List<SiteStatsDataItem> planOfSample = ownerId2TriggerSample.get(planDetail.getUid());
|
|
|
+ if (planOfSample == null){
|
|
|
+ planOfSample = new ArrayList<>();
|
|
|
+ ownerId2TriggerSample.put(planDetail.getUid(), planOfSample);
|
|
|
+ }
|
|
|
if (!matched){//本次没有匹配成功
|
|
|
step = "This is not matched.";
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
@@ -515,8 +571,14 @@ public class SiteDataWarnHandler {
|
|
|
thisTempStep.setLastEventId("");
|
|
|
thisTempStep.setLastEventTime(0L);
|
|
|
thisTempStep.setLastCompareSampleExplain(step);
|
|
|
+
|
|
|
+ planOfSample.clear();
|
|
|
+ if (StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam))
|
|
|
+ clearPlanHisTriggerSam = true;
|
|
|
continue;
|
|
|
- }//本次匹配成功进入下一步
|
|
|
+ }else {
|
|
|
+ planOfSample.add(sampleItem);
|
|
|
+ }
|
|
|
|
|
|
long triggerEventPeriodSwitch = planDetail.getFrequency()*planDetail.getThreshold();//触发预警事件的最小时长(单位:小时)
|
|
|
if (thisTempStep.getLastCompareSampleResult() <= COMPARE_FALSE){//上一次没有匹配成功
|
|
|
@@ -535,6 +597,15 @@ public class SiteDataWarnHandler {
|
|
|
thisTempStep.setLastEventId(newEvent.getUid());
|
|
|
thisTempStep.setLastEventAction(newEvent.getAction());
|
|
|
thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam))
|
|
|
+ eventIdAcceptPlanHisTriggerSam = newEvent.getUid();
|
|
|
+ List<SiteStatsDataItem> eventSampleHis = ownerId2TriggerSample.get(newEvent.getUid());
|
|
|
+ if (eventSampleHis == null){
|
|
|
+ eventSampleHis = new ArrayList<>();
|
|
|
+ ownerId2TriggerSample.put(newEvent.getUid(), eventSampleHis);
|
|
|
+ }
|
|
|
+ eventSampleHis.addAll(ownerId2TriggerSample.remove(planDetail.getUid()));
|
|
|
}
|
|
|
continue;
|
|
|
}//上一次匹配成功了进入下一步
|
|
|
@@ -556,6 +627,15 @@ public class SiteDataWarnHandler {
|
|
|
thisTempStep.setLastEventId(newEvent.getUid());
|
|
|
thisTempStep.setLastEventAction(newEvent.getAction());
|
|
|
thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam))
|
|
|
+ eventIdAcceptPlanHisTriggerSam = newEvent.getUid();
|
|
|
+ List<SiteStatsDataItem> eventSampleHis = ownerId2TriggerSample.get(newEvent.getUid());
|
|
|
+ if (eventSampleHis == null){
|
|
|
+ eventSampleHis = new ArrayList<>();
|
|
|
+ ownerId2TriggerSample.put(newEvent.getUid(), eventSampleHis);
|
|
|
+ }
|
|
|
+ eventSampleHis.addAll(ownerId2TriggerSample.remove(planDetail.getUid()));
|
|
|
}else {
|
|
|
thisTempStep.setLastEventId("");
|
|
|
thisTempStep.setLastEventTime(0L);
|
|
|
@@ -579,6 +659,15 @@ public class SiteDataWarnHandler {
|
|
|
thisTempStep.setLastEventId(newEvent.getUid());
|
|
|
thisTempStep.setLastEventAction(newEvent.getAction());
|
|
|
thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam))
|
|
|
+ eventIdAcceptPlanHisTriggerSam = newEvent.getUid();
|
|
|
+ List<SiteStatsDataItem> eventSampleHis = ownerId2TriggerSample.get(newEvent.getUid());
|
|
|
+ if (eventSampleHis == null){
|
|
|
+ eventSampleHis = new ArrayList<>();
|
|
|
+ ownerId2TriggerSample.put(newEvent.getUid(), eventSampleHis);
|
|
|
+ }
|
|
|
+ eventSampleHis.addAll(ownerId2TriggerSample.remove(planDetail.getUid()));
|
|
|
}else {
|
|
|
thisTempStep.setLastEventId("");
|
|
|
thisTempStep.setLastEventTime(0L);
|
|
|
@@ -605,6 +694,15 @@ public class SiteDataWarnHandler {
|
|
|
thisTempStep.setLastEventId(newEvent.getUid());
|
|
|
thisTempStep.setLastEventAction(newEvent.getAction());
|
|
|
thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam))
|
|
|
+ eventIdAcceptPlanHisTriggerSam = newEvent.getUid();
|
|
|
+ List<SiteStatsDataItem> eventSampleHis = ownerId2TriggerSample.get(newEvent.getUid());
|
|
|
+ if (eventSampleHis == null){
|
|
|
+ eventSampleHis = new ArrayList<>();
|
|
|
+ ownerId2TriggerSample.put(newEvent.getUid(), eventSampleHis);
|
|
|
+ }
|
|
|
+ eventSampleHis.addAll(ownerId2TriggerSample.remove(planDetail.getUid()));
|
|
|
}
|
|
|
}
|
|
|
}else {//触发一个新的事件
|
|
|
@@ -620,6 +718,15 @@ public class SiteDataWarnHandler {
|
|
|
thisTempStep.setLastEventAction(newEvent.getAction());
|
|
|
thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
|
|
|
//[!!!]do not change the FirstMatchSampleTime[!!!]
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam))
|
|
|
+ eventIdAcceptPlanHisTriggerSam = newEvent.getUid();
|
|
|
+ List<SiteStatsDataItem> eventSampleHis = ownerId2TriggerSample.get(newEvent.getUid());
|
|
|
+ if (eventSampleHis == null){
|
|
|
+ eventSampleHis = new ArrayList<>();
|
|
|
+ ownerId2TriggerSample.put(newEvent.getUid(), eventSampleHis);
|
|
|
+ }
|
|
|
+ eventSampleHis.addAll(ownerId2TriggerSample.remove(planDetail.getUid()));
|
|
|
}
|
|
|
}else {//之前有预警事件
|
|
|
if (planDetail.getMergeToEvent() == 0 || thisTempStep.getLastEventAction() >= EventAction.DONE){//之前的预警事件已处理,则可认为进行重新计数
|
|
|
@@ -638,6 +745,15 @@ public class SiteDataWarnHandler {
|
|
|
thisTempStep.setLastEventId(newEvent.getUid());
|
|
|
thisTempStep.setLastEventAction(newEvent.getAction());
|
|
|
thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam))
|
|
|
+ eventIdAcceptPlanHisTriggerSam = newEvent.getUid();
|
|
|
+ List<SiteStatsDataItem> eventSampleHis = ownerId2TriggerSample.get(newEvent.getUid());
|
|
|
+ if (eventSampleHis == null){
|
|
|
+ eventSampleHis = new ArrayList<>();
|
|
|
+ ownerId2TriggerSample.put(newEvent.getUid(), eventSampleHis);
|
|
|
+ }
|
|
|
+ eventSampleHis.addAll(ownerId2TriggerSample.remove(planDetail.getUid()));
|
|
|
}else {
|
|
|
thisTempStep.setLastEventId("");
|
|
|
thisTempStep.setLastEventTime(0L);
|
|
|
@@ -651,6 +767,16 @@ public class SiteDataWarnHandler {
|
|
|
}else
|
|
|
oldEvent2EndUTC.put(thisTempStep.getLastEventId(), sampleRecordTm);
|
|
|
thisTempStep.setLastCompareSampleExplain(step);
|
|
|
+
|
|
|
+ final String lastEventID = thisTempStep.getLastEventId();
|
|
|
+ if (StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam))
|
|
|
+ eventIdAcceptPlanHisTriggerSam = lastEventID;
|
|
|
+ List<SiteStatsDataItem> eventSampleHis = ownerId2TriggerSample.get(lastEventID);
|
|
|
+ if (eventSampleHis == null){
|
|
|
+ eventSampleHis = new ArrayList<>();
|
|
|
+ ownerId2TriggerSample.put(lastEventID, eventSampleHis);
|
|
|
+ }
|
|
|
+ eventSampleHis.addAll(ownerId2TriggerSample.remove(planDetail.getUid()));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -677,10 +803,23 @@ public class SiteDataWarnHandler {
|
|
|
}});
|
|
|
}
|
|
|
}
|
|
|
+ List<Map<String, Object>> triggerSampleHisObj = null;
|
|
|
+ if (CommTool.mapSize(ownerId2TriggerSample) > 0){
|
|
|
+ triggerSampleHisObj = new ArrayList<>();
|
|
|
+ for (Map.Entry<String, List<SiteStatsDataItem>> entry:ownerId2TriggerSample.entrySet()){
|
|
|
+ if (CommTool.listSize(entry.getValue()) > 0){
|
|
|
+ triggerSampleHisObj.add(new HashMap<String, Object>(){{
|
|
|
+ put(OrdWarnTriggerSampleHisTable.W_INFO.OWNER_ID, entry.getKey());
|
|
|
+ put(OrdWarnTriggerSampleHisTable.W_INFO.SAMPLE, FastJsonUtil.toJSON(entry.getValue()));
|
|
|
+ }});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ownerId2TriggerSample.clear();
|
|
|
+ }
|
|
|
if (getWarnPlanInfoDBService().updatePlanForTrigger(new HashMap<String, Object>(){{
|
|
|
put(OrdWarnPlanInfoTable.W_INFO.UNIQUE_ID, planDetail.getUid());
|
|
|
put(OrdWarnPlanInfoTable.W_INFO.VERSION, planDetail.getVersion());
|
|
|
- }}, updatePlan, genNewEventObj, genOldEventObj) <= 0){
|
|
|
+ }}, updatePlan, genNewEventObj, genOldEventObj, triggerSampleHisObj, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
|
|
|
step = "Update warn plan trigger result to db failed.";
|
|
|
code = ResponseCode.RESULT_BAD;
|
|
|
}
|