From caf936a10efe1f7372a0a83e1a906f701be36691 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 06 五月 2026 19:34:08 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/ServerBootstrap.java |   49 +++++++++++++++++++++++++++++++++----------------
 1 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index 62c22f5..82d1ebd 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -1,18 +1,15 @@
 package com.zy.core;
 
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.DeviceConfig;
 import com.zy.asrs.service.DeviceConfigService;
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.RedisKeyType;
 import com.zy.core.enums.SlaveType;
-import com.zy.core.thread.impl.ZySiemensCrnThread;
-import com.zy.core.thread.impl.ZySiemensDualCrnThread;
-import com.zy.core.thread.impl.ZyStationThread;
-import com.zy.core.thread.impl.ZyStationV3Thread;
-import com.zy.core.thread.impl.ZyRgvThread;
+import com.zy.core.thread.impl.*;
 
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +25,8 @@
 @Component
 public class ServerBootstrap {
 
+    private static boolean initThread = false;
+
     @Autowired
     private MainProcess mainProcess;
     @Autowired
@@ -37,49 +36,63 @@
 
     @Async
     public void init() throws InterruptedException {
+        if (initThread) {
+            return;
+        }
         News.info("鏍稿績鎺у埗灞傚紑濮嬪垵濮嬪寲...............................................");
+        clearStartupRuntimeLocks();
         // 鍒濆鍖栨秷鎭槦鍒�
         initMq();
         // 鍒濆鍖栦笅浣嶆満绾跨▼
         initThread();
         // 寮�濮嬩富娴佺▼杩涚▼
         mainProcess.start();
+        initThread = true;
         News.info("鏍稿績鎺у埗灞傚凡鍚姩...............................................");
+    }
+
+    private void clearStartupRuntimeLocks() {
+        redisUtil.del(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
+        java.util.Set<String> stationSendLockKeys = redisUtil.scanKeys(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key + ":", 2048);
+        if (stationSendLockKeys != null && !stationSendLockKeys.isEmpty()) {
+            redisUtil.del(stationSendLockKeys.toArray(new String[0]));
+        }
+//        News.info("绯荤粺鍚姩鏃跺凡娓呯悊杈撻�佺珯鍛戒护鎵ц閿侊紝key={}", RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
     }
 
     private void initMq(){
         // 鍒濆鍖栧爢鍨涙満mq
-        List<DeviceConfig> crnList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> crnList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Crn)));
         for (DeviceConfig crn : crnList) {
             MessageQueue.init(SlaveType.Crn, crn.getDeviceNo());
         }
         // 鍒濆鍖栧弻宸ヤ綅鍫嗗灈鏈簃q
-        List<DeviceConfig> dualCrnList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> dualCrnList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.DualCrn)));
         for (DeviceConfig crn : dualCrnList) {
             MessageQueue.init(SlaveType.DualCrn, crn.getDeviceNo());
         }
         // 鍒濆鍖朢gv灏忚溅mq
-        List<DeviceConfig> rgvList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> rgvList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Rgv)));
         for (DeviceConfig rgv : rgvList) {
             MessageQueue.init(SlaveType.Rgv, rgv.getDeviceNo());
         }
         // 鍒濆鍖栬緭閫佺嚎mq
-        List<DeviceConfig> devpList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> devpList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Devp)));
         for (DeviceConfig devp : devpList) {
             MessageQueue.init(SlaveType.Devp, devp.getDeviceNo());
         }
         // 鍒濆鍖栨潯鐮佹壂鎻忎华mq
-        List<DeviceConfig> barcodeList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> barcodeList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Barcode)));
         for (DeviceConfig barcode : barcodeList) {
             MessageQueue.init(SlaveType.Barcode, barcode.getDeviceNo());
         }
         // 鍒濆鍖朙ed鐏痬q
-        List<DeviceConfig> ledList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> ledList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Led)));
         for (DeviceConfig led : ledList) {
             MessageQueue.init(SlaveType.Led, led.getDeviceNo());
@@ -87,7 +100,7 @@
     }
 
     private void initThread(){
-        List<DeviceConfig> crnList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> crnList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Crn)));
         if(!crnList.isEmpty()) {
             News.info("鍒濆鍖栧爢鍨涙満........................................................");
@@ -95,6 +108,8 @@
                 ThreadHandler thread = null;
                 if (deviceConfig.getThreadImpl().equals("ZySiemensCrnThread")) {
                     thread = new ZySiemensCrnThread(deviceConfig, redisUtil);
+                } else if (deviceConfig.getThreadImpl().equals("ZySiemensCrnV2Thread")) {
+                    thread = new ZySiemensCrnV2Thread(deviceConfig, redisUtil);
                 } else {
                     throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�");
                 }
@@ -107,7 +122,7 @@
             }
         }
 
-        List<DeviceConfig> dualCrnList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> dualCrnList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.DualCrn)));
         if(!dualCrnList.isEmpty()) {
             News.info("鍒濆鍖栧弻宸ヤ綅鍫嗗灈鏈�........................................................");
@@ -127,7 +142,7 @@
             }
         }
 
-        List<DeviceConfig> devpList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> devpList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Devp)));
         if(!devpList.isEmpty()) {
             News.info("鍒濆鍖栬緭閫佺珯........................................................");
@@ -137,6 +152,8 @@
                     thread = new ZyStationThread(deviceConfig, redisUtil);
                 } else if (deviceConfig.getThreadImpl().equals("ZyStationV3Thread")) {
                     thread = new ZyStationV3Thread(deviceConfig, redisUtil);
+                } else if (deviceConfig.getThreadImpl().equals("ZyStationV5Thread")) {
+                    thread = new ZyStationV5Thread(deviceConfig, redisUtil);
                 } else {
                     throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�");
                 }
@@ -149,7 +166,7 @@
             }
         }
 
-        List<DeviceConfig> rgvList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+        List<DeviceConfig> rgvList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Rgv)));
         if(!rgvList.isEmpty()) {
             News.info("鍒濆鍖朢GV........................................................");

--
Gitblit v1.9.1