潘志宝
2025-01-14 fed257d4ee8c5f09affe0fb4611933d1f7ec724e
提交 | 用户 | 时间
b368e6 1 package com.iailab.module.model.api;
2
0a7d0f 3 import com.iailab.framework.common.pojo.PageResult;
b368e6 4 import com.iailab.framework.common.util.date.DateUtils;
8a74e9 5 import com.iailab.framework.common.util.object.ConvertUtils;
6 import com.iailab.module.data.api.plan.PlanItemApi;
7 import com.iailab.module.data.api.plan.dto.ApiPlanDataDTO;
b368e6 8 import com.iailab.module.data.api.point.DataPointApi;
9 import com.iailab.module.data.api.point.dto.ApiPointDTO;
10 import com.iailab.module.data.api.point.dto.ApiPointValueDTO;
11 import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
8a74e9 12 import com.iailab.module.data.common.ApiDataQueryDTO;
b368e6 13 import com.iailab.module.model.api.mcs.McsApi;
14 import com.iailab.module.model.api.mcs.dto.*;
22e321 15 import com.iailab.module.model.common.enums.DataTypeEnum;
401492 16 import com.iailab.module.model.enums.CommonConstant;
91343d 17 import com.iailab.module.model.common.enums.PreLineTypeEnum;
22e321 18 import com.iailab.module.model.influxdb.pojo.InfluxModelResultByOutPutIdsPOJO;
D 19 import com.iailab.module.model.influxdb.service.InfluxDBService;
20 import com.iailab.module.model.influxdb.vo.InfluxModelResultVO;
b368e6 21 import com.iailab.module.model.mcs.pre.entity.DmModuleEntity;
22 import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity;
c5fe30 23 import com.iailab.module.model.mcs.pre.entity.MmPredictAlarmMessageEntity;
b368e6 24 import com.iailab.module.model.mcs.pre.service.*;
22e321 25 import com.iailab.module.model.mcs.pre.vo.MmItemOutputRespVO;
c5fe30 26 import com.iailab.module.model.mcs.pre.vo.MmPredictAlarmMessageSaveReqVO;
22e321 27 import com.iailab.module.model.mcs.pre.vo.MmPredictItemRespVO;
055765 28 import com.iailab.module.model.mcs.sche.entity.StScheduleSuggestEntity;
4072bc 29 import com.iailab.module.model.mcs.sche.service.StScheduleSchemeService;
055765 30 import com.iailab.module.model.mcs.sche.service.StScheduleSuggestService;
19f359 31 import com.iailab.module.model.mcs.sche.vo.StScheduleSuggestSaveReqVO;
ead005 32 import com.iailab.module.model.mdk.vo.ItemVO;
730d19 33 import com.iailab.module.model.mpk.service.ChartParamService;
91343d 34 import com.iailab.module.model.mpk.service.ChartService;
b368e6 35 import lombok.extern.slf4j.Slf4j;
977edc 36 import org.apache.commons.lang3.StringUtils;
b368e6 37 import org.springframework.beans.factory.annotation.Autowired;
38 import org.springframework.util.CollectionUtils;
39 import org.springframework.validation.annotation.Validated;
40 import org.springframework.web.bind.annotation.RestController;
41
42 import java.math.BigDecimal;
43 import java.util.*;
22e321 44 import java.util.function.Function;
912419 45 import java.util.stream.Collectors;
22e321 46 import java.util.stream.Stream;
b368e6 47
48 /**
49  * @author PanZhibao
50  * @Description
51  * @createTime 2024年11月13日
52  */
53 @Slf4j
54 @RestController
55 @Validated
56 public class McsApiImpl implements McsApi {
57
58     @Autowired
6eeac9 59     private DataPointApi dataPointApi;
D 60
61     @Autowired
b368e6 62     private DmModuleService dmModuleService;
63
64     @Autowired
65     private MmPredictItemService mmPredictItemService;
66
67     @Autowired
68     private MmItemOutputService mmItemOutputService;
69
70     @Autowired
71     private MmItemResultService mmItemResultService;
72
73     @Autowired
74     private MmItemResultLastPointService mmItemResultLastPointService;
91343d 75
76     @Autowired
77     private MmItemResultJsonService mmItemResultJsonService;
78
79     @Autowired
80     private ChartService chartService;
c5fe30 81
82     @Autowired
83     private MmPredictAlarmMessageService mmPredictAlarmMessageService;
055765 84
85     @Autowired
86     private StScheduleSuggestService stScheduleSuggestService;
8a74e9 87
88     @Autowired
89     private PlanItemApi planItemApi;
9587d2 90
L 91     @Autowired
92     private MmPredictAlarmConfigService mmPredictAlarmConfigService;
3a6dfc 93
4072bc 94     @Autowired
L 95     private StScheduleSchemeService stScheduleSchemeService;
730d19 96
D 97     @Autowired
98     private ChartParamService chartParamService;
22e321 99
D 100     @Autowired
101     private InfluxDBService influxDBService;
6eeac9 102
b368e6 103     private int HOUR_MINS = 60;
104
105     @Override
106     public List<PredictItemTreeDTO> getPredictItemTree() {
107         List<PredictItemTreeDTO> result = new ArrayList<>();
108
109         List<DmModuleEntity> moduleList = dmModuleService.list(new HashMap<>());
110         if (CollectionUtils.isEmpty(moduleList)) {
111             return result;
112         }
113         moduleList.forEach(item -> {
114             PredictItemTreeDTO moduleOpt = new PredictItemTreeDTO();
115             moduleOpt.setId(item.getId());
116             moduleOpt.setLabel(item.getModulename());
117             List<PredictItemTreeDTO> children = new ArrayList<>();
a4891a 118             List<ItemVO> itemList = mmPredictItemService.getByModuleId(item.getId());
b368e6 119             itemList.forEach(item1 -> {
120                 PredictItemTreeDTO chd = new PredictItemTreeDTO();
a4891a 121                 chd.setLabel(item1.getItemName());
b368e6 122                 chd.setId(item1.getId());
a4891a 123                 List<PredictItemTreeDTO> chd1 = new ArrayList<>();
124                 List<MmItemOutputEntity> outList = mmItemOutputService.getByItemid(item1.getId());
125                 if (!CollectionUtils.isEmpty(outList)) {
126                     outList.forEach(out -> {
127                         PredictItemTreeDTO chd2 = new PredictItemTreeDTO();
128                         chd2.setId(out.getId());
f283ee 129                         chd2.setLabel(out.getResultName());
a4891a 130                         chd1.add(chd2);
131                     });
132                 }
133                 chd.setChildren(chd1);
b368e6 134                 children.add(chd);
135             });
136             moduleOpt.setChildren(children);
137             result.add(moduleOpt);
138         });
139         return result;
140     }
141
142     @Override
143     public PreDataBarLineRespVO getPreDataCharts(PreDataBarLineReqVO reqVO) {
144         PreDataBarLineRespVO result = new PreDataBarLineRespVO();
a4891a 145         List<String> outIds = reqVO.getOutIds();
b368e6 146         List<String> legends = new ArrayList<>();
147         List<PreDataViewRespDTO> dataViewList = new ArrayList<>();
9e844c 148         if (CollectionUtils.isEmpty(outIds)) {
b368e6 149             return result;
150         }
151         Date predictTime = reqVO.getPredictTime();
152         if (predictTime == null) {
9e844c 153             MmItemOutputEntity output = mmItemOutputService.getOutPutById(reqVO.getOutIds().get(0));
b82ba2 154             ItemVO predictItem = mmPredictItemService.getItemByIdFromCache(output.getItemid());
9e844c 155             if (predictItem.getLastTime() != null) {
156                 predictTime = predictItem.getLastTime();
157             } else {
158                 Calendar calendar = Calendar.getInstance();
159                 calendar.set(Calendar.MILLISECOND, 0);
160                 calendar.set(Calendar.SECOND, 0);
161                 predictTime = calendar.getTime();
162             }
b368e6 163         }
164         Date startTime = reqVO.getStartTime();
165         if (startTime == null) {
166             Calendar calendar = Calendar.getInstance();
167             calendar.setTime(predictTime);
168             calendar.add(Calendar.HOUR_OF_DAY, -1);
169             startTime = calendar.getTime();
170         }
171         Date endTime = reqVO.getEndTime();
172         if (endTime == null) {
173             Calendar calendar = Calendar.getInstance();
174             calendar.setTime(predictTime);
175             calendar.add(Calendar.HOUR_OF_DAY, 1);
176             endTime = calendar.getTime();
177         }
178
a4891a 179         for (int i = 0; i < outIds.size(); i++) {
b368e6 180             PreDataViewRespDTO viewDto = new PreDataViewRespDTO();
a4891a 181             String outId = outIds.get(i);
182             MmItemOutputEntity output = mmItemOutputService.getOutPutById(outId);
b368e6 183             if (output == null) {
9e844c 184                 continue;
b368e6 185             }
f283ee 186             legends.add(output.getResultName());
9e844c 187             viewDto.setItemId(output.getItemid());
188             viewDto.setOutId(outId);
189             viewDto.setResultstr(output.getResultstr());
f283ee 190             viewDto.setResultName(output.getResultName());
b368e6 191             viewDto.setRealData(getHisData(output.getPointid(), startTime, endTime));
977edc 192             viewDto.setPreDataN(mmItemResultService.getData(output.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
193             viewDto.setPreDataL(mmItemResultLastPointService.getData(output.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
b368e6 194
195             List<Double> values = new ArrayList<>();
196             if (!CollectionUtils.isEmpty(viewDto.getRealData())) {
197                 List<Double> hisValues = new ArrayList<>();
198                 viewDto.getRealData().forEach(item -> {
199                     values.add(Double.parseDouble(item[1].toString()));
200                     hisValues.add(Double.parseDouble(item[1].toString()));
201                 });
202                 viewDto.setHisMax(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
203                 viewDto.setHisMin(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
204                 viewDto.setHisAvg(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).average().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
205                 viewDto.setHisCumulant(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).sum())
206                         .divide(new BigDecimal(HOUR_MINS), 2, BigDecimal.ROUND_HALF_UP));
207             }
208             if (!CollectionUtils.isEmpty(viewDto.getPreDataN())) {
209                 viewDto.getPreDataN().forEach(item -> {
210                     values.add(Double.parseDouble(item[1].toString()));
211                 });
212             }
213             if (!CollectionUtils.isEmpty(viewDto.getPreDataL())) {
214                 List<Double> preValues = new ArrayList<>();
215                 viewDto.getPreDataL().forEach(item -> {
216                     values.add(Double.parseDouble(item[1].toString()));
217                     preValues.add(Double.parseDouble(item[1].toString()));
218                 });
219                 viewDto.setPreMax(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
220                 viewDto.setPreMin(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
221                 viewDto.setPreAvg(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).average().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
222             }
223             if (!CollectionUtils.isEmpty(viewDto.getCurData())) {
224                 List<Double> preValues = new ArrayList<>();
225                 viewDto.getCurData().forEach(item -> {
226                     values.add(Double.parseDouble(item[1].toString()));
227                     preValues.add(Double.parseDouble(item[1].toString()));
228                 });
229                 viewDto.setPreCumulant(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).sum())
230                         .divide(new BigDecimal(HOUR_MINS), 2, BigDecimal.ROUND_HALF_UP));
231             }
232             if (!CollectionUtils.isEmpty(viewDto.getAdjData())) {
233                 viewDto.getAdjData().forEach(item -> {
234                     values.add(Double.parseDouble(item[1].toString()));
235                 });
236             }
237             if (!CollectionUtils.isEmpty(values)) {
238                 viewDto.setMaxValue(new BigDecimal(values.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
239                 viewDto.setMinValue(new BigDecimal(values.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
240             }
241             dataViewList.add(viewDto);
242         }
243         result.setStartTime(startTime);
244         result.setEndTime(endTime);
245         result.setPredictTime(predictTime);
246         result.setCategories(DateUtils.getTimeScale(startTime, endTime, 60));
247         result.setLegend(legends);
248         result.setDataViewList(dataViewList);
249         return result;
250     }
251
ead005 252     @Override
253     public PreDataItemChartRespVO getPreDataItemChart(PreDataItemChartReqVO reqVO) {
254         PreDataItemChartRespVO result = new PreDataItemChartRespVO();
864b61 255         ItemVO predictItem = mmPredictItemService.getItemById(reqVO.getItemId());
ead005 256         if (predictItem == null) {
257             return result;
258         }
259         if (predictItem.getLastTime() == null) {
260             return result;
261         }
328ef4 262         result.setPredictTime(predictItem.getLastTime());
ead005 263         Date startTime = reqVO.getStartTime();
264         if (startTime == null) {
265             Calendar calendar = Calendar.getInstance();
266             calendar.setTime(predictItem.getLastTime());
e691b9 267             calendar.add(Calendar.SECOND, -1 * predictItem.getPredictLength() * predictItem.getGranularity());
ead005 268             startTime = calendar.getTime();
269         }
270         Date endTime = reqVO.getEndTime();
271         if (endTime == null) {
272             Calendar calendar = Calendar.getInstance();
273             calendar.setTime(predictItem.getLastTime());
e691b9 274             calendar.add(Calendar.SECOND, predictItem.getPredictLength() * predictItem.getGranularity());
ead005 275             endTime = calendar.getTime();
276         }
1f9784 277         if (endTime.getTime() <= startTime.getTime()) {
278             Calendar calendar = Calendar.getInstance();
279             calendar.setTime(startTime);
e691b9 280             calendar.add(Calendar.SECOND, predictItem.getPredictLength() * predictItem.getGranularity());
1f9784 281             endTime = calendar.getTime();
282         }
283
ead005 284         List<String> categories = DateUtils.getTimeScale(startTime, endTime, predictItem.getGranularity());
285         List<String> legend = new ArrayList<>();
286         LinkedHashMap<String, PreDataSampleViewRespDTO> viewMap = new LinkedHashMap<>();
287         List<MmItemOutputEntity> outs = mmItemOutputService.getByItemid(reqVO.getItemId());
288         if (CollectionUtils.isEmpty(outs)) {
289             return result;
290         }
291         for (MmItemOutputEntity out : outs) {
f283ee 292             legend.add(out.getResultName());
ead005 293             PreDataSampleViewRespDTO viewDto = new PreDataSampleViewRespDTO();
85b200 294             if (StringUtils.isNotBlank(out.getPointid())) {
D 295                 viewDto.setRealData(getHisData(out.getPointid(), startTime, endTime));
296             }
977edc 297             viewDto.setPreDataN(mmItemResultService.getData(out.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
f283ee 298             viewMap.put(out.getResultName(), viewDto);
ead005 299         }
300         result.setStartTime(startTime);
301         result.setEndTime(endTime);
302         result.setCategories(categories);
303         result.setLegend(legend);
304         result.setViewMap(viewMap);
305         return result;
306     }
307
328ef4 308     @Override
91343d 309     public PreDataSingleChartRespVO getPreDataSingleChart(PreDataSingleChartReqVO reqVO) {
310         PreDataSingleChartRespVO result = new PreDataSingleChartRespVO();
328ef4 311
91343d 312         Map<String, String> chartParams = chartService.getByChartCode(reqVO.getChartCode());
313         if (CollectionUtils.isEmpty(chartParams)) {
314             return result;
315         }
316         String itemCode = chartParams.get(CommonConstant.ITEM_CODE);
317         if (itemCode == null) {
318             return result;
319         }
320         String resultStr = chartParams.get(CommonConstant.RESULT_STR);
321         if (resultStr == null) {
322             return result;
323         }
bd9085 324         String resultIndex = chartParams.get(CommonConstant.RESULT_INDEX);
325
91343d 326         ItemVO predictItem = mmPredictItemService.getItemByItemNo(itemCode);
327         if (predictItem == null || predictItem.getLastTime() == null) {
328             return result;
329         }
977edc 330         String timeFormat = StringUtils.isBlank(reqVO.getTimeFormat()) ? DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND : reqVO.getTimeFormat();
331         PreLineTypeEnum lineType = chartParams.get(CommonConstant.LINE_TYPE) == null ? PreLineTypeEnum.TN : PreLineTypeEnum.getEumByCode(chartParams.get(CommonConstant.LINE_TYPE));
8fd9f6 332         BigDecimal rangeH = chartParams.get(CommonConstant.RANGE_H) == null ? null : new BigDecimal(chartParams.get(CommonConstant.RANGE_H));
333         BigDecimal rangeL = chartParams.get(CommonConstant.RANGE_L) == null ? null : new BigDecimal(chartParams.get(CommonConstant.RANGE_L));
334         BigDecimal limitH = chartParams.get(CommonConstant.LIMIT_H) == null ? null : new BigDecimal(chartParams.get(CommonConstant.LIMIT_H));
335         BigDecimal limitL = chartParams.get(CommonConstant.LIMIT_L) == null ? null : new BigDecimal(chartParams.get(CommonConstant.LIMIT_L));
91343d 336         int lengthLeft = chartParams.get(CommonConstant.LENGTH_LEFT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_LEFT)).intValue();
337         int lengthRight = chartParams.get(CommonConstant.LENGTH_RIGHT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_RIGHT)).intValue();
8a74e9 338
339         Date[] timeArray = calResultTime(predictItem, reqVO.getStartTime(), reqVO.getEndTime(), lengthLeft, lengthRight);
340         Date predictTime = timeArray[0];
341         Date startTime = timeArray[1];
342         Date endTime = timeArray[2];
343
977edc 344         List<String> categories = DateUtils.getTimeScale(startTime, endTime, predictItem.getGranularity(), timeFormat);
91343d 345         List<String> legend = new ArrayList<>();
bdab69 346         MmItemOutputEntity outPut = mmItemOutputService.getByItemid(predictItem.getId(), resultStr, resultIndex);
91343d 347         PreDataViewRespDTO dataView = new PreDataViewRespDTO();
348         dataView.setItemId(predictItem.getId());
349         dataView.setItemName(predictItem.getItemName());
350         dataView.setResultstr(resultStr);
351         dataView.setRangeH(rangeH);
352         dataView.setRangeL(rangeL);
353         dataView.setLimitH(limitH);
354         dataView.setLimitL(limitL);
b6bfe8 355         if (StringUtils.isNotBlank(outPut.getPointid())) {
D 356             dataView.setRealData(getHisData(outPut.getPointid(), startTime, endTime, timeFormat));
357         } else {
358             dataView.setRealData(new ArrayList<>());
359         }
3722c4 360         dataView.setCurData(mmItemResultJsonService.getData(outPut.getId(), predictTime, timeFormat));
d9f2f1 361         dataView.setLineType(lineType.getCode());
91343d 362         switch (lineType) {
363             case TN:
977edc 364                 dataView.setPreDataN(mmItemResultService.getData(outPut.getId(), startTime, endTime, timeFormat));
91343d 365                 break;
366             case TL:
977edc 367                 dataView.setPreDataN(mmItemResultService.getData(outPut.getId(), predictTime, endTime, timeFormat));
368                 dataView.setPreDataL(mmItemResultLastPointService.getData(outPut.getId(), startTime, endTime, timeFormat));
91343d 369                 break;
370             default:
371                 break;
372         }
d9f2f1 373         if (!CollectionUtils.isEmpty(dataView.getRealData())) {
374             Object[] rdo = dataView.getRealData().get(dataView.getRealData().size() - 1);
375             dataView.setCurrValue(new BigDecimal(rdo[1].toString()));
376         }
912419 377
3722c4 378         if (!CollectionUtils.isEmpty(dataView.getCurData())) {
379             List<Double> curList = dataView.getCurData().stream().map(t -> {
912419 380                 return new Double(t[1].toString());
381             }).collect(Collectors.toList());
382             dataView.setPreMax(new BigDecimal(curList.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
383             dataView.setPreMin(new BigDecimal(curList.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP));
8fd9f6 384             dataView.setPreLast(new BigDecimal(curList.get(curList.size() - 1)));
3722c4 385             dataView.setPreCumulant(new BigDecimal(curList.stream().mapToDouble(Double::doubleValue).sum())
386                     .divide(new BigDecimal(HOUR_MINS), 2, BigDecimal.ROUND_HALF_UP));
912419 387         }
388
9904da 389         String alarmObj = chartParams.get(CommonConstant.ALARM_OBJ);
390         if (StringUtils.isNotBlank(alarmObj)) {
391             List<AlarmMessageRespDTO> alarmList = ConvertUtils.sourceToTarget(mmPredictAlarmMessageService.getList(alarmObj, predictTime), AlarmMessageRespDTO.class);
8ccce9 392             dataView.setAlarmList(alarmList);
8fd9f6 393             if (CollectionUtils.isEmpty(alarmList)) {
394                 dataView.setAlarmMessage("暂无预警信息");
395             } else {
396                 dataView.setAlarmMessage(alarmList.get(0).getContent());
397             }
9904da 398         }
399
8a74e9 400         result.setPredictTime(predictTime);
91343d 401         result.setStartTime(startTime);
402         result.setEndTime(endTime);
403         result.setCategories(categories);
404         result.setLegend(legend);
405         result.setDataView(dataView);
8a74e9 406         return result;
407     }
408
409     @Override
d9fe8f 410     public Map<String, List<Object[]>> getPreDataCur(PreDataJsonReqVO reqVO) {
411         Map<String, List<Object[]>> result = new HashMap<>();
412         if (reqVO == null || reqVO.getPredictTime() == null || CollectionUtils.isEmpty(reqVO.getOutputIdList())) {
413             return result;
414         }
415         reqVO.getOutputIdList().forEach(outPutId -> {
416             result.put(outPutId, mmItemResultJsonService.getData(outPutId, reqVO.getPredictTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
417         });
418         return result;
419     }
420
421     @Override
8a74e9 422     public PlanDataSingleChartRespVO getPlanDataSingleChart(PreDataSingleChartReqVO reqVO) {
423         PlanDataSingleChartRespVO result = new PlanDataSingleChartRespVO();
424         Map<String, String> chartParams = chartService.getByChartCode(reqVO.getChartCode());
425         if (CollectionUtils.isEmpty(chartParams)) {
426             return result;
427         }
428         String itemCode = chartParams.get(CommonConstant.ITEM_CODE);
429         if (itemCode == null) {
430             return result;
431         }
432         String planItemStr = chartParams.get(CommonConstant.PLAN_ITEM_LIST);
433         if (planItemStr == null) {
434             return result;
435         }
436         List<String> planItemCodeList = Arrays.asList(planItemStr.split(","));
437
438         ItemVO predictItem = mmPredictItemService.getItemByItemNo(itemCode);
439         if (predictItem == null || predictItem.getLastTime() == null) {
440             return result;
441         }
442         String timeFormat = StringUtils.isBlank(reqVO.getTimeFormat()) ? DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND : reqVO.getTimeFormat();
443         int lengthLeft = chartParams.get(CommonConstant.LENGTH_LEFT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_LEFT)).intValue();
444         int lengthRight = chartParams.get(CommonConstant.LENGTH_RIGHT) == null ? predictItem.getPredictLength() : new BigDecimal(chartParams.get(CommonConstant.LENGTH_RIGHT)).intValue();
445         Date[] timeArray = calResultTime(predictItem, reqVO.getStartTime(), reqVO.getEndTime(), lengthLeft, lengthRight);
446         Date predictTime = timeArray[0];
447         Date startTime = timeArray[1];
448         Date endTime = timeArray[2];
449         List<String> categories = DateUtils.getTimeScale(startTime, endTime, predictItem.getGranularity(), timeFormat);
450         List<String> legend = new ArrayList<>();
451         LinkedHashMap<String, List<PlanDataRecordDTO>> record = new LinkedHashMap<>();
452         ApiDataQueryDTO queryDTO = new ApiDataQueryDTO();
453         queryDTO.setItemNos(planItemCodeList);
454         queryDTO.setStart(startTime);
455         queryDTO.setEnd(endTime);
456         LinkedHashMap<String, List<ApiPlanDataDTO>> planData = planItemApi.queryPlanItemRecordValue(queryDTO);
457         if (CollectionUtils.isEmpty(planData)) {
458             planData.forEach((key, value) -> {
459                 record.put(key, ConvertUtils.sourceToTarget(value, PlanDataRecordDTO.class));
460             });
461         }
462         result.setPredictTime(predictTime);
463         result.setStartTime(startTime);
464         result.setEndTime(endTime);
465         result.setCategories(categories);
466         result.setLegend(legend);
467         result.setRecord(record);
328ef4 468         return result;
469     }
470
b368e6 471     /**
472      * 获取真实值
473      *
474      * @param pointId
475      * @param startTime
476      * @param endTime
477      * @return
478      */
479     private List<Object[]> getHisData(String pointId, Date startTime, Date endTime) {
480         List<Object[]> result = new ArrayList<>();
481         ApiPointDTO pointDTO = dataPointApi.getInfoById(pointId);
482         ApiPointValueQueryDTO queryPointDto = new ApiPointValueQueryDTO();
483         queryPointDto.setPointNo(pointDTO.getPointNo());
484         queryPointDto.setStart(startTime);
485         queryPointDto.setEnd(endTime);
486         List<ApiPointValueDTO> valueDTOS = dataPointApi.queryPointHistoryValue(queryPointDto);
487         if (CollectionUtils.isEmpty(valueDTOS)) {
488             return result;
489         }
490         valueDTOS.forEach(item -> {
491             Object[] values = new Object[2];
214275 492             values[0] = DateUtils.format(item.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
493             values[1] = new BigDecimal(item.getV()).setScale(2, BigDecimal.ROUND_HALF_UP);
b368e6 494             result.add(values);
495         });
496         return result;
497     }
498
977edc 499     /**
500      * 获取真实值
501      *
502      * @param pointId
503      * @param startTime
504      * @param endTime
505      * @param timeFormat
506      * @return
507      */
508     private List<Object[]> getHisData(String pointId, Date startTime, Date endTime, String timeFormat) {
509         List<Object[]> result = new ArrayList<>();
510         ApiPointDTO pointDTO = dataPointApi.getInfoById(pointId);
511         ApiPointValueQueryDTO queryPointDto = new ApiPointValueQueryDTO();
512         queryPointDto.setPointNo(pointDTO.getPointNo());
513         queryPointDto.setStart(startTime);
514         queryPointDto.setEnd(endTime);
515         List<ApiPointValueDTO> valueDTOS = dataPointApi.queryPointHistoryValue(queryPointDto);
516         if (CollectionUtils.isEmpty(valueDTOS)) {
517             return result;
518         }
519         valueDTOS.forEach(item -> {
520             Object[] values = new Object[2];
521             values[0] = DateUtils.format(item.getT(), timeFormat);
522             values[1] = new BigDecimal(item.getV()).setScale(2, BigDecimal.ROUND_HALF_UP);
523             result.add(values);
524         });
525         return result;
526     }
527
c5fe30 528     /**
529      * 新增预警信息
530      *
531      * @param dto
532      * @return
533      */
b368e6 534     @Override
535     public Boolean createAlarmMessage(AlarmMessageRespDTO dto) {
c5fe30 536         try {
537             mmPredictAlarmMessageService.create(ConvertUtils.sourceToTarget(dto, MmPredictAlarmMessageSaveReqVO.class));
538             return true;
539         } catch (Exception e) {
540             return false;
541         }
b368e6 542     }
543
544     @Override
545     public List<AlarmMessageRespDTO> listAlarmMessage(Map<String, Object> params) {
546         return null;
547     }
548
549     @Override
9587d2 550     public List<AlarmConfigRespDTO> listAlarmConfig(Map<String, Object> params) {
L 551         return mmPredictAlarmConfigService.list(params);
552     }
553
554     @Override
c5fe30 555     public AlarmMessageRespDTO getLastAlarmMessage(String alarmObj) {
556         MmPredictAlarmMessageEntity entity = mmPredictAlarmMessageService.getLast(alarmObj);
557         return ConvertUtils.sourceToTarget(entity, AlarmMessageRespDTO.class);
558     }
559
560     @Override
b368e6 561     public Boolean createScheduleSuggest(ScheduleSuggestRespDTO dto) {
19f359 562         stScheduleSuggestService.create(ConvertUtils.sourceToTarget(dto, StScheduleSuggestSaveReqVO.class));
b368e6 563         return true;
564     }
565
566     @Override
4072bc 567     public List<ScheduleSuggestRespDTO> listScheduleSuggest(Map<String, Object> params) {
3a6dfc 568         return Collections.emptyList();
L 569     }
570
571     @Override
055765 572     public List<ScheduleSuggestRespDTO> getLastLimitScheduleSuggest(String scheduleObj, Integer limit) {
573         List<StScheduleSuggestEntity> list = stScheduleSuggestService.getList(scheduleObj, limit);
574         return ConvertUtils.sourceToTarget(list, ScheduleSuggestRespDTO.class);
b368e6 575     }
576
577     @Override
578     public Boolean modifyPredictModelSetting(List<PredictModelSettingReqDTO> dtos) {
579         return true;
580     }
581
582     @Override
583     public Boolean modifyScheduleModelSetting(List<ScheduleModelSettingReqDTO> dtos) {
584         return true;
585     }
8a74e9 586
4072bc 587     @Override
ed4107 588     public List<StScheduleSchemeDTO> listScheduleScheme(String triggerMethod, String triggerCondition) {
589         Map<String, Object> params = new HashMap<>();
590         params.put("triggerMethod", triggerMethod);
591         params.put("triggerCondition", triggerCondition);
4072bc 592         return stScheduleSchemeService.list(params);
6eeac9 593     }
8a74e9 594
730d19 595     @Override
D 596     public List<ChartParamDTO> getChartParamList(String chartCode) {
597         if (StringUtils.isBlank(chartCode)) {
598             return null;
599         }
600         return chartParamService.list(chartCode);
601     }
602
0a7d0f 603     @Override
604     public PageResult<StAlarmAndSuggestRespVO> getAlarmAndSuggestPage(StAlarmAndSuggestPageReqVO reqVO) {
605         return stScheduleSchemeService.getAlarmAndSuggestPage(reqVO);
606     }
607
22e321 608     @Override
D 609     public Map<String, Map<String, Double>> getPreDoubleData(PreDoubleDataReqVO reqVO) {
610         List<MmPredictItemRespVO> doubleItemOutPuts = mmPredictItemService.getDoubleOutPutsByItemNos(reqVO.getItemNos());
611
612         //<itemNo,<resultStr,double>>
613         Map<String, Map<String, Double>> result = new HashMap<>(reqVO.getItemNos().size());
614
615         for (MmPredictItemRespVO mmPredictItemRespVO : doubleItemOutPuts) {
616             List<String> outPutIds = mmPredictItemRespVO.getOutPuts().stream().map(MmItemOutputRespVO::getId).collect(Collectors.toList());
617             InfluxModelResultByOutPutIdsPOJO pojo = new InfluxModelResultByOutPutIdsPOJO();
618             pojo.setOutPutIds(outPutIds);
619             pojo.setType(DataTypeEnum.FLOAT.getCode());
620             Map<String, List<InfluxModelResultVO>> outPutIdDoubles = influxDBService.queryModelResultsByOutPutIds(pojo, mmPredictItemRespVO.getLastTime(), mmPredictItemRespVO.getLastTime());
621             Map<String, Double> outPutIdDouble = new HashMap<>(outPutIds.size());
622             for (MmItemOutputRespVO outPut : mmPredictItemRespVO.getOutPuts()) {
623                 String outPutId = outPut.getId();
624                 if (outPutIdDoubles.containsKey(outPutId)) {
625                     List<InfluxModelResultVO> influxModelResultVOS = outPutIdDoubles.get(outPutId);
626                     if (!CollectionUtils.isEmpty(influxModelResultVOS)) {
627                         outPutIdDouble.put(outPut.getResultstr(),Double.valueOf(influxModelResultVOS.get(0).getValue().toString()));
628                     }
629                 }
630             }
631             result.put(mmPredictItemRespVO.getItemno(),outPutIdDouble);
632         }
633         return result;
634     }
635
bffae5 636     public Map<String, BigDecimal> getPredictLastValue(PredictLastValueReqVO reqVO) {
637         Map<String, BigDecimal> result = new HashMap<>(reqVO.getItemNos().size());
638         if (CollectionUtils.isEmpty(reqVO.getItemNos())) {
639             return result;
640         }
641         List<String[]> itemNos = reqVO.getItemNos();
642         for (String[] itemNo : itemNos) {
fed257 643             String key = itemNo[0] + "_" + itemNo[1] + "_" + itemNo[2];
bffae5 644             ItemVO predictItem = mmPredictItemService.getItemByItemNo(itemNo[0]);
645             if (predictItem == null || predictItem.getLastTime() == null) {
fed257 646                 result.put(key, BigDecimal.ZERO);
bffae5 647             }
648             MmItemOutputEntity outPut = mmItemOutputService.getByItemid(predictItem.getId(), itemNo[1], itemNo[2]);
649
650             Date predictTime = predictItem.getLastTime();
651             List<Object[]> curData = mmItemResultJsonService.getData(outPut.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
652             if(CollectionUtils.isEmpty(curData)) {
fed257 653                 result.put(key, BigDecimal.ZERO);
bffae5 654             } else {
fed257 655                 result.put(key, new BigDecimal(curData.get(curData.size() - 1)[1].toString()));
bffae5 656             }
657         }
658         return result;
659     }
660
8a74e9 661     private Date[] calResultTime(ItemVO predictItem, Date startTimeReq, Date endTimeReq, int lengthLeft, int lengthRight) {
662         Date[] result = new Date[3];
663         Date predictTime = predictItem.getLastTime();
664         Date startTime = startTimeReq;
665         if (startTime == null) {
666             Calendar calendar = Calendar.getInstance();
667             calendar.setTime(predictItem.getLastTime());
668             calendar.add(Calendar.MINUTE, -1 * lengthLeft);
669             startTime = calendar.getTime();
670         }
671         Date endTime = endTimeReq;
672         if (endTime == null) {
673             Calendar calendar = Calendar.getInstance();
674             calendar.setTime(predictItem.getLastTime());
675             calendar.add(Calendar.MINUTE, lengthRight);
676             endTime = calendar.getTime();
677         }
678         if (endTime.getTime() <= startTime.getTime()) {
679             Calendar calendar = Calendar.getInstance();
680             calendar.setTime(startTime);
681             calendar.add(Calendar.MINUTE, lengthRight);
682             endTime = calendar.getTime();
683         }
684         result[0] = predictTime;
685         result[1] = startTime;
686         result[2] = endTime;
687         return result;
688     }
b368e6 689 }