auto_task_recharge.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package schedule
  2. import (
  3. "github.com/robfig/cron/v3"
  4. "github.com/sirupsen/logrus"
  5. "log"
  6. "time"
  7. "youngee_b_api/app/dao"
  8. "youngee_b_api/app/service"
  9. )
  10. func AutoTaskRecharge() error {
  11. // 新建一个定时任务对象
  12. crontab := cron.New(cron.WithSeconds()) // 精确到秒
  13. spec := "0 */2 * * * ?" //cron表达式
  14. // 定时任务 检查微信支付是否充值成功
  15. _, err1 := crontab.AddFunc(spec, AutoCheckWXRechargeTask)
  16. if err1 != nil {
  17. return err1
  18. }
  19. // 启动定时器
  20. crontab.Start()
  21. // 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
  22. //select {} //阻塞主线程停止
  23. return nil
  24. }
  25. // 定时任务 检查微信支付是否充值成功
  26. func AutoCheckWXRechargeTask() {
  27. log.Println("AutoCheckWXRechargeTask running Start, Time :", time.Now())
  28. rechargeRecords, err := dao.RechargeRecordDao{}.GetWXRechargeByStatusList(1)
  29. if err != nil {
  30. log.Println("GetWXRechargeByStatusList", err)
  31. }
  32. var rechargeId string
  33. var noPayIds []int64
  34. for _, rechargeRecord := range rechargeRecords {
  35. rechargeId = rechargeRecord.RechargeID
  36. tradeState, err := service.RechargeService{}.QueryOrderByTradeId(rechargeRecord.EnterpriseID, rechargeRecord.SubAccountId, rechargeId)
  37. if err != nil {
  38. logrus.Errorf("AutoCheckWXRechargeTask [QueryOrderByTradeId] call Show err:%+v\n", err)
  39. }
  40. // 支付成功的状态会在方法里更新,未支付的需要单独更新
  41. if "NOTPAY" == tradeState {
  42. noPayIds = append(noPayIds, rechargeRecord.ID)
  43. }
  44. }
  45. if len(noPayIds) > 0 {
  46. err2 := dao.RechargeRecordDao{}.UpdateRechargeFailedList(noPayIds)
  47. if err2 != nil {
  48. log.Println("UpdateRechargeFailedList", err2)
  49. }
  50. }
  51. log.Println("AutoCheckWXRechargeTask running End, Time :", time.Now())
  52. }