fix(order): cover invite gifts and inactive renewals
Build docker and publish / build (20.15.1) (push) Successful in 5m36s
Build docker and publish / build (20.15.1) (push) Successful in 5m36s
This commit is contained in:
@@ -447,6 +447,13 @@ func orderMergeRemainingTimeStatus(status uint8) bool {
|
||||
}
|
||||
}
|
||||
|
||||
func subscriptionRenewalBaseTime(now time.Time, userSub *user.Subscribe) time.Time {
|
||||
if userSub != nil && orderMergeRemainingTimeStatus(userSub.Status) && userSub.ExpireTime.After(now) {
|
||||
return userSub.ExpireTime
|
||||
}
|
||||
return now
|
||||
}
|
||||
|
||||
func pickSubscriptionIdentitySource(candidates []user.Subscribe) *user.Subscribe {
|
||||
if len(candidates) == 0 {
|
||||
return nil
|
||||
@@ -959,10 +966,7 @@ func (l *ActivateOrderLogic) findGiftSubscription(ctx context.Context, userId in
|
||||
// 若购买套餐与赠送套餐不同,同步更新套餐 ID 和流量配额并重置已用量(套餐变更语义)。
|
||||
func (l *ActivateOrderLogic) extendGiftSubscription(ctx context.Context, giftSub *user.Subscribe, orderInfo *order.Order, sub *subscribe.Subscribe) (*user.Subscribe, error) {
|
||||
now := time.Now()
|
||||
baseTime := giftSub.ExpireTime
|
||||
if baseTime.Before(now) {
|
||||
baseTime = now
|
||||
}
|
||||
baseTime := subscriptionRenewalBaseTime(now, giftSub)
|
||||
newExpireTime := tool.AddTime(sub.UnitTime, orderInfo.Quantity, baseTime)
|
||||
|
||||
giftSub.OrderId = orderInfo.Id
|
||||
@@ -1417,10 +1421,7 @@ func (l *ActivateOrderLogic) getUserSubscription(ctx context.Context, token stri
|
||||
// updateSubscriptionWithIAPExpire 用于 Apple IAP 续费:按累计加时语义更新到期时间。
|
||||
func (l *ActivateOrderLogic) updateSubscriptionWithIAPExpire(ctx context.Context, userSub *user.Subscribe, sub *subscribe.Subscribe, orderInfo *order.Order, iapExpireAt int64) error {
|
||||
now := time.Now()
|
||||
baseTime := userSub.ExpireTime
|
||||
if baseTime.Before(now) {
|
||||
baseTime = now
|
||||
}
|
||||
baseTime := subscriptionRenewalBaseTime(now, userSub)
|
||||
newExpire := tool.AddTime(sub.UnitTime, orderInfo.Quantity, baseTime)
|
||||
if iapExpireAt > 0 {
|
||||
appleExpire := time.Unix(iapExpireAt, 0)
|
||||
@@ -1455,11 +1456,9 @@ func (l *ActivateOrderLogic) updateSubscriptionWithIAPExpire(ctx context.Context
|
||||
// expiration time extension and traffic reset if configured
|
||||
func (l *ActivateOrderLogic) updateSubscriptionForRenewal(ctx context.Context, userSub *user.Subscribe, sub *subscribe.Subscribe, orderInfo *order.Order) error {
|
||||
now := time.Now()
|
||||
if userSub.ExpireTime.Before(now) {
|
||||
userSub.ExpireTime = now
|
||||
}
|
||||
today := time.Now().Day()
|
||||
resetDay := userSub.ExpireTime.Day()
|
||||
baseTime := subscriptionRenewalBaseTime(now, userSub)
|
||||
today := now.Day()
|
||||
resetDay := baseTime.Day()
|
||||
|
||||
// 套餐变更:更新套餐ID和流量配额,并重置已用流量
|
||||
if userSub.SubscribeId != orderInfo.SubscribeId {
|
||||
@@ -1486,7 +1485,7 @@ func (l *ActivateOrderLogic) updateSubscriptionForRenewal(ctx context.Context, u
|
||||
}
|
||||
|
||||
userSub.OrderId = orderInfo.Id
|
||||
userSub.ExpireTime = tool.AddTime(sub.UnitTime, orderInfo.Quantity, userSub.ExpireTime)
|
||||
userSub.ExpireTime = tool.AddTime(sub.UnitTime, orderInfo.Quantity, baseTime)
|
||||
userSub.Status = 1
|
||||
// 续费时重置过期流量字段
|
||||
userSub.ExpiredDownload = 0
|
||||
|
||||
Reference in New Issue
Block a user