From 7d116115ade208f26ada36806642d2a3a6085c91 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期一, 09 三月 2026 13:07:49 +0800
Subject: [PATCH] 1

---
 open-rcs/components/content/content-interface-word.html                             |   10 
 .gitignore                                                                          |    2 
 zy-acs-cv/src/main/java/com/zy/core/model/protocol/StaProtocol.java                 |    2 
 zy-acs-cv/src/main/java/com/zy/asrs/mapper/JobMapper.java                           |    3 
 zy-acs-common/src/main/java/com/zy/acs/common/domain/mq/DeviceMessage.java          |    3 
 zy-acs-cv/src/main/java/com/zy/asrs/controller/WmsController.java                   |   28 
 zy-acs-cv/src/main/java/com/zy/asrs/service/impl/WrkLastnoServiceImpl.java          |   16 
 zy-acs-cv/src/main/resources/mapper/JobMapper.xml                                   |   10 
 zy-acs-cv/src/main/webapp/views/pipeline.html                                       |   97 +++---
 /dev/null                                                                           |  103 ------
 zy-acs-hex/src/main/resources/application.yml                                       |    9 
 zy-acs-cv/src/main/java/com/zy/asrs/mapper/DevpMapper.java                          |    3 
 zy-acs-cv/src/main/java/com/zy/core/operation/handler/FakeUserOperationHandler.java |   10 
 open-rcs/pages/接口文档.html                                                            |  483 +++++++++++++++++++-------------
 zy-acs-cv/src/main/resources/mapper/DevpMapper.xml                                  |    5 
 zy-acs-cv/src/main/java/com/zy/asrs/service/impl/DevpServiceImpl.java               |    3 
 zy-acs-cv/src/main/java/com/zy/asrs/scheduler/JobLogScheduler.java                  |   27 +
 zy-acs-cv/src/main/java/com/zy/asrs/entity/Devp.java                                |    4 
 zy-acs-cv/src/main/resources/application.yml                                        |   26 
 zy-acs-cv/src/main/java/com/zy/asrs/controller/SiteController.java                  |    1 
 zy-acs-cv/src/main/java/com/zy/core/operation/handler/AppleLocOperationHandler.java |   41 ++
 21 files changed, 468 insertions(+), 418 deletions(-)

diff --git a/.gitignore b/.gitignore
index a16dfa7..d32d4cb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,7 +25,7 @@
 /nbdist/
 /.nb-gradle/
 
-*/target/
+**/target/
 
 ~*.xlsx
 
diff --git a/component/component-Influxdb/target/classes/META-INF/additional-spring-configuration-metadata.json b/component/component-Influxdb/target/classes/META-INF/additional-spring-configuration-metadata.json
deleted file mode 100644
index 878690e..0000000
--- a/component/component-Influxdb/target/classes/META-INF/additional-spring-configuration-metadata.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "properties": [
-    {
-      "name": "influxdb3.enabled",
-      "type": "java.lang.Boolean",
-      "description": "Enables influxdb functionality.",
-      "defaultValue": "true"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/component/component-Influxdb/target/classes/META-INF/spring.factories b/component/component-Influxdb/target/classes/META-INF/spring.factories
deleted file mode 100644
index d09d697..0000000
--- a/component/component-Influxdb/target/classes/META-INF/spring.factories
+++ /dev/null
@@ -1 +0,0 @@
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.zy.component.influxdb.service.InfluxDBService
diff --git a/component/component-Influxdb/target/classes/com/zy/component/influxdb/config/InfluxDBAutoConfiguration.class b/component/component-Influxdb/target/classes/com/zy/component/influxdb/config/InfluxDBAutoConfiguration.class
deleted file mode 100644
index 165263d..0000000
--- a/component/component-Influxdb/target/classes/com/zy/component/influxdb/config/InfluxDBAutoConfiguration.class
+++ /dev/null
Binary files differ
diff --git a/component/component-Influxdb/target/classes/com/zy/component/influxdb/properties/InfluxDBProperties.class b/component/component-Influxdb/target/classes/com/zy/component/influxdb/properties/InfluxDBProperties.class
deleted file mode 100644
index 0350a05..0000000
--- a/component/component-Influxdb/target/classes/com/zy/component/influxdb/properties/InfluxDBProperties.class
+++ /dev/null
Binary files differ
diff --git a/component/component-Influxdb/target/classes/com/zy/component/influxdb/service/InfluxDBService.class b/component/component-Influxdb/target/classes/com/zy/component/influxdb/service/InfluxDBService.class
deleted file mode 100644
index 50b00b6..0000000
--- a/component/component-Influxdb/target/classes/com/zy/component/influxdb/service/InfluxDBService.class
+++ /dev/null
Binary files differ
diff --git a/open-rcs/components/content/content-interface-word.html b/open-rcs/components/content/content-interface-word.html
index 32db755..e85c46c 100644
--- a/open-rcs/components/content/content-interface-word.html
+++ b/open-rcs/components/content/content-interface-word.html
@@ -1029,11 +1029,14 @@
 </div>
 
 <script>
+    // API閰嶇疆鏁版嵁
+    let apiConfigs = [];
+
     // 鍔ㄦ�佸姞杞紸PI閰嶇疆骞舵覆鏌撴帴鍙e唴瀹�
     function loadApiConfigs() {
         try {
             // 鐩存帴瀹氫箟API閰嶇疆鏁版嵁锛岄伩鍏岰ORS閿欒
-            const apiConfigs = [
+            apiConfigs = [
                 {
                     "apiId": "api-task-create",
                     "name": "鐢熸垚浠诲姟鍗�",
@@ -1969,6 +1972,11 @@
             if (section) {
                 section.scrollIntoView({ behavior: 'smooth' });
             }
+        } else if (event.data.type === 'getApiConfigs') {
+            event.source.postMessage({
+                type: 'apiConfigs',
+                data: apiConfigs
+            }, '*');
         }
     });
 </script>
diff --git "a/open-rcs/pages/\346\216\245\345\217\243\346\226\207\346\241\243.html" "b/open-rcs/pages/\346\216\245\345\217\243\346\226\207\346\241\243.html"
index 948b40f..c80af7a 100644
--- "a/open-rcs/pages/\346\216\245\345\217\243\346\226\207\346\241\243.html"
+++ "b/open-rcs/pages/\346\216\245\345\217\243\346\226\207\346\241\243.html"
@@ -348,212 +348,303 @@
     // 瀵煎嚭涓篧ord (docx鏍煎紡)
     function exportToWord() {
         const contentFrame = document.getElementById('content-frame');
-        if (contentFrame && contentFrame.contentWindow) {
-            try {
-                console.log('寮�濮嬪鍑篧ord');
+        if (!contentFrame || !contentFrame.contentWindow) {
+            alert('鏃犳硶鑾峰彇鍐呭妗嗘灦');
+            return;
+        }
 
-                const contentDoc = contentFrame.contentDocument;
-                const content = contentDoc.body.innerHTML;
-                console.log('鑾峰彇鍒板唴瀹癸紝闀垮害:', content.length);
-
-                // 鎻愬彇鎺ュ彛鏍稿績鍐呭锛岃繃婊ゆ帀鎵�鏈夋爣棰樺拰鍏冧俊鎭�
-                let coreContent = content;
-                
-                // 绉婚櫎鏍囬鍜屽厓淇℃伅
-                coreContent = coreContent.replace(/RCS鎺ュ彛鏂囨。[\s\S]*?鏇存柊鏃堕棿锛歔\s\S]*?\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/g, '');
-                coreContent = coreContent.replace(/<h1[^>]*>.*?<\/h1>/g, '');
-                coreContent = coreContent.replace(/<h2[^>]*>.*?<\/h2>/g, '');
-                coreContent = coreContent.replace(/<h3[^>]*>.*?<\/h3>/g, '');
-                coreContent = coreContent.replace(/<h4[^>]*>.*?<\/h4>/g, '');
-                coreContent = coreContent.replace(/<h5[^>]*>.*?<\/h5>/g, '');
-                coreContent = coreContent.replace(/<h6[^>]*>.*?<\/h6>/g, '');
-                coreContent = coreContent.replace(/鏇存柊鏃堕棿锛�.*?<\/p>/g, '');
-                
-                // 鍒涘缓HTML鏍煎紡鐨刉ord鏂囨。
-                const htmlContent = `
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="UTF-8">
-    <title>鎺ュ彛鏂囨。</title>
-    <style>
-        body {
-            font-family: 'Microsoft YaHei', Arial, sans-serif;
-            margin: 40px;
-            line-height: 1.6;
-        }
-        p {
-            margin-bottom: 15px;
-            text-align: justify;
-        }
-        pre {
-            background-color: #f8f9fa;
-            padding: 15px;
-            border-radius: 4px;
-            border: 1px solid #e9ecef;
-            margin: 20px 0;
-            font-family: 'Consolas', 'Monaco', monospace;
-            white-space: pre-wrap;
-        }
-        table {
-            border-collapse: collapse;
-            width: 100%;
-            margin: 20px 0;
-            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
-        }
-        th {
-            background-color: #3498db;
-            color: white;
-            font-weight: bold;
-            padding: 12px 15px;
-            text-align: left;
-        }
-        td {
-            border: 1px solid #ddd;
-            padding: 10px 15px;
-            text-align: left;
-        }
-        tr:nth-child(even) {
-            background-color: #f8f9fa;
-        }
-        ul, ol {
-            margin: 15px 0;
-            padding-left: 30px;
-        }
-        li {
-            margin-bottom: 8px;
-        }
-    </style>
-</head>
-<body>
-    ${coreContent}
-</body>
-</html>
-                `;
-                
-                // 鍒涘缓Blob瀵硅薄
-                const blob = new Blob([htmlContent], { type: 'application/msword' });
-                const url = URL.createObjectURL(blob);
-                
-                // 鍒涘缓涓嬭浇閾炬帴
-                const link = document.createElement('a');
-                link.href = url;
-                link.download = '鎺ュ彛鏂囨。.doc';
-                link.click();
-                
-                // 閲婃斁URL瀵硅薄
-                setTimeout(() => URL.revokeObjectURL(url), 100);
-                console.log('涓嬭浇瀹屾垚');
-            } catch (e) {
-                console.error('瀵煎嚭Word澶辫触:', e);
-                alert('瀵煎嚭Word澶辫触锛岃閲嶈瘯锛�' + e.message);
+        const handleMessage = function(event) {
+            if (event.data.type === 'apiConfigs') {
+                const apiConfigs = event.data.data;
+                window.removeEventListener('message', handleMessage);
+                generateWordDocument(apiConfigs);
             }
-        } else {
-            console.error('鏃犳硶鑾峰彇鍐呭妗嗘灦');
-            alert('瀵煎嚭Word澶辫触锛氭棤娉曡幏鍙栧唴瀹规鏋�');
+        };
+
+        window.addEventListener('message', handleMessage, { once: true });
+        contentFrame.contentWindow.postMessage({ type: 'getApiConfigs' }, '*');
+
+        setTimeout(() => {
+            try {
+                window.removeEventListener('message', handleMessage);
+            } catch (e) {
+                console.log('鐩戝惉鍣ㄥ凡绉婚櫎');
+            }
+        }, 5000);
+    }
+
+    function generateWordDocument(apiConfigs) {
+        try {
+            console.log('寮�濮嬬敓鎴怶ord鏂囨。, API鏁伴噺:', apiConfigs.length);
+
+            let apiDetailsHtml = '';
+            apiConfigs.forEach(function(config) {
+                const methodClass = config.method.toLowerCase() === 'post' ? 'method-post' : 'method-get';
+                
+                let requestParamsHtml = '';
+                if (config.request && config.request.parameters) {
+                    config.request.parameters.forEach(function(param) {
+                        const required = param.required ? '蹇呭~' : '閫夊~';
+                        const defaultVal = param.default !== undefined ? ' (榛樿鍊�: ' + param.default + ')' : '';
+                        requestParamsHtml += '<tr><td>' + param.name + '</td><td>' + param.type + '</td><td>' + required + '</td><td>' + param.description + defaultVal + '</td></tr>';
+                    });
+                }
+
+                let requestExample = '';
+                if (config.request && config.request.example) {
+                    requestExample = JSON.stringify(config.request.example, null, 2);
+                }
+
+                let responseParamsHtml = '';
+                if (config.response && config.response.parameters) {
+                    config.response.parameters.forEach(function(param) {
+                        responseParamsHtml += '<tr><td>' + param.name + '</td><td>' + param.type + '</td><td>' + param.description + '</td></tr>';
+                    });
+                }
+
+                let responseExample = '';
+                if (config.response && config.response.example) {
+                    responseExample = JSON.stringify(config.response.example, null, 2);
+                }
+
+                apiDetailsHtml += 
+                    '<div class="api-info">' +
+                    '<h3>' + config.name + '</h3>' +
+                    '<div class="api-method ' + methodClass + '">' + config.method + '</div>' +
+                    '<div class="api-url">' + config.url + '</div>' +
+                    '<h4>璇锋眰鍙傛暟</h4>' +
+                    '<table><thead><tr><th>鍙傛暟鍚�</th><th>绫诲瀷</th><th>鏄惁蹇呭~</th><th>鎻忚堪</th></tr></thead><tbody>' + requestParamsHtml + '</tbody></table>' +
+                    '<h4>璇锋眰绀轰緥</h4>' +
+                    '<pre>' + requestExample + '</pre>' +
+                    '<h4>杩斿洖鍙傛暟</h4>' +
+                    '<table><thead><tr><th>鍙傛暟鍚�</th><th>绫诲瀷</th><th>鎻忚堪</th></tr></thead><tbody>' + responseParamsHtml + '</tbody></table>' +
+                    '<h4>杩斿洖绀轰緥</h4>' +
+                    '<pre>' + responseExample + '</pre>' +
+                    '</div>';
+            });
+
+            const apiContent = '<h1>RCS鎺ュ彛鏂囨。</h1>' +
+                '<div class="intro">' +
+                '<p>娆㈣繋浣跨敤涓壃RCS寮�鏀惧钩鍙癆PI銆傛湰鏂囨。鎻愪緵浜嗗畬鏁寸殑鎺ュ彛璇存槑锛屽寘鍚姹傚弬鏁般�佽繑鍥炵粨鏋滀互鍙婄ず渚嬩唬鐮併�傛瘡涓帴鍙i兘鎻愪緵浜哅ock鍔熻兘锛屾柟渚挎偍蹇�熸祴璇曞拰闆嗘垚銆�</p>' +
+                '</div>' +
+                '<div class="note">' +
+                '<div class="note-title">蹇�熷鎺ユ寚鍗�</div>' +
+                '<p><strong>鎺ュ彛涓爣 * 鐨勪负甯哥敤鎺ュ彛</strong>锛屽垵姝ュ鎺ユ椂锛屽彧闇�瑕佽皟閫氫互涓嬫帴鍙o細</p>' +
+                '<ul><li>1. 鐢熸垚浠诲姟鍗�</li><li>2. 鍙栨秷浠诲姟鍗�</li></ul>' +
+                '<p><strong>濡傛灉涓婂眰绯荤粺闇�瑕佹帴鏀朵换鍔$殑鎵ц鐘舵��</strong>锛岄渶瑕佹彁渚涗互涓嬫帴鍙o紝渚涜皟搴︾郴缁熷洖璋冿細</p>' +
+                '<ul><li>浠诲姟鎵ц閫氱煡鎺ュ彛</li></ul>' +
+                '<p><strong>瓒呮椂璁剧疆锛�</strong>涓壃璋冨害绯荤粺璋冪敤涓婂眰绯荤粺鐨勬帴鍙o紝鑾峰彇杩炴帴瓒呮椂鏃堕棿榛樿涓� <strong>30绉�</strong>锛屾暟鎹繑鍥炶秴鏃舵椂闂撮粯璁や负 <strong>60绉�</strong>锛岃秴鏃舵儏鍐典笅锛岃皟搴︾郴缁熶細杩斿洖杩炴帴澶辫触銆�</p>' +
+                '</div>' +
+                '<div class="api-info">' +
+                '<h3>瀵规帴绾﹀畾</h3>' +
+                '<ul><li><strong>缁熶竴鏍煎紡锛�</strong>涓烘帴鍙g粺涓�骞跺吋瀹癸紝鎵�鏈夌殑鍙傛暟閮戒负瀛楃涓叉牸寮忋��</li><li><strong>鏈绾﹀畾锛�</strong>鏂囨湰娑夊強鍒扮殑 AGV銆乺obot銆佹満鍣ㄤ汉鏈銆丆TU涓哄悓涓�鏈锛屼笉瑕佹贩娣嗐��</li><li><strong>鐗堟湰鍏煎锛�</strong>涓哄吋瀹逛互鍓嶇増鏈紝娑堟伅涓婃姤瀛楁浼氭瘮鍒楀嚭鐨勫瓧娈佃澶氾紝涓婂眰骞冲彴鏍规嵁涓氬姟鎴彇闇�瑕佺殑瀛楁銆�</li><li><strong>瀹瑰櫒瀹氫箟锛�</strong>搴旂敤浜庡弶杞︺�丆TU绛夐」鐩腑锛屾枡绠便�佹墭鐩樸�佽浇鍏烽兘鍙О涓哄鍣ㄣ��</li></ul>' +
+                '</div>' +
+                '<section class="api-section">' +
+                '<h2>鎺ュ彛姒傝</h2>' +
+                '<div class="api-info">' +
+                '<h3>鍩虹淇℃伅</h3>' +
+                '<table><tbody><tr><td><strong>鍩虹 URL</strong></td><td><code>http://IP:PORT</code></td></tr><tr><td><strong>璇锋眰鏍煎紡</strong></td><td><code>application/json</code></td></tr><tr><td><strong>杩斿洖鏍煎紡</strong></td><td><code>application/json</code></td></tr><tr><td><strong>瀛楃缂栫爜</strong></td><td><code>UTF-8</code></td></tr></tbody></table>' +
+                '</div>' +
+                '<div class="api-info">' +
+                '<h3>閫氱敤璇锋眰鍙傛暟</h3>' +
+                '<p>浠ヤ笅鍙傛暟涓烘墍鏈夋帴鍙g殑閫氱敤鍙傛暟锛屾瘡娆¤皟鐢ㄦ椂闇�瑕佹惡甯︼細</p>' +
+                '<table><thead><tr><th>鍙傛暟鍚�</th><th>鏄惁蹇呭~</th><th>鎻忚堪</th></tr></thead><tbody><tr><td><code>reqTime</code></td><td>閫夊~</td><td>璇锋眰鏃堕棿鎴筹紝鏍煎紡: <code>yyyy-MM-dd HH:mm:ss</code>銆傜敱涓婂眰绯荤粺璁惧畾銆�</td></tr><tr><td><code>tokenCode</code></td><td>閫夊~</td><td>浠ょ墝鍙凤紝鐢辫皟搴︾郴缁熼鍙戙�傚鏋滃~鍐欙紝闇�鍏堝湪 RCS-2000 绯荤粺閰嶇疆锛屼笂灞傜郴缁熻皟鐢ㄦ椂杩涜濉啓銆�</td></tr></tbody></table>' +
+                '</div>' +
+                '<div class="api-info">' +
+                '<h3>閫氱敤杩斿洖鍊煎畾涔�</h3>' +
+                '<p>鎵�鏈夋帴鍙g殑鍝嶅簲閮介伒寰互涓嬬粺涓�鏍煎紡锛�</p>' +
+                '<table><thead><tr><th>鍙傛暟鍚�</th><th>鏄惁蹇呭~</th><th>鎻忚堪</th></tr></thead><tbody><tr><td><code>code</code></td><td>蹇呭~</td><td>杩斿洖缂栧彿锛�<code>200</code> 琛ㄧず鎴愬姛锛�<code>1~N</code> 琛ㄧず澶辫触</td></tr><tr><td><code>message</code></td><td>蹇呭~</td><td>杩斿洖娑堟伅锛�<code>璇锋眰鎴愬姛</code> 琛ㄧず鎴愬姛锛屽唴瀹逛负璇︾粏鐨勯敊璇弿杩�</td></tr><tr><td><code>data</code></td><td>閫夊~</td><td>杩斿洖鐨勬暟鎹粨鏋勶紝鍏蜂綋鍐呭鏍规嵁鎺ュ彛鑰屽畾</td></tr></tbody></table>' +
+                '</div>' +
+                '</section>' +
+                '<section class="api-section">' +
+                '<h2>鎺ュ彛璇︽儏</h2>' +
+                apiDetailsHtml +
+                '</section>' +
+                '<section class="api-section">' +
+                '<h2>閿欒鐮佽鏄�</h2>' +
+                '<div class="api-info">' +
+                '<h3>閫氱敤閿欒鐮�</h3>' +
+                '<table><thead><tr><th>閿欒鐮�</th><th>璇存槑</th><th>瑙e喅鏂规</th></tr></thead><tbody><tr><td>200</td><td>鎴愬姛</td><td>-</td></tr><tr><td>500</td><td>鍙傛暟閿欒</td><td>妫�鏌ヨ姹傚弬鏁版槸鍚﹀畬鏁村拰姝g‘</td></tr></tbody></table>' +
+                '</div>' +
+                '</section>';
+
+            const htmlContent = '<!DOCTYPE html><html><head><meta charset="UTF-8"><title>鎺ュ彛鏂囨。</title><style>' +
+                'body { font-family: "Microsoft YaHei", Arial, sans-serif; margin: 40px; line-height: 1.6; } ' +
+                'p { margin-bottom: 15px; text-align: justify; } ' +
+                'pre { background-color: #f8f9fa; padding: 15px; border-radius: 4px; border: 1px solid #e9ecef; margin: 20px 0; font-family: "Consolas", "Monaco", monospace; white-space: pre-wrap; } ' +
+                'table { border-collapse: collapse; width: 100%; margin: 20px 0; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } ' +
+                'th { background-color: #3498db; color: white; font-weight: bold; padding: 12px 15px; text-align: left; } ' +
+                'td { border: 1px solid #ddd; padding: 10px 15px; text-align: left; } ' +
+                'tr:nth-child(even) { background-color: #f8f9fa; } ' +
+                'ul, ol { margin: 15px 0; padding-left: 30px; } ' +
+                'li { margin-bottom: 8px; } ' +
+                'h1, h2, h3, h4 { color: #333; margin-top: 20px; margin-bottom: 15px; } ' +
+                '.api-method { display: inline-block; padding: 6px 16px; border-radius: 20px; font-weight: 700; margin-right: 12px; font-size: 13px; } ' +
+                '.method-post { background: #49cc90; color: #fff; } ' +
+                '.method-get { background: #61affe; color: #fff; } ' +
+                '.api-url { font-family: "Courier New", "Consolas", monospace; background: #2d3748; color: #48bb78; padding: 14px 18px; margin: 15px 0; border-radius: 8px; font-size: 14px; word-break: break-all; } ' +
+                '.note { background: #fff9e6; border-left: 5px solid #ffc107; padding: 20px; margin: 20px 0; border-radius: 12px; } ' +
+                '.api-info { background-color: #fff; padding: 25px; margin: 20px 0; border-radius: 12px; border-left: 5px solid #0066cc; } ' +
+                '</style></head><body>' + apiContent + '</body></html>';
+
+            const blob = new Blob([htmlContent], { type: 'application/msword' });
+            const url = URL.createObjectURL(blob);
+
+            const link = document.createElement('a');
+            link.href = url;
+            link.download = '鎺ュ彛鏂囨。.doc';
+            link.style.display = 'none';
+            document.body.appendChild(link);
+            link.click();
+            document.body.removeChild(link);
+
+            setTimeout(() => URL.revokeObjectURL(url), 100);
+            console.log('Word鏂囨。涓嬭浇瀹屾垚');
+        } catch (e) {
+            console.error('鐢熸垚Word鏂囨。澶辫触:', e);
+            alert('瀵煎嚭Word澶辫触锛岃閲嶈瘯锛�' + e.message);
         }
     }
 
     // 瀵煎嚭涓篗arkdown
     function exportToMarkdown() {
         const contentFrame = document.getElementById('content-frame');
-        if (contentFrame && contentFrame.contentWindow) {
-            try {
-                const contentDoc = contentFrame.contentDocument;
-                const content = contentDoc.body;
+        if (!contentFrame || !contentFrame.contentWindow) {
+            alert('鏃犳硶鑾峰彇鍐呭妗嗘灦');
+            return;
+        }
 
-                // 杞崲HTML涓篗arkdown
-                let markdown = '';
-
-                // 鎸夋枃妗i『搴忓鐞嗘墍鏈夊厓绱�
-                const processElement = (element) => {
-                    // 杩囨护鎺変笉闇�瑕佺殑鍏冪礌
-                    if (element.textContent.includes('RCS鎺ュ彛鏂囨。') || 
-                        element.textContent.includes('鎺ュ彛璇︽儏') ||
-                        element.textContent.includes('鏇存柊鏃堕棿锛�') ||
-                        element.textContent.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/)) {
-                        return;
-                    }
-
-                    const tagName = element.tagName;
-                    
-                    if (['H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(tagName)) {
-                        // 澶勭悊鏍囬
-                        const level = parseInt(tagName.substring(1));
-                        const hashes = '#'.repeat(level);
-                        markdown += `${hashes} ${element.textContent}\n\n`;
-                    } else if (tagName === 'P') {
-                        // 澶勭悊娈佃惤
-                        markdown += `${element.textContent}\n\n`;
-                    } else if (tagName === 'PRE') {
-                        // 澶勭悊浠g爜鍧�
-                        markdown += '```\n';
-                        markdown += element.textContent;
-                        markdown += '\n```\n\n';
-                    } else if (tagName === 'UL' || tagName === 'OL') {
-                        // 澶勭悊鍒楄〃
-                        const items = element.querySelectorAll('li');
-                        items.forEach(item => {
-                            const prefix = tagName === 'UL' ? '- ' : '1. ';
-                            markdown += `${prefix}${item.textContent}\n`;
-                        });
-                        markdown += '\n';
-                    } else if (tagName === 'TABLE') {
-                        // 澶勭悊琛ㄦ牸
-                        const headers = element.querySelectorAll('th');
-                        if (headers.length > 0) {
-                            markdown += '| ';
-                            headers.forEach(header => {
-                                markdown += `${header.textContent} | `;
-                            });
-                            markdown += '\n';
-
-                            // 鍒嗛殧绾�
-                            markdown += '| ';
-                            headers.forEach(() => {
-                                markdown += '--- | ';
-                            });
-                            markdown += '\n';
-                        }
-
-                        // 澶勭悊琛ㄦ牸琛�
-                        const rows = element.querySelectorAll('tr');
-                        rows.forEach(row => {
-                            const cells = row.querySelectorAll('td');
-                            if (cells.length > 0) {
-                                markdown += '| ';
-                                cells.forEach(cell => {
-                                    markdown += `${cell.textContent} | `;
-                                });
-                                markdown += '\n';
-                            }
-                        });
-                        markdown += '\n';
-                    } else if (element.children && element.children.length > 0) {
-                        // 澶勭悊瀹瑰櫒鍏冪礌锛岄�掑綊澶勭悊瀛愬厓绱�
-                        Array.from(element.children).forEach(child => processElement(child));
-                    }
-                };
-
-                // 鎸夐『搴忓鐞嗘墍鏈夊瓙鍏冪礌
-                Array.from(content.children).forEach(child => processElement(child));
-
-                // 鍒涘缓Blob瀵硅薄
-                const blob = new Blob([markdown], {type: 'text/markdown'});
-                const url = URL.createObjectURL(blob);
-
-                // 鍒涘缓涓嬭浇閾炬帴
-                const link = document.createElement('a');
-                link.href = url;
-                link.download = '鎺ュ彛鏂囨。.md';
-                link.click();
-
-                // 閲婃斁URL瀵硅薄
-                setTimeout(() => URL.revokeObjectURL(url), 100);
-            } catch (e) {
-                console.error('瀵煎嚭Markdown澶辫触:', e);
-                alert('瀵煎嚭Markdown澶辫触锛岃閲嶈瘯');
+        const handleMessage = function(event) {
+            if (event.data.type === 'apiConfigs') {
+                const apiConfigs = event.data.data;
+                window.removeEventListener('message', handleMessage);
+                generateMarkdownDocument(apiConfigs);
             }
+        };
+
+        window.addEventListener('message', handleMessage, { once: true });
+        contentFrame.contentWindow.postMessage({ type: 'getApiConfigs' }, '*');
+
+        setTimeout(() => {
+            try {
+                window.removeEventListener('message', handleMessage);
+            } catch (e) {
+                console.log('鐩戝惉鍣ㄥ凡绉婚櫎');
+            }
+        }, 5000);
+    }
+
+    function generateMarkdownDocument(apiConfigs) {
+        try {
+            console.log('寮�濮嬬敓鎴怣arkdown鏂囨。, API鏁伴噺:', apiConfigs.length);
+
+            let apiDetailsMd = '';
+            apiConfigs.forEach(function(config) {
+                let requestParamsMd = '';
+                if (config.request && config.request.parameters) {
+                    config.request.parameters.forEach(function(param) {
+                        const required = param.required ? '蹇呭~' : '閫夊~';
+                        const defaultVal = param.default !== undefined ? ' (榛樿鍊�: ' + param.default + ')' : '';
+                        requestParamsMd += '| ' + param.name + ' | ' + param.type + ' | ' + required + ' | ' + param.description + defaultVal + ' |\n';
+                    });
+                }
+
+                let requestExample = '';
+                if (config.request && config.request.example) {
+                    requestExample = JSON.stringify(config.request.example, null, 2);
+                }
+
+                let responseParamsMd = '';
+                if (config.response && config.response.parameters) {
+                    config.response.parameters.forEach(function(param) {
+                        responseParamsMd += '| ' + param.name + ' | ' + param.type + ' | ' + param.description + ' |\n';
+                    });
+                }
+
+                let responseExample = '';
+                if (config.response && config.response.example) {
+                    responseExample = JSON.stringify(config.response.example, null, 2);
+                }
+
+                apiDetailsMd += 
+                    '### ' + config.name + '\n\n' +
+                    '**' + config.method + '** `' + config.url + '`\n\n' +
+                    '#### 璇锋眰鍙傛暟\n\n' +
+                    '| 鍙傛暟鍚� | 绫诲瀷 | 鏄惁蹇呭~ | 鎻忚堪 |\n' +
+                    '| --- | --- | --- | --- |\n' +
+                    requestParamsMd +
+                    '#### 璇锋眰绀轰緥\n\n' +
+                    '```json\n' +
+                    requestExample + '\n' +
+                    '```\n\n' +
+                    '#### 杩斿洖鍙傛暟\n\n' +
+                    '| 鍙傛暟鍚� | 绫诲瀷 | 鎻忚堪 |\n' +
+                    '| --- | --- | --- |\n' +
+                    responseParamsMd +
+                    '#### 杩斿洖绀轰緥\n\n' +
+                    '```json\n' +
+                    responseExample + '\n' +
+                    '```\n\n';
+            });
+
+            const markdown = 
+                '# RCS鎺ュ彛鏂囨。\n\n' +
+                '## 蹇�熷鎺ユ寚鍗梊n\n' +
+                '**鎺ュ彛涓爣 * 鐨勪负甯哥敤鎺ュ彛**锛屽垵姝ュ鎺ユ椂锛屽彧闇�瑕佽皟閫氫互涓嬫帴鍙o細\n\n' +
+                '- 1. 鐢熸垚浠诲姟鍗昞n' +
+                '- 2. 鍙栨秷浠诲姟鍗昞n\n' +
+                '**濡傛灉涓婂眰绯荤粺闇�瑕佹帴鏀朵换鍔$殑鎵ц鐘舵��**锛岄渶瑕佹彁渚涗互涓嬫帴鍙o紝渚涜皟搴︾郴缁熷洖璋冿細\n\n' +
+                '- 浠诲姟鎵ц閫氱煡鎺ュ彛\n\n' +
+                '**瓒呮椂璁剧疆锛�** 涓壃璋冨害绯荤粺璋冪敤涓婂眰绯荤粺鐨勬帴鍙o紝鑾峰彇杩炴帴瓒呮椂鏃堕棿榛樿涓� **30绉�**锛屾暟鎹繑鍥炶秴鏃舵椂闂撮粯璁や负 **60绉�**锛岃秴鏃舵儏鍐典笅锛岃皟搴︾郴缁熶細杩斿洖杩炴帴澶辫触銆俓n\n' +
+                '## 瀵规帴绾﹀畾\n\n' +
+                '- **缁熶竴鏍煎紡锛�** 涓烘帴鍙g粺涓�骞跺吋瀹癸紝鎵�鏈夌殑鍙傛暟閮戒负瀛楃涓叉牸寮忋�俓n' +
+                '- **鏈绾﹀畾锛�** 鏂囨湰娑夊強鍒扮殑 AGV銆乺obot銆佹満鍣ㄤ汉鏈銆丆TU涓哄悓涓�鏈锛屼笉瑕佹贩娣嗐�俓n' +
+                '- **鐗堟湰鍏煎锛�** 涓哄吋瀹逛互鍓嶇増鏈紝娑堟伅涓婃姤瀛楁浼氭瘮鍒楀嚭鐨勫瓧娈佃澶氾紝涓婂眰骞冲彴鏍规嵁涓氬姟鎴彇闇�瑕佺殑瀛楁銆俓n' +
+                '- **瀹瑰櫒瀹氫箟锛�** 搴旂敤浜庡弶杞︺�丆TU绛夐」鐩腑锛屾枡绠便�佹墭鐩樸�佽浇鍏烽兘鍙О涓哄鍣ㄣ�俓n\n' +
+                '## 鎺ュ彛姒傝\n\n' +
+                '### 鍩虹淇℃伅\n\n' +
+                '| 鍙傛暟 | 鍊� |\n' +
+                '| --- | --- |\n' +
+                '| 鍩虹 URL | `http://IP:PORT` |\n' +
+                '| 璇锋眰鏍煎紡 | `application/json` |\n' +
+                '| 杩斿洖鏍煎紡 | `application/json` |\n' +
+                '| 瀛楃缂栫爜 | `UTF-8` |\n\n' +
+                '### 閫氱敤璇锋眰鍙傛暟\n\n' +
+                '| 鍙傛暟鍚� | 鏄惁蹇呭~ | 鎻忚堪 |\n' +
+                '| --- | --- | --- |\n' +
+                '| `reqTime` | 閫夊~ | 璇锋眰鏃堕棿鎴筹紝鏍煎紡: `yyyy-MM-dd HH:mm:ss`銆傜敱涓婂眰绯荤粺璁惧畾銆� |\n' +
+                '| `tokenCode` | 閫夊~ | 浠ょ墝鍙凤紝鐢辫皟搴︾郴缁熼鍙戙�傚鏋滃~鍐欙紝闇�鍏堝湪 RCS-2000 绯荤粺閰嶇疆锛屼笂灞傜郴缁熻皟鐢ㄦ椂杩涜濉啓銆� |\n\n' +
+                '### 閫氱敤杩斿洖鍊煎畾涔塡n\n' +
+                '| 鍙傛暟鍚� | 鏄惁蹇呭~ | 鎻忚堪 |\n' +
+                '| --- | --- | --- |\n' +
+                '| `code` | 蹇呭~ | 杩斿洖缂栧彿锛宍200` 琛ㄧず鎴愬姛锛宍1~N` 琛ㄧず澶辫触 |\n' +
+                '| `message` | 蹇呭~ | 杩斿洖娑堟伅锛宍璇锋眰鎴愬姛` 琛ㄧず鎴愬姛锛屽唴瀹逛负璇︾粏鐨勯敊璇弿杩� |\n' +
+                '| `data` | 閫夊~ | 杩斿洖鐨勬暟鎹粨鏋勶紝鍏蜂綋鍐呭鏍规嵁鎺ュ彛鑰屽畾 |\n\n' +
+                '## 鎺ュ彛璇︽儏\n\n' +
+                apiDetailsMd +
+                '## 閿欒鐮佽鏄嶾n\n' +
+                '### 閫氱敤閿欒鐮乗n\n' +
+                '| 閿欒鐮� | 璇存槑 | 瑙e喅鏂规 |\n' +
+                '| --- | --- | --- |\n' +
+                '| 200 | 鎴愬姛 | - |\n' +
+                '| 500 | 鍙傛暟閿欒 | 妫�鏌ヨ姹傚弬鏁版槸鍚﹀畬鏁村拰姝g‘ |\n';
+
+            const blob = new Blob([markdown], { type: 'text/markdown;charset=utf-8' });
+            const url = URL.createObjectURL(blob);
+
+            const link = document.createElement('a');
+            link.href = url;
+            link.download = '鎺ュ彛鏂囨。.md';
+            link.style.display = 'none';
+            document.body.appendChild(link);
+            link.click();
+            document.body.removeChild(link);
+
+            setTimeout(() => URL.revokeObjectURL(url), 100);
+            console.log('Markdown鏂囨。涓嬭浇瀹屾垚');
+        } catch (e) {
+            console.error('鐢熸垚Markdown鏂囨。澶辫触:', e);
+            alert('瀵煎嚭Markdown澶辫触锛岃閲嶈瘯锛�' + e.message);
         }
     }
 
diff --git a/zy-acs-common/src/main/java/com/zy/acs/common/domain/mq/DeviceMessage.java b/zy-acs-common/src/main/java/com/zy/acs/common/domain/mq/DeviceMessage.java
index 790aabb..d45dc7e 100644
--- a/zy-acs-common/src/main/java/com/zy/acs/common/domain/mq/DeviceMessage.java
+++ b/zy-acs-common/src/main/java/com/zy/acs/common/domain/mq/DeviceMessage.java
@@ -15,4 +15,7 @@
 
     private Long timestamp = System.currentTimeMillis();
 
+    public DeviceMessage(String sourceHexStr) {
+        this.sourceHexStr = sourceHexStr;
+    }
 }
diff --git a/zy-acs-cv/src/main/java/com/zy/asrs/controller/SiteController.java b/zy-acs-cv/src/main/java/com/zy/asrs/controller/SiteController.java
index 719cf88..bd0d649 100644
--- a/zy-acs-cv/src/main/java/com/zy/asrs/controller/SiteController.java
+++ b/zy-acs-cv/src/main/java/com/zy/asrs/controller/SiteController.java
@@ -75,7 +75,6 @@
     }
 
 
-
     @PostMapping("/output/site")
     @ManagerAuth(memo = "绔欑偣璁惧鎶ユ枃鏃ュ織杈撳嚭")
     public R siteOutput() {
diff --git a/zy-acs-cv/src/main/java/com/zy/asrs/controller/WmsController.java b/zy-acs-cv/src/main/java/com/zy/asrs/controller/WmsController.java
index 5ec1b30..9990c4f 100644
--- a/zy-acs-cv/src/main/java/com/zy/asrs/controller/WmsController.java
+++ b/zy-acs-cv/src/main/java/com/zy/asrs/controller/WmsController.java
@@ -78,98 +78,98 @@
         List<PlcErrorTableVo> list = new ArrayList<>();
         if (staProtocol.getBreakerErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("鏂矾鍣ㄦ晠闅�");
             vo.setError("鏂矾鍣ㄦ晠闅�");
             list.add(vo);
         }
         if (staProtocol.getInfraredErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("鍏夌數寮傚父");
             vo.setError("鍏夌數寮傚父");
             list.add(vo);
         }
         if (staProtocol.getOutTimeErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("杩愯瓒呮椂");
             vo.setError("杩愯瓒呮椂");
             list.add(vo);
         }
         if (staProtocol.getSeizeSeatErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("鍗犱綅瓒呮椂");
             vo.setError("鍗犱綅瓒呮椂");
             list.add(vo);
         }
         if (staProtocol.getWrkYgoodsN()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("鏈変换鍔℃棤璐ф晠闅�");
             vo.setError("鏈変换鍔℃棤璐ф晠闅�");
             list.add(vo);
         }
         if (staProtocol.getInverterErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("鍙橀鍣ㄦ晠闅�");
             vo.setError("鍙橀鍣ㄦ晠闅�");
             list.add(vo);
         }
         if (staProtocol.getContactErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("鐢垫満鎺ヨЕ鍣ㄦ晠闅�");
             vo.setError("鐢垫満鎺ヨЕ鍣ㄦ晠闅�");
             list.add(vo);
         }
         if (staProtocol.getUpcontactErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅�");
             vo.setError("椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅�");
             list.add(vo);
         }
         if (staProtocol.isFrontErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("鍓嶈秴闄�");
             vo.setError("鍓嶈秴闄�");
             list.add(vo);
         }
         if (staProtocol.isBackErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("鍚庤秴闄�");
             vo.setError("鍚庤秴闄�");
             list.add(vo);
         }
         if (staProtocol.isHighErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("楂樿秴闄�");
             vo.setError("楂樿秴闄�");
             list.add(vo);
         }
         if (staProtocol.isLeftErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("宸﹁秴闄�");
             vo.setError("宸﹁秴闄�");
             list.add(vo);
         }
         if (staProtocol.isRightErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("鍙宠秴闄�");
             vo.setError("鍙宠秴闄�");
             list.add(vo);
         }
         if (staProtocol.isBarcodeErr()) {
             PlcErrorTableVo vo = new PlcErrorTableVo();
-            vo.setStaNo(staProtocol.getSiteId());   
+            vo.setStaNo(staProtocol.getSiteId());
             vo.setPlcDesc("鎵爜澶辫触");
             vo.setError("鎵爜澶辫触");
             list.add(vo);
diff --git a/zy-acs-cv/src/main/java/com/zy/asrs/entity/Devp.java b/zy-acs-cv/src/main/java/com/zy/asrs/entity/Devp.java
index 4dde4c6..dc70ac0 100644
--- a/zy-acs-cv/src/main/java/com/zy/asrs/entity/Devp.java
+++ b/zy-acs-cv/src/main/java/com/zy/asrs/entity/Devp.java
@@ -136,8 +136,8 @@
     public Devp setSqlData(Devp devp) {
         this.setDevNo(devp.getDevNo());
         this.setWrkNo(devp.getWrkNo());
-        this.setAutoing(devp.getAutoing() );
-        this.setLoading(devp.getLoading() );
+        this.setAutoing(devp.getAutoing());
+        this.setLoading(devp.getLoading());
         this.setInEnable(devp.getInEnable());
         this.setOutEnable(devp.getOutEnable());
         this.setUpdateTime(new Date());
diff --git a/zy-acs-cv/src/main/java/com/zy/asrs/mapper/DevpMapper.java b/zy-acs-cv/src/main/java/com/zy/asrs/mapper/DevpMapper.java
index b8c9b15..a227aee 100644
--- a/zy-acs-cv/src/main/java/com/zy/asrs/mapper/DevpMapper.java
+++ b/zy-acs-cv/src/main/java/com/zy/asrs/mapper/DevpMapper.java
@@ -3,10 +3,7 @@
 import com.baomidou.mybatisplus.mapper.BaseMapper;
 import com.zy.asrs.entity.Devp;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
-
-import java.util.List;
 
 @Mapper
 @Repository
diff --git a/zy-acs-cv/src/main/java/com/zy/asrs/mapper/JobMapper.java b/zy-acs-cv/src/main/java/com/zy/asrs/mapper/JobMapper.java
index ca14893..c5e3165 100644
--- a/zy-acs-cv/src/main/java/com/zy/asrs/mapper/JobMapper.java
+++ b/zy-acs-cv/src/main/java/com/zy/asrs/mapper/JobMapper.java
@@ -24,9 +24,10 @@
 
     Job getJobByBarcode(@Param("barcode") String barcode);
 
-
     List<Job> listJobByJobSts(@Param("jobSts") Integer jobSts);
 
+    List<Job> listJobByJobStsAndDay(@Param("jobSts") Integer jobSts, @Param("day") Integer day);
+
     List<Job> listJobToLog(@Param("jobSts") Integer jobSts, @Param("day") Integer day);
 
 
diff --git a/zy-acs-cv/src/main/java/com/zy/asrs/scheduler/JobLogScheduler.java b/zy-acs-cv/src/main/java/com/zy/asrs/scheduler/JobLogScheduler.java
index c98a3a6..daa2c42 100644
--- a/zy-acs-cv/src/main/java/com/zy/asrs/scheduler/JobLogScheduler.java
+++ b/zy-acs-cv/src/main/java/com/zy/asrs/scheduler/JobLogScheduler.java
@@ -4,6 +4,8 @@
 import com.zy.asrs.mapper.JobMapper;
 import com.zy.asrs.service.JobService;
 import com.zy.core.enums.ConveyorStateType;
+import com.zy.core.properties.CtuOperationConfig;
+import com.zy.core.properties.CtuServiceProperties;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -24,17 +26,34 @@
     @Autowired
     private JobMapper jobMapper;
 
+    @Autowired
+    private CtuServiceProperties properties;
+
 
     //@Scheduled(cron = "0 0 2 * * ?")
     @Scheduled(cron = "*/5 * * * * ?")
     public void autoToLog() {
-        List<Job> jobs = jobMapper.listJobByJobSts(ConveyorStateType.CLEARSIGNAL.getStatus());
+        List<Job> jobs = jobMapper.listJobByJobStsAndDay(ConveyorStateType.CLEARSIGNAL.getStatus(),1);
         for (Job job : jobs) {
             jobService.saveJobLog(job);
         }
-        jobs = jobMapper.listJobToLog(ConveyorStateType.OUTBOUND.getStatus(), 1);
-        for (Job job : jobs) {
-            jobService.saveJobLog(job);
+        Boolean flag = true;
+        List<CtuOperationConfig> operations = properties.getOperations();
+        for (CtuOperationConfig config : operations) {
+            if (config.getType().equals(ConveyorStateType.FAKEUSER)) {
+                flag = false;
+            }
+        }
+        if (flag) {
+            jobs = jobMapper.listJobToLog(ConveyorStateType.OUTBOUND.getStatus(), 1);
+            for (Job job : jobs) {
+                jobService.saveJobLog(job);
+            }
+        } else {
+            jobs = jobMapper.listJobToLog(ConveyorStateType.FAKEUSER.getStatus(), 1);
+            for (Job job : jobs) {
+                jobService.saveJobLog(job);
+            }
         }
     }
 
diff --git a/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/DevpServiceImpl.java b/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/DevpServiceImpl.java
index a6ed650..b88729f 100644
--- a/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/DevpServiceImpl.java
+++ b/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/DevpServiceImpl.java
@@ -5,7 +5,6 @@
 import com.zy.asrs.entity.Devp;
 import com.zy.asrs.mapper.DevpMapper;
 import com.zy.asrs.service.DevpService;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -23,8 +22,6 @@
             }
         }
     }
-
-
 
 
     @Override
diff --git a/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/WrkLastnoServiceImpl.java b/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/WrkLastnoServiceImpl.java
index 0924ced..bd9288b 100644
--- a/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/WrkLastnoServiceImpl.java
+++ b/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/WrkLastnoServiceImpl.java
@@ -5,11 +5,16 @@
 import com.zy.acs.framework.exception.CoolException;
 import com.zy.asrs.entity.WrkLastno;
 import com.zy.asrs.mapper.WrkLastnoMapper;
+import com.zy.asrs.service.JobService;
 import com.zy.asrs.service.WrkLastnoService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service("wrkLastnoService")
 public class WrkLastnoServiceImpl extends ServiceImpl<WrkLastnoMapper, WrkLastno> implements WrkLastnoService {
+
+@Autowired
+private JobService jobService;
 
 
     /**
@@ -30,18 +35,13 @@
         int sNo = wrkLastno.getSNo();
         int eNo = wrkLastno.getENo();
 
-        workNo = workNo >= eNo ? sNo : workNo + 1;
+        do {
+            workNo = workNo >= eNo ? sNo : workNo + 1;
+        } while (jobService.getJobByJobNo(workNo) == null);
 
         if (workNo > 0) {
             wrkLastno.setWrkNo(workNo);
             baseMapper.updateById(wrkLastno);
-        }
-        if (workNo == 0) {
-            throw new CoolException("鐢熸垚宸ヤ綔鍙峰け璐ワ紝璇疯仈绯荤鐞嗗憳");
-        } else {
-            if (baseMapper.selectById(workNo) != null) {
-                throw new CoolException("鐢熸垚宸ヤ綔鍙�" + workNo + "鍦ㄥ伐浣滄。涓凡瀛樺湪");
-            }
         }
         return workNo;
     }
diff --git a/zy-acs-cv/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/zy-acs-cv/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index ba284f4..9e50ce8 100644
--- a/zy-acs-cv/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/zy-acs-cv/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -111,8 +111,6 @@
     }
 
 
-
-
     @Override
     public StaProtocol clone() {
         try {
diff --git a/zy-acs-cv/src/main/java/com/zy/core/operation/handler/AppleLocOperationHandler.java b/zy-acs-cv/src/main/java/com/zy/core/operation/handler/AppleLocOperationHandler.java
index ed859b4..7d4c74b 100644
--- a/zy-acs-cv/src/main/java/com/zy/core/operation/handler/AppleLocOperationHandler.java
+++ b/zy-acs-cv/src/main/java/com/zy/core/operation/handler/AppleLocOperationHandler.java
@@ -1,6 +1,7 @@
 package com.zy.core.operation.handler;
 
 import com.zy.acs.framework.common.Cools;
+import com.zy.acs.framework.exception.CoolException;
 import com.zy.asrs.controller.vo.ApplyInDto;
 import com.zy.asrs.controller.vo.ApplyInRepsonseDto;
 import com.zy.asrs.entity.Job;
@@ -8,10 +9,13 @@
 import com.zy.asrs.service.JobService;
 import com.zy.asrs.service.WmsMainService;
 import com.zy.asrs.service.WrkLastnoService;
+import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.ConveyorStateType;
 import com.zy.core.enums.SlaveType;
+import com.zy.core.enums.TaskType;
 import com.zy.core.model.DevpSlave;
+import com.zy.core.model.Task;
 import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.operation.OperationHandler;
 import com.zy.core.properties.CtuOperationConfig;
@@ -83,19 +87,17 @@
                         if (staProtocol.getWorkNo() >= 9991 && staProtocol.getWorkNo() <= 9992) {
                             Job job = jobService.getJobByBarcode(barcode);
                             // 鐢宠鍏ュ簱
-                            if (job == null || (job != null && job.getJobSts() == 8)) {
+                            if (job == null || (job != null && job.getJobSts() == ConveyorStateType.CLEARSIGNAL.getStatus())) {
                                 ApplyInRepsonseDto locOfWms = wmsMainService.getLocOfWms(applyIn(barcode, inSta.getStaNo() + "", staProtocol));
                                 if (locOfWms != null) {
-                                    job = new Job();
-                                    job.setLoc(locOfWms.getLocNo());
-                                    job.setTaskNo(locOfWms.getTaskNo());
-                                    job.setBatchNo(locOfWms.getBatchNo());
-                                    job.setBarcode(barcode);
-                                    job.setStaNo(inSta.getTargetSta() + "");
-                                    job.setJobNo(wrkLastnoService.nextWorkNo(WorkNoTypeType.WORK_NO_TYPE.type));
-                                    job.setJobSts(ConveyorStateType.APPLYLOC.getStatus());
-                                    job.setWmsTime(new Date());
-                                    jobService.insert(job);
+                                    staProtocol.setWorkNo(job.getJobNo());
+                                    staProtocol.setStaNo(inSta.getTargetSta());
+                                    if (MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(TaskType.WRITE, staProtocol))) {
+                                        if (!jobService.insert(initJob(locOfWms, barcode, inSta.getTargetSta() + ""))) {
+                                            throw new CoolException("鏇存柊杈撻�佺嚎浠诲姟澶辫触," + " - " + staProtocol.getWorkNo());
+                                        }
+                                        log.info("鍏ュ簱鍓嶈繘锛歿},{}", staProtocol.getWorkNo(), inSta.getTargetSta());
+                                    }
                                 } else {
                                     log.info("WMS鏈繑鍥炲簱浣嶄俊鎭紝鏉$爜锛歿},绔欑偣锛歿}", barcode, inSta.getStaNo());
                                 }
@@ -110,6 +112,23 @@
         }
     }
 
+    private Job initJob(ApplyInRepsonseDto locOfWms, String barcode, String staNo) {
+        Job  job = new Job();
+        job.setLoc(locOfWms.getLocNo());
+        job.setTaskNo(locOfWms.getTaskNo());
+        job.setBatchNo(locOfWms.getBatchNo());
+        job.setBarcode(barcode);
+        job.setStaNo(staNo);
+        job.setJobNo(getWorkNo());
+        job.setJobSts(ConveyorStateType.INBOUND.getStatus());
+        job.setWmsTime(new Date());
+        return job;
+    }
+
+    private Integer getWorkNo() {
+        return wrkLastnoService.nextWorkNo(WorkNoTypeType.WORK_NO_TYPE.type);
+    }
+
     private ApplyInDto applyIn(String barcode, String staNo, StaProtocol staProtocol) {
         ApplyInDto applyInDto = new ApplyInDto();
         applyInDto.setStaNo(staNo);
diff --git a/zy-acs-cv/src/main/java/com/zy/core/operation/handler/FakeUserOperationHandler.java b/zy-acs-cv/src/main/java/com/zy/core/operation/handler/FakeUserOperationHandler.java
index 20ebcbd..6c402da 100644
--- a/zy-acs-cv/src/main/java/com/zy/core/operation/handler/FakeUserOperationHandler.java
+++ b/zy-acs-cv/src/main/java/com/zy/core/operation/handler/FakeUserOperationHandler.java
@@ -54,10 +54,16 @@
             if (!staProtocol.isLoading()) {
                 return;
             }
+            StaProtocol staProtocol5 = devpThread.getStation().get(1005);
+            if (staProtocol5.isLoading()){
+                log.info("1005鏈夌墿锛岀瓑鏃犵墿涔嬪悗鎵嶅叆搴�");
+                return;
+            }
             if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
                 Job jobByWorkNo = jobService.getJobByJobNo(staProtocol.getWorkNo());
-                if (jobByWorkNo != null && jobByWorkNo.getJobSts() == 1) {
-                    staProtocol.setStaNo(1006);
+                if (jobByWorkNo != null && jobByWorkNo.getJobSts() == ConveyorStateType.OUTBOUND.getStatus()) {
+                    staProtocol.setWorkNo(9992);
+                    staProtocol.setStaNo(1005);
                     boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(TaskType.WRITE, staProtocol));
                     if (result) {
                         jobByWorkNo.setJobSts(3);
diff --git a/zy-acs-cv/src/main/java/com/zy/core/operation/handler/InOperationHandler.java b/zy-acs-cv/src/main/java/com/zy/core/operation/handler/InOperationHandler.java
deleted file mode 100644
index 0bf54fa..0000000
--- a/zy-acs-cv/src/main/java/com/zy/core/operation/handler/InOperationHandler.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.zy.core.operation.handler;
-
-import com.zy.acs.framework.common.Cools;
-import com.zy.acs.framework.exception.CoolException;
-import com.zy.asrs.entity.Job;
-import com.zy.asrs.service.CtuMainService;
-import com.zy.asrs.service.JobService;
-import com.zy.asrs.service.WrkLastnoService;
-import com.zy.core.cache.MessageQueue;
-import com.zy.core.cache.SlaveConnection;
-import com.zy.core.enums.ConveyorStateType;
-import com.zy.core.enums.SlaveType;
-import com.zy.core.enums.TaskType;
-import com.zy.core.model.DevpSlave;
-import com.zy.core.model.Task;
-import com.zy.core.model.protocol.StaProtocol;
-import com.zy.core.operation.OperationHandler;
-import com.zy.core.properties.CtuOperationConfig;
-import com.zy.core.properties.SlaveProperties;
-import com.zy.core.thread.BarcodeThread;
-import com.zy.core.thread.SiemensDevpThread;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
-
-import java.util.Date;
-
-/**
- * 鍏ュ簱
- */
-@Slf4j
-@Component
-public class InOperationHandler implements OperationHandler {
-
-    @Autowired
-    private SlaveProperties slaveProperties;
-
-
-    @Autowired
-    private WrkLastnoService wrkLastnoService;
-
-    @Autowired
-    private CtuMainService ctuMainService;
-
-    @Autowired
-    private JobService jobService;
-
-
-    @Override
-    public ConveyorStateType getType() {
-        return ConveyorStateType.INBOUND;
-    }
-
-    @Override
-    public synchronized void execute(CtuOperationConfig config) {
-        try {
-            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-            for (DevpSlave devp : slaveProperties.getDevp()) {
-                // 閬嶅巻鍏ュ簱鍙�
-                for (DevpSlave.Sta inSta : devp.getInSta()) {
-                    // 鏍规嵁杈撻�佺嚎plc閬嶅巻
-                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                    StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
-                    if (staProtocol == null) {
-                        continue;
-                    } else {
-                        staProtocol = staProtocol.clone();
-                    }
-                    // 鍒ゆ柇鏄惁婊¤冻鏉′欢
-                    if (!staProtocol.isLoading()) {
-                        continue;
-                    }
-                    if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
-                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, devp.getId());
-                        String barcode = barcodeThread.getBarcode();
-                        if (Cools.isEmpty(barcode)) {
-                            continue;
-                        }
-                        Job job = jobService.getJobByBarcode(barcode);
-                        if (job != null) {
-                            Integer targetSta = inSta.getTargetSta();
-                            staProtocol.setWorkNo(job.getJobNo());
-                            staProtocol.setStaNo(targetSta);
-                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(TaskType.WRITE, staProtocol));
-                            if (result) {
-                                job.setJobSts(ConveyorStateType.INBOUND.getStatus());
-                                job.setStartTime(new Date());
-                                if (!jobService.updateById(job)) {
-                                    throw new CoolException("鏇存柊杈撻�佺嚎浠诲姟澶辫触," + " - " + staProtocol.getWorkNo());
-                                }
-                                log.info("鍏ュ簱鍓嶈繘锛歿},{}", staProtocol.getWorkNo(), inSta.getTargetSta());
-                            }
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-        }
-    }
-}
diff --git a/zy-acs-cv/src/main/resources/application.yml b/zy-acs-cv/src/main/resources/application.yml
index e5cfd59..42e55ff 100644
--- a/zy-acs-cv/src/main/resources/application.yml
+++ b/zy-acs-cv/src/main/resources/application.yml
@@ -10,11 +10,15 @@
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
     #url: jdbc:mysql://127.0.0.1:3306/rcs_ctu_stable?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
-    url: jdbc:mysql://127.0.0.1:3306/cv?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://192.168.133.173:3306/cv?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
     username: root
     password: xltys1995
   mvc:
     static-path-pattern: /**
+
+logging:
+  file:
+    path: stock/out/cv/logs
 
 wms:
   url: 10.10.10.220:8081
@@ -31,18 +35,18 @@
         mark: 10
         max-retries: 3
         retry-delay: 800
-#      - type: FAKEUSER
-#        mark: 20
-#        max-retries: 2
-#        retry-delay: 800
+      - type: FAKEUSER
+        mark: 20
+        max-retries: 2
+        retry-delay: 800
       - type: APPLYLOC
         mark: 30
         max-retries: 2
         retry-delay: 2000
-      - type: INBOUND
-        mark: 40
-        max-retries: 3
-        retry-delay: 500
+#      - type: INBOUND
+#        mark: 40
+#        max-retries: 3
+#        retry-delay: 500
       - type: CLEARSIGNAL
         mark: 50
         max-retries: 2
@@ -57,9 +61,7 @@
 #  global-config:
 #    field-strategy: 0
 
-logging:
-  file:
-    path: /stock/logs
+
 
 super:
   pwd: xltys1995
diff --git a/zy-acs-cv/src/main/resources/mapper/DevpMapper.xml b/zy-acs-cv/src/main/resources/mapper/DevpMapper.xml
index 2bd14f7..109e5ac 100644
--- a/zy-acs-cv/src/main/resources/mapper/DevpMapper.xml
+++ b/zy-acs-cv/src/main/resources/mapper/DevpMapper.xml
@@ -17,9 +17,10 @@
     </resultMap>
 
     <select id="getDevpByDevNo" resultMap="BaseResultMap">
-        select * from cv_devp where dev_no = #{devNo}
+        select *
+        from cv_devp
+        where dev_no = #{devNo}
     </select>
-
 
 
 </mapper>
diff --git a/zy-acs-cv/src/main/resources/mapper/JobMapper.xml b/zy-acs-cv/src/main/resources/mapper/JobMapper.xml
index 4b7aaea..b91bc3b 100644
--- a/zy-acs-cv/src/main/resources/mapper/JobMapper.xml
+++ b/zy-acs-cv/src/main/resources/mapper/JobMapper.xml
@@ -71,10 +71,18 @@
         where job_sts = #{jobSts}
     </select>
 
+    <select id="listJobByJobStsAndDay" resultMap="BaseResultMap">
+        select *
+        from cv_job
+        where job_sts = #{jobSts}
+          and DATEDIFF(NOW(), #{day}) > 1
+    </select>
+
 
     <select id="listJobToLog" resultMap="BaseResultMap">
         select *
         from cv_job
-        where job_sts = #{jobSts} and DATEDIFF(NOW(), #{day}) > 1
+        where job_sts = #{jobSts}
+          and DATEDIFF(NOW(), #{day}) > 1
     </select>
 </mapper>
diff --git a/zy-acs-cv/src/main/webapp/views/pipeline.html b/zy-acs-cv/src/main/webapp/views/pipeline.html
index fcdf710..4c6f970 100644
--- a/zy-acs-cv/src/main/webapp/views/pipeline.html
+++ b/zy-acs-cv/src/main/webapp/views/pipeline.html
@@ -63,7 +63,6 @@
         }
 
 
-
         /* 琛ㄦ牸瀹瑰櫒 */
         .table-container {
             flex: 1;
@@ -74,22 +73,22 @@
             border: 1px solid rgba(59, 130, 246, 0.3);
             backdrop-filter: blur(10px);
         }
-        
+
         /* 琛ㄦ牸瀹瑰櫒婊氬姩鏉℃牱寮� */
         .table-container::-webkit-scrollbar {
             width: 8px;
         }
-        
+
         .table-container::-webkit-scrollbar-track {
             background: rgba(30, 41, 59, 0.3);
             border-radius: 4px;
         }
-        
+
         .table-container::-webkit-scrollbar-thumb {
             background: #3b82f6;
             border-radius: 4px;
         }
-        
+
         .table-container::-webkit-scrollbar-thumb:hover {
             background: #60a5fa;
         }
@@ -103,7 +102,7 @@
             background: transparent;
             color: #e2e8f0;
         }
-        
+
         /* 璁剧疆琛ㄦ牸鍒楀锛岀‘淇濋�傚簲瀹瑰櫒 */
         .modern-table th,
         .modern-table td {
@@ -117,7 +116,7 @@
             top: 0;
             z-index: 10;
         }
-        
+
         /* 纭繚琛ㄦ牸瀹瑰櫒鏈夋渶澶ч珮搴︼紝浠ヤ究婊氬姩 */
         .table-container {
             max-height: calc(100vh - 200px);
@@ -256,15 +255,15 @@
         .site-card.status-normal {
             border-left: 4px solid #4ade80;
         }
-        
+
         .site-card.status-warning {
             border-left: 4px solid #fbbf24;
         }
-        
+
         .site-card.status-error {
             border-left: 4px solid #f87171;
         }
-        
+
         .site-card.status-standby {
             border-left: 4px solid #94a3b8;
         }
@@ -685,9 +684,15 @@
         }
 
         @keyframes pulse {
-            0% { transform: scale(1); }
-            50% { transform: scale(1.2); }
-            100% { transform: scale(1); }
+            0% {
+                transform: scale(1);
+            }
+            50% {
+                transform: scale(1.2);
+            }
+            100% {
+                transform: scale(1);
+            }
         }
 
         /* IO妯″紡鎸夐挳鏍峰紡 */
@@ -735,12 +740,12 @@
                 flex-direction: column;
                 gap: 20px;
             }
-            
+
             .dashboard-stats {
                 width: 100%;
                 justify-content: space-around;
             }
-            
+
             .sites-grid {
                 grid-template-columns: 1fr;
             }
@@ -763,29 +768,29 @@
         <main>
             <!-- 绔欑偣鐘舵�佹暟鎹洃鎺х増 -->
             <section id="site-monitor" class="main-board">
-<!--                <div class="dashboard-header">-->
-<!--                    <h3 class="dashboard-title">绔欑偣瀹炴椂鐩戞帶</h3>-->
-<!--                </div>-->
-                
+                <!--                <div class="dashboard-header">-->
+                <!--                    <h3 class="dashboard-title">绔欑偣瀹炴椂鐩戞帶</h3>-->
+                <!--                </div>-->
+
                 <!-- 琛ㄦ牸瀹瑰櫒 -->
                 <div class="table-container">
                     <table id="site-table" class="modern-table">
                         <thead>
-                            <tr>
-                                <th>绔欏彿</th>
-                                <th>宸ヤ綔鍙�</th>
-                                <th>鑷姩</th>
-                                <th>鏈夌墿</th>
-                                <th>鍙叆</th>
-                                <th>鍙嚭</th>
-                                <th>鍏ュ簱鏍囪</th>
-                                <th>绌烘澘淇″彿</th>
-                                <th>鐩爣绔�</th>
-                                <th>楂樹綆搴撲綅</th>
-                            </tr>
+                        <tr>
+                            <th>绔欏彿</th>
+                            <th>宸ヤ綔鍙�</th>
+                            <th>鑷姩</th>
+                            <th>鏈夌墿</th>
+                            <th>鍙叆</th>
+                            <th>鍙嚭</th>
+                            <th>鍏ュ簱鏍囪</th>
+                            <th>绌烘澘淇″彿</th>
+                            <th>鐩爣绔�</th>
+                            <th>楂樹綆搴撲綅</th>
+                        </tr>
                         </thead>
                         <tbody>
-                            <!-- 琛ㄦ牸鍐呭灏嗗湪杩欓噷鍔ㄦ�佺敓鎴� -->
+                        <!-- 琛ㄦ牸鍐呭灏嗗湪杩欓噷鍔ㄦ�佺敓鎴� -->
                         </tbody>
                     </table>
                 </div>
@@ -814,22 +819,22 @@
                     <form class="detail-form" id="site-form">
                         <div class="form-group">
                             <label class="form-label" for="siteId">绔欏彿:</label>
-                            <input id="siteId" name="siteId" class="form-input" type="number" 
+                            <input id="siteId" name="siteId" class="form-input" type="number"
                                    autocomplete="off" disabled>
                         </div>
                         <div class="form-group">
                             <label class="form-label" for="workNo">宸ヤ綔鍙�:</label>
-                            <input id="workNo" name="workNo" type="number" class="form-input" 
+                            <input id="workNo" name="workNo" type="number" class="form-input"
                                    autocomplete="off">
                         </div>
                         <div class="form-group">
                             <label class="form-label" for="staNo">鐩爣绔�:</label>
-                            <input id="staNo" name="staNo" type="number" class="form-input" 
+                            <input id="staNo" name="staNo" type="number" class="form-input"
                                    autocomplete="off">
                         </div>
                         <div class="form-group">
                             <label class="form-label" for="pakMk">鍏ュ簱鏍囪:</label>
-                            <input id="pakMk" name="pakMk" type="text" class="form-input" 
+                            <input id="pakMk" name="pakMk" type="text" class="form-input"
                                    autocomplete="off">
                         </div>
                     </form>
@@ -908,11 +913,10 @@
         }
 
 
-
         // 鑾峰彇绔欑偣淇℃伅琛�
         function getSite() {
             const tableEl = $('#site-table tbody');
-            
+
             ajaxRequest({
                 url: `${baseUrl}/site/table/site`,
                 method: 'POST',
@@ -929,7 +933,7 @@
         function renderTable(sites) {
             const tbody = $('#site-table tbody');
             tbody.empty();
-            
+
             sites.forEach(site => {
                 const row = createTableRow(site);
                 tbody.append(row);
@@ -941,7 +945,7 @@
             const isActive = site.autoing === 'Y';
             const hasLoad = site.loading === 'Y';
             const hasWorkNo = !!site.workNo && site.workNo !== '';
-            
+
             // 鏍规嵁鐘舵�佺‘瀹氳鏍峰紡绫�
             let rowClass = '';
             if (isActive) {
@@ -949,14 +953,14 @@
             } else {
                 rowClass = 'row-auto-gray'; // 涓嶈嚜鍔ㄤ负鐏拌壊
             }
-            
+
             // 鐗规畩鐘舵�佽鐩�
             if (hasLoad && !hasWorkNo) {
                 rowClass = 'row-yellow'; // 鏈夌墿鏃犲伐浣滃彿涓洪粍鑹�
             } else if (!hasLoad && hasWorkNo) {
                 rowClass = 'row-red'; // 鏃犵墿鏈夊伐浣滃彿涓虹孩鑹�
             }
-            
+
             return `
                 <tr data-site-id="${site.devNo}" class="${rowClass}">
                     <td>${site.devNo}</td>
@@ -991,7 +995,6 @@
         }
 
 
-
         // 鑾峰彇杈撻�佽澶囨棩蹇楄緭鍑�
         function getSiteOutput() {
             ajaxRequest({
@@ -1023,10 +1026,10 @@
                 // 鏄剧ず妯℃�佹
                 const modal = $('#modal-overlay');
                 modal.addClass('active');
-                
+
                 // 璁剧疆鏍囬
                 $('.modal-title').text(`绔欑偣 #${siteId} 缂栬緫`);
-                
+
                 // 鍔犺浇鏁版嵁
                 http.get(`${baseUrl}/site/detl/${siteId}`, null, (res) => {
                     if (res.data) {
@@ -1049,7 +1052,7 @@
         }
 
         // 鐐瑰嚮閬僵灞傚叧闂�
-        $(document).on('click', '#modal-overlay', function(e) {
+        $(document).on('click', '#modal-overlay', function (e) {
             if (e.target.id === 'modal-overlay') {
                 closeModal();
             }
@@ -1065,7 +1068,7 @@
             const toast = $('#success-toast');
             $('.toast-message', toast).text(message);
             toast.addClass('show');
-            
+
             // 3绉掑悗鑷姩闅愯棌
             setTimeout(() => {
                 toast.removeClass('show');
diff --git a/zy-acs-hex/src/main/resources/application.yml b/zy-acs-hex/src/main/resources/application.yml
index 97b7deb..16f7a1c 100644
--- a/zy-acs-hex/src/main/resources/application.yml
+++ b/zy-acs-hex/src/main/resources/application.yml
@@ -5,7 +5,7 @@
     name: rcs-hex
   # RabbitMQ閰嶇疆
   rabbitmq:
-    host: localhost
+    host: 192.168.133.173
     port: 5672
     username: root
     password: xltys1995
@@ -26,6 +26,7 @@
 #  --add-opens java.base/java.nio=ALL-UNNAMED
 influxdb3:
   enabled: true
-  url: http://127.0.0.1:8181
-  token: apiv3_Jx1SvmBMV_kikGhc4eZJQbeGmNYN7KX1GdpoR9MClkKzMxSJ0MPKM_O2Xt3o1hVyRikMmlxZ_h9zfy6ybC5Idg
-  database: rcs
\ No newline at end of file
+  url: http://192.168.133.173:8181
+  #token: apiv3_Jx1SvmBMV_kikGhc4eZJQbeGmNYN7KX1GdpoR9MClkKzMxSJ0MPKM_O2Xt3o1hVyRikMmlxZ_h9zfy6ybC5Idg
+  database: rcs
+  token: apiv3_116RKycNhxbf62Nys4zthC05aRD-aidzhEpEpLtsFuedhJTaCtVklNrzHs9LHxBWMuzDclBHVgToGoQuWGiIIA

--
Gitblit v1.9.1