Bläddra i källkod

新增lmnf的预警支持

andyliu 3 veckor sedan
förälder
incheckning
b34a6fd58f

+ 36 - 14
src/main/java/com/shkpr/service/warncore/bizhandler/ZoneDataWarnHandler.java

@@ -800,31 +800,39 @@ public class ZoneDataWarnHandler {
 
     public static TRecordRes<DateKeyValue> getSampleDataFromDB(String fieldUnit, String frequencyUnit, String itemKey, String objId, long beginTm, long endTm, String metricId, String doDb, String doField, String doTime){
         TRecordRes<DateKeyValue> oRes = new TRecordRes<>(ResponseCode.RESULT_BAD.toInt());
-        String[] storeDbAndTable = doDb.split("@");
-        String[] storeFieldAndBackField = doField.split("@");
+        String desTable = doDb.split("@")[1];
+        String backField = doField.split("@")[1];
         String doTimeFunction = doTime.replaceAll("\\(.*\\)", "");
         String doTimeField = doTime.replaceAll("^.*\\(|\\)", "");
-
-        String orderBy = String.format(" %s asc", doTimeField);
+        StringBuilder filterExtend = new StringBuilder("");
         String queryField = String.format("zone_id,'%s' as key,%s as date"
-                , storeFieldAndBackField[1]
+                , backField
                 , doTimeField);
         if ("%".equals(fieldUnit)){
-            queryField += String.format(",COALESCE(%s, 0)*100 as value", storeFieldAndBackField[0]);
+            queryField += String.format(",COALESCE(%s, 0)*100 as value", backField);
         }else
-            queryField += String.format(",COALESCE(%s, 0) as value", storeFieldAndBackField[0]);
+            queryField += String.format(",COALESCE(%s, 0) as value", backField);
 
-        StringBuilder filterExtend = new StringBuilder("");
         switch (itemKey){
             case WarnItemType.ZONE_HWO:{//小时水量,存储的是累计流量:(n+1)点-(n)点=(n)点水量,故分区水量要将endTm += TimeTool.MS_ONE_HOUR;然后再查询
                 endTm = TimeTool.getNextRoundHourUTCTm(endTm);
                 filterExtend.append(String.format(" AND EXTRACT(MINUTE FROM %s) = 0 AND EXTRACT(SECOND FROM %s) = 0 ", doTimeField, doTimeField));
             }
             break;
+            case WarnItemType.LMNF:{
+                doTimeField = String.format("mnf.%s", doTimeField);
+                queryField = String.format("mnf.zone_id,'%s' as key,(mnf.%s - COALESCE(lmnf.%s, 0)) AS value,%s as date"
+                        , backField
+                        , backField
+                        , backField
+                        , doTimeField);
+            }
+            break;
             default:
                 break;
         }
 
+        String orderBy = String.format(" %s asc", doTimeField);
         switch (doTimeFunction){
             case "timestamp":{
                 filterExtend.append(String.format(" AND %s >= to_timestamp(%d) AND %s <= to_timestamp(%d)"
@@ -846,12 +854,26 @@ public class ZoneDataWarnHandler {
             break;
         }
 
-        List<Map<String, Object>> arrDbs = getMixDataDBService().batchQueryL2L3Data(storeDbAndTable[1]
+        List<Map<String, Object>> arrDbs = null;
+        switch (itemKey){
+            case WarnItemType.LMNF:{
+                arrDbs = getMixDataDBService().batchQueryLMNFData(desTable
                                 , queryField
-                                , new HashMap<String, Object>(){{
-                                    put("zone_id", objId);
-                                    put("metric_id", metricId);}}
-                                , null, orderBy, filterExtend.toString());
+                                , objId
+                                , orderBy
+                                , filterExtend.toString());
+            }
+            break;
+            default:{
+                arrDbs = getMixDataDBService().batchQueryL2L3Data(desTable
+                        , queryField
+                        , new HashMap<String, Object>(){{
+                            put("zone_id", objId);
+                            put("metric_id", metricId);}}
+                        , null, orderBy, filterExtend.toString());
+            }
+            break;
+        }
         if (arrDbs == null) {
             oRes.setCode(ResponseCode.BUSINESS_DB_ERROR.toInt());
             return oRes;
@@ -873,7 +895,7 @@ public class ZoneDataWarnHandler {
                     double thisValue = CastUtil.castDouble(arrDbs.get(i).get("value"), 0.0);
                     double nextValue = CastUtil.castDouble(arrDbs.get(i+1).get("value"), 0.0);
                     if (thisTm == (nextTm-TimeTool.MS_ONE_HOUR)){
-                        arrRecordRes.add(new DateKeyValue(storeFieldAndBackField[1], CommToolHandler.toShortStrData(nextValue-thisValue)
+                        arrRecordRes.add(new DateKeyValue(backField, CommToolHandler.toShortStrData(nextValue-thisValue)
                                 , TimeTool.convertUTC2DateStr(thisTm, TimeTool.TIMESTAMP_FORMAT)));
                     }
                 }

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

@@ -2,4 +2,5 @@ package com.shkpr.service.warncore.constants;
 
 public interface WarnItemType {
     String ZONE_HWO = "analy@zwo@zhwo";//分区小时水量
+    String LMNF = "analy@mnf@lmnf";
 }

+ 14 - 1
src/main/java/com/shkpr/service/warncore/dbdao/mapper/MixDataBizMapper.java

@@ -20,7 +20,8 @@ public interface MixDataBizMapper {
 
     @Results({
             @Result(property = "date", column = "date", javaType = String.class ,jdbcType = JdbcType.DATE),
-            @Result(property = "stat_date", column = "stat_date", javaType = String.class ,jdbcType = JdbcType.DATE)
+            @Result(property = "stat_date", column = "stat_date", javaType = String.class ,jdbcType = JdbcType.DATE),
+            @Result(property = "stat_month", column = "stat_month", javaType = String.class ,jdbcType = JdbcType.DATE)
     })
     @SelectProvider(type = MixDataBizSqlProvider.class, method = "batchQueryWiths")
     List<Map<String, Object>> batchQueryL2L3Data(@Param("table") String table, @Param("filed") String filed
@@ -28,4 +29,16 @@ public interface MixDataBizMapper {
             , @Param("orWheres") Map<String, Object> orWheres
             , @Param("order") String order
             , @Param("extend") String extend);
+
+    @Results({
+            @Result(property = "date", column = "date", javaType = String.class ,jdbcType = JdbcType.DATE),
+            @Result(property = "stat_date", column = "stat_date", javaType = String.class ,jdbcType = JdbcType.DATE),
+            @Result(property = "stat_month", column = "stat_month", javaType = String.class ,jdbcType = JdbcType.DATE)
+    })
+    @SelectProvider(type = MixDataBizSqlProvider.class, method = "batchQueryLMNFData")
+    List<Map<String, Object>> batchQueryLMNFData(@Param("table") String table
+            , @Param("field") String field
+            , @Param("zoneId") String zoneId
+            , @Param("order") String order
+            , @Param("extend") String extend);
 }

+ 26 - 0
src/main/java/com/shkpr/service/warncore/dbdao/providers/MixDataBizSqlProvider.java

@@ -1,5 +1,10 @@
 package com.shkpr.service.warncore.dbdao.providers;
 
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+import java.util.Map;
+
 public class MixDataBizSqlProvider extends BaseSqlProvider{
     @Override
     public String getRTableName() {
@@ -47,4 +52,25 @@ public class MixDataBizSqlProvider extends BaseSqlProvider{
             return true;
         return super.isWTimeForFiled(filedName);
     }
+
+    public String batchQueryLMNFData(Map<String, Object> mapParams){
+        String table = (String)mapParams.get("table");
+        String field = (String)mapParams.get("field");
+        String zoneId = (String)mapParams.get("zoneId");
+        String orderBy = safePickParam(mapParams, "order", "");
+        String extend = safePickParam(mapParams, "extend", "");
+
+        StringBuilder sql = new StringBuilder("");
+        sql.append("select "+field+" from "+table+" mnf ");
+        sql.append(" join "+table+" lmnf ON ");
+        sql.append(" mnf.metric_id = 'mnf' AND lmnf.metric_id = 'lmnf' ");
+        sql.append(" AND mnf.zone_id = lmnf.zone_id AND mnf.stat_date = lmnf.stat_date ");
+        sql.append(" AND mnf.zone_id = '"+zoneId+"' ");
+        if (!StringUtils.isEmpty(extend))
+            sql.append(" " + extend);
+        if (!StringUtils.isEmpty(orderBy))
+            sql.append(" ORDER BY " + orderBy);
+        System.out.println("========"+sql.toString());
+        return sql.toString();
+    }
 }

+ 23 - 0
src/main/java/com/shkpr/service/warncore/dbdao/services/MixDataBizDBServiceImpl.java

@@ -119,4 +119,27 @@ public class MixDataBizDBServiceImpl implements MixDataBizDBService {
         }
         return arrRes;
     }
+
+    @Override
+    public List<Map<String, Object>> batchQueryLMNFData(String table, String field, String zoneId, String orderBy, String extend) {
+        int nCode = 0;
+        String strMsg = "Success";
+        List<Map<String, Object>> arrRes = null;
+        try {
+            arrRes = mixDataBizMapper.batchQueryLMNFData(table, field, zoneId, 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 LMNF Data Lines:{zoneId=%s, orderBy=%s, extend=%s, back.size=%d} from database, code:{%d} msg:{%s} ..."
+                            , zoneId
+                            , orderBy, extend
+                            , CommTool.listSize(arrRes)
+                            , nCode, strMsg));
+        }
+        return arrRes;
+    }
 }

+ 5 - 0
src/main/java/com/shkpr/service/warncore/dbdao/services/intef/MixDataBizDBService.java

@@ -15,4 +15,9 @@ public interface MixDataBizDBService extends BaseDBService{
             , Map<String, Object> orWheres
             , String orderBy
             , String extend);
+
+    List<Map<String, Object>> batchQueryLMNFData(String table, String field
+            , String zoneId
+            , String orderBy
+            , String extend);
 }

+ 1 - 1
src/main/resources/application.properties

@@ -127,7 +127,7 @@ cron.check.minute.warn=20 0/1 * * * ?
 #\u6BCF\u4E2A\u6574\u70B9\u7684\u7B2C40\u5206\u949F\u6267\u884C\u4E00\u6B21
 cron.check.hour.warn=0 40 * * * ?
 #\u6BCF\u592920:00:00\u6267\u884C\u4E00\u6B21
-cron.check.day.warn=0 00 20 * * ?
+cron.check.day.warn=0 0 20 * * ?
 #\u6BCF\u670827\u65E5\u768401:00:00\u6267\u884C\u4E00\u6B21
 cron.check.month.warn=0 0 1 27 * ?