From 12ecdc83fdea468758f1615fbab772d82ab89e74 Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期三, 07 五月 2025 11:03:33 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPeakValleyFlatTask.java |   62 +++++++++++++++++++------------
 1 files changed, 38 insertions(+), 24 deletions(-)

diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPeakValleyFlatTask.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPeakValleyFlatTask.java
index 3b571f1..b61a29e 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPeakValleyFlatTask.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPeakValleyFlatTask.java
@@ -46,21 +46,32 @@
                     .collect(Collectors.groupingBy(PeakValleyFlatEntity::getPointNo));
 
             groupedByPointNo.entrySet().stream().forEach(entry -> {
-
-                //计算昨日的峰/谷累积量
-                double value = getSumValue(entry.getValue(), 1, calendar);
-
-                //计算昨日总电耗
                 Calendar cal = (Calendar) calendar.clone();
                 cal.set(Calendar.MILLISECOND, 0);
+                cal.set(Calendar.SECOND, 0);
                 cal.set(Calendar.MINUTE, 0);
                 cal.set(Calendar.HOUR_OF_DAY, 0);
                 Date endTime = calendar.getTime();
                 cal.add(Calendar.DAY_OF_YEAR, -1);
                 Date startTime = cal.getTime();
-                cal.add(Calendar.DAY_OF_YEAR, -29);
-                Date monthStartTime = cal.getTime();
-                double totalValue = getSumValueTotal(entry.getValue().get(0).getPowerNo(), startTime, endTime);
+                cal.add(Calendar.DAY_OF_YEAR, -27);
+                Date monthStartTime_29 = cal.getTime();
+                cal.add(Calendar.DAY_OF_YEAR, -2);
+                Date monthStartTime_30 = cal.getTime();
+
+                //计算昨日的峰/谷累积量
+                double value = getSumValue(entry.getValue(), 1, calendar);
+
+                //计算昨日总电耗
+                double totalValue = getSumValueTotal(entry.getValue().get(0).getPowerNo(), startTime, endTime,1440,60);
+
+                //计算前29日峰/谷累积量 + 今日
+                double valueMonth = getSumValueTotal(entry.getValue().get(0).getPointNoTotal(), monthStartTime_29, endTime,29,1)+value;
+
+                //计算前三十日总电耗
+                double totalValueMonth = getSumValueTotal(entry.getValue().get(0).getPowerNo(), monthStartTime_30, endTime,1440 * 30,60);
+
+                logger.info("name:"+entry.getValue().get(0).getName()+";value:"+value+";totalValue:"+totalValue+";valueMonth:"+valueMonth+";totalValueMonth:"+totalValueMonth);
 
                 //下发昨日占比
                 ApiPointValueWriteDTO percentDto = new ApiPointValueWriteDTO();
@@ -71,15 +82,9 @@
 
                 //下发昨日峰/谷累积量
                 ApiPointValueWriteDTO totalDto = new ApiPointValueWriteDTO();
-                percentDto.setPointNo(entry.getValue().get(0).getPointNoTotal());
-                percentDto.setValue(value);
+                totalDto.setPointNo(entry.getValue().get(0).getPointNoTotal());
+                totalDto.setValue(value);
                 dataPointApi.writePointRealValue(totalDto);
-
-                //计算前三十日峰/谷累积量
-                double valueMonth = getSumValueTotal(entry.getValue().get(0).getPointNoTotal(), monthStartTime, endTime);
-
-                //计算前三十日总电耗
-                double totalValueMonth = getSumValueTotal(entry.getValue().get(0).getPowerNo(), monthStartTime, endTime);
 
                 //下发前三十日占比
                 ApiPointValueWriteDTO monthDto = new ApiPointValueWriteDTO();
@@ -87,7 +92,6 @@
                 double percentMonth = totalValueMonth == 0 ? 0 : valueMonth / totalValueMonth * 100;
                 monthDto.setValue(percentMonth);
                 dataPointApi.writePointRealValue(monthDto);
-
             });
         } catch (Exception ex) {
             logger.error("runPeakValleyFlatTask运行异常", ex);
@@ -102,6 +106,7 @@
         }
         //根据配置获取startTime、endTime
         cal.set(Calendar.MILLISECOND, 0);
+        cal.set(Calendar.SECOND, 0);
         cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeSplit[0]));
         cal.set(Calendar.MINUTE, Integer.parseInt(timeSplit[1]));
         cal.add(Calendar.DAY_OF_YEAR, -ago);
@@ -171,19 +176,26 @@
             dto.setStart(startTime);
             dto.setEnd(endTime);
             logger.info("开始查询,测点:" + entity.getPowerNo() + "startTime:" + startTime + "endTime:" + endTime);
-
+            List<ApiPointValueDTO> valueList;
             //查找数据
-            List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(dto);
+            try {
+                valueList = dataPointApi.queryPointHistoryValue(dto);
+            } catch (Exception e) {
+                throw new RuntimeException("查询测点异常");
+            }
             //补全数据
-            valueList = fillMissingData(valueList, startTime, endTime);
+//            valueList = fillMissingData(valueList, startTime, endTime);
+            // 计算 startTime和endTime中有多少个点
+            long total = (endTime.getTime() - startTime.getTime()) / (60 * 1000);
+            double sum = valueList.stream().filter(e -> Double.compare(e.getV(), 0.0) > 0).mapToDouble(ApiPointValueDTO::getV).average().orElse(0.0) * Long.valueOf(total).doubleValue();
             //累加
-            double sum = valueList.stream().mapToDouble(ApiPointValueDTO::getV).sum();
+//            double sum = valueList.stream().mapToDouble(ApiPointValueDTO::getV).sum();
             value = value + sum;
         }
         return value / 60;
     }
 
-    private double getSumValueTotal(String pointNo, Date startTime, Date endTime) {
+    private double getSumValueTotal(String pointNo, Date startTime, Date endTime,Integer total,Integer divide) {
         ApiPointValueQueryDTO dto = new ApiPointValueQueryDTO();
         dto.setPointNo(pointNo);
         dto.setStart(startTime);
@@ -192,8 +204,10 @@
         //查找数据
         List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(dto);
         //补全数据
-        valueList = fillMissingData(valueList, startTime, endTime);
+//        valueList = fillMissingData(valueList, startTime, endTime);
+        double value = valueList.stream().filter(e -> Double.compare(e.getV(), 0.0) > 0).mapToDouble(ApiPointValueDTO::getV).average().orElse(0.0) * Double.valueOf(total);
+
         //累加
-        return valueList.stream().mapToDouble(ApiPointValueDTO::getV).sum() / 60;
+        return value / divide;
     }
 }

--
Gitblit v1.9.3