From c40da476c12e0d42d5a9c60607627329b6af8917 Mon Sep 17 00:00:00 2001
From: houzhongjian <houzhongyi@126.com>
Date: 星期五, 08 十一月 2024 11:13:59 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/controller/admin/ChannelOPCUATagController.java   |    3 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/PointImportExcelVO.java                                |   19 ++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/IsEnableEnum.java                                  |   19 +-
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/utils/DllUtils.java                               |    3 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java                      |   12 +
 iailab-module-data/iailab-module-data-biz/src/main/resources/application.yaml                                                                  |    3 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java                     |   88 ++++++++++++--
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MethodSettingDTO.java                                |    5 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/ihdb/HttpCollectorForIhd.java            |    1 
 iailab-module-model/iailab-module-model-biz/src/main/resources/template/impl.java.vm                                                           |    3 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/controller/admin/ChannelKioTagController.java       |    3 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/modbus/controller/admin/ChannelModbusTagController.java |    3 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/controller/admin/MdkController.java                      |   84 +++++++++++--
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/data/service/impl/PlanDataSetServiceImpl.java              |    5 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/DataTypeEnum.java                                  |    7 
 iailab-module-model/iailab-module-model-biz/src/main/resources/template/setup.py.vm                                                            |   26 ++++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/controller/admin/HttpTagController.java            |    3 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/MdkConstant.java                                  |    8 +
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/task/PointCollectTaskNet60.java                             |    2 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/controller/admin/DaPointController.java                   |   12 +-
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java                     |    8 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MdkDTO.java                                          |    4 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/controller/admin/ChannelOPCDATagController.java   |    3 
 23 files changed, 253 insertions(+), 71 deletions(-)

diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/ihdb/HttpCollectorForIhd.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/ihdb/HttpCollectorForIhd.java
index 3743b24..94cf2b9 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/ihdb/HttpCollectorForIhd.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/ihdb/HttpCollectorForIhd.java
@@ -75,7 +75,6 @@
         String jsonString = JSON.toJSONString(queryParams);
         tagSb.append(jsonString);
         tagSb.append("]");
-        log.info("body=====" + tagSb.toString());
         String currentDate = DateUtils.format(new Date(), "yyyyMMddHHmm00");
         String responseStr = HttpRequest.sendPost(httpApi.getUrl() + "/" + currentDate, tagSb.toString());
         JSONObject responseObj = JSON.parseObject(responseStr);
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/controller/admin/HttpTagController.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/controller/admin/HttpTagController.java
index e4079de..c296722 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/controller/admin/HttpTagController.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/controller/admin/HttpTagController.java
@@ -15,6 +15,7 @@
 import com.iailab.module.data.channel.tag.vo.TagExportExcelVO;
 import com.iailab.module.data.channel.tag.vo.TagImportExcelVO;
 import com.iailab.module.data.channel.tag.vo.TagImportRespVO;
+import com.iailab.module.data.common.enums.IsEnableEnum;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameters;
@@ -125,7 +126,7 @@
     public void importTemplate(HttpServletResponse response) throws IOException {
         // 手动创建导出 demo
         List<TagImportExcelVO> list = Collections.singletonList(
-                TagImportExcelVO.builder().tagName("Tag名称").tagDesc("Tag描述").dataType("String").enabled(1)
+                TagImportExcelVO.builder().tagName("Tag名称").tagDesc("Tag描述").dataType("String").enabled(IsEnableEnum.ENABLE.getCode())
                         .build()
         );
         // 输出
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/controller/admin/ChannelKioTagController.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/controller/admin/ChannelKioTagController.java
index e9f8e5b..02b60d5 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/controller/admin/ChannelKioTagController.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/controller/admin/ChannelKioTagController.java
@@ -17,6 +17,7 @@
 import com.iailab.module.data.channel.tag.vo.TagExportExcelVO;
 import com.iailab.module.data.channel.tag.vo.TagImportExcelVO;
 import com.iailab.module.data.channel.tag.vo.TagImportRespVO;
+import com.iailab.module.data.common.enums.IsEnableEnum;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameters;
@@ -126,7 +127,7 @@
     public void importTemplate(HttpServletResponse response) throws IOException {
         // 手动创建导出 demo
         List<TagImportExcelVO> list = Collections.singletonList(
-                TagImportExcelVO.builder().tagName("Tag名称").tagDesc("Tag描述").dataType("String").enabled(1)
+                TagImportExcelVO.builder().tagName("Tag名称").tagDesc("Tag描述").dataType("String").enabled(IsEnableEnum.ENABLE.getCode())
                         .build()
         );
         // 输出
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/modbus/controller/admin/ChannelModbusTagController.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/modbus/controller/admin/ChannelModbusTagController.java
index 366cd2f..e97669d 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/modbus/controller/admin/ChannelModbusTagController.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/modbus/controller/admin/ChannelModbusTagController.java
@@ -16,6 +16,7 @@
 import com.iailab.module.data.channel.modbus.vo.ModBusTagPageReqVO;
 import com.iailab.module.data.channel.modbus.vo.ModBusTagRespVO;
 import com.iailab.module.data.channel.tag.vo.TagImportRespVO;
+import com.iailab.module.data.common.enums.IsEnableEnum;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameters;
@@ -136,7 +137,7 @@
         // 手动创建导出 demo
         List<ModBusTagImportExcelVO> list = Collections.singletonList(
                 ModBusTagImportExcelVO.builder().tagName("Tag名称").tagDesc("Tag描述").dataType("String").
-                        address("123").format("1").samplingRate(1000).enabled(1)
+                        address("123").format("1").samplingRate(1000).enabled(IsEnableEnum.ENABLE.getCode())
                         .build()
         );
         // 输出
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/controller/admin/ChannelOPCDATagController.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/controller/admin/ChannelOPCDATagController.java
index 7f47f41..7a11afc 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/controller/admin/ChannelOPCDATagController.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/controller/admin/ChannelOPCDATagController.java
@@ -18,6 +18,7 @@
 import com.iailab.module.data.channel.opcda.vo.OpcDaTagRespVO;
 import com.iailab.module.data.common.enums.DataSourceType;
 import com.iailab.module.data.channel.tag.vo.TagImportRespVO;
+import com.iailab.module.data.common.enums.IsEnableEnum;
 import com.iailab.module.data.common.exception.RRException;
 import com.iailab.module.data.common.utils.TagUtils;
 import io.swagger.v3.oas.annotations.Operation;
@@ -146,7 +147,7 @@
     public void importTemplate(HttpServletResponse response) throws IOException {
         // 手动创建导出 demo
         List<OpcDaTagImportExcelVO> list = Collections.singletonList(
-                OpcDaTagImportExcelVO.builder().tagName("Tag名称").dataType("String").enabled(1)
+                OpcDaTagImportExcelVO.builder().tagName("Tag名称").dataType("String").enabled(IsEnableEnum.ENABLE.getCode())
                         .build()
         );
         // 输出
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/controller/admin/ChannelOPCUATagController.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/controller/admin/ChannelOPCUATagController.java
index b4f579d..bca1e0b 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/controller/admin/ChannelOPCUATagController.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/controller/admin/ChannelOPCUATagController.java
@@ -17,6 +17,7 @@
 import com.iailab.module.data.channel.opcua.vo.OpcUaTagPageReqVO;
 import com.iailab.module.data.channel.opcua.vo.OpcUaTagRespVO;
 import com.iailab.module.data.channel.tag.vo.TagImportRespVO;
+import com.iailab.module.data.common.enums.IsEnableEnum;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameters;
@@ -125,7 +126,7 @@
     public void importTemplate(HttpServletResponse response) throws IOException {
         // 手动创建导出 demo
         List<OpcUaTagImportExcelVO> list = Collections.singletonList(
-                OpcUaTagImportExcelVO.builder().tagName("Tag名称").dataType("String").address("123").samplingRate(1000).enabled(1)
+                OpcUaTagImportExcelVO.builder().tagName("Tag名称").dataType("String").address("123").samplingRate(1000).enabled(IsEnableEnum.ENABLE.getCode())
                         .build()
         );
         // 输出
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/DataTypeEnum.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/DataTypeEnum.java
index 19a46ff..33438a0 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/DataTypeEnum.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/DataTypeEnum.java
@@ -12,11 +12,12 @@
 @AllArgsConstructor
 public enum DataTypeEnum {
 
-    INT("int"),
+    INT("int","整型"),
 
-    FLOAT("float"),
+    FLOAT("float","浮点型"),
 
-    BOOLEAN("boolean");
+    BOOLEAN("boolean", "布尔型");
 
     private String code;
+    private String desc;
 }
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/IsEnableEnum.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/IsEnableEnum.java
index 7c31aa0..8aaca72 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/IsEnableEnum.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/common/enums/IsEnableEnum.java
@@ -1,21 +1,20 @@
 package com.iailab.module.data.common.enums;
 
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
 /**
  * @author PanZhibao
  * @Description
  * @createTime 2023年07月17日 17:41:00
  */
+@Getter
+@AllArgsConstructor
 public enum IsEnableEnum {
-    DISABLE(0), // 手动
-    ENABLE(1);  //自动
+    DISABLE(0, "否"),
+    ENABLE(1, "是");
 
-    private Integer value;
+    private Integer code;
+    private String desc;
 
-    IsEnableEnum(Integer value) {
-        this.value = value;
-    }
-
-    public Integer value() {
-        return this.value;
-    }
 }
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/task/PointCollectTaskNet60.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/task/PointCollectTaskNet60.java
index 005363a..9770ce1 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/task/PointCollectTaskNet60.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/task/PointCollectTaskNet60.java
@@ -23,7 +23,7 @@
 public class PointCollectTaskNet60 implements ITask {
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
-    private static final String NET = "NET60";
+    private static final String NET = "1min";
 
     @Resource
     private PointCollector pointCollector;
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/data/service/impl/PlanDataSetServiceImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/data/service/impl/PlanDataSetServiceImpl.java
index ced27bf..d0fb051 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/data/service/impl/PlanDataSetServiceImpl.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/data/service/impl/PlanDataSetServiceImpl.java
@@ -1,5 +1,6 @@
 package com.iailab.module.data.plan.data.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.iailab.framework.common.pojo.PageResult;
 import com.iailab.framework.common.service.impl.BaseServiceImpl;
 import com.iailab.framework.common.util.object.BeanUtils;
@@ -30,7 +31,9 @@
 
     @Override
     public List<PlanDataSetEntity> list(PlanDataSetPageReqVO reqVO) {
-        return baseDao.selectList();
+        QueryWrapper<PlanDataSetEntity> queryWrapper = new QueryWrapper<>();
+        queryWrapper.orderByDesc("create_time");
+        return baseDao.selectList(queryWrapper);
     }
 
     @Override
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java
index e46e544..4e116ea 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java
@@ -93,10 +93,12 @@
         StringBuilder whereSql = new StringBuilder();
         String startStr = DateUtils.format(startTime, DateUtils.DATE_NUMBER_PATTERN);
         String endStr = DateUtils.format(endTime, DateUtils.DATE_NUMBER_PATTERN);
-        whereSql.append(" plan_t.start_time <= ")
+        whereSql.append(" plan_t.start_time <= '")
                 .append(endStr)
-                .append(" and plan_t.end_time >= ")
-                .append(startStr);
+                .append("'")
+                .append(" and plan_t.end_time >= '")
+                .append(startStr)
+                .append("'");
         params.put("whereSql", whereSql.toString());
         return params;
     }
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/controller/admin/DaPointController.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/controller/admin/DaPointController.java
index efc7dce..e4d79db 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/controller/admin/DaPointController.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/controller/admin/DaPointController.java
@@ -1,6 +1,5 @@
 package com.iailab.module.data.point.controller.admin;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.iailab.framework.apilog.core.annotation.ApiAccessLog;
 import com.iailab.framework.common.pojo.CommonResult;
 import com.iailab.framework.common.pojo.PageParam;
@@ -8,11 +7,12 @@
 import com.iailab.framework.common.util.object.ConvertUtils;
 import com.iailab.framework.excel.core.util.ExcelUtils;
 import com.iailab.module.data.api.dto.ApiPointValueQueryDTO;
-import com.iailab.module.data.channel.common.service.ChannelSourceService;
 import com.iailab.module.data.common.enums.DataSourceType;
+import com.iailab.module.data.common.enums.DataTypeEnum;
+import com.iailab.module.data.common.enums.MeasureValueType;
 import com.iailab.module.data.influxdb.service.InfluxDBService;
+import com.iailab.module.data.point.common.PointTypeEnum;
 import com.iailab.module.data.point.dto.DaPointDTO;
-import com.iailab.module.data.point.entity.DaPointEntity;
 import com.iailab.module.data.point.service.DaPointService;
 import com.iailab.module.data.point.vo.*;
 import io.swagger.v3.oas.annotations.Operation;
@@ -34,8 +34,8 @@
 import java.text.SimpleDateFormat;
 import java.util.*;
 
-import static com.iailab.framework.common.pojo.CommonResult.success;
 import static com.iailab.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static com.iailab.framework.common.pojo.CommonResult.success;
 
 
 /**
@@ -180,14 +180,14 @@
     public void importTemplate(HttpServletResponse response) throws IOException {
         // 手动创建导出 demo
         List<PointImportExcelVO> list = Arrays.asList(
-                PointImportExcelVO.builder().pointName("测点1").pointType("MEASURE").dataType("float").valueType("SIMULATE")
+                PointImportExcelVO.builder().pointName("测点1").pointType(PointTypeEnum.MEASURE_POINT.getCode()).dataType(DataTypeEnum.FLOAT.getCode()).valueType(MeasureValueType.SIMULATE.getCode())
                         .storeType(null).unit("t(非必填)").unittransfactor(new BigDecimal(1)).defaultValue(new BigDecimal(0)).maxValue(new BigDecimal(10000000.000000)).minValue(new BigDecimal(0))
                         .minfreqid("1min").remark("备注(非必填)").sourceType(DataSourceType.HTTP.getCode())
                         .sourceName("").tagNo("SARD1200G00102RC001")
                         .build()
         );
         // 输出
-        ExcelUtils.write(response, "测点导入模板.xlsx", "测点列表", PointImportExcelVO.class, list);
+        ExcelUtils.write(response, "测点导入模板.xlsx", "测点列表", PointImportExcelVO.class, list,true);
     }
 
     @PostMapping("/import")
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java
index a761e3b..42ea9ae 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/service/impl/DaPointServiceImpl.java
@@ -23,18 +23,20 @@
 import com.iailab.module.data.point.service.DaMeasurePointService;
 import com.iailab.module.data.point.service.DaPointService;
 import com.iailab.module.data.point.service.DaSequenceNumService;
-import com.iailab.module.data.point.vo.*;
+import com.iailab.module.data.point.vo.DaPointPageReqVO;
+import com.iailab.module.data.point.vo.PointImportExcelVO;
+import com.iailab.module.data.point.vo.PointImportRespVO;
 import com.iailab.module.infra.api.config.ConfigApi;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-
 import javax.annotation.Resource;
 import java.util.*;
 
 import static com.iailab.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.iailab.module.data.enums.ErrorCodeConstants.*;
+import static com.iailab.module.data.enums.ErrorCodeConstants.POINT_EXISTS;
+import static com.iailab.module.data.enums.ErrorCodeConstants.POINT_IMPORT_LIST_IS_EMPTY;
 
 /**
  * @author lirm
@@ -381,7 +383,7 @@
         Arrays.asList(ids).forEach(item -> {
             DaPointEntity entity = new DaPointEntity();
             entity.setId(item);
-            entity.setIsEnable(IsEnableEnum.ENABLE.value());
+            entity.setIsEnable(IsEnableEnum.ENABLE.getCode());
             daPointDao.updateById(entity);
         });
     }
@@ -394,7 +396,7 @@
         Arrays.asList(ids).forEach(item -> {
             DaPointEntity entity = new DaPointEntity();
             entity.setId(item);
-            entity.setIsEnable(IsEnableEnum.DISABLE.value());
+            entity.setIsEnable(IsEnableEnum.DISABLE.getCode());
             daPointDao.updateById(entity);
         });
     }
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/PointImportExcelVO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/PointImportExcelVO.java
index ee99bb8..7cf3b6d 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/PointImportExcelVO.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/vo/PointImportExcelVO.java
@@ -1,6 +1,9 @@
 package com.iailab.module.data.point.vo;
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.iailab.framework.excel.core.annotations.DictFormat;
+import com.iailab.framework.excel.core.annotations.ExcelColumnSelect;
+import com.iailab.framework.excel.core.convert.DictConvert;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -26,10 +29,14 @@
     @ExcelProperty("测点名称")
     private String pointName;
 
-    @ExcelProperty("测点类型")
+    @ExcelProperty(value = "测点类型", converter = DictConvert.class)
+    @ExcelColumnSelect(dictType = "data_point_type")
+    @DictFormat("data_point_type")
     private String pointType;
 
-    @ExcelProperty("数据类型")
+    @ExcelProperty(value = "数据类型", converter = DictConvert.class)
+    @ExcelColumnSelect(dictType = "point_data_type")
+    @DictFormat("point_data_type")
     private String dataType;
 
     @ExcelProperty("存储类型")
@@ -57,7 +64,9 @@
     @ExcelProperty("备注")
     private String remark;
 
-    @ExcelProperty("数据源类型")
+    @ExcelProperty(value = "数据源类型", converter = DictConvert.class)
+    @ExcelColumnSelect(dictType = "data_source_type")
+    @DictFormat("data_source_type")
     private String sourceType;
 
     @ExcelProperty("数据源名称")
@@ -69,7 +78,9 @@
     @ExcelProperty("平滑尺度")
     private Integer dimension;
 
-    @ExcelProperty("值类型")
+    @ExcelProperty(value = "值类型", converter = DictConvert.class)
+    @ExcelColumnSelect(dictType = "measure_value_type")
+    @DictFormat("measure_value_type")
     private String valueType;
 
     @ExcelProperty("计算公式")
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 359965a..37d7c9c 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
@@ -207,6 +207,9 @@
       - t_video_log
       - t_video_camera
       - t_video_image
+      - t_plan_data_set
+      - t_plan_item_category
+      - t_plan_item
   app:
     app-key: data
     app-secret: 85b0df7edc3df3611913df34ed695011
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/MdkConstant.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/MdkConstant.java
index ab8c089..fcc9adf 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/MdkConstant.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/common/MdkConstant.java
@@ -46,4 +46,12 @@
      * 项目发布dll和jar目录
      */
     String PROJECT_PUBLISH = "projectPublish";
+    /**
+     * setup.py
+     */
+    String SETUP_PY = "setup.py";
+    /**
+     * 编译pyd生成文件后缀
+     */
+    String PYD_SUFFIX = ".cp37-win_amd64.pyd";
 }
\ No newline at end of file
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 947da19..ae18b35 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
@@ -217,6 +217,9 @@
             throw new RuntimeException("模型文件不能为空!");
         } else {
             URLClassLoader classLoader = DllUtils.getClassLoader(projectId);
+            if (null == classLoader) {
+                throw new RuntimeException("dll未发布,classLoader为null");
+            }
             Class<?> clazz = classLoader.loadClass(model.getClassName());
             Method method = clazz.getMethod(model.getMethodName(), model.getParamsArray());
             return (HashMap)method.invoke(clazz.newInstance(), paramsValueArray);
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 8d75179..bd527a4 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
@@ -1,5 +1,7 @@
 package com.iailab.module.model.mpk.controller.admin;
 
+import cn.hutool.cache.CacheUtil;
+import cn.hutool.cache.impl.FIFOCache;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.iail.utils.RSAUtils;
@@ -11,6 +13,7 @@
 import com.iailab.module.model.mpk.common.utils.Readtxt;
 import com.iailab.module.model.mpk.dto.MdkDTO;
 import com.iailab.module.model.mpk.dto.MdkRunDTO;
+import com.iailab.module.model.mpk.dto.MethodSettingDTO;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
@@ -24,6 +27,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.UUID;
 
 import static com.iailab.framework.common.pojo.CommonResult.error;
 import static com.iailab.framework.common.pojo.CommonResult.success;
@@ -40,6 +44,8 @@
     @Value("${mpk.bak-file-path}")
     private String mpkBakFilePath;
 
+    // 先进先出缓存
+    private static FIFOCache<String, String> cache = CacheUtil.newFIFOCache(100);
 
     /**
      * @description: 模型测试运行
@@ -76,16 +82,19 @@
 
         System.out.println("runTime=" + System.currentTimeMillis());
         try {
-            List<String> datas = dto.getDatas();
+            List<String> uuids = dto.getUuids();
 
-            int paramLength = dto.getHasModel() ? datas.size() + 2 : datas.size() + 1;
+            int paramLength = dto.getHasModel() ? uuids.size() + 2 : uuids.size() + 1;
             Object[] paramsValueArray = new Object[paramLength];
             Class<?>[] paramsArray = new Class[paramLength];
 
             try {
-                for (int i = 0; i < datas.size(); i++) {
-                    String json = datas.get(i);
-                    JSONArray jsonArray = JSON.parseArray(json);
+                for (int i = 0; i < uuids.size(); i++) {
+                    String uuid = uuids.get(i);
+                    if (!cache.containsKey(uuid)) {
+                        return error(GlobalErrorCodeConstants.BAD_REQUEST.getCode(),"请重新导入模型参数");
+                    }
+                    JSONArray jsonArray = JSON.parseArray(cache.get(uuid));
                     double[][] data = new double[jsonArray.size()][jsonArray.getJSONArray(0).size()];
                     for (int j = 0; j < jsonArray.size(); j++) {
                         for (int k = 0; k < jsonArray.getJSONArray(j).size(); k++) {
@@ -97,17 +106,22 @@
                 }
             } catch (Exception e) {
                 e.printStackTrace();
-                return error(GlobalErrorCodeConstants.BAD_REQUEST.getCode(),"参数错误,请检查!");
+                return error(GlobalErrorCodeConstants.BAD_REQUEST.getCode(),"模型参数错误,请检查!");
             }
 
-            if (dto.getHasModel()) {
-                paramsValueArray[datas.size()] = dto.getModel();
-                paramsValueArray[datas.size() + 1] = dto.getModelSettings();
-                paramsArray[datas.size()] = HashMap.class;
-                paramsArray[datas.size() + 1] = HashMap.class;
-            }else {
-                paramsValueArray[datas.size()] = dto.getModelSettings();
-                paramsArray[datas.size()] = HashMap.class;
+            try {
+                if (dto.getHasModel()) {
+                    paramsValueArray[uuids.size()] = dto.getModel();
+                    paramsValueArray[uuids.size() + 1] = handleModelSettings(dto.getModelSettings());
+                    paramsArray[uuids.size()] = HashMap.class;
+                    paramsArray[uuids.size() + 1] = HashMap.class;
+                }else {
+                    paramsValueArray[uuids.size()] = handleModelSettings(dto.getModelSettings());
+                    paramsArray[uuids.size()] = HashMap.class;
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                return error(GlobalErrorCodeConstants.BAD_REQUEST.getCode(),"模型设置错误,请检查!");
             }
 
             HashMap result = (HashMap) clazz.getDeclaredMethod(dto.getMethodName(), paramsArray).invoke(clazz.newInstance(), paramsValueArray);
@@ -122,6 +136,37 @@
             }
             System.gc();
         }
+    }
+
+    private HashMap<String, Object> handleModelSettings(List<MethodSettingDTO> modelSettings) {
+        HashMap<String, Object> resultMap = null;
+        try {
+            resultMap = new HashMap<>(modelSettings.size());
+            for (MethodSettingDTO modelSetting : modelSettings) {
+                switch (modelSetting.getValueType()) {
+                    case "int":
+                        resultMap.put(modelSetting.getSettingKey(), Integer.valueOf(modelSetting.getSettingValue()));
+                        break;
+                    case "string":
+                        resultMap.put(modelSetting.getSettingKey(), modelSetting.getSettingValue());
+                        break;
+                    case "decimal":
+                        resultMap.put(modelSetting.getSettingKey(), Double.valueOf(modelSetting.getSettingValue()));
+                        break;
+                    case "decimalArray":
+                        JSONArray jsonArray = JSON.parseArray(modelSetting.getSettingValue());
+                        double[] doubles = new double[jsonArray.size()];
+                        for (int i = 0; i < jsonArray.size(); i++) {
+                            doubles[i] = Double.valueOf(String.valueOf(jsonArray.get(i)));
+                        }
+                        resultMap.put(modelSetting.getSettingKey(), doubles);
+                        break;
+                }
+            }
+        } catch (NumberFormatException e) {
+            throw new RuntimeException("模型参数有误,请检查!!!");
+        }
+        return resultMap;
     }
 
     /**
@@ -157,13 +202,18 @@
 
     @PostMapping("/import")
     @Operation(summary = "导入参数")
-    public CommonResult<List<String>> importExcel(@RequestParam("file") MultipartFile file) throws Exception {
+    public CommonResult<List<HashMap<String,Object>>> importExcel(@RequestParam("file") MultipartFile file) throws Exception {
         List<double[][]> datas = Readtxt.readMethodExcel(file);
-        List<String> result = new ArrayList<>();
+        List<HashMap<String,Object>> result = new ArrayList<>();
         if (!CollectionUtils.isEmpty(datas)) {
             for (double[][] data : datas) {
                 if (data.length > 0) {
-                    result.add(JSON.toJSONString(data));
+                    HashMap<String,Object> map = new HashMap<>();
+                    String uuid = UUID.randomUUID().toString();
+                    map.put("uuid",uuid);
+                    map.put("data",JSON.toJSONString(data));
+                    cache.put(uuid,JSON.toJSONString(data));
+                    result.add(map);
                 }
             }
         }
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 ad08abe..8727d80 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
@@ -25,7 +25,7 @@
 
     private HashMap<String, Object> model;
 
-    private HashMap<String, Object> modelSettings;
+    private List<MethodSettingDTO> modelSettings;
 
-    private List<String> datas;
+    private List<String> uuids;
 }
\ No newline at end of file
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MethodSettingDTO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MethodSettingDTO.java
index fce3f21..4b322e3 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MethodSettingDTO.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/dto/MethodSettingDTO.java
@@ -61,4 +61,9 @@
     private Integer min;
 
     private List<SettingSelectDTO> settingSelects;
+
+    /**
+     * 参数值
+     */
+    private String settingValue;
 }
\ No newline at end of file
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java
index afe68d0..3db6b2b 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mpk/service/impl/MpkFileServiceImpl.java
@@ -22,7 +22,6 @@
 import com.iailab.module.model.mpk.dto.GeneratorCodeHistoryDTO;
 import com.iailab.module.model.mpk.dto.ModelMethodDTO;
 import com.iailab.module.model.mpk.dto.MpkFileDTO;
-import com.iailab.module.model.mpk.dto.ProjectPackageHistoryDTO;
 import com.iailab.module.model.mpk.entity.GeneratorCodeHistoryEntity;
 import com.iailab.module.model.mpk.entity.MpkFileEntity;
 import com.iailab.module.model.mpk.entity.ProjectPackageHistoryEntity;
@@ -246,6 +245,11 @@
         //生成Jni.h文件
         File jniHFile = new File(dirPath.getAbsolutePath() + File.separator + MdkConstant.C + File.separator + entity.getPyName() + "Jni.h");
         GenUtils.drawTemplate("Jni.h.vm", dataContext, jniHFile);
+
+        // 添加python源文件
+        String pyFilePath = dirPath.getAbsolutePath() + File.separator + MdkConstant.ALGS + File.separator + entity.getPyModule().replace(".", File.separator) + File.separator + entity.getPyName() + ".pyd";
+        FileUtil.mkParentDirs(pyFilePath);
+        FileUtil.copy(entity.getFilePath(), pyFilePath, true);
 
         // 资源文件
         FileUtil.copy(mpkResources + File.separator + "libs", dirPath.getAbsolutePath(), true);
@@ -492,26 +496,86 @@
         Long tenantId = TenantContextHolder.getTenantId();
         // 备份文件 租户隔离
         String mpkTenantBakFilePath = mpkBakFilePath + File.separator + tenantId;
-
-        File dir = new File(mpkTenantBakFilePath);
-        if (!dir.exists()) {
-            dir.mkdirs();
+        File bakDir = new File(mpkTenantBakFilePath);
+        if (!bakDir.exists()) {
+            bakDir.mkdirs();
+        }
+        //临时文件夹
+        File tempDir = null;
+        try {
+            tempDir = Files.createTempDirectory("pyFileTmp").toFile();
+            log.info("生成临时文件夹," + tempDir.getAbsolutePath());
+        } catch (IOException e) {
+            throw new RuntimeException("创建临时文件夹异常",e);
         }
         String fileName = file.getOriginalFilename();
-        String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
-        File saveFile = new File(dir.getAbsolutePath() + File.separator + UUID.randomUUID() + fileSuffix);
+        File pydBakFile = new File(bakDir.getAbsolutePath() + File.separator + UUID.randomUUID() + ".pyd");
 
-        saveFile.createNewFile();
-        // 保存
-        file.transferTo(saveFile);
+        String pyName = fileName.substring(0, fileName.lastIndexOf("."));
+        try {
+            // py文件存入临时文件夹
+            File saveFile = new File(tempDir.getAbsolutePath() + File.separator + fileName);
+            saveFile.createNewFile();
+            file.transferTo(saveFile);
+
+            // 临时文件夹中生成pyd文件
+            // 生成setup.py文件
+            createSetUpFile(tempDir.getAbsolutePath(),fileName,pyName);
+            // 执行cmd命令编译pyd文件
+            createPydFile(tempDir.getAbsolutePath());
+
+            // 临时文件夹中pyd文件移到dir下,修改为uuid.pyd
+            File pydFile = new File(tempDir.getAbsolutePath() + File.separator + pyName + MdkConstant.PYD_SUFFIX);
+            if (!pydFile.exists()) {
+                throw new RuntimeException("编译pyd文件失败!");
+            }
+            log.info("备份pyd文件," + pydBakFile.getAbsolutePath());
+            FileUtil.copy(pydFile,pydBakFile,true);
+        } catch (Exception e) {
+            throw new RuntimeException("编译pyd文件异常");
+        } finally {
+            if (tempDir.exists()) {
+                tempDir.delete();
+            }
+        }
 
         Map<String, String> result = new HashMap<>(2);
-        result.put("filePath", saveFile.getAbsolutePath());
-        result.put("fileName", fileName);
+        result.put("filePath", pydBakFile.getAbsolutePath());
+        result.put("fileName", pyName);
 
         return result;
     }
 
+    private void createPydFile(String dir) {
+        try {
+            String command = "python setup.py build_ext --inplace";
+            log.info("执行cmd命令编译pyd:" + command);
+            ProcessBuilder builder = new ProcessBuilder("cmd", "/c", command);
+            builder.directory(new File(dir));  // 设置工作目录
+            builder.redirectErrorStream(true);  // 将错误输出和标准输出合并
+            Process process = builder.start();
+            // 获取命令输出结果
+            InputStream inputStream = process.getInputStream();
+            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "GBK")); // 设置编码为GBK
+            String line;
+            while ((line = reader.readLine()) != null) {
+                log.info(line);
+            }
+            // 等待命令执行完成
+            process.waitFor();
+        } catch (Exception e) {
+            throw new RuntimeException("执行cmd命令生成dll异常", e);
+        }
+    }
+
+    private void createSetUpFile(String dir, String pyFileName, String pyName) {
+        // 生成setup.py文件
+        HashMap<String,Object> map = new HashMap<>();
+        map.put("fileName",pyFileName);
+        map.put("pyName",pyName);
+        GenUtils.drawTemplate("setup.py.vm",map,new File(dir + File.separator + MdkConstant.SETUP_PY));
+    }
+
     @Override
     public CommonResult<String> publish(Map<String, Object> params) {
         String historyId = (String) params.get("historyId");
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/template/impl.java.vm b/iailab-module-model/iailab-module-model-biz/src/main/resources/template/impl.java.vm
index 0ffc252..f1ebee1 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/resources/template/impl.java.vm
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/template/impl.java.vm
@@ -18,7 +18,8 @@
     @Override
     public HashMap<String, Object> ${entity.methodName}(#foreach ($column in [1..$entity.dataLength])double data${column}[][], #{end}#{if}($entity.model==1)HashMap<String, Object> models, #{end}HashMap<String, Object> settings) {
 #{if}($entity.model==1)
-        model = utils.createPredictHashmapplus(models);
+        //model = utils.createPredictHashmapplus(models);
+        model = models;
 #{end}
         if (#{foreach} ($column in [1..$entity.dataLength])#{if}($column==1)data${column} == null || data${column}.length == 0 || data${column}[0].length == 0#{else} || data${column} == null || data${column}.length == 0 || data${column}[0].length == 0#{end}#{end}) {
             result = new HashMap<String, Object>();
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/template/setup.py.vm b/iailab-module-model/iailab-module-model-biz/src/main/resources/template/setup.py.vm
new file mode 100644
index 0000000..f5f27a8
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/template/setup.py.vm
@@ -0,0 +1,26 @@
+# CMD 窗口运行
+# python alg_setup.py build_ext --inplace
+from distutils.core import setup, Extension
+from Cython.Build import cythonize
+import numpy
+#import sklearn
+setup(
+    name='iail_mdk', 
+    version='1.0', 
+    author='IAIL',
+    author_email='zhouf_2011@mail.dlut.edu.cn',
+    ext_modules = cythonize([
+        Extension(
+            '${pyName}',
+            # 算法路径
+            sources=['${fileName}'],
+            language='c++',
+            include_dirs=[numpy.get_include()],
+            library_dirs=[],
+            libraries=[],
+            extra_compile_args=[],
+            extra_link_args=[]
+            )
+        ]
+    )
+)
\ No newline at end of file

--
Gitblit v1.9.3