| | |
| | | import com.iailab.module.data.common.ApiDataQueryDTO; |
| | | import com.iailab.module.model.api.mcs.McsApi; |
| | | import com.iailab.module.model.api.mcs.dto.*; |
| | | import com.iailab.module.model.api.mdk.dto.MdkPredictDataDTO; |
| | | import com.iailab.module.model.api.mdk.dto.StScheduleRecordVO; |
| | | import com.iailab.module.model.common.enums.CommonDict; |
| | | import com.iailab.module.model.common.enums.DataTypeEnum; |
| | |
| | | import com.iailab.module.model.mcs.sche.vo.StScheduleRecordRespVO; |
| | | import com.iailab.module.model.mcs.sche.vo.StScheduleSuggestSaveReqVO; |
| | | import com.iailab.module.model.mcs.sche.vo.StSuggestOperationRecordReqVO; |
| | | import com.iailab.module.model.mdk.vo.DataValueVO; |
| | | import com.iailab.module.model.mdk.vo.ItemVO; |
| | | import com.iailab.module.model.mpk.service.ChartParamService; |
| | | import com.iailab.module.model.mpk.service.ChartService; |
| | |
| | | private StScheduleSuggestService stScheduleSuggestService; |
| | | |
| | | @Autowired |
| | | private StSuggestSnapshotRecordService stSuggestSnapshotRecordService; |
| | | |
| | | @Autowired |
| | | private PlanItemApi planItemApi; |
| | | |
| | | @Autowired |
| | |
| | | @Autowired |
| | | private StSuggestOperationRecordService stSuggestOperationRecordService; |
| | | |
| | | private int HOUR_MINS = 60; |
| | | @Autowired |
| | | private StSuggestSnapshotConfDetService stSuggestSnapshotConfDetService; |
| | | |
| | | @Override |
| | | public List<PredictItemTreeDTO> getPredictItemTree() { |
| | |
| | | |
| | | @Override |
| | | public PreDataBarLineRespVO getPreDataCharts(PreDataBarLineReqVO reqVO) { |
| | | PreDataBarLineRespVO result = new PreDataBarLineRespVO(); |
| | | List<String> outIds = reqVO.getOutIds(); |
| | | List<String> legends = new ArrayList<>(); |
| | | List<PreDataViewRespDTO> dataViewList = new ArrayList<>(); |
| | | if (CollectionUtils.isEmpty(outIds)) { |
| | | return result; |
| | | } |
| | | Date predictTime = reqVO.getPredictTime(); |
| | | if (predictTime == null) { |
| | | MmItemOutputEntity output = null; |
| | | for (String outId : outIds) { |
| | | output = mmItemOutputService.getOutPutById(outId); |
| | | if (output != null) { |
| | | break; |
| | | } |
| | | } |
| | | ItemVO predictItem = mmPredictItemService.getItemById(output.getItemid()); |
| | | if (predictItem.getLastTime() != null) { |
| | | predictTime = predictItem.getLastTime(); |
| | | } else { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.set(Calendar.MILLISECOND, 0); |
| | | calendar.set(Calendar.SECOND, 0); |
| | | predictTime = calendar.getTime(); |
| | | } |
| | | } |
| | | Date startTime = reqVO.getStartTime(); |
| | | if (startTime == null) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(predictTime); |
| | | calendar.add(Calendar.HOUR_OF_DAY, -1); |
| | | startTime = calendar.getTime(); |
| | | } |
| | | Date endTime = reqVO.getEndTime(); |
| | | if (endTime == null) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(predictTime); |
| | | calendar.add(Calendar.HOUR_OF_DAY, 1); |
| | | calendar.add(Calendar.MINUTE, 1); |
| | | endTime = calendar.getTime(); |
| | | } |
| | | |
| | | for (int i = 0; i < outIds.size(); i++) { |
| | | PreDataViewRespDTO viewDto = new PreDataViewRespDTO(); |
| | | String outId = outIds.get(i); |
| | | MmItemOutputEntity output = mmItemOutputService.getOutPutById(outId); |
| | | if (output == null) { |
| | | continue; |
| | | } |
| | | legends.add(output.getResultName()); |
| | | viewDto.setItemId(output.getItemid()); |
| | | viewDto.setOutId(outId); |
| | | viewDto.setResultstr(output.getResultstr()); |
| | | viewDto.setResultName(output.getResultName()); |
| | | viewDto.setRealData(getHisData(output.getPointid(), startTime, endTime, reqVO.getPrec())); |
| | | viewDto.setPreDataN(mmItemResultService.getData(output.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); |
| | | viewDto.setPreDataL(mmItemResultLastPointService.getData(output.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); |
| | | viewDto.setPreDataLOriginal(mmItemResultLastPointService.getData(output.getId(), startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, DataTypeEnum.FLOAT_LAST_BAK)); |
| | | viewDto.setCurData(mmItemResultJsonService.getData(output.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); |
| | | // 模拟调整曲线 |
| | | viewDto.setAdjData(stAdjustResultService.getData(output.getId(), predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); |
| | | |
| | | List<Double> values = new ArrayList<>(); |
| | | if (!CollectionUtils.isEmpty(viewDto.getRealData())) { |
| | | List<Double> hisValues = new ArrayList<>(); |
| | | viewDto.getRealData().forEach(item -> { |
| | | values.add(Double.parseDouble(item[1].toString())); |
| | | hisValues.add(Double.parseDouble(item[1].toString())); |
| | | }); |
| | | viewDto.setHisMax(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP)); |
| | | viewDto.setHisMin(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP)); |
| | | viewDto.setHisAvg(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).average().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP)); |
| | | viewDto.setHisCumulant(new BigDecimal(hisValues.stream().mapToDouble(Double::doubleValue).sum()) |
| | | .divide(new BigDecimal(HOUR_MINS), 2, BigDecimal.ROUND_HALF_UP)); |
| | | } |
| | | if (!CollectionUtils.isEmpty(viewDto.getPreDataN())) { |
| | | viewDto.getPreDataN().forEach(item -> { |
| | | values.add(Double.parseDouble(item[1].toString())); |
| | | }); |
| | | } |
| | | if (!CollectionUtils.isEmpty(viewDto.getPreDataL())) { |
| | | List<Double> preValues = new ArrayList<>(); |
| | | viewDto.getPreDataL().forEach(item -> { |
| | | values.add(Double.parseDouble(item[1].toString())); |
| | | preValues.add(Double.parseDouble(item[1].toString())); |
| | | }); |
| | | viewDto.setPreMax(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP)); |
| | | viewDto.setPreMin(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP)); |
| | | viewDto.setPreAvg(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).average().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP)); |
| | | } |
| | | if (!CollectionUtils.isEmpty(viewDto.getCurData())) { |
| | | List<Double> preValues = new ArrayList<>(); |
| | | viewDto.getCurData().forEach(item -> { |
| | | values.add(Double.parseDouble(item[1].toString())); |
| | | preValues.add(Double.parseDouble(item[1].toString())); |
| | | }); |
| | | viewDto.setPreCumulant(new BigDecimal(preValues.stream().mapToDouble(Double::doubleValue).sum()) |
| | | .divide(new BigDecimal(HOUR_MINS), 2, BigDecimal.ROUND_HALF_UP)); |
| | | } |
| | | if (!CollectionUtils.isEmpty(viewDto.getAdjData())) { |
| | | viewDto.getAdjData().forEach(item -> { |
| | | values.add(Double.parseDouble(item[1].toString())); |
| | | }); |
| | | } |
| | | if (!CollectionUtils.isEmpty(values)) { |
| | | viewDto.setMaxValue(new BigDecimal(values.stream().mapToDouble(Double::doubleValue).max().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP)); |
| | | viewDto.setMinValue(new BigDecimal(values.stream().mapToDouble(Double::doubleValue).min().getAsDouble()).setScale(2, BigDecimal.ROUND_HALF_UP)); |
| | | } |
| | | //处理预测累计 |
| | | if (output.getIscumulant() == 1) { |
| | | if (StringUtils.isNotBlank(output.getCumulpoint())) { |
| | | viewDto.setCumulantRealData(getHisData(output.getCumulpoint(), startTime, endTime, reqVO.getPrec())); |
| | | } |
| | | viewDto.setCumulantPreData(mmItemResultService.getData(output.getId() + CommonDict.CUMULANT_SUFFIX, startTime, endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); |
| | | } |
| | | |
| | | dataViewList.add(viewDto); |
| | | } |
| | | result.setStartTime(startTime); |
| | | result.setEndTime(endTime); |
| | | result.setPredictTime(predictTime); |
| | | result.setCategories(DateUtils.getTimeScale(startTime, endTime, 60)); |
| | | result.setLegend(legends); |
| | | result.setDataViewList(dataViewList); |
| | | return result; |
| | | return mmItemResultService.getPreDataCharts(reqVO); |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | if (!CollectionUtils.isEmpty(realDataMap)) { |
| | | Object curReal = realDataMap.get(DateUtils.format(predictTime, timeFormat)) == null ? |
| | | dataView.getRealData().get(dataView.getRealData().size() - 1) : realDataMap.get(DateUtils.format(predictTime, timeFormat)); |
| | | dataView.getRealData().get(dataView.getRealData().size() - 1)[1] : realDataMap.get(DateUtils.format(predictTime, timeFormat)); |
| | | // 当前值T0 + 当前预测值 20250409 |
| | | dataView.setCurData(mmItemResultJsonService.getData(outPut.getId(), predictTime, timeFormat, decimalPlaces, true, curReal)); |
| | | } else { |
| | |
| | | |
| | | @Override |
| | | public Boolean createScheduleSuggest(ScheduleSuggestRespDTO dto) { |
| | | String suggestId = UUID.randomUUID().toString(); |
| | | dto.setId(suggestId); |
| | | stScheduleSuggestService.create(ConvertUtils.sourceToTarget(dto, StScheduleSuggestSaveReqVO.class)); |
| | | // 根据建议产生快照 |
| | | stSuggestSnapshotRecordService.createSnapshotRecord(dto.getModelId(),dto.getScheduleObj(),dto.getScheduleTime(),suggestId); |
| | | return true; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<MdkPredictDataDTO> getPredictTnValue(PredictTnValueReqVO reqVO) { |
| | | List<DataValueVO> list = mmItemResultService.getPredictValue(reqVO.getOutId(), new Date(reqVO.getStartTime()), new Date(reqVO.getEndTime())); |
| | | return ConvertUtils.sourceToTarget(list, MdkPredictDataDTO.class); |
| | | } |
| | | |
| | | @Override |
| | | public List<StScheduleRecordVO> getLastScheduleData(String scheduleCode, Integer limit) { |
| | | if (StringUtils.isBlank(scheduleCode)) { |
| | | return null; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Boolean cancelUseSuggest(StAlarmAndSuggestReqVO reqVO) { |
| | | return stScheduleSuggestService.cancelUseSuggest(reqVO); |
| | | } |
| | | |
| | | @Override |
| | | public Boolean ignoreSuggest(StAlarmAndSuggestReqVO reqVO) { |
| | | return stScheduleSuggestService.ignoreSuggest(reqVO); |
| | | } |
| | |
| | | if (entity != null){ |
| | | operationRecordVo.setTitle(entity.getTitle()); |
| | | operationRecordVo.setContent(entity.getContent()); |
| | | operationRecordVo.setScheduleObj(entity.getScheduleObj()); |
| | | if (StringUtils.isNotBlank(entity.getModelId())){ |
| | | //获取模型记录信息 |
| | | StScheduleRecordRespVO scheduleRecordVO = stScheduleRecordService.getInfoByModelIdAndScheduleTime(entity.getModelId(), entity.getScheduleTime()); |
| | |
| | | stSuggestOperationRecordService.create(operationRecordVo); |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public List<StSuggestSnapshotRecordRespVO> getSuggestSnapshotAllChartData(String suggestId) { |
| | | return stSuggestSnapshotRecordService.getAllChartData(suggestId); |
| | | } |
| | | |
| | | @Override |
| | | public Boolean updateSuggestSnapshotConfDetByExt1(StSuggestSnapshotConfDetSaveReqVO updateReqVO) { |
| | | return stSuggestSnapshotConfDetService.updateByExt1(updateReqVO); |
| | | } |
| | | |
| | | private Date[] calResultTime(ItemVO predictItem, Date startTimeReq, Date endTimeReq, int lengthLeft, int lengthRight) { |
| | | Date[] result = new Date[3]; |
| | | Date predictTime = predictItem.getLastTime(); |