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