From 4af6b1e2c41365936df308eea6fa50e269eca3b6 Mon Sep 17 00:00:00 2001 From: dengzedong <dengzedong@email> Date: 星期四, 13 二月 2025 10:45:22 +0800 Subject: [PATCH] 预测累计 --- iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataSampleViewRespDTO.java | 6 +++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/CommonDict.java | 2 + iailab-module-model/iailab-module-model-biz/db/mysql.sql | 8 ++-- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dto/MmPredictItemDTO.java | 14 +++++++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmItemOutputEntity.java | 15 +++++++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictItemEntity.java | 15 ------- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictItemServiceImpl.java | 21 +++++++++- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java | 19 +++++++++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java | 9 ++++ 9 files changed, 88 insertions(+), 21 deletions(-) diff --git a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataSampleViewRespDTO.java b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataSampleViewRespDTO.java index f720ae8..b6d4d93 100644 --- a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataSampleViewRespDTO.java +++ b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataSampleViewRespDTO.java @@ -21,4 +21,10 @@ @Schema(description = "T+N预测值,N表示预测频率") private List<Object[]> preDataN; + + @Schema(description = "累计真实值") + private List<Object[]> cumulantRealData; + + @Schema(description = "累计预测值") + private List<Object[]> cumulantPreData; } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/db/mysql.sql b/iailab-module-model/iailab-module-model-biz/db/mysql.sql index 5a746f6..417acc3 100644 --- a/iailab-module-model/iailab-module-model-biz/db/mysql.sql +++ b/iailab-module-model/iailab-module-model-biz/db/mysql.sql @@ -144,7 +144,7 @@ create table t_mm_item_result_json ( id varchar(36) not null, - outputid varchar(36), + outputid varchar(50), predicttime datetime, jsonvalue text, cumulant varchar(36), @@ -898,6 +898,6 @@ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='电价时段配置数据'; -alter table t_mm_predict_item add column `iscumulant` tinyint default false COMMENT '是否累计'; -alter table t_mm_predict_item add column `cumuldivisor` int default 60 COMMENT '累计除数'; -alter table t_mm_predict_item add column `cumulpoint` varchar(36) DEFAULT NULL, COMMENT '累计测点'; \ No newline at end of file +alter table t_mm_item_output add column `iscumulant` tinyint default false COMMENT '是否累计'; +alter table t_mm_item_output add column `cumuldivisor` int DEFAULT NULL COMMENT '累计除数'; +alter table t_mm_item_output add column `cumulpoint` varchar(36) DEFAULT NULL, COMMENT '累计测点'; \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java index 2750fc1..1687d46 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java @@ -13,6 +13,7 @@ import com.iailab.module.model.api.mcs.McsApi; import com.iailab.module.model.api.mcs.dto.*; import com.iailab.module.model.api.mdk.dto.StScheduleRecordVO; +import com.iailab.module.model.common.enums.CommonDict; import com.iailab.module.model.common.enums.DataTypeEnum; import com.iailab.module.model.common.enums.PreLineTypeEnum; import com.iailab.module.model.enums.CommonConstant; @@ -315,6 +316,14 @@ viewDto.setRealData(getHisData(out.getPointid(), startTime, endTime)); } viewDto.setPreDataN(mmItemResultService.getData(out.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); + //处理累计点 + if (out.getIscumulant() == 1) { + if (StringUtils.isNotBlank(out.getCumulpoint())) { + viewDto.setCumulantRealData(getHisData(out.getPointid() + CommonDict.CUMULANT_SUFFIX, startTime, endTime)); + } + viewDto.setCumulantPreData(mmItemResultService.getData(out.getId() + CommonDict.CUMULANT_SUFFIX, startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); + } + viewMap.put(out.getResultName(), viewDto); } result.setStartTime(startTime); diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/CommonDict.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/CommonDict.java index a97c749..cf021a5 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/CommonDict.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/CommonDict.java @@ -10,4 +10,6 @@ public static final Integer ONE = 1; public static final Integer TOW = 2; + + public static final String CUMULANT_SUFFIX = "_cumulant"; } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dto/MmPredictItemDTO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dto/MmPredictItemDTO.java index 6c5a6d0..cb68fe5 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dto/MmPredictItemDTO.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dto/MmPredictItemDTO.java @@ -35,4 +35,18 @@ * 计算预测项真实数据点 */ private String pointId; + /** + * 计算预测项是否累计 + */ + private Integer iscumulant; + + /** + * 计算预测项累计除数 + */ + private Integer cumuldivisor; + + /** + * 计算预测项累计测点 + */ + private String cumulpoint; } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmItemOutputEntity.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmItemOutputEntity.java index 6360278..0562fcd 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmItemOutputEntity.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmItemOutputEntity.java @@ -72,4 +72,19 @@ * 结果名称 */ private String resultName; + + /** + * 是否累计 + */ + private Integer iscumulant; + + /** + * 累计除数 + */ + private Integer cumuldivisor; + + /** + * 累计测点 + */ + private String cumulpoint; } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictItemEntity.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictItemEntity.java index 66e0622..6f54674 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictItemEntity.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictItemEntity.java @@ -96,19 +96,4 @@ * 保留的预测点位 (T+2 则n=2, T+30则n=30, T+n则表示从最后点位开始,n=预测长度;n由系统配置得出) */ private String saveindex; - - /** - * 是否累计 - */ - private Integer iscumulant; - - /** - * 累计除数 - */ - private Integer cumuldivisor; - - /** - * 累计测点 - */ - private String cumulpoint; } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictItemServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictItemServiceImpl.java index 3d1bc60..5dd3eb6 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictItemServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictItemServiceImpl.java @@ -152,6 +152,10 @@ entity.setPointid(mmPredictItemDto.getPointId()); entity.setResultName(mmPredictItemDto.getMmPredictItem().getItemname()); entity.setResultstr("result"); + //累计配置 + entity.setIscumulant(mmPredictItemDto.getIscumulant()); + entity.setCumuldivisor(mmPredictItemDto.getCumuldivisor()); + entity.setCumulpoint(mmPredictItemDto.getCumulpoint()); mergeItemOutput.add(entity); mmPredictItemDto.setMmItemOutputList(mergeItemOutput); } @@ -175,7 +179,6 @@ @Override public void update(MmPredictItemDTO mmPredictItemDto) { MmPredictItemEntity predictItem = mmPredictItemDto.getMmPredictItem(); - predictItem.setCumulpoint(predictItem.getCumulpoint() == null? "" : predictItem.getCumulpoint()); predictItem.setUpdateTime(new Date()); mmPredictItemDao.updateById(predictItem); MmItemTypeEntity itemType = mmItemTypeImpl.getById(predictItem.getItemtypeid()); @@ -205,10 +208,20 @@ entity.setPointid(mmPredictItemDto.getPointId()); entity.setResultName(mmPredictItemDto.getMmPredictItem().getItemname()); entity.setResultstr("result"); + //累计配置 + entity.setIscumulant(mmPredictItemDto.getIscumulant()); + entity.setCumuldivisor(mmPredictItemDto.getCumuldivisor()); + entity.setCumulpoint(mmPredictItemDto.getCumulpoint()); mmItemOutputList.add(entity); mmPredictItemDto.setMmItemOutputList(mmItemOutputList); } else { - mmPredictItemDto.getMmItemOutputList().forEach(e -> e.setPointid(mmPredictItemDto.getPointId())); + mmPredictItemDto.getMmItemOutputList().forEach(entity -> { + entity.setPointid(mmPredictItemDto.getPointId()); + //累计配置 + entity.setIscumulant(mmPredictItemDto.getIscumulant()); + entity.setCumuldivisor(mmPredictItemDto.getCumuldivisor()); + entity.setCumulpoint(mmPredictItemDto.getCumulpoint()); + }); } } DmModuleItemEntity dmModuleItem = mmPredictItemDto.getDmModuleItem(); @@ -267,6 +280,10 @@ mmPredictItemDto.setMmPredictMergeItem(mmPredictMergeItemService.getByItemid(id)); if (!CollectionUtils.isEmpty(mmPredictItemDto.getMmItemOutputList())) { mmPredictItemDto.setPointId(mmPredictItemDto.getMmItemOutputList().get(0).getPointid()); + //累计配置 + mmPredictItemDto.setIscumulant(mmPredictItemDto.getMmItemOutputList().get(0).getIscumulant()); + mmPredictItemDto.setCumuldivisor(mmPredictItemDto.getMmItemOutputList().get(0).getCumuldivisor()); + mmPredictItemDto.setCumulpoint(mmPredictItemDto.getMmItemOutputList().get(0).getCumulpoint()); } } return mmPredictItemDto; diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java index 67ce702..89c3866 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java @@ -1,6 +1,7 @@ package com.iailab.module.model.mdk.predict; import com.baomidou.dynamic.datasource.annotation.DSTransactional; +import com.iailab.module.model.common.enums.CommonDict; import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity; import com.iailab.module.model.mcs.pre.service.MmItemResultService; import com.iailab.module.model.mdk.factory.ItemEntityFactory; @@ -11,6 +12,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; import java.util.*; @Service @@ -52,6 +54,23 @@ } resultMap.put(entry.getKey().getId(), predictDataList); predictLists.put(entry.getKey().getResultstr(), predictDataList); + + //处理累计计算 + if (entry.getKey().getIscumulant() == 1) { + resultMap.put(entry.getKey().getId() + CommonDict.CUMULANT_SUFFIX, new ArrayList<DataValueVO>(){{ + DataValueVO predictData = new DataValueVO(); + // 时间 预测时间+预测长度*粒度 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(predictResult.getPredictTime()); + calendar.add(Calendar.SECOND, predictResult.getGranularity() * (rows - 1)); + predictData.setDataTime(calendar.getTime()); + //值 所有值相加/除数 + BigDecimal sum = BigDecimal.valueOf(Arrays.stream(entry.getValue()).sum()); + BigDecimal divisor = BigDecimal.valueOf(entry.getKey().getCumuldivisor()); + predictData.setDataValue(sum.divide(divisor, 2, BigDecimal.ROUND_HALF_UP).doubleValue()); + add(predictData); + }}); + } } predictResult.setPredictLists(predictLists); return resultMap; -- Gitblit v1.9.3