package com.iailab.module.model.mcs.pre.service.impl;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.iailab.module.model.mcs.pre.dao.MmItemResultDao;
|
import com.iailab.module.model.mcs.pre.entity.MmItemResultEntity;
|
import com.iailab.module.model.mcs.pre.entity.MmItemResultJsonEntity;
|
import com.iailab.module.model.mcs.pre.service.MmItemResultService;
|
import com.iailab.module.model.mdk.vo.DataValueVO;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import java.math.BigDecimal;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author PanZhibao
|
* @date 2021年05月28日 10:34
|
*/
|
@Service
|
public class MmItemResultServiceImpl extends ServiceImpl<MmItemResultDao, MmItemResultEntity> implements MmItemResultService {
|
|
private final int max_group_count = 100;
|
|
private final String T_MM_ITEM_RESULT = "T_MM_ITEM_RESULT";
|
|
@Autowired
|
private MmItemResultDao mmItemResultDao;
|
|
@Override
|
public List<MmItemResultEntity> getListByOutputId(String outputid, Map<String, Object> params) {
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
Date startDateParam = null;
|
try {
|
startDateParam = sdf.parse((String)params.get("startTime"));
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
Date endDateParam = null;
|
try {
|
endDateParam = sdf.parse((String)params.get("endTime"));
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
|
List<MmItemResultEntity> list = mmItemResultDao.selectList(
|
new QueryWrapper<MmItemResultEntity>()
|
.eq("outputid", outputid)
|
.between("datatime", startDateParam, endDateParam)
|
.orderByAsc("datatime")
|
);
|
return list;
|
}
|
|
@Override
|
public void savePredictValue(Map<String, List<DataValueVO>> predictValueMap, int t, String nIndex, Date predictTime) {
|
List<MmItemResultEntity> importList = new ArrayList<>();
|
List<MmItemResultEntity> lastList = new ArrayList<>();
|
|
for (Map.Entry<String, List<DataValueVO>> entry : predictValueMap.entrySet()) {
|
for (DataValueVO dataVo : entry.getValue()) {
|
MmItemResultEntity importData = new MmItemResultEntity();
|
importData.setId(String.valueOf(UUID.randomUUID()));
|
importData.setOutputid(entry.getKey());
|
importData.setDatatime(dataVo.getDataTime());
|
importData.setDatavalue(new BigDecimal(dataVo.getDataValue()));
|
importList.add(importData);
|
}
|
|
List<DataValueVO> lastVoList = new ArrayList<>();
|
int size = entry.getValue().size();
|
t = t > 0 ? t : 0;
|
int n = "n".equals(nIndex) ? size : Integer.parseInt(nIndex);
|
int length = (n - t) > 0 ? (n - t) : 0; //预测完不变的数据长度
|
if (size >= n) {
|
for (int i = 0; i < (size - length); i ++) {
|
int index = length + i;
|
lastVoList.add(entry.getValue().get(index));
|
}
|
} else {
|
lastVoList = entry.getValue();
|
}
|
|
for (DataValueVO dataVo : lastVoList) {
|
MmItemResultEntity importData = new MmItemResultEntity();
|
importData.setId(String.valueOf(UUID.randomUUID()));
|
importData.setOutputid(entry.getKey());
|
importData.setDatatime(dataVo.getDataTime());
|
importData.setDatavalue(new BigDecimal(dataVo.getDataValue()));
|
lastList.add(importData);
|
}
|
|
MmItemResultJsonEntity resultJson = new MmItemResultJsonEntity();
|
resultJson.setId(UUID.randomUUID().toString());
|
resultJson.setOutputid(entry.getKey());
|
resultJson.setPredicttime(predictTime);
|
resultJson.setJsonvalue(JSONArray.toJSONString(entry.getValue()));
|
Map<String, Object> map4 = new HashMap(2);
|
map4.put("TABLENAME", "T_MM_ITEM_RESULT_JSON");
|
map4.put("entity", resultJson);
|
mmItemResultDao.savePredictJsonValue(map4);
|
|
Map<String, Object> params = new HashMap(4);
|
params.put("TABLENAME", T_MM_ITEM_RESULT);
|
params.put("OUTPUTID", entry.getKey());
|
params.put("STARTTIME", importList.get(0).getDatatime());
|
params.put("ENDTIME", importList.get(importList.size() - 1).getDatatime());
|
mmItemResultDao.deletePredictValue(params);
|
|
|
}
|
|
// Map<String, Object> params = new HashMap(4);
|
// params.put("TABLENAME", T_MM_ITEM_RESULT);
|
// params.put("OUTPUTID", importList.get(0).getOutputid());
|
// params.put("STARTTIME", importList.get(0).getDatatime());
|
// params.put("ENDTIME", importList.get(importList.size() - 1).getDatatime());
|
// mmItemResultDao.deletePredictValue(params);
|
|
// int num1 = importList.size() / max_group_count;
|
// int num2 = importList.size() % max_group_count;
|
// if (num2 != 0) {
|
// num1++;
|
// }
|
//
|
// List<MmItemResultEntity> tempList;
|
// //先删除已经存在的数据,再插入新数据
|
// for (int i = 0; i < num1; i++) {
|
// int startIndex = max_group_count * i;
|
// int count = max_group_count;
|
// if (num2!=0 && i == num1 - 1) {
|
// count = num2;
|
// }
|
// tempList = new ArrayList<>();
|
// //获取某个索引范围内的对象集合
|
// for (int j = startIndex; j < startIndex + count; j++) {
|
// tempList.add(importList.get(j));
|
// }
|
// Map<String, Object> map2 = new HashMap<>(2);
|
// map2.put("TABLENAME", T_MM_ITEM_RESULT);
|
// map2.put("list", tempList);
|
// mmItemResultDao.savePredictValue(map2);
|
// }
|
mmItemResultDao.insertBatch(importList,max_group_count);
|
|
Map<String, Object> map3 = new HashMap<>(2);
|
map3.put("TABLENAME", "T_MM_ITEM_RESULT_LAST_POINT");
|
map3.put("list", lastList);
|
mmItemResultDao.savePredictValue(map3);
|
}
|
|
@Override
|
public List<DataValueVO> getPredictValue(String outputid, Date startTime, Date endTime) {
|
List<DataValueVO> result = new ArrayList<>();
|
QueryWrapper<MmItemResultEntity> queryWrapper = new QueryWrapper<MmItemResultEntity>()
|
.eq("outputid", outputid)
|
.between("datatime", startTime, endTime)
|
.orderByAsc("datatime");
|
List<MmItemResultEntity> list = mmItemResultDao.selectList(queryWrapper);
|
if (CollectionUtils.isEmpty(list)) {
|
return result;
|
}
|
result = list.stream().map(t -> {
|
DataValueVO dv = new DataValueVO();
|
dv.setDataTime(t.getDatatime());
|
dv.setDataValue(t.getDatavalue().doubleValue());
|
return dv;
|
}).collect(Collectors.toList());
|
return result;
|
}
|
}
|