Bläddra i källkod

完善站点实时监测类曲线数据分析

andyliu 3 veckor sedan
förälder
incheckning
54fb62513c
1 ändrade filer med 20 tillägg och 16 borttagningar
  1. 20 16
      src/main/java/com/shkpr/service/warncore/bizhandler/SiteDataHandler.java

+ 20 - 16
src/main/java/com/shkpr/service/warncore/bizhandler/SiteDataHandler.java

@@ -207,7 +207,7 @@ public class SiteDataHandler {
             }
 
             for (SiteSampleGroupItem sampleItem:siteSampleData.getData().get(0).getRecords()){
-                if (sampleItem.getTime() <= 0L)
+                if (sampleItem.getTime() <= 0L || CommTool.listSize(sampleItem.getFields()) <= 0)
                     continue;
                 if (planDetail.getDayTriggerUpperTimes() > 0
                         && thisTempStep.getDayTriggerTimes() >= planDetail.getDayTriggerUpperTimes()){
@@ -228,18 +228,18 @@ public class SiteDataHandler {
                 if (findRule == null)
                     continue;
                 for (OrdWarnRuleCondition condition:findRule.getConditions()){
-                    String needMatchValue = "";
+                    String originValue = "";
                     for (KeyValue kv:sampleItem.getFields()){
                         if (condition.getTag().equals(kv.getKey())){
-                            needMatchValue = kv.getValue();
+                            originValue = kv.getValue();
                             break;
                         }
                     }
-                    if (StringUtils.isEmpty(needMatchValue))
+                    if (StringUtils.isEmpty(originValue))
                         matched = matched || false;
                     else {
                         try {
-                            int nRes = CommTool.compareFloat(needMatchValue, condition.getThreshold());
+                            int nRes = CommTool.compareFloat(originValue, condition.getThreshold());
                             if (nRes == 0){
                                 if ("!=".equals(condition.getMethod())){
                                     matched = (matched || false);
@@ -262,9 +262,15 @@ public class SiteDataHandler {
                                 }else
                                     matched = (matched || false);
                             }
-                        }catch (Exception e){}
+                        }catch (Exception e){
+                            step = String.format("Compare Value Exception Error");
+                            code = ResponseCode.RESULT_BAD;
+                        }
                     }
                 }
+                if (code == ResponseCode.RESULT_BAD){
+                    break;
+                }
                 if (!matched){//本次没有匹配成功
                     thisTempStep.setLastCompareSampleTime(sampleItem.getTime());
                     thisTempStep.setLastCompareSampleResult(0);
@@ -272,39 +278,37 @@ public class SiteDataHandler {
                     thisTempStep.setLastEventId("");
                     thisTempStep.setLastEventTime(0L);
                     continue;
-                }
+                }//本次匹配成功进入下一步
 
                 if (thisTempStep.getLastCompareSampleResult() <= 0){//上一次没有匹配成功
                     thisTempStep.setLastCompareSampleTime(sampleItem.getTime());
                     thisTempStep.setLastCompareSampleResult(1);
                     thisTempStep.setFirstMatchSampleTime(sampleItem.getTime());
                     continue;
-                }
+                }//上一次匹配成功了进入下一步
 
-                long diffMatch = sampleItem.getTime()-thisTempStep.getLastCompareSampleTime();//两个最近匹配样本之间的时间差(单位:毫秒)
-                if (diffMatch > planDetail.getThresholdPeriod()*TimeTool.MS_ONE_MIN){//两个最近匹配样本间缺失的数据太多、或跨了天、或跨了时段,可重新计数
+                long diffMatch = sampleItem.getTime()-thisTempStep.getLastCompareSampleTime();//两个最近匹配样本之间的采集时间差(单位:毫秒)
+                if (diffMatch > planDetail.getThresholdPeriod()*TimeTool.MS_ONE_MIN){//两个最近匹配样本间缺失的数据太多、或跨了天、或跨了时段,可认为重新计数
                     thisTempStep.setLastCompareSampleTime(sampleItem.getTime());
                     thisTempStep.setLastCompareSampleResult(1);
                     thisTempStep.setFirstMatchSampleTime(sampleItem.getTime());
                     thisTempStep.setLastEventId("");
                     thisTempStep.setLastEventTime(0L);
                     continue;
-                }else {
-                    //两个最近匹配样本间隔很近,可认为是持续匹配
-                }
+                }//两个最近匹配样本间隔很近,可认为是持续匹配,则进入下一步
 
-                if (thisTempStep.getLastCompareSampleTime() < thisTempStep.getConditionMinUTC()){//上一个匹配样本是昨天的,可重新计数
+                if (thisTempStep.getLastCompareSampleTime() < thisTempStep.getConditionMinUTC()){//上一个匹配样本是非当前天的,可认为重新计数
                     thisTempStep.setLastCompareSampleTime(sampleItem.getTime());
                     thisTempStep.setLastCompareSampleResult(1);
                     thisTempStep.setFirstMatchSampleTime(sampleItem.getTime());
                     thisTempStep.setLastEventId("");
                     thisTempStep.setLastEventTime(0L);
                     continue;
-                }
+                }//上一个匹配样本是当天的,则进入下一步
 
                 long matchLen = (thisTempStep.getFirstMatchSampleTime()<=0)?0:(sampleItem.getTime()-thisTempStep.getFirstMatchSampleTime());//样本匹配的持续时长(单位:毫秒)
                 if (StringUtils.isEmpty(thisTempStep.getLastEventId())){//之前无预警事件
-                    if (matchLen < planDetail.getThresholdPeriod()*TimeTool.MS_ONE_MIN){//还有持续等待
+                    if (matchLen < planDetail.getThresholdPeriod()*TimeTool.MS_ONE_MIN){//还得持续等待,达不到触发事件的累计时长
                         thisTempStep.setLastCompareSampleTime(sampleItem.getTime());
                         thisTempStep.setLastCompareSampleResult(1);
                         if (thisTempStep.getFirstMatchSampleTime() <= 0)