package com.iailab.module.model.mdk.predict.impl; import com.iailab.framework.common.util.collection.CollectionUtils; import com.iailab.module.model.mcs.pre.entity.MmPredictModelEntity; import com.iailab.module.model.mcs.pre.service.MmPredictModelService; import com.iailab.module.model.mdk.common.enums.ItemPredictStatus; import com.iailab.module.model.mdk.common.exceptions.ItemInvokeException; import com.iailab.module.model.mdk.common.exceptions.ModelInvokeException; import com.iailab.module.model.mdk.predict.PredictItemHandler; import com.iailab.module.model.mdk.predict.PredictModelHandler; import com.iailab.module.model.mdk.vo.ItemVO; import com.iailab.module.model.mdk.vo.PredictResultVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.sql.Timestamp; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * @author PanZhibao * @Description * @createTime 2024年09月01日 */ @Component public class PredictItemNormalHandlerImpl implements PredictItemHandler { @Autowired private MmPredictModelService mmPredictModelService; @Autowired private PredictModelHandler predictModelHandler; @Override public PredictResultVO predict(Date predictTime, ItemVO predictItemDto) throws ItemInvokeException{ String itemId = predictItemDto.getId(); ItemPredictStatus itemStatus = ItemPredictStatus.PREDICTING; PredictResultVO finalResult = new PredictResultVO(); PredictResultVO predictResult = new PredictResultVO(); List predictResultList = new ArrayList<>(); try { // 获取预测项模型 List predictModelList = mmPredictModelService.getActiveModelByItemId(itemId); if (CollectionUtils.isAnyEmpty(predictModelList)) { throw new ModelInvokeException(MessageFormat.format("{0},itemId={1}", ModelInvokeException.errorGetModelEntity, itemId)); } for (MmPredictModelEntity predictModel : predictModelList) { predictResult = predictModelHandler.predictByModel(predictTime, predictModel); predictResult.setPredictId(itemId); predictResultList.add(predictResult); } itemStatus = ItemPredictStatus.SUCCESS; Calendar calendar = Calendar.getInstance(); calendar.setTime(predictTime); calendar.add(Calendar.MINUTE, predictResult.getPredictMatrix().length - 1); Timestamp endTime = new Timestamp(calendar.getTime().getTime()); finalResult = predictResultList.get(0); } catch (Exception ex) { ex.printStackTrace(); //预测项预测失败的状态 itemStatus = ItemPredictStatus.FAILED; throw new ItemInvokeException(MessageFormat.format("{0},itemId={1}", ItemInvokeException.errorItemFailed, itemId)); } return finalResult; } }