.gitignore
@@ -25,7 +25,7 @@ /nbdist/ /.nb-gradle/ */target/ **/target/ ~*.xlsx component/component-Influxdb/target/classes/META-INF/additional-spring-configuration-metadata.json
File was deleted component/component-Influxdb/target/classes/META-INF/spring.factories
File was deleted component/component-Influxdb/target/classes/com/zy/component/influxdb/config/InfluxDBAutoConfiguration.classBinary files differ
component/component-Influxdb/target/classes/com/zy/component/influxdb/properties/InfluxDBProperties.classBinary files differ
component/component-Influxdb/target/classes/com/zy/component/influxdb/service/InfluxDBService.classBinary files differ
open-rcs/components/content/content-interface-word.html
@@ -1029,11 +1029,14 @@ </div> <script> // APIé ç½®æ°æ® let apiConfigs = []; // 卿å è½½APIé ç½®å¹¶æ¸²ææ¥å£å 容 function loadApiConfigs() { try { // ç´æ¥å®ä¹APIé ç½®æ°æ®ï¼é¿å CORSé误 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> open-rcs/pages/½Ó¿ÚÎĵµ.html
@@ -348,212 +348,303 @@ // 导åºä¸ºWord (docxæ ¼å¼) function exportToWord() { const contentFrame = document.getElementById('content-frame'); if (contentFrame && contentFrame.contentWindow) { try { console.log('å¼å§å¯¼åºWord'); 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æ ¼å¼çWordææ¡£ 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('å¼å§çæWordææ¡£, 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弿¾å¹³å°APIãæ¬ææ¡£æä¾äºå®æ´çæ¥å£è¯´æï¼å å«è¯·æ±åæ°ãè¿åç»æä»¥å示ä¾ä»£ç ãæ¯ä¸ªæ¥å£é½æä¾äºMockåè½ï¼æ¹ä¾¿æ¨å¿«éæµè¯åéæã</p>' + '</div>' + '<div class="note">' + '<div class="note-title">å¿«éå¯¹æ¥æå</div>' + '<p><strong>æ¥å£ä¸æ * çä¸ºå¸¸ç¨æ¥å£</strong>ï¼åæ¥å¯¹æ¥æ¶ï¼åªéè¦è°é以䏿¥å£ï¼</p>' + '<ul><li>1. çæä»»å¡å</li><li>2. åæ¶ä»»å¡å</li></ul>' + '<p><strong>妿ä¸å±ç³»ç»éè¦æ¥æ¶ä»»å¡çæ§è¡ç¶æ</strong>ï¼éè¦æä¾ä»¥ä¸æ¥å£ï¼ä¾è°åº¦ç³»ç»åè°ï¼</p>' + '<ul><li>任塿§è¡éç¥æ¥å£</li></ul>' + '<p><strong>è¶ æ¶è®¾ç½®ï¼</strong>䏿¬è°åº¦ç³»ç»è°ç¨ä¸å±ç³»ç»çæ¥å£ï¼è·åè¿æ¥è¶ æ¶æ¶é´é»è®¤ä¸º <strong>30ç§</strong>ï¼æ°æ®è¿åè¶ æ¶æ¶é´é»è®¤ä¸º <strong>60ç§</strong>ï¼è¶ æ¶æ åµä¸ï¼è°åº¦ç³»ç»ä¼è¿åè¿æ¥å¤±è´¥ã</p>' + '</div>' + '<div class="api-info">' + '<h3>对æ¥çº¦å®</h3>' + '<ul><li><strong>ç»ä¸æ ¼å¼ï¼</strong>为æ¥å£ç»ä¸å¹¶å ¼å®¹ï¼ææçåæ°é½ä¸ºåç¬¦ä¸²æ ¼å¼ã</li><li><strong>æ¯è¯çº¦å®ï¼</strong>ææ¬æ¶åå°ç AGVãrobotãæºå¨äººæ¯è¯ãCTU为å䏿¯è¯ï¼ä¸è¦æ··æ·ã</li><li><strong>çæ¬å ¼å®¹ï¼</strong>ä¸ºå ¼å®¹ä»¥åçæ¬ï¼æ¶æ¯ä¸æ¥åæ®µä¼æ¯ååºçåæ®µè¦å¤ï¼ä¸å±å¹³å°æ ¹æ®ä¸å¡æªåéè¦çåæ®µã</li><li><strong>容å¨å®ä¹ï¼</strong>åºç¨äºå车ãCTUç项ç®ä¸ï¼æç®±ãæçãè½½å ·é½å¯ç§°ä¸ºå®¹å¨ã</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>以ä¸åæ°ä¸ºæææ¥å£çéç¨åæ°ï¼æ¯æ¬¡è°ç¨æ¶éè¦æºå¸¦ï¼</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>æææ¥å£çååºé½éµå¾ªä»¥ä¸ç»ä¸æ ¼å¼ï¼</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>è§£å³æ¹æ¡</th></tr></thead><tbody><tr><td>200</td><td>æå</td><td>-</td></tr><tr><td>500</td><td>åæ°é误</td><td>æ£æ¥è¯·æ±åæ°æ¯å¦å®æ´åæ£ç¡®</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); } } // 导åºä¸ºMarkdown 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为Markdown let markdown = ''; // æææ¡£é¡ºåºå¤çææå ç´ 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') { // å¤ç代ç å 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('å¼å§çæMarkdownææ¡£, 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' + '**æ¥å£ä¸æ * çä¸ºå¸¸ç¨æ¥å£**ï¼åæ¥å¯¹æ¥æ¶ï¼åªéè¦è°é以䏿¥å£ï¼\n\n' + '- 1. çæä»»å¡å\n' + '- 2. åæ¶ä»»å¡å\n\n' + '**妿ä¸å±ç³»ç»éè¦æ¥æ¶ä»»å¡çæ§è¡ç¶æ**ï¼éè¦æä¾ä»¥ä¸æ¥å£ï¼ä¾è°åº¦ç³»ç»åè°ï¼\n\n' + '- 任塿§è¡éç¥æ¥å£\n\n' + '**è¶ æ¶è®¾ç½®ï¼** 䏿¬è°åº¦ç³»ç»è°ç¨ä¸å±ç³»ç»çæ¥å£ï¼è·åè¿æ¥è¶ æ¶æ¶é´é»è®¤ä¸º **30ç§**ï¼æ°æ®è¿åè¶ æ¶æ¶é´é»è®¤ä¸º **60ç§**ï¼è¶ æ¶æ åµä¸ï¼è°åº¦ç³»ç»ä¼è¿åè¿æ¥å¤±è´¥ã\n\n' + '## 对æ¥çº¦å®\n\n' + '- **ç»ä¸æ ¼å¼ï¼** 为æ¥å£ç»ä¸å¹¶å ¼å®¹ï¼ææçåæ°é½ä¸ºåç¬¦ä¸²æ ¼å¼ã\n' + '- **æ¯è¯çº¦å®ï¼** ææ¬æ¶åå°ç AGVãrobotãæºå¨äººæ¯è¯ãCTU为å䏿¯è¯ï¼ä¸è¦æ··æ·ã\n' + '- **çæ¬å ¼å®¹ï¼** ä¸ºå ¼å®¹ä»¥åçæ¬ï¼æ¶æ¯ä¸æ¥åæ®µä¼æ¯ååºçåæ®µè¦å¤ï¼ä¸å±å¹³å°æ ¹æ®ä¸å¡æªåéè¦çåæ®µã\n' + '- **容å¨å®ä¹ï¼** åºç¨äºå车ãCTUç项ç®ä¸ï¼æç®±ãæçãè½½å ·é½å¯ç§°ä¸ºå®¹å¨ã\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' + '| é误ç | 说æ | è§£å³æ¹æ¡ |\n' + '| --- | --- | --- |\n' + '| 200 | æå | - |\n' + '| 500 | åæ°é误 | æ£æ¥è¯·æ±åæ°æ¯å¦å®æ´åæ£ç¡® |\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); } } 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; } } zy-acs-cv/src/main/java/com/zy/asrs/controller/SiteController.java
@@ -75,7 +75,6 @@ } @PostMapping("/output/site") @ManagerAuth(memo = "ç«ç¹è®¾å¤æ¥ææ¥å¿è¾åº") public R siteOutput() { 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); 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()); 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 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); 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); } } } 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 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; } zy-acs-cv/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -111,8 +111,6 @@ } @Override public StaProtocol clone() { try { 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); 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); zy-acs-cv/src/main/java/com/zy/core/operation/handler/InOperationHandler.java
File was deleted 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 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> 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> 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'); 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 url: http://192.168.133.173:8181 #token: apiv3_Jx1SvmBMV_kikGhc4eZJQbeGmNYN7KX1GdpoR9MClkKzMxSJ0MPKM_O2Xt3o1hVyRikMmlxZ_h9zfy6ybC5Idg database: rcs token: apiv3_116RKycNhxbf62Nys4zthC05aRD-aidzhEpEpLtsFuedhJTaCtVklNrzHs9LHxBWMuzDclBHVgToGoQuWGiIIA