From 14f2c4fce50c871d84f89d2dca2298e0892b4672 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期二, 05 五月 2026 08:25:26 +0800
Subject: [PATCH] Merge branch 'rcs_master_1.0' into rcs_master_all

---
 zy-acs-cv/src/main/java/com/zy/core/ConveyorBackgroundService.java |   91 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 91 insertions(+), 0 deletions(-)

diff --git a/zy-acs-cv/src/main/java/com/zy/core/ConveyorBackgroundService.java b/zy-acs-cv/src/main/java/com/zy/core/ConveyorBackgroundService.java
new file mode 100644
index 0000000..736f7c6
--- /dev/null
+++ b/zy-acs-cv/src/main/java/com/zy/core/ConveyorBackgroundService.java
@@ -0,0 +1,91 @@
+package com.zy.core;
+
+import com.zy.core.properties.CtuOperationConfig;
+import com.zy.core.properties.CtuServiceProperties;
+import com.zy.core.properties.SystemProperties;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+@Slf4j
+@Component
+public class ConveyorBackgroundService {
+
+    @Autowired
+    private ApplicationContext applicationContext;
+
+    @Autowired
+    private ConveyorOperationExecutor operationExecutor;
+
+    @Autowired
+    private CtuServiceProperties properties;
+
+    private ScheduledExecutorService executorService;
+
+    private final AtomicBoolean running = new AtomicBoolean(false);
+
+    @PostConstruct
+    public void init() {
+        // 鍒濆鍖栫嚎绋嬫睜
+        executorService = Executors.newSingleThreadScheduledExecutor(r -> {
+            Thread thread = new Thread(r);
+            thread.setName("cv-background-thread");
+            thread.setDaemon(true);
+            return thread;
+        });
+
+        // 鍚姩瀹氭椂浠诲姟
+        executorService.scheduleAtFixedRate(this::processConveyorTasks,
+                properties.getInitialDelay(),
+                properties.getInterval(),
+                TimeUnit.MILLISECONDS);
+        running.set(true);
+        log.info("杈撻�佺嚎鍚庡彴鏈嶅姟绾跨▼鍒濆鍖栧畬鎴�");
+    }
+
+    private void processConveyorTasks() {
+        // 绯荤粺杩愯鐘舵�佸垽鏂�
+        if (!SystemProperties.WCS_RUNNING_STATUS.get() || !running.get()) {
+            log.debug("绯荤粺鏈繍琛屾垨鏈嶅姟宸插仠姝紝璺宠繃杈撻�佺嚎浠诲姟澶勭悊");
+            return;
+        }
+
+        try {
+            // 鎵ц閰嶇疆鐨勬搷浣滃簭鍒�
+            for (CtuOperationConfig config : properties.getOperations()) {
+                //log.info("鎵ц杈撻�佺嚎鎿嶄綔: {}", config.getType());
+                operationExecutor.execute(config);
+            }
+
+            //log.info("杈撻�佺嚎浠诲姟澶勭悊瀹屾垚");
+        } catch (Exception e) {
+            log.error("杈撻�佺嚎浠诲姟澶勭悊寮傚父", e);
+        }
+    }
+
+    @PreDestroy
+    public void shutDown() {
+        running.set(false);
+        if (executorService != null && !executorService.isShutdown()) {
+            log.info("姝e湪鍏抽棴杈撻�佺嚎鍚庡彴鏈嶅姟绾跨▼...");
+            executorService.shutdown();
+            try {
+                if (!executorService.awaitTermination(5, TimeUnit.SECONDS)) {
+                    executorService.shutdownNow();
+                }
+            } catch (InterruptedException e) {
+                executorService.shutdownNow();
+                Thread.currentThread().interrupt();
+            }
+            log.info("杈撻�佺嚎鍚庡彴鏈嶅姟绾跨▼宸插叧闂�");
+        }
+    }
+}

--
Gitblit v1.9.1