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