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; } } 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 日期 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; 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,8 +77,42 @@ 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()) { 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 @@ -87,7 +122,7 @@ }); //默认都是double类型的数据,且按列向量进行拼接,默认初始值为0.0 double[][] matrix = new double[entry.getDataLength()][entry.getColumnItemList().size()]; 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; @@ -117,6 +152,9 @@ throw e; } } } SampleData sampleData = new SampleData(); sampleData.setMatrix(matrix); sampleDataList.add(sampleData); @@ -196,6 +234,7 @@ vo.setDataValue(Double.valueOf(t.getDataValue().toString())); return vo; }).collect(Collectors.toList()); break; default: break; } 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)); 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; // 设置时间偏移量 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; 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));