angular中轮训查任务

  // 查状态
  checkStatus(test_plan_info): void {
    const selectData = test_plan_info;
    // 过滤出和this.modelData中和test_plan_info中test_application_sample_no相等的数据
    const modelDataCopy = this.modelData.filter((v) => {
      return selectData.some((item) => item.test_application_sample_no === v.test_application_sample_no && v.file_info.length > 0);
    });
    console.log(modelDataCopy,'modelDataCopy');
    interval(10000)
      .pipe(
        takeUntil(this.stopPolling$),
        mergeMap(() => modelDataCopy),
        mergeMap(async (item) =>
          this.callApi({
            inspection_no: item.inspection_no,
            analysis_model_no: item.analysis_model_no,
            test_application_sample_no: item.test_application_sample_no,
          })
        )
      )
      .subscribe((result) => {
        // 0:未开始 1:进行中 2:成功 3:失败 const status =  result.callApiRes.model_list[0].analysis_state
        //  selectData 如果有成功的,则对应改变selectData的状态,和删除this.modelData中的数据
        const analysis_status = result.callApiRes.model_list[0].analysis_state;
        const analysis_msg = result.callApiRes.model_list[0].analysis_msg;
        for (const item of selectData) {
          if (
            item.test_application_sample_no === result.test_application_sample_no &&
            analysis_status === '2'
          ) {
            item['pass'] = true;
            item['analysis_msg'] = analysis_msg;
          }
          if (
            item.test_application_sample_no === result.test_application_sample_no &&
            analysis_status === '3'
          ) {
            const hasPass = 'pass' in item;
            if (!hasPass) {
              item['pass'] = false;
              item['analysis_msg'] = analysis_msg;
            }
          }
        }
        // 判断selectData的每一个数据是否都包含pass属性,如果都包含,则停止轮询
        const isAllPass = selectData.every((item) => 'pass' in item);
        if (isAllPass) {
          this.stopPolling$.next();
          this.submitDataContain(selectData);
        }
      });
    // 在15分钟后停止轮询
    setTimeout(() => {
      this.stopPolling$.next();
      this.submitDataContain(selectData);
    }, 15 * 60 * 1000);
  }

  async callApi(value) {
    return await this.testTaskImplementService
      .getEchartsInfo({
        model_list: [
          {
            inspection_no: value.inspection_no ? value.inspection_no : this.inspection_no,
            analysis_model_no: value.analysis_model_no,
          },
        ],
      })
      .then((res) => {
        return {
          test_application_sample_no: value.test_application_sample_no,
          callApiRes: res,
        };
      });
  }

 

posted @ 2023-05-23 09:17  宇智波copy  阅读(16)  评论(0编辑  收藏  举报