package com.iailab.module.model.mdk.predict;
|
|
import com.iailab.module.model.mcs.pre.enums.ItemRunStatusEnum;
|
import com.iailab.module.model.mcs.pre.enums.ItemStatus;
|
import com.iailab.module.model.mcs.pre.service.MmItemStatusService;
|
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;
|
|
@Autowired
|
private MmItemStatusService mmItemStatusService;
|
|
|
/**
|
* 预测处理
|
*
|
* @param predictItemList
|
* @param predictTime
|
* @param intervalTime
|
* @return
|
*/
|
public Map<String, PredictResultVO> predict(List<ItemVO> predictItemList, Date predictTime, int intervalTime) {
|
Map<String, PredictResultVO> result = new HashMap<>();
|
|
PredictResultVO predictResult = new PredictResultVO();
|
for (ItemVO predictItem : predictItemList) {
|
if (!predictItem.getStatus().equals(ItemStatus.STATUS1.getCode())) {
|
continue;
|
}
|
Long totalDur = 0L;
|
try {
|
mmItemStatusService.recordStatus(predictItem.getId(), ItemRunStatusEnum.PROCESSING, totalDur, predictTime);
|
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));
|
mmItemStatusService.recordStatus(predictItem.getId(), ItemRunStatusEnum.FAIL, totalDur, predictTime);
|
continue;
|
}
|
Instant end = Instant.now();
|
Long drtPre = Duration.between(start, end).getSeconds();
|
log.info(MessageFormat.format("预测项:{0},预测时间:{1}秒", predictItem.getItemName(), drtPre));
|
totalDur = totalDur + drtPre;
|
|
predictResult.setGranularity(predictItem.getGranularity());
|
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));
|
totalDur = totalDur + drtSave;
|
mmItemStatusService.recordStatus(predictItem.getId(), ItemRunStatusEnum.SUCCESS, totalDur, predictTime);
|
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));
|
mmItemStatusService.recordStatus(predictItem.getId(), ItemRunStatusEnum.FAIL, totalDur, predictTime);
|
}
|
}
|
return result;
|
}
|
}
|