package com.iailab.module.model.mcs.sche.service.impl; import com.baomidou.dynamic.datasource.annotation.DSTransactional; 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.StSuggestSnapshotRecordEntity; 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.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.time.LocalDateTime; import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; import static com.iailab.module.model.common.utils.DateUtils.DATE_TIME_PATTERN; /** * @author Jay */ @Service public class StSuggestSnapshotRecordServiceImpl extends BaseServiceImpl implements StSuggestSnapshotRecordService { @Autowired private DataPointApi dataPointApi; @Autowired private IndItemApi indItemApi; @Autowired private PlanItemApi planItemApi; @Autowired private MmItemResultService mmItemResultService; @Autowired private StSuggestSnapshotConfMainService stSuggestSnapshotConfMainService; @Autowired private StSuggestSnapshotConfDetService stSuggestSnapshotConfDetService; @Override @DSTransactional(rollbackFor = Exception.class) public void create(StSuggestSnapshotRecordSaveReqVO createReqVO) { StSuggestSnapshotRecordEntity entity = BeanUtils.toBean(createReqVO, StSuggestSnapshotRecordEntity.class); entity.setId(UUID.randomUUID().toString()); baseDao.insert(entity); } @Override @DSTransactional(rollbackFor = Exception.class) public void update(StSuggestSnapshotRecordSaveReqVO updateReqVO) { StSuggestSnapshotRecordEntity entity = BeanUtils.toBean(updateReqVO, StSuggestSnapshotRecordEntity.class); baseDao.updateById(entity); } @Override @DSTransactional(rollbackFor = Exception.class) public void delete(String id) { baseDao.deleteById(id); } @Override public List getListBySuggestId(String suggestId) { QueryWrapper 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 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()); //计算开始时间,开始时间为当前调度时间减去快照配置表配置的左侧时间长度 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.getLeftLength()); Date endTime = Date.from(localEndDateTime.atZone(ZoneId.systemDefault()).toInstant()); snapshotRecordSaveReqVO.setEndTime(endTime); this.create(snapshotRecordSaveReqVO); }); } @Override public List getChartData(List reqList) { reqList.forEach(item -> { List 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 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 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 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); }); return reqList; } @Override public List getAllChartData(String suggestId) { List records = this.getListBySuggestId(suggestId); if (CollectionUtils.isEmpty(records)) { return new ArrayList<>(); } return this.getChartData(records); } private List getPreDataList(StSuggestSnapshotRecordRespVO resVo, String type){ List dataList = new ArrayList<>(); PreDataBarLineReqVO reqVO = new PreDataBarLineReqVO(); List 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; } }