From e7a52d9e21eddb8ff94fb2b0ac95e4d7da541ed2 Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期三, 11 六月 2025 17:22:40 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotRecordServiceImpl.java | 220 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 210 insertions(+), 10 deletions(-) diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotRecordServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotRecordServiceImpl.java index 115e612..c316e4d 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotRecordServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StSuggestSnapshotRecordServiceImpl.java @@ -1,24 +1,45 @@ package com.iailab.module.model.mcs.sche.service.impl; import com.baomidou.dynamic.datasource.annotation.DSTransactional; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.iailab.framework.common.pojo.PageResult; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.framework.common.service.impl.BaseServiceImpl; import com.iailab.framework.common.util.object.BeanUtils; +import com.iailab.framework.common.util.object.ConvertUtils; +import com.iailab.module.data.api.ind.IndItemApi; +import com.iailab.module.data.api.ind.dto.ApiIndItemQueryDTO; +import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO; +import com.iailab.module.data.api.plan.PlanItemApi; +import com.iailab.module.data.api.point.DataPointApi; +import com.iailab.module.data.api.point.dto.ApiPointValueDTO; +import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO; +import com.iailab.module.data.common.ApiDataQueryDTO; +import com.iailab.module.data.common.ApiDataValueDTO; +import com.iailab.module.model.api.mcs.dto.PreDataBarLineReqVO; +import com.iailab.module.model.api.mcs.dto.PreDataBarLineRespVO; +import com.iailab.module.model.api.mcs.dto.StSuggestSnapshotRecordRespVO; +import com.iailab.module.model.common.enums.DataCategoryEnum; +import com.iailab.module.model.common.utils.DateUtils; +import com.iailab.module.model.mcs.pre.service.MmItemResultService; import com.iailab.module.model.mcs.sche.dao.StSuggestSnapshotRecordDao; -import com.iailab.module.model.mcs.sche.entity.StScheduleModelEntity; +import com.iailab.module.model.mcs.sche.entity.StScheduleSuggestEntity; import com.iailab.module.model.mcs.sche.entity.StSuggestSnapshotRecordEntity; +import com.iailab.module.model.mcs.sche.service.StScheduleSuggestService; +import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotConfDetService; +import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotConfMainService; import com.iailab.module.model.mcs.sche.service.StSuggestSnapshotRecordService; -import com.iailab.module.model.mcs.sche.vo.StScheduleModelRespVO; -import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordChartReqVO; -import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordRespVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfDetRespVO; +import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotConfMainRespVO; import com.iailab.module.model.mcs.sche.vo.StSuggestSnapshotRecordSaveReqVO; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; -import java.util.UUID; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; -import static com.iailab.framework.common.pojo.CommonResult.success; +import static com.iailab.module.model.common.utils.DateUtils.DATE_TIME_PATTERN; /** @@ -27,10 +48,26 @@ @Service public class StSuggestSnapshotRecordServiceImpl extends BaseServiceImpl<StSuggestSnapshotRecordDao, StSuggestSnapshotRecordEntity> implements StSuggestSnapshotRecordService { - + @Autowired + private DataPointApi dataPointApi; @Autowired - private StSuggestSnapshotRecordService StSuggestSnapshotRecordService; + private IndItemApi indItemApi; + + @Autowired + private PlanItemApi planItemApi; + + @Autowired + private MmItemResultService mmItemResultService; + + @Autowired + private StSuggestSnapshotConfMainService stSuggestSnapshotConfMainService; + + @Autowired + private StSuggestSnapshotConfDetService stSuggestSnapshotConfDetService; + + @Autowired + private StScheduleSuggestService stScheduleSuggestService; @Override @DSTransactional(rollbackFor = Exception.class) @@ -52,4 +89,167 @@ public void delete(String id) { baseDao.deleteById(id); } + + @Override + public List<StSuggestSnapshotRecordRespVO> getListBySuggestId(String suggestId) { + QueryWrapper<StSuggestSnapshotRecordEntity> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("suggest_id", suggestId); + queryWrapper.orderByAsc("sort"); + return ConvertUtils.sourceToTarget(baseDao.selectList(queryWrapper), StSuggestSnapshotRecordRespVO.class); + } + + @Override + public void createSnapshotRecord(String modelId, String scheduleObj,Date scheduleTime, String suggestId) { + if (StringUtils.isBlank(modelId) || StringUtils.isBlank(scheduleObj) || StringUtils.isBlank(suggestId)) { + log.error("生成快照失败,参数错误!modelId:" + modelId + ",scheduleObj:" + scheduleObj + ",suggestId:" + suggestId); + return; + } + //获取调度建议快照配置表信息 + StSuggestSnapshotConfMainRespVO confMain = stSuggestSnapshotConfMainService.getByModelIdAndScheduleObj(modelId, scheduleObj); + if (confMain == null) { + log.error("生成快照失败,confMain is null!modelId:" + modelId + ",scheduleObj:" + scheduleObj); + return; + } + List<StSuggestSnapshotConfDetRespVO> confDetList = stSuggestSnapshotConfDetService.getByConfId(confMain.getId()); + if (CollectionUtils.isEmpty(confDetList)) { + log.error("生成快照失败,confDetList is empty!modelId:" + modelId + ",scheduleObj:" + scheduleObj); + return; + } + confDetList.forEach(confDet -> { + StSuggestSnapshotRecordSaveReqVO snapshotRecordSaveReqVO = new StSuggestSnapshotRecordSaveReqVO(); + snapshotRecordSaveReqVO.setSuggestId(suggestId); + snapshotRecordSaveReqVO.setModelId(modelId); + snapshotRecordSaveReqVO.setDataNo(confDet.getDataNo()); + snapshotRecordSaveReqVO.setDataType(confDet.getDataType()); + snapshotRecordSaveReqVO.setDataName(confDet.getDataName()); + snapshotRecordSaveReqVO.setScheduleTime(scheduleTime); + snapshotRecordSaveReqVO.setSort(confDet.getSort()); + snapshotRecordSaveReqVO.setLimitH(confDet.getLimitH()); + snapshotRecordSaveReqVO.setLimitL(confDet.getLimitL()); + snapshotRecordSaveReqVO.setSort(confDet.getSort()); + //计算开始时间,开始时间为当前调度时间减去快照配置表配置的左侧时间长度 + LocalDateTime localStartDateTime = scheduleTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().minusMinutes(confDet.getLeftLength() == null ? 60 : confDet.getLeftLength()); + Date startTime = Date.from(localStartDateTime.atZone(ZoneId.systemDefault()).toInstant()); + snapshotRecordSaveReqVO.setStartTime(startTime); + //计算结束时间,结束时间为当前调度时间加上快照配置表配置的右侧时间长度 + LocalDateTime localEndDateTime = scheduleTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().plusMinutes(confDet.getRightLength() == null ? 60 : confDet.getRightLength()); + Date endTime = Date.from(localEndDateTime.atZone(ZoneId.systemDefault()).toInstant()); + snapshotRecordSaveReqVO.setEndTime(endTime); + this.create(snapshotRecordSaveReqVO); + }); + } + + @Override + public List<StSuggestSnapshotRecordRespVO> getChartData(List<StSuggestSnapshotRecordRespVO> reqList) { + Map<String,StScheduleSuggestEntity> suggestInfos = new HashMap<>(reqList.size()); + reqList.forEach(item -> { + List<Object[]> dataList = new ArrayList<>(); + if(DataCategoryEnum.DATAPOINT.getCode().equals(item.getDataType())){ + ApiPointValueQueryDTO queryDTO = new ApiPointValueQueryDTO(); + queryDTO.setPointNo(item.getDataNo()); + queryDTO.setStart(item.getStartTime()); + queryDTO.setEnd(item.getEndTime()); + List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(queryDTO); + if (valueList != null && !valueList.isEmpty()){ + for (ApiPointValueDTO apiPointValueDTO : valueList) { + Object[] data = new Object[2]; + data[0] = DateUtils.format(apiPointValueDTO.getT(), DATE_TIME_PATTERN); + data[1] = apiPointValueDTO.getV(); + dataList.add(data); + } + } + } else if (DataCategoryEnum.IND.getCode().equals(item.getDataType())) { + ApiIndItemQueryDTO queryDTO = new ApiIndItemQueryDTO(); + queryDTO.setItemNo(item.getDataNo()); + queryDTO.setStart(item.getStartTime()); + queryDTO.setEnd(item.getEndTime()); + List<ApiIndItemValueDTO> valueList = indItemApi.queryIndItemHistoryValue(queryDTO); + if (valueList != null && !valueList.isEmpty()){ + for (ApiIndItemValueDTO apiIndItemValueDTO : valueList) { + Object[] data = new Object[2]; + data[0] = apiIndItemValueDTO.getDataTime(); + data[1] = apiIndItemValueDTO.getDataValue(); + dataList.add(data); + } + } + } else if (DataCategoryEnum.PLAN.getCode().equals(item.getDataType())) { + ApiDataQueryDTO queryDTO = new ApiDataQueryDTO(); + queryDTO.setItemNo(item.getDataNo()); + queryDTO.setStart(item.getStartTime()); + queryDTO.setEnd(item.getEndTime()); + List<ApiDataValueDTO> valueList = planItemApi.queryPlanItemHistoryValue(queryDTO); + if (valueList != null && !valueList.isEmpty()){ + for (ApiDataValueDTO apiDataValueDTO : valueList) { + Object[] data = new Object[2]; + data[0] = DateUtils.format(apiDataValueDTO.getDataTime(), DATE_TIME_PATTERN); + data[1] = apiDataValueDTO.getDataValue(); + dataList.add(data); + } + } + } else if (DataCategoryEnum.PREDICT_ITEM_N.getCode().equals(item.getDataType())) { + dataList = getPreDataList(item, "N"); + }else if (DataCategoryEnum.PREDICT_ITEM_L.getCode().equals(item.getDataType())) { + dataList = getPreDataList(item, "L"); + }else if (DataCategoryEnum.PREDICT_ITEM_C.getCode().equals(item.getDataType())) { + dataList = getPreDataList(item, "C"); + } + item.setDataList(dataList); + +// 越界时间 +// if (!CollectionUtils.isEmpty(dataList)) { +// List<String> overLimitTimes = new ArrayList<>(); +// dataList.forEach(data -> { +// BigDecimal value = new BigDecimal(data[1].toString()); +// if ((item.getLimitH() != null &&value.compareTo(item.getLimitH()) >= 0) || (item.getLimitL() != null && value.compareTo(item.getLimitL()) <= 0)) { +// overLimitTimes.add(data[0].toString()); +// } +// }); +// item.setOverLimitTimes(overLimitTimes); +// } + + // 建议处理时间 + String suggestId = item.getSuggestId(); + StScheduleSuggestEntity suggestInfo; + if (suggestInfos.containsKey(suggestId)) { + suggestInfo = suggestInfos.get(suggestId); + }else { + suggestInfo = stScheduleSuggestService.getInfo(suggestId); + suggestInfos.put(suggestId,suggestInfo); + } + item.setStatus(suggestInfo.getStatus()); + item.setHandleTime(suggestInfo.getHandleTime()); + }); + return reqList; + } + + @Override + public List<StSuggestSnapshotRecordRespVO> getAllChartData(String suggestId) { + List<StSuggestSnapshotRecordRespVO> records = this.getListBySuggestId(suggestId); + if (CollectionUtils.isEmpty(records)) { + return new ArrayList<>(); + } + return this.getChartData(records); + } + + private List<Object[]> getPreDataList(StSuggestSnapshotRecordRespVO resVo, String type){ + List<Object[]> dataList = new ArrayList<>(); + PreDataBarLineReqVO reqVO = new PreDataBarLineReqVO(); + List<String> outIds = new ArrayList<>(); + outIds.add(resVo.getDataNo()); + reqVO.setOutIds(outIds); + reqVO.setStartTime(resVo.getStartTime()); + reqVO.setEndTime(resVo.getEndTime()); + PreDataBarLineRespVO result = mmItemResultService.getPreDataCharts(reqVO); + if (result == null || result.getDataViewList() == null || result.getDataViewList().isEmpty()){ + return dataList; + } + if ("N".equals(type) && result.getDataViewList().get(0).getPreDataN()!=null){ + dataList = result.getDataViewList().get(0).getPreDataN(); + }else if ("L".equals(type) && result.getDataViewList().get(0).getPreDataL()!=null){ + dataList = result.getDataViewList().get(0).getPreDataL(); + }else if ("C".equals(type) && result.getDataViewList().get(0).getCurData()!=null){ + dataList = result.getDataViewList().get(0).getCurData(); + } + return dataList; + } } \ No newline at end of file -- Gitblit v1.9.3