From 8cee79c331fc15f39d49bd60385a095bbd5051f0 Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Wed, 25 Feb 2026 18:01:36 -0800 Subject: [PATCH] =?UTF-8?q?fix:=20findGiftSubscription=20=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=B7=B2=E8=BF=87=E6=9C=9F=E7=9A=84=E8=B5=A0=E9=80=81?= =?UTF-8?q?=E8=AE=A2=E9=98=85=EF=BC=8C=E9=81=BF=E5=85=8D=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 改为直接查询 order_id=0 的 user_subscribe 记录 - 不再依赖 QueryUserSubscribe(会过滤掉过期订阅) - 赠送订阅过期后新购也会复用原 token --- queue/logic/order/activateOrderLogic.go | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/queue/logic/order/activateOrderLogic.go b/queue/logic/order/activateOrderLogic.go index b7e63e8..c101304 100644 --- a/queue/logic/order/activateOrderLogic.go +++ b/queue/logic/order/activateOrderLogic.go @@ -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 不变