From ecbb2e993c7d43d30b53d0d4fec434403a5c4cb3 Mon Sep 17 00:00:00 2001 From: MichaelWin Date: Thu, 5 Feb 2026 17:57:39 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E5=88=86=E7=B1=BB=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/dto/ResourceCategoryTreeRequest.java | 7 ++ .../app/entity/BizResourceCategory.java | 25 +++++++ .../app/mapper/BizResourceCategoryMapper.java | 10 +++ .../BizResourceCategoryController.java | 39 ++++++++++ .../service/BizResourceCategoryService.java | 13 ++++ .../impl/BizResourceCategoryServiceImpl.java | 73 +++++++++++++++++++ .../mapper/BizResourceCategoryMapper.xml | 7 ++ 7 files changed, 174 insertions(+) create mode 100644 src/main/java/com/corewing/app/dto/ResourceCategoryTreeRequest.java create mode 100644 src/main/java/com/corewing/app/entity/BizResourceCategory.java create mode 100644 src/main/java/com/corewing/app/mapper/BizResourceCategoryMapper.java create mode 100644 src/main/java/com/corewing/app/modules/downloadCenter/BizResourceCategoryController.java create mode 100644 src/main/java/com/corewing/app/service/BizResourceCategoryService.java create mode 100644 src/main/java/com/corewing/app/service/impl/BizResourceCategoryServiceImpl.java create mode 100644 src/main/resources/mapper/BizResourceCategoryMapper.xml diff --git a/src/main/java/com/corewing/app/dto/ResourceCategoryTreeRequest.java b/src/main/java/com/corewing/app/dto/ResourceCategoryTreeRequest.java new file mode 100644 index 0000000..547e934 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/ResourceCategoryTreeRequest.java @@ -0,0 +1,7 @@ +package com.corewing.app.dto; + +import lombok.Data; + +@Data +public class ResourceCategoryTreeRequest { +} diff --git a/src/main/java/com/corewing/app/entity/BizResourceCategory.java b/src/main/java/com/corewing/app/entity/BizResourceCategory.java new file mode 100644 index 0000000..1e6ccc1 --- /dev/null +++ b/src/main/java/com/corewing/app/entity/BizResourceCategory.java @@ -0,0 +1,25 @@ +package com.corewing.app.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.corewing.app.common.base.CommonEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class BizResourceCategory extends CommonEntity { + + @TableId + private String id; + + private String categoryName; + + private String parentId; + + private Integer sortCode; + + private String remark; + + private String extJson; + +} diff --git a/src/main/java/com/corewing/app/mapper/BizResourceCategoryMapper.java b/src/main/java/com/corewing/app/mapper/BizResourceCategoryMapper.java new file mode 100644 index 0000000..409e6d2 --- /dev/null +++ b/src/main/java/com/corewing/app/mapper/BizResourceCategoryMapper.java @@ -0,0 +1,10 @@ +package com.corewing.app.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.corewing.app.entity.BizResourceCategory; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface BizResourceCategoryMapper extends BaseMapper { + +} diff --git a/src/main/java/com/corewing/app/modules/downloadCenter/BizResourceCategoryController.java b/src/main/java/com/corewing/app/modules/downloadCenter/BizResourceCategoryController.java new file mode 100644 index 0000000..9734611 --- /dev/null +++ b/src/main/java/com/corewing/app/modules/downloadCenter/BizResourceCategoryController.java @@ -0,0 +1,39 @@ +package com.corewing.app.modules.downloadCenter; + +import cn.hutool.core.lang.tree.Tree; +import com.corewing.app.common.Result; +import com.corewing.app.dto.ResourceCategoryTreeRequest; +import com.corewing.app.service.BizResourceCategoryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 资源分类接口 + */ +@Api(tags = "资源分类接口") +@RestController +@RequestMapping("/api/app/resource_category") +public class BizResourceCategoryController { + + @Resource + private BizResourceCategoryService bizResourceCategoryService; + + /** + * 获取分类树形集合 + * @param resourceCategoryTreeRequest + * @return + */ + @ApiOperation("分类树形集合") + @GetMapping("/tree") + public Result>> categoryTree(ResourceCategoryTreeRequest resourceCategoryTreeRequest) { + return Result.success(bizResourceCategoryService.tree(resourceCategoryTreeRequest)); + } + +} diff --git a/src/main/java/com/corewing/app/service/BizResourceCategoryService.java b/src/main/java/com/corewing/app/service/BizResourceCategoryService.java new file mode 100644 index 0000000..f6db3a2 --- /dev/null +++ b/src/main/java/com/corewing/app/service/BizResourceCategoryService.java @@ -0,0 +1,13 @@ +package com.corewing.app.service; + +import cn.hutool.core.lang.tree.Tree; +import com.baomidou.mybatisplus.extension.service.IService; +import com.corewing.app.dto.ResourceCategoryTreeRequest; +import com.corewing.app.entity.BizResourceCategory; + +import java.util.List; + +public interface BizResourceCategoryService extends IService { + + List> tree(ResourceCategoryTreeRequest resourceCategoryTreeRequest); +} diff --git a/src/main/java/com/corewing/app/service/impl/BizResourceCategoryServiceImpl.java b/src/main/java/com/corewing/app/service/impl/BizResourceCategoryServiceImpl.java new file mode 100644 index 0000000..2fd5009 --- /dev/null +++ b/src/main/java/com/corewing/app/service/impl/BizResourceCategoryServiceImpl.java @@ -0,0 +1,73 @@ +package com.corewing.app.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNode; +import cn.hutool.core.lang.tree.TreeUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.corewing.app.dto.ResourceCategoryTreeRequest; +import com.corewing.app.entity.AppModelCategory; +import com.corewing.app.entity.BizResourceCategory; +import com.corewing.app.mapper.BizResourceCategoryMapper; +import com.corewing.app.service.BizResourceCategoryService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +@Service +public class BizResourceCategoryServiceImpl extends ServiceImpl implements BizResourceCategoryService { + + + @Override + public List> tree(ResourceCategoryTreeRequest resourceCategoryTreeRequest) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + List resourceList = list(queryWrapper); + + // 填充上层的父级菜单 + this.fillParentCategoryInfo(resourceList); + + List> treeNodeList = resourceList.stream().map(category -> + new TreeNode<>(category.getId(), category.getParentId(), + category.getCategoryName(), category.getSortCode()).setExtra(JSONUtil.parseObj(category))) + .collect(Collectors.toList()); + return TreeUtil.build(treeNodeList, "0"); + } + + private void fillParentCategoryInfo(List categoryList) { + if(CollUtil.isNotEmpty(categoryList)){ + List parentResourceCategoryList = categoryList.stream().filter(distinctByKey(BizResourceCategory::getParentId)).collect(Collectors.toList()); + + List parentIds = null; + if(CollUtil.isNotEmpty(parentResourceCategoryList)){ + parentIds = CollUtil.newArrayList(); + for(BizResourceCategory parentCategory : categoryList){ + if(!StrUtil.equals(parentCategory.getParentId(),"0")){ + parentIds.add(parentCategory.getParentId()); + } + } + } + if(CollUtil.isNotEmpty(parentIds)){ + LambdaQueryWrapper parentCategoryLambdaQueryWrapper = new LambdaQueryWrapper<>(); + parentCategoryLambdaQueryWrapper.in(BizResourceCategory::getId,parentIds); + List parentCategoryList = this.list(parentCategoryLambdaQueryWrapper); + if(CollUtil.isNotEmpty(parentCategoryList)){ + this.fillParentCategoryInfo(parentCategoryList); + categoryList.addAll(parentCategoryList); + } + } + } + } + + private static Predicate distinctByKey(Function keyExtractor) { + Set seen = ConcurrentHashMap.newKeySet(); + return t -> seen.add(keyExtractor.apply(t)); + } +} diff --git a/src/main/resources/mapper/BizResourceCategoryMapper.xml b/src/main/resources/mapper/BizResourceCategoryMapper.xml new file mode 100644 index 0000000..43f2db4 --- /dev/null +++ b/src/main/resources/mapper/BizResourceCategoryMapper.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file