| 项目代码/BigScreen/package-lock.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/BigScreen/src/views/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS/WMSClient/src/main.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS/WMSClient/src/services/taskTimeout.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS/WMSClient/src/services/wcsTaskMonitor.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS/WMSClient/src/views/stock/ProStockView.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ÏîÄ¿´úÂë/BigScreen/package-lock.json
ÎļþÌ«´ó ÏîÄ¿´úÂë/BigScreen/src/views/index.vue
@@ -74,7 +74,7 @@ config: { header: [ '<span style="font-size:50px;">çº¸å·æ¡ç </span>', '<span style="font-size:50px;">å·¥åå·</span>', //'<span style="font-size:50px;">å·¥åå·</span>', '<span style="font-size:50px;">代ç </span>', '<span style="font-size:50px;">䏿ºä½</span>', '<span style="font-size:50px;">å®½å¹ </span>', @@ -83,22 +83,12 @@ ], data: [ [ '<span style="color:#FF4500; font-size:60px;">705010</span>', '<span style="color:#FF4500; font-size:60px;">015004</span>', '<span style="color:#FF4500; font-size:60px;">X2</span>', '<span style="color:#FF4500; font-size:60px;">1</span>', '<span style="color:#FF4500; font-size:60px;">1200</span>', '<span style="color:#FF4500; font-size:60px;;">4798</span>', '<span style="color:#FF4500; font-size:60px;">180</span>', ], [ '<span style="color:#FF4500; font-size:60px;">705010</span>', '<span style="color:#FF4500; font-size:60px;">015004</span>', '<span style="color:#FF4500; font-size:60px;">X2</span>', '<span style="color:#FF4500; font-size:60px;">2</span>', '<span style="color:#FF4500; font-size:60px;">1200</span>', '<span style="color:#FF4500; font-size:60px;;">4798</span>', '<span style="color:#FF4500; font-size:60px;">180</span>', '<span style="color:#FF4500; font-size:60px;">06D4BC6110</span>', '<span style="color:#FF4500; font-size:60px;">I0</span>', '<span style="color:#FF4500; font-size:60px;">ç³è½¦</span>', '<span style="color:#FF4500; font-size:60px;">2450</span>', '<span style="color:#FF4500; font-size:60px;">6976</span>', '<span style="color:#FF4500; font-size:60px;;">1597</span>', ], ], headerHeight: 60, @@ -218,7 +208,7 @@ // å建åå¹¶åçåæ¡è®°å½ var item = [ '<span style="color:#FF4500; font-size:90px;">' + palletCode + '</span>', '<span style="color:#FF4500; font-size:89px;">' + palletCode + '</span>', //'<span style="color:#FF4500; font-size:55px;">' + orderNos + '</span>', '<span style="color:#FF4500; font-size:90px;">' + firstItem.materielCode + '</span>', '<span style="color:#FF4500; font-size:90px;">' + machineLastChar + '</span>', @@ -245,7 +235,7 @@ evenRowBGC: "rgba(0, 0, 0, 0.6)", headerBGC: "rgba(0, 0, 0, 0.6)", waitTime: 5000, columnWidth: [550, 200, 250, 250, 250, 300], columnWidth: [560, 200, 250, 250, 250, 300], rowNum: 10, align: ["center", "center", "center", "center", "center", "center", "center"], }; ÏîÄ¿´úÂë/WMS/WMSClient/src/main.js
@@ -15,6 +15,8 @@ import emptyPalletWarning from './services/emptyPalletWarning' // å¼å ¥å ¨å±ä»»å¡è¶ æ¶æå¡ import taskTimeoutService from './services/taskTimeout' // å¼å ¥WCSä»»å¡å¼å¸¸çæ§æå¡ import wcsTaskMonitorService from './services/wcsTaskMonitor' @@ -79,8 +81,14 @@ emptyPalletWarning.init(app); // åå§åå ¨å±ä»»å¡è¶ æ¶æå¡ taskTimeoutService.init(app); // // åå§åWCSä»»å¡å¼å¸¸çæ§æå¡ // wcsTaskMonitorService.init(app); // å°ä»»å¡è¶ æ¶æå¡æè½½å°å ¨å±å±æ§ä¸ app.config.globalProperties.$taskTimeoutService = taskTimeoutService; // // å°WCSä»»å¡çæ§æå¡æè½½å°å ¨å±å±æ§ä¸ // app.config.globalProperties.$wcsTaskMonitorService = wcsTaskMonitorService; // å°ä»»å¡è¶ æ¶æå¡æè½½å°window对象ä¸ï¼æ¹ä¾¿å¨æ©å±ç»ä»¶ä¸è®¿é® window.$taskTimeoutService = taskTimeoutService; // // å°WCSä»»å¡çæ§æå¡æè½½å°window对象ä¸ï¼æ¹ä¾¿å¨æ©å±ç»ä»¶ä¸è®¿é® // window.$wcsTaskMonitorService = wcsTaskMonitorService; ÏîÄ¿´úÂë/WMS/WMSClient/src/services/taskTimeout.js
@@ -92,21 +92,19 @@ const globalObj = window.$global || {}; // å¤çæ¶æ¯å é¤é»è¾ï¼é置对åºä»»å¡ç宿¶å¨ const deletedMessages = globalObj.messageDeleted || []; const deletedMessages = [...(globalObj.messageDeleted || [])]; if (deletedMessages.length > 0) { const globalMessageList = globalObj.messageList || []; // æ¸ ç©ºå·²å¤ççå 餿¶æ¯å表ï¼é¿å éå¤å¤ç globalObj.messageDeleted = []; // éå被å é¤çæ¶æ¯IDï¼é置对åºä»»å¡ç宿¶å¨ deletedMessages.forEach(deletedId => { const deletedMessage = globalMessageList.find(msg => msg.id === deletedId); if (deletedMessage?.businessType === 'task_timeout' && deletedMessage.taskNum && this.taskStatusMap[deletedMessage.taskNum]) { this.taskStatusMap[deletedMessage.taskNum] = now; } // ä¸éè¦ä»messageList䏿¥æ¾ï¼å ä¸ºæ¶æ¯å·²ç»è¢«å é¤ // ç´æ¥å¤çä»»å¡ç¶æéç½® // è¿éä¸å任使ä½ï¼å ä¸ºæ¶æ¯å 餿¯ç¨æ·ä¸»å¨è¡ä¸º // æä»¬åªéè¦æ¸ 空messageDeletedæ°ç»å³å¯ }); // æ¸ ç©ºå·²å¤ççå 餿¶æ¯å表 globalObj.messageDeleted = []; } // è·åå½åææä»»å¡å·åç¶æ @@ -145,7 +143,7 @@ const globalObj = window.$global || {}; // è·åå ¨å±æ¶æ¯å表 const globalMessageList = globalObj.messageList || []; const globalMessageList = [...(globalObj.messageList || [])]; // æ¾åºéè¦æ¸ é¤çä»»å¡è¶ æ¶æ¶æ¯ const taskTimeoutMessages = globalMessageList.filter(msg => msg.businessType === 'task_timeout'); @@ -156,32 +154,29 @@ // æ£æ¥æ¡ä»¶ï¼ // 1. ä»»å¡ä¸å¨å½åä»»å¡å表ä¸ï¼å·²å®ææè¢«ç§»é¤ï¼ // 2. ä»»å¡å¨å½åä»»å¡å表ä¸ï¼ä½ç¶æå·²ä¸åæ¯å åæºæ§è¡ä¸ if (!currentTaskStatuses[taskNum] || currentTaskStatuses[taskNum] !== 210) { if (taskNum && (!currentTaskStatuses[taskNum] || currentTaskStatuses[taskNum] !== 210)) { // ä»»å¡å·²å®ææç¶æå·²æ¹åï¼æ¸ é¤è¯¥æ¶æ¯ this.handleDeleteTaskMessage(msg); } }); } // å¤çå é¤åä¸ªä»»å¡æ¶æ¯ handleDeleteTaskMessage(message) { // è·åå ¨å±å¯¹è±¡ const globalObj = window.$global || {}; // ç´æ¥ä»å ¨å±æ¶æ¯å表ä¸å é¤è¯¥æ¶æ¯ if (globalObj.messageList) { const index = globalObj.messageList.findIndex(msg => msg.id === message.id); // ä½è¦ç¡®ä¿åªå¨æ¶æ¯ä»ç¶å卿¶æå é¤ if (globalObj.messageList && Array.isArray(globalObj.messageList)) { const index = globalObj.messageList.findIndex(m => m.id === msg.id); if (index !== -1) { globalObj.messageList.splice(index, 1); } } } }); } // åéä»»å¡è¦åæ¶æ¯ sendTaskWarningMessage(task, duration) { // å建å¯ä¸çæ¶æ¯ID const messageId = Date.now() + Math.random().toString(36).substr(2, 9); // å建è¦åæ¶æ¯ const warningMessage = { id: Date.now(), id: messageId, title: 'ä»»å¡å¼å¸¸è¦å', message: `ä»»å¡å· ${task.taskNum} å·²å¨å åæºæ§è¡ä¸ç¶æè¶ è¿${Math.round(duration)}åéï¼è¯·åæ¶å¤çï¼`, type: 'warning', @@ -206,7 +201,6 @@ try { if (globalObj.messageList) { globalObj.messageList.push(warningMessage); } } catch (error) { // åºéæ¶ä½¿ç¨æµè§å¨åçalertä½ä¸ºæç»å¤é ÏîÄ¿´úÂë/WMS/WMSClient/src/services/wcsTaskMonitor.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,218 @@ // WCSç³»ç»ä»»å¡å¼å¸¸çæ§æå¡ import http from '../api/http'; // WCSä»»å¡å¼å¸¸çæ§æå¡ç±» class WcsTaskMonitorService { constructor() { this.checkTaskStatusTimer = null; this.apiTaskData = []; // åå¨éè¿APIè·åç任塿°æ® this.apiRefreshTimer = null; // APIæ°æ®å·æ°å®æ¶å¨ this.apiRefreshInterval = 5000; // APIæ°æ®å·æ°é´éï¼5ç§ } // åå§åWCSä»»å¡å¼å¸¸çæ§æå¡ init(app) { // è®¾ç½®å®æ¶å¨ï¼æ¯5ç§æ£æ¥ä¸æ¬¡ this.checkTaskStatusTimer = setInterval(() => { this.checkTaskExceptions(); }, 5000); // 设置APIæ°æ®å·æ°å®æ¶å¨ï¼æ¯5ç§å·æ°ä¸æ¬¡ä»»å¡æ°æ® this.apiRefreshTimer = setInterval(() => { this.refreshTaskDataFromApi(); }, this.apiRefreshInterval); // åå§å·æ°ä¸æ¬¡ä»»å¡æ°æ® this.refreshTaskDataFromApi(); // ä¿å宿¶å¨å¼ç¨ï¼æ¹ä¾¿åç»æ¸ ç if (app && app.config) { app.config.globalProperties.$global.wcsTaskMonitorTimer = this.checkTaskStatusTimer; app.config.globalProperties.$global.wcsTaskMonitorApiTimer = this.apiRefreshTimer; } // æ¹ä¾¿æå¨æµè¯ï¼å°checkæ¹æ³æè½½å°window对象 window.testWcsTaskMonitor = () => { this.checkTaskExceptions(); }; } // ä»APIå·æ°ä»»å¡æ°æ® async refreshTaskDataFromApi() { try { // è°ç¨WCSä¸é¨çAPIè·åå¼å¸¸ä»»å¡æ°æ® const apiData = await http.post('http://localhost:9291/api/Task/GetTasksWithException', {}); if (apiData && apiData.data) { this.apiTaskData = apiData.data; } else { this.apiTaskData = []; } } catch (error) { console.error('ä»APIè·åå¼å¸¸ä»»å¡æ°æ®å¤±è´¥:', error); this.apiTaskData = []; } } // æ£æ¥ä»»å¡å¼å¸¸ checkTaskExceptions() { // ç´æ¥ä½¿ç¨ä»APIè·åçå¼å¸¸ä»»å¡æ°æ® const exceptionTasks = this.apiTaskData || []; // å»éï¼ç¡®ä¿æ¯ä¸ªä»»å¡åªå¤ç䏿¬¡ const uniqueExceptionTasks = []; const taskNumSet = new Set(); exceptionTasks.forEach(task => { if (task && task.taskNum && !taskNumSet.has(task.taskNum)) { uniqueExceptionTasks.push(task); taskNumSet.add(task.taskNum); } }); // è·åå ¨å±å¯¹è±¡ const globalObj = window.$global || {}; // å¤çæ¶æ¯å é¤é»è¾ï¼é置对åºä»»å¡çå¼å¸¸æ è®° const deletedMessages = [...(globalObj.messageDeleted || [])]; if (deletedMessages.length > 0) { // éå被å é¤çæ¶æ¯IDï¼é置对åºä»»å¡çå¼å¸¸æ è®° deletedMessages.forEach(deletedId => { // ç´æ¥éåææå·²å¤ççå¼å¸¸ä»»å¡ // å ä¸ºæ¶æ¯å¯è½å·²ç»è¢«ä»messageListä¸å é¤ for (const taskNum of this.processedExceptions) { // è¿éä¸ä¾èµmessageListï¼ç´æ¥éç½®ææå¯è½çä»»å¡ // ç¡®ä¿å é¤åè½éæ°åéæ¶æ¯ this.processedExceptions.delete(taskNum); } }); // æ¸ ç©ºå·²å¤ççå 餿¶æ¯å表ï¼é¿å éå¤å¤ç globalObj.messageDeleted = []; } // å¤çå¼å¸¸ä»»å¡ uniqueExceptionTasks.forEach(task => { // ä¸ç®¡æ¯å¦å·²ç»å¤çè¿ï¼åªè¦ä»»å¡å¨å¼å¸¸å表ä¸ï¼å°±åéæ¶æ¯ // è¿æ ·ç¡®ä¿å é¤åè½éæ°åéæ¶æ¯ this.sendTaskExceptionMessage(task); // ä¸éè¦æ·»å å°processedExceptionsï¼å 为æä»¬ä¸å使ç¨å®æ¥é»æ¢éå }); // æ¸ é¤å·²è§£å³çä»»å¡å¼å¸¸æ¶æ¯ this.clearResolvedTaskExceptionMessages(uniqueExceptionTasks); } // æ¸ é¤å·²è§£å³çä»»å¡å¼å¸¸æ¶æ¯ clearResolvedTaskExceptionMessages(currentExceptionTasks) { // è·åå ¨å±å¯¹è±¡ const globalObj = window.$global || {}; // è·åå ¨å±æ¶æ¯å表 const globalMessageList = [...(globalObj.messageList || [])]; // æ¾åºéè¦æ¸ é¤çä»»å¡å¼å¸¸æ¶æ¯ const taskExceptionMessages = globalMessageList.filter(msg => msg.businessType === 'wcs_task_exception'); // æå»ºå½åå¼å¸¸ä»»å¡éå const currentExceptionTaskNums = new Set(); currentExceptionTasks.forEach(task => { if (task && task.taskNum) { currentExceptionTaskNums.add(task.taskNum); } }); // éåææä»»å¡å¼å¸¸æ¶æ¯ taskExceptionMessages.forEach(msg => { const taskNum = msg.taskNum; // æ£æ¥ä»»å¡æ¯å¦ä¸å¨å½åå¼å¸¸ä»»å¡å表ä¸ï¼è¯´æå¼å¸¸å·²è§£å³ï¼ if (taskNum && !currentExceptionTaskNums.has(taskNum)) { // ä»»å¡å¼å¸¸å·²è§£å³ï¼æ¸ é¤è¯¥æ¶æ¯ if (globalObj.messageList && Array.isArray(globalObj.messageList)) { const index = globalObj.messageList.findIndex(m => m.id === msg.id); if (index !== -1) { globalObj.messageList.splice(index, 1); } } } }); } // åéä»»å¡å¼å¸¸æ¶æ¯ sendTaskExceptionMessage(task) { // å建å¯ä¸çæ¶æ¯ID const messageId = Date.now() + Math.random().toString(36).substr(2, 9); // è·åå¼å¸¸æè¿°ï¼ç¡®ä¿ä¸ä¸ºç©º const exceptionDescription = task.ExceptionMessage || 'æªç¥å¼å¸¸'; // å建å¼å¸¸æ¶æ¯ const exceptionMessage = { id: messageId, title: 'ä»»å¡å¼å¸¸è¦å', message: `ä»»å¡å· ${task.taskNum} åºç°å¼å¸¸ï¼${exceptionDescription}ï¼è¯·åæ¶å¤çï¼`, type: 'error', businessType: 'wcs_task_exception', taskNum: task.taskNum, createTime: new Date().toLocaleString(), relatedData: { TaskNum: task.taskNum, ExceptionMessage: exceptionDescription, CreateDate: task.createDate } }; // è·åå ¨å±å¯¹è±¡ const globalObj = window.$global || {}; // æ£æ¥æ¯å¦å·²ç»åå¨ç¸åçä»»å¡å¼å¸¸è¦å const globalMessageList = globalObj.messageList || []; const hasExistingWarning = globalMessageList.some(msg => msg.businessType === 'wcs_task_exception' && msg.taskNum === task.taskNum ); if (hasExistingWarning) return; // åéæ¶æ¯å°å ¨å±æ¶æ¯å表 try { if (globalObj.messageList) { globalObj.messageList.push(exceptionMessage); } } catch (error) { // åºéæ¶ä½¿ç¨æµè§å¨åçalertä½ä¸ºæç»å¤é try { alert(`ä»»å¡å¼å¸¸è¦å: ä»»å¡å· ${task.taskNum} åºç°å¼å¸¸ï¼${exceptionDescription}ï¼è¯·åæ¶å¤çï¼`); } catch (e) { // å¿½ç¥ææé误 } } } // æå¨æ£æ¥ä»»å¡å¼å¸¸ï¼ç¨äºå¤é¨è°ç¨ï¼ manualCheckTaskExceptions() { this.checkTaskExceptions(); } // æ¸ çèµæº cleanup() { if (this.checkTaskStatusTimer) { clearInterval(this.checkTaskStatusTimer); this.checkTaskStatusTimer = null; } if (this.apiRefreshTimer) { clearInterval(this.apiRefreshTimer); this.apiRefreshTimer = null; } this.apiTaskData = []; delete window.testWcsTaskMonitor; } } // å建åä¾å®ä¾ const wcsTaskMonitorService = new WcsTaskMonitorService(); export default wcsTaskMonitorService; ÏîÄ¿´úÂë/WMS/WMSClient/src/views/stock/ProStockView.vue
@@ -48,6 +48,7 @@ { title: "åºåç¶æ", field: "stockStatus",type: "selectList",dataKey: "stockStatusEmun",data: [],}, ], [ { title: "è´§ä½ç¼å·", field: "locationCode", type: "like" }, { title: "æå±ä»åº", field: "warehouseId",type: "select",dataKey: "warehouses",data: []}, { title: "åºå屿§", field: "proStockAttribute" ,type: "selectList",dataKey: "proStockAttributeEnum",data: [],}, { title: "å建æ¶é´", field: "createDate",type: "datetime",}, @@ -269,6 +270,13 @@ align: "left", }, { field: "productNo", title: "ç©ææ¡ç ", type: "string", width: 150, align: "left", }, { field: "lotNumber", title: "ç©ææ¹å·", type: "string",