Ver código fonte

1) 解决小时分析,跨天无法合并的问题
2) 细化日志打印
3) 事件生成时,自动将预案的规则拷贝入事件的规则中

andyliu 2 semanas atrás
pai
commit
76a04e0631

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

@@ -134,7 +134,7 @@ public class CommToolHandler {
         return action;
     }
 
-    public static ResponseCode updateOrdWarnPlanTriggerRecord(Map<String, Object> planWhere
+    /*public static ResponseCode updateOrdWarnPlanTriggerRecord(Map<String, Object> planWhere
             , Map<String, Object> planData
             , List<Map<String, Object>> newEvents
             , List<Map<String, Object>> oldEvents){
@@ -143,7 +143,7 @@ public class CommToolHandler {
             code = ResponseCode.RESULT_NORMAL;
         }
         return code;
-    }
+    }*/
 
     public static String genUnionEventRemark(String eventPrefix, String zoneName, String itemName, long sampleDataTime){
         if (StringUtils.isEmpty(zoneName) || StringUtils.isEmpty(itemName) || sampleDataTime <= 0L)

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

@@ -92,10 +92,12 @@ public class SiteDataWarnHandler {
             if (code != ResponseCode.RESULT_NORMAL)
                 break;
 
-            int findStartRange = -1;
+            int findStartRange = -1, ruleStartRange = -1, ruleEndRange = -1;
             for (int i=rules.size()-1;i>=0;i--){
                 if (preDayInMonth >= rules.get(i).getStarts() && preDayInMonth <= rules.get(i).getEnds()){
                     findStartRange = rules.get(i).getStarts();
+                    ruleStartRange = findStartRange;
+                    ruleEndRange = rules.get(i).getEnds();
                     break;
                 }
             }
@@ -116,16 +118,21 @@ public class SiteDataWarnHandler {
 
             queryBeginUTC = TimeTool.convertDateStr2BeginUTC(String.format("%d-%02d-01 00:00:00", preDayInYear, findStartRange+1));
             conditionMinUTC = queryBeginUTC;
+            ruleStartRange = findStartRange+1;
             long before3DayUTC = thisTodayBegin-TimeTool.MS_ONE_DAY*7;//最多只往前分析7天
             if (before3DayUTC > queryBeginUTC)
                 queryBeginUTC = before3DayUTC;
 
-            if (thisStepTempRes.getLastCompareSampleTime() <= 0L
-                    || thisStepTempRes.getLastCompareSampleTime() < queryBeginUTC) {//从未分析过则重新计数)
+            if (thisStepTempRes.getLastCompareSampleTime() <= 0L) {//从未分析过则重新计数)
                 thisStepTempRes.resetData();
-            }else if (thisStepTempRes.getLastCompareSampleTime() >= queryBeginUTC) {
-                queryBeginUTC = thisStepTempRes.getLastCompareSampleTime() + TimeTool.MS_ONE_DAY;
+            }else {
+                int sampleInMonth = TimeTool.getMonthIndex(thisStepTempRes.getLastCompareSampleTime());
+                if (sampleInMonth >= ruleStartRange && sampleInMonth <= ruleEndRange){
+                    queryBeginUTC = Math.max(queryBeginUTC, thisStepTempRes.getLastCompareSampleTime() + TimeTool.MS_ONE_DAY);
+                }else//样本跨了时段则重新计数
+                    thisStepTempRes.resetData();
             }
+
             if (queryBeginUTC >= queryEndUTC){
                 step = "Time is invalid,do analysis next time";
                 code = ResponseCode.RESULT_BAD;
@@ -175,7 +182,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, null, false, "") <= 0){
+            }}, updatePlan, null, null, null, null, false, "") <= 0){
                 step = "Update warn plan trigger result to db failed.";
                 code = ResponseCode.RESULT_BAD;
             }
@@ -227,6 +234,7 @@ public class SiteDataWarnHandler {
             }
         }
 
+        int ruleStartClock = -1, ruleEndClock = -1;
         OrdWarnPlanTempStep thisStepTempRes = new OrdWarnPlanTempStep(planDetail);
         thisStepTempRes.setLastAnalyTime(curUTCTm);
         thisStepTempRes.setCompareTimes(planDetail.getCompareTimes()+1);
@@ -238,6 +246,8 @@ public class SiteDataWarnHandler {
             for (int i=rules.size()-1;i>=0;i--){
                 if (curClock >= rules.get(i).getStarts() && curClock <= rules.get(i).getEnds()){
                     findStartClock = rules.get(i).getStarts();
+                    ruleStartClock = findStartClock;
+                    ruleEndClock = rules.get(i).getEnds();
                     if (FrequencyUnit.MIN.equals(planDetail.getFrequencyUnit())){//以分钟为单位进行分析
                         queryEndUTC = Math.min(curUTCTm
                                 , TimeTool.convertDateStr2UTC(String.format("%s %02d:59:59", curDate, rules.get(i).getEnds())));
@@ -263,6 +273,7 @@ public class SiteDataWarnHandler {
                     findStartClock = rules.get(i).getStarts()-1;
             }
             queryBeginUTC = TimeTool.convertDateStr2UTC(String.format("%s %02d:00:00", curDate, findStartClock+1));
+            ruleStartClock =  findStartClock+1;
 
             if (doForTodayBefore){//只分析昨日
                 queryBeginUTC = queryBeginUTC - TimeTool.MS_ONE_DAY;
@@ -275,15 +286,18 @@ public class SiteDataWarnHandler {
                 */
             }
 
-            if (thisStepTempRes.getLastCompareSampleTime() <= 0L //从未分析过则重新计数
-                 || thisStepTempRes.getLastCompareSampleTime() < queryBeginUTC){//样本跨了时段则重新计数
+            if (thisStepTempRes.getLastCompareSampleTime() <= 0L){//从未分析过则重新计数
                 thisStepTempRes.resetData();
-            }else if (thisStepTempRes.getLastCompareSampleTime() >= queryBeginUTC){
-                if (FrequencyUnit.MIN.equals(planDetail.getFrequencyUnit())) {//以分钟为单位进行分析
-                    queryBeginUTC = thisStepTempRes.getLastCompareSampleTime() + TimeTool.MS_ONE_SEC;
-                }else {//以小时或其他单位进行分析
-                    queryBeginUTC = thisStepTempRes.getLastCompareSampleTime() + TimeTool.MS_ONE_HOUR;
-                }
+            }else {
+                int sampleClock = (int)((thisStepTempRes.getLastCompareSampleTime()/1000/60/60%24+8)%24);
+                if (sampleClock >= ruleStartClock && sampleClock <= ruleEndClock){
+                    if (FrequencyUnit.MIN.equals(planDetail.getFrequencyUnit())) {//以分钟为单位进行分析
+                        queryBeginUTC = Math.max(queryBeginUTC, thisStepTempRes.getLastCompareSampleTime() + TimeTool.MS_ONE_SEC);
+                    }else {//以小时或其他单位进行分析
+                        queryBeginUTC = Math.max(queryBeginUTC, thisStepTempRes.getLastCompareSampleTime() + TimeTool.MS_ONE_HOUR);
+                    }
+                }else//样本跨了时段则重新计数
+                    thisStepTempRes.resetData();
             }
 
             if (queryBeginUTC > queryEndUTC){
@@ -337,7 +351,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, null, false, "") <= 0){
+                    }}, updatePlan, null, null, null, null, false, "") <= 0){
                 step = "Update warn plan trigger result to db failed.";
                 code = ResponseCode.RESULT_BAD;
             }
@@ -353,6 +367,7 @@ public class SiteDataWarnHandler {
     private static ResponseCode analysisDataForRealBySet(OrdWarnPlanDetail planDetail, List<OrdWarnPlanRules> rules, OrdWarnPlanTempStep thisTempStep){
         String step = "Start to deep analysis";
         ResponseCode code = ResponseCode.RESULT_NORMAL;
+        int maxDevCycle = 0;//最大设备采集频率(单位:秒)
         final String siteId = rules.get(0).getObjId();
         SiteSampleDataResult siteSampleData = null;
         Map<String, Long> oldEvent2EndUTC = new HashMap<>();//需要更新预警事件的样本截止时间
@@ -407,9 +422,11 @@ public class SiteDataWarnHandler {
                 OrdWarnPlanRules findRule = null;
                 int sampleRecordClock = (int)((sampleRecordTm/1000/60/60%24+8)%24);
                 for (OrdWarnPlanRules ruleItem:rules){
+                    if (ruleItem.getDevCycle() > maxDevCycle)
+                        maxDevCycle = ruleItem.getDevCycle();
                     if (sampleRecordClock <= ruleItem.getEnds() && sampleRecordClock >= ruleItem.getStarts()){
                         findRule = ruleItem;
-                        break;
+                        //break;
                     }
                 }
                 if (findRule == null)
@@ -467,8 +484,9 @@ public class SiteDataWarnHandler {
                 }//上一次匹配成功了进入下一步
 
                 long triggerEventPeriodSwitch = planDetail.getFrequency()*planDetail.getThreshold()*TimeTool.MS_ONE_MIN;//触发预警事件的最小时长(单位:毫秒)
+                long tooDistanceMs = Math.max(maxDevCycle*TimeTool.MS_ONE_SEC, triggerEventPeriodSwitch);
                 long diffMatch = sampleRecordTm-thisTempStep.getLastCompareSampleTime();//两个最近匹配样本之间的采集时间差(单位:毫秒)
-                if (diffMatch > triggerEventPeriodSwitch){//两个最近匹配样本间缺失的数据太多、或跨了天、或跨了时段,可认为重新计数
+                if (diffMatch > tooDistanceMs){//两个最近匹配样本间缺失的数据太多、或跨了天、或跨了时段,可认为重新计数
                     step = "This is matched, but two matched sample is too distance.";
                     thisTempStep.setLastCompareSampleTime(sampleRecordTm);
                     thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
@@ -479,7 +497,7 @@ public class SiteDataWarnHandler {
                     continue;
                 }//两个最近匹配样本间隔很近,可认为是持续匹配,则进入下一步
 
-                if (thisTempStep.getLastCompareSampleTime() < thisTempStep.getConditionMinUTC()){//上一个匹配样本是非当前天的,可认为重新计数
+                /*if (thisTempStep.getLastCompareSampleTime() < thisTempStep.getConditionMinUTC()){//上一个匹配样本是非当前天的,可认为重新计数
                     step = "This is matched, but last is not today.";
                     thisTempStep.setLastCompareSampleTime(sampleRecordTm);
                     thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
@@ -488,7 +506,7 @@ public class SiteDataWarnHandler {
                     thisTempStep.setLastEventTime(0L);
                     thisTempStep.setLastCompareSampleExplain(step);
                     continue;
-                }//上一个匹配样本是当天的,则进入下一步
+                }*///上一个匹配样本是当天的,则进入下一步
 
                 long matchLen = (thisTempStep.getFirstMatchSampleTime()<=0)?0:(sampleRecordTm-thisTempStep.getFirstMatchSampleTime());//样本匹配的持续时长(单位:毫秒)
                 if (StringUtils.isEmpty(thisTempStep.getLastEventId())){//之前无预警事件
@@ -559,10 +577,14 @@ public class SiteDataWarnHandler {
         updatePlan.put(OrdWarnPlanInfoTable.W_INFO.VERSION, planDetail.getVersion()+1);
         updatePlan.put(OrdWarnPlanInfoTable.W_INFO.UPDATE_TIME, System.currentTimeMillis());
         List<Map<String, Object>> genNewEventObj = null;
+        Map<String, String> eventId2PlanId = null;
         if (CommTool.mapSize(newEvent2Gen) > 0){
             genNewEventObj = new ArrayList<>();
-            for (Map.Entry<String, JPOrdWarnEventInfo> entry:newEvent2Gen.entrySet())
+            eventId2PlanId = new HashMap<>();
+            for (Map.Entry<String, JPOrdWarnEventInfo> entry:newEvent2Gen.entrySet()){
                 genNewEventObj.add(FastJsonUtil.obj2Map(entry.getValue(), true));
+                eventId2PlanId.put(entry.getValue().getUid(), entry.getValue().getPlanId());
+            }
         }
         List<Map<String, Object>> genOldEventObj = null;
         if (CommTool.mapSize(oldEvent2EndUTC) > 0){
@@ -592,7 +614,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, genNewEventObj, genOldEventObj, triggerSampleHisObj, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
+                    }}, updatePlan, genNewEventObj, genOldEventObj, triggerSampleHisObj, eventId2PlanId, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
             step = "Update warn plan trigger result to db failed.";
             code = ResponseCode.RESULT_BAD;
         }
@@ -741,7 +763,7 @@ public class SiteDataWarnHandler {
                     thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                     thisTempStep.setLastCompareSampleExplain(step);
                     if (triggerEventPeriodSwitch <= 1){//触发事件
-                        step = "This is matched and trigger short period, it will gen event.";
+                        step = "This is matched and trigger short period(for anew matched), it will gen event.";
                         thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                         thisTempStep.setLastCompareSampleExplain(step);
 
@@ -765,13 +787,13 @@ public class SiteDataWarnHandler {
 
                 long diffMatch = (sampleRecordTm-thisTempStep.getLastCompareSampleTime())/TimeTool.MS_ONE_HOUR;//两个最近匹配样本之间的采集时间差(单位:小时)
                 if (diffMatch > triggerEventPeriodSwitch){//两个最近匹配样本间缺失的数据太多、或跨了天、或跨了时段,可认为重新计数
-                    step = "This is matched, but two matched sample is too distance.";
+                    step = "This is matched, but two matched sample is too distance."+String.format("%d--%d",sampleRecordTm,thisTempStep.getLastCompareSampleTime());
                     thisTempStep.setLastCompareSampleTime(sampleRecordTm);
                     thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
                     thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                     thisTempStep.setLastCompareSampleExplain(step);
                     if (triggerEventPeriodSwitch <= 1){//触发事件
-                        step = "This is matched and trigger short period, it will gen event.";
+                        step = "This is matched and trigger short period(for too distance), it will gen event.";
                         thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                         thisTempStep.setLastCompareSampleExplain(step);
 
@@ -796,7 +818,7 @@ public class SiteDataWarnHandler {
                     continue;
                 }//两个最近匹配样本间隔很近,可认为是持续匹配,则进入下一步
 
-                if (thisTempStep.getLastCompareSampleTime() < thisTempStep.getConditionMinUTC()){//上一个匹配样本是非当前天的,可认为重新计数
+                /*if (thisTempStep.getLastCompareSampleTime() < thisTempStep.getConditionMinUTC()){//上一个匹配样本是非当前天的,可认为重新计数
                     step = "This is matched, but last is not today.";
                     thisTempStep.setLastCompareSampleTime(sampleRecordTm);
                     thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
@@ -826,7 +848,7 @@ public class SiteDataWarnHandler {
                         thisTempStep.setLastEventTime(0L);
                     }
                     continue;
-                }//上一个匹配样本是当天的,则进入下一步
+                }*///上一个匹配样本是当天的,则进入下一步
 
                 long matchLen = (thisTempStep.getFirstMatchSampleTime()<=0)?0:(((sampleRecordTm-thisTempStep.getFirstMatchSampleTime())/TimeTool.MS_ONE_HOUR)+1);//样本匹配的持续时长(单位:小时)
                 if (StringUtils.isEmpty(thisTempStep.getLastEventId())){//之前无预警事件
@@ -838,7 +860,7 @@ public class SiteDataWarnHandler {
                         if (thisTempStep.getFirstMatchSampleTime() <= 0){
                             thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                             if (triggerEventPeriodSwitch <= 1){//补充触发事件
-                                step = "This is matched and trigger short period, it will gen event.";
+                                step = "This is matched and trigger short period(for wait matched), it will gen event.";
                                 thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                                 thisTempStep.setLastCompareSampleExplain(step);
 
@@ -859,7 +881,7 @@ public class SiteDataWarnHandler {
                             }
                         }
                     }else {//触发一个新的事件
-                        step = "This is matched, and will gen event.";
+                        step = "This is matched(for always matched), and will gen event.";
                         thisTempStep.setLastCompareSampleTime(sampleRecordTm);
                         thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
                         thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
@@ -889,7 +911,7 @@ public class SiteDataWarnHandler {
                         thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                         thisTempStep.setLastCompareSampleExplain(step);
                         if (triggerEventPeriodSwitch <= 1){//触发事件
-                            step = "This is matched and trigger short period, it will gen event.";
+                            step = "This is matched and trigger short period(for cycle matched), it will gen event.";
                             thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                             thisTempStep.setLastCompareSampleExplain(step);
 
@@ -940,10 +962,14 @@ public class SiteDataWarnHandler {
         updatePlan.put(OrdWarnPlanInfoTable.W_INFO.VERSION, planDetail.getVersion()+1);
         updatePlan.put(OrdWarnPlanInfoTable.W_INFO.UPDATE_TIME, System.currentTimeMillis());
         List<Map<String, Object>> genNewEventObj = null;
+        Map<String, String> eventId2PlanId = null;
         if (CommTool.mapSize(newEvent2Gen) > 0){
             genNewEventObj = new ArrayList<>();
-            for (Map.Entry<String, JPOrdWarnEventInfo> entry:newEvent2Gen.entrySet())
+            eventId2PlanId = new HashMap<>();
+            for (Map.Entry<String, JPOrdWarnEventInfo> entry:newEvent2Gen.entrySet()){
                 genNewEventObj.add(FastJsonUtil.obj2Map(entry.getValue(), true));
+                eventId2PlanId.put(entry.getValue().getUid(), entry.getValue().getPlanId());
+            }
         }
         List<Map<String, Object>> genOldEventObj = null;
         if (CommTool.mapSize(oldEvent2EndUTC) > 0){
@@ -972,12 +998,12 @@ 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, genNewEventObj, genOldEventObj, triggerSampleHisObj, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
+        }}, updatePlan, genNewEventObj, genOldEventObj, triggerSampleHisObj, eventId2PlanId, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
             step = "Update warn plan trigger result to db failed.";
             code = ResponseCode.RESULT_BAD;
         }
         LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mBusinessType, mStrClassName
-                , String.format("Analysis Data For Report By Hour:{planId=%s,siteId=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s} {step=%s} {%s}...",
+                , String.format("Analysis Data For Report By Hour:{planId=%s,siteId=%s} {step=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s}  {%s}...",
                         planDetail.getUid(), siteId, step, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam, code.toString()));
         return code;
     }
@@ -1121,7 +1147,7 @@ public class SiteDataWarnHandler {
                     thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                     thisTempStep.setLastCompareSampleExplain(step);
                     if (triggerEventPeriodSwitch <= 1){//触发事件
-                        step = "This is matched and trigger short period, it will gen event.";
+                        step = "This is matched and trigger short period(for anew matched), it will gen event.";
                         thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                         thisTempStep.setLastCompareSampleExplain(step);
 
@@ -1151,7 +1177,7 @@ public class SiteDataWarnHandler {
                     thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                     thisTempStep.setLastCompareSampleExplain(step);
                     if (triggerEventPeriodSwitch <= 1){//触发事件
-                        step = "This is matched and trigger short period, it will gen event.";
+                        step = "This is matched and trigger short period(for too distance), it will gen event.";
                         thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                         thisTempStep.setLastCompareSampleExplain(step);
 
@@ -1188,7 +1214,7 @@ public class SiteDataWarnHandler {
                         if (thisTempStep.getFirstMatchSampleTime() <= 0){
                             thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                             if (triggerEventPeriodSwitch <= 1){//补充触发事件
-                                step = "This is matched and trigger short period, it will gen event.";
+                                step = "This is matched and trigger short period(for wait matched), it will gen event.";
                                 thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                                 thisTempStep.setLastCompareSampleExplain(step);
 
@@ -1209,7 +1235,7 @@ public class SiteDataWarnHandler {
                             }
                         }
                     }else {//触发一个新的事件
-                        step = "This is matched, and will gen event.";
+                        step = "This is matched(for always matched), and will gen event.";
                         thisTempStep.setLastCompareSampleTime(sampleRecordTm);
                         thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
                         thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
@@ -1239,7 +1265,7 @@ public class SiteDataWarnHandler {
                         thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                         thisTempStep.setLastCompareSampleExplain(step);
                         if (triggerEventPeriodSwitch <= 1){//触发事件
-                            step = "This is matched and trigger short period, it will gen event.";
+                            step = "This is matched and trigger short period(for cycle matched), it will gen event.";
                             thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                             thisTempStep.setLastCompareSampleExplain(step);
 
@@ -1290,10 +1316,14 @@ public class SiteDataWarnHandler {
         updatePlan.put(OrdWarnPlanInfoTable.W_INFO.VERSION, planDetail.getVersion()+1);
         updatePlan.put(OrdWarnPlanInfoTable.W_INFO.UPDATE_TIME, System.currentTimeMillis());
         List<Map<String, Object>> genNewEventObj = null;
+        Map<String, String> eventId2PlanId = null;
         if (CommTool.mapSize(newEvent2Gen) > 0){
             genNewEventObj = new ArrayList<>();
-            for (Map.Entry<String, JPOrdWarnEventInfo> entry:newEvent2Gen.entrySet())
+            eventId2PlanId = new HashMap<>();
+            for (Map.Entry<String, JPOrdWarnEventInfo> entry:newEvent2Gen.entrySet()){
                 genNewEventObj.add(FastJsonUtil.obj2Map(entry.getValue(), true));
+                eventId2PlanId.put(entry.getValue().getUid(), entry.getValue().getPlanId());
+            }
         }
         List<Map<String, Object>> genOldEventObj = null;
         if (CommTool.mapSize(oldEvent2EndUTC) > 0){
@@ -1323,7 +1353,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, genNewEventObj, genOldEventObj, triggerSampleHisObj, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
+        }}, updatePlan, genNewEventObj, genOldEventObj, triggerSampleHisObj, eventId2PlanId, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
             step = "Update warn plan trigger result to db failed.";
             code = ResponseCode.RESULT_BAD;
         }

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

@@ -30,17 +30,15 @@ public class TimerCheckWarnPlanMgr {
     }
 
     public static void checkWarnPlanByFrequency(int curClock, int curMinute, String frequencyUnit){
-        int curTmForCompare = 1;
+        int curTmForCompare = 0;
         String tmFiler = "";
         if (FrequencyUnit.MIN.equals(frequencyUnit)){
-            if (curMinute > 0)//0分时刻不做判断默认执行
-                curTmForCompare = curMinute;
+            curTmForCompare = curMinute;
             /*tmFiler = String.format("and %s <= %d "
                     , OrdWarnPlanInfoTable.W_INFO.FREQUENCY
                     , curTmForCompare);*/
         }else if (FrequencyUnit.HOUR.equals(frequencyUnit)){
-            if (curClock > 0)//0点时刻不做判断默认执行
-                curTmForCompare = curClock;
+            curTmForCompare = curClock;
             /*tmFiler = String.format("and %s <= %d "
                     , OrdWarnPlanInfoTable.W_INFO.FREQUENCY
                     , curTmForCompare);*/
@@ -101,7 +99,7 @@ public class TimerCheckWarnPlanMgr {
                                 || oItem.getFrequency() <= 0
                                 || oItem.getMinStarts() < 0
                                 || !frequencyUnit.equals(oItem.getFrequencyUnit())
-                                || oItem.getFrequency() > curTmForCompare
+                                /*|| oItem.getFrequency() > curTmForCompare*/
                                 || (curTmForCompare%oItem.getFrequency() != 0))
                             continue;
 

+ 51 - 25
src/main/java/com/shkpr/service/warncore/bizhandler/ZoneDataWarnHandler.java

@@ -88,6 +88,7 @@ public class ZoneDataWarnHandler {
         OrdWarnPlanTempStep thisStepTempRes = new OrdWarnPlanTempStep(planDetail);
         thisStepTempRes.setLastAnalyTime(curUTCTm);
         thisStepTempRes.setCompareTimes(planDetail.getCompareTimes()+1);
+        int ruleStartClock = -1, ruleEndClock = -1;
         do {
             if (code != ResponseCode.RESULT_NORMAL)
                 break;
@@ -96,6 +97,8 @@ public class ZoneDataWarnHandler {
             for (int i=rules.size()-1;i>=0;i--){
                 if (curClock >= rules.get(i).getStarts() && curClock <= rules.get(i).getEnds()){
                     findStartClock = rules.get(i).getStarts();
+                    ruleStartClock = findStartClock;
+                    ruleEndClock = rules.get(i).getEnds();
                     queryEndUTC = Math.min(TimeTool.convertDateStr2UTC(String.format("%s %02d:59:59", curDate, curClock))
                             , TimeTool.convertDateStr2UTC(String.format("%s %02d:59:59", curDate, rules.get(i).getEnds())));
                     break;
@@ -116,6 +119,7 @@ public class ZoneDataWarnHandler {
                     findStartClock = rules.get(i).getStarts()-1;
             }
             queryBeginUTC = TimeTool.convertDateStr2UTC(String.format("%s %02d:00:00", curDate, findStartClock+1));
+            ruleStartClock =  findStartClock+1;
 
             if (doForTodayBefore){//只分析昨日
                 queryBeginUTC = queryBeginUTC - TimeTool.MS_ONE_DAY;
@@ -128,11 +132,14 @@ public class ZoneDataWarnHandler {
                 */
             }
 
-            if (thisStepTempRes.getLastCompareSampleTime() <= 0L //从未分析过则重新计数
-                    || thisStepTempRes.getLastCompareSampleTime() < queryBeginUTC){//样本跨了时段则重新计数
+            if (thisStepTempRes.getLastCompareSampleTime() <= 0L){//从未分析过则重新计数
                 thisStepTempRes.resetData();
-            }else if (thisStepTempRes.getLastCompareSampleTime() >= queryBeginUTC){
-                queryBeginUTC = thisStepTempRes.getLastCompareSampleTime() + TimeTool.MS_ONE_HOUR;
+            }else {
+                int sampleClock = (int)((thisStepTempRes.getLastCompareSampleTime()/1000/60/60%24+8)%24);
+                if (sampleClock >= ruleStartClock && sampleClock <= ruleEndClock){
+                    queryBeginUTC = Math.max(queryBeginUTC, thisStepTempRes.getLastCompareSampleTime() + TimeTool.MS_ONE_HOUR);
+                }else//样本跨了时段则重新计数
+                    thisStepTempRes.resetData();
             }
 
             if (queryBeginUTC > queryEndUTC){
@@ -180,7 +187,7 @@ public class ZoneDataWarnHandler {
             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, null, false, "") <= 0){
+            }}, updatePlan, null, null, null, null, false, "") <= 0){
                 step = "Update warn plan trigger result to db failed.";
                 code = ResponseCode.RESULT_BAD;
             }
@@ -219,9 +226,12 @@ public class ZoneDataWarnHandler {
                 break;
 
             int findStartRange = -1;
+            int ruleStartRange = -1, ruleEndRange = -1;
             for (int i=rules.size()-1;i>=0;i--){
                 if (preMonth >= rules.get(i).getStarts() && preMonth <= rules.get(i).getEnds()){
                     findStartRange = rules.get(i).getStarts();
+                    ruleStartRange = findStartRange;
+                    ruleEndRange = rules.get(i).getEnds();
                     break;
                 }
             }
@@ -239,16 +249,21 @@ public class ZoneDataWarnHandler {
             }
             queryBeginUTC = TimeTool.convertDateStr2BeginUTC(String.format("%d-%02d-01 00:00:00", preMonthInYear, findStartRange+1));
             conditionMinUTC = queryBeginUTC;
+            ruleStartRange = findStartRange+1;
             long before3MonthUTC =  TimeTool.getTimeChgMonth(thisMonthBegin,-3);//最多只往前分析3个月
             if (before3MonthUTC > queryBeginUTC)
                 queryBeginUTC = before3MonthUTC;
 
-            if (thisStepTempRes.getLastCompareSampleTime() <= 0L
-                    || thisStepTempRes.getLastCompareSampleTime() < queryBeginUTC) {//从未分析过则重新计数)
+            if (thisStepTempRes.getLastCompareSampleTime() <= 0L) {//从未分析过则重新计数)
                 thisStepTempRes.resetData();
-            }else if (thisStepTempRes.getLastCompareSampleTime() >= queryBeginUTC) {
-                queryBeginUTC = TimeTool.getTimeChgMonth(thisStepTempRes.getLastCompareSampleTime(), 1);
+            }else {
+                int sampleInMonth = TimeTool.getMonthIndex(thisStepTempRes.getLastCompareSampleTime());
+                if (sampleInMonth >= ruleStartRange && sampleInMonth <= ruleEndRange){
+                    queryBeginUTC = Math.max(queryBeginUTC, TimeTool.getTimeChgMonth(thisStepTempRes.getLastCompareSampleTime(), 1));
+                }else//样本跨了时段则重新计数
+                    thisStepTempRes.resetData();
             }
+
             if (queryBeginUTC >= queryEndUTC){
                 step = "Time is invalid,do analysis next time";
                 code = ResponseCode.RESULT_BAD;
@@ -298,7 +313,7 @@ public class ZoneDataWarnHandler {
             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, null, false, "") <= 0){
+            }}, updatePlan, null, null, null, null, false, "") <= 0){
                 step = "Update warn plan trigger result to db failed.";
                 code = ResponseCode.RESULT_BAD;
             }
@@ -335,10 +350,12 @@ public class ZoneDataWarnHandler {
             if (code != ResponseCode.RESULT_NORMAL)
                 break;
 
-            int findStartRange = -1;
+            int findStartRange = -1, ruleStartRange = -1, ruleEndRange = -1;
             for (int i=rules.size()-1;i>=0;i--){
                 if (preDayInMonth >= rules.get(i).getStarts() && preDayInMonth <= rules.get(i).getEnds()){
                     findStartRange = rules.get(i).getStarts();
+                    ruleStartRange = findStartRange;
+                    ruleEndRange = rules.get(i).getEnds();
                     break;
                 }
             }
@@ -359,16 +376,21 @@ public class ZoneDataWarnHandler {
 
             queryBeginUTC = TimeTool.convertDateStr2BeginUTC(String.format("%d-%02d-01 00:00:00", preDayInYear, findStartRange+1));
             conditionMinUTC = queryBeginUTC;
+            ruleStartRange = findStartRange+1;
             long before3DayUTC = thisDayBegin-TimeTool.MS_ONE_DAY*7;//最多只往前分析7天
             if (before3DayUTC > queryBeginUTC)
                 queryBeginUTC = before3DayUTC;
 
-            if (thisStepTempRes.getLastCompareSampleTime() <= 0L
-                    || thisStepTempRes.getLastCompareSampleTime() < queryBeginUTC) {//从未分析过则重新计数)
+            if (thisStepTempRes.getLastCompareSampleTime() <= 0L) {//从未分析过则重新计数)
                 thisStepTempRes.resetData();
-            }else if (thisStepTempRes.getLastCompareSampleTime() >= queryBeginUTC) {
-                queryBeginUTC = thisStepTempRes.getLastCompareSampleTime() + TimeTool.MS_ONE_DAY;
+            }else {
+                int sampleInMonth = TimeTool.getMonthIndex(thisStepTempRes.getLastCompareSampleTime());
+                if (sampleInMonth >= ruleStartRange && sampleInMonth <= ruleEndRange){
+                    queryBeginUTC = Math.max(queryBeginUTC, thisStepTempRes.getLastCompareSampleTime() + TimeTool.MS_ONE_DAY);
+                }else//样本跨了时段则重新计数
+                    thisStepTempRes.resetData();
             }
+
             if (queryBeginUTC >= queryEndUTC){
                 step = "Time is invalid,do analysis next time";
                 code = ResponseCode.RESULT_BAD;
@@ -418,7 +440,7 @@ public class ZoneDataWarnHandler {
             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, null, false, "") <= 0){
+            }}, updatePlan, null, null, null, null, false, "") <= 0){
                 step = "Update warn plan trigger result to db failed.";
                 code = ResponseCode.RESULT_BAD;
             }
@@ -543,7 +565,7 @@ public class ZoneDataWarnHandler {
                     thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                     thisTempStep.setLastCompareSampleExplain(step);
                     if (triggerEventPeriodSwitch <= 1){//触发事件
-                        step = "This is matched and trigger short period, it will gen event.";
+                        step = "This is matched and trigger short period(for anew matched), it will gen event.";
                         thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                         thisTempStep.setLastCompareSampleExplain(step);
 
@@ -579,7 +601,7 @@ public class ZoneDataWarnHandler {
                     thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                     thisTempStep.setLastCompareSampleExplain(step);
                     if (triggerEventPeriodSwitch <= 1){//触发事件
-                        step = "This is matched and trigger short period, it will gen event.";
+                        step = "This is matched and trigger short period(for too distance), it will gen event.";
                         thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                         thisTempStep.setLastCompareSampleExplain(step);
 
@@ -604,7 +626,7 @@ public class ZoneDataWarnHandler {
                     continue;
                 }//两个最近匹配样本间隔很近,可认为是持续匹配,则进入下一步
 
-                if (FrequencyUnit.HOUR.equals(planDetail.getFrequencyUnit())){
+                /*if (FrequencyUnit.HOUR.equals(planDetail.getFrequencyUnit())){
                     if (thisTempStep.getLastCompareSampleTime() < thisTempStep.getConditionMinUTC()){//上一个匹配样本是非当前天的,可认为重新计数
                         step = "This is matched, but last is not today.";
                         thisTempStep.setLastCompareSampleTime(sampleRecordTm);
@@ -636,7 +658,7 @@ public class ZoneDataWarnHandler {
                         }
                         continue;
                     }//上一个匹配样本是当天的,则进入下一步
-                }
+                }*/
 
                 long matchLen = 0L;//样本匹配的持续时长
                 if (thisTempStep.getFirstMatchSampleTime() > 0L){
@@ -656,7 +678,7 @@ public class ZoneDataWarnHandler {
                         if (thisTempStep.getFirstMatchSampleTime() <= 0){
                             thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                             if (triggerEventPeriodSwitch <= 1){//补充触发事件
-                                step = "This is matched and trigger short period, it will gen event.";
+                                step = "This is matched and trigger short period(for wait matched), it will gen event.";
                                 thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                                 thisTempStep.setLastCompareSampleExplain(step);
 
@@ -677,7 +699,7 @@ public class ZoneDataWarnHandler {
                             }
                         }
                     }else {//触发一个新的事件
-                        step = "This is matched, and will gen event.";
+                        step = "This is matched(for always matched), and will gen event.";
                         thisTempStep.setLastCompareSampleTime(sampleRecordTm);
                         thisTempStep.setLastCompareSampleResult(COMPARE_TURE);
                         thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
@@ -707,7 +729,7 @@ public class ZoneDataWarnHandler {
                         thisTempStep.setFirstMatchSampleTime(sampleRecordTm);
                         thisTempStep.setLastCompareSampleExplain(step);
                         if (triggerEventPeriodSwitch <= 1){//触发事件
-                            step = "This is matched and trigger short period, it will gen event.";
+                            step = "This is matched and trigger short period(for cycle matched), it will gen event.";
                             thisTempStep.setLastEventTime(TimeTool.getCurMsUTC());
                             thisTempStep.setLastCompareSampleExplain(step);
 
@@ -758,10 +780,14 @@ public class ZoneDataWarnHandler {
         updatePlan.put(OrdWarnPlanInfoTable.W_INFO.VERSION, planDetail.getVersion()+1);
         updatePlan.put(OrdWarnPlanInfoTable.W_INFO.UPDATE_TIME, System.currentTimeMillis());
         List<Map<String, Object>> genNewEventObj = null;
+        Map<String, String> eventId2PlanId = null;
         if (CommTool.mapSize(newEvent2Gen) > 0){
             genNewEventObj = new ArrayList<>();
-            for (Map.Entry<String, JPOrdWarnEventInfo> entry:newEvent2Gen.entrySet())
+            eventId2PlanId = new HashMap<>();
+            for (Map.Entry<String, JPOrdWarnEventInfo> entry:newEvent2Gen.entrySet()){
                 genNewEventObj.add(FastJsonUtil.obj2Map(entry.getValue(), true));
+                eventId2PlanId.put(entry.getValue().getUid(), entry.getValue().getPlanId());
+            }
         }
         List<Map<String, Object>> genOldEventObj = null;
         if (CommTool.mapSize(oldEvent2EndUTC) > 0){
@@ -791,7 +817,7 @@ public class ZoneDataWarnHandler {
         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, triggerSampleHisObj, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
+                }}, updatePlan, genNewEventObj, genOldEventObj, triggerSampleHisObj, eventId2PlanId, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
             step = "Update warn plan trigger result to db failed.";
             code = ResponseCode.RESULT_BAD;
         }

+ 12 - 0
src/main/java/com/shkpr/service/warncore/dbdao/mapper/OrdWarnEventRulesMapper.java

@@ -0,0 +1,12 @@
+package com.shkpr.service.warncore.dbdao.mapper;
+
+import com.shkpr.service.warncore.dbdao.providers.OrdWarnEventRulesSqlProvider;
+import org.apache.ibatis.annotations.InsertProvider;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+
+public interface OrdWarnEventRulesMapper {
+    @InsertProvider(type = OrdWarnEventRulesSqlProvider.class, method = "copyRuleFromPlan")
+    int copyRuleFromPlan(@Param("event2Plan") Map<String, String> eventId2PlanId);
+}

+ 78 - 0
src/main/java/com/shkpr/service/warncore/dbdao/providers/OrdWarnEventRulesSqlProvider.java

@@ -0,0 +1,78 @@
+package com.shkpr.service.warncore.dbdao.providers;
+
+import com.shkpr.service.warncore.dbdao.tables.OrdWarnEventRulesTable;
+import com.shkpr.service.warncore.dbdao.tables.OrdWarnPlanRulesTable;
+
+import java.util.Map;
+
+public class OrdWarnEventRulesSqlProvider extends BaseSqlProvider implements OrdWarnEventRulesTable {
+    @Override
+    public String getRTableName() {
+        return R_INFO.TABLE;
+    }
+
+    @Override
+    public String getWTableName() {
+        return W_INFO.TABLE;
+    }
+
+    @Override
+    public String getRUniqueId() {
+        return R_INFO.UNIQUE_ID;
+    }
+
+    @Override
+    public String getWUniqueId() {
+        return W_INFO.UNIQUE_ID;
+    }
+
+    @Override
+    public String getSAllFiled() {
+        return R_INFO.ALL_FILED;
+    }
+
+    @Override
+    public String getRPrimaryKey() {
+        return R_INFO.PRIMARY_KEY;
+    }
+
+    @Override
+    public String getWPrimaryKey() {
+        return W_INFO.PRIMARY_KEY;
+    }
+
+    @Override
+    public boolean isWJsonForFiled(String filedName) {
+        return false;
+    }
+
+    /**
+     * INSERT INTO k4_ord_warn_event_rules (event_id,obj_id,obj_name,starts,ends,restrict,conditions,obj_src)
+     * SELECT
+     *     mapping.to_id,obj_id,obj_name,starts,ends,restrict,conditions,obj_src
+     * FROM k4_ord_warn_plan_rules aa
+     * JOIN (
+     *     VALUES
+     *         ('A1', 'UWP202512051504369613'),
+     *         ('A2', 'UWP202512091209297094'),
+     *         ('A3', 'UWP202512051504369613')
+     * ) AS mapping(to_id, from_id) ON aa.plan_id = mapping.from_id;
+     */
+    public String copyRuleFromPlan(Map<String, Object> mapParams){
+        Map<String, String> eventId2PlanId = (Map<String, String>)mapParams.get("event2Plan");
+        StringBuilder sql = new StringBuilder("INSERT INTO " + W_INFO.TABLE);
+        sql.append(String.format("(%s,%s)", W_INFO.EVENT_ID, W_INFO.COPY_FIELD));
+        sql.append(String.format("select mapping.to_id,%s", W_INFO.COPY_FIELD));
+        sql.append(" from " + OrdWarnPlanRulesTable.W_INFO.TABLE + " aa join ( values ");
+
+        StringBuilder event2Plan = new StringBuilder("");
+        for (Map.Entry<String, String> entry:eventId2PlanId.entrySet()){
+            if (event2Plan.length() > 0)
+                event2Plan.append(",");
+            event2Plan.append(String.format("('%s','%s')", entry.getKey(), entry.getValue()));
+        }
+
+        sql.append(event2Plan).append(" ) as mapping(to_id, from_id) ON aa.plan_id = mapping.from_id");
+        return sql.toString();
+    }
+}

+ 8 - 0
src/main/java/com/shkpr/service/warncore/dbdao/services/OrdWarnPlanInfoDBServiceImpl.java

@@ -5,6 +5,7 @@ import com.global.base.log.LogPrintMgr;
 import com.shkpr.service.warncore.commtools.CommTool;
 import com.shkpr.service.warncore.constants.LogFlagBusiType;
 import com.shkpr.service.warncore.dbdao.mapper.OrdWarnEventInfoMapper;
+import com.shkpr.service.warncore.dbdao.mapper.OrdWarnEventRulesMapper;
 import com.shkpr.service.warncore.dbdao.mapper.OrdWarnPlanInfoMapper;
 import com.shkpr.service.warncore.dbdao.mapper.OrdWarnTriggerSampleHisMapper;
 import com.shkpr.service.warncore.dbdao.services.intef.OrdWarnPlanInfoDBService;
@@ -45,6 +46,10 @@ public class OrdWarnPlanInfoDBServiceImpl implements OrdWarnPlanInfoDBService, O
     @Autowired
     OrdWarnTriggerSampleHisMapper ordWarnTriggerSampleHisMapper;
 
+    @SuppressWarnings("all")
+    @Autowired
+    OrdWarnEventRulesMapper ordWarnEventRulesMapper;
+
     @Override
     public List<Map<String, Object>> listAllWiths(int limit, int offset, Map<String, Object> andWheres, Map<String, Object> orWheres, String orderBy, String extend) {
         return listAllWithsEx("", "", limit, offset, andWheres, orWheres, orderBy, extend);
@@ -212,6 +217,7 @@ public class OrdWarnPlanInfoDBServiceImpl implements OrdWarnPlanInfoDBService, O
             , List<Map<String, Object>> newEvents
             , List<Map<String, Object>> oldEvents
             , List<Map<String, Object>> triggerSampleHis
+            , Map<String, String> newEventId2PlanId
             , boolean clearPlanHisTriggerSam
             , String eventIdAcceptPlanHisTriggerSam) {
         int nCode = 0;
@@ -246,6 +252,8 @@ public class OrdWarnPlanInfoDBServiceImpl implements OrdWarnPlanInfoDBService, O
                 }
                 if (CommTool.listSize(triggerSampleHis) > 0)
                     ordWarnTriggerSampleHisMapper.batchInserts(triggerSampleHis);
+                if (CommTool.mapSize(newEventId2PlanId) > 0)
+                    ordWarnEventRulesMapper.copyRuleFromPlan(newEventId2PlanId);
             }while (false);
 
             if (nRes <= 0){

+ 1 - 0
src/main/java/com/shkpr/service/warncore/dbdao/services/intef/OrdWarnPlanInfoDBService.java

@@ -38,6 +38,7 @@ public interface OrdWarnPlanInfoDBService extends BaseDBService {
             , List<Map<String, Object>> newEvents
             , List<Map<String, Object>> oldEvents
             , List<Map<String, Object>> triggerSampleHis
+            , Map<String, String> newEventId2PlanId
             , boolean clearPlanHisTriggerSam
             , String eventIdAcceptPlanHisTriggerSam);
 }

+ 22 - 0
src/main/java/com/shkpr/service/warncore/dbdao/tables/OrdWarnEventRulesTable.java

@@ -0,0 +1,22 @@
+package com.shkpr.service.warncore.dbdao.tables;
+
+public interface OrdWarnEventRulesTable {
+    interface R_INFO{
+        String TABLE = "k4_ord_warn_event_rules";
+        String PRIMARY_KEY = "id";
+        String ALL_FILED = "*";
+        String UNIQUE_ID = "id";
+        String DEFAULT_ORDER = "starts ASC, id ASC";
+        String DEFAULT_EXTEND = "";
+        String EVENT_ID = "event_id";
+        String CONDITIONS = "conditions";
+    }
+
+    interface W_INFO{
+        String TABLE = "k4_ord_warn_event_rules";
+        String PRIMARY_KEY = "id";
+        String UNIQUE_ID = "id";
+        String EVENT_ID = "event_id";
+        String COPY_FIELD = "obj_id,obj_name,starts,ends,restrict,conditions,obj_src";
+    }
+}

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

@@ -38,7 +38,7 @@ public class OrdWarnPlanDetail {
     private String ending = "";
     private int cycleTriggerTimes = 0;
     private int cycleTriggerUpperTimes = -1;
-    private int mergeToEvent = 1;//触发规则时是否合并到上一个会处理的事件上: 0--不合并;1--合并
+    private int mergeToEvent = 1;//触发规则时是否自动合并到上一个未处理的事件上: 0--不合并;1--合并
     private String batch = "";
     private int compareTimes = 0;//预案的累计对比次数
     private long lastAnalyTime = 0L;//最近一次分析的时间

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

@@ -36,7 +36,7 @@ public class JPOrdWarnEventInfo {
     private String content = "";
     private long fromTime = 0L;
     private long toTime = 0L;
-    private String rules = "";
+    //private String rules = "";
     private long limitTime = 0L;
     private String ending = "";
     private String creatorId = "";
@@ -47,7 +47,7 @@ public class JPOrdWarnEventInfo {
     private String planBatch = "";
     private String planSrc = "private";//private--专用;public--通用
     private String remark = "";
-    private String objId = "";
+    //private String objId = "";
 
     public JPOrdWarnEventInfo() {
     }
@@ -69,7 +69,7 @@ public class JPOrdWarnEventInfo {
         this.ending = planDetail.getEnding();
         this.planBatch = planDetail.getBatch();
         this.gis = CommTool.listSize(rules)>0?rules.get(0).getObjGis():"";
-        this.objId = CommTool.listSize(rules)>0?rules.get(0).getObjId():"";
+        //this.objId = CommTool.listSize(rules)>0?rules.get(0).getObjId():"";
         if (StringUtils.isEmpty(this.gis))
             this.gis = planDetail.getOwnerGis();
         this.followerId = planDetail.getZoneMgrId();
@@ -77,7 +77,7 @@ public class JPOrdWarnEventInfo {
 
         this.fromTime = thisTempStep.getFirstMatchSampleTime();
         this.toTime = thisTempStep.getLastCompareSampleTime();
-        this.rules = formatRule(rules);
+        //this.rules = formatRule(rules);
 
         this.limitTime = 0L;
         this.createTime = eventTime;