1.角色接口

This commit is contained in:
张松 2025-02-10 15:43:54 +08:00
parent 90f8472fcb
commit 3afbb1c2c4
16 changed files with 251 additions and 11 deletions

View File

@ -3,13 +3,13 @@ package com.czg.controller;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.resp.CzgResult;
import com.czg.service.account.dto.PageDTO;
import com.czg.service.account.dto.role.RoleAddDTO;
import com.czg.service.account.dto.role.RoleEditDTO;
import com.czg.service.account.entity.SysRole;
import com.czg.service.account.service.SysRoleService;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/**
*
@ -23,14 +23,39 @@ public class RoleController {
@Resource
private SysRoleService roleService;
@SaAdminCheckPermission(value = "role.list")
/**
* 获取角色列表
* 权限标识: role:list
* @param pageDTO 分页信息
* @return 分页数据
*/
@SaAdminCheckPermission(value = "role:list")
@GetMapping("/list")
public CzgResult<Page<SysRole>> getList(PageDTO pageDTO) {
return CzgResult.success(roleService.getList(pageDTO));
}
@SaAdminCheckPermission(value = "role.add")
public CzgResult add(PageDTO pageDTO) {
return null;
/**
* 新增角色
* 权限标识: role:add
* @param roleAddDTO 角色信息
* @return 是否成功
*/
@SaAdminCheckPermission(value = "role:add")
@PostMapping
public CzgResult<Boolean> add(@RequestBody RoleAddDTO roleAddDTO) {
return CzgResult.success(roleService.add(roleAddDTO));
}
/**
* 编辑角色
* 权限标识: role:edit
* @param roleEditDTO 角色信息
* @return 是否成功
*/
@SaAdminCheckPermission(value = "role:edit")
@PutMapping
public CzgResult<Boolean> edit(@RequestBody RoleEditDTO roleEditDTO) {
return CzgResult.success(roleService.edit(roleEditDTO));
}
}

View File

@ -34,6 +34,12 @@
<artifactId>cash-common-redis</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.czg</groupId>
<artifactId>cash-common-sa-token</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>

View File

@ -1,5 +1,6 @@
package com.czg.exception;
import cn.dev33.satoken.exception.NotPermissionException;
import com.czg.resp.CzgRespCode;
import com.czg.resp.CzgResult;
import lombok.extern.slf4j.Slf4j;
@ -29,6 +30,14 @@ public class CzgControllerAdvice {
return CzgResult.failure(CzgRespCode.SYSTEM_ERROR);
}
@ResponseBody
@ExceptionHandler(value = NotPermissionException.class)
@ResponseStatus(HttpStatus.OK)
public CzgResult<Object> notPermissionErrorHandler(NotPermissionException ex) {
setErrorLog(ex);
return CzgResult.failure(CzgRespCode.UN_PERMISSION);
}
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.OK)

View File

@ -13,7 +13,8 @@ public enum CzgRespCode {
RECORD_NOT_EXIST(601, "记录不存在"),
RECORD_EXISTED(602, "记录已存在"),
PARAM_ERROR(603, "参数错误"),
UNAUTHORIZED(401, "未授权"),;
UNAUTHORIZED(401, "未授权"),
UN_PERMISSION(402, "无此接口权限"),;
private final int code;
private final String msg;

View File

@ -1,4 +1,8 @@
package com.czg.service.account.dto;
public record PageDTO(Integer page, Integer size) {
public record PageDTO(
Integer page,
Integer size
) {
}

View File

@ -0,0 +1,16 @@
package com.czg.service.account.dto.role;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.util.List;
public record RoleAddDTO(
@NotEmpty
String name,
Integer level,
@NotNull
List<Long> menuIdList,
String description
) {
}

View File

@ -0,0 +1,18 @@
package com.czg.service.account.dto.role;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.util.List;
public record RoleEditDTO(
@NotNull
Long id,
@NotEmpty
String name,
Integer level,
@NotNull
List<Long> menuIdList,
String description
) {
}

View File

@ -49,7 +49,7 @@ public class SysRole implements Serializable {
/**
* 商户id
*/
private Integer shopId;
private Long shopId;
/**
* 描述

View File

@ -0,0 +1,42 @@
package com.czg.service.account.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 角色菜单关联 实体类
*
* @author Administrator
* @since 2025-02-10
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("sys_roles_menus")
public class SysRolesMenus implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 菜单ID
*/
@Id
private Long menuId;
/**
* 角色ID
*/
@Id
private Long roleId;
}

View File

@ -0,0 +1,14 @@
package com.czg.service.account.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.service.account.entity.SysRolesMenus;
/**
* 角色菜单关联 映射层
*
* @author Administrator
* @since 2025-02-10
*/
public interface SysRolesMenusMapper extends BaseMapper<SysRolesMenus> {
}

View File

@ -1,6 +1,8 @@
package com.czg.service.account.service;
import com.czg.service.account.dto.PageDTO;
import com.czg.service.account.dto.role.RoleAddDTO;
import com.czg.service.account.dto.role.RoleEditDTO;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.czg.service.account.entity.SysRole;
@ -18,4 +20,8 @@ public interface SysRoleService extends IService<SysRole> {
List<SysRole> getByUserId(Long id);
Page<SysRole> getList(PageDTO pageDTO);
Boolean add(RoleAddDTO roleAddDTO);
Boolean edit(RoleEditDTO roleEditDTO);
}

View File

@ -0,0 +1,14 @@
package com.czg.service.account.service;
import com.mybatisflex.core.service.IService;
import com.czg.service.account.entity.SysRolesMenus;
/**
* 角色菜单关联 服务层
*
* @author Administrator
* @since 2025-02-10
*/
public interface SysRolesMenusService extends IService<SysRolesMenus> {
}

View File

@ -1,15 +1,25 @@
package com.czg.service.account.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.czg.sa.StpKit;
import com.czg.service.account.dto.PageDTO;
import com.czg.service.account.dto.role.RoleAddDTO;
import com.czg.service.account.dto.role.RoleEditDTO;
import com.czg.service.account.entity.SysMenu;
import com.czg.service.account.entity.SysRolesMenus;
import com.czg.service.account.service.SysMenuService;
import com.czg.service.account.service.SysRolesMenusService;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.service.account.entity.SysRole;
import com.czg.service.account.mapper.SysRoleMapper;
import com.czg.service.account.service.SysRoleService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
@ -20,6 +30,10 @@ import java.util.List;
*/
@Service
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService{
@Resource
private SysMenuService sysMenuService;
@Resource
private SysRolesMenusService sysRolesMenusService;
@Override
public List<SysRole> getByUserId(Long id) {
@ -34,4 +48,50 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> imp
}
return queryChain.page(new Page<>(pageDTO.page(), pageDTO.size()));
}
@Override
public Boolean add(RoleAddDTO roleAddDTO) {
long roleCount = queryChain().eq(SysRole::getName, roleAddDTO.name()).count();
if (roleCount > 0) {
throw new RuntimeException("此角色名称已存在");
}
SysRole sysRole = new SysRole();
sysRole.setName(roleAddDTO.name());
sysRole.setLevel(roleAddDTO.level());
sysRole.setDescription(roleAddDTO.description());
sysRole.setShopId(StpKit.ADMIN.getLoginIdAsLong());
sysRole.setCreateTime(DateUtil.date().toLocalDateTime());
boolean save = save(sysRole);
if (save) {
long count = sysMenuService.queryChain().in(SysMenu::getMenuId).count();
if (count != roleAddDTO.menuIdList().size()) {
throw new RuntimeException("菜单id包含错误id");
}
ArrayList<SysRolesMenus> rolesMenus = new ArrayList<>();
for (Long id : roleAddDTO.menuIdList()) {
rolesMenus.add(new SysRolesMenus(id, sysRole.getId()));
}
return sysRolesMenusService.saveBatch(rolesMenus);
}
throw new RuntimeException("保存失败");
}
@Override
public Boolean edit(RoleEditDTO roleEditDTO) {
SysRole role = queryChain().eq(SysRole::getId, roleEditDTO.id()).eq(SysRole::getCreateUserId, StpKit.ADMIN.getLoginIdAsLong()).one();
if (role == null) {
throw new RuntimeException("角色不存在");
}
long roleCount = queryChain().eq(SysRole::getName, roleEditDTO.name()).count();
if (roleCount > 0) {
throw new RuntimeException("此角色名称已存在");
}
BeanUtil.copyProperties(roleEditDTO, role);
return updateById(role);
}
}

View File

@ -0,0 +1,18 @@
package com.czg.service.account.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.service.account.entity.SysRolesMenus;
import com.czg.service.account.mapper.SysRolesMenusMapper;
import com.czg.service.account.service.SysRolesMenusService;
import org.springframework.stereotype.Service;
/**
* 角色菜单关联 服务层实现
*
* @author Administrator
* @since 2025-02-10
*/
@Service
public class SysRolesMenusServiceImpl extends ServiceImpl<SysRolesMenusMapper, SysRolesMenus> implements SysRolesMenusService{
}

View File

@ -0,0 +1,7 @@
<?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.czg.service.account.mapper.SysRolesMenusMapper">
</mapper>

View File

@ -69,7 +69,7 @@ public class Main {
//设置表前缀和只生成哪些表setGenerateTable 未配置时生成所有表
globalConfig.getStrategyConfig()
.setTablePrefix("")
.setGenerateTable("sys_users_roles");
.setGenerateTable("sys_roles_menus");
//设置生成 entity 并启用 Lombok
globalConfig.enableEntity()