From 8b43a1a91c37676e6a1e506e211f60e3e238f669 Mon Sep 17 00:00:00 2001
From: dongyukun <1208714201@qq.com>
Date: 星期四, 20 二月 2025 16:23:48 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/controller/admin/IndItemValueController.java       |   12 +
 iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql                                                                               |    6 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleDataConstructor.java              |   99 ++++++--
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/ScheduleSampleInfoConstructor.java             |    2 
 iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/ind/IndItemDao.xml                                                      |    3 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/controller/package-info.java                       |    1 
 iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/IAILMDK/utils/AlgsUtils.java                                    |  230 ++++++++++++++++++++
 iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/ind/dto/ApiIndItemValueDTO.java                          |    2 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java                     |    3 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/config/ScheduleJobListConfig.java                        |    1 
 iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/status_code.xml                                            |   20 +
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/utils/ASCIIUtil.java                                  |   29 ++
 iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windows.dll                                   |    0 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/ind/IndItemApiImpl.java                                  |    4 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemValueVO.java                              |    2 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemPageReqVO.java                            |    3 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/service/impl/IndItemValueServiceImpl.java          |   14 +
 iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windowsbak.dll                                |    0 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/service/IndItemValueService.java                   |    3 
 iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/IAILMDK/common/Environment.java                                 |   44 ++++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/ASCIIUtil.java                               |   23 ++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemSaveReqVO.java                            |    3 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/DllUtils.java                            |   17 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/DateUtils.java                               |    2 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemRespVO.java                               |    3 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/common/enums/ModelParamType.java                      |    3 
 iailab-module-data/iailab-module-data-biz/src/main/resources/application.yaml                                                               |    1 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleInfoConstructor.java              |    2 
 iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/version.xml                                                |   30 ++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/task/IndCollectTaskNetDay.java                           |   74 ++++++
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/McsApiImpl.java                                       |    2 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleDataConstructor.java                     |    1 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/entity/IndItemEntity.java                           |    6 
 iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windows.lib                                   |    0 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAlarmConfigServiceImpl.java |    2 
 35 files changed, 599 insertions(+), 48 deletions(-)

diff --git a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/ind/dto/ApiIndItemValueDTO.java b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/ind/dto/ApiIndItemValueDTO.java
index b1e54cc..78556ab 100644
--- a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/ind/dto/ApiIndItemValueDTO.java
+++ b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/ind/dto/ApiIndItemValueDTO.java
@@ -18,5 +18,5 @@
 
     private String dataTime;
 
-    private double dataValue;
+    private Object dataValue;
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql b/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql
index 67722df..e49a145 100644
--- a/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql
+++ b/iailab-module-data/iailab-module-data-biz/db/mysql/tenant.sql
@@ -411,6 +411,12 @@
                            UNIQUE KEY `uk_point_no` (`point_no`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT = '测点采集状态表';
 
+ALTER TABLE `t_ind_item` ADD COLUMN `solidify_flag` varchar(36) NULL COMMENT '固化标识' AFTER `status`,
+MODIFY COLUMN `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' AFTER `create_time`;
+
+ALTER TABLE `t_ind_item_value`
+    MODIFY COLUMN `data_time` datetime NULL DEFAULT NULL COMMENT '数据时间' AFTER `item_no`;
+
 CREATE TABLE `t_arc_data` (
                               `id` varchar(255) NOT NULL COMMENT 'id',
                               `arc_id` varchar(255) DEFAULT NULL COMMENT '归档id',
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/ind/IndItemApiImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/ind/IndItemApiImpl.java
index 317e493..d6edd26 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/ind/IndItemApiImpl.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/ind/IndItemApiImpl.java
@@ -40,7 +40,7 @@
             if (item != null) {
                 ApiIndItemValueDTO indItemValueDTO = new ApiIndItemValueDTO();
                 indItemValueDTO.setDataTime(item.getDataTime());
-                indItemValueDTO.setDataValue(item.getDataValue().doubleValue());
+                indItemValueDTO.setDataValue(item.getDataValue());
                 result.add(indItemValueDTO);
             }
         });
@@ -55,7 +55,7 @@
             if (item != null) {
                 ApiIndItemValueDTO indItemValueDTO = new ApiIndItemValueDTO();
                 indItemValueDTO.setDataTime(item.getDataTime());
-                indItemValueDTO.setDataValue(item.getDataValue().doubleValue());
+                indItemValueDTO.setDataValue(item.getDataValue());
                 result.add(indItemValueDTO);
             }
         });
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/utils/ASCIIUtil.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/utils/ASCIIUtil.java
new file mode 100644
index 0000000..bc9cf10
--- /dev/null
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/utils/ASCIIUtil.java
@@ -0,0 +1,29 @@
+package com.iailab.module.data.common.utils;
+
+import java.util.Arrays;
+
+/**
+ * @author Jay
+ */
+public class ASCIIUtil {
+
+    /*
+     * 将字符串转换为ASCII码数组,并填充剩余部分为-2。
+     */
+    public static double[] stringToAsciiArray(String input, int length) {
+        double[] asciiArray = new double[length];
+        Arrays.fill(asciiArray, -2); // 初始填充-2
+
+        int index = 0;
+        for (char c : input.toCharArray()) {
+            if (index < length) {
+                asciiArray[index] = c;
+                index++;
+            } else {
+                break; // 如果字符串长度超过目标长度,停止转换
+            }
+        }
+
+        return asciiArray;
+    }
+}
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/entity/IndItemEntity.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/entity/IndItemEntity.java
index 812ef07..0c39e3a 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/entity/IndItemEntity.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/entity/IndItemEntity.java
@@ -78,6 +78,12 @@
     private Integer status;
 
     /**
+     * 固化标识
+     */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
+    private String solidifyFlag;
+
+    /**
      * 创建者
      */
     private String creator;
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemPageReqVO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemPageReqVO.java
index 4d6a865..6fe17c5 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemPageReqVO.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemPageReqVO.java
@@ -28,4 +28,7 @@
 
     @Schema(description = "指标分类", example = "")
     private String itemCategory;
+
+    @Schema(description = "固化标识", example = "")
+    private String solidifyFlag;
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemRespVO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemRespVO.java
index acd8d65..05f10d7 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemRespVO.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemRespVO.java
@@ -54,6 +54,9 @@
     @Schema(description = "状态", example = "")
     private Integer status;
 
+    @Schema(description = "固化标识", example = "")
+    private String solidifyFlag;
+
     @Schema(description = "创建者", example = "")
     private String creator;
 
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemSaveReqVO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemSaveReqVO.java
index 0658f90..d0cd3ef 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemSaveReqVO.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemSaveReqVO.java
@@ -59,4 +59,7 @@
 
     @Schema(description = "计算指标")
     private IndItemCalVO calItem;
+
+    @Schema(description = "固化标识")
+    private String solidifyFlag;
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemValueVO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemValueVO.java
index 4562bd4..5b58926 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemValueVO.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/vo/IndItemValueVO.java
@@ -18,5 +18,5 @@
 
     private String dataTime;
 
-    private BigDecimal dataValue;
+    private Object dataValue;
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/controller/IndItemValueController.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/controller/admin/IndItemValueController.java
similarity index 87%
rename from iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/controller/IndItemValueController.java
rename to iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/controller/admin/IndItemValueController.java
index beeb841..2455281 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/controller/IndItemValueController.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/controller/admin/IndItemValueController.java
@@ -1,9 +1,10 @@
-package com.iailab.module.data.ind.value.controller;
+package com.iailab.module.data.ind.value.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.data.ind.item.vo.IndItemRespVO;
+import com.iailab.module.data.ind.item.vo.IndItemValueVO;
 import com.iailab.module.data.ind.value.entity.IndItemValueEntity;
 import com.iailab.module.data.ind.value.service.IndItemValueService;
 import com.iailab.module.data.ind.value.vo.IndItemValuePageReqVO;
@@ -17,6 +18,8 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+
+import java.util.List;
 
 import static com.iailab.framework.common.pojo.CommonResult.success;
 
@@ -74,4 +77,11 @@
         IndItemValueEntity entity = indItemValueService.get(id);
         return success(BeanUtils.toBean(entity, IndItemRespVO.class));
     }
+
+    @GetMapping("/getList")
+    @Operation(summary = "获取指标项数据集合信息")
+    public CommonResult<List<IndItemValueVO>> getList(@Valid IndItemValuePageReqVO reqVO) {
+        List<IndItemValueVO> list =  indItemValueService.getValueList(reqVO);
+        return success(list);
+    }
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/controller/package-info.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/controller/package-info.java
new file mode 100644
index 0000000..107f995
--- /dev/null
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/controller/package-info.java
@@ -0,0 +1 @@
+package com.iailab.module.data.ind.value.controller;
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/service/IndItemValueService.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/service/IndItemValueService.java
index 621b442..ff06038 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/service/IndItemValueService.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/service/IndItemValueService.java
@@ -9,7 +9,6 @@
 import com.iailab.module.data.ind.value.vo.IndItemValueSaveReqVO;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author PanZhibao
@@ -29,4 +28,6 @@
     void delete(String id);
 
     List<IndItemValueVO> getSourceValue(QuerySourceValueDTO dto);
+
+    List<IndItemValueVO> getValueList(IndItemValuePageReqVO reqVO);
 }
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/service/impl/IndItemValueServiceImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/service/impl/IndItemValueServiceImpl.java
index ed1c49d..2453ea2 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/service/impl/IndItemValueServiceImpl.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/value/service/impl/IndItemValueServiceImpl.java
@@ -3,7 +3,10 @@
 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.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.iailab.framework.tenant.core.context.DataContextHolder;
+import com.iailab.module.data.common.utils.DateUtils;
 import com.iailab.module.data.common.xss.SQLFilter;
 import com.iailab.module.data.ind.item.vo.IndItemValueVO;
 import com.iailab.module.data.ind.value.dao.IndItemValueDao;
@@ -73,4 +76,15 @@
         DataContextHolder.setDataSourceId(Long.valueOf(dto.getDataSource()));
         return baseDao.getSourceValue(dto);
     }
+
+    @Override
+    public List<IndItemValueVO> getValueList(IndItemValuePageReqVO reqVO) {
+        List<IndItemValueEntity> entities = baseDao.selectList( new LambdaQueryWrapperX<IndItemValueEntity>()
+                .eq(StringUtils.isNotBlank(reqVO.getItemNo()), IndItemValueEntity::getItemNo, reqVO.getItemNo())
+                .geIfPresent(IndItemValueEntity::getDataTime, DateUtils.stringToDate(reqVO.getStartTime(), DateUtils.DATE_TIME_PATTERN))
+                .leIfPresent(IndItemValueEntity::getDataTime, DateUtils.stringToDate(reqVO.getEndTime(), DateUtils.DATE_TIME_PATTERN))
+                .orderByDesc(IndItemValueEntity::getDataTime)
+        );
+        return ConvertUtils.sourceToTarget(entities, IndItemValueVO.class);
+    }
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/config/ScheduleJobListConfig.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/config/ScheduleJobListConfig.java
index 615bb22..496667a 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/config/ScheduleJobListConfig.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/config/ScheduleJobListConfig.java
@@ -23,5 +23,6 @@
         scheduleJobList.add("pointCollectTaskNet60");
         scheduleJobList.add("pointCollectTaskNetKIO10");
         scheduleJobList.add("pointCollectTaskNetKIO60");
+        scheduleJobList.add("indCollectTaskNetDay");
     }
 }
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/task/IndCollectTaskNetDay.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/task/IndCollectTaskNetDay.java
new file mode 100644
index 0000000..44c197a
--- /dev/null
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/task/IndCollectTaskNetDay.java
@@ -0,0 +1,74 @@
+package com.iailab.module.data.job.task;
+
+import com.alibaba.nacos.common.utils.StringUtils;
+import com.iailab.module.data.api.ind.IndItemApi;
+import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO;
+import com.iailab.module.data.common.utils.DateUtils;
+import com.iailab.module.data.ind.item.service.IndItemService;
+import com.iailab.module.data.ind.item.vo.IndItemPageReqVO;
+import com.iailab.module.data.ind.item.vo.IndItemRespVO;
+import com.iailab.module.data.ind.value.service.IndItemValueService;
+import com.iailab.module.data.ind.value.vo.IndItemValueSaveReqVO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ * @description: Point采集器1h
+ * @author: dzd
+ * @date: 2025/1/18 14:07
+ **/
+@Component("indCollectTaskNetDay")
+public class IndCollectTaskNetDay implements ITask {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private IndItemService indItemService;
+
+    @Autowired
+    private IndItemValueService indItemValueService;
+
+    @Autowired
+    private IndItemApi indItemApi;
+    @Override
+    public void run(String params){
+        logger.debug("indCollectTaskNetDay定时任务正在执行,参数为:{}", params);
+        try {
+            Calendar calendar = Calendar.getInstance();
+            calendar.set(Calendar.MILLISECOND, 0);
+            IndItemPageReqVO reqVO = new IndItemPageReqVO();
+            if (StringUtils.isNotBlank(params)){
+                reqVO.setSolidifyFlag(params);
+            }else {
+                reqVO.setSolidifyFlag("DAY");
+            }
+            List<IndItemRespVO> indItemList =  indItemService.getList(reqVO);
+            if (!CollectionUtils.isEmpty(indItemList)){
+                for (IndItemRespVO indItem : indItemList) {
+                    logger.info("开始查询指标数据,指标编号:" + indItem.getItemNo());
+                    List<ApiIndItemValueDTO> indItemValueList = indItemApi.queryIndItemDefaultValue(indItem.getItemNo());
+                    for (ApiIndItemValueDTO indItemValue : indItemValueList) {
+                        logger.info("开始保存指标数据,指标编号:" + indItem.getItemNo() + ", 指标数据:" + indItemValue.getDataValue());
+                        IndItemValueSaveReqVO saveReqVO = new IndItemValueSaveReqVO();
+                        saveReqVO.setItemNo(indItem.getItemNo());
+                        saveReqVO.setDataTime(DateUtils.format(calendar.getTime(), DateUtils.DATE_TIME_PATTERN));
+                        saveReqVO.setDataValue((BigDecimal) indItemValue.getDataValue());
+                        indItemValueService.create(saveReqVO);
+                    }
+                }
+            }
+            logger.info("indCollectTaskNetDay定时任务完成时间:" + LocalDateTime.now());
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            logger.error("indCollectTaskNetDay定时任务失败时间:" + LocalDateTime.now());
+        }
+
+    }
+}
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/resources/application.yaml b/iailab-module-data/iailab-module-data-biz/src/main/resources/application.yaml
index 7c52b23..ffa76bf 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/resources/application.yaml
+++ b/iailab-module-data/iailab-module-data-biz/src/main/resources/application.yaml
@@ -176,6 +176,7 @@
       - t_ind_item_atom
       - t_ind_item_der
       - t_ind_item_cal
+      - t_ind_item_value
       - t_video_nvr
       - t_video_log
       - t_video_camera
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/ind/IndItemDao.xml b/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/ind/IndItemDao.xml
index 556b99f..bc2a643 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/ind/IndItemDao.xml
+++ b/iailab-module-data/iailab-module-data-biz/src/main/resources/mapper/ind/IndItemDao.xml
@@ -22,6 +22,9 @@
             <if test="params.itemCategory != null and params.itemCategory != ''">
                 and t1.item_category = #{params.itemCategory}
             </if>
+            <if test="params.solidifyFlag != null and params.solidifyFlag != ''">
+                and t1.solidify_flag = #{params.solidifyFlag}
+            </if>
         </where>
     </select>
 
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 aea343c..3ec5fef 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
@@ -394,7 +394,7 @@
         } else {
             dataView.setRealData(new ArrayList<>());
         }
-        dataView.setCurData(mmItemResultJsonService.getData(outPut.getId(), predictTime, timeFormat));
+        dataView.setCurData(mmItemResultJsonService.getData(outPut.getId(), predictTime, timeFormat, 3));
         dataView.setLineType(lineType.getCode());
         switch (lineType) {
             case TN:
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/ASCIIUtil.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/ASCIIUtil.java
new file mode 100644
index 0000000..35c6bbc
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/ASCIIUtil.java
@@ -0,0 +1,23 @@
+package com.iailab.module.model.common.utils;
+
+/**
+ * @description:
+ * @author: dzd
+ * @date: 2025/2/19 16:22
+ **/
+public class ASCIIUtil {
+
+    /**
+     * @description: String 转 ASCII码double[]
+     **/
+    public static double[] stringToAsciiArray(String str) {
+        int length = str.length();
+        double[] asciiArray = new double[length];
+        // 遍历字符串中的每个字符
+        for (int i = 0; i < length; i++) {
+            // 获取当前字符的 ASCII 码值
+            asciiArray[i] = str.charAt(i);
+        }
+        return asciiArray;
+    }
+}
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/DateUtils.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/DateUtils.java
index 2d4fddc..2df9fc9 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/DateUtils.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/DateUtils.java
@@ -37,6 +37,8 @@
 
     public final static String DATE_PATTERN_YEAR = "yyyy";
 
+    public final static String DATE_TIME_STRING = "yyyyMMddHHmmssSSS";
+
     /**
      * 日期格式化 日期格式为:yyyy-MM-dd
      * @param date  日期
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAlarmConfigServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAlarmConfigServiceImpl.java
index 58e5c42..04f69cf 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAlarmConfigServiceImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAlarmConfigServiceImpl.java
@@ -14,6 +14,7 @@
 import com.iailab.module.model.mcs.pre.vo.MmPredictAlarmConfigPageReqVO;
 import com.iailab.module.model.mcs.pre.vo.MmPredictAlarmConfigRespVO;
 import com.iailab.module.model.mcs.pre.vo.MmPredictAlarmConfigSaveReqVO;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -64,6 +65,7 @@
     public List<AlarmConfigRespDTO> list(Map<String, Object> params) {
         QueryWrapper<MmPredictAlarmConfigEntity> wrapper = new QueryWrapper<>();
         wrapper.eq("is_enable", 1);
+        wrapper.eq(StringUtils.isNotBlank(params.get("alarmObj").toString()),"alarm_obj", params.get("alarmObj"));
         List<MmPredictAlarmConfigEntity> list = baseDao.selectList(wrapper);
         return ConvertUtils.sourceToTarget(list, AlarmConfigRespDTO.class);
     }
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/common/enums/ModelParamType.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/common/enums/ModelParamType.java
index 30b7b94..2b8703e 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/common/enums/ModelParamType.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/common/enums/ModelParamType.java
@@ -17,7 +17,8 @@
     DATAPOINT("DATAPOINT", "测点值"),
     NORMALITEM("NormalItem", "预测值(NormalItem)"),
     MERGEITEM("MergeItem", "MergeItem"),
-    IND("IND", "指标值"),
+    IND("IND", "指标值(double)"),
+    IND_ASCII("IND_ASCII", "指标值(ASCII)"),
     PLAN("PLAN", "计划值");
 
     private String code;
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 2ddb9c6..c2bfd25 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
@@ -13,6 +13,7 @@
 import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
 import com.iailab.module.data.common.ApiDataQueryDTO;
 import com.iailab.module.data.common.ApiDataValueDTO;
+import com.iailab.module.model.common.utils.ASCIIUtil;
 import com.iailab.module.model.mcs.pre.service.MmItemOutputService;
 import com.iailab.module.model.mcs.pre.service.MmItemResultJsonService;
 import com.iailab.module.model.mcs.pre.service.MmItemResultService;
@@ -76,47 +77,84 @@
         Map<String, ApiPointDTO> pointMap = sampleInfo.getPointMap();
         Map<String, ApiPlanItemDTO> planMap = sampleInfo.getPlanMap();
         Map<String, ApiIndItemDTO> indMap = sampleInfo.getIndMap();
+        // 校验数据
+        for (ColumnItemPort itemPort : sampleInfo.getColumnInfo()) {
+            for (ColumnItem columnItem : itemPort.getColumnItemList()) {
+                if (columnItem.getParamType().equals(ModelParamType.IND_ASCII.getCode())) {
+                    if (columnItem.getModelParamOrder() != 1 || itemPort.getColumnItemList().size() != 1) {
+                        throw new RuntimeException("模型输入数据异常:IND_ASCII类型输入独占一个端口;ParamPortOrder:" + columnItem.getModelParamPortOrder() + ",ParamOrder:" + columnItem.getModelParamOrder());
+                    }
+                }
+            }
+        }
+
         //对每个爪分别进行计算
         for (ColumnItemPort entry : sampleInfo.getColumnInfo()) {
-            //先依据爪内数据项的modelParamOrder进行排序——重写comparator匿名函数
-            Collections.sort(entry.getColumnItemList(), new Comparator<ColumnItem>() {
-                @Override
-                public int compare(ColumnItem o1, ColumnItem o2) {
-                    return o1.getModelParamOrder() - o2.getModelParamOrder();
+            double[][] matrix = new double[0][0];
+            // 特殊处理IND_ASCII类型
+            if (entry.getColumnItemList().get(0).getParamType().equals(ModelParamType.IND_ASCII.getCode())) {
+                // 获取指标数据
+                ColumnItem columnItem = entry.getColumnItemList().get(0);
+                ApiIndItemQueryDTO queryIndItemDTO = new ApiIndItemQueryDTO();
+                ApiIndItemDTO intItem = indMap.get(columnItem.getParamId());
+                queryIndItemDTO.setItemNo(intItem.getItemNo());
+                queryIndItemDTO.setStart(columnItem.getStartTime());
+                queryIndItemDTO.setEnd(columnItem.getEndTime());
+                List<ApiIndItemValueDTO> indItemValueList = indItemApi.queryIndItemHistoryValue(queryIndItemDTO);
+                if (!CollectionUtils.isEmpty(indItemValueList)) {
+                    matrix = new double[entry.getDataLength()][0];
+                    if (indItemValueList.size() > entry.getDataLength()) {
+                        indItemValueList = indItemValueList.subList(0,entry.getDataLength());
+                    }
+                    for (int i = 0; i < indItemValueList.size(); i++) {
+                        String stringValue = indItemValueList.get(i).getDataValue().toString();
+                        double[] asciiArray = ASCIIUtil.stringToAsciiArray(stringValue);
+                        matrix[i] = asciiArray;
+                    }
                 }
-            });
+            }else {
+                //先依据爪内数据项的modelParamOrder进行排序——重写comparator匿名函数
+                Collections.sort(entry.getColumnItemList(), new Comparator<ColumnItem>() {
+                    @Override
+                    public int compare(ColumnItem o1, ColumnItem o2) {
+                        return o1.getModelParamOrder() - o2.getModelParamOrder();
+                    }
+                });
 
-            //默认都是double类型的数据,且按列向量进行拼接,默认初始值为0.0
-            double[][] matrix = new double[entry.getDataLength()][entry.getColumnItemList().size()];
-            for (int i = 0; i < entry.getColumnItemList().size(); i++) {
-                for (int j = 0; j < entry.getDataLength(); j++) {
-                    matrix[j][i] = -2.0;
+                //默认都是double类型的数据,且按列向量进行拼接,默认初始值为0.0
+                matrix = new double[entry.getDataLength()][entry.getColumnItemList().size()];
+                for (int i = 0; i < entry.getColumnItemList().size(); i++) {
+                    for (int j = 0; j < entry.getDataLength(); j++) {
+                        matrix[j][i] = -2.0;
+                    }
                 }
-            }
 
-            //对每一项依次进行数据查询,然后将查询出的值赋给matrix对应的位置
-            for (int i = 0; i < entry.getColumnItemList().size(); i++) {
-                try {
-                    List<DataValueVO> dataEntityList = getData(entry.getColumnItemList().get(i), pointMap, planMap,indMap);
-                    //补全数据
-                    ColumnItem columnItem = entry.getColumnItemList().get(i);
-                    dataEntityList = super.completionData(matrix.length, dataEntityList, columnItem.startTime, columnItem.endTime, columnItem.getParamType(),columnItem.getGranularity());
+                //对每一项依次进行数据查询,然后将查询出的值赋给matrix对应的位置
+                for (int i = 0; i < entry.getColumnItemList().size(); i++) {
+                    try {
+                        List<DataValueVO> dataEntityList = getData(entry.getColumnItemList().get(i), pointMap, planMap,indMap);
+                        //补全数据
+                        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());
-                        for (int k = 0; k < dataEntityList.size(); k++) {
-                            Double dataValue = dataEntityList.get(k).getDataValue();
-                            if (null != dataValue) {
-                                matrix[k][i] = dataValue;
+                        /** 如果数据取不满,把缺失的数据点放在后面 */
+                        if (dataEntityList != null && dataEntityList.size() != 0) {
+                            logger.info("设置matrix, i = " + i + ", size = " + dataEntityList.size());
+                            for (int k = 0; k < dataEntityList.size(); k++) {
+                                Double dataValue = dataEntityList.get(k).getDataValue();
+                                if (null != dataValue) {
+                                    matrix[k][i] = dataValue;
+                                }
                             }
                         }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        throw e;
                     }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    throw e;
                 }
             }
+
+
             SampleData sampleData = new SampleData();
             sampleData.setMatrix(matrix);
             sampleDataList.add(sampleData);
@@ -193,9 +231,10 @@
                 dataList = indItemValueList.stream().map(t -> {
                     DataValueVO vo = new DataValueVO();
                     vo.setDataTime(DateUtil.parse(t.getDataTime()));
-                    vo.setDataValue(t.getDataValue());
+                    vo.setDataValue(Double.valueOf(t.getDataValue().toString()));
                     return vo;
                 }).collect(Collectors.toList());
+                break;
             default:
                 break;
         }
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleInfoConstructor.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleInfoConstructor.java
index 6d93c9f..a5fd90d 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleInfoConstructor.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/PredictSampleInfoConstructor.java
@@ -90,7 +90,7 @@
         List<ApiPlanItemDTO> plans = planItemApi.getInfoByIds(planIds);
         Map<String, ApiPlanItemDTO> planMap = plans.stream().collect(Collectors.toMap(ApiPlanItemDTO::getId, Function.identity(), (e1, e2) -> e1));
         // 统一获取指标数据的信息
-        Set<String> indIds = modelInputParamEntityList.stream().filter(e -> ModelParamType.getEumByCode(e.getModelparamtype()).equals(ModelParamType.IND)).map(MmModelParamEntity::getModelparamid).collect(Collectors.toSet());
+        Set<String> indIds = modelInputParamEntityList.stream().filter(e -> ModelParamType.getEumByCode(e.getModelparamtype()).equals(ModelParamType.IND) || ModelParamType.getEumByCode(e.getModelparamtype()).equals(ModelParamType.IND_ASCII)).map(MmModelParamEntity::getModelparamid).collect(Collectors.toSet());
         List<ApiIndItemDTO> inds = indItemApi.getInfoByIds(indIds);
         Map<String, ApiIndItemDTO> indMap = inds.stream().collect(Collectors.toMap(ApiIndItemDTO::getId, Function.identity(), (e1, e2) -> e1));
 
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleDataConstructor.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleDataConstructor.java
index 6915322..c01e92a 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleDataConstructor.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleDataConstructor.java
@@ -90,6 +90,7 @@
                 mins = ((end - start) / oneMin);
                 break;
             case IND:
+            case IND_ASCII:
                 // 测点值
                 oneMin = 1000L * granularity;
                 // 设置时间偏移量
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java
index 48fa7e8..ce08ee6 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java
@@ -86,6 +86,7 @@
                 dateTime = calculateTime(originalTime, true, columnItem.getDataLength(), columnItem.getGranularity());
                 break;
             case IND:
+            case IND_ASCII:
                 dateTime = calculateTime(originalTime, true, columnItem.getDataLength()-1, columnItem.getGranularity());
                 break;
             case NORMALITEM:
@@ -113,6 +114,7 @@
         switch (ModelParamType.getEumByCode(columnItem.getParamType())) {
             case DATAPOINT:
             case IND:
+            case IND_ASCII:
             case PLAN:
                 dateTime = calendar.getTime();
                 break;
@@ -146,6 +148,7 @@
                 granularity = mmPredictItemService.getItemByOutPutId(columnItem.getParamId()).getGranularity();
                 break;
             case IND:
+            case IND_ASCII:
                 ApiIndItemDTO indItemDTO = indMap.get(columnItem.getParamId());
                 granularity = TimeGranularitySecEnum.getEumByCode(indItemDTO.getTimeGranularity()).getValue();;
                 break;
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/ScheduleSampleInfoConstructor.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/ScheduleSampleInfoConstructor.java
index 36683ef..e8aa4a0 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/ScheduleSampleInfoConstructor.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/ScheduleSampleInfoConstructor.java
@@ -65,7 +65,7 @@
         List<ApiPlanItemDTO> plans = planItemApi.getInfoByIds(planIds);
         Map<String, ApiPlanItemDTO> planMap = plans.stream().collect(Collectors.toMap(ApiPlanItemDTO::getId, Function.identity(), (e1, e2) -> e1));
         // 统一获取指标数据的信息
-        Set<String> indIds = modelInputParamEntityList.stream().filter(e -> ModelParamType.getEumByCode(e.getModelparamtype()).equals(ModelParamType.IND)).map(StScheduleModelParamEntity::getModelparamid).collect(Collectors.toSet());
+        Set<String> indIds = modelInputParamEntityList.stream().filter(e -> ModelParamType.getEumByCode(e.getModelparamtype()).equals(ModelParamType.IND) || ModelParamType.getEumByCode(e.getModelparamtype()).equals(ModelParamType.IND_ASCII)).map(StScheduleModelParamEntity::getModelparamid).collect(Collectors.toSet());
         List<ApiIndItemDTO> inds = indItemApi.getInfoByIds(indIds);
         Map<String, ApiIndItemDTO> indMap = inds.stream().collect(Collectors.toMap(ApiIndItemDTO::getId, Function.identity(), (e1, e2) -> e1));
 
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 74df6bb..8151cc7 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
@@ -12,10 +12,7 @@
 import java.lang.reflect.Method;
 import java.net.URL;
 import java.net.URLClassLoader;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Vector;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -156,17 +153,21 @@
         }
     }
     public static synchronized void removeClassCache(String projectId) {
-        for (String key : classCache.keySet()) {
+        Iterator<String> iterator = classCache.keySet().iterator();
+        while (iterator.hasNext()) {
+            String key = iterator.next();
             if (key.startsWith(projectId)) {
-                classCache.remove(key);
+                iterator.remove();
             }
         }
     }
 
     public static synchronized void removeClassMethodCache(String projectId) {
-        for (String key : classMethodCache.keySet()) {
+        Iterator<String> iterator = classMethodCache.keySet().iterator();
+        while (iterator.hasNext()) {
+            String key = iterator.next();
             if (key.startsWith(projectId)) {
-                classMethodCache.remove(key);
+                iterator.remove();
             }
         }
     }
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/IAILMDK/common/Environment.java b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/IAILMDK/common/Environment.java
new file mode 100644
index 0000000..039c954
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/IAILMDK/common/Environment.java
@@ -0,0 +1,44 @@
+package iail.mdk.model.common;
+
+/**
+ * @Description
+ * @Author Forrest
+ * @Mail 1255187617@qq.com
+ * @Date 2021/1/12
+ */
+public class Environment {
+    private native int jniInit();
+
+    private native int jniIsInit();
+
+    private native void jniRelease();
+
+    private native int statusCode();
+
+    /**
+     * 初始化环境
+     */
+    public int init() {
+        return jniInit();
+    }
+
+    /**
+     * 获取初始化状态
+     */
+    public int isInit() {
+        return jniIsInit();
+    }
+
+    /**
+     * 释放资源
+     */
+    public void release() {
+        jniRelease();
+    }
+    /**
+     *校验机器码
+     * */
+//    public int checkMachineCode(String mCode){
+//        return statusCode();
+//    }
+}
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/IAILMDK/utils/AlgsUtils.java b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/IAILMDK/utils/AlgsUtils.java
new file mode 100644
index 0000000..3a67878
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/IAILMDK/utils/AlgsUtils.java
@@ -0,0 +1,230 @@
+package iail.mdk.model.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * @description:
+ * @author: dzd 
+ * @date: 2024/10/12 9:19
+ **/
+public class AlgsUtils {
+    private HashMap<String, Object> model = new HashMap();
+    private HashMap<String, Object> eval_pre = new HashMap();
+    private HashMap<String, Object> train_result_models = new HashMap();
+
+    public AlgsUtils() {
+    }
+
+    public HashMap<String, Object> createPredictHashmap(HashMap<String, Object> models) {
+        if (models.containsKey("model")) {
+            String aaa;
+            if (((String) ((HashMap) models.get("model")).get("param1")).isEmpty()) {
+                aaa = "error";
+                this.model.put("param1", aaa);
+            } else {
+                aaa = (String) ((HashMap) models.get("model")).get("param1");
+                this.model.put("param1", aaa);
+            }
+        } else {
+            this.model = models;
+        }
+
+        return this.model;
+    }
+
+    public HashMap<String, Object> createPredictHashmapplus(HashMap<String, Object> models) {
+        if (models.containsKey("models")) {
+            String aaa;
+            if (((String) ((HashMap) models.get("models")).get("paramFile")).isEmpty()) {
+                aaa = "error";
+                this.model.put("param1", aaa);
+            } else {
+                aaa = (String) ((HashMap) models.get("models")).get("paramFile");
+                this.model.put("paramFile", aaa);
+                if (((HashMap) models.get("models")).containsKey("dim")) {
+                    Object dim = ((HashMap) models.get("models")).get("dim");
+                    this.model.put("dim", dim);
+                }
+            }
+        } else {
+            this.model = models;
+        }
+
+        return this.model;
+    }
+
+    public HashMap<String, Object> reverseModels(HashMap<String, Object> train_result) {
+        if (train_result.containsKey("models")) {
+            this.train_result_models = (HashMap) train_result.get("models");
+            if (((HashMap) train_result.get("models")).containsKey("dim")) {
+                double dim = Double.parseDouble((String) ((HashMap) train_result.get("models")).get("dim"));
+                this.train_result_models.put("dim", dim);
+            }
+
+            train_result.put("models", this.train_result_models);
+        }
+
+        return train_result;
+    }
+
+    public int[] getColAndRow(double[][] arr) {
+        int row = arr.length;
+        int col = arr[0].length;
+        int[] result = new int[]{row, col};
+        return result;
+    }
+
+    public double[][] getMathergeArr(double[][] data, double[][] refs) {
+        int[] dataRowAndCol = this.getColAndRow(data);
+        int rowData = dataRowAndCol[0];
+        int colData = dataRowAndCol[1];
+        int[] refsRowAndCol = this.getColAndRow(refs);
+        int rowrefs = refsRowAndCol[0];
+        int colrefs = refsRowAndCol[1];
+        double[][] newData = new double[rowData + rowrefs][colData];
+
+        int i;
+        int j;
+        for (i = 0; i < rowData; ++i) {
+            for (j = 0; j < colData; ++j) {
+                newData[i][j] = data[i][j];
+            }
+        }
+
+        for (i = 0; i < rowrefs; ++i) {
+            for (j = 0; j < colrefs; ++j) {
+                newData[i + rowData][j] = refs[i][j];
+            }
+        }
+
+        return newData;
+    }
+
+    public HashMap<String, Object> reverseResult(HashMap<String, Object> result) {
+        if (null == result) {
+            return result;
+        }
+        String code = reverseResultCode(result);
+        if (!"100".equals(code)) {
+            return result;
+        }
+		reverseResultValues(result);
+        reverseTest(result);
+        reverseEval(result);
+        reverseOptdParams(result);
+        return result;
+    }
+
+	private void reverseResultValues(HashMap<String, Object> result) {
+        // 将result中的Double数组转为double数组
+        if (result.containsKey("result")) {
+            HashMap<String, Object> resultValues = (HashMap) result.get("result");
+            for (Map.Entry<String, Object> entry : resultValues.entrySet()) {
+                if (entry.getValue() instanceof Double[]) {
+                    //一维数组
+                    Double[] value = (Double[]) entry.getValue();
+                    double[] value1 = new double[value.length];
+                    for (int i = 0; i < value.length; i++) {
+                        Double d = value[i];
+                        if (Double.isNaN(d)) {
+                            value1[i] = new Double(0.0).doubleValue();
+                        } else {
+                            value1[i] = d.doubleValue();
+                        }
+                    }
+                    resultValues.put(entry.getKey(),value1);
+                }
+
+                if (entry.getValue() instanceof Double[][]) {
+                    //二维数组
+                    Double[][] value = (Double[][]) entry.getValue();
+                    double[][] value1 = new double[value.length][];
+                    for (int i = 0; i < value.length; i++) {
+                        value1[i] = new double[value[i].length];
+                        for (int j = 0; j < value[i].length; j++) {
+                            Double d = value[i][j];
+                            if (Double.isNaN(d)) {
+                                value1[i][j] = new Double(0.0).doubleValue();
+                            } else {
+                                value1[i][j] = d.doubleValue();
+                            }
+                        }
+                    }
+                    resultValues.put(entry.getKey(),value1);
+                }
+            }
+        }
+    }
+
+
+    private String reverseResultCode(HashMap<String, Object> result) {
+        String code = result.containsKey("status_code") ? String.valueOf(result.get("status_code")) : "400";
+        result.put("status_code", code);
+        return code;
+    }
+
+    private void reverseTest(HashMap<String, Object> result) {
+        if (result.containsKey("test")) {
+            HashMap<String, Object> test = (HashMap) result.get("test");
+            Double[][] realValue = (Double[][]) test.get("realValue");
+            Double[][] predictValue = (Double[][]) test.get("predictValue");
+            double[][] realValue1 = new double[realValue.length][2];
+            double[][] predictValue1 = new double[predictValue.length][2];
+            for (int i = 0; i < realValue.length; i++) {
+                for (int j = 0; j < realValue[i].length; j++) {
+                    Double d = (Double) realValue[i][j];
+                    if (Double.isNaN(d)) {
+                        realValue1[i][j] = new Double(0.0).doubleValue();
+                    } else {
+                        realValue1[i][j] = d.doubleValue();
+                    }
+
+                }
+            }
+            for (int i = 0; i < predictValue.length; i++) {
+                for (int j = 0; j < predictValue[i].length; j++) {
+                    Double d = (Double) predictValue[i][j];
+                    if (Double.isNaN(d)) {
+                        predictValue1[i][j] = new Double(0.0).doubleValue();
+                    } else {
+                        predictValue1[i][j] = d.doubleValue();
+                    }
+
+                }
+            }
+            HashMap<String, double[][]> map = new HashMap<>();
+            map.put("realValue", realValue1);
+            map.put("predictValue", predictValue1);
+
+            result.put("test", map);
+        }
+    }
+
+    public void reverseEval(HashMap<String, Object> result) {
+        if (result.containsKey("eval")) {
+            HashMap<String,Object> eval = (HashMap<String,Object>) result.get("eval");
+            HashMap<String, String> evalMap = new HashMap<>(eval.size());
+
+            for (HashMap.Entry<String, Object> entry : eval.entrySet()) {
+                evalMap.put(entry.getKey(),String.valueOf(entry.getValue()));
+            }
+
+            result.put("eval",evalMap);
+        }
+    }
+
+    private void reverseOptdParams(HashMap<String, Object> result) {
+        if (result.containsKey("paramsopt")) {
+            HashMap<String,Object> params = (HashMap<String,Object>) result.get("paramsopt");
+            HashMap<String, String> newParams = new HashMap<>(params.size());
+
+            for (HashMap.Entry<String, Object> entry : params.entrySet()) {
+                newParams.put(entry.getKey(),String.valueOf(entry.getValue()));
+            }
+
+            result.put("optdParams",newParams);
+        }
+    }
+}
\ No newline at end of file
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windows.dll b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windows.dll
new file mode 100644
index 0000000..1f4b210
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windows.dll
Binary files differ
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windows.lib b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windows.lib
new file mode 100644
index 0000000..978e889
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windows.lib
Binary files differ
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windowsbak.dll b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windowsbak.dll
new file mode 100644
index 0000000..45f005d
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/IAIL.MDK.Mid.Windowsbak.dll
Binary files differ
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/status_code.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/status_code.xml
new file mode 100644
index 0000000..d2003e9
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/status_code.xml
@@ -0,0 +1,20 @@
+<status-codes>
+	<status-code code="100" tips="系统正常运行"/>
+	<status-code code="200" tips="算法模块加载失败"/>
+	<status-code code="201" tips="算法方法加载失败"/>
+	<status-code code="202" tips="类型不匹配"/>
+	<status-code code="203" tips="找不到模型存储路径"/>
+	<status-code code="204" tips="模型参数文件加载失败"/>
+	<status-code code="205" tips="计算过程中的数据或数组维度不匹配"/>
+	<status-code code="206" tips="数值错误"/>
+	<status-code code="207" tips="第三方库问题"/>
+	<status-code code="208" tips="评价指标计算错误"/>
+	<status-code code="209" tips="数据长度问题"/>
+	<status-code code="210" tips="初始化失败"/>
+	<status-code code="211" tips="train/predict函数输入格式错误"/>
+	<status-code code="212" tips="train/predict函数输出格式错误"/>
+	<status-code code="300" tips="MDK未配置"/>
+	<status-code code="301" tips="缺少依赖库"/>
+	<status-code code="400" tips="系统异常,未知错误"/>
+	<status-code code="401" tips="未能进入 Python"/>
+</status-codes>
\ No newline at end of file
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/version.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/version.xml
new file mode 100644
index 0000000..c70ccdd
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mpkResources/libs/version.xml
@@ -0,0 +1,30 @@
+<algorithm-list name="算法版本列表">
+<!--	说明:version="0.11" 即现行算法未显式标注版本的算法-->
+		<algorithms name = "预测">
+		<algorithm name="非周期短期点预测" type="非周期完整数据" fileName="PredAperioComShortPoint" version="2.0"/>
+
+		<algorithm name="类周期短期点预测" type="类周期完整数据" fileName="PredPerioComShortPoint" version="2.0"/>
+		<algorithm name="中长期点预测" type="类周期完整数据" fileName="PredPerioComLongPoint" version="0.9.1"/>
+
+		<algorithm name="N型数据集点预测" type="N型" fileName="PredNTypeComShortPoint" version="0.20.0"/>
+		<algorithm name="调整用户短期点预测" type="阶跃" fileName="PredStepComShortPoint" version="1.0.5"/>
+		<algorithm name="因素预测" type="短期点预测" fileName="PredFactComShortPoint" version="1.1.13"/>
+
+		
+	</algorithms>
+	<algorithms name="数据预处理">
+		<algorithm name="滤波" fileName="PrepFilter" version="1.2.6"/>
+		<algorithm name="数据填补" fileName="PrepDaImput" version="0.12.0"/>
+		<algorithm name="异常点检测" fileName="PrepOutDetect" version="1.2.3"/>
+		<algorithm name="特征选择" fileName="prepFeaSelect" version="0.9.5"/>
+
+	</algorithms>
+	<algorithms name="调度">
+		<algorithm name="单介质调度" fileName="scheSingleEgy" version="1.0.1"/>
+		<algorithm name="热电调度" fileName="MSCoSchedul" version="1.0.1"/>
+		<algorithm name="调度建议" fileName="schedulSuggest" version="1.0.1"/>
+
+
+	</algorithms>
+
+</algorithm-list>
\ No newline at end of file

--
Gitblit v1.9.3