فهرست منبع

1) 将DayTriggerTimes重命名为CycleTriggerTimes
2) 生成预警事件时,存储预警事件的gis坐标值
3) 生成预警事件时,按标准格式存储触发规则

andyliu 1 هفته پیش
والد
کامیت
291b19bbde

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

@@ -142,11 +142,11 @@ public class SiteDataWarnHandler {
             thisStepTempRes.setQueryBeginUTC(queryBeginUTC);
             thisStepTempRes.setQueryEndUTC(queryEndUTC);
             thisStepTempRes.setConditionMinUTC(conditionMinUTC);
-            thisStepTempRes.setDayTriggerTimes(planDetail.getDayTriggerTimes());
+            thisStepTempRes.setCycleTriggerTimes(planDetail.getCycleTriggerTimes());
             if (planDetail.getLastEventTime() < conditionMinUTC)
-                thisStepTempRes.setDayTriggerTimes(0);
-            if (planDetail.getDayTriggerUpperTimes() > 0
-                    && thisStepTempRes.getDayTriggerTimes() >= planDetail.getDayTriggerUpperTimes()){//触发事件达到最大个数
+                thisStepTempRes.setCycleTriggerTimes(0);
+            if (planDetail.getCycleTriggerUpperTimes() > 0
+                    && thisStepTempRes.getCycleTriggerTimes() >= planDetail.getCycleTriggerUpperTimes()){//触发事件达到最大个数
                 step = "Event arrive at max limit,stop analysis for today.";
                 code = ResponseCode.RESULT_BAD;
                 break;
@@ -155,6 +155,7 @@ public class SiteDataWarnHandler {
             if (!StringUtils.isEmpty(planDetail.getLastEventId())){
                 //向数据库中快速查询事件最近处理阶段action的值,可以用exist判断更快
                 //并赋值给thisStepTempRes
+                //如果lastEvent事件被手动意外删除了,则将thisStepTempRes中的LastEventId=“”且LastEventTime=0
             }
         }while (false);
         if (code == ResponseCode.RESULT_NORMAL){
@@ -231,8 +232,8 @@ public class SiteDataWarnHandler {
                 long sampleRecordTm = sampleItem.getTime();
                 if (sampleRecordTm <= 0L || CommTool.listSize(sampleItem.getFields()) <= 0)
                     continue;//数据条目缺失可认为,还在等待录入则跳过
-                if (planDetail.getDayTriggerUpperTimes() > 0
-                        && thisTempStep.getDayTriggerTimes() >= planDetail.getDayTriggerUpperTimes()){
+                if (planDetail.getCycleTriggerUpperTimes() > 0
+                        && thisTempStep.getCycleTriggerTimes() >= planDetail.getCycleTriggerUpperTimes()){
                     step = String.format("Event arrive at max limit");
                     code = ResponseCode.RESULT_BAD;
                     break;
@@ -328,7 +329,7 @@ public class SiteDataWarnHandler {
                         newEvent2Gen.put(newEvent.getUid(), newEvent);
                         thisTempStep.setLastEventId(newEvent.getUid());
                         thisTempStep.setLastEventAction(newEvent.getAction());
-                        thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
+                        thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
                         //[!!!]do not change the FirstMatchSampleTime[!!!]
                     }
                 }else {//之前有预警事件
@@ -449,8 +450,8 @@ public class SiteDataWarnHandler {
                         || sampleItem.getCode() != 0
                         || CommTool.listSize(sampleItem.getReport()) <= 0)
                     continue;//数据条目缺失可认为,还在等待录入则跳过
-                if (planDetail.getDayTriggerUpperTimes() > 0
-                        && thisTempStep.getDayTriggerTimes() >= planDetail.getDayTriggerUpperTimes()){
+                if (planDetail.getCycleTriggerUpperTimes() > 0
+                        && thisTempStep.getCycleTriggerTimes() >= planDetail.getCycleTriggerUpperTimes()){
                     step = String.format("Event arrive at max limit");
                     code = ResponseCode.RESULT_BAD;
                     break;
@@ -507,7 +508,7 @@ public class SiteDataWarnHandler {
                         thisTempStep.setLastEventId("新事件ID");
                         thisTempStep.setLastEventTime(curTime);
                         thisTempStep.setLastEventAction(EventAction.DOING);
-                        thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
+                        thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
                     }
                     continue;
                 }//上一次匹配成功了进入下一步
@@ -521,7 +522,7 @@ public class SiteDataWarnHandler {
                         thisTempStep.setLastEventId("新事件ID");
                         thisTempStep.setLastEventTime(curTime);
                         thisTempStep.setLastEventAction(EventAction.DOING);
-                        thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
+                        thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
                     }else {
                         thisTempStep.setLastEventId("");
                         thisTempStep.setLastEventTime(0L);
@@ -537,7 +538,7 @@ public class SiteDataWarnHandler {
                         thisTempStep.setLastEventId("新事件ID");
                         thisTempStep.setLastEventTime(curTime);
                         thisTempStep.setLastEventAction(EventAction.DOING);
-                        thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
+                        thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
                     }else {
                         thisTempStep.setLastEventId("");
                         thisTempStep.setLastEventTime(0L);
@@ -556,7 +557,7 @@ public class SiteDataWarnHandler {
                                 thisTempStep.setLastEventId("新事件ID");
                                 thisTempStep.setLastEventTime(curTime);
                                 thisTempStep.setLastEventAction(EventAction.DOING);
-                                thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
+                                thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
                             }
                         }
                     }else {//触发一个新的事件
@@ -565,7 +566,7 @@ public class SiteDataWarnHandler {
                         thisTempStep.setLastEventId("新事件ID");
                         thisTempStep.setLastEventTime(curTime);
                         thisTempStep.setLastEventAction(EventAction.DOING);
-                        thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
+                        thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
                         //[!!!]do not change the FirstMatchSampleTime[!!!]
                     }
                 }else {//之前有预警事件
@@ -577,7 +578,7 @@ public class SiteDataWarnHandler {
                             thisTempStep.setLastEventId("新事件ID");
                             thisTempStep.setLastEventTime(curTime);
                             thisTempStep.setLastEventAction(EventAction.DOING);
-                            thisTempStep.setDayTriggerTimes(thisTempStep.getDayTriggerTimes()+1);
+                            thisTempStep.setCycleTriggerTimes(thisTempStep.getCycleTriggerTimes()+1);
                         }else {
                             thisTempStep.setLastEventId("");
                             thisTempStep.setLastEventTime(0L);

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

@@ -83,11 +83,11 @@ public class TimerCheckWarnPlanMgr {
                             continue;
 
                         if (DoPeriodUnit.HOUR.equals(oItem.getDoPeriodUnit())){
-                            if (oItem.getDayTriggerUpperTimes() >= 0){
-                                if (oItem.getDayTriggerUpperTimes() == 0)
+                            if (oItem.getCycleTriggerUpperTimes() >= 0){
+                                if (oItem.getCycleTriggerUpperTimes() == 0)
                                     continue;
                                 if (oItem.getLastEventTime() >= thisDayBegin
-                                        && oItem.getDayTriggerTimes() >= oItem.getDayTriggerUpperTimes()){
+                                        && oItem.getCycleTriggerTimes() >= oItem.getCycleTriggerUpperTimes()){
                                     continue;
                                 }
                             }

+ 1 - 1
src/main/java/com/shkpr/service/warncore/dbdao/providers/BaseSqlCondition.java

@@ -31,7 +31,7 @@ public class BaseSqlCondition {
         public static String LINK = "link";
         public static String DATA = "data";
     }
-    public static Map<String, Object> genSQLItem(String fieldKey, String method, String link, Object data){
+    public static Map<String, Object> genSQLItem(String link, String fieldKey, String method, Object data){
         if (StringUtils.isEmpty(fieldKey)
                 || StringUtils.isEmpty(method)
                 || data == null)

+ 43 - 0
src/main/java/com/shkpr/service/warncore/dto/OrdWarnEventRule.java

@@ -0,0 +1,43 @@
+package com.shkpr.service.warncore.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Getter
+@Setter
+public class OrdWarnEventRule {
+    private String objSrc = "";
+    private String objId = "";
+    private String objName = "";
+    private List<OrdWarnEventRuleGroup> groups = null;
+
+    public OrdWarnEventRule() {
+    }
+
+    public void appendFromPlanRule(OrdWarnPlanRules planRule){
+        if (planRule == null)
+            return;
+        if (!planRule.getObjId().equals(this.objId)){
+            this.objId = planRule.getObjId();
+            this.objSrc = planRule.getObjSrc();
+            this.objName = planRule.getObjName();
+            this.groups = new ArrayList<>();
+        }else {
+            if (this.groups == null)
+                this.groups = new ArrayList<>();
+        }
+        this.groups.add(new OrdWarnEventRuleGroup(planRule));
+    }
+
+    public void clearRes(){
+        if (groups != null){
+            for (OrdWarnEventRuleGroup item:groups)
+                item.clearRes();
+            groups.clear();
+        }
+        groups = null;
+    }
+}

+ 29 - 0
src/main/java/com/shkpr/service/warncore/dto/OrdWarnEventRuleGroup.java

@@ -0,0 +1,29 @@
+package com.shkpr.service.warncore.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class OrdWarnEventRuleGroup {
+    private int starts = 0;
+    private int ends = 0;
+    private String restrict = "any";
+    private List<OrdWarnRuleCondition> conditions = null;
+
+    public OrdWarnEventRuleGroup() {
+    }
+
+    public OrdWarnEventRuleGroup(OrdWarnPlanRules planRule) {
+        this.starts = planRule.getStarts();
+        this.ends = planRule.getEnds();
+        this.restrict = planRule.getRestrict();
+        this.conditions = planRule.getConditions();
+    }
+
+    public void clearRes(){
+        this.conditions = null;
+    }
+}

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

@@ -11,8 +11,8 @@ public class OrdWarnPlanCheckBean {
     private int status = -1;
     private int frequency = 0;
     private String frequencyUnit = "";
-    private int dayTriggerTimes = 0;
-    private int dayTriggerUpperTimes = -1;
+    private int cycleTriggerTimes = 0;
+    private int cycleTriggerUpperTimes = -1;
     private long lastAnalyTime = 0L;
     private long lastEventTime = 0L;
     private String ownerSrc = "";

+ 3 - 2
src/main/java/com/shkpr/service/warncore/dto/OrdWarnPlanDetail.java

@@ -14,6 +14,7 @@ public class OrdWarnPlanDetail {
     private String ownerMainType = "";
     private String ownerSubType = "";
     private String owner = "";
+    private String ownerGis = "";
     private int level = 0;
     private int threshold = 0;//连续x次触发就报警(单位:次数)
     private int frequency = 0;//分析频率
@@ -33,8 +34,8 @@ public class OrdWarnPlanDetail {
     private String doDb = "";
     private String doTime = "";
     private String ending = "";
-    private int dayTriggerTimes = 0;
-    private int dayTriggerUpperTimes = -1;
+    private int cycleTriggerTimes = 0;
+    private int cycleTriggerUpperTimes = -1;
     private int mergeToEvent = 1;//触发规则时是否合并到上一个会处理的事件上: 0--不合并;1--合并
     private String batch = "";
     private int compareTimes = 0;//预案的累计对比次数

+ 1 - 0
src/main/java/com/shkpr/service/warncore/dto/OrdWarnPlanRules.java

@@ -16,6 +16,7 @@ public class OrdWarnPlanRules {
     private String objId = "";
     private String objName = "";
     private String objSrc = "";
+    private String objGis = "";
     private int starts = 0;
     private int ends = 0;
     private String restrict = "any";

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

@@ -22,7 +22,7 @@ public class OrdWarnPlanTempStep {
     private String lastEventId = "";//最近一次触发产生事件的id
     private int lastEventAction = 1;//最近一次触发产生事件的处理阶段(1--待处理;2--已处理)
     private long conditionMinUTC = 0L;//触发规则列表中第一个时段的起始时刻
-    private int dayTriggerTimes = 0;//今日触发事件的个数
+    private int cycleTriggerTimes = 0;//指定周期内触发事件的个数
     private boolean doForTodayBefore = false;//是否只分析今日之前的数据
 
     private int compareTimes = 0;//预案的累计对比次数
@@ -58,7 +58,7 @@ public class OrdWarnPlanTempStep {
 
     public Map<String, Object> genUpdatePlan(){
         return new HashMap<String, Object>(){{
-            put("day_trigger_times", dayTriggerTimes);
+            put("cycle_trigger_times", cycleTriggerTimes);
             put("compare_times", compareTimes);
             put("last_analy_time", lastAnalyTime);
             put("last_analy_explain", lastAnalyExplain);

+ 0 - 1
src/main/java/com/shkpr/service/warncore/globalmgr/ScheduleTaskMgr.java

@@ -65,7 +65,6 @@ public class ScheduleTaskMgr {
         final long curTm = System.currentTimeMillis();
         final int curMinute = (int)(curTm/1000/60%60);//获取当前分钟数
         final int curClock = (int)((curTm/1000/60/60%24+8)%24);//获取当前小时数
-
         ThreadTaskMgr.runTask(new TraceRunnable("S.CHECK.WARN.PLAN.BY.MIN") {
             @Override
             public void function() {

+ 30 - 2
src/main/java/com/shkpr/service/warncore/jsonbean/JPOrdWarnEventInfo.java

@@ -1,13 +1,17 @@
 package com.shkpr.service.warncore.jsonbean;
 
 import com.global.base.tools.FastJsonUtil;
+import com.global.base.tools.RandomUtil;
 import com.shkpr.service.warncore.commtools.CommTool;
+import com.shkpr.service.warncore.dto.OrdWarnEventRule;
 import com.shkpr.service.warncore.dto.OrdWarnPlanDetail;
 import com.shkpr.service.warncore.dto.OrdWarnPlanRules;
 import com.shkpr.service.warncore.dto.OrdWarnPlanTempStep;
 import lombok.Getter;
 import lombok.Setter;
+import org.springframework.util.StringUtils;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -56,14 +60,38 @@ public class JPOrdWarnEventInfo {
         this.level = planDetail.getLevel();
         this.ending = planDetail.getEnding();
         this.planBatch = planDetail.getBatch();
+        this.gis = CommTool.listSize(rules)>0?rules.get(0).getObjGis():"";
+        if (StringUtils.isEmpty(this.gis))
+            this.gis = planDetail.getOwnerGis();
 
         this.fromTime = thisTempStep.getFirstMatchSampleTime();
         this.toTime = thisTempStep.getLastCompareSampleTime();
-        this.rules = FastJsonUtil.toJSON(rules);
+        this.rules = formatRule(rules);
         this.limitTime = 0L;
         this.createTime = eventTime;
         this.updateTime = eventTime;
         this.uid = CommTool.genWarnEventId(eventTime, "");
-        this.title = String.format("%s--%s事件", planDetail.getTitle(), this.uid.substring(5, 15));
+        this.title = String.format("%s--%s--%d事件", planDetail.getTitle(), this.uid.substring(5,15), RandomUtil.getDigitalRandomStr(4));
+    }
+
+    private String formatRule(List<OrdWarnPlanRules> rules){
+        String formatRes = "";
+        if (CommTool.listSize(rules) <= 0)
+            return formatRes;
+
+        Map<String, OrdWarnEventRule> obj2Rule = new HashMap<>();
+        for (OrdWarnPlanRules item:rules){
+            OrdWarnEventRule des = obj2Rule.getOrDefault(item.getObjId(), null);
+            if (des == null){
+                des = new OrdWarnEventRule();
+                obj2Rule.put(item.getObjId(), des);
+            }
+            des.appendFromPlanRule(item);
+        }
+        formatRes = FastJsonUtil.toJSON(obj2Rule.values());
+        for (Map.Entry<String, OrdWarnEventRule> entry:obj2Rule.entrySet())
+            entry.getValue().clearRes();
+        obj2Rule.clear();
+        return formatRes;
     }
 }