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<DeviceState> handlerStateList = new ArrayList<>();
|
|
DeviceStateMapper stateMapper = SpringUtil.getBean(DeviceStateMapper.class);
|
if (result.getResetState()) {
|
|
/*
|
List<WorkstationState> waitResetStateList = workstationStateMapper1.selectList(Wrappers.<WorkstationState>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<DeviceState> 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.<WorkstationWcsFeedback>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());
|
}
|
}
|
}
|