From 876c92095c1cbfad1e7cedaf7c538f33fa91fcff Mon Sep 17 00:00:00 2001 From: huang Date: Mon, 16 Mar 2026 15:51:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B9=B3=E5=8F=B0=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E5=90=8E=E5=8F=B0=E5=88=9B=E5=BB=BA=E9=92=B1=E5=8C=85=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=97=B6=EF=BC=8C=E7=BB=95=E8=BF=87=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E5=A5=97=E9=A4=90=E5=88=86=E9=85=8D=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后台钱包支付下单时,原逻辑根据卡/设备所属代理店铺触发 套餐分配上架校验,导致平台账号无法为属于代理的卡购买 未被该代理分配的套餐(如 0 元赠送套餐)。 修复:在 CreateAdminOrder wallet 分支中,按买家类型区分: - 代理账号:保留原有校验,确保卡所属代理已分配该套餐 - 平台/超管账号:跳过代理分配检查,仅验证套餐全局状态 Co-Authored-By: Claude Sonnet 4.6 --- internal/service/order/service.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/internal/service/order/service.go b/internal/service/order/service.go index c1dbf9e..c529775 100644 --- a/internal/service/order/service.go +++ b/internal/service/order/service.go @@ -346,12 +346,24 @@ func (s *Service) CreateAdminOrder(ctx context.Context, req *dto.CreateAdminOrde if req.IotCardID == nil { 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 { if req.DeviceID == nil { 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 { return nil, errors.New(errors.CodeInvalidParam, "无效的订单类型") }