fix: findGiftSubscription 查询已过期的赠送订阅,避免创建重复记录
Some checks failed
Build docker and publish / build (20.15.1) (push) Has been cancelled

- 改为直接查询 order_id=0 的 user_subscribe 记录
- 不再依赖 QueryUserSubscribe(会过滤掉过期订阅)
- 赠送订阅过期后新购也会复用原 token
This commit is contained in:
shanshanzhong 2026-02-25 18:01:36 -08:00
parent 54dea84b6f
commit 8cee79c331

View File

@ -404,26 +404,19 @@ func (l *ActivateOrderLogic) createUserSubscription(ctx context.Context, orderIn
return userSub, nil
}
// findGiftSubscription 查找用户指定套餐的赠送订阅order_id=0 且状态活跃
// findGiftSubscription 查找用户指定套餐的赠送订阅order_id=0,包括已过期的
// 返回找到的赠送订阅记录,如果没有则返回 nil
func (l *ActivateOrderLogic) findGiftSubscription(ctx context.Context, userId int64, subscribeId int64) (*user.Subscribe, error) {
// 查询用户所有活跃订阅
subs, err := l.svc.UserModel.QueryUserSubscribe(ctx, userId, 0, 1)
// 直接查询数据库,查找 order_id=0赠送且同套餐的订阅不限制过期状态
var giftSub user.Subscribe
err := l.svc.DB.Model(&user.Subscribe{}).
Where("user_id = ? AND order_id = 0 AND subscribe_id = ?", userId, subscribeId).
Order("created_at DESC").
First(&giftSub).Error
if err != nil {
return nil, err
}
// 查找 order_id=0赠送且同套餐的订阅
for _, s := range subs {
if s.OrderId == 0 && s.SubscribeId == subscribeId {
// 通过 ID 获取完整的 Subscribe 记录
sub, err := l.svc.UserModel.FindOneSubscribe(ctx, s.Id)
if err != nil {
return nil, err
}
return sub, nil
}
}
return nil, nil
return &giftSub, nil
}
// extendGiftSubscription 在现有赠送订阅上延长到期时间,保持 token 不变