dengzedong
2025-02-13 4af6b1e2c41365936df308eea6fa50e269eca3b6
预测累计
已修改9个文件
109 ■■■■ 文件已修改
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataSampleViewRespDTO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/db/mysql.sql 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/CommonDict.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dto/MmPredictItemDTO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmItemOutputEntity.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/entity/MmPredictItemEntity.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictItemServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;