eggjs 定时任务实战

作用:定时处理一些事务

例子:每5分钟关闭一批超时未支付的的订单

先看结果

在这里插入图片描述

定时器

路径:app/schedule/closeOrder.js

// 关闭超时未支付的订单
module.exports = {
    
    
  schedule: {
    
    
    interval: '5m',
    type: 'all', 
  },
  async task(ctx) {
    
    
    let now = new Date()
    console.log('定时器-关闭过期的订单---', now);
    await ctx.service.order.closeOverTimeOrder();
  },
};

服务

const {
    
    Op} = require('sequelize')
const Service = require('egg').Service;

class OrderService extends Service {
    
    
  // 关闭超时未支付的订单
  async closeOverTimeOrder() {
    
    
    let orders = await this.app.model.Order.findAll({
    
    where:{
    
    
      status:1,
      over_time: {
    
    
        [Op.lte]: new Date()
      }
    }, raw: true});
    console.log('orders----: ', orders);
    if(orders.length>0){
    
    
      for(let i=0;i<orders.length;i++){
    
    
        await this.app.model.Order.update({
    
    status: 2}, {
    
    where: {
    
    id: orders[i].id}})
      }
    }
  }  
}
module.exports = OrderService;

注意点:

  1. 新建或修改定时器需要重启项目

至此大功告成
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u012570307/article/details/127497311