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; } 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 '累计测点'; 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 '累计测点'; 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); 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"; } 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; } 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; } 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; } 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; 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;