liulijun
2026-03-25 2403e0b0a127278d40e2fc780311d93262bef52c
ÏîÄ¿´úÂë/WMS/WMSClient/src/extension/taskinfo/task.js
@@ -95,186 +95,7 @@
        }
      }
      // åˆå§‹åŒ–任务状态检查定时器
      this.taskStatusMap = {}; // å­˜å‚¨ä»»åŠ¡çŠ¶æ€å¼€å§‹æ—¶é—´
      this.taskTimeoutMinutes = 10; // ä»»åŠ¡è¶…æ—¶æ—¶é—´ï¼Œå•ä½ä¸ºåˆ†é’Ÿ
      this.checkTaskStatusTimer = setInterval(() => {
        this.checkTaskStatus();
      }, 1000); // æ¯1秒检查一次,提高检查精度,减少延迟
    },
    // æ£€æŸ¥ä»»åŠ¡çŠ¶æ€
    checkTaskStatus() {
      // èŽ·å–å½“å‰æ‰€æœ‰ä»»åŠ¡æ•°æ®
      const taskData = this.$refs.table?.rowData || this.$refs.table?.tableData || [];
      const now = new Date();
      // èŽ·å–å…¨å±€å¯¹è±¡å’Œstore
      const globalObj = this.$global || window.$global || {};
      const store = this.$store || window.$store;
      // å¤„理消息删除逻辑,重置对应任务的定时器
      const deletedMessages = globalObj.messageDeleted || [];
      if (deletedMessages.length > 0) {
        const storeMessageList = store?.state?.messageList || [];
        // éåŽ†è¢«åˆ é™¤çš„æ¶ˆæ¯ID,重置对应任务的定时器
        deletedMessages.forEach(deletedId => {
          const deletedMessage = storeMessageList.find(msg => msg.id === deletedId);
          if (deletedMessage?.businessType === 'task_timeout' && deletedMessage.taskNum && this.taskStatusMap[deletedMessage.taskNum]) {
            this.taskStatusMap[deletedMessage.taskNum] = now;
          }
        });
        // æ¸…空已处理的删除消息列表
        globalObj.messageDeleted = [];
      }
      // èŽ·å–å½“å‰æ‰€æœ‰ä»»åŠ¡å·å’ŒçŠ¶æ€
      const currentTaskStatuses = {};
      taskData.forEach(task => {
        currentTaskStatuses[task.taskNum] = task.taskStatus;
      });
      // æ£€æŸ¥ä»»åŠ¡çŠ¶æ€
      taskData.forEach(task => {
        if (task.taskStatus === 210) {
          // å †åž›æœºæ‰§è¡Œä¸­çŠ¶æ€
          if (!this.taskStatusMap[task.taskNum]) {
            this.taskStatusMap[task.taskNum] = now;
          } else {
            // è®¡ç®—持续时间(分钟)
            const duration = (now - this.taskStatusMap[task.taskNum]) / 60000;
            if (duration >= this.taskTimeoutMinutes) {
              this.sendTaskWarningMessage(task, duration);
              delete this.taskStatusMap[task.taskNum];
            }
          }
        } else {
          // ä»»åŠ¡çŠ¶æ€å·²æ”¹å˜ï¼Œæ¸…é™¤è®°å½•
          delete this.taskStatusMap[task.taskNum];
        }
      });
      // æ¸…除已解决的任务超时消息
      this.clearResolvedTaskMessages(currentTaskStatuses);
    },
    // æ¸…除已解决的任务超时消息
      clearResolvedTaskMessages(currentTaskStatuses) {
        // èŽ·å–å…¨å±€å¯¹è±¡å’Œstore
        const globalObj = this.$global || window.$global || {};
        const store = this.$store || window.$store;
        // èŽ·å–æ‰€æœ‰æ¶ˆæ¯åˆ—è¡¨
        const globalMessageList = globalObj.messageList || [];
        const storeMessageList = store?.state?.messageList || [];
        // åˆå¹¶æ‰€æœ‰æ¶ˆæ¯ï¼Œæ‰¾å‡ºéœ€è¦æ¸…除的任务超时消息
        const allMessages = [...globalMessageList, ...storeMessageList];
        const taskTimeoutMessages = allMessages.filter(msg => msg.businessType === 'task_timeout');
        // éåŽ†æ‰€æœ‰ä»»åŠ¡è¶…æ—¶æ¶ˆæ¯
        taskTimeoutMessages.forEach(msg => {
          const taskNum = msg.taskNum;
          // æ£€æŸ¥æ¡ä»¶ï¼š
          // 1. ä»»åŠ¡ä¸åœ¨å½“å‰ä»»åŠ¡åˆ—è¡¨ä¸­ï¼ˆå·²å®Œæˆæˆ–è¢«ç§»é™¤ï¼‰
          // 2. ä»»åŠ¡åœ¨å½“å‰ä»»åŠ¡åˆ—è¡¨ä¸­ï¼Œä½†çŠ¶æ€å·²ä¸å†æ˜¯å †åž›æœºæ‰§è¡Œä¸­
          if (!currentTaskStatuses[taskNum] || currentTaskStatuses[taskNum] !== 210) {
            // ä»»åŠ¡å·²å®Œæˆæˆ–çŠ¶æ€å·²æ”¹å˜ï¼Œæ¸…é™¤è¯¥æ¶ˆæ¯
            this.handleDeleteTaskMessage(msg);
          }
        });
      },
    // å¤„理删除单个任务消息
    handleDeleteTaskMessage(message) {
      // èŽ·å–å…¨å±€å¯¹è±¡å’Œstore
      const globalObj = this.$global || window.$global || {};
      const store = this.$store || window.$store;
      // ä»Žå…¨å±€æ¶ˆæ¯åˆ—表中删除该消息
      if (globalObj.messageList) {
        const index = globalObj.messageList.findIndex(msg => msg.id === message.id);
        if (index !== -1) {
          globalObj.messageList.splice(index, 1);
        }
      }
      // ä»Žstore中删除该消息
      if (store) {
        store.commit('removeMessage', message.id);
      }
    },
    // å‘送任务警告消息
    sendTaskWarningMessage(task, duration) {
      // åˆ›å»ºè­¦å‘Šæ¶ˆæ¯
      const warningMessage = {
        id: Date.now(),
        title: '任务异常警告',
        message: `任务号 ${task.taskNum} å·²åœ¨å †åž›æœºæ‰§è¡Œä¸­çŠ¶æ€è¶…è¿‡${Math.round(duration)}分钟,请及时处理!`,
        type: 'warning',
        businessType: 'task_timeout',
        taskNum: task.taskNum,
        createTime: new Date().toLocaleString()
      };
      // èŽ·å–å…¨å±€å¯¹è±¡å’Œstore,检查是否存在相同的警告消息
      const globalObj = this.$global || window.$global || {};
      const store = this.$store || window.$store;
      const globalMessageList = globalObj.messageList || [];
      const storeMessageList = store?.state?.messageList || [];
      // æ£€æŸ¥æ˜¯å¦å·²ç»å­˜åœ¨ç›¸åŒçš„任务超时警告
      const hasExistingWarning = [...globalMessageList, ...storeMessageList].some(msg =>
        msg.businessType === 'task_timeout' && msg.taskNum === task.taskNum
      );
      if (hasExistingWarning) return;
      // å‘送消息到消息列表
      try {
        // æ·»åŠ æ¶ˆæ¯åˆ°store
        const $store = this.$store || window.$store;
        if ($store) {
          $store.commit('addMessage', warningMessage);
        }
        // æ·»åŠ æ¶ˆæ¯åˆ°å…¨å±€æ¶ˆæ¯åˆ—è¡¨
        if (globalObj.messageList) {
          globalObj.messageList.push(warningMessage);
        }
        // æ˜¾ç¤ºè­¦å‘Šå¯¹è¯æ¡†ï¼Œä¼˜å…ˆä½¿ç”¨$alert
        // const $global = this.$global || window.$global;
        // const alertOptions = {
        //   confirmButtonText: '确定',
        //   type: warningMessage.type,
        //   closeOnClickModal: false,
        //   closeOnPressEscape: false,
        //   showCancelButton: false
        // };
        // if (this.$alert || window.$alert) {
        //   const $alert = this.$alert || window.$alert;
        //   $alert(warningMessage.message, warningMessage.title, alertOptions);
        // } else if (this.$confirm || window.$confirm) {
        //   const $confirm = this.$confirm || window.$confirm;
        //   $confirm(warningMessage.message, warningMessage.title, alertOptions);
        // } else {
        //   // ä½¿ç”¨æµè§ˆå™¨åŽŸç”Ÿalert作为备选
        //   alert(`${warningMessage.title}: ${warningMessage.message}`);
        // }
      } catch (error) {
        // å‡ºé”™æ—¶ä½¿ç”¨æµè§ˆå™¨åŽŸç”Ÿalert作为最终备选
        try {
          alert(`任务异常警告: ä»»åŠ¡å· ${task.taskNum} å·²åœ¨å †åž›æœºæ‰§è¡Œä¸­çŠ¶æ€è¶…è¿‡${Math.round(duration)}分钟,请及时处理!`);
        } catch (e) {
          // å¿½ç•¥æ‰€æœ‰é”™è¯¯
        }
      }
      // ä¸å†éœ€è¦æ³¨å†Œä»»åŠ¡æ•°æ®æºï¼Œå…¨å±€ä»»åŠ¡è¶…æ—¶æœåŠ¡å·²æ”¹ä¸ºç›´æŽ¥ä»ŽAPI获取数据
    },
    onInited() {
      //框架初始化配置后
@@ -288,24 +109,6 @@
    },
    searchAfter(result) {
      // æŸ¥è¯¢åŽï¼Œresult返回的查询数据,可以在显示到表格前处理表格的值
      // å¤„理任务列表刷新后的任务超时消息清理
      // æå–当前任务状态
      const currentTaskStatuses = {};
      if (result && Array.isArray(result)) {
        result.forEach(task => {
          currentTaskStatuses[task.taskNum] = task.taskStatus;
        });
      } else if (result && result.result && Array.isArray(result.result)) {
        // å¤„理分页返回的数据格式
        result.result.forEach(task => {
          currentTaskStatuses[task.taskNum] = task.taskStatus;
        });
      }
      // æ¸…除已解决的任务超时消息
      this.clearResolvedTaskMessages(currentTaskStatuses);
      return true;
    },
    addBefore(formData) {
@@ -327,6 +130,11 @@
      //(3)this.editFormFields.字段='xxx';
      //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看:console.log(this.editFormOptions)
    },
    // ç»„件销毁时清理资源
    onDestroyed() {
      // ä¸å†éœ€è¦æ¸…理任务数据源,全局任务超时服务已改为直接从API获取数据
    }
  }
};