| | |
| | | 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 |
| | |
| | | private DataPointApi dataPointApi; |
| | | |
| | | @Autowired |
| | | private ItemEntityFactory itemEntityFactory; |
| | | private PlanItemApi planItemApi; |
| | | |
| | | @Autowired |
| | | private IndItemApi indItemApi; |
| | | |
| | | @Autowired |
| | | private MmPredictItemService mmPredictItemService; |
| | | |
| | | /** |
| | | * prepareSampleInfo |
| | |
| | | * @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; |
| | | } |
| | | |
| | |
| | | */ |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | | * 样本的列信息 |
| | |
| | | * @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; |
| | | } |
| | | |
| | | /** |
| | | * 计算取值的时间 |
| | |
| | | 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(); |
| | | } |
| | | } |