fix: 修复仪表盘时区统计偏移、重复订阅、新增map_apple字段
Build docker and publish / build (20.15.1) (push) Successful in 5m23s
Build docker and publish / build (20.15.1) (push) Successful in 5m23s
- fix(order/model): QueryDateOrders/QueryDailyOrdersList 使用 time.Date 替代 Truncate 修复 UTC+8 时区偏移 - fix(user/model): QueryResisterUserTotalByDate 同样修复时区截断 - fix(traffic/model): QueryServerTrafficByDay 同样修复时区截断 - fix(activateOrder): 兜底查询防止过期用户重购产生重复订阅 - feat(api): SubscribeDiscount 新增 map_apple 字段
This commit is contained in:
@@ -292,7 +292,48 @@ func (l *ActivateOrderLogic) NewPurchase(ctx context.Context, orderInfo *order.O
|
||||
}
|
||||
}
|
||||
|
||||
// 如果没有合并赠送订阅,则正常创建新订阅
|
||||
// 兜底:创建新订阅前,查找用户是否已有同套餐的订阅记录(含过期/赠送),
|
||||
// 有则复用旧记录续期,避免出现重复订阅。
|
||||
// 需要同时检查 UserId 和 SubscriptionUserId,因为家庭组绑定前后 owner 可能不同。
|
||||
if userSub == nil {
|
||||
candidateUserIds := []int64{orderInfo.UserId}
|
||||
if orderInfo.SubscriptionUserId > 0 && orderInfo.SubscriptionUserId != orderInfo.UserId {
|
||||
candidateUserIds = append(candidateUserIds, orderInfo.SubscriptionUserId)
|
||||
}
|
||||
var existingSub user.Subscribe
|
||||
if findErr := l.svc.DB.Model(&user.Subscribe{}).
|
||||
Where("user_id IN ? AND subscribe_id = ?", candidateUserIds, orderInfo.SubscribeId).
|
||||
Order("expire_time DESC").
|
||||
First(&existingSub).Error; findErr == nil {
|
||||
// 家庭组场景:订阅 owner 可能变更(如成员注册的试用 → 被家主收归),
|
||||
// 续期前把 user_id 校正为当前订单的 SubscriptionUserId
|
||||
effectiveOwner := orderInfo.UserId
|
||||
if orderInfo.SubscriptionUserId > 0 {
|
||||
effectiveOwner = orderInfo.SubscriptionUserId
|
||||
}
|
||||
if existingSub.UserId != effectiveOwner {
|
||||
existingSub.UserId = effectiveOwner
|
||||
}
|
||||
// 找到已有记录,走续期逻辑
|
||||
if renewErr := l.updateSubscriptionForRenewal(ctx, &existingSub, sub, orderInfo); renewErr != nil {
|
||||
logger.WithContext(ctx).Error("Fallback renew existing subscription failed, will create new",
|
||||
logger.Field("error", renewErr.Error()),
|
||||
logger.Field("existing_subscribe_id", existingSub.Id),
|
||||
logger.Field("order_no", orderInfo.OrderNo),
|
||||
)
|
||||
} else {
|
||||
userSub = &existingSub
|
||||
logger.WithContext(ctx).Infow("Fallback: renewed existing subscription instead of creating duplicate",
|
||||
logger.Field("existing_subscribe_id", existingSub.Id),
|
||||
logger.Field("order_no", orderInfo.OrderNo),
|
||||
logger.Field("candidate_user_ids", candidateUserIds),
|
||||
logger.Field("owner_corrected_to", effectiveOwner),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果仍然没有可复用的订阅,才创建新订阅
|
||||
if userSub == nil {
|
||||
userSub, err = l.createUserSubscription(ctx, orderInfo, sub)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user