package com.iailab.module.model.mdk.predict; import com.iailab.module.model.mcs.pre.enums.ItemStatus; import com.iailab.module.model.mdk.factory.PredictItemFactory; import com.iailab.module.model.mdk.vo.ItemVO; import com.iailab.module.model.mdk.vo.PredictResultVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.text.MessageFormat; import java.time.Duration; import java.time.Instant; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author PanZhibao * @Description * @createTime 2024年08月30日 */ @Slf4j @Component public class PredictModuleHandler { @Autowired private PredictItemFactory predictItemFactory; @Autowired private PredictResultHandler predictResultHandler; public Map predict(List predictItemList, Date predictTime, int intervalTime) { Map result = new HashMap<>(); PredictResultVO predictResult = new PredictResultVO(); for (ItemVO predictItem : predictItemList) { if (!predictItem.getStatus().equals(ItemStatus.STATUS1.getCode())) { continue; } try { PredictItemHandler predictItemHandler = (PredictItemHandler)predictItemFactory.create(predictItem.getId()); Instant start = Instant.now(); try { predictResult = predictItemHandler.predict(predictTime, predictItem); } catch (Exception e) { e.printStackTrace(); log.error(String.valueOf(e)); } Instant end = Instant.now(); Long drtPre = Duration.between(start, end).getSeconds(); log.info(MessageFormat.format("预测项:{0},预测时间:{1}秒", predictItem.getItemName(), drtPre)); predictResult.setT(intervalTime); predictResult.setSaveIndex(predictItem.getSaveIndex()); predictResult.setLt(1); predictResultHandler.savePredictResult(predictResult); Instant endSave = Instant.now(); Long drtSave = Duration.between(end, endSave).getSeconds(); log.info(MessageFormat.format("预测项:{0},保存时间:{1}秒", predictItem.getItemName(), drtSave)); result.put(predictItem.getItemNo(), predictResult); } catch (Exception e) { e.printStackTrace(); log.error(MessageFormat.format("预测项编号:{0},预测项名称:{1},预测失败:{2} 预测时刻:{3}", predictItem.getId(), predictItem.getItemName(), e.getMessage(), predictTime)); } } return result; } }