当前位置: 首页 > 工具软件 > ng-nest > 使用案例 >

Nest定时任务推送数据升序等待N秒然后降序

秦建元
2023-12-01

Nest定时递增到一定数值等待N秒再降序

需求:

1秒推送一次水闸的信息,其中控制水闸开合度的那个字段nz_kaihedu,0-8为抬起闸门、8-0为降下闸门;当闸门升起的时候等待5秒之后降下闸门;

实现技术:

Nest.js、@nestjs/schedule 、typeorm

实现代码:

  offset = 1;
  delay1 = 0;
  delay2 = 0;  
@Cron('* * * * * *')  //1秒执行一次
  async handleCron() {
    // 闸门移动米数
    const step = 1;    
    // 闸门上升至顶部暂停秒数
    const delay11 = 5;
     // 闸门下降至底部暂停秒数
     const delay22 = 10;

    if (this.wz_kaihedu >= 12) {
      this.offset = -step;
        
      this.delay1++;
        
      if (this.delay1 <= delay11) {
        return;
      } else {
        this.delay1 = 0;
      }
    } else if (this.wz_kaihedu <= 0) {
      this.offset = step;
        
      this.delay2++;
      if (this.delay2 <= delay22) {
        return;
      } else {
        this.delay2 = 0;
      }
    }

    if (this.wz_kaihedu <= 12) {
      this.wz_kaihedu += this.offset;
      this.nz_kaihedu += this.offset;
    } else {
      this.wz_kaihedu -= this.offset;
      this.nz_kaihedu -= this.offset;
    }

    // 水闸状态模拟数据,定时插入数据库
    await this.saveSzkh();
  }


 private async saveSzkh() {
    const sluice = {
      // 外闸数据
      wz_kaihedu: this.wz_kaihedu,
      wz_status: this.wz_kaihedu > 0 ? '打开' : '关闭',
      wz_statusnum: this.wz_kaihedu > 0 ? 1 : 0,

      // 内闸数据
      nz_kaihedu: this.nz_kaihedu,
      nz_status: this.nz_kaihedu > 0 ? '打开' : '关闭',
      nz_statusnum: this.nz_kaihedu > 0 ? 1 : 0,
    };
     // 插入数据库
    await this.szkhRepository.insert(sluice);
  }
 类似资料: