diff --git a/server/product/internal/logic/getrecommandproductlistlogic.go b/server/product/internal/logic/getrecommandproductlistlogic.go index b4a48efc..84020c11 100644 --- a/server/product/internal/logic/getrecommandproductlistlogic.go +++ b/server/product/internal/logic/getrecommandproductlistlogic.go @@ -1,6 +1,7 @@ package logic import ( + "encoding/json" "errors" "fusenapi/model/gmodel" "fusenapi/utils/auth" @@ -61,6 +62,8 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get recommend product list") } } + //资源id集合 + resourceIds := make([]string, 0, 50) //需要填充时需要忽略的id ignoreProductIds := make([]int64, 0, len(recommendProductList)) productIds := make([]int64, 0, len(recommendProductList)) @@ -70,6 +73,16 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec ignoreProductIds = append(ignoreProductIds, v.Id) productIds = append(productIds, v.Id) mapRecommend[v.Id] = struct{}{} + coverSlice := strings.Split(*v.Cover, "/") + coverImgSlice := strings.Split(*v.CoverImg, "/") + lenCoverSlice := len(coverSlice) + lenCoverImgSlice := len(coverImgSlice) + if lenCoverSlice > 1 { + resourceIds = append(resourceIds, coverSlice[lenCoverSlice-1]) + } + if lenCoverImgSlice > 1 { + resourceIds = append(resourceIds, coverImgSlice[lenCoverImgSlice-1]) + } } //小于请求的数量则需要从产品表中随机填补上(不包含上面的产品) lenRecommendProduct := len(recommendProductList) @@ -86,6 +99,7 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec recommendProductList = append(recommendProductList, v) } } + //查询产品价格 priceList, err := l.svcCtx.AllModels.FsProductPrice.GetPriceListByProductIds(l.ctx, productIds) if err != nil { @@ -124,11 +138,38 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec logx.Error(err) return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product tag property") } + for _, v := range productTagPropList { + coverSlice := strings.Split(*v.Cover, "/") + lenCoverSlice := len(coverSlice) + if lenCoverSlice > 1 { + resourceIds = append(resourceIds, coverSlice[lenCoverSlice-1]) + } + } + //根据resourceUrls找到对应的元数据 + resourceMetadataList, err := l.svcCtx.AllModels.FsResource.FindAllByResourceIds(l.ctx, resourceIds) + if err != nil { + logx.Error(err) + return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get resource list") + } + mapResourceMetadata := make(map[string]map[string]interface{}) + for _, v := range resourceMetadataList { + var metadata map[string]interface{} + if v.Metadata != nil { + _ = json.Unmarshal([]byte(*v.Metadata), &metadata) + } + mapResourceMetadata[*v.ResourceUrl] = metadata + } mapTagProp := make(map[int64][]types.CoverDefaultItem) for _, v := range productTagPropList { + coverSlice := strings.Split(*v.Cover, "/") + lenCoverSlice := len(coverSlice) + if lenCoverSlice > 1 { + resourceIds = append(resourceIds, coverSlice[lenCoverSlice-1]) + } mapTagProp[*v.ProductId] = append(mapTagProp[*v.ProductId], types.CoverDefaultItem{ - Tag: v.TemplateTag, - Cover: *v.Cover, + Tag: v.TemplateTag, + Cover: *v.Cover, + CoverMetadata: mapResourceMetadata[*v.Cover], }) } list := make([]types.GetRecommandProductListRsp, 0, len(recommendProductList)) @@ -156,16 +197,18 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec minPrice = minVal } item := types.GetRecommandProductListRsp{ - Id: v.Id, - Sn: *v.Sn, - Title: *v.Title, - TitleCn: *v.TitleCn, - Cover: *v.Cover, - CoverImg: *v.CoverImg, - CoverDefault: []types.CoverDefaultItem{}, - Intro: *v.Intro, - IsRecommend: isRecommend, - MinPrice: minPrice, + Id: v.Id, + Sn: *v.Sn, + Title: *v.Title, + TitleCn: *v.TitleCn, + Cover: *v.Cover, + CoverMetadata: mapResourceMetadata[*v.Cover], + CoverImg: *v.CoverImg, + CoverImgMetadata: mapResourceMetadata[*v.CoverImg], + CoverDefault: []types.CoverDefaultItem{}, + Intro: *v.Intro, + IsRecommend: isRecommend, + MinPrice: minPrice, } if _, ok := mapTagProp[productInfo.Id]; ok { item.CoverDefault = mapTagProp[productInfo.Id] diff --git a/server/product/internal/types/types.go b/server/product/internal/types/types.go index e685ba4c..b8eb9f46 100644 --- a/server/product/internal/types/types.go +++ b/server/product/internal/types/types.go @@ -234,16 +234,18 @@ type GetRecommandProductListReq struct { } type GetRecommandProductListRsp struct { - Id int64 `json:"id"` - Sn string `json:"sn"` - Title string `json:"title"` - TitleCn string `json:"title_cn"` - Cover string `json:"cover"` - CoverImg string `json:"cover_img"` - CoverDefault []CoverDefaultItem `json:"cover_default"` - Intro string `json:"intro"` - IsRecommend int64 `json:"is_recommend"` - MinPrice int64 `json:"min_price"` + Id int64 `json:"id"` + Sn string `json:"sn"` + Title string `json:"title"` + TitleCn string `json:"title_cn"` + Cover string `json:"cover"` + CoverMetadata interface{} `json:"cover_metadata"` + CoverImg string `json:"cover_img"` + CoverImgMetadata interface{} `json:"cover_img_metadata"` + CoverDefault []CoverDefaultItem `json:"cover_default"` + Intro string `json:"intro"` + IsRecommend int64 `json:"is_recommend"` + MinPrice int64 `json:"min_price"` } type GetTagProductListReq struct { diff --git a/server_api/product.api b/server_api/product.api index 7357bc43..44c92d52 100644 --- a/server_api/product.api +++ b/server_api/product.api @@ -286,16 +286,18 @@ type GetRecommandProductListReq { Sn string `form:"sn"` } type GetRecommandProductListRsp { - Id int64 `json:"id"` - Sn string `json:"sn"` - Title string `json:"title"` - TitleCn string `json:"title_cn"` - Cover string `json:"cover"` - CoverImg string `json:"cover_img"` - CoverDefault []CoverDefaultItem `json:"cover_default"` - Intro string `json:"intro"` - IsRecommend int64 `json:"is_recommend"` - MinPrice int64 `json:"min_price"` + Id int64 `json:"id"` + Sn string `json:"sn"` + Title string `json:"title"` + TitleCn string `json:"title_cn"` + Cover string `json:"cover"` + CoverMetadata interface{} `json:"cover_metadata"` + CoverImg string `json:"cover_img"` + CoverImgMetadata interface{} `json:"cover_img_metadata"` + CoverDefault []CoverDefaultItem `json:"cover_default"` + Intro string `json:"intro"` + IsRecommend int64 `json:"is_recommend"` + MinPrice int64 `json:"min_price"` } //获取分类产品列表 type GetTagProductListReq {