|
|
@@ -13,6 +13,7 @@ import com.shkpr.service.warncore.constants.LogFlagBusiType;
|
|
|
import com.shkpr.service.warncore.dbdao.DBMgrProxy;
|
|
|
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.dto.*;
|
|
|
import com.shkpr.service.warncore.jsonbean.JPGetRegionData;
|
|
|
@@ -87,15 +88,15 @@ public class SiteDataWarnHandler {
|
|
|
int findStartClock = -1;
|
|
|
for (int i=rules.size()-1;i>=0;i--){
|
|
|
if (i == 0)
|
|
|
- conditionMinUTC = TimeTool.convertDateStr2UTC(String.format("%s %2d:00:00", curDate, rules.get(i).getStart()));
|
|
|
- if (curClock >= rules.get(i).getStart() && curClock <= rules.get(i).getEnd()){
|
|
|
- findStartClock = rules.get(i).getStart();
|
|
|
+ conditionMinUTC = TimeTool.convertDateStr2UTC(String.format("%s %2d:00:00", curDate, rules.get(i).getStarts()));
|
|
|
+ if (curClock >= rules.get(i).getStarts() && curClock <= rules.get(i).getEnds()){
|
|
|
+ findStartClock = rules.get(i).getStarts();
|
|
|
if (FrequencyUnit.MIN.equals(planDetail.getFrequencyUnit())){//以分钟为单位进行分析
|
|
|
queryEndUTC = Math.min(curUTCTm
|
|
|
- , TimeTool.convertDateStr2UTC(String.format("%s %2d:59:59", curDate, rules.get(i).getEnd())));
|
|
|
+ , TimeTool.convertDateStr2UTC(String.format("%s %2d:59:59", curDate, rules.get(i).getEnds())));
|
|
|
}else {//以小时或其他单位进行分析
|
|
|
queryEndUTC = Math.min(TimeTool.convertDateStr2UTC(String.format("%s %2d:59:59", curDate, curClock))
|
|
|
- , TimeTool.convertDateStr2UTC(String.format("%s %2d:59:59", curDate, rules.get(i).getEnd())));
|
|
|
+ , TimeTool.convertDateStr2UTC(String.format("%s %2d:59:59", curDate, rules.get(i).getEnds())));
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
@@ -115,8 +116,8 @@ public class SiteDataWarnHandler {
|
|
|
for (int i=rules.size()-1;i>=0;i--){
|
|
|
if (findStartClock < 0)
|
|
|
break;
|
|
|
- if (findStartClock == rules.get(i).getEnd())
|
|
|
- findStartClock = rules.get(i).getStart()-1;
|
|
|
+ if (findStartClock == rules.get(i).getEnds())
|
|
|
+ findStartClock = rules.get(i).getStarts()-1;
|
|
|
}
|
|
|
queryBeginUTC = TimeTool.convertDateStr2UTC(String.format("%s %2d:00:00", curDate, findStartClock+1));
|
|
|
}
|
|
|
@@ -152,7 +153,7 @@ public class SiteDataWarnHandler {
|
|
|
}
|
|
|
|
|
|
if (!StringUtils.isEmpty(planDetail.getLastEventId())){
|
|
|
- //向数据库中快速查询事件最近处理阶段action的值
|
|
|
+ //向数据库中快速查询事件最近处理阶段action的值,可以用exist判断更快
|
|
|
//并赋值给thisStepTempRes
|
|
|
}
|
|
|
}while (false);
|
|
|
@@ -169,7 +170,15 @@ public class SiteDataWarnHandler {
|
|
|
}else {//单独更新预警方案的分析时间、次数、说明
|
|
|
thisStepTempRes.setLastAnalyExplain(step);
|
|
|
Map<String, Object> updatePlan = thisStepTempRes.genUpdatePlan();
|
|
|
+ updatePlan.put(OrdWarnPlanInfoTable.W_INFO.VERSION, planDetail.getVersion()+1);
|
|
|
updatePlan.put(OrdWarnPlanInfoTable.W_INFO.UPDATE_TIME, System.currentTimeMillis());
|
|
|
+ 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){
|
|
|
+ step = "Update warn plan trigger result to db failed.";
|
|
|
+ code = ResponseCode.RESULT_BAD;
|
|
|
+ }
|
|
|
}
|
|
|
LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_SITE_DATA_WARN_HANDLE.toStrValue(), mStrClassName
|
|
|
, String.format("Handler Site Data Plan:{planId=%s} {step=%s} {%s}...",
|
|
|
@@ -183,8 +192,9 @@ public class SiteDataWarnHandler {
|
|
|
ResponseCode code = ResponseCode.RESULT_NORMAL;
|
|
|
final String siteId = rules.get(0).getObjId();
|
|
|
SiteSampleDataResult siteSampleData = null;
|
|
|
- Map<String, Long> eventId2NewEndUTC = new HashMap<>();//需要更新预警事件的样本截止时间
|
|
|
- List<Map<String, Object>> eventToGen = new ArrayList<>();
|
|
|
+ Map<String, Long> oldEvent2EndUTC = new HashMap<>();//需要更新预警事件的样本截止时间
|
|
|
+ Map<String, JPOrdWarnEventInfo> newEvent2Gen = new HashMap<>();
|
|
|
+
|
|
|
do {
|
|
|
JPGetRegionData jpParam = new JPGetRegionData();
|
|
|
jpParam.setTotal(1);
|
|
|
@@ -232,7 +242,7 @@ public class SiteDataWarnHandler {
|
|
|
OrdWarnPlanRules findRule = null;
|
|
|
int sampleRecordClock = (int)((sampleRecordTm/1000/60/60%24+8)%24);
|
|
|
for (OrdWarnPlanRules ruleItem:rules){
|
|
|
- if (sampleRecordClock <= ruleItem.getEnd() && sampleRecordClock >= ruleItem.getStart()){
|
|
|
+ if (sampleRecordClock <= ruleItem.getEnds() && sampleRecordClock >= ruleItem.getStarts()){
|
|
|
findRule = ruleItem;
|
|
|
break;
|
|
|
}
|
|
|
@@ -312,12 +322,12 @@ public class SiteDataWarnHandler {
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
|
|
|
- thisTempStep.setLastEventAction(EventAction.DOING);
|
|
|
thisTempStep.setLastCompareSampleExplain("This is matched, and will gen event.");
|
|
|
|
|
|
JPOrdWarnEventInfo newEvent = new JPOrdWarnEventInfo(planDetail, rules, thisTempStep, thisTempStep.getLastEventTime());
|
|
|
- eventToGen.add(newEvent.genNewMapData());
|
|
|
+ newEvent2Gen.put(newEvent.getUid(), newEvent);
|
|
|
thisTempStep.setLastEventId(newEvent.getUid());
|
|
|
+ thisTempStep.setLastEventAction(newEvent.getAction());
|
|
|
thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
|
|
|
//[!!!]do not change the FirstMatchSampleTime[!!!]
|
|
|
}
|
|
|
@@ -332,7 +342,10 @@ public class SiteDataWarnHandler {
|
|
|
}else {//之前的预警事件未处理,则更新预警事件的样本截止时刻
|
|
|
thisTempStep.setLastCompareSampleTime(sampleRecordTm);
|
|
|
thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
|
|
|
- eventId2NewEndUTC.put(thisTempStep.getLastEventId(), sampleRecordTm);
|
|
|
+ if (newEvent2Gen.containsKey(thisTempStep.getLastEventId())){
|
|
|
+ newEvent2Gen.get(thisTempStep.getLastEventId()).setToTime(sampleRecordTm);
|
|
|
+ }else
|
|
|
+ oldEvent2EndUTC.put(thisTempStep.getLastEventId(), sampleRecordTm);
|
|
|
thisTempStep.setLastCompareSampleExplain("This is matched, but need to merge the last event.");
|
|
|
}
|
|
|
}
|
|
|
@@ -341,10 +354,32 @@ public class SiteDataWarnHandler {
|
|
|
|
|
|
thisTempStep.setLastAnalyExplain(step);
|
|
|
Map<String, Object> updatePlan = thisTempStep.genUpdatePlan();
|
|
|
+ updatePlan.put(OrdWarnPlanInfoTable.W_INFO.VERSION, planDetail.getVersion()+1);
|
|
|
updatePlan.put(OrdWarnPlanInfoTable.W_INFO.UPDATE_TIME, System.currentTimeMillis());
|
|
|
- //将eventId2NewEndUTC进行更新
|
|
|
- //将eventToGen进行插入
|
|
|
-
|
|
|
+ List<Map<String, Object>> genNewEventObj = null;
|
|
|
+ if (CommTool.mapSize(newEvent2Gen) > 0){
|
|
|
+ genNewEventObj = new ArrayList<>();
|
|
|
+ for (Map.Entry<String, JPOrdWarnEventInfo> entry:newEvent2Gen.entrySet())
|
|
|
+ genNewEventObj.add(FastJsonUtil.obj2Map(entry.getValue(), true));
|
|
|
+ }
|
|
|
+ List<Map<String, Object>> genOldEventObj = null;
|
|
|
+ if (CommTool.mapSize(oldEvent2EndUTC) > 0){
|
|
|
+ genOldEventObj = new ArrayList<>();
|
|
|
+ for (Map.Entry<String, Long> entry:oldEvent2EndUTC.entrySet()){
|
|
|
+ genOldEventObj.add(new HashMap<String, Object>(){{
|
|
|
+ put(OrdWarnEventInfoTable.W_INFO.UNIQUE_ID, entry.getKey());
|
|
|
+ put(OrdWarnEventInfoTable.W_INFO.TO_TIME, entry.getValue());
|
|
|
+ put(OrdWarnEventInfoTable.W_INFO.UPDATE_TIME, TimeTool.getCurMsUTC());
|
|
|
+ }});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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){
|
|
|
+ step = "Update warn plan trigger result to db failed.";
|
|
|
+ code = ResponseCode.RESULT_BAD;
|
|
|
+ }
|
|
|
LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_SITE_DATA_WARN_HANDLE.toStrValue(), mStrClassName
|
|
|
, String.format("Analysis Data For Real By Set:{planId=%s,siteId=%s} {step=%s} {%s}...",
|
|
|
planDetail.getUid(), siteId, step, code.toString()));
|
|
|
@@ -425,7 +460,7 @@ public class SiteDataWarnHandler {
|
|
|
OrdWarnPlanRules findRule = null;
|
|
|
int sampleRecordClock = (int)((sampleRecordTm/1000/60/60%24+8)%24);
|
|
|
for (OrdWarnPlanRules ruleItem:rules){
|
|
|
- if (sampleRecordClock <= ruleItem.getEnd() && sampleRecordClock >= ruleItem.getStart()){
|
|
|
+ if (sampleRecordClock <= ruleItem.getEnds() && sampleRecordClock >= ruleItem.getStarts()){
|
|
|
findRule = ruleItem;
|
|
|
break;
|
|
|
}
|