diff --git a/internal/biz/warning_budget.go b/internal/biz/warning_budget.go index 9a9959f..2f90144 100644 --- a/internal/biz/warning_budget.go +++ b/internal/biz/warning_budget.go @@ -12,26 +12,29 @@ import ( "voucher/internal/biz/vo" ) -func (s *VoucherBiz) WarningBudgetIncr(ctx context.Context, uid string) (int64, error) { - +func (s *VoucherBiz) WarningBudgetIncrKv(uid string) (string, time.Duration) { v := vo.WarningBudgetSendIncr.BuildCache([]string{uid}) + return v.Key, v.TTL +} + +func (s *VoucherBiz) WarningBudgetIncr(ctx context.Context, key string, TTL time.Duration) (int64, error) { // 增加发送计数 - count, err := s.rdb.Rdb.IncrBy(ctx, v.Key, 1).Result() + count, err := s.rdb.Rdb.IncrBy(ctx, key, 1).Result() if err != nil { return 0, err } // 如果是第一次发送,设置 过期时间 if count == 1 { - if err = s.rdb.Rdb.Expire(ctx, v.Key, v.TTL).Err(); err != nil { + if err = s.rdb.Rdb.Expire(ctx, key, TTL).Err(); err != nil { return 0, fmt.Errorf("设置过期时间失败: %v", err) } } // 如果发送次数超过 “指定” 条,清除再来 if count > 24 { // 大约2小时 - return 0, s.WarningBudgetIncrDel(ctx, v.Key) + return 0, s.WarningBudgetIncrDel(ctx, key) } return count, nil @@ -110,7 +113,9 @@ func (v *VoucherBiz) Calculate(ctx context.Context, product *bo.ProductBo, wxRes if product.WarningBudget >= w.AvailableBudget { - count, err2 := v.WarningBudgetIncr(ctx, product.BatchNo) + k, t := v.WarningBudgetIncrKv(product.BatchNo) + + count, err2 := v.WarningBudgetIncr(ctx, k, t) if err2 != nil { return err2 } @@ -122,8 +127,7 @@ func (v *VoucherBiz) Calculate(ctx context.Context, product *bo.ProductBo, wxRes } if w.AllBudget > product.AllBudget { - cv := vo.WarningBudgetSendIncr.BuildCache([]string{product.BatchNo}) - if err := v.WarningBudgetIncrDel(ctx, cv.Key); err != nil { + if err := v.WarningBudgetIncrDel(ctx, k); err != nil { return err } } diff --git a/internal/pkg/sms/sms_test.go b/internal/pkg/sms/sms_test.go index cfc476c..42f8039 100644 --- a/internal/pkg/sms/sms_test.go +++ b/internal/pkg/sms/sms_test.go @@ -68,7 +68,7 @@ func TestWarningSend(t *testing.T) { return } - err = smsService.SendSMS(context.Background(), []string{"18666173766"}, "SMS_489660721", params) + err = smsService.SendSMS(context.Background(), []string{"18666173766", "18900966383"}, "SMS_489660721", params) if err != nil { t.Errorf("发送短信失败: %v", err) return