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