From a02c1e14132c4312b2331275df1d79caad23d54f Mon Sep 17 00:00:00 2001
From: dongyukun <1208714201@qq.com>
Date: 星期二, 25 二月 2025 15:04:51 +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/entity/StAdjustResultEntity.java               |   56 ++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java           |   97 ++++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleDataConstructor.java            |   25 +
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/SourceApiEnum.java                  |    3 
 iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/McsApi.java                                     |    4 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigRespVO.java                   |    9 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigDetPageReqVO.java             |   22 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MdkController.java                 |  126 ++++++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StAdjustConfigEntity.java               |   51 ++
 iailab-module-model/iailab-module-model-biz/db/mysql.sql                                                                                  |   42 ++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustConfigDao.java                     |   16 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleConstructor.java                       |   18 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigDetRespVO.java                |    9 
 iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/StAdjustConfigDetDTO.java                   |   44 ++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigServiceImpl.java    |   36 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StAdjustConfigDetEntity.java            |   65 +++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultPageReqVO.java                |   26 +
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/HttpCollector.java                  |    7 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustResultServiceImpl.java    |   18 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/vo/HttpAsdbRespDataVO.java     |   35 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustResultService.java             |   12 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/CalItemHandler.java                 |   11 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigService.java             |   20 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/dto/SampleInfo.java                          |    3 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustConfigDetDao.java                  |   16 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java                                     |    9 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigDetServiceImpl.java |   28 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultRespVO.java                   |    9 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigDetService.java          |   16 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigPageReqVO.java                |   22 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModelHandler.java                    |   12 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustResultDao.java                     |   16 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MdkDTO.java                                     |    9 
 iailab-module-model/iailab-module-model-biz/src/main/resources/application-dev.yaml                                                       |    8 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/HttpCollectorForAsdb.java      |  247 ++++++++++++
 35 files changed, 1,130 insertions(+), 17 deletions(-)

diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/HttpCollector.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/HttpCollector.java
index 94e86af..2fcb433 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/HttpCollector.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/HttpCollector.java
@@ -7,6 +7,7 @@
  */
 
 import com.iailab.framework.common.constant.CommonConstant;
+import com.iailab.module.data.channel.http.collector.asdb.HttpCollectorForAsdb;
 import com.iailab.module.data.channel.http.collector.ihdb.HttpCollectorForIhd;
 import com.iailab.module.data.channel.http.entity.HttpApiEntity;
 import com.iailab.module.data.channel.http.service.HttpApiService;
@@ -29,6 +30,9 @@
     @Autowired
     private HttpCollectorForIhd httpCollectorForIhd;
 
+    @Autowired
+    private HttpCollectorForAsdb httpCollectorForAsdb;
+
     public Object getTagValue(String apiId, String tag) {
         HttpApiEntity httpApi = httpApiService.getFromCatch(apiId);
         if (httpApi == null) {
@@ -40,6 +44,9 @@
         if (SourceApiEnum.iHyperDB.getCode().equals(httpApi.getCode())) {
             valueMap = httpCollectorForIhd.getLastValues(apiId, tagNames);
         }
+        if (SourceApiEnum.ASDB.getCode().equals(httpApi.getCode())) {
+            valueMap = httpCollectorForAsdb.getLastValues(apiId, tagNames);
+        }
         if (valueMap.get(tag) == null) {
             return CommonConstant.BAD_VALUE;
         }
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/SourceApiEnum.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/SourceApiEnum.java
index 0022bd6..608de48 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/SourceApiEnum.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/SourceApiEnum.java
@@ -11,7 +11,8 @@
 @Getter
 @AllArgsConstructor
 public enum SourceApiEnum {
-    iHyperDB("iHyperDB", "宝信IHD");
+    iHyperDB("iHyperDB", "宝信IHD"),
+    ASDB("ASDB", "鞍钢DB");
 
     private String code;
     private String desc;
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/HttpCollectorForAsdb.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/HttpCollectorForAsdb.java
new file mode 100644
index 0000000..6b34fec
--- /dev/null
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/HttpCollectorForAsdb.java
@@ -0,0 +1,247 @@
+package com.iailab.module.data.channel.http.collector.asdb;
+
+import com.alibaba.fastjson.JSON;
+import com.iailab.framework.common.constant.CommonConstant;
+import com.iailab.framework.common.util.http.HttpUtils;
+import com.iailab.module.data.channel.http.collector.asdb.vo.HttpAsdbRespDataVO;
+import com.iailab.module.data.channel.http.entity.HttpApiEntity;
+import com.iailab.module.data.channel.http.service.HttpApiService;
+import com.iailab.module.data.common.enums.DataSourceType;
+import com.iailab.module.data.common.utils.TagUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.BoundHashOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.stream.Collectors;
+
+/**
+ * AnSteelDB采集
+ *
+ * @author Jay
+ */
+@Slf4j
+@Component
+public class HttpCollectorForAsdb {
+    private static Map<String, HttpApiEntity> apiMap = new HashMap<>();
+
+    @Autowired
+    private HttpApiService httpApiService;
+
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    ThreadPoolExecutor threadPool = new ThreadPoolExecutor(18, 36, 30, TimeUnit.SECONDS,
+            new ArrayBlockingQueue<Runnable>(36), new ThreadPoolExecutor.AbortPolicy());
+
+    private static final String STA_TRUE = "true";
+
+    private static final int GROUP_MAX_COUNT = 300;
+
+    private static final int MAX_WAIT = 30;
+
+    private static final String pattern = "yyyyMMddHHmm00";
+
+    private static final String IS_SUCCESS = "isSuccess";
+
+    /**
+     * tagName
+     */
+    private static final String N = "n";
+
+    /**
+     * dimension
+     */
+    private static final String D = "d";
+
+    /**
+     * 类型
+     */
+    private static final String P = "p";
+
+    /**
+     * dataValue
+     */
+    private static final String V = "v";
+
+    /**
+     * dataTime
+     */
+    private static final String T = "t";
+
+    /**
+     * 数据质量G:good,B:bad
+     */
+    private static final String Q = "q";
+
+    private HttpApiEntity getHttpApi(String id) {
+        if (apiMap.containsKey(id)) {
+            return apiMap.get(id);
+        }
+        HttpApiEntity httpApi = httpApiService.info(id);
+        apiMap.put(id, httpApi);
+        return httpApi;
+    }
+
+    public BigDecimal getTagValue(String sourceId, String tagNo, Integer dimension, String valueType) {
+        BigDecimal value = CommonConstant.BAD_VALUE;
+        HttpApiEntity httpApi = this.getHttpApi(sourceId);
+        String responseStr = HttpUtils.sendGet(httpApi.getUrl(), null, "");
+        if (responseStr == null) {
+            return value;
+        }
+        List<HttpAsdbRespDataVO> dataList = JSON.parseArray(responseStr, HttpAsdbRespDataVO.class);
+        value = Objects.requireNonNull(dataList.stream().filter(data -> tagNo.equals(data.getPoint())).findFirst().orElse(null)).getValue();
+        return value;
+    }
+
+    public Map<String, Object> getLastValues(String sourceId, List<String> tagNames) {
+        Map<String, Object> result = new HashMap<>();
+        HttpApiEntity httpApi = this.getHttpApi(sourceId);
+        try {
+            if (CollectionUtils.isEmpty(tagNames)) {
+                return result;
+            }
+            List<String> noCacheTagNames = new ArrayList<>();//未缓存的tag
+            for (int i = 0; i < tagNames.size(); i++) {
+                //先查缓存
+                BoundHashOperations<String, String, Object> ops = redisTemplate.boundHashOps(tagNames.get(i));
+                if (ops.get(V) != null) {
+                    BigDecimal value = new BigDecimal(ops.get(V).toString());
+                    result.put(tagNames.get(i), value.setScale(3, RoundingMode.HALF_UP));
+                } else {
+                    noCacheTagNames.add(tagNames.get(i));
+                }
+            }
+            if (CollectionUtils.isEmpty(noCacheTagNames)) {
+                log.info("全部读取缓存");
+                return result;
+            }
+            log.info("查询未缓存的数据");
+            String responseStr =  HttpUtils.sendGet(httpApi.getUrl(), null, "");
+            List<HttpAsdbRespDataVO> dataList = JSON.parseArray(responseStr, HttpAsdbRespDataVO.class);
+            List<HttpAsdbRespDataVO> noCacheDataList = dataList.stream().filter(data -> noCacheTagNames.contains(data.getPoint())).collect(Collectors.toList());
+            for (HttpAsdbRespDataVO data : noCacheDataList ){
+                if (data.getValue() != null){
+                    //存缓存
+                    BoundHashOperations<String, String, Object> ops = redisTemplate.boundHashOps(data.getValue().toString());
+                    ops.put(V, data.getValue().toString());
+                    //设置过期时间
+                    redisTemplate.expire(data.getValue().toString(), 10, TimeUnit.SECONDS);
+                    //把查询到的数据插入结果集
+                    BigDecimal value = new BigDecimal(data.getValue().toString());
+                    result.put(data.getPoint(), value.setScale(3, RoundingMode.HALF_UP));
+                } else {
+                    result.put(data.getPoint(), CommonConstant.BAD_VALUE);
+                }
+            }
+        } catch (Exception ex) {
+            log.info("getCurrentValue异常");
+            ex.printStackTrace();
+            throw ex;
+        }
+        return result;
+    }
+
+    public Map<String, Object> getTagValues(List<Object[]> params, Date collectTime) {
+        Map<String, Object> result = new HashMap<>();
+        if (CollectionUtils.isEmpty(params)) {
+            return new HashMap<>();
+        }
+        try {
+            Map<Integer, List<Object[]>> measurePointsCountGroup = new HashMap<>();
+            int pointListSize = params.size();
+            int groupCount = pointListSize / GROUP_MAX_COUNT + ((pointListSize % GROUP_MAX_COUNT) > 0 ? 1 : 0);
+            log.info("groupCount=" + groupCount);
+            for (int i = 0; i < groupCount; i++) {
+                int end = (i + 1) * GROUP_MAX_COUNT;
+                if (end > pointListSize) {
+                    end = pointListSize;
+                }
+                measurePointsCountGroup.put(i, params.subList(i * GROUP_MAX_COUNT, end));
+            }
+            log.info("measurePointsCountGroup.size()=" + measurePointsCountGroup.size());
+            result = new ConcurrentHashMap<>(params.size());
+            CountDownLatch countDownLatch = new CountDownLatch(measurePointsCountGroup.size());
+            for (Map.Entry<Integer, List<Object[]>> measurePointsItem : measurePointsCountGroup.entrySet()) {
+                HttpApiEntity httpApi = this.getHttpApi(measurePointsItem.getValue().get(0)[0].toString());
+                // 并发
+                Thread.sleep(1000);
+                threadPool.submit(new Task(httpApi.getUrl(), httpApi.getCode(), result, measurePointsItem.getValue(),
+                        collectTime, countDownLatch));
+                // 顺序
+                //this.getByHtp(result, measurePointsItem.getValue(), collectTime);
+            }
+            countDownLatch.await(MAX_WAIT, TimeUnit.SECONDS);
+
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * 异步采集任务
+     */
+    private class Task implements Runnable {
+        String url;
+        String sourceName;
+        Date collectTime;
+        Map<String, Object> result;
+        List<Object[]> params;
+        CountDownLatch countDownLatch;
+
+        public Task(String url, String sourceName, Map<String, Object> result, List<Object[]> params,
+                    Date collectTime, CountDownLatch countDownLatch) {
+            this.url = url;
+            this.sourceName = sourceName;
+            this.result = result;
+            this.collectTime = collectTime;
+            this.params = params;
+            this.countDownLatch = countDownLatch;
+        }
+
+        @Override
+        public void run() {
+            try {
+                log.info("请求的Tag数量:" + params.size());
+                this.getByHtp(url, sourceName, result, params, collectTime);
+                log.info("请求结束:url=" + url);
+            } catch (Exception ex) {
+                log.info("获取采集值失败," + ex.getMessage());
+                ex.printStackTrace();
+            } finally {
+                countDownLatch.countDown();
+            }
+        }
+
+        /**
+         * getTagDataByHttp
+         *
+         * @param url
+         * @param sourceName
+         * @param result
+         * @param params
+         * @param collectTime
+         */
+        private void getByHtp(String url, String sourceName, Map<String, Object> result, List<Object[]> params, Date collectTime) {
+            String responseStr =  HttpUtils.sendGet(url, null, "");
+            List<HttpAsdbRespDataVO> dataList = JSON.parseArray(responseStr, HttpAsdbRespDataVO.class);
+            for (HttpAsdbRespDataVO data : dataList){
+                result.put(TagUtils.genTagId(DataSourceType.HTTP.getCode(), sourceName, data.getPoint()), data.getValue());
+            }
+        }
+    }
+
+    private void getByHtp(String url, String sourceName, Map<String, Object> result, List<Object[]> params, Date collectTime) {String responseStr =  HttpUtils.sendGet(url, null, "");
+        List<HttpAsdbRespDataVO> dataList = JSON.parseArray(responseStr, HttpAsdbRespDataVO.class);
+        for (HttpAsdbRespDataVO data : dataList){
+            result.put(TagUtils.genTagId(DataSourceType.HTTP.getCode(), sourceName, data.getPoint()), data.getValue());
+        }}
+}
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/vo/HttpAsdbRespDataVO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/vo/HttpAsdbRespDataVO.java
new file mode 100644
index 0000000..213055d
--- /dev/null
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/vo/HttpAsdbRespDataVO.java
@@ -0,0 +1,35 @@
+package com.iailab.module.data.channel.http.collector.asdb.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+
+/**
+ * @author Jay
+ */
+@Schema(description = "数据平台 - KioDevice Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class HttpAsdbRespDataVO {
+
+
+    @Schema(description = "点位名称")
+    @ExcelProperty("点位名称")
+    private String pointName;
+
+    @Schema(description = "数据名称")
+    @ExcelProperty("数据名称")
+    private String dataName;
+
+    @Schema(description = "数据值")
+    @ExcelProperty("数据值")
+    private BigDecimal value;
+
+    @Schema(description = "点位编号")
+    @ExcelProperty("点位编号")
+    private String point;
+}
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/CalItemHandler.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/CalItemHandler.java
index 48a3c7b..6f78ab8 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/CalItemHandler.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/handler/CalItemHandler.java
@@ -10,7 +10,6 @@
 import com.iailab.module.data.ind.item.service.IndItemService;
 import com.iailab.module.data.ind.item.vo.IndItemCalVO;
 import com.iailab.module.data.ind.item.vo.IndItemValueVO;
-import com.iailab.module.data.ind.value.service.IndItemValueService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -118,16 +117,21 @@
                 }
                 IndItemEntity subItem = indItemService.getInfoByNo(s);
                 ItemTypeEnum itemType = ItemTypeEnum.getEumByCode(subItem.getItemType());
+                List<IndItemValueVO> vl = new ArrayList<>();
                 switch (itemType) {
                     case ATOM:
-                        valueMix.add(atomItemHandler.queryValue(subItem.getId()));
+                        vl = atomItemHandler.queryValue(subItem.getId());
                         break;
                     case DER:
-                        valueMix.add(derItemHandler.queryValue(subItem.getId(), startTime, endTime));
+                        vl = derItemHandler.queryValue(subItem.getId(), startTime, endTime);
                         break;
                     default:
                         break;
                 }
+                if (!CollectionUtils.isEmpty(vl)) {
+                    vl.forEach(vi -> vi.setItemNo(s));
+                }
+                valueMix.add(vl);
             }
             dataLength = valueMix.get(0).size();
 
@@ -137,6 +141,7 @@
                     IndItemValueVO valueDTO = valueMix.get(j).get(i);
                     dataMap.put(valueDTO.getItemNo(), valueDTO);
                 }
+                log.info("dataMap:" + dataMap);
                 IndItemValueVO itemValue = this.singleCompute(indItem, dataMap);
                 result.add(itemValue);
             }
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 3bd1bf7..dded6ad 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
@@ -127,4 +127,8 @@
     @Operation(summary = "修改调度模型配置")
     Boolean updateScheduleModelSetting(@RequestParam("modelCode") String modelCode, @RequestParam("key") String key, @RequestParam("value") String value);
 
+    @GetMapping(PREFIX + "/schedule/adjust/config-list")
+    @Operation(summary = "获取模拟调整配置")
+    List<StAdjustConfigDetDTO> getAdjustConfigListByModelId(@RequestParam("modelId") String modelId);
+
 }
\ 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/StAdjustConfigDetDTO.java b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/StAdjustConfigDetDTO.java
new file mode 100644
index 0000000..c83d2d0
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mcs/dto/StAdjustConfigDetDTO.java
@@ -0,0 +1,44 @@
+package com.iailab.module.model.api.mcs.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+@Schema(description = "RPC 模型 - 模拟调整配置详情 DTO")
+@Data
+public class StAdjustConfigDetDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "ID")
+    private String id;
+
+    @Schema(description = "配置ID")
+    private String configId;
+
+    @Schema(description = "预测项类型")
+    private String itemTypeId;
+
+    @Schema(description = "预测项ID")
+    private String predictItemId;
+
+    @Schema(description = "输出KEY")
+    private String outKey;
+
+    @Schema(description = "输出名称")
+    private String outName;
+
+    @Schema(description = "参数排序")
+    private Integer modelParamOrder;
+
+    @Schema(description = "输入排序")
+    private Integer modelParamPortOrder;
+
+    @Schema(description = "执行顺序")
+    private Integer sort;
+}
\ No newline at end of file
diff --git a/iailab-module-model/iailab-module-model-biz/db/mysql.sql b/iailab-module-model/iailab-module-model-biz/db/mysql.sql
index 417acc3..3346f5f 100644
--- a/iailab-module-model/iailab-module-model-biz/db/mysql.sql
+++ b/iailab-module-model/iailab-module-model-biz/db/mysql.sql
@@ -900,4 +900,44 @@
 
 alter table t_mm_item_output add column `iscumulant` tinyint default false COMMENT '是否累计';
 alter table t_mm_item_output add column `cumuldivisor` int DEFAULT NULL COMMENT '累计除数';
-alter table t_mm_item_output add column `cumulpoint` varchar(36) DEFAULT NULL, COMMENT '累计测点';
\ No newline at end of file
+alter table t_mm_item_output add column `cumulpoint` varchar(36) DEFAULT NULL, COMMENT '累计测点';
+
+
+CREATE TABLE `t_st_adjust_config` (
+                                      `id` varchar(36) NOT NULL COMMENT 'ID',
+                                      `schedule_model_id` varchar(36) DEFAULT NULL COMMENT '调度模型ID',
+                                      `remark` varchar(200) DEFAULT NULL COMMENT '备注',
+                                      `status`          tinyint DEFAULT 1 COMMENT '状态',
+                                      create_time     datetime default current_timestamp,
+                                      update_time     datetime default current_timestamp,
+                                      PRIMARY KEY (`id`) USING BTREE,
+                                      INDEX `idx_schedule_model_id`(`schedule_model_id` ASC) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='模拟调整配置表';
+
+CREATE TABLE `t_st_adjust_config_det` (
+                                      `id` varchar(36) NOT NULL COMMENT 'ID',
+                                      `config_id` varchar(36) DEFAULT NULL COMMENT '配置ID',
+                                      `item_type_id` varchar(36) DEFAULT NULL COMMENT '预测项类型',
+                                      `predict_item_id` varchar(36) DEFAULT NULL COMMENT '预测项ID',
+                                      `out_key` varchar(50) DEFAULT NULL COMMENT '输出KEY',
+                                      `out_name` varchar(50) DEFAULT NULL COMMENT '输出名称',
+                                      `model_param_order`     integer DEFAULT NULL COMMENT '参数排序',
+                                      `model_param_port_order` integer DEFAULT NULL COMMENT '输入排序',
+                                      `sort`              integer COMMENT '执行顺序',
+                                      PRIMARY KEY (`id`) USING BTREE,
+                                      INDEX `idx_config_id`(`config_id` ASC) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='模拟调整配置详细表';
+
+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',
+                                                 `schedule_model_id` varchar(36) DEFAULT NULL COMMENT '调度模型ID',
+                                                 `adjust_time` datetime NULL DEFAULT NULL COMMENT '模拟调整时间',
+                                                 `adjust_value` varchar(500) DEFAULT NULL COMMENT '模拟调整值',
+                                                 `json_value` varchar(1000) DEFAULT NULL COMMENT '模拟调整结果',
+                                                 PRIMARY KEY (`id`) USING BTREE,
+                                                 INDEX `idx_output_id`(`output_id` ASC) USING BTREE,
+                                                 INDEX `idx_schedule_model_id`(`schedule_model_id` ASC) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 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 3ec5fef..7a3a97b 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
@@ -27,6 +27,7 @@
 import com.iailab.module.model.mcs.pre.vo.MmItemOutputRespVO;
 import com.iailab.module.model.mcs.pre.vo.MmPredictAlarmMessageSaveReqVO;
 import com.iailab.module.model.mcs.pre.vo.MmPredictItemRespVO;
+import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
 import com.iailab.module.model.mcs.sche.entity.StScheduleModelEntity;
 import com.iailab.module.model.mcs.sche.entity.StScheduleSuggestEntity;
 import com.iailab.module.model.mcs.sche.service.*;
@@ -113,6 +114,8 @@
     @Autowired
     private StScheduleModelSettingService stScheduleModelSettingService;
 
+    @Autowired
+    private StAdjustConfigService stAdjustConfigService;
 
     private int HOUR_MINS = 60;
 
@@ -801,6 +804,12 @@
         return true;
     }
 
+    @Override
+    public List<StAdjustConfigDetDTO> getAdjustConfigListByModelId(String modelId) {
+        List<StAdjustConfigDetEntity> list = stAdjustConfigService.getDetByModelId(modelId);
+        return ConvertUtils.sourceToTarget(list, StAdjustConfigDetDTO.class);
+    }
+
     /**
      * 计算功率因数 p²/(根号:p²+Q²)
      **/
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
new file mode 100644
index 0000000..25bd66c
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustConfigDao.java
@@ -0,0 +1,16 @@
+package com.iailab.module.model.mcs.sche.dao;
+
+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 org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+@TenantDS
+@Mapper
+public interface StAdjustConfigDao extends BaseMapperX<StAdjustConfigEntity> {
+}
\ 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/StAdjustConfigDetDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustConfigDetDao.java
new file mode 100644
index 0000000..20cd0cf
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustConfigDetDao.java
@@ -0,0 +1,16 @@
+package com.iailab.module.model.mcs.sche.dao;
+
+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.StAdjustConfigDetEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+@TenantDS
+@Mapper
+public interface StAdjustConfigDetDao extends BaseMapperX<StAdjustConfigDetEntity> {
+}
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
new file mode 100644
index 0000000..e41ea3d
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StAdjustResultDao.java
@@ -0,0 +1,16 @@
+package com.iailab.module.model.mcs.sche.dao;
+
+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.StAdjustResultEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+@TenantDS
+@Mapper
+public interface StAdjustResultDao extends BaseMapperX<StAdjustResultEntity> {
+}
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StAdjustConfigDetEntity.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StAdjustConfigDetEntity.java
new file mode 100644
index 0000000..8a02b27
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StAdjustConfigDetEntity.java
@@ -0,0 +1,65 @@
+package com.iailab.module.model.mcs.sche.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月20日
+ */
+@Data
+@TableName("t_st_adjust_config_det")
+public class StAdjustConfigDetEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id",type = IdType.INPUT)
+    private String id;
+
+    /**
+     * 配置ID
+     */
+    private String configId;
+
+    /**
+     * 预测项类型
+     */
+    private String itemTypeId;
+
+    /**
+     * 预测项ID
+     */
+    private String predictItemId;
+
+    /**
+     * 输出KEY
+     */
+    private String outKey;
+
+    /**
+     * 输出名称
+     */
+    private String outName;
+
+    /**
+     * 参数排序
+     */
+    private Integer modelParamOrder;
+
+    /**
+     * 输入排序
+     */
+    private Integer modelParamPortOrder;
+
+    /**
+     * 执行顺序
+     */
+    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/entity/StAdjustConfigEntity.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StAdjustConfigEntity.java
new file mode 100644
index 0000000..fae593c
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StAdjustConfigEntity.java
@@ -0,0 +1,51 @@
+package com.iailab.module.model.mcs.sche.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月20日
+ */
+@Data
+@TableName("t_st_adjust_config")
+public class StAdjustConfigEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id",type = IdType.INPUT)
+    private String id;
+
+    /**
+     * 调度模型ID
+     */
+    private String scheduleModelId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 状态
+     */
+    private Integer status;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 修改时间
+     */
+    private Date updateTime;
+}
\ 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/entity/StAdjustResultEntity.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StAdjustResultEntity.java
new file mode 100644
index 0000000..4770b0b
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/entity/StAdjustResultEntity.java
@@ -0,0 +1,56 @@
+package com.iailab.module.model.mcs.sche.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月20日
+ */
+@Data
+@TableName("t_st_adjust_result")
+public class StAdjustResultEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id",type = IdType.INPUT)
+    private String id;
+
+    /**
+     * 配置ID
+     */
+    private String configId;
+
+    /**
+     * 预测项输出ID
+     */
+    private String outputId;
+
+    /**
+     * 调度模型ID
+     */
+    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/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
new file mode 100644
index 0000000..d88a010
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigDetService.java
@@ -0,0 +1,16 @@
+package com.iailab.module.model.mcs.sche.service;
+
+import com.iailab.framework.common.service.BaseService;
+import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
+
+import java.util.List;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+public interface StAdjustConfigDetService extends BaseService<StAdjustConfigDetEntity> {
+
+    List<StAdjustConfigDetEntity> getListByConfigId(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
new file mode 100644
index 0000000..87de9cd
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustConfigService.java
@@ -0,0 +1,20 @@
+package com.iailab.module.model.mcs.sche.service;
+
+import com.iailab.framework.common.service.BaseService;
+import com.iailab.module.model.mcs.sche.entity.StAdjustConfigDetEntity;
+import com.iailab.module.model.mcs.sche.entity.StAdjustConfigEntity;
+
+import java.util.List;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+public interface StAdjustConfigService extends BaseService<StAdjustConfigEntity> {
+
+    StAdjustConfigEntity getByModelId(String modelId);
+
+    List<StAdjustConfigDetEntity> getDetByModelId(String modelId);
+
+}
\ 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
new file mode 100644
index 0000000..d6f9673
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StAdjustResultService.java
@@ -0,0 +1,12 @@
+package com.iailab.module.model.mcs.sche.service;
+
+import com.iailab.framework.common.service.BaseService;
+import com.iailab.module.model.mcs.sche.entity.StAdjustResultEntity;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+public interface StAdjustResultService extends BaseService<StAdjustResultEntity> {
+}
\ 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
new file mode 100644
index 0000000..f9d62f4
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigDetServiceImpl.java
@@ -0,0 +1,28 @@
+package com.iailab.module.model.mcs.sche.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.iailab.framework.common.service.impl.BaseServiceImpl;
+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.service.StAdjustConfigDetService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+@Slf4j
+@Service
+public class StAdjustConfigDetServiceImpl extends BaseServiceImpl<StAdjustConfigDetDao, StAdjustConfigDetEntity> implements StAdjustConfigDetService {
+
+    public List<StAdjustConfigDetEntity> getListByConfigId(String configId) {
+        QueryWrapper<StAdjustConfigDetEntity> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("config_id", configId);
+        queryWrapper.orderByAsc("sort");
+        return baseDao.selectList(queryWrapper);
+    }
+}
\ 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
new file mode 100644
index 0000000..dd5b57e
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustConfigServiceImpl.java
@@ -0,0 +1,36 @@
+package com.iailab.module.model.mcs.sche.service.impl;
+
+import com.iailab.framework.common.service.impl.BaseServiceImpl;
+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 lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+@Slf4j
+@Service
+public class StAdjustConfigServiceImpl extends BaseServiceImpl<StAdjustConfigDao, StAdjustConfigEntity> implements StAdjustConfigService {
+
+    @Autowired
+    private StAdjustConfigDetService stAdjustConfigDetService;
+
+    public StAdjustConfigEntity getByModelId(String modelId) {
+        return baseDao.selectOne("schedule_model_id", modelId);
+    }
+
+
+    public List<StAdjustConfigDetEntity> getDetByModelId(String modelId) {
+        StAdjustConfigEntity configEntity = getByModelId(modelId);
+        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
new file mode 100644
index 0000000..1f93c8a
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StAdjustResultServiceImpl.java
@@ -0,0 +1,18 @@
+package com.iailab.module.model.mcs.sche.service.impl;
+
+import com.iailab.framework.common.service.impl.BaseServiceImpl;
+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 lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+@Slf4j
+@Service
+public class StAdjustResultServiceImpl extends BaseServiceImpl<StAdjustResultDao, StAdjustResultEntity> implements StAdjustResultService {
+}
\ 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/StAdjustConfigDetPageReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigDetPageReqVO.java
new file mode 100644
index 0000000..1c2ac1f
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigDetPageReqVO.java
@@ -0,0 +1,22 @@
+package com.iailab.module.model.mcs.sche.vo;
+
+import com.iailab.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月20日
+ */
+@Schema(description = "模型服务 - 调度模型分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class StAdjustConfigDetPageReqVO extends PageParam {
+
+    @Schema(description = "配置ID", example = "")
+    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/StAdjustConfigDetRespVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigDetRespVO.java
new file mode 100644
index 0000000..e572cc3
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigDetRespVO.java
@@ -0,0 +1,9 @@
+package com.iailab.module.model.mcs.sche.vo;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+public class StAdjustConfigDetRespVO {
+}
\ 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
new file mode 100644
index 0000000..317cf0d
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigPageReqVO.java
@@ -0,0 +1,22 @@
+package com.iailab.module.model.mcs.sche.vo;
+
+import com.iailab.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月20日
+ */
+@Schema(description = "模型服务 - 调度模型分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class StAdjustConfigPageReqVO extends PageParam {
+
+    @Schema(description = "模型编号,模糊匹配", example = "")
+    private String modelCode;
+}
\ 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
new file mode 100644
index 0000000..7894c5e
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustConfigRespVO.java
@@ -0,0 +1,9 @@
+package com.iailab.module.model.mcs.sche.vo;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+public class StAdjustConfigRespVO {
+}
\ 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
new file mode 100644
index 0000000..8b9a735
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultPageReqVO.java
@@ -0,0 +1,26 @@
+package com.iailab.module.model.mcs.sche.vo;
+
+import com.iailab.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月20日
+ */
+@Schema(description = "模型服务 - 调度模型分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class StAdjustResultPageReqVO extends PageParam {
+
+    @Schema(description = "开始时间", example = "")
+    private String startTime;
+
+    @Schema(description = "结束时间", example = "")
+    private String endTime;
+
+}
\ 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
new file mode 100644
index 0000000..5a96bf3
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/vo/StAdjustResultRespVO.java
@@ -0,0 +1,9 @@
+package com.iailab.module.model.mcs.sche.vo;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2025年02月23日
+ */
+public class StAdjustResultRespVO {
+}
\ 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/PredictModelHandler.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModelHandler.java
index aa8b06e..f173849 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModelHandler.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModelHandler.java
@@ -23,4 +23,16 @@
      * @throws ModelInvokeException
      */
     PredictResultVO predictByModel(Date predictTime, MmPredictModelEntity predictModel,String itemName,String itemNo) throws ModelInvokeException;
+
+    /**
+     * 预测,模拟调整
+     *
+     * @param predictTime
+     * @param predictModel
+     * @param itemName
+     * @param itemNo
+     * @param deviation
+     * @return
+     */
+    PredictResultVO predictByModel(Date predictTime, MmPredictModelEntity predictModel,String itemName,String itemNo, double[][] deviation) throws ModelInvokeException;
 }
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 dd80a49..466ee10 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
@@ -151,6 +151,103 @@
     }
 
     /**
+     * 预测,模拟调整
+     *
+     * @param predictTime
+     * @param predictModel
+     * @param itemName
+     * @param itemNo
+     * @return
+     * @throws ModelInvokeException
+     */
+    @Override
+    public synchronized PredictResultVO predictByModel(Date predictTime, MmPredictModelEntity predictModel,String itemName,String itemNo, double[][] deviation) throws ModelInvokeException {
+        PredictResultVO result = new PredictResultVO();
+        if (predictModel == null) {
+            throw new ModelInvokeException("modelEntity is null");
+        }
+        String modelId = predictModel.getId();
+        try {
+            List<SampleData> sampleDataList = sampleConstructor.constructSample(TypeA.Predict.name(), modelId, predictTime, itemName, new HashMap<>());
+            String modelPath = predictModel.getModelpath();
+            if (modelPath == null) {
+                log.info("模型路径不存在,modelId=" + modelId);
+                return null;
+            }
+            IAILModel newModelBean = composeNewModelBean(predictModel);
+            HashMap<String, Object> settings = getPredictSettingsByModelId(modelId);
+            // 校验setting必须有pyFile,否则可能导致程序崩溃
+            if (!settings.containsKey(MdkConstant.PY_FILE_KEY)) {
+                throw new RuntimeException("模型设置参数缺少必要信息【" + MdkConstant.PY_FILE_KEY +  "】,请重新上传模型!");
+            }
+
+            if (settings == null) {
+                log.error("模型setting不存在,modelId=" + modelId);
+                return null;
+            }
+            int portLength = sampleDataList.size();
+            Object[] param2Values = new Object[portLength + 2];
+            for (int i = 0; i < portLength; i++) {
+                param2Values[i] = sampleDataList.get(i).getMatrix();
+            }
+            param2Values[portLength] = newModelBean.getDataMap().get("models");
+            param2Values[portLength + 1] = settings;
+
+            log.info("####################### 模拟调整 "+ "【itemId:" + predictModel.getItemid() + ",itemName:" + itemName + ",itemNo:" + itemNo + "】 ##########################");
+            log.info("参数: " + JSON.toJSONString(param2Values));
+
+            //IAILMDK.run
+            HashMap<String, Object> modelResult = DllUtils.run(newModelBean, param2Values, predictModel.getMpkprojectid());
+            //打印结果
+            log.info("预测模型计算完成:modelId=" + modelId + ",modelName=" + predictModel.getMethodname() + ",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)) {
+                throw new ModelResultErrorException("模型结果异常:" + modelResult);
+            }
+            modelResult = (HashMap<String, Object>) modelResult.get(CommonConstant.MDK_RESULT);
+
+            List<MmItemOutputEntity> itemOutputList = mmItemOutputService.getByItemid(predictModel.getItemid());
+            Map<MmItemOutputEntity, double[]> predictMatrixs = new HashMap<>();
+            for (MmItemOutputEntity output : itemOutputList) {
+                if (!modelResult.containsKey(output.getResultstr())) {
+                    continue;
+                }
+                OutResultType outResultType = OutResultType.getEumByCode(output.getResultType());
+                switch (outResultType) {
+                    case D1:
+                        double[] temp1 = (double[]) modelResult.get(output.getResultstr());
+                        predictMatrixs.put(output, temp1);
+                        break;
+                    case D2:
+                        double[][] temp2 = (double[][]) modelResult.get(output.getResultstr());
+                        double[] tempColumn = new double[temp2.length];
+                        for (int i = 0; i < tempColumn.length; i++) {
+                            tempColumn[i] = temp2[i][output.getResultIndex()];
+                        }
+                        predictMatrixs.put(output, tempColumn);
+                        break;
+                    case D:
+                        Double temp3 = (Double) modelResult.get(output.getResultstr());
+                        predictMatrixs.put(output, new double[]{temp3});
+                        break;
+                    default:
+                        break;
+                }
+            }
+            result.setPredictMatrixs(predictMatrixs);
+            result.setModelResult(modelResult);
+            result.setPredictTime(predictTime);
+        } catch (ModelResultErrorException ex) {
+            log.error("模型结果异常", ex);
+            throw ex;
+        } catch (Exception ex) {
+            log.error("调用发生异常,异常信息为:{0}", ex.getMessage());
+            throw new ModelInvokeException(ex.getMessage());
+        }
+        return result;
+    }
+    /**
      * 构造IAILMDK.run()方法的newModelBean参数
      *
      * @param predictModel
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 c2bfd25..cfe224f 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
@@ -31,6 +31,7 @@
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -88,6 +89,8 @@
             }
         }
 
+        int deviationIndex = 0;
+
         //对每个爪分别进行计算
         for (ColumnItemPort entry : sampleInfo.getColumnInfo()) {
             double[][] matrix = new double[0][0];
@@ -129,10 +132,30 @@
                     }
                 }
 
+                //找出对应的调整值
+                double[] deviationItem = null;
+                if (sampleInfo.getDeviation() != null && sampleInfo.getDeviation().length > 0) {
+                    deviationItem = sampleInfo.getDeviation()[deviationIndex];
+                }
+                deviationIndex ++;
+
                 //对每一项依次进行数据查询,然后将查询出的值赋给matrix对应的位置
                 for (int i = 0; i < entry.getColumnItemList().size(); i++) {
                     try {
                         List<DataValueVO> dataEntityList = getData(entry.getColumnItemList().get(i), pointMap, planMap,indMap);
+
+                        //设置调整值
+                        if (deviationItem != null && deviationItem.length > 0) {
+                            logger.info("设置调整值, i = " + i);
+                            if (deviationItem[i] <= 0) {
+                                continue;
+                            }
+                            for(int dataKey = 1; dataKey < dataEntityList.size(); dataKey ++) {
+                                DataValueVO item = dataEntityList.get(dataKey);
+                                item.setDataValue(item.getDataValue() + deviationItem[i]);
+                            }
+                        }
+
                         //补全数据
                         ColumnItem columnItem = entry.getColumnItemList().get(i);
                         dataEntityList = super.completionData(matrix.length, dataEntityList, columnItem.startTime, columnItem.endTime, columnItem.getParamType(),columnItem.getGranularity());
@@ -153,8 +176,6 @@
                     }
                 }
             }
-
-
             SampleData sampleData = new SampleData();
             sampleData.setMatrix(matrix);
             sampleDataList.add(sampleData);
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleConstructor.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleConstructor.java
index 32e0930..c50083b 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleConstructor.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleConstructor.java
@@ -44,4 +44,22 @@
 
 
     }
+
+    public List<SampleData> constructSample(String typeA, String modelId, Date runTime,String itemName,
+                                            Map<Integer, Integer> dynamicDataLength, double[][] deviation) throws ModelInvokeException {
+        try {
+            SampleInfoConstructor sampleInfoConstructor = sampleFactory.createSampleInfo(typeA, modelId);
+            SampleInfo sampleInfo = sampleInfoConstructor.prepareSampleInfo(modelId, runTime, dynamicDataLength);
+            sampleInfo.setDeviation(deviation);
+            SampleDataConstructor sampleDataConstructor = sampleFactory.createSampleData(typeA);
+            return sampleDataConstructor.prepareSampleData(sampleInfo);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("获取模型的算法参数异常",e);
+            throw new ModelInvokeException(MessageFormat.format("{0},Name:{1}",
+                    ModelInvokeException.errorGetModelArithParam, itemName));
+        }
+
+
+    }
 }
\ No newline at end of file
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/dto/SampleInfo.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/dto/SampleInfo.java
index 065002a..fe54b94 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/dto/SampleInfo.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/dto/SampleInfo.java
@@ -33,7 +33,8 @@
 
     private Integer sampleCycle;
 
-    private BigDecimal[][] deviation;
+    // 调整值
+    private double[][] deviation;
     // 所有测点信息,避免重复查询
     private Map<String, ApiPointDTO> pointMap;
     // 所有计划数据信息,避免重复查询
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MdkController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MdkController.java
index 7b75ee9..bdc4272 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MdkController.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MdkController.java
@@ -2,8 +2,14 @@
 
 import cn.hutool.cache.CacheUtil;
 import cn.hutool.cache.impl.FIFOCache;
+import cn.hutool.core.io.FileUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
+import com.iail.IAILMDK;
+import com.iail.bean.FieldSet;
+import com.iail.bean.Property;
+import com.iail.bean.SelectItem;
+import com.iail.model.IAILModel;
 import com.iail.utils.RSAUtils;
 import com.iailab.framework.common.exception.enums.GlobalErrorCodeConstants;
 import com.iailab.framework.common.pojo.CommonResult;
@@ -16,18 +22,21 @@
 import com.iailab.module.model.mpk.dto.MethodSettingDTO;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
 import java.io.File;
+import java.io.IOException;
 import java.lang.reflect.Method;
 import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.UUID;
+import java.net.URLEncoder;
+import java.nio.file.Files;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import static com.iailab.framework.common.pojo.CommonResult.error;
 import static com.iailab.framework.common.pojo.CommonResult.success;
@@ -44,7 +53,7 @@
     @Value("${mpk.bak-file-path}")
     private String mpkBakFilePath;
 
-    // 先进先出缓存
+    // 先进先出缓存 临时保存导入的数据
     private static FIFOCache<String, String> cache = CacheUtil.newFIFOCache(100);
 
     /**
@@ -142,6 +151,113 @@
         }
     }
 
+    private IAILModel createModelBean(MdkDTO dto) {
+        IAILModel modelBean = new IAILModel();
+
+        //ParamPathList
+        List<String> paramPathList = new ArrayList<>();
+        List<String> paramNameList = new ArrayList<>();
+
+        for (Map.Entry<String, Object> entry : dto.getModel().entrySet()) {
+            paramNameList.add(entry.getKey());
+            paramPathList.add(entry.getValue().toString());
+        }
+        modelBean.setParamNameList(paramNameList);
+        modelBean.setParamPathList(paramPathList);
+        //ClassName MethodName
+        modelBean.setClassName(dto.getClassName());
+        modelBean.setMethodName(dto.getMethodName());
+        //ParamsArray
+        int paramLength = dto.getHasModel() ? dto.getDataLength() + 2 : dto.getDataLength() + 1;
+        Class<?>[] paramsArray = new Class[paramLength];
+
+        for (int i = 0; i < dto.getDataLength(); i++) {
+            paramsArray[i] = double[][].class;
+        }
+
+        if (dto.getHasModel()) {
+            paramsArray[dto.getDataLength()] = HashMap.class;
+            paramsArray[dto.getDataLength() + 1] = HashMap.class;
+        }else {
+            paramsArray[dto.getDataLength()] = HashMap.class;
+        }
+        modelBean.setParamsArray(paramsArray);
+        //LoadFieldSetList
+        List<FieldSet> loadFieldSetList = new ArrayList<>();
+        FieldSet fieldSet = new FieldSet();
+        fieldSet.setFieldName("");
+        List<Property> propertyList = new ArrayList<>();
+        for (MethodSettingDTO modelSetting : dto.getPredModelSettings()) {
+            Property property = new Property();
+            property.setKey(modelSetting.getSettingKey());
+            property.setName(modelSetting.getName());
+            property.setType(modelSetting.getType());
+            property.setValueType(modelSetting.getValueType());
+            property.setMin(modelSetting.getMin() == null ? "" : modelSetting.getMin().toString());
+            property.setMax(modelSetting.getMax() == null ? "" : modelSetting.getMax().toString());
+            property.setSelectItemList(CollectionUtils.isEmpty(modelSetting.getSettingSelects()) ? null : modelSetting.getSettingSelects().stream().map(e -> new SelectItem(e.getSelectKey(),e.getName())).collect(Collectors.toList()));
+            property.setValue(modelSetting.getValue());
+            property.setFlow(false);
+            propertyList.add(property);
+        }
+        fieldSet.setPropertyList(propertyList);
+        loadFieldSetList.add(fieldSet);
+        modelBean.setLoadFieldSetList(loadFieldSetList);
+        //SettingConfigMap
+        Map<String, Object> settingConfigMap = new HashMap<String, Object>();
+        List<com.iail.bean.Value> settingKeyList = new ArrayList<com.iail.bean.Value>();
+        Map<String, Object> settingMap = new HashMap<String, Object>();
+        for (MethodSettingDTO modelSetting : dto.getModelSettings()) {
+            settingKeyList.add(new com.iail.bean.Value(modelSetting.getSettingKey(),modelSetting.getSettingKey()));
+            settingConfigMap.put("settingKeyList", settingKeyList);
+            settingConfigMap.put("settingMap", handleModelSettings(dto.getModelSettings()));
+        }
+        modelBean.setSettingConfigMap(settingConfigMap);
+        //DataMap
+        modelBean.setDataMap(dto.getModelResult());
+        //ResultKey
+        modelBean.setResultKey(dto.getResultKey());
+        //ResultKey
+        modelBean.setVersion("1.0.0");
+
+
+        return modelBean;
+    }
+
+    @PostMapping("saveModel")
+    public void saveModel(@RequestBody MdkDTO dto, HttpServletResponse response) {
+        IAILModel modelBean = createModelBean(dto);
+
+        try {
+            //临时文件夹
+            File tempFile = null;
+            try {
+                tempFile = Files.createTempFile(dto.getPyName(),".miail").toFile();
+                log.info("生成临时文件," + tempFile.getAbsolutePath());
+            } catch (IOException e) {
+                throw new RuntimeException("创建临时文件异常",e);
+            }
+
+
+
+            try {
+                IAILMDK.saveModel(tempFile, modelBean);
+            } catch (Exception e) {
+                throw new RuntimeException("IAILMDK.saveModel异常",e);
+            }
+
+            byte[] data = FileUtil.readBytes(tempFile);
+            response.reset();
+            response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(tempFile.getName(), "UTF-8") + "\"");
+            response.addHeader("Content-Length", "" + data.length);
+            response.setContentType("application/octet-stream; charset=UTF-8");
+
+            IOUtils.write(data, response.getOutputStream());
+        } catch (Exception e) {
+            throw new RuntimeException("代码生成异常",e);
+        }
+    }
+
     private HashMap<String, Object> handleModelSettings(List<MethodSettingDTO> modelSettings) {
         HashMap<String, Object> resultMap = null;
         try {
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MdkDTO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MdkDTO.java
index 8727d80..3484983 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MdkDTO.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MdkDTO.java
@@ -28,4 +28,13 @@
     private List<MethodSettingDTO> modelSettings;
 
     private List<String> uuids;
+
+    private List<MethodSettingDTO> predModelSettings;
+
+    private Integer dataLength;
+
+    private HashMap modelResult;
+
+    private String resultKey;
+
 }
\ No newline at end of file
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/application-dev.yaml b/iailab-module-model/iailab-module-model-biz/src/main/resources/application-dev.yaml
index be3bb55..5618692 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/resources/application-dev.yaml
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/application-dev.yaml
@@ -55,7 +55,7 @@
 
 influx-db:
   org: iailab
-  token: NloIinwybvMwKlJ8SGOAqboXH72EhdQEsnnV7kwtstVu6sbt24LNJ0bVICepeAtl2pxpd1Hj8gDLj9m4hnB7Fw==
-  url: http://127.0.0.1:8086
-  username: dzd
-  password: qwer1234
+  token: _338h4Kbu2KQaes5QwAyOz9pTUueXoSF9XmPi8N9oTS1SrhTZVj4J9JfSraUyWA0PfWMZOlf9QWax-USkJQR_A==
+  url: http://172.16.8.200:8086
+  username: iailab
+  password: iailab2019

--
Gitblit v1.9.3