package com.qianwen.mdc.collect.service.feedback; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.qianwen.core.tool.utils.SpringUtil; import com.qianwen.mdc.collect.dto.StateAggregateTimeDTO; import com.qianwen.mdc.collect.entity.iotdb.DeviceState; import com.qianwen.mdc.collect.entity.mgr.WorkstationWcsFeedback; import com.qianwen.mdc.collect.enums.FeedbackProcessStatusEnum; import com.qianwen.mdc.collect.enums.FeedbackTypeEnum; import com.qianwen.mdc.collect.mapper.iotdb.DeviceStateMapper; import com.qianwen.mdc.collect.mapper.mgr.WorkstationWcsFeedbackDetailMapper; //import com.qianwen.posting.entity.tdengine.WorkstationState; import com.qianwen.mdc.collect.mapper.mgr.WorkstationWcsFeedbackMapper; import com.qianwen.mdc.collect.service.DeviceStateAggregateService; import com.qianwen.mdc.collect.service.DeviceStateService; //import com.qianwen.posting.message.event.WorkstationAggregateMessage; //import com.qianwen.posting.message.producer.WorkstationAggregateProducer; @Component public class ImmediateFeedbackHandlerStrategy implements WorkstationFeedbackHandlerStrategy { private static final Logger log = LoggerFactory.getLogger(ImmediateFeedbackHandlerStrategy.class); private WorkstationWcsFeedbackMapper feedbackMapper; private WorkstationWcsFeedbackDetailMapper feedbackDetailMapper; //private WorkstationAggregateProducer producer;//发送消息用的(执行状态聚合,我们直接调用了) //, final WorkstationAggregateProducer producer public ImmediateFeedbackHandlerStrategy(final WorkstationWcsFeedbackMapper feedbackMapper, final WorkstationWcsFeedbackDetailMapper feedbackDetailMapper) { this.feedbackMapper = feedbackMapper; this.feedbackDetailMapper = feedbackDetailMapper; //this.producer = producer; } @Override public void handlerFeedback(WorkstationWcsFeedback feedback) { if (FeedbackTypeEnum.IMMEDIATE_FEEDBACK.isEqual(feedback.getFeedbackType())) { ImmediateFeedbackAnalyseResult result = ImmediateFeedbackAnalyseResultBuilder.get().buildBaseInfo(feedback).buildFeedbackDetail(feedback).analyse(); if (!result.getNeedProcess().booleanValue()) { return; } List handlerStateList = new ArrayList<>(); DeviceStateMapper stateMapper = SpringUtil.getBean(DeviceStateMapper.class); if (result.getResetState()) { /* List waitResetStateList = workstationStateMapper1.selectList(Wrappers.lambdaQuery() .ge(WorkstationState::getTs, feedback.getStartTime()) .ne(WorkstationState::getIsDeleted, Boolean.TRUE) .le(WorkstationState::getTs, Long.valueOf(System.currentTimeMillis()))); */ StateAggregateTimeDTO timeRange = new StateAggregateTimeDTO(); timeRange.setStartTime(feedback.getStartTime().getTime()); timeRange.setEndTime(System.currentTimeMillis()); List waitResetStateList = stateMapper.statesInTimeRange(feedback.getWorkstationId(), timeRange);//yys 改,此查询增加了workstationId waitResetStateList = waitResetStateList.stream().map(x -> { x.setIsSync(Boolean.FALSE); return x; }).collect(Collectors.toList()); handlerStateList.addAll(waitResetStateList); } handlerStateList.addAll(result.getEffectiveStateList()); //保存 //WorkstationStateMapper workstationStateMapper = SpringUtil.getBean(WorkstationStateMapper.class); //workstationStateMapper.batchSave(feedback.getWorkstationId(), handlerStateList); DeviceStateService stateServie = SpringUtil.getBean(DeviceStateService.class); stateServie.saveDeviceStates(handlerStateList);//yangys 改,使用自己的方法 this.feedbackDetailMapper.insert(result.getFeedbackDetail()); this.feedbackMapper.update(null, Wrappers.lambdaUpdate() .eq(WorkstationWcsFeedback::getId, feedback.getId()) .set(WorkstationWcsFeedback::getStatus, FeedbackProcessStatusEnum.PROCESSING.getValue())); //TODO 下面是发送消息 ,消费者执行聚合状态的操作 /* WorkstationAggregateMessage message = new WorkstationAggregateMessage(); message.setWorkStationId(feedback.getWorkstationId().toString()); this.producer.sendWorkStationAggregateMessage(Arrays.asList(message)); */ //我们改为直接调用吧 DeviceStateAggregateService deviceStateAggregateService = SpringUtil.getBean(DeviceStateAggregateService.class); deviceStateAggregateService.stateAggregate(feedback.getWorkstationId()); } } }