角色管理接口

This commit is contained in:
张松
2025-02-10 16:55:42 +08:00
parent 20d4c0155a
commit 5536171c52
7 changed files with 97 additions and 23 deletions

View File

@@ -5,6 +5,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @author ww
@@ -12,6 +13,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableTransactionManagement
@MapperScan("com.czg.service.account.mapper")
public class AccountApplication {
public static void main(String[] args) {

View File

@@ -5,10 +5,12 @@ 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.dto.role.RoleRemoveDTO;
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.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
@@ -31,8 +33,8 @@ public class RoleController {
*/
@SaAdminCheckPermission(value = "role:list")
@GetMapping("/list")
public CzgResult<Page<SysRole>> getList(PageDTO pageDTO) {
return CzgResult.success(roleService.getList(pageDTO));
public CzgResult<Page<SysRole>> getList(PageDTO pageDTO, String key, String startTime, String endTime) {
return CzgResult.success(roleService.getList(pageDTO, key, startTime, endTime));
}
/**
@@ -43,7 +45,7 @@ public class RoleController {
*/
@SaAdminCheckPermission(value = "role:add")
@PostMapping
public CzgResult<Boolean> add(@RequestBody RoleAddDTO roleAddDTO) {
public CzgResult<Boolean> add(@RequestBody @Validated RoleAddDTO roleAddDTO) {
return CzgResult.success(roleService.add(roleAddDTO));
}
@@ -55,7 +57,19 @@ public class RoleController {
*/
@SaAdminCheckPermission(value = "role:edit")
@PutMapping
public CzgResult<Boolean> edit(@RequestBody RoleEditDTO roleEditDTO) {
public CzgResult<Boolean> edit(@RequestBody @Validated RoleEditDTO roleEditDTO) {
return CzgResult.success(roleService.edit(roleEditDTO));
}
/**
* 删除角色
* 权限标识: role:edit
* @param roleRemoveDTO 角色信息
* @return 是否成功
*/
@SaAdminCheckPermission(value = "role:remove")
@DeleteMapping
public CzgResult<Boolean> remove(@RequestBody @Validated RoleRemoveDTO roleRemoveDTO) {
return CzgResult.success(roleService.removeById(roleRemoveDTO.id()));
}
}

View File

@@ -1,8 +1,16 @@
package com.czg.service.account.dto;
public record PageDTO(
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
public record PageDTO(
// 页码
@NotNull
@Min(1)
Integer page,
// 数量
@NotNull
@Min(1)
Integer size
) {
}

View File

@@ -1,16 +1,21 @@
package com.czg.service.account.dto.role;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.util.List;
public record RoleAddDTO(
@NotEmpty
/* 角色名称 */
@NotBlank
String name,
// 角色级别
Integer level,
@NotNull
// 菜单id
@NotEmpty(message = "菜单id不能为空")
List<Long> menuIdList,
// 描述
String description
) {
}

View File

@@ -1,18 +1,24 @@
package com.czg.service.account.dto.role;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.util.List;
public record RoleEditDTO(
// 角色id
@NotNull
Long id,
@NotEmpty
// 角色名称
@NotBlank
String name,
// 角色等级
Integer level,
// 菜单id
@NotNull
List<Long> menuIdList,
// 描述
String description
) {
}

View File

@@ -0,0 +1,7 @@
package com.czg.service.account.dto.role;
import jakarta.validation.constraints.NotNull;
public record RoleRemoveDTO(/* 角色id */@NotNull Long id) {
}

View File

@@ -2,6 +2,7 @@ package com.czg.service.account.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.czg.sa.StpKit;
import com.czg.service.account.dto.PageDTO;
import com.czg.service.account.dto.role.RoleAddDTO;
@@ -10,18 +11,24 @@ 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.czg.utils.AssertUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryCondition;
import com.mybatisflex.core.query.QueryWrapper;
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 org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import static com.mybatisflex.core.query.QueryMethods.column;
/**
* 角色表 服务层实现。
*
@@ -41,15 +48,42 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> imp
}
@Override
public Page<SysRole> getList(PageDTO pageDTO) {
QueryChain<SysRole> queryChain = queryChain();
public Page<SysRole> getList(PageDTO pageDTO, String key, String startTime, String endTime) {
QueryWrapper queryWrapper = new QueryWrapper();
if (!StpKit.ADMIN.isAdmin()) {
queryChain.eq(SysRole::getCreateUserId, StpKit.ADMIN.getLoginIdAsLong());
queryWrapper.eq(SysRole::getCreateUserId, StpKit.ADMIN.getLoginIdAsLong());
}
return queryChain.page(new Page<>(pageDTO.page(), pageDTO.size()));
if (StrUtil.isNotBlank(key)) {
queryWrapper.and(column(SysRole::getName).like(key).or(column(SysRole::getDescription).like(key)));
}
if (StrUtil.isNotBlank(startTime)) {
queryWrapper.ge(SysRole::getCreateTime, DateUtil.parse(startTime));
}
if (StrUtil.isNotBlank(endTime)) {
queryWrapper.le(SysRole::getCreateTime, DateUtil.parse(endTime));
}
return page(new Page<>(pageDTO.page(), pageDTO.size()), queryWrapper);
}
public boolean addMenu(Long roleId, List<Long> menuIds) {
long count = sysMenuService.queryChain().in(SysMenu::getMenuId, menuIds).count();
if (count != menuIds.size()) {
throw new RuntimeException("菜单id包含错误id");
}
ArrayList<SysRolesMenus> rolesMenus = new ArrayList<>();
for (Long id : menuIds) {
rolesMenus.add(new SysRolesMenus(id, roleId));
}
return sysRolesMenusService.saveBatch(rolesMenus);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean add(RoleAddDTO roleAddDTO) {
long roleCount = queryChain().eq(SysRole::getName, roleAddDTO.name()).count();
if (roleCount > 0) {
@@ -61,25 +95,18 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> imp
sysRole.setLevel(roleAddDTO.level());
sysRole.setDescription(roleAddDTO.description());
sysRole.setShopId(StpKit.ADMIN.getLoginIdAsLong());
sysRole.setCreateUserId(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);
return addMenu(sysRole.getId(), roleAddDTO.menuIdList());
}
throw new RuntimeException("保存失败");
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean edit(RoleEditDTO roleEditDTO) {
SysRole role = queryChain().eq(SysRole::getId, roleEditDTO.id()).eq(SysRole::getCreateUserId, StpKit.ADMIN.getLoginIdAsLong()).one();
if (role == null) {
@@ -92,6 +119,11 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> imp
}
BeanUtil.copyProperties(roleEditDTO, role);
return updateById(role);
boolean b = updateById(role);
if (b) {
sysRolesMenusService.updateChain().eq(SysRolesMenus::getRoleId, role.getId()).remove();
return addMenu(role.getId(), roleEditDTO.menuIdList());
}
throw new RuntimeException("保存失败");
}
}