dengzedong
2024-11-12 69bd5efa5e2849a560e604d0aa608d5492113915
提交 | 用户 | 时间
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<>();
69bd5e 65
7fd198 66         for (Map.Entry<String, List<DataValueVO>> entry : predictValueMap.entrySet()) {
67             for (DataValueVO dataVo : entry.getValue()) {
68                 MmItemResultEntity importData = new MmItemResultEntity();
69                 importData.setId(String.valueOf(UUID.randomUUID()));
70                 importData.setOutputid(entry.getKey());
71                 importData.setDatatime(dataVo.getDataTime());
72                 importData.setDatavalue(new BigDecimal(dataVo.getDataValue()));
73                 importList.add(importData);
74             }
75
76             List<DataValueVO> lastVoList = new ArrayList<>();
77             int size = entry.getValue().size();
78             t = t > 0 ? t : 0;
79             int n = "n".equals(nIndex) ? size : Integer.parseInt(nIndex);
80             int length = (n - t) > 0 ? (n - t) : 0; //预测完不变的数据长度
81             if (size >= n) {
82                 for (int i = 0; i < (size - length); i ++) {
83                     int index = length + i;
84                     lastVoList.add(entry.getValue().get(index));
85                 }
86             } else {
87                 lastVoList = entry.getValue();
88             }
89
90             for (DataValueVO dataVo : lastVoList) {
91                 MmItemResultEntity importData = new MmItemResultEntity();
92                 importData.setId(String.valueOf(UUID.randomUUID()));
93                 importData.setOutputid(entry.getKey());
94                 importData.setDatatime(dataVo.getDataTime());
95                 importData.setDatavalue(new BigDecimal(dataVo.getDataValue()));
96                 lastList.add(importData);
97             }
98
99             MmItemResultJsonEntity resultJson = new MmItemResultJsonEntity();
100             resultJson.setId(UUID.randomUUID().toString());
101             resultJson.setOutputid(entry.getKey());
102             resultJson.setPredicttime(predictTime);
103             resultJson.setJsonvalue(JSONArray.toJSONString(entry.getValue()));
104             Map<String, Object> map4 = new HashMap(2);
105             map4.put("TABLENAME", "T_MM_ITEM_RESULT_JSON");
106             map4.put("entity", resultJson);
5c6007 107             mmItemResultDao.savePredictJsonValue(map4);
69bd5e 108
D 109             Map<String, Object> params = new HashMap(4);
110             params.put("TABLENAME", T_MM_ITEM_RESULT);
111             params.put("OUTPUTID", entry.getKey());
112             params.put("STARTTIME", importList.get(0).getDatatime());
113             params.put("ENDTIME", importList.get(importList.size() - 1).getDatatime());
114             mmItemResultDao.deletePredictValue(params);
115
116
7fd198 117         }
118
69bd5e 119 //        Map<String, Object> params = new HashMap(4);
D 120 //        params.put("TABLENAME", T_MM_ITEM_RESULT);
121 //        params.put("OUTPUTID", importList.get(0).getOutputid());
122 //        params.put("STARTTIME", importList.get(0).getDatatime());
123 //        params.put("ENDTIME", importList.get(importList.size() - 1).getDatatime());
124 //        mmItemResultDao.deletePredictValue(params);
7fd198 125
69bd5e 126 //        int num1 = importList.size() / max_group_count;
D 127 //        int num2 = importList.size() % max_group_count;
128 //        if (num2 != 0) {
129 //            num1++;
130 //        }
131 //
132 //        List<MmItemResultEntity> tempList;
133 //        //先删除已经存在的数据,再插入新数据
134 //        for (int i = 0; i < num1; i++) {
135 //            int startIndex = max_group_count * i;
136 //            int count = max_group_count;
137 //            if (num2!=0 && i == num1 - 1) {
138 //                count = num2;
139 //            }
140 //            tempList = new ArrayList<>();
141 //            //获取某个索引范围内的对象集合
142 //            for (int j = startIndex; j < startIndex + count; j++) {
143 //                tempList.add(importList.get(j));
144 //            }
145 //            Map<String, Object> map2 = new HashMap<>(2);
146 //            map2.put("TABLENAME", T_MM_ITEM_RESULT);
147 //            map2.put("list", tempList);
148 //            mmItemResultDao.savePredictValue(map2);
149 //        }
150         mmItemResultDao.insertBatch(importList,max_group_count);
7fd198 151
152         Map<String, Object> map3 = new HashMap<>(2);
153         map3.put("TABLENAME", "T_MM_ITEM_RESULT_LAST_POINT");
154         map3.put("list", lastList);
5c6007 155         mmItemResultDao.savePredictValue(map3);
7fd198 156     }
157
158     @Override
159     public List<DataValueVO> getPredictValue(String outputid, Date startTime, Date endTime) {
160         List<DataValueVO> result = new ArrayList<>();
161         QueryWrapper<MmItemResultEntity> queryWrapper = new QueryWrapper<MmItemResultEntity>()
162                 .eq("outputid", outputid)
163                 .between("datatime", startTime, endTime)
164                 .orderByAsc("datatime");
5c6007 165         List<MmItemResultEntity> list = mmItemResultDao.selectList(queryWrapper);
7fd198 166         if (CollectionUtils.isEmpty(list)) {
167             return result;
168         }
169         result = list.stream().map(t -> {
170             DataValueVO dv = new DataValueVO();
171             dv.setDataTime(t.getDatatime());
172             dv.setDataValue(t.getDatavalue().doubleValue());
173             return dv;
174         }).collect(Collectors.toList());
175         return result;
176     }
177 }