fix: 平台账号后台创建钱包订单时,绕过代理套餐分配检查

后台钱包支付下单时,原逻辑根据卡/设备所属代理店铺触发
套餐分配上架校验,导致平台账号无法为属于代理的卡购买
未被该代理分配的套餐(如 0 元赠送套餐)。

修复:在 CreateAdminOrder wallet 分支中,按买家类型区分:
- 代理账号:保留原有校验,确保卡所属代理已分配该套餐
- 平台/超管账号:跳过代理分配检查,仅验证套餐全局状态

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-16 15:51:01 +08:00
parent e45610661e
commit 876c92095c

View File

@@ -346,12 +346,24 @@ func (s *Service) CreateAdminOrder(ctx context.Context, req *dto.CreateAdminOrde
if req.IotCardID == nil { if req.IotCardID == nil {
return nil, errors.New(errors.CodeInvalidParam, "单卡购买必须指定IoT卡ID") return nil, errors.New(errors.CodeInvalidParam, "单卡购买必须指定IoT卡ID")
} }
validationResult, err = s.purchaseValidationService.ValidateCardPurchase(ctx, *req.IotCardID, req.PackageIDs) // 平台账号代表平台直接下单,不受卡所属代理的套餐分配限制;
// 代理账号下单时,卡所属代理必须已将套餐上架分配
if buyerType == model.BuyerTypeAgent {
validationResult, err = s.purchaseValidationService.ValidateCardPurchase(ctx, *req.IotCardID, req.PackageIDs)
} else {
validationResult, err = s.purchaseValidationService.ValidateAdminOfflineCardPurchase(ctx, *req.IotCardID, req.PackageIDs)
}
} else if req.OrderType == model.OrderTypeDevice { } else if req.OrderType == model.OrderTypeDevice {
if req.DeviceID == nil { if req.DeviceID == nil {
return nil, errors.New(errors.CodeInvalidParam, "设备购买必须指定设备ID") return nil, errors.New(errors.CodeInvalidParam, "设备购买必须指定设备ID")
} }
validationResult, err = s.purchaseValidationService.ValidateDevicePurchase(ctx, *req.DeviceID, req.PackageIDs) // 平台账号代表平台直接下单,不受设备所属代理的套餐分配限制;
// 代理账号下单时,设备所属代理必须已将套餐上架分配
if buyerType == model.BuyerTypeAgent {
validationResult, err = s.purchaseValidationService.ValidateDevicePurchase(ctx, *req.DeviceID, req.PackageIDs)
} else {
validationResult, err = s.purchaseValidationService.ValidateAdminOfflineDevicePurchase(ctx, *req.DeviceID, req.PackageIDs)
}
} else { } else {
return nil, errors.New(errors.CodeInvalidParam, "无效的订单类型") return nil, errors.New(errors.CodeInvalidParam, "无效的订单类型")
} }