@ -234,38 +234,31 @@ func (l *ActivateOrderLogic) NewPurchase(ctx context.Context, orderInfo *order.O
anchorSub , anchorErr := l . svc . UserModel . FindSingleModeAnchorSubscribe ( ctx , orderInfo . UserId )
switch {
case anchorErr == nil && anchorSub != nil :
if anchorSub . SubscribeId == orderInfo . SubscribeId {
if orderInfo . ParentId == 0 && anchorSub . OrderId > 0 && anchorSub . OrderId != orderInfo . Id {
if patchErr := l . patchOrderParentID ( ctx , orderInfo . Id , anchorSub . OrderId ) ; patchErr != nil {
logger . WithContext ( ctx ) . Error ( "Patch order parent_id failed" ,
logger . Field ( "error" , patchErr . Error ( ) ) ,
logger . Field ( "order_no" , orderInfo . OrderNo ) ,
)
} else {
orderInfo . ParentId = anchorSub . OrderId
}
}
if renewErr := l . updateSubscriptionForRenewal ( ctx , anchorSub , sub , orderInfo ) ; renewErr != nil {
logger . WithContext ( ctx ) . Error ( "Single mode renewal fallback failed" ,
logger . Field ( "error" , renewErr . Error ( ) ) ,
logger . Field ( "anchor_user_subscribe_id" , anchorSub . Id ) ,
if orderInfo . ParentId == 0 && anchorSub . OrderId > 0 && anchorSub . OrderId != orderInfo . Id {
if patchErr := l . patchOrderParentID ( ctx , orderInfo . Id , anchorSub . OrderId ) ; patchErr != nil {
logger . WithContext ( ctx ) . Error ( "Patch order parent_id failed" ,
logger . Field ( "error" , patchErr . Error ( ) ) ,
logger . Field ( "order_no" , orderInfo . OrderNo ) ,
)
} else {
userSub = anchorSub
logger . WithContext ( ctx ) . Infow ( "Single mode purchase routed to renewal in activation" ,
logger . Field ( "mode" , "single" ) ,
logger . Field ( "route" , "purchase_to_renewal" ) ,
logger . Field ( "anchor_user_subscribe_id" , anchorSub . Id ) ,
logger . Field ( "order_no" , orderInfo . OrderNo ) ,
)
orderInfo . ParentId = anchorSub . OrderId
}
} else {
logger . WithContext ( ctx ) . Errorw ( "Single mode anchor subscribe mismatch in activation" ,
}
if renewErr := l . updateSubscriptionForRenewal ( ctx , anchorSub , sub , orderInfo ) ; renewErr != nil {
logger . WithContext ( ctx ) . Error ( "Single mode renewal fallback failed" ,
logger . Field ( "error" , renewErr . Error ( ) ) ,
logger . Field ( "anchor_user_subscribe_id" , anchorSub . Id ) ,
logger . Field ( "order_no" , orderInfo . OrderNo ) ,
)
} else {
userSub = anchorSub
logger . WithContext ( ctx ) . Infow ( "Single mode purchase routed to renewal in activation" ,
logger . Field ( "mode" , "single" ) ,
logger . Field ( "route" , "purchase_to_renewal" ) ,
logger . Field ( "plan_changed" , anchorSub . SubscribeId != orderInfo . SubscribeId ) ,
logger . Field ( "anchor_user_subscribe_id" , anchorSub . Id ) ,
logger . Field ( "order_no" , orderInfo . OrderNo ) ,
logger . Field ( "order_subscribe_id" , orderInfo . SubscribeId ) ,
logger . Field ( "anchor_subscribe_id" , anchorSub . SubscribeId ) ,
)
}
case errors . Is ( anchorErr , gorm . ErrRecordNotFound ) :
@ -926,10 +919,18 @@ func (l *ActivateOrderLogic) updateSubscriptionForRenewal(ctx context.Context, u
today := time . Now ( ) . Day ( )
resetDay := userSub . ExpireTime . Day ( )
// Reset traffic if enabled
if ( sub . RenewalReset != nil && * sub . RenewalReset ) || today == resetDay {
// 套餐变更: 更新套餐ID和流量配额, 并重置已用流量
if userSub . SubscribeId != orderInfo . SubscribeId {
userSub . SubscribeId = orderInfo . SubscribeId
userSub . Traffic = sub . Traffic
userSub . Download = 0
userSub . Upload = 0
} else {
// Reset traffic if enabled
if ( sub . RenewalReset != nil && * sub . RenewalReset ) || today == resetDay {
userSub . Download = 0
userSub . Upload = 0
}
}
if userSub . FinishedAt != nil {
@ -942,6 +943,7 @@ func (l *ActivateOrderLogic) updateSubscriptionForRenewal(ctx context.Context, u
userSub . FinishedAt = nil
}
userSub . OrderId = orderInfo . Id
userSub . ExpireTime = tool . AddTime ( sub . UnitTime , orderInfo . Quantity , userSub . ExpireTime )
userSub . Status = 1
// 续费时重置过期流量字段