角色管理接口
This commit is contained in:
@@ -5,6 +5,7 @@ import org.springframework.boot.SpringApplication;
|
|||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||||
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ww
|
* @author ww
|
||||||
@@ -12,6 +13,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
|
|||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@EnableDiscoveryClient
|
@EnableDiscoveryClient
|
||||||
@EnableFeignClients
|
@EnableFeignClients
|
||||||
|
@EnableTransactionManagement
|
||||||
@MapperScan("com.czg.service.account.mapper")
|
@MapperScan("com.czg.service.account.mapper")
|
||||||
public class AccountApplication {
|
public class AccountApplication {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|||||||
@@ -5,10 +5,12 @@ import com.czg.resp.CzgResult;
|
|||||||
import com.czg.service.account.dto.PageDTO;
|
import com.czg.service.account.dto.PageDTO;
|
||||||
import com.czg.service.account.dto.role.RoleAddDTO;
|
import com.czg.service.account.dto.role.RoleAddDTO;
|
||||||
import com.czg.service.account.dto.role.RoleEditDTO;
|
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.entity.SysRole;
|
||||||
import com.czg.service.account.service.SysRoleService;
|
import com.czg.service.account.service.SysRoleService;
|
||||||
import com.mybatisflex.core.paginate.Page;
|
import com.mybatisflex.core.paginate.Page;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -31,8 +33,8 @@ public class RoleController {
|
|||||||
*/
|
*/
|
||||||
@SaAdminCheckPermission(value = "role:list")
|
@SaAdminCheckPermission(value = "role:list")
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
public CzgResult<Page<SysRole>> getList(PageDTO pageDTO) {
|
public CzgResult<Page<SysRole>> getList(PageDTO pageDTO, String key, String startTime, String endTime) {
|
||||||
return CzgResult.success(roleService.getList(pageDTO));
|
return CzgResult.success(roleService.getList(pageDTO, key, startTime, endTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -43,7 +45,7 @@ public class RoleController {
|
|||||||
*/
|
*/
|
||||||
@SaAdminCheckPermission(value = "role:add")
|
@SaAdminCheckPermission(value = "role:add")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public CzgResult<Boolean> add(@RequestBody RoleAddDTO roleAddDTO) {
|
public CzgResult<Boolean> add(@RequestBody @Validated RoleAddDTO roleAddDTO) {
|
||||||
return CzgResult.success(roleService.add(roleAddDTO));
|
return CzgResult.success(roleService.add(roleAddDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +57,19 @@ public class RoleController {
|
|||||||
*/
|
*/
|
||||||
@SaAdminCheckPermission(value = "role:edit")
|
@SaAdminCheckPermission(value = "role:edit")
|
||||||
@PutMapping
|
@PutMapping
|
||||||
public CzgResult<Boolean> edit(@RequestBody RoleEditDTO roleEditDTO) {
|
public CzgResult<Boolean> edit(@RequestBody @Validated RoleEditDTO roleEditDTO) {
|
||||||
return CzgResult.success(roleService.edit(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()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,16 @@
|
|||||||
package com.czg.service.account.dto;
|
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,
|
Integer page,
|
||||||
|
// 数量
|
||||||
|
@NotNull
|
||||||
|
@Min(1)
|
||||||
Integer size
|
Integer size
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,21 @@
|
|||||||
package com.czg.service.account.dto.role;
|
package com.czg.service.account.dto.role;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public record RoleAddDTO(
|
public record RoleAddDTO(
|
||||||
@NotEmpty
|
/* 角色名称 */
|
||||||
|
@NotBlank
|
||||||
String name,
|
String name,
|
||||||
|
// 角色级别
|
||||||
Integer level,
|
Integer level,
|
||||||
@NotNull
|
// 菜单id
|
||||||
|
@NotEmpty(message = "菜单id不能为空")
|
||||||
List<Long> menuIdList,
|
List<Long> menuIdList,
|
||||||
|
// 描述
|
||||||
String description
|
String description
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,24 @@
|
|||||||
package com.czg.service.account.dto.role;
|
package com.czg.service.account.dto.role;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public record RoleEditDTO(
|
public record RoleEditDTO(
|
||||||
|
// 角色id
|
||||||
@NotNull
|
@NotNull
|
||||||
Long id,
|
Long id,
|
||||||
@NotEmpty
|
// 角色名称
|
||||||
|
@NotBlank
|
||||||
String name,
|
String name,
|
||||||
|
// 角色等级
|
||||||
Integer level,
|
Integer level,
|
||||||
|
// 菜单id
|
||||||
@NotNull
|
@NotNull
|
||||||
List<Long> menuIdList,
|
List<Long> menuIdList,
|
||||||
|
// 描述
|
||||||
String description
|
String description
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.czg.service.account.dto.role;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
|
||||||
|
public record RoleRemoveDTO(/* 角色id */@NotNull Long id) {
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ package com.czg.service.account.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.czg.sa.StpKit;
|
import com.czg.sa.StpKit;
|
||||||
import com.czg.service.account.dto.PageDTO;
|
import com.czg.service.account.dto.PageDTO;
|
||||||
import com.czg.service.account.dto.role.RoleAddDTO;
|
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.entity.SysRolesMenus;
|
||||||
import com.czg.service.account.service.SysMenuService;
|
import com.czg.service.account.service.SysMenuService;
|
||||||
import com.czg.service.account.service.SysRolesMenusService;
|
import com.czg.service.account.service.SysRolesMenusService;
|
||||||
|
import com.czg.utils.AssertUtil;
|
||||||
import com.mybatisflex.core.paginate.Page;
|
import com.mybatisflex.core.paginate.Page;
|
||||||
import com.mybatisflex.core.query.QueryChain;
|
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.mybatisflex.spring.service.impl.ServiceImpl;
|
||||||
import com.czg.service.account.entity.SysRole;
|
import com.czg.service.account.entity.SysRole;
|
||||||
import com.czg.service.account.mapper.SysRoleMapper;
|
import com.czg.service.account.mapper.SysRoleMapper;
|
||||||
import com.czg.service.account.service.SysRoleService;
|
import com.czg.service.account.service.SysRoleService;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
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
|
@Override
|
||||||
public Page<SysRole> getList(PageDTO pageDTO) {
|
public Page<SysRole> getList(PageDTO pageDTO, String key, String startTime, String endTime) {
|
||||||
QueryChain<SysRole> queryChain = queryChain();
|
QueryWrapper queryWrapper = new QueryWrapper();
|
||||||
if (!StpKit.ADMIN.isAdmin()) {
|
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
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean add(RoleAddDTO roleAddDTO) {
|
public Boolean add(RoleAddDTO roleAddDTO) {
|
||||||
long roleCount = queryChain().eq(SysRole::getName, roleAddDTO.name()).count();
|
long roleCount = queryChain().eq(SysRole::getName, roleAddDTO.name()).count();
|
||||||
if (roleCount > 0) {
|
if (roleCount > 0) {
|
||||||
@@ -61,25 +95,18 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> imp
|
|||||||
sysRole.setLevel(roleAddDTO.level());
|
sysRole.setLevel(roleAddDTO.level());
|
||||||
sysRole.setDescription(roleAddDTO.description());
|
sysRole.setDescription(roleAddDTO.description());
|
||||||
sysRole.setShopId(StpKit.ADMIN.getLoginIdAsLong());
|
sysRole.setShopId(StpKit.ADMIN.getLoginIdAsLong());
|
||||||
|
sysRole.setCreateUserId(StpKit.ADMIN.getLoginIdAsLong());
|
||||||
sysRole.setCreateTime(DateUtil.date().toLocalDateTime());
|
sysRole.setCreateTime(DateUtil.date().toLocalDateTime());
|
||||||
boolean save = save(sysRole);
|
boolean save = save(sysRole);
|
||||||
if (save) {
|
if (save) {
|
||||||
long count = sysMenuService.queryChain().in(SysMenu::getMenuId).count();
|
return addMenu(sysRole.getId(), roleAddDTO.menuIdList());
|
||||||
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("保存失败");
|
throw new RuntimeException("保存失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean edit(RoleEditDTO roleEditDTO) {
|
public Boolean edit(RoleEditDTO roleEditDTO) {
|
||||||
SysRole role = queryChain().eq(SysRole::getId, roleEditDTO.id()).eq(SysRole::getCreateUserId, StpKit.ADMIN.getLoginIdAsLong()).one();
|
SysRole role = queryChain().eq(SysRole::getId, roleEditDTO.id()).eq(SysRole::getCreateUserId, StpKit.ADMIN.getLoginIdAsLong()).one();
|
||||||
if (role == null) {
|
if (role == null) {
|
||||||
@@ -92,6 +119,11 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> imp
|
|||||||
}
|
}
|
||||||
|
|
||||||
BeanUtil.copyProperties(roleEditDTO, role);
|
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("保存失败");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user