package com.zy.asrs.task; import com.core.common.Cools; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.task.handler.AutoFrontLocMoveHandler; import com.zy.asrs.task.support.AutoFrontLocMoveConfigResolver; import com.zy.asrs.task.support.AutoFrontLocMoveSettings; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Slf4j @Component public class AutoFrontLocMoveScheduler { @Autowired private AutoFrontLocMoveConfigResolver configResolver; @Autowired private AutoFrontLocMoveHandler handler; /** * 由于定时器固定 5 秒触发一次,实际业务执行频率由配置中的 intervalSeconds 控制。 */ private volatile long lastRunAt = 0L; @Scheduled(cron = "0/5 * * * * ? ") public synchronized void execute() { AutoFrontLocMoveSettings settings = configResolver.resolve(); if (settings == null || !settings.isEnabled() || Cools.isEmpty(settings.getRules())) { lastRunAt = 0L; return; } long now = System.currentTimeMillis(); long intervalMillis = Math.max(1, settings.getIntervalSeconds()) * 1000L; if (lastRunAt > 0 && now - lastRunAt < intervalMillis) { return; } lastRunAt = now; ReturnT result = handler.start(settings); if (!result.isSuccess()) { log.warn("前排补货移库执行失败:{}", result.getMsg()); } } }