From d7a461cc837f5d84bb519da30f5b2ff58408545e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E5=85=81=E6=9E=9E?= <3422692813@qq.com> Date: Fri, 28 Feb 2025 14:22:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/service/ICmsCategoryService.java | 3 + .../service/impl/CmsCategoryServiceImpl.java | 79 ++++++++++++++++++- 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/cms/service/ICmsCategoryService.java b/ruoyi-admin/src/main/java/com/ruoyi/cms/service/ICmsCategoryService.java index e7bbc55..26ff7db 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/cms/service/ICmsCategoryService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/cms/service/ICmsCategoryService.java @@ -8,6 +8,7 @@ import com.ruoyi.cms.core.NewTreeSelect; import com.ruoyi.cms.domain.CmsCategory; import com.ruoyi.cms.domain.CmsContent; import com.ruoyi.cms.domain.vo.CMSCategoryVo; +import com.ruoyi.cms.domain.vo.TreeVo; import com.ruoyi.cms.query.CmsCategoryQuery; import com.ruoyi.cms.query.CmsContentQuery; import com.ruoyi.common.core.domain.TreeSelect; @@ -137,4 +138,6 @@ public interface ICmsCategoryService extends IService * 获取某个栏目的子栏目 */ List getCategoryIdByParentId(Long id); + + List getLeavesCategoryTree(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/CmsCategoryServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/CmsCategoryServiceImpl.java index c3d8975..72f9dc9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/CmsCategoryServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/CmsCategoryServiceImpl.java @@ -1,8 +1,6 @@ package com.ruoyi.cms.service.impl; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; import cn.hutool.core.bean.BeanUtil; @@ -14,6 +12,7 @@ import com.github.pagehelper.PageInfo; import com.ruoyi.cms.core.NewTreeSelect; import com.ruoyi.cms.domain.CmsContent; import com.ruoyi.cms.domain.vo.CMSCategoryVo; +import com.ruoyi.cms.domain.vo.TreeVo; import com.ruoyi.cms.mapper.CmsContentMapper; import com.ruoyi.cms.query.CmsCategoryQuery; import com.ruoyi.cms.query.CmsContentQuery; @@ -300,4 +299,78 @@ public class CmsCategoryServiceImpl extends ServiceImpl getCategoryIdByParentId(Long id) { return baseMapper.selectList(new QueryWrapper().eq("parent_id", id).eq("is_disable", 0).eq("del_flag", 0).orderByAsc("category_sort")); } + + @Override + public List getLeavesCategoryTree() { + List cmsCategories = baseMapper.selectList(new QueryWrapper()); + List cmsCategories1 = buildCategoryTree(cmsCategories); + List treeVos = new ArrayList<>(); + for (CmsCategory cmsCategory : cmsCategories1) { + TreeVo treeVo = new TreeVo(); + treeVo.setLabel(cmsCategory.getCategoryName()); + treeVo.setValue(cmsCategory.getId().toString()); + List children = new ArrayList<>(); + cmsCategory.getChildren().forEach(cmsCategory1 -> { + TreeVo treeVo1 = new TreeVo(); + treeVo1.setLabel(cmsCategory1.getCategoryName()); + treeVo1.setValue(cmsCategory1.getId().toString()); + children.add(treeVo1); + }); + treeVo.setChildren(children); + treeVos.add(treeVo); + } + return treeVos; + } + + /** + * 将栏目列表转换为树形结构 + * + * @param categoryList 栏目列表 + * @return 树形结构的栏目列表 + */ + public List buildCategoryTree(List categoryList) { + // 创建一个Map,用于存储栏目ID和栏目对象的映射关系 + Map categoryMap = new HashMap<>(); + + // 创建一个列表,用于存储根栏目(即没有父栏目的栏目) + List rootCategories = new ArrayList<>(); + + // 第一次遍历:将所有栏目放入Map中,并找到根栏目 + for (CmsCategory category : categoryList) { + categoryMap.put(category.getId(), category); + if (category.getParentId() == null || category.getParentId() == 0) { + rootCategories.add(category); + } + } + + // 第二次遍历:将子栏目放入对应的父栏目的children列表中 + for (CmsCategory category : categoryList) { + if (category.getParentId() != null && category.getParentId() != 0) { + CmsCategory parentCategory = categoryMap.get(category.getParentId()); + if (parentCategory != null) { + parentCategory.getChildren().add(category); + } + } + } + + return rootCategories; + } + + /** + * 递归打印树形结构的栏目 + * + * @param categories 栏目列表 + * @param level 当前层级 + */ + private static void printCategoryTree(List categories, int level) { + for (CmsCategory category : categories) { + for (int i = 0; i < level; i++) { + System.out.print("--"); + } + System.out.println(category.getCategoryName()); + if (!category.getChildren().isEmpty()) { + printCategoryTree(category.getChildren(), level + 1); + } + } + } }