auto_task2.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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 AutoTask2() 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. err2 := dao.RechargeRecordDao{}.UpdateRechargeFailedList(noPayIds)
  46. if err2 != nil {
  47. log.Println("UpdateRechargeFailedList", err2)
  48. }
  49. log.Println("AutoCheckWXRechargeTask running End, Time :", time.Now())
  50. }