redpacket_expire.go 953 B

1234567891011121314151617181920212223242526272829303132333435
  1. package tasks
  2. import (
  3. "app/commons/core"
  4. "app/commons/services"
  5. "app/telegram"
  6. "github.com/robfig/cron/v3"
  7. )
  8. // StartRedPacketExpireTask 在 API 进程中启动红包过期检查定时任务
  9. func StartRedPacketExpireTask() {
  10. c := cron.New(cron.WithSeconds())
  11. // 每30秒检查一次过期红包
  12. _, err := c.AddFunc("*/30 * * * * *", checkExpiredRedPackets)
  13. if err != nil {
  14. core.Log.Errorf("注册红包过期检查任务失败: %v", err)
  15. return
  16. }
  17. c.Start()
  18. core.Log.Info("红包过期检查定时任务已启动 (每30秒)")
  19. }
  20. func checkExpiredRedPackets() {
  21. svc := &services.RedPacketService{}
  22. // 结算过期红包(数据库操作),返回需要编辑的 Telegram 消息列表
  23. editList := svc.ProcessExpiredPackets()
  24. // 在 tasks 层调用 telegram 包编辑消息(避免 services -> telegram 循环依赖)
  25. for _, info := range editList {
  26. telegram.EditExpiredMessage(info.ChatID, info.MessageID, info.Text)
  27. }
  28. }