diff --git a/src/main/java/com/example/demo/controller/MenuController.java b/src/main/java/com/example/demo/controller/MenuController.java new file mode 100644 index 0000000..dec8ef1 --- /dev/null +++ b/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: 2025−07-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 permissionTree = menuService.getPermissionTree(roleVo.getId()); + return Result.success(permissionTree); + } +} diff --git a/src/main/java/com/example/demo/controller/RoleController.java b/src/main/java/com/example/demo/controller/RoleController.java new file mode 100644 index 0000000..d365c8b --- /dev/null +++ b/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: 2025−07-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); + } + +} diff --git a/src/main/java/com/example/demo/domain/entity/Menu.java b/src/main/java/com/example/demo/domain/entity/Menu.java index edb381f..dd60531 100644 --- a/src/main/java/com/example/demo/domain/entity/Menu.java +++ b/src/main/java/com/example/demo/domain/entity/Menu.java @@ -23,7 +23,7 @@ public class Menu implements Serializable { private String permission; // 权限标识 private Integer sort; // 排序 private Byte menuStatus; // 状态 - + private Integer priority;//优先级 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date createTime; // 创建时间 diff --git a/src/main/java/com/example/demo/domain/entity/Role.java b/src/main/java/com/example/demo/domain/entity/Role.java index c572af9..2d9d42d 100644 --- a/src/main/java/com/example/demo/domain/entity/Role.java +++ b/src/main/java/com/example/demo/domain/entity/Role.java @@ -17,6 +17,7 @@ public class Role implements Serializable { private Integer id; // 角色id private String roleName; // 角色名 private String roleKey; // 角色标识符 + private Integer priority;//优先级 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date createTime; // 创建时间 diff --git a/src/main/java/com/example/demo/domain/vo/MenuVo.java b/src/main/java/com/example/demo/domain/vo/MenuVo.java new file mode 100644 index 0000000..bd4cb9a --- /dev/null +++ b/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: 2025−07-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 children; +} diff --git a/src/main/java/com/example/demo/domain/vo/RoleVo.java b/src/main/java/com/example/demo/domain/vo/RoleVo.java new file mode 100644 index 0000000..7cd4ef8 --- /dev/null +++ b/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: 2025−07-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; // 更新时间 +} diff --git a/src/main/java/com/example/demo/mapper/MenuMapper.java b/src/main/java/com/example/demo/mapper/MenuMapper.java new file mode 100644 index 0000000..2581749 --- /dev/null +++ b/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: 2025−07-15 13:28 + * @Version 1.0 + **/ +@Mapper +public interface MenuMapper { + + //根据角色ID查菜单权限 + List selectMenusByRoleId(Integer roleId); +} diff --git a/src/main/java/com/example/demo/mapper/RoleMapper.java b/src/main/java/com/example/demo/mapper/RoleMapper.java new file mode 100644 index 0000000..bd8e333 --- /dev/null +++ b/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: 2025−07-15 11:33 + * @Version 1.0 + **/ + + +@Mapper +public interface RoleMapper { + + //查找角色名 + Role selectByRoleName(String roleName); +} diff --git a/src/main/java/com/example/demo/service/MenuService.java b/src/main/java/com/example/demo/service/MenuService.java new file mode 100644 index 0000000..01513af --- /dev/null +++ b/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: 2025−07-15 13:38 + * @Version 1.0 + **/ + +public interface MenuService { + + + //根据角色ID生成权限树 + List getPermissionTree(Integer roleId); +} diff --git a/src/main/java/com/example/demo/service/RoleService.java b/src/main/java/com/example/demo/service/RoleService.java new file mode 100644 index 0000000..6a64c0e --- /dev/null +++ b/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: 2025−07-15 11:29 + * @Version 1.0 + **/ + +public interface RoleService { + + //新增角色 + Result addRole(RoleVo roleVo); +} diff --git a/src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/MenuServiceImpl.java new file mode 100644 index 0000000..19b1da4 --- /dev/null +++ b/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: 2025−07-15 13:38 + * @Version 1.0 + **/ + +@Service +public class MenuServiceImpl implements MenuService { + + @Autowired + private MenuMapper menuMapper; + + //构建菜单树 + @Override + public List getPermissionTree(Integer roleId) { + // 1. 查询该管理员的所有权限菜单(平级列表) + List allMenus = menuMapper.selectMenusByRoleId(roleId); + + // 2. 构建树形结构(根节点parentId=1) + return buildTree(allMenus, 1); + } + + /** + * 递归构建树形结构 + * @param allMenus 所有菜单列表 + * @param parentId 父菜单ID(初始为0,查根节点) + */ + //详细递归构建树过程 + private List buildTree(List allMenus, Integer parentId) { + // 过滤出当前父节点的子菜单 + List 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; + } + +} diff --git a/src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java new file mode 100644 index 0000000..b33b05b --- /dev/null +++ b/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: 2025−07-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("创建成功"); + } +} + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 8e726da..a550248 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -4,9 +4,9 @@ spring: fail-on-unknown-properties: false datasource: 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 hikari: pool-name: mysql1HikariCP diff --git a/src/main/resources/mapper/MenuMapper.xml b/src/main/resources/mapper/MenuMapper.xml new file mode 100644 index 0000000..423b335 --- /dev/null +++ b/src/main/resources/mapper/MenuMapper.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/RoleMapper.xml b/src/main/resources/mapper/RoleMapper.xml new file mode 100644 index 0000000..76499f6 --- /dev/null +++ b/src/main/resources/mapper/RoleMapper.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file