dengzedong
5 天以前 f1fe397df175a7ee809ea28530419116af84af28
提交 | 用户 | 时间
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;
a6e46f 8 import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity;
7fd198 9 import com.iailab.module.model.mcs.pre.entity.MmItemResultEntity;
10 import com.iailab.module.model.mcs.pre.entity.MmItemResultJsonEntity;
11 import com.iailab.module.model.mcs.pre.service.MmItemResultService;
12 import com.iailab.module.model.mdk.vo.DataValueVO;
13 import org.springframework.beans.factory.annotation.Autowired;
14 import org.springframework.stereotype.Service;
15 import org.springframework.util.CollectionUtils;
16
17 import java.math.BigDecimal;
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;
7fd198 34
35     @Override
36     public void savePredictValue(Map<String, List<DataValueVO>> predictValueMap, int t, String nIndex, Date predictTime) {
37         List<MmItemResultEntity> importList = new ArrayList<>();
38         List<MmItemResultEntity> lastList = new ArrayList<>();
69bd5e 39
7fd198 40         for (Map.Entry<String, List<DataValueVO>> entry : predictValueMap.entrySet()) {
41             for (DataValueVO dataVo : entry.getValue()) {
42                 MmItemResultEntity importData = new MmItemResultEntity();
43                 importData.setId(String.valueOf(UUID.randomUUID()));
44                 importData.setOutputid(entry.getKey());
45                 importData.setDatatime(dataVo.getDataTime());
46                 importData.setDatavalue(new BigDecimal(dataVo.getDataValue()));
47                 importList.add(importData);
48             }
49
50             List<DataValueVO> lastVoList = new ArrayList<>();
51             int size = entry.getValue().size();
4f1717 52             t = Math.max(t, 0);
7fd198 53             int n = "n".equals(nIndex) ? size : Integer.parseInt(nIndex);
4f1717 54             int length = Math.max((n - t), 0); //预测完不变的数据长度
7fd198 55             if (size >= n) {
56                 for (int i = 0; i < (size - length); i ++) {
57                     int index = length + i;
58                     lastVoList.add(entry.getValue().get(index));
59                 }
60             } else {
61                 lastVoList = entry.getValue();
62             }
63
64             for (DataValueVO dataVo : lastVoList) {
65                 MmItemResultEntity importData = new MmItemResultEntity();
66                 importData.setId(String.valueOf(UUID.randomUUID()));
67                 importData.setOutputid(entry.getKey());
68                 importData.setDatatime(dataVo.getDataTime());
69                 importData.setDatavalue(new BigDecimal(dataVo.getDataValue()));
70                 lastList.add(importData);
71             }
72
73             MmItemResultJsonEntity resultJson = new MmItemResultJsonEntity();
74             resultJson.setId(UUID.randomUUID().toString());
75             resultJson.setOutputid(entry.getKey());
76             resultJson.setPredicttime(predictTime);
91343d 77             List<Double> jsonValueList = entry.getValue().stream().map(valueVO -> {
78                 return valueVO.getDataValue();
79             }).collect(Collectors.toList());
80             resultJson.setJsonvalue(JSONArray.toJSONString(jsonValueList));
7fd198 81             Map<String, Object> map4 = new HashMap(2);
82             map4.put("TABLENAME", "T_MM_ITEM_RESULT_JSON");
83             map4.put("entity", resultJson);
5c6007 84             mmItemResultDao.savePredictJsonValue(map4);
69bd5e 85
90a149 86 //            Map<String, Object> params = new HashMap(4);
D 87 //            params.put("TABLENAME", T_MM_ITEM_RESULT);
88 //            params.put("OUTPUTID", entry.getKey());
89 //            params.put("STARTTIME", importList.get(0).getDatatime());
90 //            params.put("ENDTIME", importList.get(importList.size() - 1).getDatatime());
91 //            mmItemResultDao.deletePredictValue(params);
7fd198 92         }
90a149 93         // 存在则修改,不存在插入
D 94         mmItemResultDao.saveOrUpdateItemResult(importList);
7fd198 95
96         Map<String, Object> map3 = new HashMap<>(2);
97         map3.put("TABLENAME", "T_MM_ITEM_RESULT_LAST_POINT");
98         map3.put("list", lastList);
5c6007 99         mmItemResultDao.savePredictValue(map3);
7fd198 100     }
101
102     @Override
103     public List<DataValueVO> getPredictValue(String outputid, Date startTime, Date endTime) {
104         List<DataValueVO> result = new ArrayList<>();
105         QueryWrapper<MmItemResultEntity> queryWrapper = new QueryWrapper<MmItemResultEntity>()
106                 .eq("outputid", outputid)
107                 .between("datatime", startTime, endTime)
108                 .orderByAsc("datatime");
5c6007 109         List<MmItemResultEntity> list = mmItemResultDao.selectList(queryWrapper);
7fd198 110         if (CollectionUtils.isEmpty(list)) {
111             return result;
112         }
113         result = list.stream().map(t -> {
114             DataValueVO dv = new DataValueVO();
115             dv.setDataTime(t.getDatatime());
116             dv.setDataValue(t.getDatavalue().doubleValue());
117             return dv;
118         }).collect(Collectors.toList());
119         return result;
120     }
b368e6 121
122     @Override
977edc 123     public List<Object[]> getData(String outputid, Date startTime, Date endTime, String timeFormat) {
b368e6 124         List<Object[]> result = new ArrayList<>();
125         QueryWrapper<MmItemResultEntity> queryWrapper = new QueryWrapper<MmItemResultEntity>()
126                 .eq("outputid", outputid)
127                 .between("datatime", startTime, endTime)
128                 .orderByAsc("datatime");
129         List<MmItemResultEntity> list = mmItemResultDao.selectList(queryWrapper);
130         if (CollectionUtils.isEmpty(list)) {
131             return result;
132         }
133         list.forEach(item -> {
134             Object[] dataItem = new Object[2];
977edc 135             dataItem[0] = DateUtils.format(item.getDatatime(), timeFormat);
1f9784 136             dataItem[1] = item.getDatavalue().setScale(2, BigDecimal.ROUND_HALF_UP);
b368e6 137             result.add(dataItem);
138         });
139         return result;
140     }
a6e46f 141
D 142     @Override
143     public void savePredictValue(Map<MmItemOutputEntity, Double> predictDoubleValues, Date predictTime) {
144         for (Map.Entry<MmItemOutputEntity, Double> entry : predictDoubleValues.entrySet()) {
145             MmItemResultJsonEntity resultJson = new MmItemResultJsonEntity();
146             resultJson.setId(UUID.randomUUID().toString());
147             resultJson.setOutputid(entry.getKey().getId());
148             resultJson.setPredicttime(predictTime);
149             resultJson.setCumulant(String.valueOf(entry.getValue()));
150             Map<String, Object> map4 = new HashMap(2);
151             map4.put("TABLENAME", "T_MM_ITEM_RESULT_JSON");
152             map4.put("entity", resultJson);
153             mmItemResultDao.savePredictJsonValue(map4);
154         }
155     }
7fd198 156 }