#
vincentlu
昨天 f81c0ff58a4f5df9a62703c4361d1a5adc63570f
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
@@ -13,26 +13,11 @@
import java.util.List;
import java.util.Objects;
// man_segment: start_time, end_time, alter table man_segment
//    add roller_waiting int(1) default 0 null comment '滚筒线等待' after end_time;
/**
 * alter table man_sta
 *     add capacity int null comment '槽位数' after angle;
 *
 * alter table man_sta
 *     add occ_cnt int null comment '占用数' after capacity;
 *
 * alter table man_sta
 *     add rsv_in_cnt int null comment '预约放货量' after occ_cnt;
 *
 * alter table man_sta
 *     add rsv_out_cnt int null comment '预约取货量' after rsv_in_cnt;
 */
@Slf4j
@Service
public class TransferStationHandler {
    private static final long LOAD_DELAY_MS  = 15000L; // load ( inbound ) delay timeout
    private static final long LOAD_DELAY_MS  = 60000L; // load ( inbound ) delay timeout
    private static final long PLACE_DELAY_MS  = 15000L; // place ( outbound ) delay timeout
    @Autowired
@@ -45,6 +30,8 @@
    private CodeService codeService;
    @Autowired
    private StaService staService;
    @Autowired
    private TravelService travelService;
    /**
     * 取货(入库):在取完第一个货的时候,担心滚筒输送线会有下一个货物,所以建议AGV在原地等待一段时间
@@ -52,17 +39,12 @@
     * 要做 ready-for-next
     */
    public boolean hasDelayAtSta(Segment currSeg) {
        // todo
        Sta sta = staService.selectByStaNo("1");
        sta.setOccCnt(sta.getOccCnt() + 1);
        staService.updateById(sta);
        if (currSeg == null) {
            throw new NullPointerException("segment is null in hasDelayAtSta.");
        }
        Long agvId = currSeg.getAgvId();
        // 判断AGV是否在滚动输送线前
        Code currentCode = agvDetailService.getCurrentCode(currSeg.getAgvId());
        Code currentCode = agvDetailService.getCurrentCode(agvId);
        if (null == currentCode) {
            return false;
        }
@@ -83,23 +65,23 @@
        }
        long preEndTime = preSeg.getEndTime().getTime();
        long now = System.currentTimeMillis();
        Long agvId = currSeg.getAgvId();
        // inbound
        if (prePosType.equals(TaskPosDto.PosType.ORI_STA)) {
            // 背篓未满才等
            Integer backpack = agvService.getBackpack(agvId);
            List<Integer> usedBackpacks = segmentService.selectUsedBackpacks(currSeg.getTravelId(), agvId);
            if (usedBackpacks.size() >= backpack) {
            Integer backpackCap = agvService.getBackpack(agvId);
            List<Integer> usedBackpacks = segmentService.selectUsedBackpacks(currSeg.getTravelId(), agvId); // todo:vincent 拿不到数据
            if (usedBackpacks.size() >= backpackCap) {
                return false;
            }
            // sign waiting
            if (currSeg.getRollerWaiting() == 0) {
                currSeg.setRollerWaiting(1);
                segmentService.updateById(currSeg);
            }
            // mark roller waiting
            travelService.markRollerWaiting(currSeg.getTravelId(), currentCode.getId());
//            if (currSeg.getRollerWaiting() == 0) {
//                currSeg.setRollerWaiting(1);
//                segmentService.updateById(currSeg);
//            }
            // timeout
            return (now - preEndTime) < LOAD_DELAY_MS;
@@ -116,11 +98,12 @@
                return false;
            }
            // sign waiting
            if (currSeg.getRollerWaiting() == 0) {
                currSeg.setRollerWaiting(1);
                segmentService.updateById(currSeg);
            }
            // mark roller waiting
            travelService.markRollerWaiting(currSeg.getTravelId(), currentCode.getId());
//            if (currSeg.getRollerWaiting() == 0) {
//                currSeg.setRollerWaiting(1);
//                segmentService.updateById(currSeg);
//            }
            // timeout
            return (now - preEndTime) < PLACE_DELAY_MS;