package com.iailab.module.model.mdk.predict;
|
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity;
|
import com.iailab.module.model.mcs.pre.service.MmItemResultService;
|
import com.iailab.module.model.mdk.factory.ItemEntityFactory;
|
import com.iailab.module.model.mdk.vo.DataValueVO;
|
import com.iailab.module.model.mdk.vo.PredictResultVO;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import java.util.*;
|
|
@Service
|
public class PredictResultHandler {
|
@Autowired
|
private MmItemResultService mmItemResultService;
|
|
@Autowired
|
private ItemEntityFactory itemEntityFactory;
|
|
/**
|
* convertToPredictData
|
*
|
* @param predictResult
|
* @return
|
*/
|
public Map<String, List<DataValueVO>> convertToPredictData(PredictResultVO predictResult) {
|
Map<String, List<DataValueVO>> resultMap = new HashMap<>();
|
List<MmItemOutputEntity> itemOutPutList = itemEntityFactory.getOutPutByItemId(predictResult.getPredictId());
|
|
if (!CollectionUtils.isEmpty(predictResult.getPredictList())) {
|
resultMap.put(itemOutPutList.get(0).getId(), predictResult.getPredictList());
|
return resultMap;
|
}
|
Map<com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity, double[]> predictMatrixs = predictResult.getPredictMatrixs();
|
HashMap<String,List<DataValueVO>> predictLists = new HashMap<>();
|
for (Map.Entry<com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity, double[]> entry : predictMatrixs.entrySet()) {
|
Integer rows = entry.getValue().length;
|
List<DataValueVO> predictDataList = new ArrayList<>();
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(predictResult.getPredictTime());
|
for (Integer i = 0; i < rows; i++) {
|
DataValueVO predictData = new DataValueVO();
|
predictData.setDataTime(calendar.getTime());
|
predictData.setDataValue(Double.valueOf(entry.getValue()[i]));
|
predictDataList.add(predictData);
|
|
calendar.add(Calendar.SECOND, predictResult.getGranularity());
|
}
|
resultMap.put(entry.getKey().getId(), predictDataList);
|
predictLists.put(entry.getKey().getResultstr(), predictDataList);
|
}
|
predictResult.setPredictLists(predictLists);
|
return resultMap;
|
}
|
|
public Map<String, List<DataValueVO>> convertToPredictData2(PredictResultVO predictResult) {
|
Map<String, List<DataValueVO>> predictLists = new HashMap<>();
|
if (!CollectionUtils.isEmpty(predictResult.getPredictList())) {
|
return predictLists;
|
}
|
Map<com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity, double[]> predictMatrixs = predictResult.getPredictMatrixs();
|
for (Map.Entry<com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity, double[]> entry : predictMatrixs.entrySet()) {
|
Integer rows = entry.getValue().length;
|
List<DataValueVO> predictDataList = new ArrayList<>();
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(predictResult.getPredictTime());
|
for (Integer i = 0; i < rows; i++) {
|
DataValueVO predictData = new DataValueVO();
|
predictData.setDataTime(calendar.getTime());
|
predictData.setDataValue(Double.valueOf(entry.getValue()[i]));
|
predictDataList.add(predictData);
|
|
calendar.add(Calendar.SECOND, predictResult.getGranularity());
|
}
|
predictLists.put(entry.getKey().getResultstr(), predictDataList);
|
}
|
return predictLists;
|
}
|
|
/**
|
* savePredictResult
|
*
|
* @param predictResult
|
*/
|
@Async
|
@DSTransactional
|
public void savePredictResult(PredictResultVO predictResult) {
|
Map<String, List<DataValueVO>> resultMap = convertToPredictData(predictResult);
|
mmItemResultService.savePredictValue(resultMap, predictResult.getLt(), "n", predictResult.getPredictTime());
|
// 存double类型输出
|
if (!CollectionUtils.isEmpty(predictResult.getPredictDoubleValues())) {
|
mmItemResultService.savePredictValue(predictResult.getPredictDoubleValues(), predictResult.getPredictTime());
|
}
|
}
|
|
public List<DataValueVO> getPredictValueByItemNo(String itemNo, Date start, Date end) {
|
String itemId = itemEntityFactory.getItemByItemNo(itemNo).getId();
|
List<MmItemOutputEntity> outputList = itemEntityFactory.getOutPutByItemId(itemId);
|
return mmItemResultService.getPredictValue(outputList.get(0).getId(), start, end);
|
}
|
|
public List<DataValueVO> getPredictValueByItemId(String itemId, Date start, Date end) {
|
List<MmItemOutputEntity> outputList = itemEntityFactory.getOutPutByItemId(itemId);
|
return mmItemResultService.getPredictValue(outputList.get(0).getId(), start, end);
|
}
|
}
|