From 5536171c52a4dad35b56d338abfbcec1e40021bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Mon, 10 Feb 2025 16:55:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2=E7=AE=A1=E7=90=86=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/czg/AccountApplication.java | 2 + .../com/czg/controller/RoleController.java | 22 +++++-- .../com/czg/service/account/dto/PageDTO.java | 10 ++- .../service/account/dto/role/RoleAddDTO.java | 9 ++- .../service/account/dto/role/RoleEditDTO.java | 8 ++- .../account/dto/role/RoleRemoveDTO.java | 7 +++ .../service/impl/SysRoleServiceImpl.java | 62 ++++++++++++++----- 7 files changed, 97 insertions(+), 23 deletions(-) create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleRemoveDTO.java diff --git a/cash-api/account-server/src/main/java/com/czg/AccountApplication.java b/cash-api/account-server/src/main/java/com/czg/AccountApplication.java index 7907e59ba..719d7723b 100644 --- a/cash-api/account-server/src/main/java/com/czg/AccountApplication.java +++ b/cash-api/account-server/src/main/java/com/czg/AccountApplication.java @@ -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) { diff --git a/cash-api/account-server/src/main/java/com/czg/controller/RoleController.java b/cash-api/account-server/src/main/java/com/czg/controller/RoleController.java index f67be92c1..5d85426c0 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/RoleController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/RoleController.java @@ -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> getList(PageDTO pageDTO) { - return CzgResult.success(roleService.getList(pageDTO)); + public CzgResult> 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 add(@RequestBody RoleAddDTO roleAddDTO) { + public CzgResult 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 edit(@RequestBody RoleEditDTO roleEditDTO) { + public CzgResult edit(@RequestBody @Validated RoleEditDTO roleEditDTO) { return CzgResult.success(roleService.edit(roleEditDTO)); } + + /** + * 删除角色 + * 权限标识: role:edit + * @param roleRemoveDTO 角色信息 + * @return 是否成功 + */ + @SaAdminCheckPermission(value = "role:remove") + @DeleteMapping + public CzgResult remove(@RequestBody @Validated RoleRemoveDTO roleRemoveDTO) { + return CzgResult.success(roleService.removeById(roleRemoveDTO.id())); + } } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/dto/PageDTO.java b/cash-service/account-service/src/main/java/com/czg/service/account/dto/PageDTO.java index e31e4ccfb..09a9b5fa4 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/dto/PageDTO.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/dto/PageDTO.java @@ -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 ) { } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleAddDTO.java b/cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleAddDTO.java index 4d8e42601..fb65ed7f8 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleAddDTO.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleAddDTO.java @@ -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 menuIdList, + // 描述 String description ) { } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleEditDTO.java b/cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleEditDTO.java index bea015d42..0a6bfe719 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleEditDTO.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleEditDTO.java @@ -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 menuIdList, + // 描述 String description ) { } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleRemoveDTO.java b/cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleRemoveDTO.java new file mode 100644 index 000000000..4e6d3d30f --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/dto/role/RoleRemoveDTO.java @@ -0,0 +1,7 @@ +package com.czg.service.account.dto.role; + +import jakarta.validation.constraints.NotNull; + + +public record RoleRemoveDTO(/* 角色id */@NotNull Long id) { +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java index 4fd444d0f..deb0f0140 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java @@ -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 imp } @Override - public Page getList(PageDTO pageDTO) { - QueryChain queryChain = queryChain(); + public Page 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 menuIds) { + long count = sysMenuService.queryChain().in(SysMenu::getMenuId, menuIds).count(); + if (count != menuIds.size()) { + throw new RuntimeException("菜单id包含错误id"); + } + + ArrayList 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 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 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 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("保存失败"); } }