From 7635dc25bd2a4d565df496b2d96354639966768d Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期四, 25 九月 2025 11:09:44 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java | 100 +++++++++++++++++++++++++++++++++++---------------
1 files changed, 70 insertions(+), 30 deletions(-)
diff --git a/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java b/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java
index 9020af6..df063f7 100644
--- a/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java
+++ b/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java
@@ -4,43 +4,83 @@
import com.zy.asrs.entity.DeviceConfig;
import com.zy.asrs.service.DeviceConfigService;
import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
import com.zy.core.action.ShuttleAction;
import com.zy.core.enums.RedisKeyType;
import com.zy.core.enums.SlaveType;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.zy.core.utils.TimeoutExecutor;
import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
+import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.TimeUnit;
-@Slf4j
-@Component
-public class ShuttleExecuteScheduler {
+public class ShuttleExecuteScheduler implements Runnable {
-// @Autowired
-// private ShuttleAction shuttleAction;
-// @Autowired
-// private DeviceConfigService deviceConfigService;
-// @Autowired
-// private RedisUtil redisUtil;
-//
-// @Scheduled(cron = "0/1 * * * * ? ")
-// public void execute() {
-// List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
-// .eq("device_type", String.valueOf(SlaveType.Shuttle)));
-// for (DeviceConfig deviceConfig : shuttleList) {
-// Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo());
-// if (object == null) {
-// continue;
-// }
-//
-// int taskNo = Integer.parseInt(String.valueOf(object));
-// if (taskNo != 0) {
-// //瀛樺湪浠诲姟闇�瑕佹墽琛�
-// boolean result = shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo);
-// }
-// }
-// }
+ private ShuttleAction shuttleAction;
+ private DeviceConfigService deviceConfigService;
+ private RedisUtil redisUtil;
+ private int threadControlCount;
+ public ShuttleExecuteScheduler(ShuttleAction shuttleAction, DeviceConfigService deviceConfigService, RedisUtil redisUtil, int threadControlCount) {
+ this.shuttleAction = shuttleAction;
+ this.deviceConfigService = deviceConfigService;
+ this.redisUtil = redisUtil;
+ this.threadControlCount = threadControlCount;
+ }
+
+ @Override
+ public void run() {
+ List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Shuttle)));
+
+ List<List<DeviceConfig>> lists = new ArrayList<>();
+ List<DeviceConfig> tmp = new ArrayList<>();
+
+ for (int i = 0; i < shuttleList.size(); i++) {
+ DeviceConfig deviceConfig = shuttleList.get(i);
+ if (i != 0 && i % threadControlCount == 0) {
+ lists.add(tmp);
+ tmp = new ArrayList<>();
+ }
+ tmp.add(deviceConfig);
+ }
+ lists.add(tmp);
+
+ for (List<DeviceConfig> list : lists) {
+ if (list.isEmpty()) {
+ continue;
+ }
+
+ new Thread(() -> {
+ while (true) {
+ try {
+ for (DeviceConfig deviceConfig : list) {
+ Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo());
+ if (object == null) {
+ continue;
+ }
+
+ int taskNo = Integer.parseInt(String.valueOf(object));
+ if (taskNo != 0) {
+ //瀛樺湪浠诲姟闇�瑕佹墽琛�
+ long startTime = System.currentTimeMillis();
+ News.info("[RCS Debug] Execute {},{}", deviceConfig.getDeviceNo(), taskNo);
+ // 鍦ㄥ惊鐜腑浣跨敤
+ boolean result = TimeoutExecutor.executeWithTimeout(
+ () -> shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo),
+ 30, // 30绉掕秴鏃�
+ TimeUnit.SECONDS
+ );
+ Thread.sleep(100);
+ News.info("[RCS Debug] Execute end {},{},{}", deviceConfig.getDeviceNo(), taskNo, System.currentTimeMillis() - startTime);
+ }
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ }).start();
+ }
+ }
}
--
Gitblit v1.9.1