opt: 加锁处理定时器异步问题

This commit is contained in:
2025-06-16 18:53:03 +08:00
parent 34cf36c90e
commit 8dc996bf2c

View File

@@ -41,6 +41,8 @@ import org.nl.system.service.notice.ISysNoticeService;
import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.ISysParamService;
import org.nl.system.service.param.dao.Param; import org.nl.system.service.param.dao.Param;
import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -51,6 +53,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -106,6 +109,8 @@ public class AutoCallAirShaftTask extends Prun {
public List<String> stepErrorInfo = new ArrayList<>(); public List<String> stepErrorInfo = new ArrayList<>();
private static final DateTimeFormatter TIME_FORMATTER = private static final DateTimeFormatter TIME_FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Autowired
private RedissonClient redissonClient;
/** /**
* hint: 目前只是考虑了上区域 * hint: 目前只是考虑了上区域
@@ -117,6 +122,15 @@ public class AutoCallAirShaftTask extends Prun {
* update: 24/04/28 内包间只是区分气胀轴大小(即代数),不需要区分锂电/标箔 * update: 24/04/28 内包间只是区分气胀轴大小(即代数),不需要区分锂电/标箔
*/ */
public void run() { public void run() {
RLock lock = redissonClient.getLock("TestTask");
boolean tryLock = false;
try {
tryLock = lock.tryLock(0, TimeUnit.SECONDS);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
try {
if (tryLock) {
log.info("自动呼叫套轴开始执行..."); log.info("自动呼叫套轴开始执行...");
// 判断配置参数是否只做拔轴 // 判断配置参数是否只做拔轴
Param isOnlyPulling = paramService.findByCode(IS_ONLY_PULLING); Param isOnlyPulling = paramService.findByCode(IS_ONLY_PULLING);
@@ -133,6 +147,14 @@ public class AutoCallAirShaftTask extends Prun {
redisUtils.set("INFO" + empty.getPoint_code(), stepStr); redisUtils.set("INFO" + empty.getPoint_code(), stepStr);
redisUtils.set("ERROR" + empty.getPoint_code(), stepErrorInfo); redisUtils.set("ERROR" + empty.getPoint_code(), stepErrorInfo);
} }
} else {
log.info("退出");
}
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)