From 042be316746210a681a21c3ecca6b7a44e793db0 Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期日, 09 三月 2025 23:31:37 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/sample/SampleInfoConstructor.java | 138 ++++++++++++++++----------------------------- 1 files changed, 50 insertions(+), 88 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 f59556b..e4ba98b 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 @@ -2,23 +2,20 @@ 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.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.util.CollectionUtils; import java.util.Calendar; import java.util.Date; -import java.util.List; +import java.util.Map; /** * @author PanZhibao @@ -26,12 +23,6 @@ * @createTime 2024年09月03日 */ abstract class SampleInfoConstructor { - - @Autowired - private DataPointApi dataPointApi; - - @Autowired - private PlanItemApi planItemApi; @Autowired private IndItemApi indItemApi; @@ -46,15 +37,9 @@ * @param predictTime * @return */ - public SampleInfo prepareSampleInfo(String modelId, Date predictTime) { - SampleInfo sampleInfo = new SampleInfo(); - //调用样本列数的方法 - sampleInfo.setSampleColumn(getSampleColumn(modelId)); + protected SampleInfo prepareSampleInfo(String modelId, Date predictTime, Map<Integer, Integer> dynamicDataLength) { //样本的列信息 - sampleInfo.setColumnInfo(getColumnInfo(modelId, predictTime)); - //样本的采样周期 - sampleInfo.setSampleCycle(getSampleCycle(modelId)); - return sampleInfo; + return getColumnInfo(modelId, predictTime, dynamicDataLength); } /** @@ -64,6 +49,24 @@ * @return */ protected abstract Integer getSampleColumn(String modelId); + + + /** + * 样本的列信息 + * + * @param modelId + * @param predictTime + * @return + */ + protected abstract SampleInfo getColumnInfo(String modelId, Date predictTime, Map<Integer, Integer> dynamicDataLength); + + /** + * 样本的采样周期 + * + * @param modelId + * @return + */ + protected abstract Integer getSampleCycle(String modelId); /** * 获取开始时间 @@ -75,25 +78,18 @@ */ protected Date getStartTime(ColumnItem columnItem, Date originalTime) { Date dateTime = new Date(); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(originalTime); switch (ModelParamType.getEumByCode(columnItem.getParamType())) { case DATAPOINT: - ApiPointDTO dataPoint = dataPointApi.getInfoById(columnItem.getParamId()); - if (dataPoint == null) { - return null; - } - dateTime = calculateTime(originalTime, true, columnItem.getDataLength(), DataPointFreqEnum.getEumByCode(dataPoint.getMinfreqid()).getValue()); + case PLAN: + dateTime = calculateTime(originalTime, true, columnItem.getDataLength() + 1, columnItem.getGranularity()); + break; + case IND: + case IND_ASCII: + dateTime = calculateTime(originalTime, true, columnItem.getDataLength() - 1, columnItem.getGranularity()); break; case NORMALITEM: case MERGEITEM: - dateTime = calendar.getTime(); - break; - case IND: - dateTime = calculateTime(originalTime, true, columnItem.getDataLength(), 60); - break; - case PLAN: - dateTime = calendar.getTime(); + dateTime = calculateTime(originalTime, false, 1, columnItem.getGranularity()); break; default: break; @@ -115,26 +111,16 @@ calendar.setTime(originalTime); switch (ModelParamType.getEumByCode(columnItem.getParamType())) { case DATAPOINT: - ApiPointDTO dataPoint = dataPointApi.getInfoById(columnItem.getParamId()); - if (dataPoint == null) { - return null; - } - dateTime = calendar.getTime(); + case PLAN: + dateTime = calculateTime(originalTime, true, 1, columnItem.getGranularity()); + break; + case IND: + case IND_ASCII: + dateTime = originalTime; 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()); + dateTime = calculateTime(originalTime, false, columnItem.getDataLength() + 1, columnItem.getGranularity()); break; default: break; @@ -149,26 +135,25 @@ * @return * @throws Exception */ - protected Integer getGranularity(ColumnItem columnItem) { + protected Integer getGranularity(ColumnItem columnItem,Map<String, ApiPointDTO> pointMap, Map<String, ApiPlanItemDTO> planMap,Map<String, ApiIndItemDTO> indMap) { // 默认60s Integer granularity = 60; switch (ModelParamType.getEumByCode(columnItem.getParamType())) { case DATAPOINT: - ApiPointDTO dataPoint = dataPointApi.getInfoById(columnItem.getParamId()); + ApiPointDTO dataPoint = pointMap.get(columnItem.getParamId()); granularity = DataPointFreqEnum.getEumByCode(dataPoint.getMinfreqid()).getValue(); break; case NORMALITEM: + case MERGEITEM: granularity = mmPredictItemService.getItemByOutPutId(columnItem.getParamId()).getGranularity(); break; - case MERGEITEM: - granularity = mmPredictItemService.getItemById(columnItem.getParamId()).getGranularity(); - break; case IND: - ApiIndItemDTO indItemDTO = indItemApi.getInfoById(columnItem.getParamId()); + case IND_ASCII: + ApiIndItemDTO indItemDTO = indMap.get(columnItem.getParamId()); granularity = TimeGranularitySecEnum.getEumByCode(indItemDTO.getTimeGranularity()).getValue();; break; case PLAN: - ApiPlanItemDTO apiPlanItemDTO = planItemApi.getInfoById(columnItem.getParamId()); + ApiPlanItemDTO apiPlanItemDTO = planMap.get(columnItem.getParamId()); granularity = TimeGranularitySecEnum.getEumByCode(apiPlanItemDTO.getTimeGranularity()).getValue(); break; default: @@ -176,23 +161,6 @@ } return granularity; } - - /** - * 样本的列信息 - * - * @param modelId - * @param predictTime - * @return - */ - protected abstract List<ColumnItemPort> getColumnInfo(String modelId, Date predictTime); - - /** - * 样本的采样周期 - * - * @param modelId - * @return - */ - protected abstract Integer getSampleCycle(String modelId); /** * 计算取值的时间 @@ -208,7 +176,7 @@ if (backward) { timeLength = (-1) * dataLength; } else { - timeLength = dataLength - 1; + timeLength = dataLength; } Date desTime = originalTime; Calendar calendar = Calendar.getInstance(); @@ -219,19 +187,13 @@ 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; + protected int getDataLength(Map<Integer, Integer> dynamicDataLength, Integer port, Integer dataLength) { + if (CollectionUtils.isEmpty(dynamicDataLength)) { + return dataLength; } - Date desTime = originalTime; - Calendar calendar = Calendar.getInstance(); - calendar.setTime(desTime); - calendar.set(Calendar.MILLISECOND, 0); - // 数据长度 * 粒度 - calendar.add(Calendar.SECOND, timeLength); - return calendar.getTime(); + if (dynamicDataLength.containsKey(port)) { + return dynamicDataLength.get(port); + } + return dataLength; } } \ No newline at end of file -- Gitblit v1.9.3