diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java index eaa44f8..8927e83 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRoleService.java @@ -41,6 +41,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; +import java.util.stream.Collectors; import static cn.estsh.i3plus.platform.common.util.CommonConstWords.RESOURCE_PREFIX_MENU; import static cn.estsh.i3plus.platform.common.util.PlatformConstWords.IMPP_REQUEST_ID; @@ -203,76 +206,70 @@ public class SysRoleService extends CrudService implements ISysRoleServ SysMenu menu = new SysMenu(); menu.setSoftType(softType); - List menuList = menuService.findAllByBean(menu); - //查询修改前角色对应的菜单 - List menus = refRoleMenuRDao.findByProperty(new String[]{"roleId", "softType"}, new Object[]{roleId, softType}); + /** + * 2024/7/19 性能修复,不查询出当前softType,改为校验是否在数据库存在 + */ + List menuList = menuService.findByIdList(idList); + Map menuMap = menuList.stream().collect(Collectors.toMap(SysMenu::getId, Function.identity())); refRoleMenuRDao.deleteByProperties(new String[]{"roleId", "softType"}, new Object[]{roleId, softType}); if (CollectionUtils.isNotEmpty(idList)) { List refs = new ArrayList<>(); SysRefRoleMenu ref = null; for (Long id : idList) { - if (CollectionUtils.isNotEmpty(menuList)) { - for (SysMenu sysMenu : menuList) { - if (sysMenu.getId().equals(id)) { - ref = new SysRefRoleMenu(); - ref.setRoleId(role.getId()); - ref.setRoleNameRdd(role.getName()); - ref.setSoftType(sysMenu.getSoftType()); - ref.setMenuNameRdd(sysMenu.getName()); - ref.setMenuId(sysMenu.getId()); - ref.setMenuTypeRdd(sysMenu.getMenuType()); - ConvertBean.serviceModelInitialize(ref, AuthUtil.getSessionUser()); - - refs.add(ref); - break; - } - } + SysMenu sysMenu = menuMap.get(id); + if (sysMenu != null) { + ref = new SysRefRoleMenu(); + ref.setRoleId(role.getId()); + ref.setRoleNameRdd(role.getName()); + ref.setSoftType(sysMenu.getSoftType()); + ref.setMenuNameRdd(sysMenu.getName()); + ref.setMenuId(sysMenu.getId()); + ref.setMenuTypeRdd(sysMenu.getMenuType()); + ConvertBean.serviceModelInitialize(ref, AuthUtil.getSessionUser()); + refs.add(ref); } } if (CollectionUtils.isNotEmpty(refs)) { refRoleMenuRDao.saveAll(refs); - //记录角色权限变更日志 - String newAuthority = ""; - String delAuthority = ""; - ArrayList menuIds = new ArrayList<>(); - menus.stream().forEach(m -> { - menuIds.add(m.getMenuId()); - }); - List newAuthorityList = getAddaListThanbList(idList,menuIds); - List delAuthorityList = getReduceaListThanbList(idList,menuIds); - if (newAuthorityList != null) { + CompletableFuture.runAsync(() -> { + //记录角色权限变更日志 + //查询修改前角色对应的菜单 + List menus = refRoleMenuRDao.findByProperty(new String[]{"roleId", "softType"}, new Object[]{roleId, softType}); + StringBuilder newAuthority = new StringBuilder(); + StringBuilder delAuthority = new StringBuilder(); + List menuIds = menus.stream().map(SysRefRoleMenu::getMenuId).collect(Collectors.toList()); + List newAuthorityList = getAddaListThanbList(idList,menuIds); + List delAuthorityList = getReduceaListThanbList(idList,menuIds); for (Long id : newAuthorityList) { String menuTreeName = ""; List newAuthoritys = new ArrayList<>(); getParentName(id, newAuthoritys); - if (newAuthoritys.get(0).length()>0) { + if (!newAuthoritys.get(0).isEmpty()) { menuTreeName = newAuthoritys.get(0).substring(1); } - newAuthority += menuTreeName + "\n"; + newAuthority.append(menuTreeName).append("\n"); } - } - if (delAuthorityList != null) { for (Long id : delAuthorityList) { List delAuthoritys = new ArrayList<>(); String menuTreeName = ""; - getParentName(id,delAuthoritys); - if (delAuthoritys.get(0).length()>0) { + getParentName(id, delAuthoritys); + if (!delAuthoritys.get(0).isEmpty()) { menuTreeName = delAuthoritys.get(0).substring(1); } - delAuthority += menuTreeName + "\n"; + delAuthority.append(menuTreeName).append("\n"); } - } - SysLogRoleMenuChange sysLogRoleMenuChange = new SysLogRoleMenuChange(); - sysLogRoleMenuChange.setRoleId(roleId); - sysLogRoleMenuChange.setRoleName(role.getName()); - sysLogRoleMenuChange.setNewAuthority(newAuthority); - sysLogRoleMenuChange.setDelAuthority(delAuthority); - insertSysLogRoleMenuChange(sysLogRoleMenuChange); - //更新角色 - ConvertBean.serviceModelUpdate(role,AuthUtil.getSessionUser().getUserName()); - roleRDao.update(role); + SysLogRoleMenuChange sysLogRoleMenuChange = new SysLogRoleMenuChange(); + sysLogRoleMenuChange.setRoleId(roleId); + sysLogRoleMenuChange.setRoleName(role.getName()); + sysLogRoleMenuChange.setNewAuthority(newAuthority.toString()); + sysLogRoleMenuChange.setDelAuthority(delAuthority.toString()); + insertSysLogRoleMenuChange(sysLogRoleMenuChange); + //更新角色 + ConvertBean.serviceModelUpdate(role,AuthUtil.getSessionUser().getUserName()); + roleRDao.update(role); + }); } } }