Просмотр исходного кода

优化实时采集数据的分析预警逻辑

andyliu 1 неделя назад
Родитель
Сommit
f41351ea30

+ 2 - 2
src/main/java/com/shkpr/service/warncore/bizhandler/SiteDataWarnHandler.java

@@ -296,13 +296,13 @@ public class SiteDataWarnHandler {
             if (thisStepTempRes.getLastCompareSampleTime() <= 0L){//从未分析过则重新计数
                 thisStepTempRes.resetData();
             }else {
-                if (FrequencyUnit.MIN.equals(planDetail.getFrequencyUnit())){
+                /*if (FrequencyUnit.MIN.equals(planDetail.getFrequencyUnit())){
                     if (minDevCycle > 0 && ((thisStepTempRes.getLastCompareSampleTime()+TimeTool.MS_ONE_SEC*minDevCycle) > curUTCTm)){//设备的下一个采集数据还未到
                         step = "Dev next record not arrived,do analysis next time.";
                         code = ResponseCode.RESULT_BAD;
                         break;
                     }
-                }
+                }*/
                 int sampleClock = (int)((thisStepTempRes.getLastCompareSampleTime()/1000/60/60%24+8)%24);
                 if ((sampleClock >= ruleStartClock && sampleClock <= ruleEndClock)
                         || ((sampleClock+1)%24) == ruleStartClock){

+ 7 - 0
src/main/java/com/shkpr/service/warncore/bizhandler/TimerCheckWarnPlanMgr.java

@@ -30,6 +30,7 @@ public class TimerCheckWarnPlanMgr {
     }
 
     public static void checkWarnPlanByFrequency(int curClock, int curMinute, String frequencyUnit){
+        long curNowTm = TimeTool.getCurSecUTC();
         int curTmForCompare = 0;
         String tmFiler = "";
         if (FrequencyUnit.MIN.equals(frequencyUnit)){
@@ -132,6 +133,12 @@ public class TimerCheckWarnPlanMgr {
 
                             if (DoPeriodUnit.HOUR.equals(oItem.getDoPeriodUnit()) && curClock < oItem.getMinStarts())
                                 continue;
+                            if (FrequencyUnit.MIN.equals(frequencyUnit)
+                                    && oItem.getMinDevCycle() > 0
+                                    && oItem.getLastCompareSampleTime() > 0L){
+                                if ((oItem.getLastCompareSampleTime() + TimeTool.MS_ONE_SEC*oItem.getMinDevCycle()) > curNowTm)//设备的下一个采集数据还未到
+                                    continue;
+                            }
                         //}
                         AsyncTaskQueueMgr.getInstance().postTaskData(TaskQueueDataTypeEx.ASYNC_ANALY_WARN_PLAN, new OrdWarnPlanWillDo(oItem.getUid(), oItem.getObjSrc()));
                     }

+ 2 - 0
src/main/java/com/shkpr/service/warncore/dto/OrdWarnPlanCheckBean.java

@@ -15,10 +15,12 @@ public class OrdWarnPlanCheckBean {
     private int cycleTriggerUpperTimes = -1;
     private long lastAnalyTime = 0L;
     private long lastEventTime = 0L;
+    private long lastCompareSampleTime = 0L;
     private String ownerSrc = "";
     private String objSrc = "";
     private String doPeriodUnit = "";
     private int minStarts = -1;
+    private int minDevCycle = 0;//最小的设备采集周期(单位:秒)
     private String ownerId = "";
 
     public OrdWarnPlanCheckBean() {