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 | 97 +++++++++++++++++++++++++++--------------------- 1 files changed, 54 insertions(+), 43 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 a15bf16..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 @@ -43,54 +43,55 @@ //根据测点分组 Map<String, List<PeakValleyFlatEntity>> groupedByPointNo = list.stream() - .collect(Collectors.groupingBy(PeakValleyFlatEntity::getPowerNo)); + .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(); - 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 dto = new ApiPointValueWriteDTO(); - dto.setPointNo(entry.getValue().get(0).getPointNo()); - double percent = totalValue==0?0:value/totalValue*100; - dto.setValue(percent); - dataPointApi.writePointRealValue(dto); + ApiPointValueWriteDTO percentDto = new ApiPointValueWriteDTO(); + percentDto.setPointNo(entry.getValue().get(0).getPointNo()); + double percent = totalValue == 0 ? 0 : value / totalValue * 100; + percentDto.setValue(percent); + dataPointApi.writePointRealValue(percentDto); - if(entry.getValue().get(0).getPointNoMonth()!=null){ - //计算前三十日累积量 - double value30 = 0; - for (int i = 1; i < 31; i++) { - //计算前三十日累积量 - value30 = value30 + getSumValue(entry.getValue(), i, calendar); - } + //下发昨日峰/谷累积量 + ApiPointValueWriteDTO totalDto = new ApiPointValueWriteDTO(); + totalDto.setPointNo(entry.getValue().get(0).getPointNoTotal()); + totalDto.setValue(value); + dataPointApi.writePointRealValue(totalDto); - //计算前三十日总电耗 - Calendar monthCal = (Calendar) calendar.clone(); - monthCal.set(Calendar.MILLISECOND, 0); - monthCal.set(Calendar.MINUTE, 0); - monthCal.set(Calendar.HOUR_OF_DAY, 0); - monthCal.add(Calendar.DAY_OF_YEAR, -30); - Date startTimeMonth = monthCal.getTime(); - double totalValueMonth = getSumValueTotal(entry.getValue().get(0).getPowerNo(), startTimeMonth,endTime); - - //下发前三十日占比 - ApiPointValueWriteDTO monthDto = new ApiPointValueWriteDTO(); - monthDto.setPointNo(entry.getValue().get(0).getPointNoMonth()); - double percentMonth = totalValueMonth==0?0:value30/totalValueMonth*100; - monthDto.setValue(percentMonth); - dataPointApi.writePointRealValue(monthDto); - } + //下发前三十日占比 + ApiPointValueWriteDTO monthDto = new ApiPointValueWriteDTO(); + monthDto.setPointNo(entry.getValue().get(0).getPointNoMonth()); + double percentMonth = totalValueMonth == 0 ? 0 : valueMonth / totalValueMonth * 100; + monthDto.setValue(percentMonth); + dataPointApi.writePointRealValue(monthDto); }); } catch (Exception ex) { logger.error("runPeakValleyFlatTask运行异常", ex); @@ -105,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); @@ -173,20 +175,27 @@ dto.setPointNo(entity.getPowerNo()); dto.setStart(startTime); dto.setEnd(endTime); - logger.info("开始查询,测点:"+entity.getPowerNo()+"startTime:"+startTime+"endTime:"+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); @@ -195,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