package com.zy.acs.manager.manager.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zy.acs.manager.manager.entity.Segment; import com.zy.acs.manager.manager.enums.SegmentStateType; import com.zy.acs.manager.manager.mapper.SegmentMapper; import com.zy.acs.manager.manager.service.AgvService; import com.zy.acs.manager.manager.service.SegmentService; import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.manager.service.TravelService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.List; @Slf4j @Service("segmentService") public class SegmentServiceImpl extends ServiceImpl implements SegmentService { @Autowired private AgvService agvService; @Autowired private TravelService travelService; @Override public void processNext(List segmentList) { segmentList.stream().max(Comparator.comparingInt(Segment::getSerial)).ifPresent(segment -> { Segment nextSegment = this.getNextStepOfInit(segment.getTravelId(), segment.getSerial()); if (null != nextSegment) { nextSegment.setState(SegmentStateType.WAITING.toString()); nextSegment.setUpdateTime(new Date()); if (!this.updateById(nextSegment)) { log.error("Segment [{}] failed to update !!!", nextSegment.getGroupId() + " - " + nextSegment.getSerial()); } } else { travelService.checkFinish(segment.getTravelId()); } }); } @Override public Segment getNextStepOfInit(Long travelId, Integer serial) { return this.getOne(new LambdaQueryWrapper() .eq(Segment::getTravelId, travelId) .eq(Segment::getSerial, serial + 1) .eq(Segment::getState, SegmentStateType.INIT.toString()) ); } @Override public List getJustWaitingSeg(Long agvId) { if (null == agvId) { return null; } List waitingSegList = this.getByAgvAndState(agvId, SegmentStateType.WAITING.toString()); if (Cools.isEmpty(waitingSegList)) { return null; } else { if (waitingSegList.size() > 1) { log.error("{}号车辆存在多个等待中的Segment!!!", agvService.getById(agvId).getUuid()); } return waitingSegList; } } @Override public List getSamePos(List segmentList) { return null; } @Override public List getByAgvAndState(Long agvId, String state) { return this.list(new LambdaQueryWrapper() .eq(Segment::getAgvId, agvId) .eq(Segment::getState, state) .orderByAsc(Segment::getSerial) ); } @Override public List getGroupNo(SegmentStateType state, Long agvId, String groupNo) { return this.baseMapper.getGroupNo(state.toString(), agvId, groupNo); } @Override public List getRunningByEndCode(Long codeId) { if (null == codeId) { return new ArrayList<>(); } return this.list(new LambdaQueryWrapper() .eq(Segment::getEndNode, codeId) .in(Segment::getState, SegmentStateType.WAITING.toString(), SegmentStateType.RUNNING.toString()) ); } }