Browse Source

角色名称校验,权限查询,角色新增部分接口

huangqizheng/feature-20250717200321-优化导出
sunjiabei 1 month ago
parent
commit
de263ab364
  1. 40
      src/main/java/com/example/demo/controller/MenuController.java
  2. 41
      src/main/java/com/example/demo/controller/RoleController.java
  3. 2
      src/main/java/com/example/demo/domain/entity/Menu.java
  4. 1
      src/main/java/com/example/demo/domain/entity/Role.java
  5. 30
      src/main/java/com/example/demo/domain/vo/MenuVo.java
  6. 35
      src/main/java/com/example/demo/domain/vo/RoleVo.java
  7. 21
      src/main/java/com/example/demo/mapper/MenuMapper.java
  8. 24
      src/main/java/com/example/demo/mapper/RoleMapper.java
  9. 20
      src/main/java/com/example/demo/service/MenuService.java
  10. 20
      src/main/java/com/example/demo/service/RoleService.java
  11. 58
      src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java
  12. 66
      src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java
  13. 6
      src/main/resources/application.yml
  14. 23
      src/main/resources/mapper/MenuMapper.xml
  15. 13
      src/main/resources/mapper/RoleMapper.xml

40
src/main/java/com/example/demo/controller/MenuController.java

@ -0,0 +1,40 @@
package com.example.demo.controller;
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.service.MenuService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @program: gold-java
* @ClassName MenuController
* @description:
* @author: Double
* @create: 202507-15 14:10
* @Version 1.0
**/
@RestController
@RequestMapping("/menu")
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
public class MenuController {
@Autowired
private MenuService menuService;
//获取权限树
@PostMapping("/tree")
public Result getPermissionTree(@RequestBody RoleVo roleVo) {
List<MenuVo> permissionTree = menuService.getPermissionTree(roleVo.getId());
return Result.success(permissionTree);
}
}

41
src/main/java/com/example/demo/controller/RoleController.java

@ -0,0 +1,41 @@
package com.example.demo.controller;
import com.example.demo.domain.entity.Role;
import com.example.demo.domain.vo.Page;
import com.example.demo.domain.vo.Result;
import com.example.demo.domain.vo.RoleVo;
import com.example.demo.service.RefundService;
import com.example.demo.service.RoleService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
/**
* @program: gold-java
* @ClassName RoleController
* @description:
* @author: Double
* @create: 202507-15 11:23
* @Version 1.0
**/
@RestController
@RequestMapping("/role")
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
public class RoleController {
@Autowired
private RoleService roleService;
//新增角色
@PostMapping("/add")
public Result addRole(@RequestBody RoleVo roleVo) {
return roleService.addRole(roleVo);
}
}

2
src/main/java/com/example/demo/domain/entity/Menu.java

@ -23,7 +23,7 @@ public class Menu implements Serializable {
private String permission; // 权限标识 private String permission; // 权限标识
private Integer sort; // 排序 private Integer sort; // 排序
private Byte menuStatus; // 状态 private Byte menuStatus; // 状态
private Integer priority;//优先级
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime; // 创建时间 private Date createTime; // 创建时间

1
src/main/java/com/example/demo/domain/entity/Role.java

@ -17,6 +17,7 @@ public class Role implements Serializable {
private Integer id; // 角色id private Integer id; // 角色id
private String roleName; // 角色名 private String roleName; // 角色名
private String roleKey; // 角色标识符 private String roleKey; // 角色标识符
private Integer priority;//优先级
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime; // 创建时间 private Date createTime; // 创建时间

30
src/main/java/com/example/demo/domain/vo/MenuVo.java

@ -0,0 +1,30 @@
package com.example.demo.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @program: gold-java
* @ClassName MenuVo
* @description:
* @author: Double
* @create: 202507-15 13:16
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MenuVo {
private Integer id;//id
private String menuName;//菜单名
private Integer parentId;//父id
private Integer priority;//优先级
private Integer menuType;//类型
// 子菜单列表用于构建树形结构
private List<MenuVo> children;
}

35
src/main/java/com/example/demo/domain/vo/RoleVo.java

@ -0,0 +1,35 @@
package com.example.demo.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @program: gold-java
* @ClassName RoleVo
* @description:
* @author: Double
* @create: 202507-15 11:45
* @Version 1.0
**/
@Data
@NoArgsConstructor
public class RoleVo implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id; // 角色id
private String roleName; // 角色名
private String roleKey; // 角色标识符
private Integer priority;//优先级
private String fatherId;//上级角色id
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime; // 创建时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime; // 更新时间
}

21
src/main/java/com/example/demo/mapper/MenuMapper.java

@ -0,0 +1,21 @@
package com.example.demo.mapper;
import com.example.demo.domain.vo.MenuVo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @program: gold-java
* @ClassName MenuMapper
* @description:
* @author: Double
* @create: 202507-15 13:28
* @Version 1.0
**/
@Mapper
public interface MenuMapper {
//根据角色ID查菜单权限
List<MenuVo> selectMenusByRoleId(Integer roleId);
}

24
src/main/java/com/example/demo/mapper/RoleMapper.java

@ -0,0 +1,24 @@
package com.example.demo.mapper;
import com.example.demo.domain.entity.Role;
import org.apache.ibatis.annotations.Mapper;
import java.util.Random;
/**
* @program: gold-java
* @ClassName RoleMaper
* @description:
* @author: Double
* @create: 202507-15 11:33
* @Version 1.0
**/
@Mapper
public interface RoleMapper {
//查找角色名
Role selectByRoleName(String roleName);
}

20
src/main/java/com/example/demo/service/MenuService.java

@ -0,0 +1,20 @@
package com.example.demo.service;
import java.util.List;
import com.example.demo.domain.vo.MenuVo;
/**
* @program: gold-java
* @ClassName MenuService
* @description:
* @author: Double
* @create: 202507-15 13:38
* @Version 1.0
**/
public interface MenuService {
//根据角色ID生成权限树
List<MenuVo> getPermissionTree(Integer roleId);
}

20
src/main/java/com/example/demo/service/RoleService.java

@ -0,0 +1,20 @@
package com.example.demo.service;
import com.example.demo.domain.vo.Result;
import com.example.demo.domain.vo.RoleVo;
/**
* @program: gold-java
* @ClassName RoleService
* @description:
* @author: Double
* @create: 202507-15 11:29
* @Version 1.0
**/
public interface RoleService {
//新增角色
Result addRole(RoleVo roleVo);
}

58
src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java

@ -0,0 +1,58 @@
package com.example.demo.serviceImpl;
import com.example.demo.domain.vo.MenuVo;
import com.example.demo.mapper.MenuMapper;
import com.example.demo.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @program: gold-java
* @ClassName MenuServiceImpl
* @description:
* @author: Double
* @create: 202507-15 13:38
* @Version 1.0
**/
@Service
public class MenuServiceImpl implements MenuService {
@Autowired
private MenuMapper menuMapper;
//构建菜单树
@Override
public List<MenuVo> getPermissionTree(Integer roleId) {
// 1. 查询该管理员的所有权限菜单平级列表
List<MenuVo> allMenus = menuMapper.selectMenusByRoleId(roleId);
// 2. 构建树形结构根节点parentId=1
return buildTree(allMenus, 1);
}
/**
* 递归构建树形结构
* @param allMenus 所有菜单列表
* @param parentId 父菜单ID初始为0查根节点
*/
//详细递归构建树过程
private List<MenuVo> buildTree(List<MenuVo> allMenus, Integer parentId) {
// 过滤出当前父节点的子菜单
List<MenuVo> children = allMenus.stream()
.filter(menu -> Objects.equals(menu.getParentId(), parentId))
.collect(Collectors.toList());
// 递归为每个子菜单设置子节点
for (MenuVo child : children) {
child.setChildren(buildTree(allMenus, child.getId()));
}
return children;
}
}

66
src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java

@ -0,0 +1,66 @@
package com.example.demo.serviceImpl;
import com.example.demo.domain.vo.Result;
import com.example.demo.domain.vo.RoleVo;
import com.example.demo.mapper.RefundMapper;
import com.example.demo.mapper.RoleMapper;
import com.example.demo.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @program: gold-java
* @ClassName RoleServiceImpl
* @description:
* @author: Double
* @create: 202507-15 11:30
* @Version 1.0
**/
@Service
public class RoleServiceImpl implements RoleService {
@Autowired
private RoleMapper roleMapper;
//新增角色
@Override
public Result addRole(RoleVo roleVo) {
//校验角色名
if(roleVo.getRoleName()==null|| roleVo.getRoleName().isEmpty()){
return Result.error("角色名为空");
}
if(roleMapper.selectByRoleName(roleVo.getRoleName())!=null){
return Result.error("角色名重复");
}
if(roleVo.getPriority()==null){
return Result.error("优先级为空");
}
return Result.success("创建成功");
}
}

6
src/main/resources/application.yml

@ -4,9 +4,9 @@ spring:
fail-on-unknown-properties: false fail-on-unknown-properties: false
datasource: datasource:
mysql1: mysql1:
jdbc-url: jdbc:mysql://18.143.76.3:3306/hwgold?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true
username: hwgold
password: aDiw7MERSATdfGta
jdbc-url: jdbc:mysql://18.143.76.3:3306/hwgoldc?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true
username: hwgoldc
password: zB48T55wCsHC8KPz
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
hikari: hikari:
pool-name: mysql1HikariCP pool-name: mysql1HikariCP

23
src/main/resources/mapper/MenuMapper.xml

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.MenuMapper">
<select id="selectMenusByRoleId" resultType="com.example.demo.domain.vo.MenuVo">
SELECT DISTINCT
m.id,
m.menu_name,
m.parent_id,
m.menu_type,
m.priority
FROM
role r
LEFT JOIN role_menu rm ON r.id = rm.role_id
LEFT JOIN menu m ON rm.menu_id = m.id
WHERE
r.id = #{roleId}
AND m.id IS NOT NULL
ORDER BY
m.parent_id,m.priority
</select>
</mapper>

13
src/main/resources/mapper/RoleMapper.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.RoleMapper">
<select id="selectByRoleName" resultType="com.example.demo.domain.entity.Role">
SELECT id FROM role
<where>
role_name = #{roleName}
</where>
</select>
</mapper>
Loading…
Cancel
Save