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<String> result = handler.start(settings);
|
if (!result.isSuccess()) {
|
log.warn("前排补货移库执行失败:{}", result.getMsg());
|
}
|
}
|
}
|