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<RoleMapper, RoleEntity> 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<AdminRoleVo> page = new Page<>(adminRoleDto.getPageNum(), adminRoleDto.getPageSize());
|
RoleEntity roleEntity = new RoleEntity();
|
if(StrUtil.isNotEmpty(adminRoleDto.getRoleName())){
|
roleEntity.setRoleName(adminRoleDto.getRoleName());
|
}
|
IPage<AdminRoleVo> 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<UserRoleEntity> objectQueryWrapper = new QueryWrapper<>();
|
objectQueryWrapper.eq("role_id",id);
|
List<UserRoleEntity> userRoleEntities = userRoleMapper.selectList(objectQueryWrapper);
|
if(CollUtil.isNotEmpty(userRoleEntities)){
|
return Result.fail("当前角色下还有用户,请重新分配角色");
|
}
|
this.baseMapper.deleteById(id);
|
|
QueryWrapper<RoleMenuEntity> 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<RoleMenuEntity> roleMenuEntities = roleMenuMapper.selectListByRoleId(id);
|
if(CollUtil.isNotEmpty(roleMenuEntities)){
|
List<Long> 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<RoleMenuEntity> 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<UserRoleEntity> objectQueryWrapper = new QueryWrapper<>();
|
objectQueryWrapper.eq("role_id",roleId);
|
userRoleMapper.delete(objectQueryWrapper);
|
|
QueryWrapper<RoleMenuEntity> 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);
|
});
|
}
|
}
|
|
}
|