diff --git a/ebike-staff/src/main/java/com/cdzy/staff/controller/EbikePermissionController.java b/ebike-staff/src/main/java/com/cdzy/staff/controller/EbikePermissionController.java index 17dd71a..6d1f01b 100644 --- a/ebike-staff/src/main/java/com/cdzy/staff/controller/EbikePermissionController.java +++ b/ebike-staff/src/main/java/com/cdzy/staff/controller/EbikePermissionController.java @@ -2,13 +2,18 @@ package com.cdzy.staff.controller; import com.cdzy.common.model.request.PageParam; import com.cdzy.common.model.response.JsonResult; +import com.cdzy.staff.model.dto.EbikePermissionTreeNode; import com.cdzy.staff.model.entity.EbikePermission; +import com.cdzy.staff.model.vo.EbikePermissionVo; import com.cdzy.staff.service.EbikePermissionService; import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.core.util.StringUtil; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Objects; /** * 系统权限表 控制层。 @@ -30,20 +35,20 @@ public class EbikePermissionController { * @return {@code true} 添加成功,{@code false} 添加失败 */ @PostMapping("save") - public JsonResult save(@RequestBody EbikePermission ebikePermission) { - ebikePermissionService.save(ebikePermission); + public JsonResult save(@RequestBody EbikePermissionVo ebikePermission) { + ebikePermissionService.savePermission(ebikePermission); return JsonResult.success(); } /** * 根据主键删除系统权限表。 * - * @param id 主键 + * @param permissionId 主键 * @return {@code true} 删除成功,{@code false} 删除失败 */ - @PostMapping("remove/{id}") - public JsonResult remove(@PathVariable Long id) { - ebikePermissionService.removeById(id); + @GetMapping("remove") + public JsonResult remove(@RequestParam("permissionId") Long permissionId) { + ebikePermissionService.removeById(permissionId); return JsonResult.success(); } @@ -54,8 +59,8 @@ public class EbikePermissionController { * @return {@code true} 更新成功,{@code false} 更新失败 */ @PostMapping("update") - public JsonResult update(@RequestBody EbikePermission ebikePermission) { - ebikePermissionService.updateById(ebikePermission); + public JsonResult update(@RequestBody EbikePermissionVo ebikePermission) { + ebikePermissionService.updatePermission(ebikePermission); return JsonResult.success(); } @@ -65,20 +70,22 @@ public class EbikePermissionController { * @return 所有数据 */ @GetMapping("list") - public JsonResult list() { - List list = ebikePermissionService.list(); + public JsonResult list(@RequestParam("type")Integer type) { + QueryWrapper queryWrapper = QueryWrapper.create() + .eq("type", type, Objects.nonNull(type)); + List list = ebikePermissionService.list(queryWrapper); return JsonResult.success(list); } /** * 根据系统权限表主键获取详细信息。 * - * @param id 系统权限表主键 + * @param permissionId 系统权限表主键 * @return 系统权限表详情 */ - @GetMapping("getInfo/{id}") - public JsonResult getInfo(@PathVariable Long id) { - EbikePermission ebikePermission = ebikePermissionService.getById(id); + @GetMapping("getInfo") + public JsonResult getInfo(@RequestParam("permissionId") Long permissionId) { + EbikePermission ebikePermission = ebikePermissionService.getById(permissionId); return JsonResult.success(ebikePermission); } @@ -89,9 +96,21 @@ public class EbikePermissionController { * @return 分页对象 */ @GetMapping("page") - public JsonResult page(PageParam pageParam) { - Page page = ebikePermissionService.page(pageParam.getPage()); + public JsonResult page(PageParam pageParam,String name) { + QueryWrapper queryWrapper = QueryWrapper.create().like(EbikePermission::getName,name, StringUtil.hasText(name)); + Page page = ebikePermissionService.page(pageParam.getPage(),queryWrapper); return JsonResult.success(page); } + /** + * 获取所有权限的树形结构。 + * + * @return 树形结构 + */ + @GetMapping("tree") + public JsonResult tree() { + List list = ebikePermissionService.tree(); + return JsonResult.success(list); + } + } diff --git a/ebike-staff/src/main/java/com/cdzy/staff/model/dto/EbikePermissionTreeNode.java b/ebike-staff/src/main/java/com/cdzy/staff/model/dto/EbikePermissionTreeNode.java new file mode 100644 index 0000000..649a53d --- /dev/null +++ b/ebike-staff/src/main/java/com/cdzy/staff/model/dto/EbikePermissionTreeNode.java @@ -0,0 +1,82 @@ +package com.cdzy.staff.model.dto; + +import com.mybatisflex.annotation.Id; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 系统权限表 实体类。 + * + * @author loves + * @since 2025-09-04 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EbikePermissionTreeNode implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id + private Long permissionId; + + /** + * 组件路径 + */ + private String component; + + /** + * 菜单名称 + */ + private String name; + + /** + * 类型:1-目录 2-页面 3-按钮 + */ + private Integer type; + + private Long createBy; + + private LocalDateTime createTime; + + private Long updateBy; + + private LocalDateTime updateTime; + + private Boolean isDeleted; + + /** + * 路由路径 + */ + private String path; + + /** + * 父级id + */ + private Long parentId; + + /** + * 图标 + */ + private String svgIcon; + + /** + * 重定向路径 + */ + private String redirect; + + /** + * 子集 + */ + private List children; + +} diff --git a/ebike-staff/src/main/java/com/cdzy/staff/model/entity/EbikePermission.java b/ebike-staff/src/main/java/com/cdzy/staff/model/entity/EbikePermission.java index 7db4fa7..a313d79 100644 --- a/ebike-staff/src/main/java/com/cdzy/staff/model/entity/EbikePermission.java +++ b/ebike-staff/src/main/java/com/cdzy/staff/model/entity/EbikePermission.java @@ -1,18 +1,16 @@ package com.cdzy.staff.model.entity; import com.mybatisflex.annotation.Id; -import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.Table; -import java.io.Serializable; -import java.sql.Timestamp; - -import java.io.Serial; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + /** * 系统权限表 实体类。 * @@ -29,7 +27,7 @@ public class EbikePermission implements Serializable { @Serial private static final long serialVersionUID = 1L; - @Id(keyType = KeyType.Auto) + @Id private Long permissionId; /** @@ -49,11 +47,11 @@ public class EbikePermission implements Serializable { private Long createBy; - private Timestamp createTime; + private LocalDateTime createTime; private Long updateBy; - private Timestamp updateTime; + private LocalDateTime updateTime; private Boolean isDeleted; @@ -72,4 +70,9 @@ public class EbikePermission implements Serializable { */ private String svgIcon; + /** + * 重定向路径 + */ + private String redirect; + } diff --git a/ebike-staff/src/main/java/com/cdzy/staff/model/vo/EbikePermissionVo.java b/ebike-staff/src/main/java/com/cdzy/staff/model/vo/EbikePermissionVo.java new file mode 100644 index 0000000..4f19448 --- /dev/null +++ b/ebike-staff/src/main/java/com/cdzy/staff/model/vo/EbikePermissionVo.java @@ -0,0 +1,72 @@ +package com.cdzy.staff.model.vo; + +import com.mybatisflex.annotation.Table; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 系统权限表 实体类。 + * + * @author loves + * @since 2025-09-04 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("ebike_permission") +public class EbikePermissionVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long permissionId; + + /** + * 菜单标题 + */ + @NotBlank(message = "菜单标题不能为空") + private String name; + + /** + * 类型:1-目录 2-页面 3-按钮 + */ + @NotNull(message = "类型不能为空") + private Integer type; + + /** + * 组件路径 + */ + @NotBlank(message = "菜单标题不能为空") + private String component; + + /** + * 路由路径 + */ + @NotBlank(message = "菜单标题不能为空") + private String path; + + + /** + * 图标 + */ + private String svgIcon; + + /** + * 重定向路径 + */ + private String redirect; + + /** + * 父级id + */ + private Long parentId; + +} diff --git a/ebike-staff/src/main/java/com/cdzy/staff/service/EbikePermissionService.java b/ebike-staff/src/main/java/com/cdzy/staff/service/EbikePermissionService.java index 6ad1383..d842f7f 100644 --- a/ebike-staff/src/main/java/com/cdzy/staff/service/EbikePermissionService.java +++ b/ebike-staff/src/main/java/com/cdzy/staff/service/EbikePermissionService.java @@ -1,8 +1,12 @@ package com.cdzy.staff.service; +import com.cdzy.staff.model.dto.EbikePermissionTreeNode; +import com.cdzy.staff.model.vo.EbikePermissionVo; import com.mybatisflex.core.service.IService; import com.cdzy.staff.model.entity.EbikePermission; +import java.util.List; + /** * 系统权限表 服务层。 * @@ -11,4 +15,13 @@ import com.cdzy.staff.model.entity.EbikePermission; */ public interface EbikePermissionService extends IService { + void savePermission(EbikePermissionVo ebikePermission); + + void updatePermission(EbikePermissionVo ebikePermission); + + /** + * 获取树形结构 + * @return 树形结构 + */ + List tree(); } diff --git a/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeOperatorServiceImpl.java b/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeOperatorServiceImpl.java index 7102300..6c00f10 100644 --- a/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeOperatorServiceImpl.java +++ b/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeOperatorServiceImpl.java @@ -41,6 +41,7 @@ public class EbikeOperatorServiceImpl extends ServiceImpl implements EbikePermissionService{ +public class EbikePermissionServiceImpl extends ServiceImpl implements EbikePermissionService { + @Resource + private EbikePermissionMapper ebikePermissionMapper; + + @Override + public void savePermission(EbikePermissionVo ebikePermission) { + Long parentId = ebikePermission.getParentId(); + checkParent(parentId); + EbikePermission permission = EbikePermission.builder() + .name(ebikePermission.getName()) + .type(ebikePermission.getType()) + .path(ebikePermission.getPath()) + .component(ebikePermission.getComponent()) + .svgIcon(ebikePermission.getSvgIcon()) + .redirect(ebikePermission.getRedirect()) + .parentId(parentId) + .createBy(StpUtil.getLoginIdAsLong()) + .build(); + ebikePermissionMapper.insert(permission); + } + + @Override + public void updatePermission(EbikePermissionVo ebikePermission) { + Long parentId = ebikePermission.getParentId(); + checkParent(parentId); + EbikePermission permission = ebikePermissionMapper.selectOneById(ebikePermission.getPermissionId()); + if (permission == null) { + throw new EbikeException("该页面/按钮不存在或已删除"); + } + permission.setName(ebikePermission.getName()); + permission.setType(ebikePermission.getType()); + permission.setPath(ebikePermission.getPath()); + permission.setComponent(ebikePermission.getComponent()); + permission.setSvgIcon(ebikePermission.getSvgIcon()); + permission.setRedirect(ebikePermission.getRedirect()); + permission.setParentId(parentId); + permission.setUpdateBy(StpUtil.getLoginIdAsLong()); + ebikePermissionMapper.update(permission); + } + + @Override + public List tree() { + QueryWrapper queryWrapper = QueryWrapper.create() + .isNull(EbikePermission::getParentId); + List first = ebikePermissionMapper.selectListByQueryAs(queryWrapper,EbikePermissionTreeNode.class); + List firstIds = first.stream().map(EbikePermissionTreeNode::getPermissionId).toList(); + + queryWrapper.clear(); + queryWrapper.in(EbikePermission::getParentId,firstIds); + List second = ebikePermissionMapper.selectListByQueryAs(queryWrapper,EbikePermissionTreeNode.class); + List secondIds = second.stream().map(EbikePermissionTreeNode::getPermissionId).toList(); + + queryWrapper.clear(); + queryWrapper.in(EbikePermission::getParentId,secondIds); + List third = ebikePermissionMapper.selectListByQueryAs(queryWrapper,EbikePermissionTreeNode.class); + + TreeUtil.permissionTree(first,second,third); + return first; + } + + private void checkParent(Long parentId) { + if (parentId != null) { + EbikePermission permission = ebikePermissionMapper.selectOneById(parentId); + if (permission == null) { + throw new EbikeException("所选父级不存在或已删除"); + } + } + } } diff --git a/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeRoleServiceImpl.java b/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeRoleServiceImpl.java index 283a7b4..07b96fc 100644 --- a/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeRoleServiceImpl.java +++ b/ebike-staff/src/main/java/com/cdzy/staff/service/impl/EbikeRoleServiceImpl.java @@ -1,5 +1,6 @@ package com.cdzy.staff.service.impl; +import cn.dev33.satoken.stp.StpUtil; import com.cdzy.common.ex.EbikeException; import com.cdzy.staff.mapper.EbikeOperatorMapper; import com.cdzy.staff.mapper.EbikeRoleMapper; @@ -53,6 +54,7 @@ public class EbikeRoleServiceImpl extends ServiceImpl first, List second, List third) { + buildTree(second, third); + buildTree(first, second); + } + + public static void buildTree(List parent, List child) { + parent.forEach(parentNode -> { + Long nodeId = parentNode.getPermissionId(); + if (child != null && !child.isEmpty()) { + List list = child.stream().filter(Objects::nonNull).filter(childNode -> Objects.equals(nodeId, childNode.getParentId())).toList(); + parentNode.setChildren(list); + } + }); + } +}