package com.xcong.farmer.cms.modules.system.service.Impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xcong.farmer.cms.common.response.Result; import com.xcong.farmer.cms.modules.system.dto.AdminAddRoleDto; import com.xcong.farmer.cms.modules.system.dto.AdminDeleteDto; import com.xcong.farmer.cms.modules.system.dto.AdminRoleDto; import com.xcong.farmer.cms.modules.system.dto.AdminUpdateRoleDto; import com.xcong.farmer.cms.modules.system.entity.*; import com.xcong.farmer.cms.modules.system.mapper.*; import com.xcong.farmer.cms.modules.system.service.IRoleService; import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; import com.xcong.farmer.cms.modules.system.vo.AdminMenuInfoVo; import com.xcong.farmer.cms.modules.system.vo.AdminRoleVo; import com.xcong.farmer.cms.modules.system.vo.AdminSeeRoleInfoVo; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.collection.CollUtil; @Service @Slf4j public class RoleServiceImpl extends ServiceImpl implements IRoleService { @Resource private RoleMenuMapper roleMenuMapper; @Resource private UserRoleMapper userRoleMapper; @Resource private UserMapper userMapper; @Resource private MenuMapper menuMapper; @Override public Result getRoleInPage(AdminRoleDto adminRoleDto) { UserEntity userlogin = LoginUserUtil.getLoginUser(); Page page = new Page<>(adminRoleDto.getPageNum(), adminRoleDto.getPageSize()); RoleEntity roleEntity = new RoleEntity(); Long companyId = userlogin.getCompanyId() == null ? UserEntity.USER_BELONG_TOP : userlogin.getCompanyId(); if(StrUtil.isNotEmpty(adminRoleDto.getRoleName())){ roleEntity.setRoleName(adminRoleDto.getRoleName()); } if(companyId > UserEntity.USER_BELONG_TOP){ roleEntity.setCompanyId(companyId); } IPage list = this.baseMapper.selectAdminRoleVoInPage(page,roleEntity); return Result.ok(list); } @Override @Transactional public Result addRole(AdminAddRoleDto adminAddRoleDto) { UserEntity userlogin = LoginUserUtil.getLoginUser(); String roleName = adminAddRoleDto.getRoleName(); String menuIds = adminAddRoleDto.getMenuIds(); RoleEntity roleEntity = new RoleEntity(); String remark = adminAddRoleDto.getRemark(); if(StrUtil.isNotEmpty(remark)){ roleEntity.setRemark(remark); } roleEntity.setRoleName(roleName); roleEntity.setCompanyId(userlogin.getCompanyId() == null?UserEntity.USER_BELONG_TOP:userlogin.getCompanyId()); int insert = this.baseMapper.insert(roleEntity); if(insert > 0){ saveRoleMenus(menuIds,roleEntity.getId()); return Result.ok("添加成功"); } return Result.fail("添加失败"); } @Override @Transactional public Result deleteRole(Long id) { RoleEntity roleEntity = this.baseMapper.selectById(id); if(ObjectUtil.isEmpty(roleEntity)){ return Result.fail("角色不存在"); } //获取角色下对应的用户信息 QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("role_id",id); List userRoleEntities = userRoleMapper.selectList(objectQueryWrapper); if(CollUtil.isNotEmpty(userRoleEntities)){ return Result.fail("当前角色下还有用户,请重新分配角色"); } this.baseMapper.deleteById(id); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("role_id",id); roleMenuMapper.delete(queryWrapper); return Result.ok("删除成功"); } @Override public Result seeRoleInfo(Long id) { RoleEntity roleEntity = this.baseMapper.selectById(id); if(ObjectUtil.isEmpty(roleEntity)){ return Result.fail("角色不存在"); } AdminSeeRoleInfoVo adminSeeRoleInfoVo = new AdminSeeRoleInfoVo(); adminSeeRoleInfoVo.setId(roleEntity.getId()); adminSeeRoleInfoVo.setRoleName(roleEntity.getRoleName()); adminSeeRoleInfoVo.setRemark(roleEntity.getRemark()); List roleMenuEntities = roleMenuMapper.selectListByRoleId(id); if(CollUtil.isNotEmpty(roleMenuEntities)){ List menuIds = new ArrayList<>(); for(RoleMenuEntity roleMenuEntity : roleMenuEntities){ // //这个子菜单 // MenuEntity menuEntity = menuMapper.selectMenuEntityByIdAndParentId(roleMenuEntity.getMenuId(),MenuEntity.PARENTID_DEFAULT); // if(ObjectUtil.isNotEmpty(menuEntity)){ // menuIds.add(menuEntity.getId()); // } //查询该角色拥有的菜单栏是否拥有子菜单 QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("parent_id",roleMenuEntity.getMenuId()); List menuEntities = menuMapper.selectList(objectQueryWrapper); if(CollUtil.isEmpty(menuEntities)){ menuIds.add(roleMenuEntity.getMenuId()); } } adminSeeRoleInfoVo.setMenuIds(menuIds); } return Result.ok(adminSeeRoleInfoVo); } @Override @Transactional public Result updateRole(AdminUpdateRoleDto adminUpdateRoleDto) { Long id = adminUpdateRoleDto.getId(); RoleEntity roleEntity = this.baseMapper.selectById(id); if(ObjectUtil.isEmpty(roleEntity)){ return Result.fail("角色不存在"); } String roleName = adminUpdateRoleDto.getRoleName(); if(StrUtil.isEmpty(roleName)){ return Result.fail("请输入角色名称"); } roleEntity.setRoleName(roleName); String remark = adminUpdateRoleDto.getRemark(); if(StrUtil.isNotEmpty(remark)){ roleEntity.setRemark(remark); } this.baseMapper.updateById(roleEntity); QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("role_id",id); roleMenuMapper.delete(objectQueryWrapper); String menuIds = adminUpdateRoleDto.getMenuIds(); if(StrUtil.isNotEmpty(menuIds)){ saveRoleMenus(menuIds,id); } return Result.ok("更新成功"); } @Override @Transactional public Result delObjs(AdminDeleteDto adminDeleteDto) { String ids = adminDeleteDto.getIds(); if(StrUtil.isNotEmpty(ids)){ String[] roleIds = ids.split(StringPool.COMMA); for(String roleIdStr : roleIds){ Long roleId = Long.valueOf(roleIdStr); RoleEntity roleEntity = this.baseMapper.selectById(roleId); if(RoleEntity.ROLE_ADMIN_NAME.equals(roleEntity.getRoleName()) || RoleEntity.ROLE_SUPER_NAME.equals(roleEntity.getRoleName())){ return Result.fail(RoleEntity.ROLE_ADMIN_NAME + RoleEntity.ROLE_SUPER_NAME +"角色无法删除"); } QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("role_id",roleId); userRoleMapper.delete(objectQueryWrapper); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("role_id",roleId); roleMenuMapper.delete(queryWrapper); this.baseMapper.deleteById(roleId); } } return Result.ok("删除成功"); } private void saveRoleMenus(String menuIds,Long roleId) { if (StrUtil.isNotEmpty(menuIds)) { String[] menuIdList = menuIds.split(StringPool.COMMA); Arrays.stream(menuIdList).forEach(menuId -> { RoleMenuEntity roleMenu = new RoleMenuEntity(); roleMenu.setMenuId(Long.valueOf(menuId)); roleMenu.setRoleId(roleId); roleMenuMapper.insert(roleMenu); }); } } }