From 67f59ab45824874e8adb0f07b2912f4a3a185b3c Mon Sep 17 00:00:00 2001
From: dengzedong <dengzedong@email>
Date: 星期二, 04 三月 2025 09:20:36 +0800
Subject: [PATCH] predictAdjust 模拟调整预测 setAdjData 模拟调制预测曲线查询

---
 iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataSampleViewRespDTO.java            |    3 +
 iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataViewRespDTO.java                  |    2 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustResultServiceImpl.java |   48 +++++++++++++++++------
 iailab-module-model/iailab-module-model-biz/db/mysql.sql                                                                               |    2 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustResultService.java          |    4 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleDataConstructor.java         |   17 +++-----
 iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java                                  |    2 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java                |    6 ++-
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java                |    5 +-
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java                                  |   12 +++++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java                                  |    2 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigServiceImpl.java |    5 ++
 12 files changed, 73 insertions(+), 35 deletions(-)

diff --git a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java
index dded6ad..9a57522 100644
--- a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java
+++ b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java
@@ -36,7 +36,7 @@
     PreDataBarLineRespVO getPreDataCharts(@RequestBody PreDataBarLineReqVO reqVO);
 
     @PostMapping(PREFIX + "/predict-data/item-chart")
-    @Operation(summary = "预测数据图表")
+    @Operation(summary = "预测数据图表-预测项首页图表")
     PreDataItemChartRespVO getPreDataItemChart(@RequestBody PreDataItemChartReqVO reqVO);
 
     @PostMapping(PREFIX + "/predict-data/single-chart")
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 b6d4d93..1611b7a 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
@@ -27,4 +27,7 @@
 
     @Schema(description = "累计预测值")
     private List<Object[]> cumulantPreData;
+
+    @Schema(description = "调整预测值")
+    private List<Object[]> adjData;
 }
\ No newline at end of file
diff --git a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataViewRespDTO.java b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataViewRespDTO.java
index 3372d74..48602c3 100644
--- a/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataViewRespDTO.java
+++ b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/PreDataViewRespDTO.java
@@ -114,7 +114,7 @@
     @Schema(description = "当时预测值")
     private List<Object[]> curData;
 
-    @Schema(description = "调整值")
+    @Schema(description = "调整预测值")
     private List<Object[]> adjData;
 
     @Schema(description = "预警信息")
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 9d82825..282b553 100644
--- a/iailab-module-model/iailab-module-model-biz/db/mysql.sql
+++ b/iailab-module-model/iailab-module-model-biz/db/mysql.sql
@@ -931,7 +931,7 @@
 CREATE TABLE `t_st_adjust_result` (
                                                  `id` varchar(36) NOT NULL COMMENT 'ID',
                                                  `config_id` varchar(36) DEFAULT NULL COMMENT '配置ID',
-                                                 `output_id` varchar(36) DEFAULT NULL COMMENT '预测项输出ID',
+                                                 `output_id` varchar(50) DEFAULT NULL COMMENT '预测项输出ID',
                                                  `schedule_model_id` varchar(36) DEFAULT NULL COMMENT '调度模型ID',
                                                  `adjust_time` datetime NULL DEFAULT NULL COMMENT '模拟调整时间',
                                                  `adjust_value` varchar(500) DEFAULT NULL COMMENT '模拟调整值',
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 efc61f1..ac1ac96 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
@@ -79,6 +79,9 @@
     private MmItemResultJsonService mmItemResultJsonService;
 
     @Autowired
+    private StAdjustResultService stAdjustResultService;
+
+    @Autowired
     private ChartService chartService;
 
     @Autowired
@@ -215,7 +218,10 @@
             viewDto.setRealData(getHisData(output.getPointid(), startTime, endTime));
             viewDto.setPreDataN(mmItemResultService.getData(output.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
             viewDto.setPreDataL(mmItemResultLastPointService.getData(output.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
-            viewDto.setCurData(mmItemResultJsonService.getData(output.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, 3));
+            viewDto.setCurData(mmItemResultJsonService.getData(output.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
+            // 模拟调整曲线
+            viewDto.setAdjData(stAdjustResultService.getData(output.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
+
             List<Double> values = new ArrayList<>();
             if (!CollectionUtils.isEmpty(viewDto.getRealData())) {
                 List<Double> hisValues = new ArrayList<>();
@@ -334,6 +340,8 @@
                 }
                 viewDto.setCumulantPreData(mmItemResultService.getData(out.getId() + CommonDict.CUMULANT_SUFFIX, startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
             }
+            // 调整预测值
+            viewDto.setAdjData(stAdjustResultService.getData(out.getId(),predictItem.getLastTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
 
             viewMap.put(out.getResultName(), viewDto);
         }
@@ -398,6 +406,8 @@
             dataView.setRealData(new ArrayList<>());
         }
         dataView.setCurData(mmItemResultJsonService.getData(outPut.getId(), predictTime, timeFormat, 3));
+        // 调整预测值
+        dataView.setAdjData(stAdjustResultService.getData(outPut.getId(),predictTime,timeFormat));
         dataView.setLineType(lineType.getCode());
         switch (lineType) {
             case TN:
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java
index 399c022..411dec7 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java
@@ -219,7 +219,7 @@
                     break;
             }
             // 开始预测
-            predictModuleHandler.predictAdjust(predictItem, reqDTO.getPredictTime(), deviationList, scheduleScheme.getModelId());
+            predictModuleHandler.predictAdjust(predictItem, reqDTO.getPredictTime(), deviationList, scheduleScheme.getModelId(), det.getConfigId());
         }
         return Boolean.TRUE;
     }
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustResultService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustResultService.java
index 614ee56..659f4da 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustResultService.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustResultService.java
@@ -20,10 +20,12 @@
  */
 public interface StAdjustResultService extends BaseService<StAdjustResultEntity> {
 
-    void saveResult(Map<String, List<DataValueVO>> resultMap, Date predictTime, String adjustValue, String scheduleModelId);
+    void saveResult(Map<String, List<DataValueVO>> resultMap, Date predictTime, String adjustValue, String scheduleModelId, String configId);
 
     double[] getSimpleData(String outputId, Date predictTime, int predictLength);
 
+    List<Object[]> getData(String outputId, Date predictTime, String timeFormat);
+
     StAdjustResultRespVO getInfo(String id);
 
     PageResult<StAdjustResultRespVO> page(@Valid StAdjustResultPageReqVO pageVO);
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigServiceImpl.java
index 6ced3b9..60a5a8a 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigServiceImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigServiceImpl.java
@@ -88,12 +88,15 @@
     }
 
     public StAdjustConfigEntity getByModelId(String modelId) {
-        return baseDao.selectOne("schedule_model_id", modelId);
+        return baseDao.selectOne("schedule_model_id", modelId,"status",1);
     }
 
 
     public List<StAdjustConfigDetEntity> getDetByModelId(String modelId) {
         StAdjustConfigEntity configEntity = getByModelId(modelId);
+        if (null == configEntity) {
+            return null;
+        }
         return stAdjustConfigDetService.getListByConfigId(configEntity.getId());
     }
 }
\ No newline at end of file
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustResultServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustResultServiceImpl.java
index f2b041e..5e690a2 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustResultServiceImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustResultServiceImpl.java
@@ -12,10 +12,8 @@
 import com.iailab.module.model.mcs.sche.dao.StAdjustResultDao;
 import com.iailab.module.model.mcs.sche.entity.StAdjustResultEntity;
 import com.iailab.module.model.mcs.sche.service.StAdjustResultService;
-import com.iailab.module.model.mcs.sche.vo.StAdjustConfigRespVO;
 import com.iailab.module.model.mcs.sche.vo.StAdjustResultPageReqVO;
 import com.iailab.module.model.mcs.sche.vo.StAdjustResultRespVO;
-import com.iailab.module.model.mcs.sche.vo.StScheduleRecordDetailRespVO;
 import com.iailab.module.model.mdk.vo.DataValueVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -23,10 +21,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -42,18 +37,21 @@
     private MmItemOutputService mmItemOutputService;
 
     @Override
-    public void saveResult(Map<String, List<DataValueVO>> resultMap, Date predictTime, String adjustValue, String scheduleModelId) {
+    public void saveResult(Map<String, List<DataValueVO>> resultMap, Date predictTime, String adjustValue, String scheduleModelId, String configId) {
+        List<StAdjustResultEntity> list = new ArrayList<>(resultMap.size());
         for (Map.Entry<String, List<DataValueVO>> entry : resultMap.entrySet()) {
             StAdjustResultEntity entity = new StAdjustResultEntity();
             entity.setId(UUID.randomUUID().toString());
+            entity.setConfigId(configId);
+            entity.setOutputId(entry.getKey());
             entity.setScheduleModelId(scheduleModelId);
             entity.setAdjustTime(predictTime);
             entity.setAdjustValue(adjustValue);
-            entity.setOutputId(entry.getKey());
-            List<Double> jsonValueList = entry.getValue().stream().map(valueVO -> valueVO.getDataValue()).collect(Collectors.toList());
-            entity.setAdjustValue(JSONArray.toJSONString(jsonValueList));
-            baseDao.insert(entity);
+            List<Double> jsonValueList = entry.getValue().stream().map(DataValueVO::getDataValue).collect(Collectors.toList());
+            entity.setJsonValue(JSONArray.toJSONString(jsonValueList));
+            list.add(entity);
         }
+        baseDao.insert(list);
     }
 
     @Override
@@ -63,10 +61,10 @@
         wrapper.eq("output_id", outputId)
                 .eq("adjust_time", DateUtils.format(predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
         StAdjustResultEntity data = baseDao.selectOne(wrapper);
-        if (data == null || StringUtils.isBlank(data.getAdjustValue())) {
+        if (data == null || StringUtils.isBlank(data.getJsonValue())) {
             return null;
         }
-        List<Double> valueList = JSONArray.parseArray(data.getAdjustValue(), Double.class);
+        List<Double> valueList = JSONArray.parseArray(data.getJsonValue(), Double.class);
         if (CollectionUtils.isEmpty(valueList)) {
             return result;
         }
@@ -77,6 +75,30 @@
     }
 
     @Override
+    public List<Object[]> getData(String outputId, Date predictTime, String timeFormat) {
+        List<Object[]> result = new ArrayList<>();
+        QueryWrapper<StAdjustResultEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("output_id", outputId)
+                .eq("adjust_time", DateUtils.format(predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
+        StAdjustResultEntity data = baseDao.selectOne(wrapper);
+        if (data == null || StringUtils.isBlank(data.getJsonValue())) {
+            return result;
+        }
+        List<Double> valueList = JSONArray.parseArray(data.getJsonValue(), Double.class);
+        if (CollectionUtils.isEmpty(valueList)) {
+            return result;
+        }
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(predictTime);
+        valueList.forEach(value -> {
+            Object[] dv = {DateUtils.format(calendar.getTime(), timeFormat), value};
+            calendar.add(Calendar.MINUTE, 1);
+            result.add(dv);
+        });
+        return result;
+    }
+
+    @Override
     public StAdjustResultRespVO getInfo(String id) {
         StAdjustResultEntity entity = baseDao.selectById(id);
         StAdjustResultRespVO result = ConvertUtils.sourceToTarget(entity, StAdjustResultRespVO.class);
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java
index d0cfb77..8511269 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java
@@ -118,7 +118,7 @@
         }
     }
 
-    public void predictAdjust(ItemVO predictItem, Date predictTime, List<StAdjustDeviationDTO> deviationList, String scheduleModelId) {
+    public void predictAdjust(ItemVO predictItem, Date predictTime, List<StAdjustDeviationDTO> deviationList, String scheduleModelId, String configId) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(predictTime);
         calendar.set(Calendar.MILLISECOND, 0);
@@ -133,9 +133,11 @@
         try {
             PredictItemHandler predictItemHandler = predictItemFactory.create(predictItem.getId());
             PredictResultVO predictResult = predictItemHandler.predictAdjust(calendar.getTime(), predictItem, deviationList);
+            predictResult.setGranularity(predictItem.getGranularity());
+            predictResult.setSaveIndex(predictItem.getSaveIndex());
 
             // 保存预测结果
-            predictResultHandler.savePredictAdjustResult(predictResult, JSONArray.toJSONString(deviationList), scheduleModelId);
+            predictResultHandler.savePredictAdjustResult(predictResult, JSONArray.toJSONString(deviationList), scheduleModelId,configId);
         } catch (Exception e) {
             e.printStackTrace();
             log.error(MessageFormat.format("预测项编号:{0},预测项名称:{1},预测失败:{2} 预测时刻:{3}",
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 ebaee0f..a6cac8e 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
@@ -112,11 +112,12 @@
      * savePredictAdjustResult
      *
      * @param predictResult
+     * @param configId
      */
     @DSTransactional
-    public void savePredictAdjustResult(PredictResultVO predictResult, String adjustValue, String scheduleModelId) {
+    public void savePredictAdjustResult(PredictResultVO predictResult, String adjustValue, String scheduleModelId, String configId) {
         Map<String, List<DataValueVO>> resultMap = convertToPredictData(predictResult);
-        stAdjustResultService.saveResult(resultMap, predictResult.getPredictTime(), adjustValue, scheduleModelId);
+        stAdjustResultService.saveResult(resultMap, predictResult.getPredictTime(), adjustValue, scheduleModelId,configId);
     }
 
     public List<DataValueVO> getPredictValueByItemNo(String itemNo, Date start, Date end) {
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleDataConstructor.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleDataConstructor.java
index 9968c29..6bd9314 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleDataConstructor.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleDataConstructor.java
@@ -89,7 +89,7 @@
             }
         }
 
-        int portIdx = 0;
+        int portIdx = 1;
         //对每个爪分别进行计算
         for (ColumnItemPort entry : sampleInfo.getColumnInfo()) {
             double[][] matrix = new double[0][0];
@@ -136,26 +136,21 @@
                     try {
                         List<DataValueVO> dataEntityList = getData(entry.getColumnItemList().get(i), pointMap, planMap, indMap);
 
-                        double adjustVal = SampleInfo.getAdjustValueFromDeviation(portIdx, i, sampleInfo.getDeviation());
-                        if (adjustVal != 0) {
-                            logger.info("设置调整值adjustVal:" + adjustVal);
-                            for (int dataKey = 1; dataKey < dataEntityList.size(); dataKey++) {
-                                DataValueVO item = dataEntityList.get(dataKey);
-                                item.setDataValue(item.getDataValue() + adjustVal);
-                            }
-                        }
-
                         //补全数据
                         ColumnItem columnItem = entry.getColumnItemList().get(i);
                         dataEntityList = super.completionData(matrix.length, dataEntityList, columnItem.startTime, columnItem.endTime, columnItem.getParamType(), columnItem.getGranularity());
 
+
                         /** 如果数据取不满,把缺失的数据点放在后面 */
                         if (dataEntityList != null && dataEntityList.size() != 0) {
                             logger.info("设置matrix, i = " + i + ", size = " + dataEntityList.size());
+                            // 调整值
+                            double adjustVal = SampleInfo.getAdjustValueFromDeviation(portIdx, i + 1, sampleInfo.getDeviation());
                             for (int k = 0; k < dataEntityList.size(); k++) {
                                 Double dataValue = dataEntityList.get(k).getDataValue();
                                 if (null != dataValue) {
-                                    matrix[k][i] = dataValue;
+                                    // 用BigDecimal计算,解决double精度问题
+                                    matrix[k][i] = BigDecimal.valueOf(dataValue).add(BigDecimal.valueOf(adjustVal)).doubleValue();
                                 }
                             }
                         }

--
Gitblit v1.9.3