| | |
| | | ); |
| | | for (Segment segment : segments) { |
| | | // long startTime = System.currentTimeMillis(); |
| | | if (!transferStationHandler.isSegDelayAtSta(segment)) { |
| | | if (!transferStationHandler.hasDelayAtSta(segment)) { |
| | | trafficService.trigger(segment); |
| | | } |
| | | // log.info("traffic calculation spend {} ms", System.currentTimeMillis() - startTime); |
| | |
| | | for (Segment item : segmentList) { |
| | | item.setGroupId(groupId); |
| | | item.setState(SegmentStateType.RUNNING.toString()); |
| | | item.setStartTime(now); |
| | | item.setUpdateTime(now); |
| | | if (null != algoStartTime) { |
| | | item.setAlgoTime((int) (now.getTime() - algoStartTime.getTime())); |
| | |
| | | // segment |
| | | for (Segment segment : segmentList) { |
| | | segment.setState(SegmentStateType.FINISH.toString()); |
| | | segment.setEndTime(now); |
| | | segment.setUpdateTime(now); |
| | | if (!segmentService.updateById(segment)) { |
| | | log.error("Segment [{}] 更新失败 !!!", segment.getGroupId() + " - " + segment.getSerial()); |
| | |
| | | |
| | | Travel travel = travelService.getById(segment.getTravelId()); |
| | | Agv agv = agvService.getById(travel.getAgvId()); |
| | | AgvDetail agvDetail = agvDetailService.selectByAgvId(travel.getAgvId()); |
| | | long endNode = segment.getEndNode(); |
| | | |
| | | // valid ---------------------------------------------------- |
| | |
| | | } |
| | | |
| | | // checkout path |
| | | Code startCode = codeService.getCacheById(agvDetail.getRecentCode()); |
| | | Code startCode = agvDetailService.getCurrentCode(travel.getAgvId()); |
| | | Code endCode = codeService.getCacheById(endNode); |
| | | long startTime = System.currentTimeMillis(); |
| | | // long startTime = System.currentTimeMillis(); |
| | | List<String> pathList = this.checkoutPath(agv, startCode, endCode, segment); |
| | | // System.out.println("checkoutPath: " + (System.currentTimeMillis() - startTime)); |
| | | if (Cools.isEmpty(pathList)) { |
| | |
| | | |
| | | mapService.lockPath(null, pathList, agv.getUuid()); |
| | | |
| | | startTime = System.currentTimeMillis(); |
| | | // startTime = System.currentTimeMillis(); |
| | | mainService.generateAction(segment.getAgvId(), segmentList, pathList, now); |
| | | // System.out.println("generateAction: " + (System.currentTimeMillis() - startTime)); |
| | | |
| | |
| | | package com.zy.acs.manager.core.service; |
| | | |
| | | import com.zy.acs.manager.manager.entity.AgvDetail; |
| | | import com.zy.acs.manager.manager.entity.Code; |
| | | import com.zy.acs.manager.manager.entity.Segment; |
| | | import com.zy.acs.manager.manager.service.SegmentService; |
| | | import com.zy.acs.manager.manager.entity.Sta; |
| | | import com.zy.acs.manager.manager.enums.StaTypeType; |
| | | import com.zy.acs.manager.manager.service.*; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Date; |
| | | |
| | | // man_segment: start_time, end_time |
| | | @Slf4j |
| | | @Service |
| | | public class TransferStationHandler { |
| | | |
| | | @Autowired |
| | | private SegmentService segmentService; |
| | | @Autowired |
| | | private AgvService agvService; |
| | | @Autowired |
| | | private AgvDetailService agvDetailService; |
| | | @Autowired |
| | | private CodeService codeService; |
| | | @Autowired |
| | | private StaService staService; |
| | | |
| | | public boolean isSegDelayAtSta(Segment segment) { |
| | | |
| | | |
| | | /** |
| | | * |
| | | */ |
| | | // return is need wait |
| | | public boolean hasDelayAtSta(Segment segment) { |
| | | if (segment == null) { |
| | | throw new NullPointerException("segment is null in hasDelayAtSta."); |
| | | } |
| | | // 判断AGV是否在滚动输送线前 |
| | | Code currentCode = agvDetailService.getCurrentCode(segment.getAgvId()); |
| | | if (null == currentCode) { |
| | | return false; |
| | | } |
| | | Sta rollerSta = staService.selectByCode(currentCode.getId(), StaTypeType.ROLLER); |
| | | if (null == rollerSta) { |
| | | return false; |
| | | } |
| | | // 如果为第一个segment(没有previous segment),则不需要等待 |
| | | Segment preSeg = segmentService.getPreviousStepOfFinish(segment.getTravelId(), segment.getSerial()); |
| | | if (preSeg == null) { |
| | | return false; |
| | | } |
| | | Date preSegEndTime = preSeg.getEndTime(); |
| | | if (null == preSegEndTime) { |
| | | return false; |
| | | } |
| | | Date now = new Date(); |
| | | |
| | | return false; |
| | | } |
| | |
| | | private Integer algoTime; |
| | | |
| | | /** |
| | | * 开始时间 |
| | | */ |
| | | @ApiModelProperty(value= "开始时间") |
| | | private Date startTime; |
| | | |
| | | /** |
| | | * 结束时间 |
| | | */ |
| | | @ApiModelProperty(value= "结束时间") |
| | | private Date endTime; |
| | | |
| | | /** |
| | | * 进度 |
| | | */ |
| | | @ApiModelProperty(value= "进度") |
| | |
| | | |
| | | Segment getNextStepOfInit(Long travelId, Integer serial); |
| | | |
| | | Segment getPreviousStepOfFinish(Long travelId, Integer serial, String memo); |
| | | Segment getPreviousStepOfFinish(Long travelId, Integer serial); |
| | | |
| | | List<Segment> getJustWaitingSeg(Long agvId); |
| | | |
| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.zy.acs.manager.manager.entity.Sta; |
| | | import com.zy.acs.manager.manager.enums.StaTypeType; |
| | | |
| | | public interface StaService extends IService<Sta> { |
| | | |
| | | Sta selectByStaNo(String staNo); |
| | | |
| | | Sta selectByCode(Long codeId, StaTypeType type); |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Segment getPreviousStepOfFinish(Long travelId, Integer serial, String memo) { |
| | | public Segment getPreviousStepOfFinish(Long travelId, Integer serial) { |
| | | return this.getOne(new LambdaQueryWrapper<Segment>() |
| | | .eq(Segment::getTravelId, travelId) |
| | | .eq(Segment::getSerial, serial - 1) |
| | | // .eq(Segment::getState, SegmentStateType.FINISH.toString()) |
| | | .eq(Segment::getMemo, memo) |
| | | .eq(Segment::getState, SegmentStateType.FINISH.toString()) |
| | | .orderByDesc(Segment::getId) |
| | | ); |
| | | } |
| | | |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.zy.acs.framework.common.Cools; |
| | | import com.zy.acs.manager.manager.entity.Sta; |
| | | import com.zy.acs.manager.manager.enums.StaTypeType; |
| | | import com.zy.acs.manager.manager.enums.StatusType; |
| | | import com.zy.acs.manager.manager.mapper.StaMapper; |
| | | import com.zy.acs.manager.manager.service.StaService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Service("staService") |
| | | public class StaServiceImpl extends ServiceImpl<StaMapper, Sta> implements StaService { |
| | | |
| | | @Override |
| | | public Sta selectByStaNo(String staNo) { |
| | | return this.getOne(new LambdaQueryWrapper<Sta>().eq(Sta::getStaNo, staNo)); |
| | | return this.getOne(new LambdaQueryWrapper<Sta>() |
| | | .eq(Sta::getStaNo, staNo).eq(Sta::getStatus, StatusType.ENABLE.val)); |
| | | } |
| | | |
| | | @Override |
| | | public Sta selectByCode(Long codeId, StaTypeType type) { |
| | | if (Cools.isEmpty(codeId, type)) { |
| | | return null; |
| | | } |
| | | List<Sta> list = this.list(new LambdaQueryWrapper<Sta>() |
| | | .eq(Sta::getCode, codeId).eq(Sta::getStaType, type.val()).eq(Sta::getStatus, StatusType.ENABLE.val)); |
| | | return list.stream().findFirst().orElse(null); |
| | | } |
| | | |
| | | } |