From 7f0bcd00c556889ba890e5e68c681f1b5d4267e1 Mon Sep 17 00:00:00 2001 From: dengzedong <dengzedong@email> Date: 星期四, 19 十二月 2024 18:07:20 +0800 Subject: [PATCH] 预测项状态添加模型结果异常 --- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java | 254 +++++++++++++++++++++++++++++--------------------- 1 files changed, 148 insertions(+), 106 deletions(-) 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 c86dc27..515637b 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 @@ -1,19 +1,25 @@ package com.iailab.module.model.mdk.sample; +import com.iailab.module.data.api.ind.IndItemApi; +import com.iailab.module.data.api.ind.dto.ApiIndItemDTO; +import com.iailab.module.data.api.plan.PlanItemApi; +import com.iailab.module.data.api.plan.dto.ApiPlanItemDTO; import com.iailab.module.data.api.point.DataPointApi; import com.iailab.module.data.api.point.dto.ApiPointDTO; -import com.iailab.module.data.enums.DataPointFreq; -import com.iailab.module.model.mdk.factory.ItemEntityFactory; +import com.iailab.module.data.enums.DataPointFreqEnum; +import com.iailab.module.data.enums.TimeGranularityEnum; +import com.iailab.module.data.enums.TimeGranularitySecEnum; +import com.iailab.module.model.mcs.pre.service.MmPredictItemService; +import com.iailab.module.model.mdk.common.enums.ModelParamType; import com.iailab.module.model.mdk.sample.dto.ColumnItem; import com.iailab.module.model.mdk.sample.dto.ColumnItemPort; import com.iailab.module.model.mdk.sample.dto.SampleInfo; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; import java.util.List; +import java.util.Map; /** * @author PanZhibao @@ -26,7 +32,13 @@ private DataPointApi dataPointApi; @Autowired - private ItemEntityFactory itemEntityFactory; + private PlanItemApi planItemApi; + + @Autowired + private IndItemApi indItemApi; + + @Autowired + private MmPredictItemService mmPredictItemService; /** * prepareSampleInfo @@ -35,14 +47,14 @@ * @param predictTime * @return */ - public SampleInfo prepareSampleInfo(String modelId, Date predictTime) { + protected SampleInfo prepareSampleInfo(String modelId, Date predictTime) { SampleInfo sampleInfo = new SampleInfo(); //调用样本列数的方法 - sampleInfo.setSampleColumn(getSampleColumn(modelId)); +// sampleInfo.setSampleColumn(getSampleColumn(modelId)); //样本的列信息 sampleInfo.setColumnInfo(getColumnInfo(modelId, predictTime)); //样本的采样周期 - sampleInfo.setSampleCycle(getSampleCycle(modelId)); +// sampleInfo.setSampleCycle(getSampleCycle(modelId)); return sampleInfo; } @@ -54,104 +66,6 @@ */ protected abstract Integer getSampleColumn(String modelId); - /** - * 获取开始时间 - * - * @param columnItem - * @param originalTime - * @return - * @throws Exception - */ - protected Date getStartTime(ColumnItem columnItem, Date originalTime) { - Date dateTime = new Date(); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(originalTime); - switch (columnItem.getParamType()) { - case "DATAPOINT": - ApiPointDTO dataPoint = dataPointApi.getPointById(columnItem.getParamId()); - if (dataPoint == null) { - return null; - } - dateTime = calculateTime(originalTime, true, columnItem.getDataLength(), DataPointFreq.getEumByCode(dataPoint.getMinfreqid()).getValue()); - break; - case "PREDICTITEM": - dateTime = calendar.getTime(); - break; - case "IND-HIS": - dateTime = calculateTime(originalTime, true, columnItem.getDataLength(), 60); - break; - case "IND-PLAN": - dateTime = calendar.getTime(); - break; - default: - break; - } - return dateTime; - } - - /** - * 获取结束时间 - * - * @param columnItem - * @param originalTime - * @return - * @throws Exception - */ - protected Date getEndTime(ColumnItem columnItem, Date originalTime) { - Date dateTime = new Date(); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(originalTime); - switch (columnItem.getParamType()) { - case "DATAPOINT": - ApiPointDTO dataPoint = dataPointApi.getPointById(columnItem.getParamId()); - if (dataPoint == null) { - return null; - } - calendar.add(Calendar.SECOND, DataPointFreq.getEumByCode(dataPoint.getMinfreqid()).getValue() * -1); - break; - case "PREDICTITEM": - dateTime = calculateTime(originalTime, false, columnItem.getDataLength(), 60); - break; - case "IND-HIS": - dateTime = calendar.getTime(); - break; - case "IND-PLAN": - dateTime = calculateTime(originalTime, false, columnItem.getDataLength(), 60); - break; - default: - break; - } - return dateTime; - } - - /** - * 获取粒度,s - * - * @param columnItem - * @return - * @throws Exception - */ - protected Integer getGranularity(ColumnItem columnItem) { - Integer granularity = 60; - switch (columnItem.getParamType()) { - case "DATAPOINT": - ApiPointDTO dataPoint = dataPointApi.getPointById(columnItem.getParamId()); - granularity = DataPointFreq.getEumByCode(dataPoint.getMinfreqid()).getValue(); - break; - case "PREDICTITEM": - granularity = itemEntityFactory.getItemById(columnItem.getParamId()).getGranularity(); - break; - case "IND-HIS": - granularity = 60; - break; - case "IND-PLAN": - granularity = 60; - break; - default: - break; - } - return granularity; - } /** * 样本的列信息 @@ -169,6 +83,118 @@ * @return */ protected abstract Integer getSampleCycle(String modelId); + + /** + * 获取开始时间 + * + * @param columnItem + * @param originalTime + * @return + * @throws Exception + */ + protected Date getStartTime(ColumnItem columnItem, Date originalTime, Map<String, ApiPointDTO> pointMap) { + Date dateTime = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(originalTime); + switch (ModelParamType.getEumByCode(columnItem.getParamType())) { + case DATAPOINT: + ApiPointDTO dataPoint = pointMap.get(columnItem.getParamId()); + if (dataPoint == null) { + return null; + } + dateTime = calculateTime(originalTime, true, columnItem.getDataLength(), DataPointFreqEnum.getEumByCode(dataPoint.getMinfreqid()).getValue()); + break; + case NORMALITEM: + case MERGEITEM: + dateTime = calendar.getTime(); + break; + case IND: + dateTime = calculateTime(originalTime, true, columnItem.getDataLength(), 60); + break; + case PLAN: + dateTime = calendar.getTime(); + break; + default: + break; + } + return dateTime; + } + + /** + * 获取结束时间 + * + * @param columnItem + * @param originalTime + * @return + * @throws Exception + */ + protected Date getEndTime(ColumnItem columnItem, Date originalTime,Map<String, ApiPointDTO> pointMap) { + Date dateTime = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(originalTime); + switch (ModelParamType.getEumByCode(columnItem.getParamType())) { + case DATAPOINT: + ApiPointDTO dataPoint = pointMap.get(columnItem.getParamId()); + if (dataPoint == null) { + return null; + } + dateTime = calendar.getTime(); + break; + case NORMALITEM: + case MERGEITEM: + dateTime = calendar.getTime(); + break; + case IND: + dateTime = calendar.getTime(); + break; + case PLAN: + ApiPlanItemDTO planItem = planItemApi.getInfoByNo(columnItem.getParamId()); + if (planItem == null) { + return null; + } + dateTime = calculateDate(originalTime, false, columnItem.getDataLength(), + TimeGranularityEnum.getEumByCode(planItem.getTimeGranularity()).getValue()); + break; + default: + break; + } + return dateTime; + } + + /** + * 获取粒度,s + * + * @param columnItem + * @return + * @throws Exception + */ + protected Integer getGranularity(ColumnItem columnItem) { + // 默认60s + Integer granularity = 60; + switch (ModelParamType.getEumByCode(columnItem.getParamType())) { + case DATAPOINT: + ApiPointDTO dataPoint = dataPointApi.getInfoById(columnItem.getParamId()); + granularity = DataPointFreqEnum.getEumByCode(dataPoint.getMinfreqid()).getValue(); + break; + case NORMALITEM: + granularity = mmPredictItemService.getItemByOutPutId(columnItem.getParamId()).getGranularity(); + break; + case MERGEITEM: + granularity = mmPredictItemService.getItemByIdFromCache(columnItem.getParamId()).getGranularity(); + break; + case IND: + ApiIndItemDTO indItemDTO = indItemApi.getInfoById(columnItem.getParamId()); + granularity = TimeGranularitySecEnum.getEumByCode(indItemDTO.getTimeGranularity()).getValue();; + break; + case PLAN: + ApiPlanItemDTO apiPlanItemDTO = planItemApi.getInfoById(columnItem.getParamId()); + granularity = TimeGranularitySecEnum.getEumByCode(apiPlanItemDTO.getTimeGranularity()).getValue(); + break; + default: + break; + } + return granularity; + } /** * 计算取值的时间 @@ -194,4 +220,20 @@ calendar.add(Calendar.SECOND, timeLength * granularity); return calendar.getTime(); } + + public Date calculateDate(Date originalTime, Boolean backward, int dataLength, int field) { + int timeLength; + if (backward) { + timeLength = (-1) * dataLength; + } else { + timeLength = dataLength - 1; + } + Date desTime = originalTime; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(desTime); + calendar.set(Calendar.MILLISECOND, 0); + // 数据长度 * 粒度 + calendar.add(Calendar.SECOND, timeLength); + return calendar.getTime(); + } } \ No newline at end of file -- Gitblit v1.9.3