错误的套餐购买限制
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m48s

This commit is contained in:
Break
2026-05-29 09:44:48 +08:00
parent 872769e69e
commit 6a3fffc46c
4 changed files with 63 additions and 40 deletions

View File

@@ -63,15 +63,15 @@ func NewClientAssetHandler(
}
type resolvedAssetContext struct {
CustomerID uint
Identifier string
Asset *dto.AssetResolveResponse
Generation int
WalletBalance int64
SkipPermissionCtx context.Context
IsAgentChannel bool
SellerShopID uint
MainPackageActived bool
CustomerID uint
Identifier string
Asset *dto.AssetResolveResponse
Generation int
WalletBalance int64
SkipPermissionCtx context.Context
IsAgentChannel bool
SellerShopID uint
HasAddonMainPackage bool
}
// resolveAssetFromIdentifier 统一执行资产解析与归属校验
@@ -232,11 +232,16 @@ func (h *ClientAssetHandler) GetAvailablePackages(c *fiber.Ctx) error {
return errors.New(errors.CodeNoAvailablePackage, "当前无可购买套餐")
}
packagesResult, err := h.assetService.GetPackages(resolved.SkipPermissionCtx, resolved.Asset.AssetType, resolved.Asset.AssetID, 1, 50, nil)
if err != nil {
return err
if _, err := packagepkg.FindAttachableMainPackageForAddon(
h.db.WithContext(resolved.SkipPermissionCtx),
resolved.Asset.AssetType,
resolved.Asset.AssetID,
time.Now(),
); err == nil {
resolved.HasAddonMainPackage = true
} else if err != gorm.ErrRecordNotFound {
return errors.Wrap(errors.CodeDatabaseError, err, "查询主套餐失败")
}
resolved.MainPackageActived = hasActiveMainPackage(packagesResult.Items)
listCtx := resolved.SkipPermissionCtx
if resolved.IsAgentChannel {
@@ -512,18 +517,6 @@ func collectPackageIDs(pkgs []*model.Package) []uint {
return ids
}
func hasActiveMainPackage(usages []*dto.AssetPackageResponse) bool {
for _, usage := range usages {
if usage == nil {
continue
}
if usage.PackageType == constants.PackageTypeFormal && usage.Status == constants.PackageUsageStatusActive {
return true
}
}
return false
}
func buildClientPackageItem(
pkg *model.Package,
resolved *resolvedAssetContext,
@@ -537,7 +530,7 @@ func buildClientPackageItem(
}
isAddon := pkg.PackageType == constants.PackageTypeAddon
if isAddon && !resolved.MainPackageActived {
if isAddon && !resolved.HasAddonMainPackage {
return dto.ClientPackageItem{}, false
}