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.model.mcs.pre.entity.MmModelParamEntity; import com.iailab.module.model.mcs.sche.entity.StScheduleModelParamEntity; import com.iailab.module.model.mcs.sche.service.StScheduleModelParamService; 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 org.springframework.util.CollectionUtils; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @Component public class ScheduleSampleInfoConstructor extends SampleInfoConstructor { @Autowired private StScheduleModelParamService stScheduleModelParamService; @Autowired private DataPointApi dataPointApi; @Autowired private PlanItemApi planItemApi; @Autowired private IndItemApi indItemApi; @Override protected Integer getSampleColumn(String modelId) { return null; } @Override protected SampleInfo getColumnInfo(String modelId, Date predictTime, Map<Integer, Integer> dynamicDataLength) { SampleInfo sampleInfo = new SampleInfo(); List<ColumnItemPort> resultList = new ArrayList<>(); List<ColumnItem> columnItemList = new ArrayList<>(); ColumnItem columnInfo = new ColumnItem(); ColumnItemPort curPort = new ColumnItemPort(); //当å‰ç«¯å£ List<StScheduleModelParamEntity> modelInputParamEntityList = stScheduleModelParamService.getByModelidFromCache(modelId); if (CollectionUtils.isEmpty(modelInputParamEntityList)) { return null; } //设置当å‰ç«¯å£å·ï¼Œåˆå§‹å€¼ä¸ºæœ€å°ç«¯å£ï¼ˆæŸ¥è¯¢ç»“果按端å£å·ä»Žå°åˆ°è¾¾æŽ’列) int curPortOrder = modelInputParamEntityList.get(0).getModelparamportorder(); //设置当å‰æŸ¥è¯¢æ•°æ®é•¿åº¦ï¼Œåˆå§‹å€¼ä¸ºæœ€å°ç«¯å£æ•°æ®é•¿åº¦ int curDataLength = super.getDataLength(dynamicDataLength, curPortOrder, modelInputParamEntityList.get(0).getDatalength()); // 统一获å–æµ‹ç‚¹çš„ä¿¡æ¯ Set<String> pointIds = modelInputParamEntityList.stream().filter(e -> ModelParamType.getEumByCode(e.getModelparamtype()).equals(ModelParamType.DATAPOINT)).map(StScheduleModelParamEntity::getModelparamid).collect(Collectors.toSet()); List<ApiPointDTO> points = dataPointApi.getInfoByIds(pointIds); Map<String, ApiPointDTO> pointMap = points.stream().collect(Collectors.toMap(ApiPointDTO::getId, Function.identity())); // 统一获å–计划数æ®çš„ä¿¡æ¯ Set<String> planIds = modelInputParamEntityList.stream().filter(e -> ModelParamType.getEumByCode(e.getModelparamtype()).equals(ModelParamType.PLAN)).map(StScheduleModelParamEntity::getModelparamid).collect(Collectors.toSet()); 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) || 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)); for (StScheduleModelParamEntity entry : modelInputParamEntityList) { columnInfo.setParamType(entry.getModelparamtype()); columnInfo.setParamId(entry.getModelparamid()); columnInfo.setDataLength(super.getDataLength(dynamicDataLength, entry.getModelparamportorder(), entry.getDatalength())); columnInfo.setModelParamOrder(entry.getModelparamorder()); columnInfo.setModelParamPortOrder(entry.getModelparamportorder()); columnInfo.setGranularity(super.getGranularity(columnInfo, pointMap, planMap,indMap)); columnInfo.setStartTime(getStartTime(columnInfo, predictTime)); columnInfo.setEndTime(getEndTime(columnInfo, predictTime)); //对æ¯ä¸€ä¸ªçˆªè¿›è¡Œæ•°æ®é¡¹å½’并 if (curPortOrder != entry.getModelparamportorder()) { //当数æ®é¡¹ç«¯å£å·ä¸ä¸ºå½“å‰ç«¯å£å·æ—¶ï¼Œå°è£…上一个端å£ç±»ï¼Œæ“作下一个端å£ç±» curPort.setColumnItemList(columnItemList); curPort.setDataLength(curDataLength); curPort.setPortOrder(curPortOrder); resultList.add(curPort); curPort = new ColumnItemPort(); //对象é‡æ–°åˆå§‹åŒ–,防æ¢å¼•ç”¨æ‹·è´å¯¼è‡´æ•°æ®è¦†ç›– //å°è£…上一个端å£ç±»åŽæ›´æ–°å½“å‰çš„å„个å‚æ•° columnItemList = new ArrayList<>(); curDataLength = super.getDataLength(dynamicDataLength, entry.getModelparamportorder(), entry.getDatalength()); curPortOrder = entry.getModelparamportorder(); } columnItemList.add(columnInfo); columnInfo = new ColumnItem(); //对象é‡æ–°åˆå§‹åŒ–,防æ¢å¼•ç”¨æ‹·è´å¯¼è‡´æ•°æ®è¦†ç›– } //当è¿ä»£åˆ°æœ€åŽä¸€ä¸ªé¡¹çš„时候,å°è£…最åŽä¸€ä¸ªç«¯å£çš„ä¿¡æ¯ curPort.setColumnItemList(columnItemList); curPort.setDataLength(curDataLength); curPort.setPortOrder(curPortOrder); resultList.add(curPort); sampleInfo.setColumnInfo(resultList); sampleInfo.setPointMap(pointMap); sampleInfo.setPlanMap(planMap); sampleInfo.setIndMap(indMap); return sampleInfo; } @Override protected Integer getSampleCycle(String modelId) { return null; } }