Forráskód Böngészése

新增通用预警方案相关逻辑

andyliu 1 hónapja
szülő
commit
56d133d341
31 módosított fájl, 1333 hozzáadás és 142 törlés
  1. 153 73
      src/main/java/com/shkpr/service/warncore/bizhandler/SiteDataWarnHandler.java
  2. 238 0
      src/main/java/com/shkpr/service/warncore/bizhandler/TimerCheckWarnPlanCommMgr.java
  3. 4 2
      src/main/java/com/shkpr/service/warncore/bizhandler/TimerCheckWarnPlanMgr.java
  4. 113 53
      src/main/java/com/shkpr/service/warncore/bizhandler/ZoneDataWarnHandler.java
  5. 4 0
      src/main/java/com/shkpr/service/warncore/components/locks/OrdWarnPlanLockMgr.java
  6. 1 0
      src/main/java/com/shkpr/service/warncore/constants/LogFlagBusiType.java
  7. 6 0
      src/main/java/com/shkpr/service/warncore/constants/PlanKind.java
  8. 1 0
      src/main/java/com/shkpr/service/warncore/constants/TaskQueueDataTypeEx.java
  9. 1 0
      src/main/java/com/shkpr/service/warncore/dbdao/DBMgrProxy.java
  10. 6 0
      src/main/java/com/shkpr/service/warncore/dbdao/mapper/OrdWarnEventRulesMapper.java
  11. 15 0
      src/main/java/com/shkpr/service/warncore/dbdao/mapper/OrdWarnPlanCommonDoRecordMapper.java
  12. 77 0
      src/main/java/com/shkpr/service/warncore/dbdao/mapper/OrdWarnPlanCommonMapper.java
  13. 41 0
      src/main/java/com/shkpr/service/warncore/dbdao/providers/OrdWarnEventRulesSqlProvider.java
  14. 55 0
      src/main/java/com/shkpr/service/warncore/dbdao/providers/OrdWarnPlanCommonDoRecordSqlProvider.java
  15. 57 0
      src/main/java/com/shkpr/service/warncore/dbdao/providers/OrdWarnPlanCommonSqlProvider.java
  16. 276 0
      src/main/java/com/shkpr/service/warncore/dbdao/services/OrdWarnPlanCommonDBServiceImpl.java
  17. 41 5
      src/main/java/com/shkpr/service/warncore/dbdao/services/OrdWarnPlanInfoDBServiceImpl.java
  18. 42 0
      src/main/java/com/shkpr/service/warncore/dbdao/services/intef/OrdWarnPlanCommonDBService.java
  19. 0 1
      src/main/java/com/shkpr/service/warncore/dbdao/services/intef/OrdWarnPlanInfoDBService.java
  20. 3 0
      src/main/java/com/shkpr/service/warncore/dbdao/tables/OrdWarnEventRulesTable.java
  21. 58 0
      src/main/java/com/shkpr/service/warncore/dbdao/tables/OrdWarnPlanCommonDoRecordTable.java
  22. 38 0
      src/main/java/com/shkpr/service/warncore/dbdao/tables/OrdWarnPlanCommonTable.java
  23. 14 0
      src/main/java/com/shkpr/service/warncore/dto/OrdWarnPlanCheckBeanEx.java
  24. 3 0
      src/main/java/com/shkpr/service/warncore/dto/OrdWarnPlanDetail.java
  25. 20 0
      src/main/java/com/shkpr/service/warncore/dto/OrdWarnPlanDetailEx.java
  26. 21 0
      src/main/java/com/shkpr/service/warncore/dto/OrdWarnPlanWillDoEx.java
  27. 5 0
      src/main/java/com/shkpr/service/warncore/globalmgr/ScheduleTaskMgr.java
  28. 1 1
      src/main/java/com/shkpr/service/warncore/globalmgr/ThreadTaskMgr.java
  29. 3 1
      src/main/java/com/shkpr/service/warncore/jsonbean/JPOrdWarnEventInfo.java
  30. 31 4
      src/main/java/com/shkpr/service/warncore/queues/AsyncCommTaskQueueHandler.java
  31. 5 2
      src/main/java/com/shkpr/service/warncore/queues/DelayCommTaskQueueHandler.java

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

@@ -6,16 +6,12 @@ import com.global.base.tools.CastUtil;
 import com.global.base.tools.FastJsonUtil;
 import com.shkpr.service.warncore.commtools.CommTool;
 import com.shkpr.service.warncore.commtools.TimeTool;
-import com.shkpr.service.warncore.constants.CommFieldStatus;
-import com.shkpr.service.warncore.constants.EventAction;
-import com.shkpr.service.warncore.constants.FrequencyUnit;
-import com.shkpr.service.warncore.constants.LogFlagBusiType;
+import com.shkpr.service.warncore.constants.*;
 import com.shkpr.service.warncore.dbdao.DBMgrProxy;
+import com.shkpr.service.warncore.dbdao.services.intef.OrdWarnPlanCommonDBService;
 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.dbdao.tables.OrdWarnTriggerSampleHisTable;
+import com.shkpr.service.warncore.dbdao.tables.*;
 import com.shkpr.service.warncore.dto.*;
 import com.shkpr.service.warncore.jsonbean.*;
 import com.shkpr.service.warncore.services.ServiceMgrProxy;
@@ -35,6 +31,10 @@ public class SiteDataWarnHandler {
         return DBMgrProxy.getInstance().applyXXXApi(OrdWarnPlanInfoDBService.class);
     }
 
+    private static OrdWarnPlanCommonDBService getWarnPlanCommonDBService(){
+        return DBMgrProxy.getInstance().applyXXXApi(OrdWarnPlanCommonDBService.class);
+    }
+
     private static OrdWarnPlanRulesDBService getWarnPlanRuleDBService(){
         return DBMgrProxy.getInstance().applyXXXApi(OrdWarnPlanRulesDBService.class);
     }
@@ -55,14 +55,28 @@ public class SiteDataWarnHandler {
     public static ResponseCode pickWarnByDay(OrdWarnPlanDetail planDetail, List<OrdWarnPlanRules> rules){
         ResponseCode code = ResponseCode.RESULT_NORMAL;
         String step = "Start to pre analysis.";
-        if (getWarnPlanInfoDBService().existsLineEx(OrdWarnPlanInfoTable.R_INFO.TABLE
-                , new HashMap<String, Object>(){{put(OrdWarnPlanInfoTable.R_INFO.STATUS, CommFieldStatus.ENABLE);
-                    put(OrdWarnPlanInfoTable.R_INFO.UNIQUE_ID, planDetail.getUid());
-                    put(OrdWarnPlanInfoTable.R_INFO.VERSION, planDetail.getVersion());
-                }}, null, "") <= 0){
-            step = "Plan is changed,do analysis next time";
-            code = ResponseCode.RESULT_BAD;
-        }
+        /*if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+            if (getWarnPlanInfoDBService().existsLineEx(OrdWarnPlanInfoTable.R_INFO.TABLE
+                    , new HashMap<String, Object>(){{put(OrdWarnPlanInfoTable.R_INFO.STATUS, CommFieldStatus.ENABLE);
+                        put(OrdWarnPlanInfoTable.R_INFO.UNIQUE_ID, planDetail.getUid());
+                        put(OrdWarnPlanInfoTable.R_INFO.VERSION, planDetail.getVersion());
+                    }}, null, "") <= 0){
+                step = "Plan is changed,do analysis next time";
+                code = ResponseCode.RESULT_BAD;
+            }
+        }else {
+            OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+            if (getWarnPlanCommonDBService().existsLineEx(OrdWarnPlanCommonTable.R_INFO.DOING_TABLE
+                    , new HashMap<String, Object>(){{put(OrdWarnPlanCommonTable.R_INFO.STATUS, CommFieldStatus.ENABLE);
+                        put(OrdWarnPlanCommonTable.R_INFO.PLAN_ID, commPlan.getUid());
+                        put(OrdWarnPlanCommonTable.R_INFO.OWNER_ID, commPlan.getOwnerId());
+                        put(OrdWarnPlanCommonTable.R_INFO.OBJ_ID, commPlan.getObjId());
+                        put(OrdWarnPlanCommonTable.R_INFO.VERSION, commPlan.getVersion());
+                    }}, null, "") <= 0){
+                step = "Common Plan is changed,do analysis next time.";
+                code = ResponseCode.RESULT_BAD;
+            }
+        }*/
 
         boolean noBindDev = true;
         for (OrdWarnPlanRules ruleItem:rules){
@@ -177,31 +191,57 @@ public class SiteDataWarnHandler {
             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, null, null, false, "") <= 0){
-                step = "Update warn plan trigger result to db failed.";
-                code = ResponseCode.RESULT_BAD;
+            if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+                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){
+                    step = "Update warn plan trigger result to db failed.";
+                    code = ResponseCode.RESULT_BAD;
+                }
+            }else {
+                OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.PLAN_ID, commPlan.getUid());
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OWNER_ID, commPlan.getOwnerId());
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OBJ_ID, commPlan.getObjId());
+                if (getWarnPlanCommonDBService().updatePlanForTrigger(commPlan.getUid(), commPlan.getOwnerId(), commPlan.getObjId(), commPlan.getObjName()
+                        , updatePlan, null, null, null, false, "") <= 0){
+                    step = "Update warn plan trigger result to db failed.";
+                    code = ResponseCode.RESULT_BAD;
+                }
             }
         }
         LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mBusinessType, mStrClassName
-                , String.format("Pick Site Data By Day:{planId=%s} {step=%s} {%s}...",
-                        planDetail.getUid(), step, code.toString()));
+                , String.format("Pick Site Data By Day:{kind=%s, planId=%s} {step=%s} {%s}...",
+                        planDetail.getKind(), planDetail.getUid(), step, code.toString()));
         return code;
     }
 
     public static ResponseCode pickWarnByOther(OrdWarnPlanDetail planDetail, List<OrdWarnPlanRules> rules){
         ResponseCode code = ResponseCode.RESULT_NORMAL;
         String step = "Start to pre analysis.";
-        if (getWarnPlanInfoDBService().existsLineEx(OrdWarnPlanInfoTable.R_INFO.TABLE
-                , new HashMap<String, Object>(){{put(OrdWarnPlanInfoTable.R_INFO.STATUS, CommFieldStatus.ENABLE);
-                    put(OrdWarnPlanInfoTable.R_INFO.UNIQUE_ID, planDetail.getUid());
-                    put(OrdWarnPlanInfoTable.R_INFO.VERSION, planDetail.getVersion());
-                }}, null, "") <= 0){
-            step = "Plan is changed,do analysis next time.";
-            code = ResponseCode.RESULT_BAD;
-        }
+        /*if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+            if (getWarnPlanInfoDBService().existsLineEx(OrdWarnPlanInfoTable.R_INFO.TABLE
+                    , new HashMap<String, Object>(){{put(OrdWarnPlanInfoTable.R_INFO.STATUS, CommFieldStatus.ENABLE);
+                        put(OrdWarnPlanInfoTable.R_INFO.UNIQUE_ID, planDetail.getUid());
+                        put(OrdWarnPlanInfoTable.R_INFO.VERSION, planDetail.getVersion());
+                    }}, null, "") <= 0){
+                step = "Plan is changed,do analysis next time.";
+                code = ResponseCode.RESULT_BAD;
+            }
+        }else {
+            OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+            if (getWarnPlanCommonDBService().existsLineEx(OrdWarnPlanCommonTable.R_INFO.DOING_TABLE
+                    , new HashMap<String, Object>(){{put(OrdWarnPlanCommonTable.R_INFO.STATUS, CommFieldStatus.ENABLE);
+                        put(OrdWarnPlanCommonTable.R_INFO.PLAN_ID, commPlan.getUid());
+                        put(OrdWarnPlanCommonTable.R_INFO.OWNER_ID, commPlan.getOwnerId());
+                        put(OrdWarnPlanCommonTable.R_INFO.OBJ_ID, commPlan.getObjId());
+                        put(OrdWarnPlanCommonTable.R_INFO.VERSION, commPlan.getVersion());
+                    }}, null, "") <= 0){
+                step = "Common Plan is changed,do analysis next time.";
+                code = ResponseCode.RESULT_BAD;
+            }
+        }*/
 
         boolean noBindDev = true;
         for (OrdWarnPlanRules ruleItem:rules){
@@ -362,17 +402,29 @@ public class SiteDataWarnHandler {
             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, null, null, false, "") <= 0){
-                step = "Update warn plan trigger result to db failed.";
-                code = ResponseCode.RESULT_BAD;
+            if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+                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){
+                    step = "Update warn plan trigger result to db failed.";
+                    code = ResponseCode.RESULT_BAD;
+                }
+            }else {
+                OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.PLAN_ID, commPlan.getUid());
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OWNER_ID, commPlan.getOwnerId());
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OBJ_ID, commPlan.getObjId());
+                if (getWarnPlanCommonDBService().updatePlanForTrigger(commPlan.getUid(), commPlan.getOwnerId(), commPlan.getObjId(), commPlan.getObjName()
+                        , updatePlan, null, null, null, false, "") <= 0){
+                    step = "Update warn plan trigger result to db failed.";
+                    code = ResponseCode.RESULT_BAD;
+                }
             }
         }
         LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mBusinessType, mStrClassName
-                , String.format("Handler Site Data Plan:{planId=%s} {step=%s} {%s}...",
-                        planDetail.getUid(), step, code.toString()));
+                , String.format("Handler Site Data Plan:{kind=%s, planId=%s} {step=%s} {%s}...",
+                        planDetail.getKind(), planDetail.getUid(), step, code.toString()));
         return code;
     }
 
@@ -611,13 +663,10 @@ 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<>();
-            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;
@@ -644,17 +693,29 @@ public class SiteDataWarnHandler {
             }
             ownerId2TriggerSample.clear();
         }
-
-        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, eventId2PlanId, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
-            step = "Update warn plan trigger result to db failed.";
-            code = ResponseCode.RESULT_BAD;
+        if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+            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){
+                step = "Update warn plan trigger result to db failed.";
+                code = ResponseCode.RESULT_BAD;
+            }
+        }else {
+            OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.PLAN_ID, commPlan.getUid());
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OWNER_ID, commPlan.getOwnerId());
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OBJ_ID, commPlan.getObjId());
+            if (getWarnPlanCommonDBService().updatePlanForTrigger(commPlan.getUid(), commPlan.getOwnerId(), commPlan.getObjId(), commPlan.getObjName()
+                    , updatePlan, genNewEventObj, genOldEventObj, triggerSampleHisObj, 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 Real By Set:{planId=%s,siteId=%s} {step=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s} {%s}...",
-                        planDetail.getUid(), siteId, step, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam, code.toString()));
+                , String.format("Analysis Data For Real By Set:{kind=%s, planId=%s,siteId=%s} {step=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s} {%s}...",
+                        planDetail.getKind(), planDetail.getUid(), siteId, step, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam, code.toString()));
         return code;
     }
 
@@ -1018,13 +1079,10 @@ 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<>();
-            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;
@@ -1051,16 +1109,29 @@ public class SiteDataWarnHandler {
             }
             ownerId2TriggerSample.clear();
         }
-        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, eventId2PlanId, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
-            step = "Update warn plan trigger result to db failed.";
-            code = ResponseCode.RESULT_BAD;
+        if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+            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){
+                step = "Update warn plan trigger result to db failed.";
+                code = ResponseCode.RESULT_BAD;
+            }
+        }else {
+            OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.PLAN_ID, commPlan.getUid());
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OWNER_ID, commPlan.getOwnerId());
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OBJ_ID, commPlan.getObjId());
+            if (getWarnPlanCommonDBService().updatePlanForTrigger(commPlan.getUid(), commPlan.getOwnerId(), commPlan.getObjId(), commPlan.getObjName()
+                    , updatePlan, genNewEventObj, genOldEventObj, triggerSampleHisObj, 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} {step=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s}  {%s}...",
-                        planDetail.getUid(), siteId, step, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam, code.toString()));
+                , String.format("Analysis Data For Report By Hour:{kind=%s, planId=%s,siteId=%s} {step=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s}  {%s}...",
+                       planDetail.getKind(), planDetail.getUid(), siteId, step, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam, code.toString()));
         return code;
     }
 
@@ -1395,13 +1466,10 @@ 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<>();
-            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;
@@ -1429,16 +1497,28 @@ public class SiteDataWarnHandler {
             ownerId2TriggerSample.clear();
         }
 
-        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, eventId2PlanId, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
-            step = "Update warn plan trigger result to db failed.";
-            code = ResponseCode.RESULT_BAD;
+        if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+            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){
+                step = "Update warn plan trigger result to db failed.";
+                code = ResponseCode.RESULT_BAD;
+            }
+        }else {
+            OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.PLAN_ID, commPlan.getUid());
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OWNER_ID, commPlan.getOwnerId());
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OBJ_ID, commPlan.getObjId());
+            if (getWarnPlanCommonDBService().updatePlanForTrigger(commPlan.getUid(), commPlan.getOwnerId(), commPlan.getObjId(), commPlan.getObjName()
+                    , updatePlan, genNewEventObj, genOldEventObj, triggerSampleHisObj, 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 Day:{planId=%s,siteId=%s} {step=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s} {%s}...",
-                        planDetail.getUid(), siteId, step, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam, code.toString()));
+                , String.format("Analysis Data For Report By Day:{kind=%s, planId=%s,siteId=%s} {step=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s} {%s}...",
+                        planDetail.getKind(), planDetail.getUid(), siteId, step, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam, code.toString()));
         return code;
     }
 

+ 238 - 0
src/main/java/com/shkpr/service/warncore/bizhandler/TimerCheckWarnPlanCommMgr.java

@@ -0,0 +1,238 @@
+package com.shkpr.service.warncore.bizhandler;
+
+import com.global.base.log.LogLevelFlag;
+import com.global.base.log.LogPrintMgr;
+import com.global.base.tools.FastJsonUtil;
+import com.shkpr.service.warncore.commtools.CommTool;
+import com.shkpr.service.warncore.commtools.TimeTool;
+import com.shkpr.service.warncore.components.locks.CountDownLatchEx;
+import com.shkpr.service.warncore.components.locks.OrdWarnPlanLockMgr;
+import com.shkpr.service.warncore.constants.*;
+import com.shkpr.service.warncore.dbdao.DBMgrProxy;
+import com.shkpr.service.warncore.dbdao.services.intef.OrdWarnPlanCommonDBService;
+import com.shkpr.service.warncore.dbdao.services.intef.OrdWarnPlanRulesDBService;
+import com.shkpr.service.warncore.dbdao.tables.OrdWarnPlanCommonTable;
+import com.shkpr.service.warncore.dbdao.tables.OrdWarnPlanRulesTable;
+import com.shkpr.service.warncore.dto.*;
+import com.shkpr.service.warncore.globalmgr.AsyncTaskQueueMgr;
+import org.springframework.util.StringUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class TimerCheckWarnPlanCommMgr {
+    private final static String mStrClassName = "TimerCheckWarnPlanCommMgr";
+    private static OrdWarnPlanCommonDBService getThisDBService(){
+        return DBMgrProxy.getInstance().applyXXXApi(OrdWarnPlanCommonDBService.class);
+    }
+
+    private static OrdWarnPlanRulesDBService getWarnPlanRuleDBService(){
+        return DBMgrProxy.getInstance().applyXXXApi(OrdWarnPlanRulesDBService.class);
+    }
+
+    public static void checkWarnPlanByFrequency(int curClock, int curMinute, String frequencyUnit){
+        long curNowTm = TimeTool.getCurSecUTC();
+        int curTmForCompare = 0;
+        String tmFiler = "";
+        if (FrequencyUnit.MIN.equals(frequencyUnit)){
+            curTmForCompare = curMinute;
+            /*tmFiler = String.format("and %s <= %d "
+                    , OrdWarnPlanInfoTable.W_INFO.FREQUENCY
+                    , curTmForCompare);*/
+        }else if (FrequencyUnit.HOUR.equals(frequencyUnit)){
+            curTmForCompare = curClock;
+            /*tmFiler = String.format("and %s <= %d "
+                    , OrdWarnPlanInfoTable.W_INFO.FREQUENCY
+                    , curTmForCompare);*/
+        }
+
+        long thisDayBegin = TimeTool.getTodayBeginUTC();
+        final int preMonthInYear = TimeTool.getYearIndex(TimeTool.getTimeChgMonth(thisDayBegin, -1));//前一月所在的年份
+        final int preDayInMonth = TimeTool.getMonthIndex(thisDayBegin-TimeTool.MS_ONE_DAY);//前一日所在的月份
+        int oTotal = getThisDBService().totalCountsEx(OrdWarnPlanCommonTable.R_INFO.DOING_TABLE,
+                new HashMap<String, Object>(){{
+                         put(OrdWarnPlanCommonTable.R_INFO.STATUS, CommFieldStatus.ENABLE);
+                         put(OrdWarnPlanCommonTable.R_INFO.DISUSED, CommFieldStatus.DISABLE);
+                         put(OrdWarnPlanCommonTable.R_INFO.OWNER_STATUS, CommFieldStatus.ENABLE);
+                         put(OrdWarnPlanCommonTable.R_INFO.FREQUENCY_UNIT, frequencyUnit);}}
+                , null
+                , tmFiler);
+
+        if (oTotal > 0){
+            int limit = 200, offset = 0, realTotal = 0;
+            while (realTotal < oTotal){
+                List<Map<String, Object>> arrDbTmp = getThisDBService().listAllWithsEx(OrdWarnPlanCommonTable.R_INFO.DOING_TABLE
+                        ,""
+                        , limit
+                        , offset
+                        ,null
+                        ,null
+                        , OrdWarnPlanCommonTable.R_INFO.TOTAL_ANALYSIS_ORDER
+                        , String.format("and %s = 0 and %s = 1 and %s = 1 and %s = '%s'"
+                                ,OrdWarnPlanCommonTable.R_INFO.DISUSED
+                                ,OrdWarnPlanCommonTable.R_INFO.STATUS
+                                ,OrdWarnPlanCommonTable.R_INFO.OWNER_STATUS
+                                ,OrdWarnPlanCommonTable.R_INFO.FREQUENCY_UNIT
+                                ,frequencyUnit));
+                if (CommTool.listSize(arrDbTmp) <= 0)
+                    break;
+
+                realTotal += arrDbTmp.size();
+                offset = realTotal;
+
+                List<OrdWarnPlanCheckBeanEx> arrRes = FastJsonUtil.batchMap2Obj(arrDbTmp, OrdWarnPlanCheckBeanEx.class, true);
+                if (CommTool.listSize(arrRes) <= 0)
+                    continue;
+
+                for (OrdWarnPlanCheckBeanEx oItem:arrRes){
+                    if (!FrequencyUnit.MIN.equals(frequencyUnit) && !FrequencyUnit.HOUR.equals(frequencyUnit)){
+                        curTmForCompare = oItem.getFrequency();
+                    }
+
+                    if (oItem.getStatus() != CommFieldStatus.ENABLE
+                            || oItem.getFrequency() <= 0
+                            || oItem.getMinStarts() < 0
+                            || !frequencyUnit.equals(oItem.getFrequencyUnit())
+                            /*|| oItem.getFrequency() > curTmForCompare*/
+                            || (curTmForCompare%oItem.getFrequency() != 0))
+                        continue;
+
+                    if (OrdWarnOwnerSrc.ZONE.equals(oItem.getOwnerSrc()) && StringUtils.isEmpty(oItem.getOwnerId()))
+                        continue;
+
+                    //if (DoPeriodUnit.HOUR.equals(oItem.getDoPeriodUnit())){
+                    if (oItem.getCycleTriggerUpperTimes() >= 0){
+                        if (oItem.getCycleTriggerUpperTimes() == 0)
+                            continue;
+                        if (FrequencyUnit.MIN.equals(frequencyUnit) || FrequencyUnit.HOUR.equals(frequencyUnit)){
+                            if (oItem.getLastEventTime() >= thisDayBegin
+                                    && oItem.getCycleTriggerTimes() >= oItem.getCycleTriggerUpperTimes()){
+                                continue;
+                            }
+                        }else if (FrequencyUnit.DAY.equals(frequencyUnit) && oItem.getLastEventTime() > 0L){
+                            int lastEventTmInMonth = TimeTool.getMonthIndex(oItem.getLastEventTime());
+                            if (lastEventTmInMonth == preDayInMonth
+                                    && oItem.getCycleTriggerTimes() >= oItem.getCycleTriggerUpperTimes()){
+                                continue;
+                            }
+                        }else if (FrequencyUnit.MONTH.equals(frequencyUnit) && oItem.getLastEventTime() > 0L){
+                            int lastEventTmInYear = TimeTool.getYearIndex(oItem.getLastEventTime());
+                            if (lastEventTmInYear == preMonthInYear
+                                    && oItem.getCycleTriggerTimes() >= oItem.getCycleTriggerUpperTimes()){
+                                continue;
+                            }
+                        }
+                    }
+
+                    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_COMM
+                            , new OrdWarnPlanWillDoEx(oItem.getUid(), oItem.getObjSrc(), oItem.getOwnerId(), oItem.getObjId()));
+                }
+            }
+        }
+    }
+
+    /**
+     * 先获取方案信息,然后获取规则列表,再加锁
+     * @param planWillDo
+     */
+    public static void handlerPlanWillDo(OrdWarnPlanWillDoEx planWillDo){
+        ResponseCode code = ResponseCode.RESULT_NORMAL;
+        String step = "Start get warn plan info.";
+        List<OrdWarnPlanRules> rules = null;
+        OrdWarnPlanDetailEx planDetail = null;
+        do {
+            List<Map<String, Object>> infoDb = getThisDBService().batchQueryWithsEx(OrdWarnPlanCommonTable.R_INFO.DOING_TABLE
+                    , ""
+                    , new HashMap<String, Object>(){{
+                            put(OrdWarnPlanCommonTable.R_INFO.PLAN_ID, planWillDo.getPlanId());
+                            put(OrdWarnPlanCommonTable.R_INFO.OWNER_ID, planWillDo.getOwnerId());
+                            put(OrdWarnPlanCommonTable.R_INFO.OBJ_ID, planWillDo.getObjId());
+                        }}
+                    , null
+                    , ""
+                    , "");
+            if (CommTool.listSize(infoDb) <= 0){
+                code = ResponseCode.RESULT_BAD;
+                step = "Get warn plan info failed.";
+                break;
+            }
+
+            planDetail = FastJsonUtil.map2Obj(infoDb.get(0), OrdWarnPlanDetailEx.class,true);
+            if (planDetail == null
+                    || planDetail.getStatus() != CommFieldStatus.ENABLE
+                    || planDetail.getOwnerStatus() != CommFieldStatus.ENABLE){
+                code = ResponseCode.RESULT_BAD;
+                step = "Warn plan info invalid";
+                break;
+            }
+            if (OrdWarnOwnerSrc.ZONE.equals(planDetail.getOwnerSrc()) && StringUtils.isEmpty(planDetail.getOwnerId())){
+                code = ResponseCode.RESULT_BAD;
+                step = "Owner of warn plan is invalid";
+                break;
+            }
+            infoDb.clear();
+            List<Map<String, Object>> rulesDb = getWarnPlanRuleDBService().batchQueryWithsEx("", ""
+                    , new HashMap<String, Object>(){{put(OrdWarnPlanRulesTable.R_INFO.PLAN_ID, planWillDo.getPlanId());}}
+                    , null, OrdWarnPlanRulesTable.R_INFO.DEFAULT_ORDER, "");
+            if (CommTool.listSize(rulesDb) <= 0){
+                code = ResponseCode.RESULT_BAD;
+                step = "Warn plan rules invalid";
+                break;
+            }
+
+            rules = OrdWarnPlanRules.batchFromJsonEx(rulesDb);
+            for (OrdWarnPlanRules item:rules){
+                item.setObjId(planDetail.getObjId());
+                item.setObjName(planDetail.getObjName());
+                item.setObjGis(planDetail.getObjGis());
+                item.setDevId(planDetail.getDevId());
+                item.setDevCycle(planDetail.getDevCycle());
+            }
+            rulesDb.clear();
+        }while (false);
+
+        if (code == ResponseCode.RESULT_NORMAL){
+            CountDownLatchEx latchEx = null;
+            int nRetry = 3;
+            do {
+                try {
+                    latchEx = OrdWarnPlanLockMgr.tryLatchForPlanComm(planWillDo.getPlanId(), planDetail.getOwnerId(), planDetail.getObjId(), 2000);
+                }catch (Exception e){
+                    latchEx = null;
+                }
+
+                if (latchEx != null){
+                    if (OrdWarnObjSrc.SITE.equals(planWillDo.getObjSrc())){
+                        code = SiteDataWarnHandler.handlerDataFun(planDetail, rules);
+                    }else if (OrdWarnObjSrc.ZONE.equals(planWillDo.getObjSrc())){
+                        code = ZoneDataWarnHandler.handlerDataFun(planDetail, rules);
+                    }else if (OrdWarnObjSrc.ZTYPE.equals(planWillDo.getObjSrc())){
+                    }else if (OrdWarnObjSrc.TANK.equals(planWillDo.getObjSrc())){
+                    }
+                    break;
+                }
+            }while ((--nRetry) > 0);
+
+            if (latchEx != null){
+                latchEx.countDown();
+            }else{
+                step = "Request lock ror analysis failed";
+                code = ResponseCode.RESULT_BAD;
+            }
+        }
+
+        LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, LogFlagBusiType.BUSI_TIMER_CHECK_WARN_PLAN.toStrValue(), mStrClassName
+                , String.format("Handler Common Plan Will Do:{planId=%s,ownerId=%s,objId=%s} {step=%s} {%s}...",
+                        planWillDo.getPlanId(), planWillDo.getOwnerId(), planWillDo.getObjId(), step, code.toString()));
+    }
+}

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

@@ -71,10 +71,12 @@ public class TimerCheckWarnPlanMgr {
                             ,null
                             ,null
                             , OrdWarnPlanInfoTable.R_INFO.TOTAL_ANALYSIS_ORDER
-                            , String.format("and %s = 0 and %s = %d and (%s between %d and %d)"
+                            , String.format("and %s = 1 and %s = '%s' and %s = 0 and %s = 1 and (%s between %d and %d)"
+                                    ,OrdWarnPlanInfoTable.R_INFO.OWNER_STATUS
+                                    ,OrdWarnPlanInfoTable.R_INFO.FREQUENCY_UNIT
+                                    ,frequencyUnit
                                     ,OrdWarnPlanInfoTable.R_INFO.DISUSED
                                     ,OrdWarnPlanInfoTable.R_INFO.STATUS
-                                    ,CommFieldStatus.ENABLE
                                     ,OrdWarnPlanInfoTable.R_INFO.ID
                                     ,oTotal.getMinIndex()
                                     ,oTotal.getMaxIndex()));

+ 113 - 53
src/main/java/com/shkpr/service/warncore/bizhandler/ZoneDataWarnHandler.java

@@ -9,6 +9,7 @@ import com.shkpr.service.warncore.commtools.TimeTool;
 import com.shkpr.service.warncore.constants.*;
 import com.shkpr.service.warncore.dbdao.DBMgrProxy;
 import com.shkpr.service.warncore.dbdao.services.intef.MixDataBizDBService;
+import com.shkpr.service.warncore.dbdao.services.intef.OrdWarnPlanCommonDBService;
 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.*;
@@ -39,6 +40,10 @@ public class ZoneDataWarnHandler {
         return DBMgrProxy.getInstance().applyXXXApi(MixDataBizDBService.class);
     }
 
+    private static OrdWarnPlanCommonDBService getWarnPlanCommonDBService(){
+        return DBMgrProxy.getInstance().applyXXXApi(OrdWarnPlanCommonDBService.class);
+    }
+
     public static ResponseCode handlerDataFun(OrdWarnPlanDetail planDetail, List<OrdWarnPlanRules> rules){
         ResponseCode code = ResponseCode.RESULT_NORMAL;
         switch (planDetail.getFrequencyUnit()){
@@ -61,14 +66,14 @@ public class ZoneDataWarnHandler {
     private static ResponseCode pickWarnByHour(OrdWarnPlanDetail planDetail, List<OrdWarnPlanRules> rules){
         ResponseCode code = ResponseCode.RESULT_NORMAL;
         String step = "Start to pre analysis.";
-        if (getWarnPlanInfoDBService().existsLineEx(OrdWarnPlanInfoTable.R_INFO.TABLE
+        /*if (getWarnPlanInfoDBService().existsLineEx(OrdWarnPlanInfoTable.R_INFO.TABLE
                 , new HashMap<String, Object>(){{put(OrdWarnPlanInfoTable.R_INFO.STATUS, CommFieldStatus.ENABLE);
                     put(OrdWarnPlanInfoTable.R_INFO.UNIQUE_ID, planDetail.getUid());
                     put(OrdWarnPlanInfoTable.R_INFO.VERSION, planDetail.getVersion());
                 }}, null, "") <= 0){
             step = "Plan is changed,do analysis next time";
             code = ResponseCode.RESULT_BAD;
-        }
+        }*/
 
         boolean doForTodayBefore = false;//是否只分析今日之前的数据
         final long curUTCTm = TimeTool.getCurMsUTC();
@@ -183,17 +188,29 @@ public class ZoneDataWarnHandler {
             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, null, null, false, "") <= 0){
-                step = "Update warn plan trigger result to db failed.";
-                code = ResponseCode.RESULT_BAD;
+            if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+                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){
+                    step = "Update warn plan trigger result to db failed.";
+                    code = ResponseCode.RESULT_BAD;
+                }
+            }else {
+                OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.PLAN_ID, commPlan.getUid());
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OWNER_ID, commPlan.getOwnerId());
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OBJ_ID, commPlan.getObjId());
+                if (getWarnPlanCommonDBService().updatePlanForTrigger(commPlan.getUid(), commPlan.getOwnerId(), commPlan.getObjId(), commPlan.getObjName()
+                        , updatePlan, null, null, null, false, "") <= 0){
+                    step = "Update warn plan trigger result to db failed.";
+                    code = ResponseCode.RESULT_BAD;
+                }
             }
         }
         LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mBusinessType, mStrClassName
-                , String.format("Pick Zone Data By Hour:{planId=%s} {step=%s} {%s}...",
-                        planDetail.getUid(), step, code.toString()));
+                , String.format("Pick Zone Data By Hour:{kind=%s, planId=%s} {step=%s} {%s}...",
+                        planDetail.getKind(), planDetail.getUid(), step, code.toString()));
         return code;
     }
 
@@ -201,14 +218,14 @@ public class ZoneDataWarnHandler {
     private static ResponseCode pickWarnByMonth(OrdWarnPlanDetail planDetail, List<OrdWarnPlanRules> rules){
         ResponseCode code = ResponseCode.RESULT_NORMAL;
         String step = "Start to pre analysis.";
-        if (getWarnPlanInfoDBService().existsLineEx(OrdWarnPlanInfoTable.R_INFO.TABLE
+        /*if (getWarnPlanInfoDBService().existsLineEx(OrdWarnPlanInfoTable.R_INFO.TABLE
                 , new HashMap<String, Object>(){{put(OrdWarnPlanInfoTable.R_INFO.STATUS, CommFieldStatus.ENABLE);
                     put(OrdWarnPlanInfoTable.R_INFO.UNIQUE_ID, planDetail.getUid());
                     put(OrdWarnPlanInfoTable.R_INFO.VERSION, planDetail.getVersion());
                 }}, null, "") <= 0){
             step = "Plan is changed,do analysis next time";
             code = ResponseCode.RESULT_BAD;
-        }
+        }*/
 
         final long curUTCTm = TimeTool.getCurMsUTC();
         final long thisMonthBegin = TimeTool.getMonthBeginUTC(curUTCTm);
@@ -310,17 +327,29 @@ public class ZoneDataWarnHandler {
             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, null, null, false, "") <= 0){
-                step = "Update warn plan trigger result to db failed.";
-                code = ResponseCode.RESULT_BAD;
+            if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+                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){
+                    step = "Update warn plan trigger result to db failed.";
+                    code = ResponseCode.RESULT_BAD;
+                }
+            }else {
+                OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.PLAN_ID, commPlan.getUid());
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OWNER_ID, commPlan.getOwnerId());
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OBJ_ID, commPlan.getObjId());
+                if (getWarnPlanCommonDBService().updatePlanForTrigger(commPlan.getUid(), commPlan.getOwnerId(), commPlan.getObjId(), commPlan.getObjName()
+                        , updatePlan, null, null, null, false, "") <= 0){
+                    step = "Update warn plan trigger result to db failed.";
+                    code = ResponseCode.RESULT_BAD;
+                }
             }
         }
         LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mBusinessType, mStrClassName
-                , String.format("Pick Zone Data By Month:{planId=%s} {step=%s} {%s}...",
-                        planDetail.getUid(), step, code.toString()));
+                , String.format("Pick Zone Data By Month:{kind=%s, planId=%s} {step=%s} {%s}...",
+                        planDetail.getKind(), planDetail.getUid(), step, code.toString()));
         return code;
     }
 
@@ -328,14 +357,14 @@ public class ZoneDataWarnHandler {
     public static ResponseCode pickWarnByDay(OrdWarnPlanDetail planDetail, List<OrdWarnPlanRules> rules){
         ResponseCode code = ResponseCode.RESULT_NORMAL;
         String step = "Start to pre analysis.";
-        if (getWarnPlanInfoDBService().existsLineEx(OrdWarnPlanInfoTable.R_INFO.TABLE
+        /*if (getWarnPlanInfoDBService().existsLineEx(OrdWarnPlanInfoTable.R_INFO.TABLE
                 , new HashMap<String, Object>(){{put(OrdWarnPlanInfoTable.R_INFO.STATUS, CommFieldStatus.ENABLE);
                     put(OrdWarnPlanInfoTable.R_INFO.UNIQUE_ID, planDetail.getUid());
                     put(OrdWarnPlanInfoTable.R_INFO.VERSION, planDetail.getVersion());
                 }}, null, "") <= 0){
             step = "Plan is changed,do analysis next time";
             code = ResponseCode.RESULT_BAD;
-        }
+        }*/
 
         final boolean bDoRealTimeCompare = (planDetail.getItemKey().endsWith("upkeep") || planDetail.getItemKey().endsWith("wash"))?true:false;
         final long curUTCTm = TimeTool.getCurMsUTC();
@@ -449,17 +478,29 @@ public class ZoneDataWarnHandler {
             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, null, null, false, "") <= 0){
-                step = "Update warn plan trigger result to db failed.";
-                code = ResponseCode.RESULT_BAD;
+            if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+                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){
+                    step = "Update warn plan trigger result to db failed.";
+                    code = ResponseCode.RESULT_BAD;
+                }
+            }else {
+                OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.PLAN_ID, commPlan.getUid());
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OWNER_ID, commPlan.getOwnerId());
+                updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OBJ_ID, commPlan.getObjId());
+                if (getWarnPlanCommonDBService().updatePlanForTrigger(commPlan.getUid(), commPlan.getOwnerId(), commPlan.getObjId(), commPlan.getObjName()
+                        , updatePlan, null, null, null, false, "") <= 0){
+                    step = "Update warn plan trigger result to db failed.";
+                    code = ResponseCode.RESULT_BAD;
+                }
             }
         }
         LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mBusinessType, mStrClassName
-                , String.format("Pick Zone Data By Day:{planId=%s} {step=%s} {%s}...",
-                        planDetail.getUid(), step, code.toString()));
+                , String.format("Pick Zone Data By Day:{kind=%s, planId=%s} {step=%s} {%s}...",
+                        planDetail.getKind(), planDetail.getUid(), step, code.toString()));
         return code;
     }
 
@@ -814,13 +855,10 @@ 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<>();
-            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;
@@ -847,17 +885,29 @@ public class ZoneDataWarnHandler {
             }
             ownerId2TriggerSample.clear();
         }
-
-        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, eventId2PlanId, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
-            step = "Update warn plan trigger result to db failed.";
-            code = ResponseCode.RESULT_BAD;
+        if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+            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){
+                step = "Update warn plan trigger result to db failed.";
+                code = ResponseCode.RESULT_BAD;
+            }
+        }else {
+            OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.PLAN_ID, commPlan.getUid());
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OWNER_ID, commPlan.getOwnerId());
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OBJ_ID, commPlan.getObjId());
+            if (getWarnPlanCommonDBService().updatePlanForTrigger(commPlan.getUid(), commPlan.getOwnerId(), commPlan.getObjId(), commPlan.getObjName()
+                    , updatePlan, genNewEventObj, genOldEventObj, triggerSampleHisObj, 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 Step By Step:{planId=%s,zoneId=%s} {step=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s} {%s}...",
-                        planDetail.getUid(), zoneId, step, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam, code.toString()));
+                , String.format("Analysis Data Step By Step:{kind=%s, planId=%s,zoneId=%s} {step=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s} {%s}...",
+                        planDetail.getKind(), planDetail.getUid(), zoneId, step, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam, code.toString()));
         return code;
     }
 
@@ -1307,14 +1357,11 @@ 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<>();
-            eventId2PlanId = new HashMap<>();
             for (Map.Entry<String, JPOrdWarnEventInfo> entry:newEvent2Gen.entrySet()){
                 entry.getValue().setContent(thisSampleContent);
                 genNewEventObj.add(FastJsonUtil.obj2Map(entry.getValue(), true));
-                eventId2PlanId.put(entry.getValue().getUid(), entry.getValue().getPlanId());
             }
         }
         List<Map<String, Object>> genOldEventObj = null;
@@ -1339,16 +1386,29 @@ 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, eventId2PlanId, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam) <= 0){
-            step = "Update warn plan trigger result to db failed.";
-            code = ResponseCode.RESULT_BAD;
+        if (PlanKind.PRIVATE.equals(planDetail.getKind())){
+            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){
+                step = "Update warn plan trigger result to db failed.";
+                code = ResponseCode.RESULT_BAD;
+            }
+        }else {
+            OrdWarnPlanDetailEx commPlan = (OrdWarnPlanDetailEx)planDetail;
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.PLAN_ID, commPlan.getUid());
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OWNER_ID, commPlan.getOwnerId());
+            updatePlan.put(OrdWarnPlanCommonDoRecordTable.W_INFO.OBJ_ID, commPlan.getObjId());
+            if (getWarnPlanCommonDBService().updatePlanForTrigger(commPlan.getUid(), commPlan.getOwnerId(), commPlan.getObjId(), commPlan.getObjName()
+                    , updatePlan, genNewEventObj, genOldEventObj, triggerSampleHisObj, 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 Zone Do(item=%s):{planId=%s,zoneId=%s} {step=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s} {%s}...",
-                        planDetail.getItemKey(), planDetail.getUid(), zoneId, step, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam, code.toString()));
+                , String.format("Analysis Zone Do(item=%s):{kind=%s, planId=%s,zoneId=%s} {step=%s} {clearPlanHisTrigSam=%b,eventAcceptPlanHisTrigSam=%s} {%s}...",
+                        planDetail.getKind(), planDetail.getItemKey(), planDetail.getUid(), zoneId, step, clearPlanHisTriggerSam, eventIdAcceptPlanHisTriggerSam, code.toString()));
         return code;
     }
 }

+ 4 - 0
src/main/java/com/shkpr/service/warncore/components/locks/OrdWarnPlanLockMgr.java

@@ -22,4 +22,8 @@ public class OrdWarnPlanLockMgr extends BaseLockMgr{
     public static CountDownLatchEx tryLatchForPlan(String planId, long waitMsTm) throws Exception{
         return getInstance().tryLatchForXXX("WARN_PN_"+planId, waitMsTm);
     }
+
+    public static CountDownLatchEx tryLatchForPlanComm(String planId, String ownerId, String objId, long waitMsTm) throws Exception{
+        return getInstance().tryLatchForXXX("WARN_PN_"+planId+"_"+ownerId+"_"+objId, waitMsTm);
+    }
 }

+ 1 - 0
src/main/java/com/shkpr/service/warncore/constants/LogFlagBusiType.java

@@ -28,6 +28,7 @@ public enum  LogFlagBusiType {
     BUSI_DB_ORD_WARN_PLAN_RULE(104,"DB Ord Warn Plan Rule"),
     BUSI_DB_ORD_WARN_EVENT_INFO(105,"DB Ord Warn Event Info"),
     BUSI_DB_MIX_DATA(106,"DB Mix Data"),
+    BUSI_DB_ORD_WARN_PLAN_COMMON(107,"DB Ord Warn Plan Common"),
 
     BUSI_INFLUX_DB_DEV_RECORD(200,"Influx DB Dev Record"),
 

+ 6 - 0
src/main/java/com/shkpr/service/warncore/constants/PlanKind.java

@@ -0,0 +1,6 @@
+package com.shkpr.service.warncore.constants;
+
+public interface PlanKind {
+    String PRIVATE = "private";//专用方案
+    String PUBLIC = "public";//通用方案
+}

+ 1 - 0
src/main/java/com/shkpr/service/warncore/constants/TaskQueueDataTypeEx.java

@@ -6,6 +6,7 @@ public class TaskQueueDataTypeEx extends TaskQueueDataType {
     public static final int ASYNC_TASK_BEGIN = 1000;
     public static final int ASYNC_CALC_DEV_DATA_TASK = ASYNC_TASK_BEGIN+1;
     public static final int ASYNC_ANALY_WARN_PLAN = ASYNC_CALC_DEV_DATA_TASK+1;
+    public static final int ASYNC_ANALY_WARN_PLAN_COMM = ASYNC_ANALY_WARN_PLAN+1;
     public static final int ASYNC_TASK_END = 1010;
 
     public static final int DELAY_TASK_BEGIN = 2000;

+ 1 - 0
src/main/java/com/shkpr/service/warncore/dbdao/DBMgrProxy.java

@@ -13,6 +13,7 @@ public class DBMgrProxy {
         add(OrdWarnPlanRulesDBService.class);
         add(OrdWarnEventInfoDBService.class);
         add(MixDataBizDBService.class);
+        add(OrdWarnPlanCommonDBService.class);
     }};
     private Map<Class<?>, Object> mapClass2Instance = new ConcurrentHashMap<>();
 

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

@@ -4,9 +4,15 @@ import com.shkpr.service.warncore.dbdao.providers.OrdWarnEventRulesSqlProvider;
 import org.apache.ibatis.annotations.InsertProvider;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 
 public interface OrdWarnEventRulesMapper {
     @InsertProvider(type = OrdWarnEventRulesSqlProvider.class, method = "copyRuleFromPlan")
     int copyRuleFromPlan(@Param("event2Plan") Map<String, String> eventId2PlanId);
+
+    @InsertProvider(type = OrdWarnEventRulesSqlProvider.class, method = "copyRuleFromCommonPlan")
+    int copyRuleFromCommonPlan(@Param("planId") String planId
+            , @Param("obj") Map<String, String> obj
+            , @Param("eventId") List<String> eventId);
 }

+ 15 - 0
src/main/java/com/shkpr/service/warncore/dbdao/mapper/OrdWarnPlanCommonDoRecordMapper.java

@@ -0,0 +1,15 @@
+package com.shkpr.service.warncore.dbdao.mapper;
+
+import com.shkpr.service.warncore.dbdao.providers.OrdWarnPlanCommonDoRecordSqlProvider;
+import org.apache.ibatis.annotations.InsertProvider;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface OrdWarnPlanCommonDoRecordMapper {
+    @InsertProvider(type = OrdWarnPlanCommonDoRecordSqlProvider.class, method = "insertOrUpdateEx")
+    int insertOrUpdateEx(@Param("inserts") Map<String, Object> inserts
+            , @Param("uniques") List<Object> uniques
+            , @Param("updates") List<Object> updates);
+}

+ 77 - 0
src/main/java/com/shkpr/service/warncore/dbdao/mapper/OrdWarnPlanCommonMapper.java

@@ -0,0 +1,77 @@
+package com.shkpr.service.warncore.dbdao.mapper;
+
+import com.shkpr.service.warncore.dbdao.providers.OrdWarnPlanCommonSqlProvider;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+import java.util.Map;
+
+public interface OrdWarnPlanCommonMapper {
+    @SelectProvider(type = OrdWarnPlanCommonSqlProvider.class, method = "totalCounts")
+    int totalCounts(@Param("table") String table
+            , @Param("andWheres") Map<String, Object> andWheres
+            , @Param("orWheres") Map<String, Object> orWheres
+            , @Param("extend") String extend);
+
+    @SelectProvider(type = OrdWarnPlanCommonSqlProvider.class, method = "listAllWiths")
+    List<Map<String, Object>> listAllWiths(@Param("table") String table, @Param("filed") String file
+            , @Param("limit") int limit
+            , @Param("offset") int offset
+            , @Param("andWheres") Map<String, Object> andWheres
+            , @Param("orWheres") Map<String, Object> orWheres
+            , @Param("order") String order
+            , @Param("extend") String extend);
+
+    @SelectProvider(type = OrdWarnPlanCommonSqlProvider.class, method = "getByUniqueId")
+    Map<String, Object> getOne(@Param("table") String table, @Param("filed") String filed, @Param("id") Object id);
+
+    @SelectProvider(type = OrdWarnPlanCommonSqlProvider.class, method = "batchQueryIn")
+    List<Map<String, Object>> batchQueryIn(@Param("table") String table, @Param("filed") String file
+            , @Param("ids") List<? extends Object> ids
+            , @Param("order") String order
+            , @Param("extend") String extend);
+
+    @SelectProvider(type = OrdWarnPlanCommonSqlProvider.class, method = "batchQueryWiths")
+    List<Map<String, Object>> batchQueryWiths(@Param("table") String table, @Param("filed") String filed
+            , @Param("andWheres") Map<String, Object> andWheres
+            , @Param("orWheres") Map<String, Object> orWheres
+            , @Param("order") String order
+            , @Param("extend") String extend);
+
+    @InsertProvider(type = OrdWarnPlanCommonSqlProvider.class, method = "inserts")
+    int inserts(@Param("inserts") Map<String, Object> inserts);
+
+    /**
+     * update和delete返回受影响条数需要配合useAffectedRows=true
+     * @param datas
+     * @param andWheres
+     * @return
+     */
+    @UpdateProvider(type = OrdWarnPlanCommonSqlProvider.class, method = "updateWiths")
+    int updateWiths(@Param("datas") Map<String, Object> datas
+            , @Param("andWheres") Map<String, Object> andWheres
+            , @Param("orWheres") Map<String, Object> orWheres
+            , @Param("extend") String extend);
+
+    @UpdateProvider(type = OrdWarnPlanCommonSqlProvider.class, method = "updateWiths")
+    int updateWithsEx(@Param("datas") Map<String, Object> datas
+            , @Param("datasEx") Map<String, Object> datasEx
+            , @Param("andWheres") Map<String, Object> andWheres
+            , @Param("orWheres") Map<String, Object> orWheres
+            , @Param("extend") String extend);
+
+    @SelectProvider(type = OrdWarnPlanCommonSqlProvider.class, method = "existsLine")
+    boolean existLine(@Param("table") String table
+            , @Param("andWheres") Map<String, Object> andWheres
+            , @Param("orWheres") Map<String, Object> orWheres
+            , @Param("extend") String extend);
+
+    @DeleteProvider(type = OrdWarnPlanCommonSqlProvider.class, method = "deleteWiths")
+    int deleteWithsEx(@Param("andWheres") Map<String, Object> andWheres
+            , @Param("orWheres") Map<String, Object> orWheres
+            , @Param("extend") String extend);
+
+    @UpdateProvider(type = OrdWarnPlanCommonSqlProvider.class, method = "batchUpdateWiths")
+    int batchUpdateWiths( @Param("andWheres") List<Map<String, Object>> andWheres
+            , @Param("datas") List<Map<String, Object>> datas);
+}

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

@@ -3,6 +3,7 @@ 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.List;
 import java.util.Map;
 
 public class OrdWarnEventRulesSqlProvider extends BaseSqlProvider implements OrdWarnEventRulesTable {
@@ -75,4 +76,44 @@ public class OrdWarnEventRulesSqlProvider extends BaseSqlProvider implements Ord
         sql.append(event2Plan).append(" ) as mapping(to_id, from_id) ON aa.plan_id = mapping.from_id");
         return sql.toString();
     }
+
+    /**
+     * INSERT INTO k4_ord_warn_event_rules (event_id,obj_id,obj_name,starts,ends,restrict,conditions,obj_src)
+     * SELECT
+     *     mapping.to_id,mapping.obj_id,mapping.obj_name,starts,ends,restrict,conditions,obj_src
+     * FROM k4_ord_warn_plan_rules aa
+     * JOIN (
+     *     VALUES
+     *         ('A1', 'OBJ1', 'OBJ1', 'UWP202512051504369613'),
+     *         ('A2', 'OBJ1', 'OBJ1', 'UWP202512091209297094'),
+     *         ('A3', 'OBJ1', 'OBJ1', 'UWP202512051504369613')
+     * ) AS mapping(to_id, obj_id, obj_name, from_id) ON aa.plan_id = mapping.from_id;
+     */
+    public String copyRuleFromCommonPlan(Map<String, Object> mapParams){
+        String planId = (String) mapParams.get("planId");
+        List<String> eventId = (List<String>)mapParams.get("eventId");
+        Map<String, String> obj = (Map<String, String>)mapParams.get("obj");
+
+        StringBuilder sql = new StringBuilder("INSERT INTO " + OrdWarnEventRulesTable.W_INFO.TABLE);
+        sql.append(String.format("(%s,%s,%s,%s)"
+                , OrdWarnEventRulesTable.W_INFO.EVENT_ID
+                , OrdWarnEventRulesTable.W_INFO.OBJ_ID
+                , OrdWarnEventRulesTable.W_INFO.OBJ_NAME
+                , OrdWarnEventRulesTable.W_INFO.COMM_COPY_FIELD));
+        sql.append(String.format("select mapping.to_id,mapping.obj_id,mapping.obj_name,%s", OrdWarnEventRulesTable.W_INFO.COMM_COPY_FIELD));
+        sql.append(" from " + OrdWarnPlanRulesTable.W_INFO.TABLE + " aa join ( values ");
+
+        StringBuilder event2Plan = new StringBuilder("");
+        for (String idTmp:eventId){
+            if (event2Plan.length() > 0)
+                event2Plan.append(",");
+            event2Plan.append(String.format("('%s','%s','%s','%s')"
+                    , idTmp
+                    , (String)obj.get(OrdWarnEventRulesTable.W_INFO.OBJ_ID)
+                    , (String)obj.get(OrdWarnEventRulesTable.W_INFO.OBJ_NAME)
+                    , planId));
+        }
+        sql.append(event2Plan).append(" ) as mapping(to_id, obj_id, obj_name, from_id) ON aa.plan_id = mapping.from_id");
+        return sql.toString();
+    }
 }

+ 55 - 0
src/main/java/com/shkpr/service/warncore/dbdao/providers/OrdWarnPlanCommonDoRecordSqlProvider.java

@@ -0,0 +1,55 @@
+package com.shkpr.service.warncore.dbdao.providers;
+
+import com.shkpr.service.warncore.dbdao.tables.OrdWarnPlanCommonDoRecordTable;
+
+public class OrdWarnPlanCommonDoRecordSqlProvider extends BaseSqlProvider implements OrdWarnPlanCommonDoRecordTable {
+    @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;
+    }
+
+    @Override
+    protected boolean isWTimeForFiled(String filedName) {
+        if (W_INFO.LAST_ANALY_TIME.equalsIgnoreCase(filedName)
+                || W_INFO.LAST_COMPARE_SAMPLE_TIME.equalsIgnoreCase(filedName)
+                || W_INFO.FIRST_MATCH_SAMPLE_TIME.equalsIgnoreCase(filedName)
+                || W_INFO.LAST_EVENT_TIME.equalsIgnoreCase(filedName))
+            return false;
+        return (filedName.endsWith("time"));
+    }
+}

+ 57 - 0
src/main/java/com/shkpr/service/warncore/dbdao/providers/OrdWarnPlanCommonSqlProvider.java

@@ -0,0 +1,57 @@
+package com.shkpr.service.warncore.dbdao.providers;
+
+import com.shkpr.service.warncore.dbdao.tables.OrdWarnPlanCommonTable;
+
+public class OrdWarnPlanCommonSqlProvider extends BaseSqlProvider implements OrdWarnPlanCommonTable {
+    @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;
+    }
+
+    @Override
+    protected boolean isWTimeForFiled(String filedName) {
+        if (W_INFO.CREATE_TIME.equalsIgnoreCase(filedName))
+            return false;
+        return (filedName.endsWith("time"));
+    }
+
+    @Override
+    protected boolean pageQueryByJoin() {
+        return false;
+    }
+}

+ 276 - 0
src/main/java/com/shkpr/service/warncore/dbdao/services/OrdWarnPlanCommonDBServiceImpl.java

@@ -0,0 +1,276 @@
+package com.shkpr.service.warncore.dbdao.services;
+
+import com.global.base.log.LogLevelFlag;
+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.OrdWarnPlanCommonDoRecordMapper;
+import com.shkpr.service.warncore.dbdao.mapper.OrdWarnPlanCommonMapper;
+import com.shkpr.service.warncore.dbdao.services.intef.OrdWarnPlanCommonDBService;
+import com.shkpr.service.warncore.dbdao.tables.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class OrdWarnPlanCommonDBServiceImpl implements OrdWarnPlanCommonDBService, OrdWarnPlanCommonTable {
+    private String mStrClassName = "";
+    private String mBusinessType = "";
+    private String logTag = "";
+    public OrdWarnPlanCommonDBServiceImpl() {
+        mStrClassName = this.getClass().getSimpleName();
+        mBusinessType = LogFlagBusiType.BUSI_DB_ORD_WARN_PLAN_COMMON.toStrValue();
+        logTag = "Ord Warn Plan Common";
+    }
+
+    @SuppressWarnings("all")
+    @Autowired
+    OrdWarnPlanCommonMapper ordWarnPlanCommonMapper;
+
+    @SuppressWarnings("all")
+    @Autowired
+    OrdWarnEventInfoMapper ordWarnEventInfoMapper;
+
+    @SuppressWarnings("all")
+    @Autowired
+    OrdWarnPlanCommonDoRecordMapper ordWarnPlanCommonDoRecordMapper;
+
+    @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);
+    }
+
+    @Override
+    public List<Map<String, Object>> batchQueryIn(List<?> ids, String orderBy, String extend) {
+        return null;
+    }
+
+    @Override
+    public List<Map<String, Object>> batchQueryWiths(Map<String, Object> andWheres, Map<String, Object> orWheres, String orderBy, String extend) {
+        return batchQueryWithsEx("", "", andWheres, orWheres, orderBy, extend);
+    }
+
+    @Override
+    public int totalCounts(Map<String, Object> andWheres, Map<String, Object> orWheres) {
+        return totalCountsEx("", andWheres, orWheres, "");
+    }
+
+    @Override
+    public Map<String, Object> getOne(Object id) {
+        return fastGetFiled("", "", id);
+    }
+
+    @Override
+    public int insertByMap(Map<String, Object> maps) {
+        return 0;
+    }
+
+    @Override
+    public int updateWiths(Map<String, Object> datas, Map<String, Object> andWheres) {
+        return 0;
+    }
+
+    @Override
+    public int delete(Object id) {
+        return 0;
+    }
+
+    @Override
+    public int batchDeleteIn(List<?> ids, String extend) {
+        return 0;
+    }
+
+    @Override
+    public int existsLineEx(String table, Map<String, Object> andWheres, Map<String, Object> orWheres, String extend) {
+        int nCode = 0;
+        String strMsg = "Success";
+        try {
+            return (ordWarnPlanCommonMapper.existLine(table, andWheres, orWheres, extend)?1:0);
+        }catch (Exception e){
+            nCode = LogLevelFlag.LOG_ERROR.ordinal();
+            strMsg = e.getLocalizedMessage();
+            return -1;
+        }finally {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
+                    , mBusinessType
+                    , mStrClassName
+                    , String.format("Exists The %s Line from database, code:{%d} msg:{%s} ...", logTag, nCode, strMsg));
+        }
+    }
+
+    @Override
+    public Map<String, Object> fastGetFiled(String table, String filed, Object id) {
+        int nCode = 0;
+        String strMsg = "Success";
+        try {
+            Map<String, Object> mapRes = ordWarnPlanCommonMapper.getOne(table, filed, id);//查询不到时也会返回null
+            if (mapRes == null)
+                return new HashMap<>();
+            else
+                return mapRes;
+        }catch (Exception e){
+            nCode = LogLevelFlag.LOG_ERROR.ordinal();
+            strMsg = e.getLocalizedMessage();
+            return null;
+        }finally {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
+                    , mBusinessType
+                    , mStrClassName
+                    , String.format("Fast Get %s Filed from database, id:{%s} code:{%d} msg:{%s} ...", logTag, String.valueOf(id), nCode, strMsg));
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> batchQueryWithsEx(String table, String filed, Map<String, Object> andWheres, Map<String, Object> orWheres, String orderBy, String extend) {
+        int nCode = 0;
+        String strMsg = "Success";
+        List<Map<String, Object>> arrRes = null;
+        try {
+            arrRes = ordWarnPlanCommonMapper.batchQueryWiths(table, filed, andWheres, orWheres, orderBy, extend);
+        }catch (Exception e){
+            nCode = LogLevelFlag.LOG_ERROR.ordinal();
+            strMsg = e.getLocalizedMessage();
+        }finally {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
+                    , mBusinessType
+                    , mStrClassName
+                    , String.format("Batch Query %s Lines:{andWhere.size=%d, orWhere.size=%d, orderBy=%s, extend=%s, back.size=%d} from database, code:{%d} msg:{%s} ..."
+                            , logTag
+                            , CommTool.mapSize(andWheres)
+                            , CommTool.mapSize(orWheres)
+                            , orderBy, extend
+                            , CommTool.listSize(arrRes)
+                            , nCode, strMsg));
+        }
+        return arrRes;
+    }
+
+    @Override
+    public List<Map<String, Object>> batchQueryInEx(boolean onlyBase, String table, List<?> ids, String orderBy, String extend) {
+        return null;
+    }
+
+    @Override
+    public int totalCountsEx(String table, Map<String, Object> andWheres, Map<String, Object> orWheres, String extend) {
+        int nCode = 0;
+        String strMsg = "Success";
+        try {
+            return ordWarnPlanCommonMapper.totalCounts(table, andWheres, orWheres, extend);
+        }catch (Exception e){
+            nCode = LogLevelFlag.LOG_ERROR.ordinal();
+            strMsg = e.getLocalizedMessage();
+            return 0;
+        }finally {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
+                    , mBusinessType
+                    , mStrClassName
+                    , String.format("Total %s lines from database, code:{%d} msg:{%s} ...", logTag, nCode, strMsg));
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> listAllWithsEx(String table, String filed, int limit, int offset, Map<String, Object> andWheres, Map<String, Object> orWheres, String orderBy, String extend) {
+        int nCode = 0;
+        String strMsg = "Success";
+        List<Map<String, Object>> arrRes = null;
+        try {
+            arrRes = ordWarnPlanCommonMapper.listAllWiths(table, filed, limit, offset, andWheres, orWheres, orderBy, extend);
+        }catch (Exception e){
+            nCode = LogLevelFlag.LOG_ERROR.ordinal();
+            strMsg = e.getLocalizedMessage();
+        }finally {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
+                    , mBusinessType
+                    , mStrClassName
+                    , String.format("List All %s lines(limit=%d, offset=%d, orderBy=%s, back.size=%d) from database, code:{%d} msg:{%s} ..."
+                            , logTag ,limit ,offset
+                            , orderBy
+                            , CommTool.listSize(arrRes)
+                            , nCode, strMsg));
+        }
+        return arrRes;
+    }
+
+    @Transactional(transactionManager = "mainDbTransactionManager")
+    @Override
+    public int updatePlanForTrigger(String planId, String ownerId, String objId, String objName, Map<String, Object> doRecord, List<Map<String, Object>> newEvents, List<Map<String, Object>> oldEvents, List<Map<String, Object>> triggerSampleHis, boolean clearPlanHisTriggerSam, String eventIdAcceptPlanHisTriggerSam) {
+        int nCode = 0;
+        String strMsg = "Success";
+        try {
+            int nRes = 1;
+            do {
+                List<String> newEventId = null;
+                if (CommTool.listSize(newEvents) > 0){
+                    if (ordWarnEventInfoMapper.batchInserts(newEvents) != CommTool.listSize(newEvents)){
+                        nRes = -1;
+                        break;
+                    }
+                    newEventId = new ArrayList<>();
+                    for (Map<String, Object> eventObj:newEvents)
+                        newEventId.add((String)eventObj.get(OrdWarnEventInfoTable.W_INFO.UNIQUE_ID));
+                }
+                if (CommTool.listSize(oldEvents) > 0){
+                    List<Map<String, Object>> wheres = new ArrayList<>();
+                    for (Map<String, Object> eventItem:oldEvents)
+                        wheres.add(new HashMap<String, Object>(){{put(OrdWarnEventInfoTable.W_INFO.UNIQUE_ID, eventItem.remove(OrdWarnEventInfoTable.W_INFO.UNIQUE_ID));}});
+                    ordWarnEventInfoMapper.batchUpdateWiths(wheres, oldEvents);
+                }
+                nRes = ordWarnPlanCommonDoRecordMapper.insertOrUpdateEx(doRecord, OrdWarnPlanCommonDoRecordTable.W_INFO.UNIQUE_FIELDS, OrdWarnPlanCommonDoRecordTable.W_INFO.UPDATE_FIELDS);
+                /*if (!StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam)){
+                    ordWarnTriggerSampleHisMapper.updateWiths(new HashMap<String, Object>(){{
+                        put(OrdWarnTriggerSampleHisTable.W_INFO.OWNER_ID, eventIdAcceptPlanHisTriggerSam);
+                    }}, new HashMap<String, Object>(){{
+                        put(OrdWarnTriggerSampleHisTable.W_INFO.OWNER_ID, planId);
+                    }}, null, "");
+                }else if (clearPlanHisTriggerSam){
+                    ordWarnTriggerSampleHisMapper.deleteWithsEx(new HashMap<String, Object>(){{
+                        put(OrdWarnTriggerSampleHisTable.W_INFO.OWNER_ID, planId);
+                    }}, null, "");
+                }
+                if (CommTool.listSize(triggerSampleHis) > 0)
+                    ordWarnTriggerSampleHisMapper.batchInserts(triggerSampleHis);*/
+                if (CommTool.listSize(newEventId) > 0){
+                    ordWarnEventRulesMapper.copyRuleFromCommonPlan(planId
+                            , new HashMap<String, String>(){{
+                                put(OrdWarnEventRulesTable.W_INFO.OBJ_ID, objId);
+                                put(OrdWarnEventRulesTable.W_INFO.OBJ_NAME, objName);}}
+                    , newEventId);
+                }
+
+            }while (false);
+
+            if (nRes <= 0){
+                strMsg = "Failed";
+                nCode = LogLevelFlag.LOG_WARN.ordinal();
+                try {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                }catch (Exception e1){}
+            }
+            return nRes;
+        }catch (Exception e){
+            try {
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            }catch (Exception e1){}
+            nCode = LogLevelFlag.LOG_ERROR.ordinal();
+            strMsg = e.getLocalizedMessage();
+            return -1;
+        }finally {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
+                    , mBusinessType
+                    , mStrClassName
+                    , String.format("Update common plan for trigger to database by Transactional, code:{%d} msg:{%s} ...", nCode, strMsg));
+        }
+    }
+}

+ 41 - 5
src/main/java/com/shkpr/service/warncore/dbdao/services/OrdWarnPlanInfoDBServiceImpl.java

@@ -62,7 +62,7 @@ public class OrdWarnPlanInfoDBServiceImpl implements OrdWarnPlanInfoDBService, O
 
     @Override
     public List<Map<String, Object>> batchQueryWiths(Map<String, Object> andWheres, Map<String, Object> orWheres, String orderBy, String extend) {
-        return null;
+        return batchQueryWithsEx("", "", andWheres, orWheres, orderBy, extend);
     }
 
     @Override
@@ -137,7 +137,27 @@ public class OrdWarnPlanInfoDBServiceImpl implements OrdWarnPlanInfoDBService, O
 
     @Override
     public List<Map<String, Object>> batchQueryWithsEx(String table, String filed, Map<String, Object> andWheres, Map<String, Object> orWheres, String orderBy, String extend) {
-        return null;
+        int nCode = 0;
+        String strMsg = "Success";
+        List<Map<String, Object>> arrRes = null;
+        try {
+            arrRes = ordWarnPlanInfoMapper.batchQueryWiths(table, filed, andWheres, orWheres, orderBy, extend);
+        }catch (Exception e){
+            nCode = LogLevelFlag.LOG_ERROR.ordinal();
+            strMsg = e.getLocalizedMessage();
+        }finally {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
+                    , mBusinessType
+                    , mStrClassName
+                    , String.format("Batch Query %s Lines:{andWhere.size=%d, orWhere.size=%d, orderBy=%s, extend=%s, back.size=%d} from database, code:{%d} msg:{%s} ..."
+                            , logTag
+                            , CommTool.mapSize(andWheres)
+                            , CommTool.mapSize(orWheres)
+                            , orderBy, extend
+                            , CommTool.listSize(arrRes)
+                            , nCode, strMsg));
+        }
+        return arrRes;
     }
 
     @Override
@@ -152,7 +172,20 @@ public class OrdWarnPlanInfoDBServiceImpl implements OrdWarnPlanInfoDBService, O
 
     @Override
     public int totalCountsEx(String table, Map<String, Object> andWheres, Map<String, Object> orWheres, String extend) {
-        return 0;
+        int nCode = 0;
+        String strMsg = "Success";
+        try {
+            return ordWarnPlanInfoMapper.totalCounts(table, andWheres, orWheres, extend);
+        }catch (Exception e){
+            nCode = LogLevelFlag.LOG_ERROR.ordinal();
+            strMsg = e.getLocalizedMessage();
+            return 0;
+        }finally {
+            LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.valueFromInt(nCode)
+                    , mBusinessType
+                    , mStrClassName
+                    , String.format("Total %s lines from database, code:{%d} msg:{%s} ...", logTag, nCode, strMsg));
+        }
     }
 
     @Override
@@ -217,7 +250,6 @@ 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;
@@ -225,11 +257,16 @@ public class OrdWarnPlanInfoDBServiceImpl implements OrdWarnPlanInfoDBService, O
         try {
             int nRes = 1;
             do {
+                final String planId = (String)planWhere.get(W_INFO.UNIQUE_ID);
+                Map<String, String> newEventId2PlanId = null;
                 if (CommTool.listSize(newEvents) > 0){
                     if (ordWarnEventInfoMapper.batchInserts(newEvents) != CommTool.listSize(newEvents)){
                         nRes = -1;
                         break;
                     }
+                    newEventId2PlanId = new HashMap<>();
+                    for (Map<String, Object> eventObj:newEvents)
+                        newEventId2PlanId.put((String)eventObj.get(OrdWarnEventInfoTable.W_INFO.UNIQUE_ID), planId);
                 }
                 if (CommTool.listSize(oldEvents) > 0){
                     List<Map<String, Object>> wheres = new ArrayList<>();
@@ -238,7 +275,6 @@ public class OrdWarnPlanInfoDBServiceImpl implements OrdWarnPlanInfoDBService, O
                     ordWarnEventInfoMapper.batchUpdateWiths(wheres, oldEvents);
                 }
                 nRes = ordWarnPlanInfoMapper.updateWiths(updatePlan, planWhere, null, "");
-                final String planId = (String)planWhere.get(W_INFO.UNIQUE_ID);
                 if (!StringUtils.isEmpty(eventIdAcceptPlanHisTriggerSam)){
                     ordWarnTriggerSampleHisMapper.updateWiths(new HashMap<String, Object>(){{
                         put(OrdWarnTriggerSampleHisTable.W_INFO.OWNER_ID, eventIdAcceptPlanHisTriggerSam);

+ 42 - 0
src/main/java/com/shkpr/service/warncore/dbdao/services/intef/OrdWarnPlanCommonDBService.java

@@ -0,0 +1,42 @@
+package com.shkpr.service.warncore.dbdao.services.intef;
+
+import java.util.List;
+import java.util.Map;
+
+public interface OrdWarnPlanCommonDBService extends BaseDBService {
+    int existsLineEx(String table
+            , Map<String, Object> andWheres
+            , Map<String, Object> orWheres
+            , String extend);
+
+    Map<String, Object> fastGetFiled(String table, String filed, Object id);
+    List<Map<String, Object>> batchQueryWithsEx(String table, String filed
+            , Map<String, Object> andWheres
+            , Map<String, Object> orWheres
+            , String orderBy
+            , String extend);
+    List<Map<String, Object>> batchQueryInEx(boolean onlyBase, String table, List<? extends Object> ids
+            , String orderBy
+            , String extend);
+    int totalCountsEx(String table, Map<String, Object> andWheres, Map<String, Object> orWheres, String extend);
+    List<Map<String, Object>> listAllWithsEx(String table, String filed
+            , int limit
+            , int offset
+            , Map<String, Object> andWheres
+            , Map<String, Object> orWheres
+            , String orderBy
+            , String extend);
+    int updatePlanForTrigger(String planId
+            , String ownerId
+            , String objId
+            , String objName
+            , Map<String, Object> doRecord
+            , List<Map<String, Object>> newEvents
+            , List<Map<String, Object>> oldEvents
+            , List<Map<String, Object>> triggerSampleHis
+            , boolean clearPlanHisTriggerSam
+            , String eventIdAcceptPlanHisTriggerSam);
+}
+
+
+

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

@@ -38,7 +38,6 @@ 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);
 }

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

@@ -18,5 +18,8 @@ public interface OrdWarnEventRulesTable {
         String UNIQUE_ID = "id";
         String EVENT_ID = "event_id";
         String COPY_FIELD = "obj_id,obj_name,starts,ends,restrict,conditions,obj_src";
+        String COMM_COPY_FIELD = "starts,ends,restrict,conditions,obj_src";
+        String OBJ_ID = "obj_id";
+        String OBJ_NAME = "obj_name";
     }
 }

+ 58 - 0
src/main/java/com/shkpr/service/warncore/dbdao/tables/OrdWarnPlanCommonDoRecordTable.java

@@ -0,0 +1,58 @@
+package com.shkpr.service.warncore.dbdao.tables;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public interface OrdWarnPlanCommonDoRecordTable {
+    interface R_INFO{
+        String TABLE = "k4_ord_warn_common_plan_do_record";
+        String PRIMARY_KEY = "id";
+        String UNIQUE_ID = "id";
+        String ALL_FILED = "*";
+        String DEFAULT_ORDER = "update_time DESC,id DESC";
+        String DEFAULT_EXTEND = "";
+        String ID = "id";
+        String PLAN_ID = "plan_id";
+        String OWNER_ID = "owner_id";
+        String OBJ_ID = "obj_id";
+    }
+
+    interface W_INFO{
+        String ID = "id";
+        String TABLE = "k4_ord_warn_common_plan_do_record";
+        String PRIMARY_KEY = "id";
+        String UNIQUE_ID = "id";
+        String LAST_ANALY_TIME = "last_analy_time";
+        String LAST_COMPARE_SAMPLE_TIME = "last_compare_sample_time";
+        String FIRST_MATCH_SAMPLE_TIME = "first_match_sample_time";
+        String LAST_EVENT_TIME = "last_event_time";
+        String UPDATE_TIME = "update_time";
+        String VERSION = "version";
+        String CYCLE_TRIGGER_TIMES = "cycle_trigger_times";
+        String COMPARE_TIMES = "compare_times";
+        String LAST_ANALY_EXPLAIN = "last_analy_explain";
+        String LAST_COMPARE_SAMPLE_RESULT = "last_compare_sample_result";
+        String LAST_COMPARE_SAMPLE_EXPLAIN = "last_compare_sample_explain";
+        String LAST_EVENT_ID = "last_event_id";
+
+        String PLAN_ID = "plan_id";
+        String OWNER_ID = "owner_id";
+        String OBJ_ID = "obj_id";
+
+        List<Object> UNIQUE_FIELDS = new ArrayList<Object>(){{add(PLAN_ID);add(OWNER_ID);add(OBJ_ID);}};
+        List<Object> UPDATE_FIELDS = new ArrayList<Object>(){{
+            add(UPDATE_TIME);
+            add(VERSION);
+            add(LAST_ANALY_TIME);
+            add(LAST_COMPARE_SAMPLE_TIME);
+            add(FIRST_MATCH_SAMPLE_TIME);
+            add(LAST_EVENT_TIME);
+            add(CYCLE_TRIGGER_TIMES);
+            add(COMPARE_TIMES);
+            add(LAST_ANALY_EXPLAIN);
+            add(LAST_COMPARE_SAMPLE_RESULT);
+            add(LAST_COMPARE_SAMPLE_EXPLAIN);
+            add(LAST_EVENT_ID);
+        }};
+    }
+}

+ 38 - 0
src/main/java/com/shkpr/service/warncore/dbdao/tables/OrdWarnPlanCommonTable.java

@@ -0,0 +1,38 @@
+package com.shkpr.service.warncore.dbdao.tables;
+
+public interface OrdWarnPlanCommonTable {
+    interface R_INFO{
+        String TABLE = "v_k4_ord_warn_common_plan";
+        String PRIMARY_KEY = "uid";
+        String UNIQUE_ID = "uid";
+        String ALL_FILED = "*";
+        String DEFAULT_ORDER = "create_time DESC,id DESC";
+        String DEFAULT_EXTEND = "";
+        String ID = "id";
+        String VERSION = "version";
+        String STATUS = "status";
+        String FREQUENCY = "frequency";
+        String FREQUENCY_UNIT = "frequency_unit";
+        String DISUSED = "disused";
+        String TOTAL_ANALYSIS_ORDER = "create_time ASC,frequency ASC,uid ASC,owner_id ASC,obj_id ASC";
+        String OWNER_STATUS = "owner_status";
+        String DOING_TABLE = "v_k4_ord_warn_common_plan_doing";
+        String PLAN_ID = "uid";
+        String OWNER_ID = "owner_id";
+        String OBJ_ID = "obj_id";
+    }
+
+    interface W_INFO{
+        String ID = "id";
+        String TABLE = "k4_ord_warn_common_plan";
+        String PRIMARY_KEY = "uid";
+        String UNIQUE_ID = "uid";
+        String CREATE_TIME = "create_time";
+        String STATUS = "status";
+        String FREQUENCY = "frequency";
+        String FREQUENCY_UNIT = "frequency_unit";
+        String DISUSED = "disused";
+        String UPDATE_TIME = "update_time";
+        String VERSION = "version";
+    }
+}

+ 14 - 0
src/main/java/com/shkpr/service/warncore/dto/OrdWarnPlanCheckBeanEx.java

@@ -0,0 +1,14 @@
+package com.shkpr.service.warncore.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class OrdWarnPlanCheckBeanEx extends OrdWarnPlanCheckBean{
+    private String objId = "";
+
+    public OrdWarnPlanCheckBeanEx() {
+        super();
+    }
+}

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

@@ -1,5 +1,6 @@
 package com.shkpr.service.warncore.dto;
 
+import com.shkpr.service.warncore.constants.PlanKind;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -46,7 +47,9 @@ public class OrdWarnPlanDetail {
     private String followerId = "";//通知单关注人
     private String zoneMgrId = "";//相关分区责任人
     private String creatorId = "";//预案创建人
+    protected String kind = "";//预案类别:private--专用;public--通用
 
     public OrdWarnPlanDetail() {
+        kind = PlanKind.PRIVATE;
     }
 }

+ 20 - 0
src/main/java/com/shkpr/service/warncore/dto/OrdWarnPlanDetailEx.java

@@ -0,0 +1,20 @@
+package com.shkpr.service.warncore.dto;
+
+import com.shkpr.service.warncore.constants.PlanKind;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class OrdWarnPlanDetailEx extends OrdWarnPlanDetail{
+    private String objId = "";
+    private String objName = "";
+    private String objGis = "";
+    private int devCycle = 0;//设备采集周期(单位:秒)
+    private String devId = "";//设备相关ID
+
+    public OrdWarnPlanDetailEx() {
+        super();
+        kind = PlanKind.PUBLIC;
+    }
+}

+ 21 - 0
src/main/java/com/shkpr/service/warncore/dto/OrdWarnPlanWillDoEx.java

@@ -0,0 +1,21 @@
+package com.shkpr.service.warncore.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class OrdWarnPlanWillDoEx extends OrdWarnPlanWillDo{
+    private String ownerId = "";
+    private String objId = "";
+
+    public OrdWarnPlanWillDoEx() {
+        super();
+    }
+
+    public OrdWarnPlanWillDoEx(String planId, String objSrc, String ownerId, String objId) {
+        super(planId, objSrc);
+        this.ownerId = ownerId;
+        this.objId = objId;
+    }
+}

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

@@ -2,6 +2,7 @@ package com.shkpr.service.warncore.globalmgr;
 
 import com.global.base.log.LogLevelFlag;
 import com.global.base.log.LogPrintMgr;
+import com.shkpr.service.warncore.bizhandler.TimerCheckWarnPlanCommMgr;
 import com.shkpr.service.warncore.bizhandler.TimerCheckWarnPlanMgr;
 import com.shkpr.service.warncore.commtools.TimeTool;
 import com.shkpr.service.warncore.components.LocalDynamicDataSource;
@@ -70,6 +71,7 @@ public class ScheduleTaskMgr {
             @Override
             public void function() {
                 TimerCheckWarnPlanMgr.checkWarnPlanByFrequency(curClock, curMinute==0?60:curMinute, FrequencyUnit.MIN);
+                TimerCheckWarnPlanCommMgr.checkWarnPlanByFrequency(curClock, curMinute==0?60:curMinute, FrequencyUnit.MIN);
             }
         });
     }
@@ -83,6 +85,7 @@ public class ScheduleTaskMgr {
             @Override
             public void function() {
                 TimerCheckWarnPlanMgr.checkWarnPlanByFrequency(curClock, curMinute==0?60:curMinute, FrequencyUnit.HOUR);
+                TimerCheckWarnPlanCommMgr.checkWarnPlanByFrequency(curClock, curMinute==0?60:curMinute, FrequencyUnit.HOUR);
             }
         });
     }
@@ -96,6 +99,7 @@ public class ScheduleTaskMgr {
             @Override
             public void function() {
                 TimerCheckWarnPlanMgr.checkWarnPlanByFrequency(curClock, curMinute==0?60:curMinute, FrequencyUnit.DAY);
+                TimerCheckWarnPlanCommMgr.checkWarnPlanByFrequency(curClock, curMinute==0?60:curMinute, FrequencyUnit.DAY);
             }
         });
     }
@@ -109,6 +113,7 @@ public class ScheduleTaskMgr {
             @Override
             public void function() {
                 TimerCheckWarnPlanMgr.checkWarnPlanByFrequency(curClock, curMinute==0?60:curMinute, FrequencyUnit.MONTH);
+                TimerCheckWarnPlanCommMgr.checkWarnPlanByFrequency(curClock, curMinute==0?60:curMinute, FrequencyUnit.MONTH);
             }
         });
     }

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

@@ -9,7 +9,7 @@ import java.util.concurrent.TimeoutException;
 
 public class ThreadTaskMgr {
     public static void initThreadResource(){
-        ThreadPoolProxy.getInstance().initFixedPoolRes("COMM",200, "COMM");
+        ThreadPoolProxy.getInstance().initFixedPoolRes("COMM",400, "COMM");
     }
 
     public static void runTask(final Runnable command){

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

@@ -5,6 +5,7 @@ import com.global.base.tools.RandomUtil;
 import com.shkpr.service.warncore.bizhandler.CommToolHandler;
 import com.shkpr.service.warncore.commtools.CommTool;
 import com.shkpr.service.warncore.constants.OrdWarnObjSrc;
+import com.shkpr.service.warncore.constants.PlanKind;
 import com.shkpr.service.warncore.dto.OrdWarnEventRule;
 import com.shkpr.service.warncore.dto.OrdWarnPlanDetail;
 import com.shkpr.service.warncore.dto.OrdWarnPlanRules;
@@ -46,7 +47,7 @@ public class JPOrdWarnEventInfo {
     private long updateTime = 0L;
     private int sendway = 3;
     private String planBatch = "";
-    private String planSrc = "private";//private--专用;public--通用
+    private String planSrc = PlanKind.PRIVATE;
     private String remark = "";
     //private String objId = "";
 
@@ -80,6 +81,7 @@ public class JPOrdWarnEventInfo {
         this.toTime = thisTempStep.getLastCompareSampleTime();
         //this.rules = formatRule(rules);
 
+        this.planSrc = planDetail.getKind();
         this.limitTime = 0L;
         this.createTime = eventTime;
         this.updateTime = eventTime;

+ 31 - 4
src/main/java/com/shkpr/service/warncore/queues/AsyncCommTaskQueueHandler.java

@@ -1,9 +1,13 @@
 package com.shkpr.service.warncore.queues;
 
 import com.global.base.taskqueue.*;
+import com.shkpr.service.warncore.bizhandler.TimerCheckWarnPlanCommMgr;
 import com.shkpr.service.warncore.bizhandler.TimerCheckWarnPlanMgr;
 import com.shkpr.service.warncore.constants.TaskQueueDataTypeEx;
 import com.shkpr.service.warncore.dto.OrdWarnPlanWillDo;
+import com.shkpr.service.warncore.dto.OrdWarnPlanWillDoEx;
+import com.shkpr.service.warncore.dto.TraceRunnable;
+import com.shkpr.service.warncore.globalmgr.ThreadTaskMgr;
 import com.shkpr.service.warncore.globalmgr.TraceLogMgr;
 
 import java.util.*;
@@ -51,6 +55,8 @@ public class AsyncCommTaskQueueHandler extends BaseTaskQueueHandler {
                     if (taskData.getType() == TaskQueueDataType.QUIT_CMD)
                         break;
 
+                    final String traceID = taskData.getTraceId();
+                    TraceLogMgr.setTraceId(traceID);
                     //TraceLogMgr.setTraceId(taskData.getTraceId());
                     switch (taskData.getType()){
                         case TaskQueueDataTypeEx.ASYNC_CALC_DEV_DATA_TASK:{
@@ -63,20 +69,41 @@ public class AsyncCommTaskQueueHandler extends BaseTaskQueueHandler {
                         break;
                         case TaskQueueDataTypeEx.ASYNC_ANALY_WARN_PLAN:{
                             final OrdWarnPlanWillDo mapParam = (OrdWarnPlanWillDo)taskData.getData();
-                            if (mapParam != null)
-                                TimerCheckWarnPlanMgr.handlerPlanWillDo(mapParam);
+                            if (mapParam != null){
+                                ThreadTaskMgr.runTask(new TraceRunnable(traceID+".ASYNC.ALALY.WARN.PLAN") {
+                                    @Override
+                                    public void function() {
+                                        TimerCheckWarnPlanMgr.handlerPlanWillDo(mapParam);
+                                    }
+                                });
+                            }
+                            bExeOk = true;
+                            taskData = null;
+                        }
+                        break;
+                        case TaskQueueDataTypeEx.ASYNC_ANALY_WARN_PLAN_COMM:{
+                            final OrdWarnPlanWillDoEx mapParam = (OrdWarnPlanWillDoEx)taskData.getData();
+                            if (mapParam != null){
+                                ThreadTaskMgr.runTask(new TraceRunnable(traceID+".ASYNC.ALALY.WARN.PLAN.COMM") {
+                                    @Override
+                                    public void function() {
+                                        TimerCheckWarnPlanCommMgr.handlerPlanWillDo(mapParam);
+                                    }
+                                });
+                            }
                             bExeOk = true;
                             taskData = null;
                         }
                         break;
                         default:{
-                            TraceLogMgr.setTraceId(taskData.getTraceId());
-                            TraceLogMgr.removeTraceId();
+                            //TraceLogMgr.setTraceId(taskData.getTraceId());
+                            //TraceLogMgr.removeTraceId();
                             bExeOk = true;
                             taskData = null;
                         }
                         break;
                     }
+                    TraceLogMgr.removeTraceId();
                 }
                 if (iSink != null && refreshNeedExpandFlag()){
                     iSink.notifyTaskEvent(TaskEventNotifyType.EXPAND_CMD, Integer.valueOf(getTaskCount()));

+ 5 - 2
src/main/java/com/shkpr/service/warncore/queues/DelayCommTaskQueueHandler.java

@@ -56,6 +56,8 @@ public class DelayCommTaskQueueHandler extends BaseDelayTaskQueueHandler {
                         break;
                     }
 
+                    final String traceID = taskData.getTraceId();
+                    TraceLogMgr.setTraceId(traceID);
                     switch (taskData.getType()){
                         case TaskQueueDataTypeEx.DELAY_LAST_DEV_DATA_TASK:{
                             final Map<String, Object> mapParam = (HashMap)taskData.getData();
@@ -74,13 +76,14 @@ public class DelayCommTaskQueueHandler extends BaseDelayTaskQueueHandler {
                         }
                         break;
                         default:{
-                            TraceLogMgr.setTraceId(taskData.getTraceId());
-                            TraceLogMgr.removeTraceId();
+                            //TraceLogMgr.setTraceId(taskData.getTraceId());
+                            //TraceLogMgr.removeTraceId();
                             bExeOk = true;
                             taskData = null;
                         }
                         break;
                     }
+                    TraceLogMgr.removeTraceId();
                 }
                 if (iSink != null && refreshNeedExpandFlag()){
                     iSink.notifyTaskEvent(TaskEventNotifyType.EXPAND_CMD, Integer.valueOf(getTaskCount()));