From 3058865fa4dfa634a92b4ebd826d8b1264dc90a3 Mon Sep 17 00:00:00 2001
From: houzhongjian <houzhongyi@126.com>
Date: 星期三, 05 三月 2025 15:04:41 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StAdjustConfigController.java       |   80 +++++++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.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/mcs/sche/vo/StAdjustConfigRespVO.java                         |   31 ++
 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/db/mysql.sql                                                                                        |    2 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustConfigDao.java                           |   10 
 iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/StAdjustConfigDTO.java                            |   46 ++++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StAdjustConfigResultController.java |   53 ++++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigDetRespVO.java                      |   23 ++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java                         |    7 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigServiceImpl.java          |   68 ++++++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultPageReqVO.java                      |    4 
 iailab-plat-sdk/doc/demo/Demo.java                                                                                                              |    0 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustResultServiceImpl.java          |   72 +++++-
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/DllUtils.java                                |    2 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustResultService.java                   |   13 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigService.java                   |   18 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java                                           |   22 +
 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/StAdjustConfigDetServiceImpl.java       |   19 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultRespVO.java                         |   23 ++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigDetService.java                |    4 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigPageReqVO.java                      |    3 
 iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StAdjustConfigDao.xml                                                 |   25 ++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustResultDao.java                           |   15 +
 iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StAdjustResultDao.xml                                                 |   21 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigSaveReqVO.java                      |   40 +++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java                         |    5 
 31 files changed, 596 insertions(+), 40 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-api/src/main/java/com/iailab/module/model/api/mcs/dto/StAdjustConfigDTO.java b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/StAdjustConfigDTO.java
new file mode 100644
index 0000000..73e0d60
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/StAdjustConfigDTO.java
@@ -0,0 +1,46 @@
+package com.iailab.module.model.api.mcs.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author lirm
+ * @date 2025年02月25日
+ */
+@Data
+public class StAdjustConfigDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 模型代码
+     */
+    private String modelCode;
+
+    /**
+     * 模型名称
+     */
+    private String modelName;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}
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..3856993 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:
@@ -584,7 +594,7 @@
         valueDTOS.forEach(item -> {
             Object[] values = new Object[2];
             values[0] = DateUtils.format(item.getT(), timeFormat);
-            values[1] = new BigDecimal(item.getV()).setScale(2, BigDecimal.ROUND_HALF_UP);
+            values[1] = new BigDecimal(item.getV()).setScale(3, BigDecimal.ROUND_HALF_UP);
             result.add(values);
         });
         return result;
@@ -711,9 +721,13 @@
                 result.put(key, BigDecimal.ZERO);
             }
             MmItemOutputEntity outPut = mmItemOutputService.getByItemid(predictItem.getId(), itemNo[1], itemNo[2]);
-
+            String outputId = outPut.getId();
+            // 如果第5个参数为1,则取累计值
+            if ("1".equals(itemNo[4])){
+                outputId = outPut.getId() + CommonDict.CUMULANT_SUFFIX;
+            }
             Date predictTime = predictItem.getLastTime();
-            List<Object[]> curData = mmItemResultJsonService.getData(outPut.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
+            List<Object[]> curData = mmItemResultJsonService.getData(outputId, predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
             if(CollectionUtils.isEmpty(curData)) {
                 result.put(key, BigDecimal.ZERO);
             } else {
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/controller/admin/StAdjustConfigController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StAdjustConfigController.java
new file mode 100644
index 0000000..c6f22ed
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StAdjustConfigController.java
@@ -0,0 +1,80 @@
+package com.iailab.module.model.mcs.sche.controller.admin;
+
+import com.iailab.framework.common.pojo.CommonResult;
+import com.iailab.framework.common.pojo.PageResult;
+import com.iailab.framework.common.util.object.BeanUtils;
+import com.iailab.module.model.mcs.pre.vo.MmPredictAlarmConfigRespVO;
+import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
+import com.iailab.module.model.mcs.sche.entity.StAdjustConfigEntity;
+import com.iailab.module.model.mcs.sche.entity.StScheduleModelParamEntity;
+import com.iailab.module.model.mcs.sche.service.StAdjustConfigDetService;
+import com.iailab.module.model.mcs.sche.service.StAdjustConfigService;
+import com.iailab.module.model.mcs.sche.vo.*;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+import java.util.List;
+
+import static com.iailab.framework.common.pojo.CommonResult.success;
+
+/**
+ * @author lirm
+ * @Description
+ * @createTime 2025年02月25日
+ */
+@Tag(name = "模型服务 - 模拟调整")
+@RestController
+@RequestMapping("/model/sche/adjust")
+public class StAdjustConfigController {
+
+    @Autowired
+    private StAdjustConfigService stAdjustConfigService;
+
+    @Autowired
+    private StAdjustConfigDetService stAdjustConfigDetService;
+
+    @GetMapping("/page")
+    @PreAuthorize("@ss.hasPermission('sche:adjust:query')")
+    public CommonResult<PageResult<StAdjustConfigRespVO>> getPage(@Valid StAdjustConfigPageReqVO pageVO) {
+        PageResult<StAdjustConfigRespVO> pageResult = stAdjustConfigService.page(pageVO);
+        return success(pageResult);
+    }
+
+    @GetMapping("/get")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('sche:adjust:query')")
+    public CommonResult<StAdjustConfigRespVO> getInfo(@RequestParam("id") String id) {
+        StAdjustConfigEntity entity = stAdjustConfigService.getInfo(id);
+        StAdjustConfigRespVO result = BeanUtils.toBean(entity, StAdjustConfigRespVO.class);
+        List<StAdjustConfigDetEntity> paramList = stAdjustConfigDetService.getListByConfigId(entity.getId());
+        result.setAdjustConfigDetList(paramList);
+        return success(result);
+    }
+
+    @PostMapping("/create")
+    @PreAuthorize("@ss.hasPermission('sche:adjust:create')")
+    public CommonResult<Boolean> create(@Valid @RequestBody StAdjustConfigSaveReqVO createReqVO) {
+        stAdjustConfigService.create(createReqVO);
+        return success(true);
+    }
+
+    @PutMapping("/update")
+    @PreAuthorize("@ss.hasPermission('sche:adjust:update')")
+    public CommonResult<Boolean> update(@Valid @RequestBody StAdjustConfigSaveReqVO updateReqVO) {
+        stAdjustConfigService.update(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('sche:adjust:delete')")
+    public CommonResult<Boolean> deleteTenant(@RequestParam("id") String id) {
+        stAdjustConfigService.delete(id);
+        return success(true);
+    }
+}
\ 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/controller/admin/StAdjustConfigResultController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StAdjustConfigResultController.java
new file mode 100644
index 0000000..d1b6306
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/controller/admin/StAdjustConfigResultController.java
@@ -0,0 +1,53 @@
+package com.iailab.module.model.mcs.sche.controller.admin;
+
+import com.iailab.framework.common.pojo.CommonResult;
+import com.iailab.framework.common.pojo.PageResult;
+import com.iailab.framework.common.util.object.BeanUtils;
+import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
+import com.iailab.module.model.mcs.sche.entity.StAdjustConfigEntity;
+import com.iailab.module.model.mcs.sche.entity.StAdjustResultEntity;
+import com.iailab.module.model.mcs.sche.service.StAdjustConfigDetService;
+import com.iailab.module.model.mcs.sche.service.StAdjustConfigService;
+import com.iailab.module.model.mcs.sche.service.StAdjustResultService;
+import com.iailab.module.model.mcs.sche.service.StScheduleRecordService;
+import com.iailab.module.model.mcs.sche.vo.*;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+import static com.iailab.framework.common.pojo.CommonResult.success;
+
+/**
+ * @author lirm
+ * @Description
+ * @createTime 2025年02月25日
+ */
+@Tag(name = "模型服务 - 模拟调整记录")
+@RestController
+@RequestMapping("/model/sche/adjust-result")
+public class StAdjustConfigResultController {
+
+    @Autowired
+    private StAdjustResultService stAdjustResultService;
+
+    @GetMapping("/get")
+    @Operation(summary = "获得调整记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public CommonResult<StAdjustResultRespVO> getInfo(@RequestParam("id") String id) {
+        StAdjustResultRespVO respVO = stAdjustResultService.getInfo(id);
+        return success(respVO);
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得调整记录分页")
+    public CommonResult<PageResult<StAdjustResultRespVO>> getPage(@Valid StAdjustResultPageReqVO pageVO) {
+        PageResult<StAdjustResultRespVO> pageResult = stAdjustResultService.page(pageVO);
+        return success(pageResult);
+    }
+}
\ 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/dao/StAdjustConfigDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustConfigDao.java
index 25bd66c..1aad151 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustConfigDao.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustConfigDao.java
@@ -1,9 +1,13 @@
 package com.iailab.module.model.mcs.sche.dao;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.iailab.framework.mybatis.core.mapper.BaseMapperX;
 import com.iailab.framework.tenant.core.db.dynamic.TenantDS;
 import com.iailab.module.model.mcs.sche.entity.StAdjustConfigEntity;
+import com.iailab.module.model.mcs.sche.vo.StAdjustConfigPageReqVO;
+import com.iailab.module.model.mcs.sche.vo.StAdjustConfigRespVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @author PanZhibao
@@ -13,4 +17,10 @@
 @TenantDS
 @Mapper
 public interface StAdjustConfigDao extends BaseMapperX<StAdjustConfigEntity> {
+
+    IPage<StAdjustConfigRespVO> getPage(IPage<StAdjustConfigEntity> page, @Param("params") StAdjustConfigPageReqVO reqVO);
+
+    default IPage<StAdjustConfigRespVO> selectPage(StAdjustConfigPageReqVO reqVO) {
+        return getPage(getPage(reqVO), reqVO);
+    }
 }
\ 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/dao/StAdjustResultDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustResultDao.java
index e41ea3d..f161cd2 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustResultDao.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustResultDao.java
@@ -1,9 +1,18 @@
 package com.iailab.module.model.mcs.sche.dao;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.iailab.framework.common.pojo.PageResult;
 import com.iailab.framework.mybatis.core.mapper.BaseMapperX;
+import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.iailab.framework.tenant.core.db.dynamic.TenantDS;
+import com.iailab.module.model.mcs.sche.entity.StAdjustConfigEntity;
 import com.iailab.module.model.mcs.sche.entity.StAdjustResultEntity;
+import com.iailab.module.model.mcs.sche.entity.StAdjustResultEntity;
+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.StAdjustResultPageReqVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @author PanZhibao
@@ -13,4 +22,10 @@
 @TenantDS
 @Mapper
 public interface StAdjustResultDao extends BaseMapperX<StAdjustResultEntity> {
+
+    IPage<StAdjustResultRespVO> getPage(IPage<StAdjustResultEntity> page, @Param("params") StAdjustResultPageReqVO reqVO);
+
+    default IPage<StAdjustResultRespVO> selectPage(StAdjustResultPageReqVO reqVO) {
+        return getPage(getPage(reqVO), reqVO);
+    }
 }
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigDetService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigDetService.java
index d88a010..6705a36 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigDetService.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigDetService.java
@@ -13,4 +13,8 @@
 public interface StAdjustConfigDetService extends BaseService<StAdjustConfigDetEntity> {
 
     List<StAdjustConfigDetEntity> getListByConfigId(String configId);
+
+    void deleteByConfigId(String configId);
+
+    void insertList(List<StAdjustConfigDetEntity> detList, String configId);
 }
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigService.java
index 87de9cd..f52d19c 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigService.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigService.java
@@ -1,10 +1,16 @@
 package com.iailab.module.model.mcs.sche.service;
 
+import com.iailab.framework.common.pojo.PageResult;
 import com.iailab.framework.common.service.BaseService;
+import com.iailab.module.model.api.mcs.dto.StAdjustConfigDTO;
 import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
 import com.iailab.module.model.mcs.sche.entity.StAdjustConfigEntity;
+import com.iailab.module.model.mcs.sche.vo.StAdjustConfigPageReqVO;
+import com.iailab.module.model.mcs.sche.vo.StAdjustConfigRespVO;
+import com.iailab.module.model.mcs.sche.vo.StAdjustConfigSaveReqVO;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author PanZhibao
@@ -17,4 +23,16 @@
 
     List<StAdjustConfigDetEntity> getDetByModelId(String modelId);
 
+    PageResult<StAdjustConfigRespVO> page(StAdjustConfigPageReqVO reqVO);
+
+    void create(StAdjustConfigSaveReqVO createReqVO);
+
+    void update(StAdjustConfigSaveReqVO createReqVO);
+
+    void delete(String id);
+
+    StAdjustConfigEntity getInfo(String id);
+
+    List<StAdjustConfigDTO> list(Map<String, Object> params);
+
 }
\ 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/StAdjustResultService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustResultService.java
index 8611414..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
@@ -1,9 +1,14 @@
 package com.iailab.module.model.mcs.sche.service;
 
+import com.iailab.framework.common.pojo.PageResult;
 import com.iailab.framework.common.service.BaseService;
 import com.iailab.module.model.mcs.sche.entity.StAdjustResultEntity;
+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.mdk.vo.DataValueVO;
 
+import javax.validation.Valid;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -15,7 +20,13 @@
  */
 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);
 }
\ 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/StAdjustConfigDetServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigDetServiceImpl.java
index f9d62f4..b984b9f 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigDetServiceImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigDetServiceImpl.java
@@ -2,13 +2,17 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.iailab.framework.common.service.impl.BaseServiceImpl;
+import com.iailab.framework.common.util.object.ConvertUtils;
 import com.iailab.module.model.mcs.sche.dao.StAdjustConfigDetDao;
 import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
+import com.iailab.module.model.mcs.sche.entity.StScheduleModelOutEntity;
 import com.iailab.module.model.mcs.sche.service.StAdjustConfigDetService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
 import java.util.List;
+import java.util.UUID;
 
 /**
  * @author PanZhibao
@@ -25,4 +29,19 @@
         queryWrapper.orderByAsc("sort");
         return baseDao.selectList(queryWrapper);
     }
+
+    @Override
+    public void deleteByConfigId(String configId) {
+        baseDao.delete(new QueryWrapper<StAdjustConfigDetEntity>().eq("config_id", configId));
+    }
+
+    @Override
+    public void insertList(List<StAdjustConfigDetEntity> detList, String configId) {
+        for (int i = 0; i < detList.size(); i++) {
+            StAdjustConfigDetEntity entity = ConvertUtils.sourceToTarget(detList.get(i), StAdjustConfigDetEntity.class);
+            entity.setId(UUID.randomUUID().toString());
+            entity.setConfigId(configId);
+            baseDao.insert(entity);
+        }
+    }
 }
\ 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/StAdjustConfigServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigServiceImpl.java
index dd5b57e..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
@@ -1,16 +1,30 @@
 package com.iailab.module.model.mcs.sche.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.fhs.core.trans.anno.Trans;
+import com.iailab.framework.common.pojo.PageResult;
 import com.iailab.framework.common.service.impl.BaseServiceImpl;
+import com.iailab.framework.common.util.object.BeanUtils;
+import com.iailab.framework.common.util.object.ConvertUtils;
+import com.iailab.module.model.api.mcs.dto.StAdjustConfigDTO;
+import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity;
 import com.iailab.module.model.mcs.sche.dao.StAdjustConfigDao;
 import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
 import com.iailab.module.model.mcs.sche.entity.StAdjustConfigEntity;
 import com.iailab.module.model.mcs.sche.service.StAdjustConfigDetService;
 import com.iailab.module.model.mcs.sche.service.StAdjustConfigService;
+import com.iailab.module.model.mcs.sche.vo.StAdjustConfigPageReqVO;
+import com.iailab.module.model.mcs.sche.vo.StAdjustConfigRespVO;
+import com.iailab.module.model.mcs.sche.vo.StAdjustConfigSaveReqVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
+import java.util.UUID;
 
 /**
  * @author PanZhibao
@@ -24,13 +38,65 @@
     @Autowired
     private StAdjustConfigDetService stAdjustConfigDetService;
 
+    @Override
+    public PageResult<StAdjustConfigRespVO> page(StAdjustConfigPageReqVO reqVO) {
+        IPage<StAdjustConfigRespVO> page = baseDao.selectPage(reqVO);
+        return new PageResult<>(page.getRecords(), page.getTotal());
+    }
+
+    @Override
+    @DSTransactional(rollbackFor = Exception.class)
+    public void create(StAdjustConfigSaveReqVO createReqVO) {
+        StAdjustConfigEntity entity = BeanUtils.toBean(createReqVO, StAdjustConfigEntity.class);
+        entity.setId(UUID.randomUUID().toString());
+        baseDao.insert(entity);
+
+        List<StAdjustConfigDetEntity> detList = createReqVO.getAdjustConfigDetList();
+        stAdjustConfigDetService.insertList(detList, entity.getId());
+    }
+
+    @Override
+    @DSTransactional(rollbackFor = Exception.class)
+    public void update(StAdjustConfigSaveReqVO updateReqVO) {
+        StAdjustConfigEntity entity = BeanUtils.toBean(updateReqVO, StAdjustConfigEntity.class);
+        baseDao.updateById(entity);
+
+        stAdjustConfigDetService.deleteByConfigId(entity.getId());
+        List<StAdjustConfigDetEntity> detList = updateReqVO.getAdjustConfigDetList();
+        stAdjustConfigDetService.insertList(detList, entity.getId());
+    }
+
+    @Override
+    @DSTransactional(rollbackFor = Exception.class)
+    public void delete(String id) {
+        baseDao.deleteById(id);
+        stAdjustConfigDetService.deleteByConfigId(id);
+    }
+
+    @Override
+    public StAdjustConfigEntity getInfo(String id) {
+        return baseDao.selectById(id);
+    }
+
+    @Override
+    public List<StAdjustConfigDTO> list(Map<String, Object> params) {
+        QueryWrapper<StAdjustConfigEntity> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("trigger_method", params.get("triggerMethod"));
+        queryWrapper.eq("trigger_condition", params.get("triggerCondition"));
+        List<StAdjustConfigEntity> list = baseDao.selectList(queryWrapper);
+        return ConvertUtils.sourceToTarget(list, StAdjustConfigDTO.class);
+    }
+
     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 68c8485..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
@@ -2,21 +2,26 @@
 
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.iailab.framework.common.pojo.PageResult;
 import com.iailab.framework.common.service.impl.BaseServiceImpl;
 import com.iailab.framework.common.util.date.DateUtils;
+import com.iailab.framework.common.util.object.ConvertUtils;
+import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity;
+import com.iailab.module.model.mcs.pre.service.MmItemOutputService;
 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.StAdjustResultPageReqVO;
+import com.iailab.module.model.mcs.sche.vo.StAdjustResultRespVO;
 import com.iailab.module.model.mdk.vo.DataValueVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 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;
 
 /**
@@ -28,19 +33,25 @@
 @Service
 public class StAdjustResultServiceImpl extends BaseServiceImpl<StAdjustResultDao, StAdjustResultEntity> implements StAdjustResultService {
 
+    @Autowired
+    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
@@ -50,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;
         }
@@ -62,4 +73,43 @@
         }
         return result;
     }
+
+    @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);
+        MmItemOutputEntity mmItemOutputEntity = mmItemOutputService.getOutPutById(entity.getOutputId());
+        result.setOutputName(mmItemOutputEntity.getResultName());
+        return result;
+    }
+
+    @Override
+    public PageResult<StAdjustResultRespVO> page(StAdjustResultPageReqVO pageVO) {
+        IPage<StAdjustResultRespVO> page = baseDao.selectPage(pageVO);
+        return new PageResult<>(page.getRecords(), page.getTotal());
+    }
 }
\ 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/vo/StAdjustConfigDetRespVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigDetRespVO.java
index e572cc3..0ba21e5 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigDetRespVO.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigDetRespVO.java
@@ -1,9 +1,32 @@
 package com.iailab.module.model.mcs.sche.vo;
 
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
 /**
  * @author PanZhibao
  * @Description
  * @createTime 2025年02月23日
  */
+@Schema(description = "模型服务 - 模拟调整配置 Response VO")
+@Data
 public class StAdjustConfigDetRespVO {
+    @Schema(description = "ID", example = "ID")
+    private String id;
+
+    private String configId;
+
+    private String item_type_id;
+
+    private String predict_item_id;
+
+    private String out_key;
+
+    private String out_name;
+
+    private Integer model_param_order;
+
+    private Integer model_param_port_order;
+
+    private Integer sort;
 }
\ 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/vo/StAdjustConfigPageReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigPageReqVO.java
index 317cf0d..7513b03 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigPageReqVO.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigPageReqVO.java
@@ -19,4 +19,7 @@
 
     @Schema(description = "模型编号,模糊匹配", example = "")
     private String modelCode;
+
+    @Schema(description = "模型名称,模糊匹配", example = "")
+    private String modelName;
 }
\ 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/vo/StAdjustConfigRespVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigRespVO.java
index 7894c5e..6a69f77 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigRespVO.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigRespVO.java
@@ -1,9 +1,40 @@
 package com.iailab.module.model.mcs.sche.vo;
 
+import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
 /**
  * @author PanZhibao
  * @Description
  * @createTime 2025年02月23日
  */
+@Schema(description = "模型服务 - 模拟调整 Response VO")
+@Data
 public class StAdjustConfigRespVO {
+    @Schema(description = "ID", example = "ID")
+    private String id;
+
+    @Schema(description = "模型ID", example = "模型ID")
+    private String scheduleModelId;
+
+    @Schema(description = "模型代码", example = "模型代码")
+    private String modelCode;
+
+    @Schema(description = "模型名称", example = "模型名称")
+    private String modelName;
+
+    @Schema(description = "备注", example = "备注")
+    private String remark;
+
+    @Schema(description = "状态(0正常 1停用)", example = "0")
+    private Integer status;
+
+    @Schema(description = "创建时间", example = "创建时间")
+    private Date createTime;
+
+    private List<StAdjustConfigDetEntity> adjustConfigDetList;
 }
\ 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/vo/StAdjustConfigSaveReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigSaveReqVO.java
new file mode 100644
index 0000000..6f324c5
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigSaveReqVO.java
@@ -0,0 +1,40 @@
+package com.iailab.module.model.mcs.sche.vo;
+
+import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author lirm
+ * @Description
+ * @createTime 2025年02月25日
+ */
+@Schema(description = "模型服务 - 调度方案创建/修改 Request VO")
+@Data
+public class StAdjustConfigSaveReqVO {
+
+    @Schema(description = "ID")
+    private String id;
+
+    @Schema(description = "模型ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "模型ID不能为空")
+    private String scheduleModelId;
+
+    @Schema(description = " 状态(0正常 1停用)")
+    private Integer status;
+
+    @Schema(description = "备注")
+    private String remark;
+
+    @Schema(description = "创建时间")
+    private Date createTime;
+
+    @Schema(description = "修改时间")
+    private Date updateTime;
+
+    private List<StAdjustConfigDetEntity> adjustConfigDetList;
+}
\ 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/vo/StAdjustResultPageReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultPageReqVO.java
index 8b9a735..3082a33 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultPageReqVO.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultPageReqVO.java
@@ -11,7 +11,7 @@
  * @Description
  * @createTime 2025年02月20日
  */
-@Schema(description = "模型服务 - 调度模型分页 Request VO")
+@Schema(description = "模型服务 - 模拟调整记录分页 Request VO")
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
@@ -23,4 +23,6 @@
     @Schema(description = "结束时间", example = "")
     private String endTime;
 
+    private String configId;
+
 }
\ 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/vo/StAdjustResultRespVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultRespVO.java
index 5a96bf3..c97d10b 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultRespVO.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultRespVO.java
@@ -1,9 +1,32 @@
 package com.iailab.module.model.mcs.sche.vo;
 
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+
 /**
  * @author PanZhibao
  * @Description
  * @createTime 2025年02月23日
  */
+@Schema(description = "模型服务 - 模拟调整记录 Response VO")
+@Data
 public class StAdjustResultRespVO {
+    @Schema(description = "ID", example = "ID")
+    private String id;
+
+    private String configId;
+
+    private String outputId;
+
+    private String outputName;
+
+    private String scheduleModelId;
+
+    private Date adjustTime;
+
+    private String adjustValue;
+
+    private String jsonValue;
 }
\ No newline at end of file
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..702ecd1 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
@@ -104,6 +104,7 @@
                 try {
                     predictResultHandler.savePredictResult(predictResult);
                 } catch (Exception e) {
+                    e.printStackTrace();
                     itemRunStatusEnum = ItemRunStatusEnum.MODELRESULTSAVEERROR;
                     throw new RuntimeException("模型结果保存异常,result:" + predictResult);
                 }
@@ -118,7 +119,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 +134,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/predict/impl/PredictModelHandlerImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java
index 7e0ac4b..9c7bd75 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java
@@ -94,7 +94,7 @@
             //IAILMDK.run
             HashMap<String, Object> modelResult = DllUtils.run(newModelBean, param2Values, predictModel.getMpkprojectid());
             //打印结果
-            log.info("预测模型计算完成:modelId=" + modelId + ",modelName=" + predictModel.getMethodname() + ",modelResult=" + JSON.toJSONString(modelResult));
+            log.info("预测模型计算完成:modelId=" + modelId + ",modelName=" + predictModel.getModelname() + ",modelResult=" + JSON.toJSONString(modelResult));
             //判断模型结果
             if (!modelResult.containsKey(CommonConstant.MDK_STATUS_CODE) || !modelResult.containsKey(CommonConstant.MDK_RESULT) ||
                     !modelResult.get(CommonConstant.MDK_STATUS_CODE).toString().equals(CommonConstant.MDK_STATUS_100)) {
@@ -196,7 +196,7 @@
             //IAILMDK.run
             HashMap<String, Object> modelResult = DllUtils.run(newModelBean, param2Values, predictModel.getMpkprojectid());
             //打印结果
-            log.info("预测模型计算完成:modelId=" + modelId + ",modelName=" + predictModel.getMethodname() + ",modelResult=" + JSON.toJSONString(modelResult));
+            log.info("预测模型计算完成:modelId=" + modelId + ",modelName=" + predictModel.getModelname() + ",modelResult=" + JSON.toJSONString(modelResult));
             //判断模型结果
             if (!modelResult.containsKey(CommonConstant.MDK_STATUS_CODE) || !modelResult.containsKey(CommonConstant.MDK_RESULT) ||
                     !modelResult.get(CommonConstant.MDK_STATUS_CODE).toString().equals(CommonConstant.MDK_STATUS_100)) {
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();
                                 }
                             }
                         }
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/DllUtils.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/DllUtils.java
index 8151cc7..5d10738 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/DllUtils.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/DllUtils.java
@@ -232,7 +232,7 @@
 
     }
 
-    public static HashMap<String, Object> run(IAILModel model, Object[] paramsValueArray, String projectId) throws Exception {
+    public static synchronized HashMap<String, Object> run(IAILModel model, Object[] paramsValueArray, String projectId) throws Exception {
         if (RSAUtils.checkLisenceBean().getCode() != 1) {
             throw new SecurityException("Lisence 不可用!");
         } else if (model == null) {
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StAdjustConfigDao.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StAdjustConfigDao.xml
new file mode 100644
index 0000000..05f8b71
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StAdjustConfigDao.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.iailab.module.model.mcs.sche.dao.StAdjustConfigDao">
+    <select id="getPage" resultType="com.iailab.module.model.mcs.sche.vo.StAdjustConfigRespVO">
+        select
+        t1.id modelId,
+        t1.model_code modelCode,
+        t1.model_name modelName,
+        t2.id,
+        t2.remark,
+        t2.status,
+        t2.create_time
+        from t_st_schedule_model t1, t_st_adjust_config t2
+        <where>
+            and t1.id = t2.schedule_model_id
+            <if test="params.modelCode != null and params.modelCode != ''">
+                and t1.model_code like CONCAT('%', #{params.modelCode},'%')
+            </if>
+            <if test="params.modelName != null and params.modelName != ''">
+                and t1.model_name like CONCAT('%', #{params.modelName},'%')
+            </if>
+        </where>
+        order by t2.create_time desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StAdjustResultDao.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StAdjustResultDao.xml
new file mode 100644
index 0000000..e7063af
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StAdjustResultDao.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.iailab.module.model.mcs.sche.dao.StAdjustResultDao">
+    <select id="getPage" resultType="com.iailab.module.model.mcs.sche.vo.StAdjustResultRespVO">
+        SELECT t1.*,t2.result_name outputName
+        FROM t_st_adjust_result t1,t_mm_item_output t2
+        <where>
+            and t1.output_id = t2.id
+            <if test="params.configId != null and params.configId != ''">
+                and t1.config_id = #{params.configId}
+            </if>
+            <if test="params.startTime != null">
+                and t1.adjust_time &gt;= #{params.startTime}
+            </if>
+            <if test="params.endTime != null">
+                and t1.adjust_time &lt;= #{params.endTime}
+            </if>
+        </where>
+        ORDER BY t1.adjust_time desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/iailab-plat-sdk/doc/demo/Demo.java b/iailab-plat-sdk/doc/demo/Demo.java
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/iailab-plat-sdk/doc/demo/Demo.java

--
Gitblit v1.9.3