diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java index b319cc042..276bd59ef 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java @@ -41,6 +41,8 @@ import org.nl.system.service.notice.ISysNoticeService; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.dao.Param; 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.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -51,6 +53,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -106,6 +109,8 @@ public class AutoCallAirShaftTask extends Prun { public List stepErrorInfo = new ArrayList<>(); private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + @Autowired + private RedissonClient redissonClient; /** * hint: 目前只是考虑了上区域 @@ -117,21 +122,38 @@ public class AutoCallAirShaftTask extends Prun { * update: 24/04/28 内包间只是区分气胀轴大小(即代数),不需要区分锂电/标箔 */ public void run() { - log.info("自动呼叫套轴开始执行..."); - // 判断配置参数是否只做拔轴 - Param isOnlyPulling = paramService.findByCode(IS_ONLY_PULLING); - Param tzDay = paramService.findByCode(TZ_DAY); - Param paramObj = paramService.findByCode(PARAM_CODE_PLAN_AREA); - Param useXn = paramService.findByCode(USE_XN); - // 1、获取空的插拔轴位(无任务) - List emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", - "0", "0"); - for (BstIvtShafttubeivt empty : emptyPoints) { - stepStr = ""; - stepErrorInfo = new ArrayList<>(); - doCallShaft(empty, isOnlyPulling, tzDay, paramObj, useXn); - redisUtils.set("INFO" + empty.getPoint_code(), stepStr); - redisUtils.set("ERROR" + empty.getPoint_code(), stepErrorInfo); + 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("自动呼叫套轴开始执行..."); + // 判断配置参数是否只做拔轴 + Param isOnlyPulling = paramService.findByCode(IS_ONLY_PULLING); + Param tzDay = paramService.findByCode(TZ_DAY); + Param paramObj = paramService.findByCode(PARAM_CODE_PLAN_AREA); + Param useXn = paramService.findByCode(USE_XN); + // 1、获取空的插拔轴位(无任务) + List emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", + "0", "0"); + for (BstIvtShafttubeivt empty : emptyPoints) { + stepStr = ""; + stepErrorInfo = new ArrayList<>(); + doCallShaft(empty, isOnlyPulling, tzDay, paramObj, useXn); + redisUtils.set("INFO" + empty.getPoint_code(), stepStr); + redisUtils.set("ERROR" + empty.getPoint_code(), stepErrorInfo); + } + } else { + log.info("退出"); + } + } finally { + if (lock.isLocked() && lock.isHeldByCurrentThread()) { + lock.unlock(); + } } }