This commit is contained in:
ziming 2025-07-01 18:04:05 +08:00
parent 819f92484d
commit f9d5511a91
2 changed files with 13 additions and 9 deletions

View File

@ -12,26 +12,29 @@ import (
"voucher/internal/biz/vo" "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}) 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 { if err != nil {
return 0, err return 0, err
} }
// 如果是第一次发送,设置 过期时间 // 如果是第一次发送,设置 过期时间
if count == 1 { 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) return 0, fmt.Errorf("设置过期时间失败: %v", err)
} }
} }
// 如果发送次数超过 “指定” 条,清除再来 // 如果发送次数超过 “指定” 条,清除再来
if count > 24 { // 大约2小时 if count > 24 { // 大约2小时
return 0, s.WarningBudgetIncrDel(ctx, v.Key) return 0, s.WarningBudgetIncrDel(ctx, key)
} }
return count, nil return count, nil
@ -110,7 +113,9 @@ func (v *VoucherBiz) Calculate(ctx context.Context, product *bo.ProductBo, wxRes
if product.WarningBudget >= w.AvailableBudget { 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 { if err2 != nil {
return err2 return err2
} }
@ -122,8 +127,7 @@ func (v *VoucherBiz) Calculate(ctx context.Context, product *bo.ProductBo, wxRes
} }
if w.AllBudget > product.AllBudget { if w.AllBudget > product.AllBudget {
cv := vo.WarningBudgetSendIncr.BuildCache([]string{product.BatchNo}) if err := v.WarningBudgetIncrDel(ctx, k); err != nil {
if err := v.WarningBudgetIncrDel(ctx, cv.Key); err != nil {
return err return err
} }
} }

View File

@ -68,7 +68,7 @@ func TestWarningSend(t *testing.T) {
return 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 { if err != nil {
t.Errorf("发送短信失败: %v", err) t.Errorf("发送短信失败: %v", err)
return return