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

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);
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值