diff --git a/server/product/internal/logic/gettagproductlistlogic.go b/server/product/internal/logic/gettagproductlistlogic.go index 947e3cf7..b084003a 100644 --- a/server/product/internal/logic/gettagproductlistlogic.go +++ b/server/product/internal/logic/gettagproductlistlogic.go @@ -132,7 +132,7 @@ func (l *GetTagProductListLogic) GetTagProductList(req *types.GetTagProductListR return resp.SetStatusAddMessage(basic.CodeServiceErr, "failed to deal with tag data") } //组装等级从属关系 - rspTagList, TotalCategoryProduct := l.organizationLevelRelation(minLevel, mapTagLevel) + rspTagList, TotalCategoryProduct := l.organizationLevelRelation(minLevel, mapTagLevel, productList) return resp.SetStatusWithMessage(basic.CodeOK, "success", types.GetTagProductListRsp{ TotalCategoryProduct: TotalCategoryProduct, TagList: rspTagList, @@ -308,7 +308,7 @@ func (l *GetTagProductListLogic) dealWithTagMenuData(req dealWithTagMenuDataReq) }) //tag中产品 for _, tmpProduct := range productListRsp { - tagTem.TagProductList = append(tagTem.TagProductList, tmpProduct) + tagTem.TagProductList = append(tagTem.TagProductList, tmpProduct.ProductId) } } //加入分类 @@ -318,7 +318,7 @@ func (l *GetTagProductListLogic) dealWithTagMenuData(req dealWithTagMenuDataReq) } // 组织等级从属关系 -func (l *GetTagProductListLogic) organizationLevelRelation(minLevel int, mapTagLevel map[string]*types.TagItem) (rspTagList []types.TagItem, productCount int) { +func (l *GetTagProductListLogic) organizationLevelRelation(minLevel int, mapTagLevel map[string]*types.TagItem, productList []gmodel.FsProduct) (rspTagList []types.TagItem, productCount int) { mapTop := make(map[string]struct{}) //设置归属关系 for prefix, tagItem := range mapTagLevel { @@ -341,16 +341,25 @@ func (l *GetTagProductListLogic) organizationLevelRelation(minLevel int, mapTagL }) mapTagLevel[parentPrefix] = parent } - //把子类的产品列表变成产品id列表并且把产品列表都放到最顶级父级中 + //父类聚合子类所有产品 for _, v := range mapTagLevel { if _, ok := mapTop[v.LevelPrefix]; ok { continue } - topPrefixSlic := strings.Split(v.LevelPrefix, "/")[:minLevel] - topPrefix := strings.Join(topPrefixSlic, "/") - for k, tmpProduct := range v.TagProductList { - v.TagProductList[k] = tmpProduct.(types.TagProduct).ProductId - mapTagLevel[topPrefix].TagProductList = append(mapTagLevel[topPrefix].TagProductList, tmpProduct) + mapTypeId := make(map[int64]struct{}) + for _, v2 := range mapTagLevel { + //包含主路径,则属于该类型 + if strings.Contains(v2.LevelPrefix, v.LevelPrefix) { + mapTypeId[v2.TypeId] = struct{}{} + } + } + //循环产品放入 + for _, p := range productList { + _, ok := mapTypeId[*p.Type] + if !ok { + continue + } + mapTagLevel[v.LevelPrefix].TagProductList = append(mapTagLevel[v.LevelPrefix].TagProductList, p) } } //最终值提取最高级别那一层出来