diff --git a/manager/src/main/java/org/jiayunet/controller/JobCategoryController.java b/manager/src/main/java/org/jiayunet/controller/JobCategoryController.java new file mode 100644 index 0000000..81595d5 --- /dev/null +++ b/manager/src/main/java/org/jiayunet/controller/JobCategoryController.java @@ -0,0 +1,50 @@ +package org.jiayunet.controller; + +import org.jiayunet.pojo.vo.JobCategoryTreeVo; +import org.jiayunet.pojo.vo.JobCategoryVo; +import org.jiayunet.service.JobCategoryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 岗位分类接口 + * + * @author zk + */ +@RestController +@RequestMapping("/job-categories") +public class JobCategoryController { + @Autowired + private JobCategoryService categoryService; + + /** + * 获取全部岗位分类树(一级-二级-三级嵌套) + */ + @GetMapping("/tree") + public List getCategoryTree() { + return categoryService.getCategoryTree(); + } + + /** + * 按父级查询岗位分类列表 + * @param parentId 父级ID,不传=查一级 + */ + @GetMapping + public List getCategoriesByParent(@RequestParam(required = false) Long parentId) { + return categoryService.getCategoriesByParent(parentId); + } + + /** + * 模糊搜索岗位分类 + * @param keyword 分类名关键字 + */ + @GetMapping("/search") + public List searchCategories(@RequestParam String keyword) { + return categoryService.searchCategories(keyword); + } +} diff --git a/manager/src/main/java/org/jiayunet/pojo/vo/JobCategoryTreeVo.java b/manager/src/main/java/org/jiayunet/pojo/vo/JobCategoryTreeVo.java new file mode 100644 index 0000000..f6b977f --- /dev/null +++ b/manager/src/main/java/org/jiayunet/pojo/vo/JobCategoryTreeVo.java @@ -0,0 +1,22 @@ +package org.jiayunet.pojo.vo; + +import lombok.Data; + +import java.util.List; + +/** + * 岗位分类树形VO + * + * @author zk + */ +@Data +public class JobCategoryTreeVo { + /** 分类ID */ + private Long id; + /** 分类名称 */ + private String name; + /** 层级 */ + private Integer level; + /** 子级分类列表 */ + private List children; +} diff --git a/manager/src/main/java/org/jiayunet/pojo/vo/JobCategoryVo.java b/manager/src/main/java/org/jiayunet/pojo/vo/JobCategoryVo.java new file mode 100644 index 0000000..b52904e --- /dev/null +++ b/manager/src/main/java/org/jiayunet/pojo/vo/JobCategoryVo.java @@ -0,0 +1,20 @@ +package org.jiayunet.pojo.vo; + +import lombok.Data; + +/** + * 岗位分类VO(平铺结构) + * + * @author zk + */ +@Data +public class JobCategoryVo { + /** 分类ID */ + private Long id; + /** 分类名称 */ + private String name; + /** 层级 */ + private Integer level; + /** 父级ID */ + private Long parentId; +} diff --git a/manager/src/main/java/org/jiayunet/service/JobCategoryService.java b/manager/src/main/java/org/jiayunet/service/JobCategoryService.java new file mode 100644 index 0000000..19d08d8 --- /dev/null +++ b/manager/src/main/java/org/jiayunet/service/JobCategoryService.java @@ -0,0 +1,102 @@ +package org.jiayunet.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.jiayunet.mapper.JobCategoryMapper; +import org.jiayunet.pojo.po.JobCategory; +import org.jiayunet.pojo.vo.JobCategoryTreeVo; +import org.jiayunet.pojo.vo.JobCategoryVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 岗位分类服务 + *

主要功能:岗位分类数据查询(树形、层级、搜索)

+ *

依赖:无

+ *

使用表:bg_job_category

+ * + * @author zk + */ +@Slf4j +@Service +public class JobCategoryService { + @Autowired + private JobCategoryMapper categoryMapper; + + /** + * 获取全部岗位分类树(一级-二级-三级嵌套) + *

1. 查询全部分类 2. 按level分组 3. 构建三层树

+ */ + public List getCategoryTree() { + List allCategories = categoryMapper.selectList(null); + List level1 = allCategories.stream().filter(c -> c.getLevel() == 1).collect(Collectors.toList()); + Map> level2ByParent = allCategories.stream().filter(c -> c.getLevel() == 2).collect(Collectors.groupingBy(JobCategory::getParentId)); + Map> level3ByParent = allCategories.stream().filter(c -> c.getLevel() == 3).collect(Collectors.groupingBy(JobCategory::getParentId)); + return level1.stream().map(cat1 -> { + JobCategoryTreeVo vo1 = new JobCategoryTreeVo(); + vo1.setId(cat1.getId()); + vo1.setName(cat1.getName()); + vo1.setLevel(cat1.getLevel()); + List level2List = level2ByParent.getOrDefault(cat1.getId(), new ArrayList<>()); + vo1.setChildren(level2List.stream().map(cat2 -> { + JobCategoryTreeVo vo2 = new JobCategoryTreeVo(); + vo2.setId(cat2.getId()); + vo2.setName(cat2.getName()); + vo2.setLevel(cat2.getLevel()); + List level3List = level3ByParent.getOrDefault(cat2.getId(), new ArrayList<>()); + vo2.setChildren(level3List.stream().map(cat3 -> { + JobCategoryTreeVo vo3 = new JobCategoryTreeVo(); + vo3.setId(cat3.getId()); + vo3.setName(cat3.getName()); + vo3.setLevel(cat3.getLevel()); + vo3.setChildren(null); + return vo3; + }).collect(Collectors.toList())); + return vo2; + }).collect(Collectors.toList())); + return vo1; + }).collect(Collectors.toList()); + } + + /** + * 按父级查询岗位分类列表 + *

parentId为null查一级,否则查下一级

+ */ + public List getCategoriesByParent(Long parentId) { + List categories; + if (parentId == null) { + categories = categoryMapper.selectList(new LambdaQueryWrapper().eq(JobCategory::getLevel, 1)); + } else { + categories = categoryMapper.selectList(new LambdaQueryWrapper().eq(JobCategory::getParentId, parentId)); + } + return categories.stream().map(c -> { + JobCategoryVo vo = new JobCategoryVo(); + vo.setId(c.getId()); + vo.setName(c.getName()); + vo.setLevel(c.getLevel()); + vo.setParentId(c.getParentId()); + return vo; + }).collect(Collectors.toList()); + } + + /** + * 模糊搜索岗位分类 + *

按分类名关键字模糊查询

+ */ + public List searchCategories(String keyword) { + List categories = categoryMapper.selectList(new LambdaQueryWrapper().like(JobCategory::getName, keyword)); + return categories.stream().map(c -> { + JobCategoryVo vo = new JobCategoryVo(); + vo.setId(c.getId()); + vo.setName(c.getName()); + vo.setLevel(c.getLevel()); + vo.setParentId(c.getParentId()); + return vo; + }).collect(Collectors.toList()); + } +}