#
vincentlu
20 小时以前 1a518d788ee36886af92b2adfcbe9e79e83ef08e
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java
@@ -1,7 +1,10 @@
package com.zy.acs.manager.manager.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.exception.CoolException;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.entity.Travel;
import com.zy.acs.manager.manager.enums.SegmentStateType;
@@ -9,13 +12,13 @@
import com.zy.acs.manager.manager.mapper.TravelMapper;
import com.zy.acs.manager.manager.service.SegmentService;
import com.zy.acs.manager.manager.service.TravelService;
import com.zy.acs.framework.exception.CoolException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service("travelService")
@@ -70,4 +73,80 @@
        );
    }
    @Override
    public Travel findRollerWaitingTravel(Long agvId, Long code) {
        return this.getOne(new LambdaQueryWrapper<Travel>()
                .eq(Travel::getAgvId, agvId)
                .eq(Travel::getState, TravelStateType.RUNNING.toString())
                .eq(Travel::getRollerWaiting, 1)
                .eq(Travel::getRollerWaitingCode, code)
                .orderByDesc(Travel::getCreateTime)
                .last("limit 1")
        );
    }
    @Override
    public Boolean hasRollerWaiting(Long agvId) {
        if (null == agvId) {
            return false;
        }
        return 0 < this.count(new LambdaQueryWrapper<Travel>()
                .eq(Travel::getAgvId, agvId)
                .eq(Travel::getState, TravelStateType.RUNNING.toString())
                .eq(Travel::getRollerWaiting, 1)
        );
    }
    @Override
    public Boolean markRollerWaiting(Long travelId, Long codeId) {
        if (Cools.isEmpty(travelId, codeId)) {
            return false;
        }
        Travel travel = this.getById(travelId);
        if (travel == null) {
            return false;
        }
        if (!TravelStateType.RUNNING.toString().equals(travel.getState())) {
            return false;
        }
        if (travel.getRollerWaiting() == 1
                && Objects.equals(travel.getRollerWaitingCode(), codeId)) {
            return true;
        }
        travel.setRollerWaiting(1);
        travel.setRollerWaitingCode(codeId);
        if (!this.updateById(travel)) {
            log.error("travel [{}] failed to mark roller waiting (code={})", travelId, codeId);
            return false;
        }
        return true;
    }
    @Override
    public Boolean clearRollerWaiting(Long travelId) {
        if (null == travelId) {
            return false;
        }
        Travel travel = this.getById(travelId);
        if (travel == null) {
            return false;
        }
//        if (!TravelStateType.RUNNING.toString().equals(travel.getState())) {
//            return false;
//        }
        if (travel.getRollerWaiting() == 0 && Cools.isEmpty(travel.getRollerWaitingCode())) {
            return true;
        }
        if (!this.update(
                new LambdaUpdateWrapper<Travel>()
                        .eq(Travel::getId, travelId)
                        .set(Travel::getRollerWaiting, 0)
                        .set(Travel::getRollerWaitingCode, null)
        )) {
            log.error("travel [{}] failed to clear roller waiting", travelId);
            return false;
        }
        return true;
    }
}