package com.ruoyi.shadow.config; import com.ruoyi.wcs.application.dispatch.DispatchCoordinator; import com.ruoyi.wcs.domain.dispatch.DefaultVehicleAssignmentPolicy; import com.ruoyi.wcs.domain.dispatch.VehicleAssignmentPolicy; import com.ruoyi.wcs.domain.shared.IdGenerator; import com.ruoyi.wcs.domain.traffic.AStarRoutePlanner; import com.ruoyi.wcs.domain.traffic.DeadlockGuard; import com.ruoyi.wcs.domain.traffic.RoutePlanner; import com.ruoyi.wcs.domain.traffic.WaitForGraph; import com.ruoyi.wcs.port.out.DispatchPolicy; import com.ruoyi.wcs.port.out.TrafficStateRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.concurrent.atomic.AtomicLong; @Configuration(proxyBeanMethods = false) public class ShadowKernelConfiguration { @Bean public RoutePlanner shadowRoutePlanner() { return new AStarRoutePlanner(); } @Bean public VehicleAssignmentPolicy shadowVehicleAssignmentPolicy( RoutePlanner routePlanner) { return new DefaultVehicleAssignmentPolicy(routePlanner, DispatchPolicy.NONE); } @Bean public DeadlockGuard shadowDeadlockGuard(RoutePlanner routePlanner) { return new DeadlockGuard(new WaitForGraph(), routePlanner); } @Bean public IdGenerator shadowIdGenerator() { AtomicLong sequence = new AtomicLong(); return () -> "SHADOW-" + sequence.incrementAndGet(); } @Bean public TrafficStateRepository disabledShadowTrafficStateRepository() { return commit -> { throw new IllegalStateException( "SHADOW_TRAFFIC_STATE_REPOSITORY_NOT_CONFIGURED"); }; } @Bean public DispatchCoordinator shadowDispatchCoordinator( VehicleAssignmentPolicy assignmentPolicy, DeadlockGuard deadlockGuard, TrafficStateRepository trafficStateRepository, IdGenerator idGenerator) { return new DispatchCoordinator(assignmentPolicy, deadlockGuard, trafficStateRepository, idGenerator); } }