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.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) { Page page = new Page<>(adminRoleDto.getPageNum(), adminRoleDto.getPageSize()); RoleEntity roleEntity = new RoleEntity(); if(StrUtil.isNotEmpty(adminRoleDto.getRoleName())){ roleEntity.setRoleName(adminRoleDto.getRoleName()); } IPage list = this.baseMapper.selectAdminRoleVoInPage(page,roleEntity); return Result.ok(list); } @Override @Transactional public Result addRole(AdminAddRoleDto adminAddRoleDto) { String roleName = adminAddRoleDto.getRoleName(); if(StrUtil.isEmpty(roleName)){ return Result.fail("请输入角色名称"); } String menuIds = adminAddRoleDto.getMenuIds(); if(StrUtil.isEmpty(menuIds)){ return Result.fail("请选择角色权限"); } RoleEntity roleEntity = new RoleEntity(); String remark = adminAddRoleDto.getRemark(); if(StrUtil.isNotEmpty(remark)){ roleEntity.setRemark(remark); } roleEntity.setRoleName(roleName); 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()); } } 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); 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); }); } } }