潘志宝
2024-11-28 d9fe8fcf46a22aeaab7b7c2f06866af962b8d0dd
提交 | 用户 | 时间
b368e6 1 package com.iailab.module.model.api;
2
3 import com.iailab.framework.common.util.date.DateUtils;
8a74e9 4 import com.iailab.framework.common.util.object.ConvertUtils;
5 import com.iailab.module.data.api.plan.PlanItemApi;
6 import com.iailab.module.data.api.plan.dto.ApiPlanDataDTO;
b368e6 7 import com.iailab.module.data.api.point.DataPointApi;
8 import com.iailab.module.data.api.point.dto.ApiPointDTO;
9 import com.iailab.module.data.api.point.dto.ApiPointValueDTO;
10 import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
8a74e9 11 import com.iailab.module.data.common.ApiDataQueryDTO;
b368e6 12 import com.iailab.module.model.api.mcs.McsApi;
13 import com.iailab.module.model.api.mcs.dto.*;
91343d 14 import com.iailab.module.model.common.enums.CommonConstant;
15 import com.iailab.module.model.common.enums.PreLineTypeEnum;
b368e6 16 import com.iailab.module.model.mcs.pre.entity.DmModuleEntity;
17 import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity;
c5fe30 18 import com.iailab.module.model.mcs.pre.entity.MmPredictAlarmMessageEntity;
b368e6 19 import com.iailab.module.model.mcs.pre.service.*;
c5fe30 20 import com.iailab.module.model.mcs.pre.vo.MmPredictAlarmMessageSaveReqVO;
055765 21 import com.iailab.module.model.mcs.sche.entity.StScheduleSuggestEntity;
22 import com.iailab.module.model.mcs.sche.service.StScheduleSuggestService;
ead005 23 import com.iailab.module.model.mdk.vo.ItemVO;
91343d 24 import com.iailab.module.model.mpk.service.ChartService;
b368e6 25 import lombok.extern.slf4j.Slf4j;
977edc 26 import org.apache.commons.lang3.StringUtils;
b368e6 27 import org.springframework.beans.factory.annotation.Autowired;
28 import org.springframework.util.CollectionUtils;
29 import org.springframework.validation.annotation.Validated;
30 import org.springframework.web.bind.annotation.RestController;
31
32 import java.math.BigDecimal;
33 import java.util.*;
912419 34 import java.util.stream.Collectors;
b368e6 35
36 /**
37  * @author PanZhibao
38  * @Description
39  * @createTime 2024年11月13日
40  */
41 @Slf4j
42 @RestController
43 @Validated
44 public class McsApiImpl implements McsApi {
45
46     @Autowired
47     private DmModuleService dmModuleService;
48
49     @Autowired
50     private MmPredictItemService mmPredictItemService;
51
52     @Autowired
53     private MmItemOutputService mmItemOutputService;
54
55     @Autowired
56     private MmItemResultService mmItemResultService;
57
58     @Autowired
59     private MmItemResultLastPointService mmItemResultLastPointService;
60
61     @Autowired
62     private DataPointApi dataPointApi;
91343d 63
64     @Autowired
65     private MmItemResultJsonService mmItemResultJsonService;
66
67     @Autowired
68     private ChartService chartService;
c5fe30 69
70     @Autowired
71     private MmPredictAlarmMessageService mmPredictAlarmMessageService;
055765 72
73     @Autowired
74     private StScheduleSuggestService stScheduleSuggestService;
8a74e9 75
76     @Autowired
77     private PlanItemApi planItemApi;
b368e6 78
79     private int HOUR_MINS = 60;
80
81     @Override
82     public List<PredictItemTreeDTO> getPredictItemTree() {
83         List<PredictItemTreeDTO> result = new ArrayList<>();
84
85         List<DmModuleEntity> moduleList = dmModuleService.list(new HashMap<>());
86         if (CollectionUtils.isEmpty(moduleList)) {
87             return result;
88         }
89         moduleList.forEach(item -> {
90             PredictItemTreeDTO moduleOpt = new PredictItemTreeDTO();
91             moduleOpt.setId(item.getId());
92             moduleOpt.setLabel(item.getModulename());
93             List<PredictItemTreeDTO> children = new ArrayList<>();
a4891a 94             List<ItemVO> itemList = mmPredictItemService.getByModuleId(item.getId());
b368e6 95             itemList.forEach(item1 -> {
96                 PredictItemTreeDTO chd = new PredictItemTreeDTO();
a4891a 97                 chd.setLabel(item1.getItemName());
b368e6 98                 chd.setId(item1.getId());
a4891a 99                 List<PredictItemTreeDTO> chd1 = new ArrayList<>();
100                 List<MmItemOutputEntity> outList = mmItemOutputService.getByItemid(item1.getId());
101                 if (!CollectionUtils.isEmpty(outList)) {
102                     outList.forEach(out -> {
103                         PredictItemTreeDTO chd2 = new PredictItemTreeDTO();
104                         chd2.setId(out.getId());
f283ee 105                         chd2.setLabel(out.getResultName());
a4891a 106                         chd1.add(chd2);
107                     });
108                 }
109                 chd.setChildren(chd1);
b368e6 110                 children.add(chd);
111             });
112             moduleOpt.setChildren(children);
113             result.add(moduleOpt);
114         });
115         return result;
116     }
117
118     @Override
119     public PreDataBarLineRespVO getPreDataCharts(PreDataBarLineReqVO reqVO) {
120         PreDataBarLineRespVO result = new PreDataBarLineRespVO();
a4891a 121         List<String> outIds = reqVO.getOutIds();
b368e6 122         List<String> legends = new ArrayList<>();
123         List<PreDataViewRespDTO> dataViewList = new ArrayList<>();
9e844c 124         if (CollectionUtils.isEmpty(outIds)) {
b368e6 125             return result;
126         }
127         Date predictTime = reqVO.getPredictTime();
128         if (predictTime == null) {
9e844c 129             MmItemOutputEntity output = mmItemOutputService.getOutPutById(reqVO.getOutIds().get(0));
130             ItemVO predictItem = mmPredictItemService.getItemById(output.getItemid());
131             if (predictItem.getLastTime() != null) {
132                 predictTime = predictItem.getLastTime();
133             } else {
134                 Calendar calendar = Calendar.getInstance();
135                 calendar.set(Calendar.MILLISECOND, 0);
136                 calendar.set(Calendar.SECOND, 0);
137                 predictTime = calendar.getTime();
138             }
b368e6 139         }
140         Date startTime = reqVO.getStartTime();
141         if (startTime == null) {
142             Calendar calendar = Calendar.getInstance();
143             calendar.setTime(predictTime);
144             calendar.add(Calendar.HOUR_OF_DAY, -1);
145             startTime = calendar.getTime();
146         }
147         Date endTime = reqVO.getEndTime();
148         if (endTime == null) {
149             Calendar calendar = Calendar.getInstance();
150             calendar.setTime(predictTime);
151             calendar.add(Calendar.HOUR_OF_DAY, 1);
152             endTime = calendar.getTime();
153         }
154
a4891a 155         for (int i = 0; i < outIds.size(); i++) {
b368e6 156             PreDataViewRespDTO viewDto = new PreDataViewRespDTO();
a4891a 157             String outId = outIds.get(i);
158             MmItemOutputEntity output = mmItemOutputService.getOutPutById(outId);
b368e6 159             if (output == null) {
9e844c 160                 continue;
b368e6 161             }
f283ee 162             legends.add(output.getResultName());
9e844c 163             viewDto.setItemId(output.getItemid());
164             viewDto.setOutId(outId);
165             viewDto.setResultstr(output.getResultstr());
f283ee 166             viewDto.setResultName(output.getResultName());
b368e6 167             viewDto.setRealData(getHisData(output.getPointid(), startTime, endTime));
977edc 168             viewDto.setPreDataN(mmItemResultService.getData(output.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
169             viewDto.setPreDataL(mmItemResultLastPointService.getData(output.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
b368e6 170
171             List<Double> values = new ArrayList<>();
172             if (!CollectionUtils.isEmpty(viewDto.getRealData())) {
173                 List<Double> hisValues = new ArrayList<>();
174                 viewDto.getRealData().forEach(item -> {
175                     values.add(Double.parseDouble(item[1].toString()));
176                     hisValues.add(Double.parseDouble(item[1].toString()));
177                 });
178                 viewDto.setHisMax(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
179                 viewDto.setHisMin(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
180                 viewDto.setHisAvg(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).average().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
181                 viewDto.setHisCumulant(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).sum())
182                         .divide(new BigDecimal(HOUR_MINS), 2, BigDecimal.ROUND_HALF_UP));
183             }
184             if (!CollectionUtils.isEmpty(viewDto.getPreDataN())) {
185                 viewDto.getPreDataN().forEach(item -> {
186                     values.add(Double.parseDouble(item[1].toString()));
187                 });
188             }
189             if (!CollectionUtils.isEmpty(viewDto.getPreDataL())) {
190                 List<Double> preValues = new ArrayList<>();
191                 viewDto.getPreDataL().forEach(item -> {
192                     values.add(Double.parseDouble(item[1].toString()));
193                     preValues.add(Double.parseDouble(item[1].toString()));
194                 });
195                 viewDto.setPreMax(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
196                 viewDto.setPreMin(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
197                 viewDto.setPreAvg(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).average().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
198             }
199             if (!CollectionUtils.isEmpty(viewDto.getCurData())) {
200                 List<Double> preValues = new ArrayList<>();
201                 viewDto.getCurData().forEach(item -> {
202                     values.add(Double.parseDouble(item[1].toString()));
203                     preValues.add(Double.parseDouble(item[1].toString()));
204                 });
205                 viewDto.setPreCumulant(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).sum())
206                         .divide(new BigDecimal(HOUR_MINS), 2, BigDecimal.ROUND_HALF_UP));
207             }
208             if (!CollectionUtils.isEmpty(viewDto.getAdjData())) {
209                 viewDto.getAdjData().forEach(item -> {
210                     values.add(Double.parseDouble(item[1].toString()));
211                 });
212             }
213             if (!CollectionUtils.isEmpty(values)) {
214                 viewDto.setMaxValue(new BigDecimal(values.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
215                 viewDto.setMinValue(new BigDecimal(values.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
216             }
217             dataViewList.add(viewDto);
218         }
219         result.setStartTime(startTime);
220         result.setEndTime(endTime);
221         result.setPredictTime(predictTime);
222         result.setCategories(DateUtils.getTimeScale(startTime, endTime, 60));
223         result.setLegend(legends);
224         result.setDataViewList(dataViewList);
225         return result;
226     }
227
ead005 228     @Override
229     public PreDataItemChartRespVO getPreDataItemChart(PreDataItemChartReqVO reqVO) {
230         PreDataItemChartRespVO result = new PreDataItemChartRespVO();
231         ItemVO predictItem = mmPredictItemService.getItemById(reqVO.getItemId());
232         if (predictItem == null) {
233             return result;
234         }
235         if (predictItem.getLastTime() == null) {
236             return result;
237         }
328ef4 238         result.setPredictTime(predictItem.getLastTime());
ead005 239         Date startTime = reqVO.getStartTime();
240         if (startTime == null) {
241             Calendar calendar = Calendar.getInstance();
242             calendar.setTime(predictItem.getLastTime());
91343d 243             calendar.add(Calendar.MINUTE, -1 * predictItem.getPredictLength());
ead005 244             startTime = calendar.getTime();
245         }
246         Date endTime = reqVO.getEndTime();
247         if (endTime == null) {
248             Calendar calendar = Calendar.getInstance();
249             calendar.setTime(predictItem.getLastTime());
91343d 250             calendar.add(Calendar.MINUTE, predictItem.getPredictLength());
ead005 251             endTime = calendar.getTime();
252         }
1f9784 253         if (endTime.getTime() <= startTime.getTime()) {
254             Calendar calendar = Calendar.getInstance();
255             calendar.setTime(startTime);
91343d 256             calendar.add(Calendar.MINUTE, predictItem.getPredictLength());
1f9784 257             endTime = calendar.getTime();
258         }
259
ead005 260         List<String> categories = DateUtils.getTimeScale(startTime, endTime, predictItem.getGranularity());
261         List<String> legend = new ArrayList<>();
262         LinkedHashMap<String, PreDataSampleViewRespDTO> viewMap = new LinkedHashMap<>();
263         List<MmItemOutputEntity> outs = mmItemOutputService.getByItemid(reqVO.getItemId());
264         if (CollectionUtils.isEmpty(outs)) {
265             return result;
266         }
267         for (MmItemOutputEntity out : outs) {
f283ee 268             legend.add(out.getResultName());
ead005 269             PreDataSampleViewRespDTO viewDto = new PreDataSampleViewRespDTO();
270             viewDto.setRealData(getHisData(out.getPointid(), startTime, endTime));
977edc 271             viewDto.setPreDataN(mmItemResultService.getData(out.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
f283ee 272             viewMap.put(out.getResultName(), viewDto);
ead005 273         }
274         result.setStartTime(startTime);
275         result.setEndTime(endTime);
276         result.setCategories(categories);
277         result.setLegend(legend);
278         result.setViewMap(viewMap);
279         return result;
280     }
281
328ef4 282     @Override
91343d 283     public PreDataSingleChartRespVO getPreDataSingleChart(PreDataSingleChartReqVO reqVO) {
284         PreDataSingleChartRespVO result = new PreDataSingleChartRespVO();
328ef4 285
91343d 286         Map<String, String> chartParams = chartService.getByChartCode(reqVO.getChartCode());
287         if (CollectionUtils.isEmpty(chartParams)) {
288             return result;
289         }
290         String itemCode = chartParams.get(CommonConstant.ITEM_CODE);
291         if (itemCode == null) {
292             return result;
293         }
294         String resultStr = chartParams.get(CommonConstant.RESULT_STR);
295         if (resultStr == null) {
296             return result;
297         }
298         ItemVO predictItem = mmPredictItemService.getItemByItemNo(itemCode);
299         if (predictItem == null || predictItem.getLastTime() == null) {
300             return result;
301         }
977edc 302         String timeFormat = StringUtils.isBlank(reqVO.getTimeFormat()) ? DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND : reqVO.getTimeFormat();
303         PreLineTypeEnum lineType = chartParams.get(CommonConstant.LINE_TYPE) == null ? PreLineTypeEnum.TN : PreLineTypeEnum.getEumByCode(chartParams.get(CommonConstant.LINE_TYPE));
91343d 304         BigDecimal rangeH = chartParams.get(CommonConstant.RANGE_H) == null ? BigDecimal.ZERO : new BigDecimal(chartParams.get(CommonConstant.RANGE_H));
305         BigDecimal rangeL = chartParams.get(CommonConstant.RANGE_L) == null ? BigDecimal.ZERO : new BigDecimal(chartParams.get(CommonConstant.RANGE_L));
306         BigDecimal limitH = chartParams.get(CommonConstant.LIMIT_H) == null ? BigDecimal.ZERO : new BigDecimal(chartParams.get(CommonConstant.LIMIT_H));
307         BigDecimal limitL = chartParams.get(CommonConstant.LIMIT_L) == null ? BigDecimal.ZERO : new BigDecimal(chartParams.get(CommonConstant.LIMIT_L));
308         int lengthLeft = chartParams.get(CommonConstant.LENGTH_LEFT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_LEFT)).intValue();
309         int lengthRight = chartParams.get(CommonConstant.LENGTH_RIGHT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_RIGHT)).intValue();
8a74e9 310
311         Date[] timeArray = calResultTime(predictItem, reqVO.getStartTime(), reqVO.getEndTime(), lengthLeft, lengthRight);
312         Date predictTime = timeArray[0];
313         Date startTime = timeArray[1];
314         Date endTime = timeArray[2];
315
977edc 316         List<String> categories = DateUtils.getTimeScale(startTime, endTime, predictItem.getGranularity(), timeFormat);
91343d 317         List<String> legend = new ArrayList<>();
318         MmItemOutputEntity outPut = mmItemOutputService.getByItemid(predictItem.getId(), resultStr);
319         PreDataViewRespDTO dataView = new PreDataViewRespDTO();
320         dataView.setItemId(predictItem.getId());
321         dataView.setItemName(predictItem.getItemName());
322         dataView.setResultstr(resultStr);
323         dataView.setRangeH(rangeH);
324         dataView.setRangeL(rangeL);
325         dataView.setLimitH(limitH);
326         dataView.setLimitL(limitL);
977edc 327         dataView.setRealData(getHisData(outPut.getPointid(), startTime, endTime, timeFormat));
328         dataView.setCurData(mmItemResultJsonService.getData(outPut.getId(), predictTime, timeFormat));
91343d 329         switch (lineType) {
330             case TN:
977edc 331                 dataView.setPreDataN(mmItemResultService.getData(outPut.getId(), startTime, endTime, timeFormat));
91343d 332                 break;
333             case TL:
977edc 334                 dataView.setPreDataN(mmItemResultService.getData(outPut.getId(), predictTime, endTime, timeFormat));
335                 dataView.setPreDataL(mmItemResultLastPointService.getData(outPut.getId(), startTime, endTime, timeFormat));
91343d 336                 break;
337             default:
338                 break;
339         }
912419 340
341         if (!CollectionUtils.isEmpty(dataView.getCurData())) {
342             List<Double> curList = dataView.getCurData().stream().map(t -> {
343                 return new Double(t[1].toString());
344             }).collect(Collectors.toList());
345             dataView.setPreMax(new BigDecimal(curList.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
346             dataView.setPreMin(new BigDecimal(curList.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
347         }
348
8a74e9 349         result.setPredictTime(predictTime);
91343d 350         result.setStartTime(startTime);
351         result.setEndTime(endTime);
352         result.setCategories(categories);
353         result.setLegend(legend);
354         result.setDataView(dataView);
8a74e9 355         return result;
356     }
357
358     @Override
d9fe8f 359     public Map<String, List<Object[]>> getPreDataCur(PreDataJsonReqVO reqVO) {
360         Map<String, List<Object[]>> result = new HashMap<>();
361         if (reqVO == null || reqVO.getPredictTime() == null || CollectionUtils.isEmpty(reqVO.getOutputIdList())) {
362             return result;
363         }
364         reqVO.getOutputIdList().forEach(outPutId -> {
365             result.put(outPutId, mmItemResultJsonService.getData(outPutId, reqVO.getPredictTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
366         });
367         return result;
368     }
369
370     @Override
8a74e9 371     public PlanDataSingleChartRespVO getPlanDataSingleChart(PreDataSingleChartReqVO reqVO) {
372         PlanDataSingleChartRespVO result = new PlanDataSingleChartRespVO();
373         Map<String, String> chartParams = chartService.getByChartCode(reqVO.getChartCode());
374         if (CollectionUtils.isEmpty(chartParams)) {
375             return result;
376         }
377         String itemCode = chartParams.get(CommonConstant.ITEM_CODE);
378         if (itemCode == null) {
379             return result;
380         }
381         String planItemStr = chartParams.get(CommonConstant.PLAN_ITEM_LIST);
382         if (planItemStr == null) {
383             return result;
384         }
385         List<String> planItemCodeList = Arrays.asList(planItemStr.split(","));
386
387         ItemVO predictItem = mmPredictItemService.getItemByItemNo(itemCode);
388         if (predictItem == null || predictItem.getLastTime() == null) {
389             return result;
390         }
391         String timeFormat = StringUtils.isBlank(reqVO.getTimeFormat()) ? DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND : reqVO.getTimeFormat();
392         int lengthLeft = chartParams.get(CommonConstant.LENGTH_LEFT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_LEFT)).intValue();
393         int lengthRight = chartParams.get(CommonConstant.LENGTH_RIGHT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_RIGHT)).intValue();
394         Date[] timeArray = calResultTime(predictItem, reqVO.getStartTime(), reqVO.getEndTime(), lengthLeft, lengthRight);
395         Date predictTime = timeArray[0];
396         Date startTime = timeArray[1];
397         Date endTime = timeArray[2];
398         List<String> categories = DateUtils.getTimeScale(startTime, endTime, predictItem.getGranularity(), timeFormat);
399         List<String> legend = new ArrayList<>();
400         LinkedHashMap<String, List<PlanDataRecordDTO>> record = new LinkedHashMap<>();
401         ApiDataQueryDTO queryDTO = new ApiDataQueryDTO();
402         queryDTO.setItemNos(planItemCodeList);
403         queryDTO.setStart(startTime);
404         queryDTO.setEnd(endTime);
405         LinkedHashMap<String, List<ApiPlanDataDTO>> planData = planItemApi.queryPlanItemRecordValue(queryDTO);
406         if (CollectionUtils.isEmpty(planData)) {
407             planData.forEach((key, value) -> {
408                 record.put(key, ConvertUtils.sourceToTarget(value, PlanDataRecordDTO.class));
409             });
410         }
411         result.setPredictTime(predictTime);
412         result.setStartTime(startTime);
413         result.setEndTime(endTime);
414         result.setCategories(categories);
415         result.setLegend(legend);
416         result.setRecord(record);
328ef4 417         return result;
418     }
419
b368e6 420     /**
421      * 获取真实值
422      *
423      * @param pointId
424      * @param startTime
425      * @param endTime
426      * @return
427      */
428     private List<Object[]> getHisData(String pointId, Date startTime, Date endTime) {
429         List<Object[]> result = new ArrayList<>();
430         ApiPointDTO pointDTO = dataPointApi.getInfoById(pointId);
431         ApiPointValueQueryDTO queryPointDto = new ApiPointValueQueryDTO();
432         queryPointDto.setPointNo(pointDTO.getPointNo());
433         queryPointDto.setStart(startTime);
434         queryPointDto.setEnd(endTime);
435         List<ApiPointValueDTO> valueDTOS = dataPointApi.queryPointHistoryValue(queryPointDto);
436         if (CollectionUtils.isEmpty(valueDTOS)) {
437             return result;
438         }
439         valueDTOS.forEach(item -> {
440             Object[] values = new Object[2];
214275 441             values[0] = DateUtils.format(item.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
442             values[1] = new BigDecimal(item.getV()).setScale(2, BigDecimal.ROUND_HALF_UP);
b368e6 443             result.add(values);
444         });
445         return result;
446     }
447
977edc 448     /**
449      * 获取真实值
450      *
451      * @param pointId
452      * @param startTime
453      * @param endTime
454      * @param timeFormat
455      * @return
456      */
457     private List<Object[]> getHisData(String pointId, Date startTime, Date endTime, String timeFormat) {
458         List<Object[]> result = new ArrayList<>();
459         ApiPointDTO pointDTO = dataPointApi.getInfoById(pointId);
460         ApiPointValueQueryDTO queryPointDto = new ApiPointValueQueryDTO();
461         queryPointDto.setPointNo(pointDTO.getPointNo());
462         queryPointDto.setStart(startTime);
463         queryPointDto.setEnd(endTime);
464         List<ApiPointValueDTO> valueDTOS = dataPointApi.queryPointHistoryValue(queryPointDto);
465         if (CollectionUtils.isEmpty(valueDTOS)) {
466             return result;
467         }
468         valueDTOS.forEach(item -> {
469             Object[] values = new Object[2];
470             values[0] = DateUtils.format(item.getT(), timeFormat);
471             values[1] = new BigDecimal(item.getV()).setScale(2, BigDecimal.ROUND_HALF_UP);
472             result.add(values);
473         });
474         return result;
475     }
476
c5fe30 477     /**
478      * 新增预警信息
479      *
480      * @param dto
481      * @return
482      */
b368e6 483     @Override
484     public Boolean createAlarmMessage(AlarmMessageRespDTO dto) {
c5fe30 485         try {
486             mmPredictAlarmMessageService.create(ConvertUtils.sourceToTarget(dto, MmPredictAlarmMessageSaveReqVO.class));
487             return true;
488         } catch (Exception e) {
489             return false;
490         }
b368e6 491     }
492
493     @Override
494     public List<AlarmMessageRespDTO> listAlarmMessage(Map<String, Object> params) {
495         return null;
496     }
497
498     @Override
c5fe30 499     public AlarmMessageRespDTO getLastAlarmMessage(String alarmObj) {
500         MmPredictAlarmMessageEntity entity = mmPredictAlarmMessageService.getLast(alarmObj);
501         return ConvertUtils.sourceToTarget(entity, AlarmMessageRespDTO.class);
502     }
503
504     @Override
b368e6 505     public Boolean createScheduleSuggest(ScheduleSuggestRespDTO dto) {
506         return true;
507     }
508
509     @Override
055765 510     public List<ScheduleSuggestRespDTO> getLastLimitScheduleSuggest(String scheduleObj, Integer limit) {
511         List<StScheduleSuggestEntity> list = stScheduleSuggestService.getList(scheduleObj, limit);
512         return ConvertUtils.sourceToTarget(list, ScheduleSuggestRespDTO.class);
b368e6 513     }
514
515     @Override
516     public Boolean modifyPredictModelSetting(List<PredictModelSettingReqDTO> dtos) {
517         return true;
518     }
519
520     @Override
521     public Boolean modifyScheduleModelSetting(List<ScheduleModelSettingReqDTO> dtos) {
522         return true;
523     }
8a74e9 524
525
526     private Date[] calResultTime(ItemVO predictItem, Date startTimeReq, Date endTimeReq, int lengthLeft, int lengthRight) {
527         Date[] result = new Date[3];
528         Date predictTime = predictItem.getLastTime();
529         Date startTime = startTimeReq;
530         if (startTime == null) {
531             Calendar calendar = Calendar.getInstance();
532             calendar.setTime(predictItem.getLastTime());
533             calendar.add(Calendar.MINUTE, -1 * lengthLeft);
534             startTime = calendar.getTime();
535         }
536         Date endTime = endTimeReq;
537         if (endTime == null) {
538             Calendar calendar = Calendar.getInstance();
539             calendar.setTime(predictItem.getLastTime());
540             calendar.add(Calendar.MINUTE, lengthRight);
541             endTime = calendar.getTime();
542         }
543         if (endTime.getTime() <= startTime.getTime()) {
544             Calendar calendar = Calendar.getInstance();
545             calendar.setTime(startTime);
546             calendar.add(Calendar.MINUTE, lengthRight);
547             endTime = calendar.getTime();
548         }
549         result[0] = predictTime;
550         result[1] = startTime;
551         result[2] = endTime;
552         return result;
553     }
b368e6 554 }