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"
)
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
}
}

View File

@ -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