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 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 getListByOutputId(String outputid, Map 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 list = mmItemResultDao.selectList( new QueryWrapper() .eq("outputid", outputid) .between("datatime", startDateParam, endDateParam) .orderByAsc("datatime") ); return list; } @Override public void savePredictValue(Map> predictValueMap, int t, String nIndex, Date predictTime) { List importList = new ArrayList<>(); List lastList = new ArrayList<>(); for (Map.Entry> 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 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 map4 = new HashMap(2); map4.put("TABLENAME", "T_MM_ITEM_RESULT_JSON"); map4.put("entity", resultJson); mmItemResultDao.savePredictJsonValue(map4); Map 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 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 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 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 map3 = new HashMap<>(2); map3.put("TABLENAME", "T_MM_ITEM_RESULT_LAST_POINT"); map3.put("list", lastList); mmItemResultDao.savePredictValue(map3); } @Override public List getPredictValue(String outputid, Date startTime, Date endTime) { List result = new ArrayList<>(); QueryWrapper queryWrapper = new QueryWrapper() .eq("outputid", outputid) .between("datatime", startTime, endTime) .orderByAsc("datatime"); List 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; } }