package com.qianwen.mdc.collect.service.feedback; import java.util.ArrayList; import java.util.List; import org.apache.ibatis.annotations.Param; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.qianwen.core.tool.utils.Func; import com.qianwen.core.tool.utils.SpringUtil; import com.qianwen.mdc.collect.entity.mgr.WorkstationWcsFeedback; import com.qianwen.mdc.collect.entity.mgr.WorkstationWcsFeedbackDetail; import com.qianwen.mdc.collect.enums.FeedbackDetailStatusEnum; import com.qianwen.mdc.collect.enums.FeedbackProcessStatusEnum; import com.qianwen.mdc.collect.enums.FeedbackTimePointEnum; import com.qianwen.mdc.collect.dto.StateAggregateTimeDTO; import com.qianwen.mdc.collect.entity.iotdb.AggregateStateWithFeedback; import com.qianwen.mdc.collect.entity.iotdb.DeviceState; import com.qianwen.mdc.collect.mapper.iotdb.DeviceStateMapper; import com.qianwen.mdc.collect.mapper.mgr.WorkstationWcsFeedbackDetailMapper; import com.qianwen.mdc.collect.mapper.mgr.WorkstationWcsFeedbackMapper; import com.qianwen.mdc.collect.service.AggregateStateWithFeedbackService; import com.qianwen.mdc.collect.service.DeviceStateService; import com.qianwen.mdc.collect.mapper.iotdb.AggregateStateWithFeedbackMapper; import com.qianwen.mdc.collect.mapper.iotdb.DeviceStateMapper; import com.qianwen.mdc.collect.utils.WorkstationStateAggregateCancelFeedbackUtils; @Component public class CancelFeedbackHandlerStrategy implements WorkstationFeedbackHandlerStrategy { private static final Logger log = LoggerFactory.getLogger(CancelFeedbackHandlerStrategy.class); @Autowired private WorkstationWcsFeedbackMapper feedbackMapper; @Autowired private AggregateStateWithFeedbackMapper stateWithFeedbackMapper; @Autowired private WorkstationWcsFeedbackDetailMapper feedbackDetailMapper; @Autowired private DeviceStateMapper stateMapper; @Autowired private DeviceStateService stateService; @Autowired private AggregateStateWithFeedbackService aggregateStateWithFeedbackService; /* public CancelFeedbackHandlerStrategy(final WorkstationWcsFeedbackMapper feedbackMapper, final WorkstationWcsFeedbackDetailMapper feedbackDetailMapper) { this.feedbackMapper = feedbackMapper; this.feedbackDetailMapper = feedbackDetailMapper; }*/ @Override public void handlerFeedback(WorkstationWcsFeedback feedback) { //WorkstationStateMapper stateMapper = (WorkstationStateMapper)SpringUtil.getBean(WorkstationStateMapper.class); //WorkstationAggregateStateWithFeedbackMapper stateWithFeedbackMapper = (WorkstationAggregateStateWithFeedbackMapper)SpringUtil.getBean(WorkstationAggregateStateWithFeedbackMapper.class); if (Func.isNotEmpty(feedback)) { WorkstationWcsFeedbackDetail cancelDetail = this.feedbackDetailMapper.selectOne(Wrappers.lambdaQuery() .eq(WorkstationWcsFeedbackDetail::getWorkstationId, feedback.getWorkstationId()) .eq(WorkstationWcsFeedbackDetail::getFeedbackId, feedback.getId()) .eq(WorkstationWcsFeedbackDetail::getCancel, 1)); DeviceState startState = wrapperCancelWorkstationStateTimePoint(feedback.getWorkstationId(), cancelDetail.getStartTime().getTime(), true); DeviceState endState = wrapperCancelWorkstationStateTimePoint(feedback.getWorkstationId(), cancelDetail.getEndTime().getTime(), false); /* DeviceState startNoFeedState = stateMapper.getLastWorkstationState(Wrappers.lambdaQuery() .eq(WorkstationState::getWorkstationId, feedback.getWorkstationId()) .lt(WorkstationState::getTs,cancelDetail.getStartTime().getTime()) .eq(WorkstationState::getIsFixPoint, Boolean.FALSE) .eq(WorkstationState::getFeedbackPointType, FeedbackTimePointEnum.NO_FEED_BACK_POINT.getValue()) .ne(WorkstationState::getIsDeleted, Boolean.TRUE)); */ DeviceState startNoFeedState = stateMapper.lastNoFeedbackStateLessThanTime(feedback.getWorkstationId(),cancelDetail.getStartTime().getTime());//这个方法刚刚改过,还没测试 /* List effectStateList = stateMapper.selectList(Wrappers.lambdaQuery() .eq(WorkstationState::getWorkstationId, feedback.getWorkstationId()) .le(WorkstationState::getTs, cancelDetail.getEndTime().getTime()) .ge(WorkstationState::getTs, cancelDetail.getStartTime().getTime()) .and(wrapper -> wrapper.eq(WorkstationState::getIsDeleted, Boolean.FALSE).or().isNull(WorkstationState::getIsDeleted)) .orderByAsc(WorkstationState::getTs)); */ StateAggregateTimeDTO timeRange = new StateAggregateTimeDTO(); timeRange.setStartTime(cancelDetail.getStartTime().getTime()); timeRange.setEndTime(cancelDetail.getEndTime().getTime()); List effectStateList = stateMapper.statesInTimeRange(feedback.getWorkstationId(), timeRange); List aggregateResult = WorkstationStateAggregateCancelFeedbackUtils.buildAggregateList(effectStateList, startNoFeedState); if (FeedbackTimePointEnum.END_POINT.isEqual(endState.getFeedbackPointType())) { /* WorkstationState endNoFeedState = stateMapper.getLastWorkstationState(Wrappers.lambdaQuery() .eq(WorkstationState::getWorkstationId, feedback.getWorkstationId()) .lt(WorkstationState::getTs, Long.valueOf(cancelDetail.getEndTime().getTime())) .eq(WorkstationState::getIsFixPoint, Boolean.FALSE) .eq(WorkstationState::getFeedbackPointType, FeedbackTimePointEnum.NO_FEED_BACK_POINT.getValue()) .ne(WorkstationState::getIsDeleted, Boolean.TRUE)); */ DeviceState endNoFeedState = stateMapper.lastNoFeedbackStateLessThanTime(feedback.getWorkstationId(), cancelDetail.getEndTime().getTime()); /* WorkstationAggregateStateWithFeedback match = stateWithFeedbackMapper.selectOne(Wrappers.lambdaQuery() .eq(WorkstationAggregateStateWithFeedback::getWorkstationId, feedback.getWorkstationId()) .eq(WorkstationAggregateStateWithFeedback::getTs, endState.getTs()) .eq(WorkstationAggregateStateWithFeedback::getEndTime, Long.valueOf(endState.getTs().longValue() + 1L))); */ AggregateStateWithFeedback match = stateWithFeedbackMapper.workstationStateByTimeAndEndTime(feedback.getWorkstationId(),endState.getTime(),endState.getTime() + 1L);; if (Func.isNotEmpty(match)) { if (Func.isNotEmpty(endNoFeedState)) { match.setValueCollect(endNoFeedState.getValueCollect()); match.setWcs(endNoFeedState.getWcs()); match.setRps(endNoFeedState.getRps()); match.setIsPlan(endNoFeedState.getIsPlan()); } else { match.setValueCollect(Integer.valueOf(0)); match.setWcs(Integer.valueOf(0)); match.setRps(Integer.valueOf(0)); match.setIsPlan(Integer.valueOf(0)); } aggregateResult.add(match); } } List insertWorkstationState = new ArrayList<>(); insertWorkstationState.add(startState); insertWorkstationState.add(endState); //stateMapper.batchSave(feedback.getWorkstationId(), insertWorkstationState); stateService.saveDeviceStates(insertWorkstationState); //stateWithFeedbackMapper.batchSave(feedback.getWorkstationId(), aggregateResult); aggregateStateWithFeedbackService.saveStatesWithFeedback(aggregateResult); //更新反馈状态 feedback.setStatus(FeedbackProcessStatusEnum.COMPLETED.getValue().intValue()); cancelDetail.setStatus(FeedbackDetailStatusEnum.LOSE_EFFECT.getValue()); this.feedbackDetailMapper.updateById(cancelDetail); this.feedbackMapper.updateById(feedback); /* */ } } private DeviceState wrapperCancelWorkstationStateTimePoint(Long workstationId, Long time, boolean isStartPoint) { //WorkstationStateMapper stateMapper = (WorkstationStateMapper) SpringUtil.getBean(WorkstationStateMapper.class); /* WorkstationState startState = stateMapper.selectOne(Wrappers.lambdaQuery().eq(WorkstationState::getWorkstationId , workstationId).ne(WorkstationState::getIsDeleted, Boolean.TRUE).eq(WorkstationState::getTs, time)); */ DeviceState startState = stateMapper.getByWorkstationIdAndTime(workstationId,time); if (isStartPoint) { if (FeedbackTimePointEnum.CROSS_POINT.isEqual(startState.getFeedbackPointType())) { startState.setFeedbackPointType(FeedbackTimePointEnum.END_POINT.getValue()); } else if (FeedbackTimePointEnum.START_POINT.isEqual(startState.getFeedbackPointType())) { startState.setIsDeleted(true); } } else if (FeedbackTimePointEnum.CROSS_POINT.isEqual(startState.getFeedbackPointType())) { startState.setFeedbackPointType(FeedbackTimePointEnum.START_POINT.getValue()); } else if (FeedbackTimePointEnum.END_POINT.isEqual(startState.getFeedbackPointType())) { startState.setIsDeleted(true); } return startState; } }