corn.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package cron
  2. import (
  3. "Cold_GoodsOrder/Nats/NatsServer"
  4. "Cold_GoodsOrder/models/Function"
  5. "github.com/beego/beego/v2/adapter/orm"
  6. beego "github.com/beego/beego/v2/server/web"
  7. "github.com/robfig/cron/v3"
  8. "time"
  9. )
  10. func Cron_WarningRate() {
  11. // 创建一个定时任务对象
  12. c := cron.New(cron.WithSeconds())
  13. // 给对象增加定时任务
  14. // @daily 每日运行一次
  15. corn, _ := beego.AppConfig.String("corn")
  16. c.AddFunc(corn, CronUpdateOrderState)
  17. // 启动定时任务
  18. c.Start()
  19. defer c.Stop()
  20. // 查询语句,阻塞,让main函数不退出,保持程序运行
  21. select {}
  22. }
  23. func CronUpdateOrderState() {
  24. var err error
  25. o := orm.NewOrm()
  26. defer func() {
  27. if err != nil {
  28. o.Rollback()
  29. } else {
  30. o.Commit()
  31. }
  32. }()
  33. var orders []Function.Order
  34. _, err = o.Raw("SELECT * FROM `order` WHERE t__state = ? OR t__state = ?", 1, 2).QueryRows(&orders)
  35. for _, v := range orders {
  36. d, _ := NatsServer.ReadDeviceByT_sn(v.T_sn)
  37. if len(d.T_sn) != 0 {
  38. // 监控状态 0 未监控 1 监控
  39. if v.T_State == 1 && d.T_monitor == 1 {
  40. v.T_State = 2 // 更新状态为在途
  41. v.T_start_Ut = time.Now()
  42. // 更新订单状态到数据库
  43. _, err = o.Update(&v, "t__state", "t_start__ut")
  44. Function.Redis_Order_Set(v)
  45. } else if v.T_State == 2 && !v.T_start_Ut.IsZero() && d.T_monitor == 0 {
  46. v.T_State = 3 // 更新状态为已完成
  47. v.T_end_Ut = time.Now()
  48. // 更新订单状态到数据库
  49. _, err = o.Update(&v, "t__state", "t_end__ut")
  50. Function.Redis_Order_Set(v)
  51. }
  52. }
  53. }
  54. }