@ -1,5 +1,8 @@
package com.dongjian.dashboard.back.service.impl ;
package com.dongjian.dashboard.back.service.impl ;
import com.dongjian.dashboard.back.dto.role.RoleMenuPermissionDTO ;
import com.dongjian.dashboard.back.service.common.DashboardMenuTree ;
import com.dongjian.dashboard.back.vo.role.* ;
import com.github.pagehelper.PageHelper ;
import com.github.pagehelper.PageHelper ;
import com.dongjian.dashboard.back.common.exception.MsgCodeException ;
import com.dongjian.dashboard.back.common.exception.MsgCodeException ;
import com.dongjian.dashboard.back.common.language.msg.MsgLanguageChange ;
import com.dongjian.dashboard.back.common.language.msg.MsgLanguageChange ;
@ -19,7 +22,6 @@ import com.dongjian.dashboard.back.service.common.CommonOpt;
import com.dongjian.dashboard.back.service.common.MenuTree ;
import com.dongjian.dashboard.back.service.common.MenuTree ;
import com.dongjian.dashboard.back.util.CommonUtil ;
import com.dongjian.dashboard.back.util.CommonUtil ;
import com.dongjian.dashboard.back.vo.TreeMenusDTO ;
import com.dongjian.dashboard.back.vo.TreeMenusDTO ;
import com.dongjian.dashboard.back.vo.role.RolePageDTO ;
import java.util.* ;
import java.util.* ;
import java.util.stream.Collectors ;
import java.util.stream.Collectors ;
@ -94,26 +96,23 @@ public class RoleServiceImpl implements RoleService {
private void insertRoleMenuRelation ( Long companyId , Long userId , long currentUnix , Long roleId , String menuIds ) {
private void insertRoleMenuRelation ( Long companyId , Long userId , long currentUnix , Long roleId , List < RoleMenuPermissionDTO > menuIds ) {
if ( StringUtils . isNoneBlank ( menuIds ) ) {
basicRoleMenuRelationMapperExt . deleteByRoleId ( roleId ) ;
//把无效的id去掉
menuIds = filterMenuIds ( companyId , userId , menuIds ) ;
if ( menuIds = = null | | menuIds . isEmpty ( ) ) {
if ( StringUtils . isBlank ( menuIds ) ) {
return ;
return ;
}
}
//先删除原有的角色ID
Map < String , Object > deleteMap = new HashMap < > ( ) ;
List < RoleMenuPermissionEntity > entities = menuIds . stream ( ) . map ( item - > {
deleteMap . put ( "roleId" , roleId ) ;
RoleMenuPermissionEntity entity = new RoleMenuPermissionEntity ( ) ;
basicRoleMenuRelationMapperExt . deleteDashboardRelation ( deleteMap ) ;
entity . setRoleId ( roleId ) ;
//重新插入关联关系
entity . setMenuId ( item . getMenuId ( ) ) ;
List < Long > idList = Arrays . asList ( menuIds . split ( "," ) ) . stream ( ) . map ( s - > Long . parseLong ( s . trim ( ) ) ) . collect ( Collectors . toList ( ) ) ;
entity . setPermissionType ( item . getPermissionType ( ) ) ;
Map < String , Object > paramMap = new HashMap < String , Object > ( ) ;
entity . setCreateTime ( currentUnix ) ;
paramMap . put ( "roleId" , roleId ) ;
return entity ;
paramMap . put ( "menuIds" , idList ) ;
} ) . collect ( Collectors . toList ( ) ) ;
paramMap . put ( "creatorId" , userId ) ;
paramMap . put ( "createTime" , currentUnix ) ;
basicRoleMenuRelationMapperExt . dashboardBatchInsert ( entities ) ;
basicRoleMenuRelationMapperExt . batchInsert ( paramMap ) ;
}
}
}
@ -143,7 +142,7 @@ public class RoleServiceImpl implements RoleService {
if ( StringUtils . isBlank ( param . getRoleName ( ) ) | | param . getRoleName ( ) . length ( ) > 100 ) {
if ( StringUtils . isBlank ( param . getRoleName ( ) ) | | param . getRoleName ( ) . length ( ) > 100 ) {
return new SimpleDataResponse ( ResponseCode . MSG_ERROR , "Parameter [roleName] error" ) ;
return new SimpleDataResponse ( ResponseCode . MSG_ERROR , "Parameter [roleName] error" ) ;
}
}
if ( StringUtils . isBlank ( param . getMenuIds ( ) ) ) {
if ( CollectionUtils . isEmpty ( param . getMenuIds ( ) ) ) {
return new SimpleDataResponse ( ResponseCode . MSG_ERROR , "menuIds can not be null" ) ;
return new SimpleDataResponse ( ResponseCode . MSG_ERROR , "menuIds can not be null" ) ;
}
}
return SimpleDataResponse . success ( ) ;
return SimpleDataResponse . success ( ) ;
@ -315,4 +314,149 @@ public class RoleServiceImpl implements RoleService {
return new PageInfo < > ( resultList ) ;
return new PageInfo < > ( resultList ) ;
}
}
@Override
public SimpleDataResponse < List < DashboardTreeMenusDTO > > getOwnMenuTree ( Long companyId , Long userId , Integer languageType ) {
// 1查询用户信息
BasicUser basicUser = basicUserMapperExt . selectByPrimaryKey ( userId ) ;
int superRole = basicUser . getSuperRole ( ) = = null ? 0 : basicUser . getSuperRole ( ) ;
// 获取角色权限(非超级管理员)
Map < Long , Integer > permissionMap = new HashMap < > ( ) ;
if ( superRole ! = 1 ) {
Long roleId = basicRoleMenuRelationMapperExt . getRoleIdByUserId ( userId ) ;
List < RoleMenuPermissionEntity > permissions = basicRoleMenuRelationMapperExt . selectByRoleId ( roleId ) ;
permissionMap = permissions . stream ( )
. collect ( Collectors . toMap (
RoleMenuPermissionEntity : : getMenuId ,
RoleMenuPermissionEntity : : getPermissionType
) ) ;
}
// 查询全量菜单
List < DashboardTreeMenusDTO > allMenus = basicRoleMenuRelationMapperExt . selectAllMenu ( Collections . emptyMap ( ) ) ;
Map < Long , DashboardTreeMenusDTO > fullMenuMap = allMenus . stream ( )
. collect ( Collectors . toMap ( DashboardTreeMenusDTO : : getMenuId , m - > m ) ) ;
// 获取用户可见菜单(叶子或有权限的节点)
List < DashboardTreeMenusDTO > visibleMenus ;
if ( superRole = = 1 ) {
// 超级管理员可见所有
visibleMenus = new ArrayList < > ( allMenus ) ;
} else {
Long roleId = basicRoleMenuRelationMapperExt . getRoleIdByUserId ( userId ) ;
Map < String , Object > paramMap = new HashMap < > ( ) ;
paramMap . put ( "superRole" , superRole ) ;
paramMap . put ( "roleId" , roleId ) ;
visibleMenus = basicRoleMenuRelationMapperExt . selectAllMenu ( paramMap ) ;
}
// 补全父节点
visibleMenus = fillMissingParents ( visibleMenus , fullMenuMap ) ;
// 构建树
DashboardMenuTree tree = new DashboardMenuTree ( visibleMenus ) ;
List < DashboardTreeMenusDTO > result = tree . buildTree ( "-1" ) ;
// 叶子权限赋值
fillLeafPermission ( result , permissionMap , superRole ) ;
// 父节点统一赋值=2
fillParentPermission ( result ) ;
return SimpleDataResponse . success ( result ) ;
}
/ * *
* 补全父节点 ( 一次传入全量菜单 map )
* /
private List < DashboardTreeMenusDTO > fillMissingParents ( List < DashboardTreeMenusDTO > menuList ,
Map < Long , DashboardTreeMenusDTO > fullMenuMap ) {
Set < Long > allIds = menuList . stream ( ) . map ( DashboardTreeMenusDTO : : getMenuId ) . collect ( Collectors . toSet ( ) ) ;
Set < Long > missingParentIds = new HashSet < > ( ) ;
for ( DashboardTreeMenusDTO menu : menuList ) {
Long pid = menu . getParentMenuId ( ) ;
while ( pid ! = null & & ! Objects . equals ( pid , - 1L ) & & ! allIds . contains ( pid ) ) {
missingParentIds . add ( pid ) ;
DashboardTreeMenusDTO parentMenu = fullMenuMap . get ( pid ) ;
if ( parentMenu = = null ) break ; // 防止死循环
pid = parentMenu . getParentMenuId ( ) ;
}
}
for ( Long pid : missingParentIds ) {
DashboardTreeMenusDTO parentMenu = fullMenuMap . get ( pid ) ;
if ( parentMenu ! = null ) {
menuList . add ( parentMenu ) ;
}
}
return menuList ;
}
/ * *
* 叶子赋权
* /
private void fillLeafPermission ( List < DashboardTreeMenusDTO > nodes ,
Map < Long , Integer > permissionMap , Integer superRole ) {
for ( DashboardTreeMenusDTO node : nodes ) {
if ( node . getDashboardLowestNode ( ) ! = null & & node . getDashboardLowestNode ( ) = = 1 ) {
if ( superRole = = 1 ) {
node . setPermissionType ( 2 ) ;
} else {
node . setPermissionType ( permissionMap . getOrDefault ( node . getMenuId ( ) , 0 ) ) ;
}
}
if ( node . getChildren ( ) ! = null & & ! node . getChildren ( ) . isEmpty ( ) ) {
fillLeafPermission ( node . getChildren ( ) , permissionMap , superRole ) ;
}
}
}
/ * *
* 父节点权限统一赋值 2
* /
private void fillParentPermission ( List < DashboardTreeMenusDTO > nodes ) {
for ( DashboardTreeMenusDTO node : nodes ) {
if ( node . getChildren ( ) ! = null & & ! node . getChildren ( ) . isEmpty ( ) ) {
fillParentPermission ( node . getChildren ( ) ) ;
node . setPermissionType ( 2 ) ;
}
}
}
@Override
@Transactional
public void saveRolePermission ( Long roleId , List < RoleMenuPermissionDTO > list ) {
basicRoleMenuRelationMapperExt . deleteByRoleId ( roleId ) ;
if ( list = = null | | list . isEmpty ( ) ) {
return ;
}
List < RoleMenuPermissionEntity > entities = list . stream ( ) . map ( item - > {
RoleMenuPermissionEntity entity = new RoleMenuPermissionEntity ( ) ;
entity . setRoleId ( roleId ) ;
entity . setMenuId ( item . getMenuId ( ) ) ;
entity . setPermissionType ( item . getPermissionType ( ) ) ;
entity . setCreateTime ( System . currentTimeMillis ( ) ) ;
return entity ;
} ) . collect ( Collectors . toList ( ) ) ;
basicRoleMenuRelationMapperExt . dashboardBatchInsert ( entities ) ;
}
@Override
public SimpleDataResponse < List < RoleMenuPermissionEntity > > getMenuIdListByRoleId ( Long roleId , Long companyId , Long userId , Integer languageType ) {
try {
return SimpleDataResponse . success ( basicRoleMenuRelationMapperExt . getMenuIdListByRoleId ( roleId ) ) ;
} catch ( Exception e ) {
logger . error ( "获取角色菜单出错" , e ) ;
return new SimpleDataResponse ( ResponseCode . SERVER_ERROR , e . getMessage ( ) ) ;
}
}
}
}