潘志宝
2024-11-12 7800ddd4a5624993b6735f10c75b5b86d85195e4
提交 | 用户 | 时间
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;
7fd198 6 import com.iailab.module.model.mcs.pre.dao.MmItemResultDao;
7 import com.iailab.module.model.mcs.pre.entity.MmItemResultEntity;
8 import com.iailab.module.model.mcs.pre.entity.MmItemResultJsonEntity;
9 import com.iailab.module.model.mcs.pre.service.MmItemResultService;
10 import com.iailab.module.model.mdk.vo.DataValueVO;
11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.stereotype.Service;
13 import org.springframework.util.CollectionUtils;
14
15 import java.math.BigDecimal;
16 import java.text.ParseException;
17 import java.text.SimpleDateFormat;
18 import java.util.*;
19 import java.util.stream.Collectors;
20
21 /**
22  * @author PanZhibao
23  * @date 2021年05月28日 10:34
24  */
5c6007 25 @Service
L 26 public class MmItemResultServiceImpl extends ServiceImpl<MmItemResultDao, MmItemResultEntity> implements MmItemResultService {
7fd198 27
28     private final int max_group_count = 100;
29
30     private final String T_MM_ITEM_RESULT = "T_MM_ITEM_RESULT";
31
32     @Autowired
5c6007 33     private MmItemResultDao mmItemResultDao;
L 34     
7fd198 35     @Override
36     public List<MmItemResultEntity> getListByOutputId(String outputid, Map<String, Object> params) {
37
38         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
39         Date startDateParam = null;
40         try {
41             startDateParam = sdf.parse((String)params.get("startTime"));
42         } catch (ParseException e) {
43             e.printStackTrace();
44         }
45         Date endDateParam = null;
46         try {
47             endDateParam = sdf.parse((String)params.get("endTime"));
48         } catch (ParseException e) {
49             e.printStackTrace();
50         }
51
5c6007 52         List<MmItemResultEntity> list = mmItemResultDao.selectList(
7fd198 53                 new QueryWrapper<MmItemResultEntity>()
54                         .eq("outputid", outputid)
55                         .between("datatime", startDateParam, endDateParam)
56                         .orderByAsc("datatime")
57         );
58         return list;
59     }
60
61     @Override
62     public void savePredictValue(Map<String, List<DataValueVO>> predictValueMap, int t, String nIndex, Date predictTime) {
63         List<MmItemResultEntity> importList = new ArrayList<>();
64         List<MmItemResultEntity> lastList = new ArrayList<>();
65         for (Map.Entry<String, List<DataValueVO>> entry : predictValueMap.entrySet()) {
66             for (DataValueVO dataVo : entry.getValue()) {
67                 MmItemResultEntity importData = new MmItemResultEntity();
68                 importData.setId(String.valueOf(UUID.randomUUID()));
69                 importData.setOutputid(entry.getKey());
70                 importData.setDatatime(dataVo.getDataTime());
71                 importData.setDatavalue(new BigDecimal(dataVo.getDataValue()));
72                 importList.add(importData);
73             }
74
75             List<DataValueVO> lastVoList = new ArrayList<>();
76             int size = entry.getValue().size();
77             t = t > 0 ? t : 0;
78             int n = "n".equals(nIndex) ? size : Integer.parseInt(nIndex);
79             int length = (n - t) > 0 ? (n - t) : 0; //预测完不变的数据长度
80             if (size >= n) {
81                 for (int i = 0; i < (size - length); i ++) {
82                     int index = length + i;
83                     lastVoList.add(entry.getValue().get(index));
84                 }
85             } else {
86                 lastVoList = entry.getValue();
87             }
88
89             for (DataValueVO dataVo : lastVoList) {
90                 MmItemResultEntity importData = new MmItemResultEntity();
91                 importData.setId(String.valueOf(UUID.randomUUID()));
92                 importData.setOutputid(entry.getKey());
93                 importData.setDatatime(dataVo.getDataTime());
94                 importData.setDatavalue(new BigDecimal(dataVo.getDataValue()));
95                 lastList.add(importData);
96             }
97
98             MmItemResultJsonEntity resultJson = new MmItemResultJsonEntity();
99             resultJson.setId(UUID.randomUUID().toString());
100             resultJson.setOutputid(entry.getKey());
101             resultJson.setPredicttime(predictTime);
102             resultJson.setJsonvalue(JSONArray.toJSONString(entry.getValue()));
103             Map<String, Object> map4 = new HashMap(2);
104             map4.put("TABLENAME", "T_MM_ITEM_RESULT_JSON");
105             map4.put("entity", resultJson);
5c6007 106             mmItemResultDao.savePredictJsonValue(map4);
7fd198 107         }
108
109         Map<String, Object> params = new HashMap(4);
110         params.put("TABLENAME", T_MM_ITEM_RESULT);
111         params.put("OUTPUTID", importList.get(0).getOutputid());
112         params.put("STARTTIME", importList.get(0).getDatatime());
113         params.put("ENDTIME", importList.get(importList.size() - 1).getDatatime());
5c6007 114         mmItemResultDao.deletePredictValue(params);
7fd198 115
116         int num1 = importList.size() / max_group_count;
117         int num2 = importList.size() % max_group_count;
118         if (num2 != 0) {
119             num1++;
120         }
121
122         List<MmItemResultEntity> tempList;
123         //先删除已经存在的数据,再插入新数据
124         for (int i = 0; i < num1; i++) {
125             int startIndex = max_group_count * i;
126             int count = max_group_count;
127             if (num2!=0 && i == num1 - 1) {
128                 count = num2;
129             }
130             tempList = new ArrayList<>();
131             //获取某个索引范围内的对象集合
132             for (int j = startIndex; j < startIndex + count; j++) {
133                 tempList.add(importList.get(j));
134             }
135             Map<String, Object> map2 = new HashMap<>(2);
136             map2.put("TABLENAME", T_MM_ITEM_RESULT);
137             map2.put("list", tempList);
5c6007 138             mmItemResultDao.savePredictValue(map2);
7fd198 139         }
140
141         Map<String, Object> map3 = new HashMap<>(2);
142         map3.put("TABLENAME", "T_MM_ITEM_RESULT_LAST_POINT");
143         map3.put("list", lastList);
5c6007 144         mmItemResultDao.savePredictValue(map3);
7fd198 145     }
146
147     @Override
148     public List<DataValueVO> getPredictValue(String outputid, Date startTime, Date endTime) {
149         List<DataValueVO> result = new ArrayList<>();
150         QueryWrapper<MmItemResultEntity> queryWrapper = new QueryWrapper<MmItemResultEntity>()
151                 .eq("outputid", outputid)
152                 .between("datatime", startTime, endTime)
153                 .orderByAsc("datatime");
5c6007 154         List<MmItemResultEntity> list = mmItemResultDao.selectList(queryWrapper);
7fd198 155         if (CollectionUtils.isEmpty(list)) {
156             return result;
157         }
158         result = list.stream().map(t -> {
159             DataValueVO dv = new DataValueVO();
160             dv.setDataTime(t.getDatatime());
161             dv.setDataValue(t.getDatavalue().doubleValue());
162             return dv;
163         }).collect(Collectors.toList());
164         return result;
165     }
166 }