From ea71d921cf69cf188e415dfa1d77a14c83b5fc30 Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Wed, 23 Jul 2025 22:36:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A7=92=E8=89=B2=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/demo/controller/RoleController.java | 6 ++ .../java/com/example/demo/mapper/MenuMapper.java | 2 + .../java/com/example/demo/service/RoleService.java | 3 +- .../example/demo/serviceImpl/RoleServiceImpl.java | 89 ++++++++++++++++++++++ src/main/resources/mapper/MenuMapper.xml | 6 ++ 5 files changed, 105 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/demo/controller/RoleController.java b/src/main/java/com/example/demo/controller/RoleController.java index 6bfd729..9c88281 100644 --- a/src/main/java/com/example/demo/controller/RoleController.java +++ b/src/main/java/com/example/demo/controller/RoleController.java @@ -39,6 +39,12 @@ public class RoleController { return roleService.addRole(roleVo); } + //新增角色二期替补 + @PostMapping("/add2") + public Result addRole2(@RequestBody RoleVo roleVo) { + + return roleService.addRole2(roleVo); + } //删除角色 @PostMapping("/delete") public Result deleteRole(@RequestBody RoleVo roleVo) { diff --git a/src/main/java/com/example/demo/mapper/MenuMapper.java b/src/main/java/com/example/demo/mapper/MenuMapper.java index d0f3b40..d123e72 100644 --- a/src/main/java/com/example/demo/mapper/MenuMapper.java +++ b/src/main/java/com/example/demo/mapper/MenuMapper.java @@ -33,4 +33,6 @@ public interface MenuMapper { void updateMenu(List roleMenuList); //删除权限 void deleteMenu(Integer id); + + Integer selectFatherId(Integer id); } diff --git a/src/main/java/com/example/demo/service/RoleService.java b/src/main/java/com/example/demo/service/RoleService.java index 331737d..8179072 100644 --- a/src/main/java/com/example/demo/service/RoleService.java +++ b/src/main/java/com/example/demo/service/RoleService.java @@ -21,7 +21,8 @@ public interface RoleService { //新增角色 Result addRole(RoleVo roleVo); - + //新增角色二期替补 + Result addRole2(RoleVo roleVo); //查找全部角色 List selectAllRole(); //根据父级id查找下属角色 diff --git a/src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java index 3d96a18..1dd889a 100644 --- a/src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java @@ -5,6 +5,7 @@ import com.example.demo.domain.vo.ConsumeUser; import com.example.demo.domain.vo.MenuVo; import com.example.demo.domain.vo.Result; import com.example.demo.domain.vo.RoleVo; +import com.example.demo.mapper.MenuMapper; import com.example.demo.mapper.RefundMapper; import com.example.demo.mapper.RoleMapper; import com.example.demo.service.AdminService; @@ -17,7 +18,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @program: gold-java @@ -39,6 +43,8 @@ public class RoleServiceImpl implements RoleService { private AdminService adminService; @Autowired private GeneralService generalService; + @Autowired + private MenuMapper menuMapper; //新增角色 @Override @@ -96,6 +102,89 @@ public class RoleServiceImpl implements RoleService { return Result.success("创建成功"); } + //新增角色 + @Override + @Transactional + public Result addRole2(RoleVo roleVo) { + //校验角色 + if (roleVo.getRoleName() == null || roleVo.getRoleName().isEmpty()) { + return Result.error("角色名为空"); + } + // 新增校验:角色名长度需在 2 - 20 之间 + if (roleVo.getRoleName().length() < 2 || roleVo.getRoleName().length() > 20) { + return Result.error("角色名长度需在2-20个字符之间"); + } + if (roleMapper.selectByRoleName(roleVo.getRoleName()) != null) { + return Result.error("角色名重复"); + } + + + if (roleVo.getPriority() == null) { + return Result.error("优先级为空"); + } + if (roleVo.getPriority() <= 0 || roleVo.getPriority() > 999) { + return Result.error("优先级不在1-999"); + } + if (roleVo.getMenuIds() == null || roleVo.getMenuIds().isEmpty()) { + return Result.error("权限为空"); + } else { + List menuIds = new ArrayList<>(roleVo.getMenuIds()); // 创建副本避免修改原始列表 + Set processedIds = new HashSet<>(menuIds); // 使用Set快速检查存在性 + + // 处理每个菜单ID及其所有父菜单 + for (int i = 0; i < menuIds.size(); i++) { + Integer currentId = menuIds.get(i); + + // ID为1不处理 + if (currentId == 1) continue; + + // 获取父菜单ID + Integer fatherId = menuMapper.selectFatherId(currentId); + + // 递归添加所有父菜单 + while (fatherId != null) { + if (!processedIds.contains(fatherId)) { + menuIds.add(fatherId); + processedIds.add(fatherId); + } + // 继续向上查找父菜单的父菜单 + fatherId = menuMapper.selectFatherId(fatherId); + } + } + roleVo.setMenuIds(menuIds); + } + + if (roleVo.getMarket() == null || roleVo.getMarket().isEmpty()) { + return Result.error("所属市场为空"); + } + if (roleVo.getFatherId() != null) { + if (roleVo.getFatherId() != 2) { + for (Integer menuId : roleVo.getMenuIds()) { + if (menuId == 9) { + return Result.error("上级角色非管理员用户不能赋予权限管理"); + } + } + } + } + + try { + + roleMapper.addRole(roleVo); + Role role = roleMapper.selectByRoleName(roleVo.getRoleName()); + if (role == null) { + return Result.error("角色添加失败"); + } else { + roleVo.setId(role.getId()); + } + menuService.addPermission(roleVo); + System.out.println(roleVo.getMenuIds()); + } catch (Exception e) { + return Result.error("添加失败"); + } + + return Result.success("创建成功"); + } + //删除角色 @Override @Transactional diff --git a/src/main/resources/mapper/MenuMapper.xml b/src/main/resources/mapper/MenuMapper.xml index 847ac16..336cc3f 100644 --- a/src/main/resources/mapper/MenuMapper.xml +++ b/src/main/resources/mapper/MenuMapper.xml @@ -50,4 +50,10 @@ + \ No newline at end of file