|
28 | 28 | import org.dinky.service.RoleMenuService; |
29 | 29 |
|
30 | 30 | import java.util.List; |
| 31 | +import java.util.stream.Collectors; |
31 | 32 |
|
32 | 33 | import org.springframework.stereotype.Service; |
| 34 | +import org.springframework.transaction.annotation.Transactional; |
33 | 35 |
|
34 | 36 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
35 | 37 |
|
|
38 | 40 | @Service |
39 | 41 | public class RoleMenuServiceImpl extends SuperServiceImpl<RoleMenuMapper, RoleMenu> implements RoleMenuService { |
40 | 42 | @Override |
| 43 | + @Transactional(rollbackFor = Exception.class) |
41 | 44 | public Result<Void> assignMenuToRole(AssignMenuToRoleDTO assignMenuToRoleDto) { |
42 | 45 |
|
43 | 46 | if (CollUtil.isEmpty(assignMenuToRoleDto.getMenuIds())) { |
44 | 47 | return Result.failed(Status.SELECT_MENU); |
45 | 48 | } |
46 | | - |
47 | | - int insertSize = 0; |
48 | 49 | // 先删除原有的关系 |
49 | | - List<RoleMenu> roleMenus = getBaseMapper() |
50 | | - .selectList( |
51 | | - new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, assignMenuToRoleDto.getRoleId())); |
52 | | - |
53 | | - // if not empty , delete all role menus |
54 | | - if (CollUtil.isNotEmpty(roleMenus)) { |
55 | | - roleMenus.forEach(rm -> { |
56 | | - getBaseMapper().delete(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getMenuId, rm.getMenuId())); |
57 | | - }); |
58 | | - } |
59 | | - |
60 | | - // then insert new role menus |
61 | | - for (Integer id : assignMenuToRoleDto.getMenuIds()) { |
62 | | - RoleMenu roleMenu = new RoleMenu(); |
63 | | - roleMenu.setRoleId(assignMenuToRoleDto.getRoleId()); |
64 | | - roleMenu.setMenuId(id); |
65 | | - insertSize += getBaseMapper().insert(roleMenu); |
66 | | - } |
67 | | - |
68 | | - if (assignMenuToRoleDto.getMenuIds().size() == insertSize) { |
| 50 | + getBaseMapper() |
| 51 | + .delete(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, assignMenuToRoleDto.getRoleId())); |
| 52 | + List<RoleMenu> newRoles = assignMenuToRoleDto.getMenuIds().stream() |
| 53 | + .map(menuId -> { |
| 54 | + RoleMenu roleMenu = new RoleMenu(); |
| 55 | + roleMenu.setRoleId(assignMenuToRoleDto.getRoleId()); |
| 56 | + roleMenu.setMenuId(menuId); |
| 57 | + return roleMenu; |
| 58 | + }) |
| 59 | + .collect(Collectors.toList()); |
| 60 | + boolean res = saveBatch(newRoles); |
| 61 | + if (res) { |
69 | 62 | return Result.succeed(Status.ASSIGN_MENU_SUCCESS); |
| 63 | + } else { |
| 64 | + return Result.failed(Status.ASSIGN_MENU_FAILED); |
70 | 65 | } |
71 | | - return Result.failed(Status.ASSIGN_MENU_FAILED); |
72 | 66 | } |
73 | 67 | } |
0 commit comments