潘志宝
2024-11-15 a4891a78db2d8ac9d17ff01d79e72e8aab38785d
提交 | 用户 | 时间
7fd198 1 package com.iailab.module.model.mcs.pre.service.impl;
2
3 import com.alibaba.fastjson.JSONArray;
4 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5c6007 5 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
b368e6 6 import com.iailab.framework.common.util.date.DateUtils;
7fd198 7 import com.iailab.module.model.mcs.pre.dao.MmItemResultDao;
8 import com.iailab.module.model.mcs.pre.entity.MmItemResultEntity;
9 import com.iailab.module.model.mcs.pre.entity.MmItemResultJsonEntity;
10 import com.iailab.module.model.mcs.pre.service.MmItemResultService;
11 import com.iailab.module.model.mdk.vo.DataValueVO;
12 import org.springframework.beans.factory.annotation.Autowired;
13 import org.springframework.stereotype.Service;
14 import org.springframework.util.CollectionUtils;
15
16 import java.math.BigDecimal;
17 import java.text.ParseException;
18 import java.text.SimpleDateFormat;
19 import java.util.*;
20 import java.util.stream.Collectors;
21
22 /**
23  * @author PanZhibao
24  * @date 2021年05月28日 10:34
25  */
5c6007 26 @Service
L 27 public class MmItemResultServiceImpl extends ServiceImpl<MmItemResultDao, MmItemResultEntity> implements MmItemResultService {
7fd198 28
29     private final int max_group_count = 100;
30
31     private final String T_MM_ITEM_RESULT = "T_MM_ITEM_RESULT";
32
33     @Autowired
5c6007 34     private MmItemResultDao mmItemResultDao;
7fd198 35
36     @Override
37     public void savePredictValue(Map<String, List<DataValueVO>> predictValueMap, int t, String nIndex, Date predictTime) {
38         List<MmItemResultEntity> importList = new ArrayList<>();
39         List<MmItemResultEntity> lastList = new ArrayList<>();
69bd5e 40
7fd198 41         for (Map.Entry<String, List<DataValueVO>> entry : predictValueMap.entrySet()) {
42             for (DataValueVO dataVo : entry.getValue()) {
43                 MmItemResultEntity importData = new MmItemResultEntity();
44                 importData.setId(String.valueOf(UUID.randomUUID()));
45                 importData.setOutputid(entry.getKey());
46                 importData.setDatatime(dataVo.getDataTime());
47                 importData.setDatavalue(new BigDecimal(dataVo.getDataValue()));
48                 importList.add(importData);
49             }
50
51             List<DataValueVO> lastVoList = new ArrayList<>();
52             int size = entry.getValue().size();
4f1717 53             t = Math.max(t, 0);
7fd198 54             int n = "n".equals(nIndex) ? size : Integer.parseInt(nIndex);
4f1717 55             int length = Math.max((n - t), 0); //预测完不变的数据长度
7fd198 56             if (size >= n) {
57                 for (int i = 0; i < (size - length); i ++) {
58                     int index = length + i;
59                     lastVoList.add(entry.getValue().get(index));
60                 }
61             } else {
62                 lastVoList = entry.getValue();
63             }
64
65             for (DataValueVO dataVo : lastVoList) {
66                 MmItemResultEntity importData = new MmItemResultEntity();
67                 importData.setId(String.valueOf(UUID.randomUUID()));
68                 importData.setOutputid(entry.getKey());
69                 importData.setDatatime(dataVo.getDataTime());
70                 importData.setDatavalue(new BigDecimal(dataVo.getDataValue()));
71                 lastList.add(importData);
72             }
73
74             MmItemResultJsonEntity resultJson = new MmItemResultJsonEntity();
75             resultJson.setId(UUID.randomUUID().toString());
76             resultJson.setOutputid(entry.getKey());
77             resultJson.setPredicttime(predictTime);
78             resultJson.setJsonvalue(JSONArray.toJSONString(entry.getValue()));
79             Map<String, Object> map4 = new HashMap(2);
80             map4.put("TABLENAME", "T_MM_ITEM_RESULT_JSON");
81             map4.put("entity", resultJson);
5c6007 82             mmItemResultDao.savePredictJsonValue(map4);
69bd5e 83
D 84             Map<String, Object> params = new HashMap(4);
85             params.put("TABLENAME", T_MM_ITEM_RESULT);
86             params.put("OUTPUTID", entry.getKey());
87             params.put("STARTTIME", importList.get(0).getDatatime());
88             params.put("ENDTIME", importList.get(importList.size() - 1).getDatatime());
89             mmItemResultDao.deletePredictValue(params);
7fd198 90         }
69bd5e 91         mmItemResultDao.insertBatch(importList,max_group_count);
7fd198 92
93         Map<String, Object> map3 = new HashMap<>(2);
94         map3.put("TABLENAME", "T_MM_ITEM_RESULT_LAST_POINT");
95         map3.put("list", lastList);
5c6007 96         mmItemResultDao.savePredictValue(map3);
7fd198 97     }
98
99     @Override
100     public List<DataValueVO> getPredictValue(String outputid, Date startTime, Date endTime) {
101         List<DataValueVO> result = new ArrayList<>();
102         QueryWrapper<MmItemResultEntity> queryWrapper = new QueryWrapper<MmItemResultEntity>()
103                 .eq("outputid", outputid)
104                 .between("datatime", startTime, endTime)
105                 .orderByAsc("datatime");
5c6007 106         List<MmItemResultEntity> list = mmItemResultDao.selectList(queryWrapper);
7fd198 107         if (CollectionUtils.isEmpty(list)) {
108             return result;
109         }
110         result = list.stream().map(t -> {
111             DataValueVO dv = new DataValueVO();
112             dv.setDataTime(t.getDatatime());
113             dv.setDataValue(t.getDatavalue().doubleValue());
114             return dv;
115         }).collect(Collectors.toList());
116         return result;
117     }
b368e6 118
119     @Override
120     public List<Object[]> getData(String outputid, Date startTime, Date endTime) {
121         List<Object[]> result = new ArrayList<>();
122         QueryWrapper<MmItemResultEntity> queryWrapper = new QueryWrapper<MmItemResultEntity>()
123                 .eq("outputid", outputid)
124                 .between("datatime", startTime, endTime)
125                 .orderByAsc("datatime");
126         List<MmItemResultEntity> list = mmItemResultDao.selectList(queryWrapper);
127         if (CollectionUtils.isEmpty(list)) {
128             return result;
129         }
130         list.forEach(item -> {
131             Object[] dataItem = new Object[2];
132             dataItem[0] = DateUtils.format(item.getDatatime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
1f9784 133             dataItem[1] = item.getDatavalue().setScale(2, BigDecimal.ROUND_HALF_UP);
b368e6 134             result.add(dataItem);
135         });
136         return result;
137     }
7fd198 138 }