package cron import ( "Cold_GoodsOrder/Nats/NatsServer" "Cold_GoodsOrder/models/Function" "github.com/beego/beego/v2/adapter/orm" beego "github.com/beego/beego/v2/server/web" "github.com/robfig/cron/v3" "time" ) func Cron_WarningRate() { // 创建一个定时任务对象 c := cron.New(cron.WithSeconds()) // 给对象增加定时任务 // @daily 每日运行一次 corn, _ := beego.AppConfig.String("corn") c.AddFunc(corn, CronUpdateOrderState) // 启动定时任务 c.Start() defer c.Stop() // 查询语句,阻塞,让main函数不退出,保持程序运行 select {} } func CronUpdateOrderState() { var err error o := orm.NewOrm() defer func() { if err != nil { o.Rollback() } else { o.Commit() } }() var orders []Function.Order _, err = o.Raw("SELECT * FROM `order` WHERE t__state = ? OR t__state = ?", 1, 2).QueryRows(&orders) for _, v := range orders { d, _ := NatsServer.ReadDeviceByT_sn(v.T_sn) if len(d.T_sn) != 0 { // 监控状态 0 未监控 1 监控 if v.T_State == 1 && d.T_monitor == 1 { v.T_State = 2 // 更新状态为在途 v.T_start_Ut = time.Now() // 更新订单状态到数据库 _, err = o.Update(&v, "t__state", "t_start__ut") Function.Redis_Order_Set(v) } else if v.T_State == 2 && !v.T_start_Ut.IsZero() && d.T_monitor == 0 { v.T_State = 3 // 更新状态为已完成 v.T_end_Ut = time.Now() // 更新订单状态到数据库 _, err = o.Update(&v, "t__state", "t_end__ut") Function.Redis_Order_Set(v) } } } }