Bladeren bron

支持上期比较中的同期取值匹配逻辑

andyliu 2 dagen geleden
bovenliggende
commit
a12c3613dd

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

@@ -218,7 +218,7 @@ public class CommToolHandler {
 
     public static JPMixComplexCondition parseConditions2TimeRange(String condition, long sampleTime, long limitTime){
         String mode = "", datePeriod = "", dateUnit = "", method = "", percent = "";
-        String pattern = "^(this|near|last|prev)\\((\\d*)?(h|d|w|n|y)\\)@(avg|min|sum|max|dif|val)\\((\\d*\\.?\\d+)?\\)$";
+        String pattern = "^(this|near|last|prev)\\((\\d*)?(h|d|w|n|y)\\)@(avg|min|sum|max|dif|val|qval)\\((\\d*\\.?\\d+)?\\)$";
         Pattern r = Pattern.compile(pattern);
         Matcher m = r.matcher(condition);
         if (m.find()){
@@ -268,7 +268,7 @@ public class CommToolHandler {
             switch (dateUnit){
                 case "h":
                 case "H":{
-                    if ("val".equals(method) || "dif".equals(method)){
+                    if ("qval".equals(method) || "val".equals(method) || "dif".equals(method)){
                         beginTime = endTime = sampleTime-TimeTool.MS_ONE_HOUR;
                     }else {
                         beginTime = TimeTool.getLastRoundHourUTCTm(sampleTime);
@@ -278,7 +278,7 @@ public class CommToolHandler {
                 break;
                 case "d":
                 case "D":{
-                    if ("val".equals(method) || "dif".equals(method)){
+                    if ("qval".equals(method) || "val".equals(method) || "dif".equals(method)){
                         beginTime = endTime = sampleTime-TimeTool.MS_ONE_DAY;
                     }else {
                         beginTime = TimeTool.getBeginUTCOfTime(sampleTime) - TimeTool.MS_ONE_DAY;
@@ -288,7 +288,7 @@ public class CommToolHandler {
                 break;
                 case "n":
                 case "N":{
-                    if ("val".equals(method) || "dif".equals(method)){
+                    if ("qval".equals(method) || "val".equals(method) || "dif".equals(method)){
                         beginTime = endTime = TimeTool.getTimeChgMonth(sampleTime, -1);
                     }else {
                         long lastMonthTm = TimeTool.getTimeChgMonth(sampleTime, -1);
@@ -299,7 +299,7 @@ public class CommToolHandler {
                 break;
                 case "y":
                 case "Y":{
-                    if ("val".equals(method) || "dif".equals(method)){
+                    if ("qval".equals(method) || "val".equals(method) || "dif".equals(method)){
                         beginTime = endTime = TimeTool.getTimeChgMonth(sampleTime, -12);
                     }else {
                         long lastYearTm = TimeTool.getTimeChgMonth(sampleTime, -12);

+ 17 - 4
src/main/java/com/shkpr/service/warncore/bizhandler/SiteDataWarnHandler.java

@@ -1467,6 +1467,9 @@ public class SiteDataWarnHandler {
                 break;
 
             String key = String.format("%s_f", jp.getMethod());
+            if ("qval".equals(jp.getMethod())){//比较同期取值
+                key = "new_f";
+            }
             if (CommTool.listSize(siteStatsData.getData().get(0).getReport()) > 0){
                 for (KeyValue tmp:siteStatsData.getData().get(0).getReport()){
                     if (key.equals(tmp.getKey())){
@@ -1485,8 +1488,8 @@ public class SiteDataWarnHandler {
         WaterXYReportRes reportRes = null;
         do {
             JPGetRegionXY tmpQuery = new JPGetRegionXY();
-            tmpQuery.setBeginDate(TimeTool.convertUTC2DateStr(jp.getBeginTime(), TimeTool.TIMESTAMP_FORMAT));
-            tmpQuery.setEndDate(TimeTool.convertUTC2DateStr(jp.getEndTime(), TimeTool.TIMESTAMP_FORMAT));
+            tmpQuery.setBeginDate(TimeTool.convertUTC2DateStr(jp.getBeginTime(), TimeTool.YEAR_MONTH_DAY_FORMAT));
+            tmpQuery.setEndDate(TimeTool.convertUTC2DateStr(jp.getEndTime(), TimeTool.YEAR_MONTH_DAY_FORMAT));
             tmpQuery.setByTime(0);
             tmpQuery.setIds(new ArrayList<String>(){{add(objId);}});
 
@@ -1506,7 +1509,17 @@ public class SiteDataWarnHandler {
             for (CommDVBean tmpItem:reportRes.getData().get(0).getReport()){
                 if (StringUtils.isEmpty(tmpItem.getValue()))
                     continue;
+
                 if (StringUtils.isEmpty(value)){
+                    if ("qval".equals(jp.getMethod())){//比较同期取值
+                        long dataTm = TimeTool.convertDateStr2UTC(tmpItem.getDate());
+                        if (dataTm <= jp.getEndTime() && dataTm >= jp.getBeginTime()){
+                            value = tmpItem.getValue();
+                            break;
+                        }else
+                            continue;
+                    }
+
                     value = tmpItem.getValue();
                     continue;
                 }
@@ -1531,8 +1544,8 @@ public class SiteDataWarnHandler {
         LinesXYReportRes reportRes = null;
         do {
             JPGetRegionXY tmpQuery = new JPGetRegionXY();
-            tmpQuery.setBeginDate(TimeTool.convertUTC2DateStr(jp.getBeginTime(), TimeTool.TIMESTAMP_FORMAT));
-            tmpQuery.setEndDate(TimeTool.convertUTC2DateStr(jp.getEndTime(), TimeTool.TIMESTAMP_FORMAT));
+            tmpQuery.setBeginDate(TimeTool.convertUTC2DateStr(jp.getBeginTime(), TimeTool.YEAR_MONTH_DAY_FORMAT));
+            tmpQuery.setEndDate(TimeTool.convertUTC2DateStr(jp.getEndTime(), TimeTool.YEAR_MONTH_DAY_FORMAT));
             tmpQuery.setByTime(1);
             tmpQuery.setIds(new ArrayList<String>(){{add(objId);}});
 

+ 9 - 0
src/main/java/com/shkpr/service/warncore/bizhandler/ZoneDataWarnHandler.java

@@ -1062,6 +1062,15 @@ public class ZoneDataWarnHandler {
 
             for (DateKeyValue item:recordRes.getData()){
                 if (StringUtils.isEmpty(value)){
+                    if ("qval".equals(jp.getMethod())){//比较同期取值
+                        long dataTm = TimeTool.convertDateStr2UTC(item.getDate());
+                        if (dataTm <= jp.getEndTime() && dataTm >= jp.getBeginTime()){
+                            value = item.getValue();
+                            break;
+                        }else
+                            continue;
+                    }
+
                     value = item.getValue();
                     continue;
                 }

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

@@ -9,7 +9,7 @@ public class JPMixComplexCondition {
     private long beginTime = 0;
     private long endTime = 0;
     private String mode = "";//获取方式:last/prev/near/this
-    private String method = "";//时间段内取值方法:avg/sum/dif/min/max/val
+    private String method = "";//时间段内取值方法:avg/sum/dif/min/max/val/qval
     private String percent = "";//百分率
     private String dateUnit = "";//日期单位:h/d/w/n/y
     private String dataType = "";//目标值的取值类型(int/long/float/double)