diff --git a/service-oa/src/main/java/com/atguigu/auth/controller/SysMenuController.java b/service-oa/src/main/java/com/atguigu/auth/controller/SysMenuController.java
new file mode 100644
index 0000000..2aa8b80
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/controller/SysMenuController.java
@@ -0,0 +1,82 @@
+package com.atguigu.auth.controller;
+
+
+import com.atguigu.auth.service.SysMenuService;
+import com.atguigu.common.result.Result;
+import com.atguigu.model.system.SysMenu;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ *
+ * 菜单管理 前端控制器
+ *
+ *
+ * @author yovinchen
+ * @since 2023-06-09
+ */
+@Api(tags = "菜单管理接口")
+@RestController
+@RequestMapping("/admin/system/sysMenu")
+public class SysMenuController {
+
+ @Autowired
+ private SysMenuService sysMenuService;
+
+ /**
+ * 菜单列表
+ *
+ * @return
+ */
+ @ApiOperation(value = "菜单列表")
+ @GetMapping("/findNodes")
+ public Result findNodes() {
+ List list = sysMenuService.findNodes();
+ return Result.ok(list);
+ }
+
+ /**
+ * 新增菜单
+ *
+ * @param sysMenu
+ * @return
+ */
+ @ApiOperation(value = "新增菜单")
+ @PostMapping("save")
+ public Result save(@RequestBody SysMenu sysMenu) {
+ sysMenuService.save(sysMenu);
+ return Result.ok();
+ }
+
+ /**
+ * 修改菜单
+ *
+ * @param sysMenu
+ * @return
+ */
+ @ApiOperation(value = "修改菜单")
+ @PutMapping("update")
+ public Result updateById(@RequestBody SysMenu sysMenu) {
+ sysMenuService.updateById(sysMenu);
+ return Result.ok();
+ }
+
+ /**
+ * 删除菜单
+ *
+ * @param id
+ * @return
+ */
+ @ApiOperation(value = "删除菜单")
+ @DeleteMapping("remove/{id}")
+ public Result remove(@PathVariable Long id) {
+ sysMenuService.removeMenuById(id);
+ return Result.ok();
+ }
+
+}
+
diff --git a/service-oa/src/main/java/com/atguigu/auth/mapper/SysMenuMapper.java b/service-oa/src/main/java/com/atguigu/auth/mapper/SysMenuMapper.java
new file mode 100644
index 0000000..be7eb56
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/mapper/SysMenuMapper.java
@@ -0,0 +1,16 @@
+package com.atguigu.auth.mapper;
+
+import com.atguigu.model.system.SysMenu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 菜单表 Mapper 接口
+ *
+ *
+ * @author yovinchen
+ * @since 2023-06-09
+ */
+public interface SysMenuMapper extends BaseMapper {
+
+}
diff --git a/service-oa/src/main/java/com/atguigu/auth/mapper/SysRoleMenuMapper.java b/service-oa/src/main/java/com/atguigu/auth/mapper/SysRoleMenuMapper.java
new file mode 100644
index 0000000..8e44e67
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/mapper/SysRoleMenuMapper.java
@@ -0,0 +1,16 @@
+package com.atguigu.auth.mapper;
+
+import com.atguigu.model.system.SysRoleMenu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 角色菜单 Mapper 接口
+ *
+ *
+ * @author yovinchen
+ * @since 2023-06-09
+ */
+public interface SysRoleMenuMapper extends BaseMapper {
+
+}
diff --git a/service-oa/src/main/java/com/atguigu/auth/mapper/xml/SysMenuMapper.xml b/service-oa/src/main/java/com/atguigu/auth/mapper/xml/SysMenuMapper.xml
new file mode 100644
index 0000000..31098d7
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/mapper/xml/SysMenuMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/service-oa/src/main/java/com/atguigu/auth/mapper/xml/SysRoleMenuMapper.xml b/service-oa/src/main/java/com/atguigu/auth/mapper/xml/SysRoleMenuMapper.xml
new file mode 100644
index 0000000..a1d08db
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/mapper/xml/SysRoleMenuMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/SysMenuService.java b/service-oa/src/main/java/com/atguigu/auth/service/SysMenuService.java
new file mode 100644
index 0000000..49180aa
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/service/SysMenuService.java
@@ -0,0 +1,32 @@
+package com.atguigu.auth.service;
+
+import com.atguigu.model.system.SysMenu;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ *
+ * 菜单表 服务类
+ *
+ *
+ * @author yovinchen
+ * @since 2023-06-09
+ */
+public interface SysMenuService extends IService {
+
+ /**
+ * 菜单列表
+ *
+ * @return
+ */
+ List findNodes();
+
+ /**
+ * 删除菜单
+ *
+ * @param id
+ */
+ void removeMenuById(Long id);
+}
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/SysRoleMenuService.java b/service-oa/src/main/java/com/atguigu/auth/service/SysRoleMenuService.java
new file mode 100644
index 0000000..8a8c431
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/service/SysRoleMenuService.java
@@ -0,0 +1,16 @@
+package com.atguigu.auth.service;
+
+import com.atguigu.model.system.SysRoleMenu;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 角色菜单 服务类
+ *
+ *
+ * @author yovinchen
+ * @since 2023-06-09
+ */
+public interface SysRoleMenuService extends IService {
+
+}
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/impl/SysMenuServiceImpl.java b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysMenuServiceImpl.java
new file mode 100644
index 0000000..3c721a1
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysMenuServiceImpl.java
@@ -0,0 +1,60 @@
+package com.atguigu.auth.service.impl;
+
+import com.atguigu.auth.mapper.SysMenuMapper;
+import com.atguigu.auth.service.SysMenuService;
+import com.atguigu.auth.utils.MenuHelper;
+import com.atguigu.common.execption.GuiguException;
+import com.atguigu.model.system.SysMenu;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *
+ * 菜单表 服务实现类
+ *
+ *
+ * @author yovinchen
+ * @since 2023-06-09
+ */
+@Service
+public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService {
+
+ /**
+ * 菜单列表
+ *
+ * @return
+ */
+ @Override
+ public List findNodes() {
+ // 1、查询所有 的数据
+ List sysMenuList = baseMapper.selectList(null);
+
+ // 2、构建树形结构
+ List list = MenuHelper.buildTree(sysMenuList);
+
+ return list;
+ }
+
+ /**
+ * 删除菜单
+ *
+ * @param id
+ */
+ @Override
+ public void removeMenuById(Long id) {
+ // 判断当前菜单是否有下一层菜单
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(SysMenu::getParentId, id);
+
+ Integer count = baseMapper.selectCount(lambdaQueryWrapper);
+
+ if (count > 0) {
+ throw new GuiguException(201, "菜单不能删除");
+ }
+ baseMapper.deleteById(id);
+ }
+
+}
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/impl/SysRoleMenuServiceImpl.java b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysRoleMenuServiceImpl.java
new file mode 100644
index 0000000..d44ecb8
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysRoleMenuServiceImpl.java
@@ -0,0 +1,20 @@
+package com.atguigu.auth.service.impl;
+
+import com.atguigu.auth.mapper.SysRoleMenuMapper;
+import com.atguigu.auth.service.SysRoleMenuService;
+import com.atguigu.model.system.SysRoleMenu;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 角色菜单 服务实现类
+ *
+ *
+ * @author yovinchen
+ * @since 2023-06-09
+ */
+@Service
+public class SysRoleMenuServiceImpl extends ServiceImpl implements SysRoleMenuService {
+
+}
diff --git a/service-oa/src/main/java/com/atguigu/auth/utils/MenuHelper.java b/service-oa/src/main/java/com/atguigu/auth/utils/MenuHelper.java
new file mode 100644
index 0000000..8db79f2
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/utils/MenuHelper.java
@@ -0,0 +1,60 @@
+package com.atguigu.auth.utils;
+
+import com.atguigu.model.system.SysMenu;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * ClassName: MenuHelper
+ * Package: com.atguigu.auth.utils
+ *
+ * @author yovinchen
+ * @Create 2023/6/9 23:31
+ */
+public class MenuHelper {
+
+ /**
+ * 使用递归方法建菜单
+ *
+ * @param sysMenuList
+ * @return
+ */
+ public static List buildTree(List sysMenuList) {
+ // 存放最终数据
+ List trees = new ArrayList<>();
+
+ // 把所有的菜单数据进行遍历
+ for (SysMenu sysMenu : sysMenuList) {
+ // 递归入口 parentId = 0
+ if (sysMenu.getParentId().longValue() == 0) {
+ trees.add(getChildren(sysMenu, sysMenuList));
+ }
+
+ }
+ return trees;
+
+ }
+
+ /**
+ * 递归查找子节点
+ *
+ * @param sysMenu
+ * @param sysMenuList
+ * @return
+ */
+ public static SysMenu getChildren(SysMenu sysMenu, List sysMenuList) {
+ sysMenu.setChildren(new ArrayList());
+
+ // 遍历所有的菜单数据,判断id和parent_id的对应关系
+ for (SysMenu menu : sysMenuList) {
+ if (sysMenu.getId().longValue() == menu.getParentId().longValue()) {
+ if (sysMenu.getChildren() == null) {
+ sysMenu.setChildren(new ArrayList<>());
+ }
+ sysMenu.getChildren().add(getChildren(menu, sysMenuList));
+ }
+ }
+ return sysMenu;
+ }
+}
diff --git a/service-oa/src/test/java/com/atguigu/code/CodeGet.java b/service-oa/src/test/java/com/atguigu/code/CodeGet.java
index 4e93cdb..a622a92 100644
--- a/service-oa/src/test/java/com/atguigu/code/CodeGet.java
+++ b/service-oa/src/test/java/com/atguigu/code/CodeGet.java
@@ -47,7 +47,7 @@ public class CodeGet {
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
- strategy.setInclude("sys_user_role");
+ strategy.setInclude("sys_menu","sys_role_menu");
//数据库表映射到实体的命名策略
strategy.setNaming(NamingStrategy.underline_to_camel);
//数据库表字段映射到实体的命名策略