From 516a7f5bdf23fc171e13894761938fe3c08a465f Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 28 Apr 2026 14:27:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=8E=E5=8F=B0=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E8=AE=A2=E5=8D=95=E7=9A=84=E4=BB=A3=E7=90=86=E5=A5=97?= =?UTF-8?q?=E9=A4=90=E4=B8=8B=E6=9E=B6=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/service/order/service.go | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/internal/service/order/service.go b/internal/service/order/service.go index fdc48a6..b5129c9 100644 --- a/internal/service/order/service.go +++ b/internal/service/order/service.go @@ -133,12 +133,15 @@ func (s *Service) CreateAdminOrder(ctx context.Context, req *dto.CreateAdminOrde var orderType string var iotCardID *uint var deviceID *uint + var resourceShopID *uint if resolvedCard != nil { orderType = model.OrderTypeSingleCard iotCardID = &resolvedCard.ID + resourceShopID = resolvedCard.ShopID } else { orderType = model.OrderTypeDevice deviceID = &resolvedDevice.ID + resourceShopID = resolvedDevice.ShopID } var validationResult *purchase_validation.PurchaseValidationResult @@ -159,7 +162,7 @@ func (s *Service) CreateAdminOrder(ctx context.Context, req *dto.CreateAdminOrde } if err != nil { - return nil, err + return nil, rewriteAdminAgentPackageOffShelfError(err, resourceShopID, req.PaymentMethod != model.PaymentMethodOffline) } if err := validatePackageTypeMixFromPackages(validationResult.Packages); err != nil { @@ -189,13 +192,10 @@ func (s *Service) CreateAdminOrder(ctx context.Context, req *dto.CreateAdminOrde userID := middleware.GetUserIDFromContext(ctx) // 提取资源所属店铺ID - var resourceShopID *uint var seriesID *uint if validationResult.Card != nil { - resourceShopID = validationResult.Card.ShopID seriesID = validationResult.Card.SeriesID } else if validationResult.Device != nil { - resourceShopID = validationResult.Device.ShopID seriesID = validationResult.Device.SeriesID } @@ -207,7 +207,7 @@ func (s *Service) CreateAdminOrder(ctx context.Context, req *dto.CreateAdminOrde } itemUnitPriceMap, retailTotalAmount, err := s.buildRetailPriceMap(ctx, validationResult.Packages, sellerShopIDValue) if err != nil { - return nil, err + return nil, rewriteAdminAgentPackageOffShelfError(err, resourceShopID, sellerShopIDValue > 0) } // 初始化订单字段 @@ -462,6 +462,23 @@ func (s *Service) CreateAdminOrder(ctx context.Context, req *dto.CreateAdminOrde } } +func rewriteAdminAgentPackageOffShelfError(err error, resourceShopID *uint, shouldRewrite bool) error { + if err == nil || !shouldRewrite || resourceShopID == nil || *resourceShopID == 0 { + return err + } + + appErr, ok := err.(*errors.AppError) + if !ok { + return err + } + + if appErr.Code == errors.CodeInvalidParam && appErr.Message == "套餐已下架" { + return errors.New(errors.CodeInvalidParam, "该代理已经下架该套餐,让代理上架该套餐后购买") + } + + return err +} + // CreateH5Order H5 端订单创建(支持 wallet/wechat/alipay,支持待支付状态) // 保留原 Create() 方法的完整逻辑,H5 端行为不变 // POST /api/h5/orders