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