diff --git a/server/shopping-cart/internal/logic/getcartslogic.go b/server/shopping-cart/internal/logic/getcartslogic.go index 0a52ba1e..2ed45ff5 100644 --- a/server/shopping-cart/internal/logic/getcartslogic.go +++ b/server/shopping-cart/internal/logic/getcartslogic.go @@ -2,6 +2,7 @@ package logic import ( "context" + "encoding/json" "errors" "fmt" "fusenapi/constants" @@ -9,6 +10,7 @@ import ( "fusenapi/utils/auth" "fusenapi/utils/basic" "fusenapi/utils/format" + "fusenapi/utils/s3url_to_s3id" "fusenapi/utils/shopping_cart" "fusenapi/utils/step_price" "math" @@ -39,6 +41,7 @@ func NewGetCartsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetCarts // } func (l *GetCartsLogic) GetCarts(req *types.GetCartsReq, userinfo *auth.UserInfo) (resp *basic.Response) { + userinfo.UserId = 39 if req.CurrentPage <= 0 { req.CurrentPage = constants.DEFAULT_PAGE } @@ -66,20 +69,22 @@ func (l *GetCartsLogic) GetCarts(req *types.GetCartsReq, userinfo *auth.UserInfo }) } var ( - mapSize = make(map[int64]gmodel.FsProductSize) - mapModel = make(map[int64]gmodel.FsProductModel3d) - mapTemplate = make(map[int64]gmodel.FsProductTemplateV2) - mapSizePrice = make(map[string]gmodel.FsProductPrice) - mapProduct = make(map[int64]struct{}) + mapSize = make(map[int64]gmodel.FsProductSize) + mapModel = make(map[int64]gmodel.FsProductModel3d) + mapTemplate = make(map[int64]gmodel.FsProductTemplateV2) + mapSizePrice = make(map[string]gmodel.FsProductPrice) + mapProduct = make(map[int64]gmodel.FsProduct) + mapResourceMetadata = make(map[string]interface{}) ) //获取相关信息 err = l.GetRelationInfo(GetRelationInfoReq{ - Carts: carts, - MapSize: mapSize, - MapModel: mapModel, - MapTemplate: mapTemplate, - MapSizePrice: mapSizePrice, - MapProduct: mapProduct, + Carts: carts, + MapSize: mapSize, + MapModel: mapModel, + MapTemplate: mapTemplate, + MapSizePrice: mapSizePrice, + MapProduct: mapProduct, + MapResourceMetadata: mapResourceMetadata, }) if err != nil { return resp.SetStatusWithMessage(basic.CodeServiceErr, err.Error()) @@ -137,6 +142,10 @@ func (l *GetCartsLogic) GetCarts(req *types.GetCartsReq, userinfo *auth.UserInfo stepQuantityList = append(stepQuantityList, tmpQuantity) tmpMinBuyNum++ } + sizeCapacity := snapShot.SizeInfo.Capacity + if sizeInfo, ok := mapSize[*cart.SizeId]; ok { + sizeCapacity = *sizeInfo.Capacity + } //根据数量获取阶梯价格中对应的价格 itemPrice := step_price.GetCentStepPrice(boxQuantity, stepNum, stepPrice) //如果有配件,单价也要加入配件价格 @@ -145,12 +154,34 @@ func (l *GetCartsLogic) GetCarts(req *types.GetCartsReq, userinfo *auth.UserInfo itemPrice += *curFittingInfo.Price } } + fittingName := snapShot.FittingInfo.FittingName + if fittingInfo, ok := mapModel[*cart.FittingId]; ok { + fittingName = *fittingInfo.Name + } totalPrice := itemPrice * (*cart.PurchaseQuantity) + productCover := "" //产品封面图 + productName := snapShot.ProductInfo.ProductName + productSn := snapShot.ProductInfo.ProductSn + var productCoverMetadata interface{} + if productInfo, ok := mapProduct[*cart.ProductId]; ok { + productCover = *productInfo.Cover + productName = *productInfo.Title + productSn = *productInfo.Sn + if metadata, ok := mapResourceMetadata[*productInfo.Cover]; ok { + productCoverMetadata = metadata + } + } item := types.CartItem{ - ProductId: *cart.ProductId, + ProductInfo: types.ProductInfo{ + ProductId: *cart.ProductId, + ProductName: productName, + ProductSn: productSn, + ProductCover: productCover, + ProductCoverMetadata: productCoverMetadata, + }, SizeInfo: types.SizeInfo{ SizeId: *cart.SizeId, - Capacity: snapShot.SizeInfo.Capacity, + Capacity: sizeCapacity, Title: types.SizeTitle{ Cm: snapShot.SizeInfo.Cm, Inch: snapShot.SizeInfo.Inch, @@ -158,7 +189,7 @@ func (l *GetCartsLogic) GetCarts(req *types.GetCartsReq, userinfo *auth.UserInfo }, FittingInfo: types.FittingInfo{ FittingId: *cart.FittingId, - FittingName: snapShot.FittingInfo.FittingName, + FittingName: fittingName, }, ItemPrice: fmt.Sprintf("%.3f", format.CentitoDollar(itemPrice)), TotalPrice: fmt.Sprintf("%.3f", format.CentitoDollar(totalPrice)), @@ -194,12 +225,13 @@ func (l *GetCartsLogic) GetCarts(req *types.GetCartsReq, userinfo *auth.UserInfo // 获取相关信息 type GetRelationInfoReq struct { - Carts []gmodel.FsShoppingCart - MapSize map[int64]gmodel.FsProductSize - MapModel map[int64]gmodel.FsProductModel3d - MapTemplate map[int64]gmodel.FsProductTemplateV2 - MapSizePrice map[string]gmodel.FsProductPrice - MapProduct map[int64]struct{} + Carts []gmodel.FsShoppingCart + MapSize map[int64]gmodel.FsProductSize + MapModel map[int64]gmodel.FsProductModel3d + MapTemplate map[int64]gmodel.FsProductTemplateV2 + MapSizePrice map[string]gmodel.FsProductPrice + MapProduct map[int64]gmodel.FsProduct + MapResourceMetadata map[string]interface{} } func (l *GetCartsLogic) GetRelationInfo(req GetRelationInfoReq) error { @@ -215,13 +247,28 @@ func (l *GetCartsLogic) GetRelationInfo(req GetRelationInfoReq) error { productIds = append(productIds, *req.Carts[index].ProductId) } //获取产品集合 - productList, err := l.svcCtx.AllModels.FsProduct.GetProductListByIds(l.ctx, productIds, "", "id") + productList, err := l.svcCtx.AllModels.FsProduct.GetProductListByIds(l.ctx, productIds, "") if err != nil { logx.Error(err) return errors.New("failed to get product list") } + resourceIds := make([]string, 0, len(productList)) for _, v := range productList { - req.MapProduct[v.Id] = struct{}{} + req.MapProduct[v.Id] = v + resourceIds = append(resourceIds, s3url_to_s3id.GetS3ResourceIdFormUrl(*v.Cover)) + } + //根据resourceUrls找到对应的元数据 + resourceMetadataList, err := l.svcCtx.AllModels.FsResource.FindAllByResourceIds(l.ctx, resourceIds) + if err != nil { + logx.Error(err) + return errors.New("failed to get resource list") + } + for _, v := range resourceMetadataList { + var metadata interface{} + if v.Metadata != nil { + _ = json.Unmarshal(*v.Metadata, &metadata) + } + req.MapResourceMetadata[*v.ResourceUrl] = metadata } //获取尺寸列表 sizeList, err := l.svcCtx.AllModels.FsProductSize.GetAllByIds(l.ctx, sizeIds, "") diff --git a/server/shopping-cart/internal/types/types.go b/server/shopping-cart/internal/types/types.go index 231c717e..ec1ed92b 100644 --- a/server/shopping-cart/internal/types/types.go +++ b/server/shopping-cart/internal/types/types.go @@ -44,7 +44,7 @@ type GetCartsRsp struct { } type CartItem struct { - ProductId int64 `json:"product_id"` //产品id + ProductInfo ProductInfo `json:"product_info"` //产品信息 SizeInfo SizeInfo `json:"size_info"` //尺寸信息 FittingInfo FittingInfo `json:"fitting_info"` //配件信息 ItemPrice string `json:"item_price"` //单价 @@ -56,6 +56,14 @@ type CartItem struct { InvalidDescription string `json:"invalid_description"` //无效原因 } +type ProductInfo struct { + ProductId int64 `json:"product_id"` //产品id + ProductName string `json:"product_name"` + ProductSn string `json:"product_sn"` + ProductCover string `json:"product_cover"` //产品图 + ProductCoverMetadata interface{} `json:"product_cover_metadata"` //产品图元数据 +} + type SizeInfo struct { SizeId int64 `json:"size_id"` //尺寸id Capacity string `json:"capacity"` //尺寸名称 diff --git a/server_api/shopping-cart.api b/server_api/shopping-cart.api index 5c3da538..bd595d74 100644 --- a/server_api/shopping-cart.api +++ b/server_api/shopping-cart.api @@ -63,7 +63,7 @@ type GetCartsRsp { CartList []CartItem `json:"cart_list"` } type CartItem { - ProductId int64 `json:"product_id"` //产品id + ProductInfo ProductInfo `json:"product_info"` //产品信息 SizeInfo SizeInfo `json:"size_info"` //尺寸信息 FittingInfo FittingInfo `json:"fitting_info"` //配件信息 ItemPrice string `json:"item_price"` //单价 @@ -74,6 +74,13 @@ type CartItem { IsInvalid bool `json:"is_invalid"` //是否无效 InvalidDescription string `json:"invalid_description"` //无效原因 } +type ProductInfo { + ProductId int64 `json:"product_id"` //产品id + ProductName string `json:"product_name"` + ProductSn string `json:"product_sn"` + ProductCover string `json:"product_cover"` //产品图 + ProductCoverMetadata interface{} `json:"product_cover_metadata"` //产品图元数据 +} type SizeInfo { SizeId int64 `json:"size_id"` //尺寸id Capacity string `json:"capacity"` //尺寸名称 diff --git a/utils/shopping_cart/verify_shopping_cart_channged.go b/utils/shopping_cart/verify_shopping_cart_channged.go index 10315ffe..fc43c0fa 100644 --- a/utils/shopping_cart/verify_shopping_cart_channged.go +++ b/utils/shopping_cart/verify_shopping_cart_channged.go @@ -15,7 +15,7 @@ type VerifyShoppingCartSnapshotDataChangeReq struct { MapTemplate map[int64]gmodel.FsProductTemplateV2 MapCartChange map[int64]string MapSnapshot map[int64]CartSnapshot - MapProduct map[int64]struct{} + MapProduct map[int64]gmodel.FsProduct } func VerifyShoppingCartSnapshotDataChange(req VerifyShoppingCartSnapshotDataChangeReq) error {