autorenew.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package service
  2. import (
  3. "context"
  4. "encoding/json"
  5. "go-common/app/job/main/vip/model"
  6. "go-common/library/log"
  7. )
  8. func (s *Service) autoRenewPay(c context.Context, n *model.VipUserInfoMsg, o *model.VipUserInfoMsg) (err error) {
  9. // wechat autorenew 扣款重放条件:
  10. // 1.自动续费用户
  11. // 2.非IAP支付方式
  12. // 3.用户状态发生变化
  13. // 4.旧状态为未过期
  14. // 5.新状态为过期
  15. // 6.新旧类型都是不是NotVip type
  16. if n.IsAutoRenew == model.AutoRenew &&
  17. o.IsAutoRenew == model.AutoRenew &&
  18. n.PayChannelID != model.IAPChannelID &&
  19. o.PayChannelID != model.IAPChannelID &&
  20. n.Status != o.Status &&
  21. o.Status == model.VipStatusNotOverTime &&
  22. n.Status == model.VipStatusOverTime &&
  23. n.Type != model.NotVip && o.Type != model.NotVip {
  24. _, err = s.dao.AutoRenewPay(c, n.Mid)
  25. }
  26. return
  27. }
  28. func (s *Service) retryautorenewpayproc() {
  29. defer s.waiter.Done()
  30. msgs := s.autoRenewdDatabus.Messages()
  31. var err error
  32. for {
  33. msg, ok := <-msgs
  34. if !ok {
  35. log.Warn("[service.retryautorenewpayproc|vip] dataConsumer has been closed.")
  36. return
  37. }
  38. if err = msg.Commit(); err != nil {
  39. log.Error("retryautorenewpayproc msg.Commit err(%+v)", err)
  40. }
  41. log.Info("cur consumer retryautorenewpayproc(%v)", string(msg.Value))
  42. v := &model.Message{}
  43. if err = json.Unmarshal([]byte(msg.Value), v); err != nil {
  44. log.Error("retryautorenewpayproc json.Unmarshal(%v) err(%v)", v, err)
  45. continue
  46. }
  47. if v.Table != _tableUserInfo || v.Action != _updateAction {
  48. continue
  49. }
  50. n := new(model.VipUserInfoMsg)
  51. if err = json.Unmarshal(v.New, n); err != nil {
  52. log.Error("retryautorenewpayproc json.Unmarshal val(%v) error(%v)", string(v.New), err)
  53. continue
  54. }
  55. o := new(model.VipUserInfoMsg)
  56. if err = json.Unmarshal(v.Old, o); err != nil {
  57. log.Error("retryautorenewpayproc json.Unmarshal val(%v) error(%v)", string(v.Old), err)
  58. continue
  59. }
  60. s.autoRenewPay(context.Background(), n, o)
  61. }
  62. }