Junjie
3 天以前 63b01db83d9aad8a15276b4236a9a22e4aeef065
src/main/java/com/zy/core/move/StationMoveSessionRegistry.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.zy.common.utils.RedisUtil;
import com.zy.core.enums.RedisKeyType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -11,6 +12,7 @@
import java.util.List;
import java.util.Objects;
@Slf4j
@Component
public class StationMoveSessionRegistry {
@@ -63,6 +65,31 @@
                && Objects.equals(routeVersion, session.getRouteVersion());
    }
    public synchronized boolean canDispatchRoute(Integer taskNo, Integer routeVersion) {
        StationMoveSession session = load(taskNo);
        if (session == null) {
            log.warn("canDispatchRoute rejected: session=null, taskNo={}, routeVersion={}", taskNo, routeVersion);
            return false;
        }
        if (routeVersion == null) {
            log.warn("canDispatchRoute rejected: routeVersion=null, taskNo={}, session.routeVersion={}, session.status={}",
                    taskNo, session.getRouteVersion(), session.getStatus());
            return false;
        }
        if (!Objects.equals(routeVersion, session.getRouteVersion())) {
            log.warn("canDispatchRoute rejected: routeVersion mismatch, taskNo={}, cmdRouteVersion={}, sessionRouteVersion={}, session.status={}, session.cancelReason={}",
                    taskNo, routeVersion, session.getRouteVersion(), session.getStatus(), session.getCancelReason());
            return false;
        }
        boolean dispatchable = StationMoveSession.STATUS_WAITING.equals(session.getStatus())
                || StationMoveSession.STATUS_RUNNING.equals(session.getStatus());
        if (!dispatchable) {
            log.warn("canDispatchRoute rejected: status not dispatchable, taskNo={}, routeVersion={}, session.status={}, session.cancelReason={}",
                    taskNo, routeVersion, session.getStatus(), session.getCancelReason());
        }
        return dispatchable;
    }
    public synchronized boolean shouldSkipOutOrderDecision(Integer taskNo, Integer currentStationId) {
        StationMoveSession session = load(taskNo);
        if (session == null || !session.isActive() || currentStationId == null) {