fix(realname): activateMainPackage 三维决策重构 REALNAME-02

- 替换 EnableRealnameActivation 布尔判断为三维决策逻辑
- 行业卡(card_category=industry)永远直接激活
- C 端购买(BuyerTypePersonal)前置实名检查已完成,直接激活
- 后台囤货按 ExpiryBase 决定:from_activation 等实名,from_purchase 立即激活
This commit is contained in:
2026-03-28 10:38:24 +08:00
parent 9ee2f0b466
commit 7dd55630dc

View File

@@ -1869,11 +1869,34 @@ func (s *Service) activateMainPackage(ctx context.Context, tx *gorm.DB, order *m
nextResetAt = packagepkg.CalculateNextResetTime(pkg.DataResetCycle, pkg.CalendarType, now, activatedAt) nextResetAt = packagepkg.CalculateNextResetTime(pkg.DataResetCycle, pkg.CalendarType, now, activatedAt)
} }
// 任务 8.9: 后台囤货场景 // REALNAME-02: 后台囤货场景三维决策(卡类型 + 购买路径 + expiry_base
if pkg.EnableRealnameActivation { // 注意:仅在 else 分支(立即激活)时才需要判断是否切换为等实名
// 需要实名后才能激活 if !hasActiveMain {
// 查询卡类型(行业卡永远直接激活,不等实名)
var cardCategory string
if carrierType == "iot_card" {
var card model.IotCard
if err := tx.Select("card_category").First(&card, carrierID).Error; err == nil {
cardCategory = card.CardCategory
}
}
// 判断是否 C 端购买C 端购买前已做实名前置检查,直接激活)
isCEndPurchase := order.BuyerType == model.BuyerTypePersonal
if cardCategory != "industry" && !isCEndPurchase {
// 后台囤货路径:按 expiry_base 决定是否等实名
if pkg.ExpiryBase != "from_purchase" {
// from_activation默认等实名后激活
status = constants.PackageUsageStatusPending status = constants.PackageUsageStatusPending
pendingRealnameActivation = true pendingRealnameActivation = true
activatedAt = time.Time{}
expiresAt = time.Time{}
nextResetAt = nil
}
// from_purchase立即激活status 已为 Active保持不变
}
// 行业卡或 C 端购买直接激活status 已为 Active保持不变
} }
// 创建套餐使用记录 // 创建套餐使用记录