package com.nanjing.water.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.nanjing.water.common.ExecutedResult; import com.nanjing.water.common.PagerResult; import com.nanjing.water.common.model.Tuple; import com.nanjing.water.common.util.*; import com.nanjing.water.entity.enums.EState; import com.nanjing.water.entity.request.ReqListSetSort; import com.nanjing.water.entity.request.ReqSetSort; import com.nanjing.water.entity.request.adminmenu.ReqCreateAdminMenu; import com.nanjing.water.entity.request.adminmenu.ReqModifyAdminMenu; import com.nanjing.water.entity.request.adminpermission.ReqCreateAdminPermission; import com.nanjing.water.entity.request.adminpermission.ReqModifyAdminPermission; import com.nanjing.water.entity.request.adminrole.ReqCreateAdminRole; import com.nanjing.water.entity.request.adminrole.ReqModifyAdminRole; import com.nanjing.water.entity.request.adminrolemenurelation.ReqSetListMenu4Role; import com.nanjing.water.entity.response.admin.ResAdminMenuTreeAndPermission; import com.nanjing.water.entity.response.admin.ResAdminPermission; import com.nanjing.water.entity.response.admin.ResAdminPower; import com.nanjing.water.entity.search.SearchAdminMenu; import com.nanjing.water.entity.search.SearchAdminPermission; import com.nanjing.water.entity.search.SearchAdminRole; import com.nanjing.water.repository.impl.*; import com.nanjing.water.repository.po.*; import com.nanjing.water.repository.vo.AdminMenuVO; import com.nanjing.water.repository.vo.AdminRoleVO; import com.nanjing.water.service.cache.AdminMenuService; import com.nanjing.water.service.cache.AdminPermissionService; import com.nanjing.water.service.convert.AdminMenuConvert; import com.nanjing.water.service.convert.AdminPermissionConvert; import com.nanjing.water.service.convert.AdminRoleConvert; import org.apache.commons.lang3.BooleanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; @Service public class AdminPowerService extends BaseService { @Autowired private AdminMenuMapperImpl menusDao; @Autowired private AdminPermissionMapperImpl permissionDao; @Autowired private AdminRoleMapperImpl roleDao; @Autowired private AdminRoleMenuRelationMapperImpl roleMenuRelationDao; @Autowired private AdminRolePermissionRelationMapperImpl rolePermissionRelationDao; @Autowired private AdminRoleRelationMapperImpl adminRoleRelationDao; @Autowired private AdminMenuService menusService; @Autowired private AdminPermissionService permissionService; // 创建菜单 public ExecutedResult createMenu(ReqCreateAdminMenu request) { AdminMenuPO item = AdminMenuConvert.INSTANCE.toCreate(request); item.setParentId(NumericUtil.tryParseLong(request.getParentId(), 0L)); item.setTitle(ParameterUtil.dealNullStr(request.getTitle())); item.setLevel(1); item.setSort(NumericUtil.tryParseInt(request.getSort(), 0)); item.setStatus(EState.NORMAL.getValue()); item.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); if (item.getParentId().compareTo(0L) > 0) { ExecutedResult check = this.checkMenuId(request.getParentId()); if (check.isFailed()) { return ExecutedResult.failed("父级菜单不存在: " + request.getParentId()); } item.setLevel(check.getData().getLevel() + 1); } int rowCount = menusDao.insert(item); if (rowCount == 1) { // 删除菜单缓存 menusService.removeListAllCache(); // 删除所有权限缓存 permissionService.removeListAllCache(); // 删除所有用户的菜单和权限缓存 this.removePowerAllUser(); // 给新增的菜单添加默认权限 permissionService.createDefaultPermission(item); return ExecutedResult.success(item.getId()); } return ExecutedResult.failed("创建[菜单]失败。"); } private ExecutedResult checkMenuId(Long id) { AdminMenuPO item = menusDao.get(id); if (Objects.isNull(item)) { return ExecutedResult.failed("[菜单]不存在: " + id); } return ExecutedResult.success(item); } protected ExecutedResult> checkMenuId(List listId) { // 从数据库查找测试信息 List list = menusDao.getList(listId); if (ListUtil.isNullOrEmpty(list)) { return ExecutedResult.failed("[菜单]不存在." + listId); } // 数据库找到的id列表 List listIdFind = list.stream().map(AdminMenuPO::getId).collect(Collectors.toList()); // 数量不一致 if (listId.size() != listIdFind.size()) { // 筛选数据库不存在的测试信息 List listIdNotFound = listId.stream().filter(c -> !listIdFind.contains(c)).collect(Collectors.toList()); if (ListUtil.isNullOrEmpty(list)) { return ExecutedResult.failed("[菜单]不存在." + listIdNotFound); } } return ExecutedResult.success(list); } // 编辑菜单 public ExecutedResult modifyMenu(ReqModifyAdminMenu request) { ExecutedResult checkExists = this.checkMenuId(request.getId()); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } AdminMenuPO item = AdminMenuConvert.INSTANCE.toModify(request); item.setTitle(ParameterUtil.dealNullStr(request.getTitle())); item.setParentId(NumericUtil.tryParseLong(request.getParentId(), 0L)); item.setLevel(1); item.setSort(NumericUtil.tryParseInt(request.getSort(), 0)); if (item.getParentId().compareTo(0L) > 0) { ExecutedResult check = this.checkMenuId(request.getParentId()); if (check.isFailed()) { return ExecutedResult.failed("父级菜单不存在: " + request.getParentId()); } item.setLevel(check.getData().getLevel() + 1); } int rowCount = menusDao.updateById(item); if (rowCount == 1) { // 删除菜单缓存 menusService.removeListAllCache(); // 删除所有权限缓存 permissionService.removeListAllCache(); // 删除所有用户的菜单和权限缓存 this.removePowerAllUser(); return ExecutedResult.success(); } return ExecutedResult.failed("编辑[菜单]失败。"); } public ExecutedResult removeMenu(Long id) { // 验证记录是否存在 ExecutedResult checkExists = this.checkMenuId(id); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } Boolean result = menusDao.deleteLogic(id); if (result) { // 删除菜单缓存 menusService.removeListAllCache(); // 删除所有权限缓存 permissionService.removeListAllCache(); // 删除所有用户的菜单和权限缓存 this.removePowerAllUser(); return ExecutedResult.success(); } return ExecutedResult.failed("删除[菜单]失败。"); } public ExecutedResult removeMenuList(List listId) { // 验证记录是否存在 ExecutedResult> checkExists = this.checkMenuId(listId); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } Boolean result = menusDao.deleteLogic(listId); if (result) { // 删除菜单缓存 menusService.removeListAllCache(); // 删除所有权限缓存 permissionService.removeListAllCache(); // 删除所有用户的菜单和权限缓存 this.removePowerAllUser(); return ExecutedResult.success(); } return ExecutedResult.failed("删除[菜单]失败。"); } // 变更菜单状态 public ExecutedResult changeMenuStatus(Long id, EState status) { ExecutedResult checkExists = this.checkMenuId(id); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } AdminMenuPO upd = new AdminMenuPO(); upd.setId(id); upd.setStatus(status.getValue()); int rowCount = menusDao.updateById(upd); if (rowCount == 1) { // 删除菜单缓存 menusService.removeListAllCache(); // 删除所有权限缓存 permissionService.removeListAllCache(); // 删除所有用户的菜单和权限缓存 this.removePowerAllUser(); return ExecutedResult.success(); } return ExecutedResult.failed("修改[菜单]状态失败。"); } // 获取所有层级菜单 public ExecutedResult> getListTreeMenu() { List result = new ArrayList<>(); LambdaQueryWrapper where = menusDao.query(); where.in(AdminMenuPO::getStatus, Arrays.asList( EState.NORMAL.getValue() )); List list = menusDao.selectList(where); if (ListUtil.isNullOrEmpty(list)) { return ExecutedResult.success(result); } List listRoot = list.stream().filter(c -> Objects.equals(c.getLevel(), 1)).collect(Collectors.toList()); listRoot = listRoot.stream() .sorted(Comparator.comparing(AdminMenuPO::getSort)) .collect(Collectors.toList()); if (ListUtil.isNullOrEmpty(listRoot)) { return ExecutedResult.success(result); } List listMenuId = list.stream() .map(AdminMenuPO::getId) .collect(Collectors.toList()); List listPermission = permissionDao.list4MenuId(listMenuId); Map> mapPermission = listPermission.stream() .collect(Collectors.groupingBy(AdminPermissionPO::getMenuId)); for (AdminMenuPO item : listRoot) { ResAdminMenuTreeAndPermission view = AdminMenuConvert.INSTANCE.toTreeVo(item); this.fillChildMenu(view, list, mapPermission); this.fillPermission4Menu(view, mapPermission); result.add(view); } return ExecutedResult.success(result); } public void fillPermission4Menu(ResAdminMenuTreeAndPermission view, Map> mapPermission) { view.setPermissions(new ArrayList<>()); if (BooleanUtils.isFalse(mapPermission.containsKey(view.getId()))) { return; } List list = mapPermission.get(view.getId()); view.setPermissions(AdminPermissionConvert.INSTANCE.toDetail(list)); } public void fillChildMenu(ResAdminMenuTreeAndPermission view, List list, Map> mapPermission) { List listChild = list.stream() .filter(c -> c.getParentId().equals(view.getId())) .collect(Collectors.toList()); view.setChildren(new ArrayList<>()); if (ListUtil.isNullOrEmpty(listChild)) { return; } listChild = listChild.stream() .sorted(Comparator.comparing(AdminMenuPO::getSort).reversed()) .collect(Collectors.toList()); for (AdminMenuPO child : listChild) { ResAdminMenuTreeAndPermission viewChild = AdminMenuConvert.INSTANCE.toTreeVo(child); this.fillChildMenu(viewChild, list, mapPermission); this.fillPermission4Menu(viewChild, mapPermission); view.getChildren().add(viewChild); } } // 获取指定菜单的子级菜单 public ExecutedResult> getListChildMenu(Long parentId) { List list = menusDao.list4Parent(parentId); if (ListUtil.isNullOrEmpty(list)) { return ExecutedResult.success(new ArrayList<>()); } return ExecutedResult.success(AdminMenuConvert.INSTANCE.toVo(list)); } // 分页查询菜单 public ExecutedResult> searchMenu(SearchAdminMenu request) { List result = new ArrayList<>(); super.dealPager(request); request.setLastRowNo((request.getPage() - 1) * NumericUtil.tryParseLong(request.getLimit())); // 处理时间范围 Tuple createTimeRange = ParameterUtil.getTimeRange(request.getCreateTimeRange()); if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) { request.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime()); } if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) { request.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime()); } if (NumericUtil.tryParseInt(request.getStatus(), 0).compareTo(0) < 1 && ListUtil.isNullOrEmpty(request.getListStatus())) { request.setListStatus(Arrays.asList(EState.NORMAL.getValue(), EState.DISABLED.getValue())); } PagerResult pagerResult = menusDao.search(request); if (NumericUtil.tryParseLong(pagerResult.getTotal()).compareTo(0L) < 1) { return ExecutedResult.success( new PagerResult<>(request.getLimit(), request.getPage(), 0L, new ArrayList<>()) ); } List list = pagerResult.getList(); Long lastId = 0L; if (ListUtil.isNotNullOrEmpty(list)) { lastId = list.stream().map(AdminMenuPO::getId).min(Comparator.comparing(c -> c)).get(); result = AdminMenuConvert.INSTANCE.toVo(list); } PagerResult view = new PagerResult<>(request.getLimit(), request.getPage(), pagerResult.getTotal(), result); view.setLastId(lastId); return ExecutedResult.success(view); } // 创建权限 public ExecutedResult createPermission(ReqCreateAdminPermission request) { String sn = request.getSn(); AdminPermissionPO find = permissionDao.get4Sn(sn); if (Objects.nonNull(find) && find.getId().compareTo(0L) > 0) { return ExecutedResult.failed("权限编码已存在。" + sn); } ExecutedResult checkExists = this.checkMenuId(request.getMenuId()); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } AdminPermissionPO item = new AdminPermissionPO(); item.setName(request.getName()); item.setSn(request.getSn()); item.setMenuId(request.getMenuId()); item.setMenuId(request.getMenuId()); item.setStatus(EState.NORMAL.getValue()); item.setMenuUrl(ParameterUtil.dealNullStr(request.getMenuUrl())); item.setIcon(ParameterUtil.dealNullStr(request.getIcon())); item.setType(ParameterUtil.dealNullStr(request.getType())); item.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); int rowCount = permissionDao.insert(item); if (rowCount == 1) { // 删除权限缓存 permissionService.removeListAllCache(); return ExecutedResult.success(item.getId()); } return ExecutedResult.failed("创建[权限]失败。"); } // 编辑权限 public ExecutedResult modifyPermission(ReqModifyAdminPermission request) { Long id = request.getId(); String sn = request.getSn(); ExecutedResult checkExists = this.checkPermissionId(id); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } AdminPermissionPO findBySn = permissionDao.get4Sn(sn); if (Objects.nonNull(findBySn) && !Objects.equals(id, findBySn.getId())) { return ExecutedResult.failed("权限编码已存在。" + sn); } ExecutedResult check = this.checkMenuId(request.getMenuId()); if (check.isFailed()) { return ExecutedResult.failed(check.getMsg()); } AdminPermissionPO item = new AdminPermissionPO(); item.setId(id); item.setSn(request.getSn()); item.setMenuId(request.getMenuId()); item.setName(request.getName()); int rowCount = permissionDao.updateById(item); if (rowCount == 1) { // 删除权限缓存 permissionService.removeListAllCache(); return ExecutedResult.success(); } return ExecutedResult.failed("编辑[权限]失败。"); } private ExecutedResult checkPermissionId(Long id) { AdminPermissionPO item = permissionDao.get(id); if (Objects.isNull(item)) { return ExecutedResult.failed("[权限]不存在: " + id); } return ExecutedResult.success(item); } // 删除权限 public ExecutedResult removePermission(Long id) { AdminPermissionPO find = permissionDao.get(id); if (null == find) { return ExecutedResult.failed("[权限]记录未找到。" + id); } Boolean remove = permissionDao.remove(id); if (remove) { // 删除权限缓存 permissionService.removeListAllCache(); return ExecutedResult.success(); } return ExecutedResult.failed("删除[权限]失败"); } // 分页查询权限 public ExecutedResult> searchPermission(SearchAdminPermission request) { List result = new ArrayList<>(); super.dealPager(request); request.setLastRowNo((request.getPage() - 1) * NumericUtil.tryParseLong(request.getLimit())); // 处理时间范围 Tuple createTimeRange = ParameterUtil.getTimeRange(request.getCreateTimeRange()); if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) { request.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime()); } if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) { request.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime()); } if (NumericUtil.tryParseInt(request.getStatus(), 0).compareTo(0) < 1 && ListUtil.isNullOrEmpty(request.getListStatus())) { request.setListStatus(Arrays.asList(EState.NORMAL.getValue(), EState.DISABLED.getValue())); } PagerResult pagerResult = permissionDao.search(request); if (NumericUtil.tryParseLong(pagerResult.getTotal()).compareTo(0L) < 1) { return ExecutedResult.success( new PagerResult<>(request.getLimit(), request.getPage(), 0L, new ArrayList<>()) ); } List list = pagerResult.getList(); Long lastId = 0L; if (ListUtil.isNotNullOrEmpty(list)) { lastId = list.stream().map(AdminPermissionPO::getId).min(Comparator.comparing(c -> c)).get(); result = AdminPermissionConvert.INSTANCE.toDetail(list); } PagerResult view = new PagerResult<>(request.getLimit(), request.getPage(), pagerResult.getTotal(), result); view.setLastId(lastId); return ExecutedResult.success(view); } // 创建角色 public ExecutedResult createRole(ReqCreateAdminRole request) { AdminRolePO item = AdminRoleConvert.INSTANCE.toCreate(request); item.setDescription(ParameterUtil.dealNullStr(request.getDescription())); item.setStatus(EState.NORMAL.getValue()); item.setSort(NumericUtil.tryParseInt(request.getSort(), 0)); item.setCreateTime(LocalDateTimeUtil.nowTimeStamp()); int rowCount = roleDao.insert(item); if (rowCount == 1) { return ExecutedResult.success(item.getId()); } return ExecutedResult.failed("创建[角色]失败。"); } // 编辑角色 public ExecutedResult modifyRole(ReqModifyAdminRole request) { ExecutedResult checkExists = this.checkRoleId(request.getId()); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } AdminRolePO item = AdminRoleConvert.INSTANCE.toModify(request); item.setSort(NumericUtil.tryParseInt(request.getSort(), 0)); item.setDescription(ParameterUtil.dealNullStr(request.getDescription())); int rowCount = roleDao.updateById(item); if (rowCount == 1) { return ExecutedResult.success(); } return ExecutedResult.failed("编辑[角色]失败。"); } // 修改角色状态 public ExecutedResult changeRoleStatus(Long id, EState status) { ExecutedResult checkExists = this.checkRoleId(id); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } AdminRolePO upd = new AdminRolePO(); upd.setId(id); upd.setStatus(status.getValue()); int rowCount = roleDao.updateById(upd); if (rowCount == 1) { return ExecutedResult.success(); } return ExecutedResult.failed("修改[角色]状态失败。"); } private ExecutedResult checkRoleId(Long id) { AdminRolePO item = roleDao.selectById(id); if (Objects.isNull(item)) { return ExecutedResult.failed("[角色]不存在: " + id); } return ExecutedResult.success(item); } private ExecutedResult> checkRoleId(List listId) { // 从数据库查找测试信息 List list = roleDao.getList(listId); if (ListUtil.isNullOrEmpty(list)) { return ExecutedResult.failed("[角色]不存在." + listId); } // 数据库找到的id列表 List listIdFind = list.stream().map(AdminRolePO::getId).collect(Collectors.toList()); // 数量不一致 if (listId.size() != listIdFind.size()) { // 筛选数据库不存在的测试信息 List listIdNotFound = listId.stream().filter(c -> !listIdFind.contains(c)).collect(Collectors.toList()); if (ListUtil.isNullOrEmpty(list)) { return ExecutedResult.failed("[角色]不存在." + listIdNotFound); } } return ExecutedResult.success(list); } public ExecutedResult removeRole(Long id) { // 验证记录是否存在 ExecutedResult checkExists = this.checkRoleId(id); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } Boolean result = roleDao.deleteLogic(id); if (BooleanUtils.isFalse(result)) { return ExecutedResult.failed("删除[角色]失败。"); } return ExecutedResult.success(); } public ExecutedResult removeRoleList(List listId) { // 验证记录是否存在 ExecutedResult> checkExists = this.checkRoleId(listId); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } Boolean result = roleDao.deleteLogic(listId); if (BooleanUtils.isFalse(result)) { return ExecutedResult.failed("删除[角色]失败。"); } return ExecutedResult.success(); } // 分页查询角色 public ExecutedResult> searchRole(SearchAdminRole request) { List result = new ArrayList<>(); super.dealPager(request); request.setLastRowNo((request.getPage() - 1) * NumericUtil.tryParseLong(request.getLimit())); // 处理时间范围 Tuple createTimeRange = ParameterUtil.getTimeRange(request.getCreateTimeRange()); if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem1())) { request.setCreateTimeStart(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem1()).getTime()); } if (StringUtil.isNotNullOrEmpty(createTimeRange.getItem2())) { request.setCreateTimeEnd(LocalDateTimeUtil.getTimeStamp(createTimeRange.getItem2()).getTime()); } if (NumericUtil.tryParseInt(request.getStatus(), 0).compareTo(0) < 1 && ListUtil.isNullOrEmpty(request.getListStatus())) { request.setListStatus(Arrays.asList(EState.NORMAL.getValue(), EState.DISABLED.getValue())); } PagerResult pagerResult = roleDao.search(request); if (NumericUtil.tryParseLong(pagerResult.getTotal()).compareTo(0L) < 1) { return ExecutedResult.success( new PagerResult<>(request.getLimit(), request.getPage(), 0L, new ArrayList<>()) ); } List list = pagerResult.getList(); Long lastId = 0L; if (ListUtil.isNotNullOrEmpty(list)) { lastId = list.stream().map(AdminRolePO::getId).min(Comparator.comparing(c -> c)).get(); result = AdminRoleConvert.INSTANCE.toVo(list); } PagerResult view = new PagerResult<>(request.getLimit(), request.getPage(), pagerResult.getTotal(), result); view.setLastId(lastId); return ExecutedResult.success(view); } // 设置角色菜单权限列表 public ExecutedResult setListMenu4Role(ReqSetListMenu4Role request) { Long roleId = request.getId(); ExecutedResult checkExists = this.checkRoleId(roleId); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } AdminRolePO find = checkExists.getData(); Long now = LocalDateTimeUtil.nowTimeStamp(); //找到角色已有的菜单列表 List listOld = roleMenuRelationDao.list4Role(roleId); listOld = ParameterUtil.dealNull(listOld); List listOldMenuId = listOld.stream() .map(AdminRoleMenuRelationPO::getMenuId) .collect(Collectors.toList()); //现在设置的菜单id列表 List listMenuId = ParameterUtil.dealNull(request.getListMenu()); //找到所有菜单 List listAllId = new ArrayList<>(listOldMenuId); listAllId.addAll(listMenuId); ListUtil.repeat(listAllId); List listMenu = menusDao.getList(listAllId); Map mapMenu = listMenu.stream() .collect(Collectors.toMap(AdminMenuPO::getId, c -> c)); //找到新增菜单列表(新菜单列表的元素,不存在于已有的菜单列表中) List listNew = listMenuId.stream() .filter(c -> !listOldMenuId.contains(c)) .collect(Collectors.toList()); //找到删除菜单列表(已有菜单列表的元素,不存在于新菜单列表) List listRemove = listOldMenuId.stream() .filter(c -> !listMenuId.contains(c)) .collect(Collectors.toList()); //批量新增 if(BooleanUtils.isFalse(listNew.isEmpty())) { List list = listNew.stream() .map(c -> { AdminRoleMenuRelationPO item = new AdminRoleMenuRelationPO(); item.setRoleId(roleId); item.setMenuId(c); item.setCreateTime(now); return item; }).collect(Collectors.toList()); Boolean addList = roleMenuRelationDao.addList(list); if(BooleanUtils.isFalse(addList)) { return ExecutedResult.failed("给角色“" + roleId + "”新增菜单失败。" + listNew); } } //批量删除 if(BooleanUtils.isFalse(listRemove.isEmpty())) { List listId = listOld.stream() .filter(c -> listRemove.contains(c.getMenuId())) .map(AdminRoleMenuRelationPO::getId).collect(Collectors.toList()); Boolean removeList = roleMenuRelationDao.remove(listId); if(BooleanUtils.isFalse(removeList)) { return ExecutedResult.failed("删除角色“" + roleId + "”已有菜单失败。" + listRemove); } } //找到角色已有的权限列表 List listOldPermission = rolePermissionRelationDao.list4Role(roleId); listOldPermission = ParameterUtil.dealNull(listOldPermission); List listOldPermissionId = listOldPermission.stream() .map(AdminRolePermissionRelationPO::getPermissionId) .collect(Collectors.toList()); //现在设置的权限id列表 List listPermissionId = ParameterUtil.dealNull(request.getListPermission()); //找到所有权限 List listAllPermissionId = new ArrayList<>(listOldPermissionId); listAllPermissionId.addAll(listPermissionId); ListUtil.repeat(listAllPermissionId); List listPermission = permissionDao.getList(listAllPermissionId); Map mapPermission = listPermission.stream() .collect(Collectors.toMap(AdminPermissionPO::getId, c -> c)); //找到新增权限列表(新权限列表的元素,不存在于已有的菜单列表中) List listNewPermission = listPermissionId.stream() .filter(c -> !listOldPermissionId.contains(c)) .collect(Collectors.toList()); //找到删除权限列表(已有权限列表的元素,不存在于新菜单列表) List listRemovePermission = listOldPermissionId.stream() .filter(c -> !listPermissionId.contains(c)) .collect(Collectors.toList()); //批量新增 if(BooleanUtils.isFalse(listNewPermission.isEmpty())) { List list = listNewPermission.stream() .map(c -> { AdminRolePermissionRelationPO item = new AdminRolePermissionRelationPO(); item.setRoleId(roleId); item.setPermissionId(c); item.setCreateTime(now); return item; }).collect(Collectors.toList()); Boolean addList = rolePermissionRelationDao.addList(list); if(BooleanUtils.isFalse(addList)) { return ExecutedResult.failed("给角色“" + roleId + "”新增权限失败。" + listNewPermission); } } //批量删除 if(BooleanUtils.isFalse(listRemovePermission.isEmpty())) { List listId = listOldPermission.stream() .filter(c -> listRemovePermission.contains(c.getPermissionId())) .map(AdminRolePermissionRelationPO::getId).collect(Collectors.toList()); Boolean removeList = rolePermissionRelationDao.remove(listId); if(BooleanUtils.isFalse(removeList)) { return ExecutedResult.failed("删除角色“" + roleId + "”已有权限失败。" + listRemovePermission); } } return ExecutedResult.success(); } // 获取角色菜单权限列表 public ExecutedResult getListMenu4Role(Long roleId) { ResAdminPower result = new ResAdminPower(); result.setMenus(new ArrayList<>()); result.setPermissions(new ArrayList<>()); ExecutedResult checkExists = this.checkRoleId(roleId); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } AdminRolePO find = checkExists.getData(); //找到角色已有的菜单列表 List listMenu4Role = roleMenuRelationDao.list4Role(roleId); if (ListUtil.isNotNullOrEmpty(listMenu4Role)) { List listOldMenuId = listMenu4Role.stream() .map(AdminRoleMenuRelationPO::getMenuId) .collect(Collectors.toList()); List listMenu = menusDao.getList(listOldMenuId); if (ListUtil.isNotNullOrEmpty(listMenu)) { result.setMenus(AdminMenuConvert.INSTANCE.toVo(listMenu)); } } //找到角色已有的权限列表 List listPermission4Role = rolePermissionRelationDao.list4Role(roleId); if (ListUtil.isNotNullOrEmpty(listPermission4Role)) { List listPermissionId = listPermission4Role.stream() .map(AdminRolePermissionRelationPO::getPermissionId) .collect(Collectors.toList()); List listPermission = permissionDao.getList(listPermissionId); if (ListUtil.isNotNullOrEmpty(listPermission)) { result.setPermissions(AdminPermissionConvert.INSTANCE.toDetail(listPermission)); } } return ExecutedResult.success(result); } protected List getListPermission4Role(List listRoleId) { List listPermissionRel = rolePermissionRelationDao.list4Role(listRoleId); if (ListUtil.isNullOrEmpty(listPermissionRel)) { return new ArrayList<>(); } List listPermission = permissionService.listAllWithCache(); if (ListUtil.isNullOrEmpty(listPermission)) { return new ArrayList<>(); } // 筛选状态 listPermission = listPermission.stream() .filter(c -> Objects.equals(c.getStatus(), EState.NORMAL.getValue())) .collect(Collectors.toList()); List listPermissionId = listPermissionRel.stream() .map(AdminRolePermissionRelationPO::getPermissionId) .collect(Collectors.toList()); return listPermission.stream() .filter(c -> listPermissionId.contains(c.getId())) .collect(Collectors.toList()); } protected List getListMenu4Role(List listRoleId) { List listRoleMenu = roleMenuRelationDao.list4Role(listRoleId); if (ListUtil.isNullOrEmpty(listRoleMenu)) { return new ArrayList<>(); } List listMenu = menusService.listAllWithCache(); if (ListUtil.isNullOrEmpty(listMenu)) { return new ArrayList<>(); } // 筛选状态 listMenu = listMenu.stream() .filter(c -> Objects.equals(c.getStatus(), EState.NORMAL.getValue())) .collect(Collectors.toList()); List listMenuId = listRoleMenu.stream().map(AdminRoleMenuRelationPO::getMenuId) .collect(Collectors.toList()); return listMenu.stream() .filter(c -> listMenuId.contains(c.getId())) .collect(Collectors.toList()); } /** * 删除指定用户的菜单和权限缓存 * @param userId 用户id */ protected void removePower4User(Long userId) { menusService.removeUserMenuCache(userId); permissionService.removeUserCache(userId); } /** * 删除所有用户的菜单和权限缓存 */ protected void removePowerAllUser() { menusService.removeAllUserMenuCache(); permissionService.removeAllUserCache(); } public ExecutedResult setMenuSort(ReqSetSort request) { // 验证记录是否存在 ExecutedResult checkExists = this.checkMenuId(request.getId()); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } AdminMenuPO item = new AdminMenuPO(); item.setId(request.getId()); item.setSort(request.getSort()); int rowCount = menusDao.updateById(item); if (rowCount != 1) { return ExecutedResult.failed("[测试信息]设置排序值失败。"); } return ExecutedResult.success(); } public ExecutedResult listSetMenuSort(ReqListSetSort request) { // id列表 List listId = request.getList().stream().map(ReqSetSort::getId).collect(Collectors.toList()); // 验证记录是否存在 ExecutedResult> checkExists = this.checkMenuId(listId); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } List listUpdate = request.getList().stream() .map(c -> { AdminMenuPO item = new AdminMenuPO(); item.setId(c.getId()); item.setSort(c.getSort()); return item; }) .collect(Collectors.toList()); Boolean result = menusDao.modifyList(listUpdate); if (result) { return ExecutedResult.success(); } return ExecutedResult.failed("[测试信息]设置排序值失败"); } public ExecutedResult setRoleSort(ReqSetSort request) { // 验证记录是否存在 ExecutedResult checkExists = this.checkRoleId(request.getId()); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } AdminRolePO item = new AdminRolePO(); item.setId(request.getId()); item.setSort(request.getSort()); int rowCount = roleDao.updateById(item); if (rowCount != 1) { return ExecutedResult.failed("[角色]设置排序值失败。"); } return ExecutedResult.success(); } public ExecutedResult listSetRoleSort(ReqListSetSort request) { // id列表 List listId = request.getList().stream().map(ReqSetSort::getId).collect(Collectors.toList()); // 验证记录是否存在 ExecutedResult> checkExists = this.checkRoleId(listId); if (checkExists.isFailed()) { return ExecutedResult.failed(checkExists.getMsg()); } List listUpdate = request.getList().stream() .map(c -> { AdminRolePO item = new AdminRolePO(); item.setId(c.getId()); item.setSort(c.getSort()); return item; }) .collect(Collectors.toList()); Boolean result = roleDao.modifyList(listUpdate); if (result) { return ExecutedResult.success(); } return ExecutedResult.failed("[角色]设置排序值失败"); } }