package com.ycl.service.user.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.dto.UmsMenuNode; import com.ycl.entity.dict.DataDictionary; import com.ycl.entity.user.*; import com.ycl.mapper.dict.DataDictionary2Mapper; import com.ycl.mapper.user.UmsMenuMapper; import com.ycl.mapper.user.UmsResourceMapper; import com.ycl.mapper.user.UmsRoleMapper; import com.ycl.service.user.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * 后台角色管理Service实现类 * Created by macro on 2018/9/30. */ @Service public class UmsRoleServiceImpl extends ServiceImpl implements UmsRoleService { @Autowired private UmsAdminCacheService adminCacheService; @Autowired private UmsRoleMenuRelationService roleMenuRelationService; @Autowired private UmsRoleResourceRelationService roleResourceRelationService; private UmsMenuService umsMenuService; @Autowired public void setUmsMenuService(UmsMenuService umsMenuService) { this.umsMenuService = umsMenuService; } @Resource private UmsMenuMapper umsMenuMapper; @Resource private UmsResourceMapper umsResourceMapper; @Resource private DataDictionary2Mapper dataDictionary2Mapper; @Override public boolean create(UmsRole role) { role.setCreateTime(new Date()); role.setAdminCount(0); role.setSort(0); return save(role); } @Override public boolean delete(List ids) { boolean success = removeByIds(ids); adminCacheService.delResourceListByRoleIds(ids); return success; } @Override public Page list(String keyword, Integer pageSize, Integer pageNum) { Page page = new Page<>(pageNum, pageSize); QueryWrapper wrapper = new QueryWrapper<>(); LambdaQueryWrapper lambda = wrapper.lambda(); if (StrUtil.isNotEmpty(keyword)) { lambda.like(UmsRole::getName, keyword); } Page resultPage = page(page, wrapper); List roles = resultPage.getRecords(); List types = roles.stream().map(UmsRole::getType).collect(Collectors.toList()); if (types.size() > 0) { LambdaQueryWrapper dicQuery = new LambdaQueryWrapper<>(); dicQuery.in(DataDictionary::getId, types); List dics = dataDictionary2Mapper.selectList(dicQuery); for (UmsRole role : roles) { for (DataDictionary dic : dics) { if (dic.getId().equals(role.getType())) { role.setTypeText(dic.getName()); } } } } return resultPage; } @Override public List getMenuList(Long adminId) { List menuList = umsMenuMapper.getMenuList(adminId); List result = menuList.stream() .filter(menu -> menu.getParentId().equals(0L)) .map(menu -> umsMenuService.covertMenuNode(menu, menuList)).collect(Collectors.toList()); return result; } @Override public List getRoleListByCodes(List codes) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper().in(UmsRole::getCode, codes); return baseMapper.selectList(wrapper); } @Override public List listMenu(Long roleId) { return umsMenuMapper.getMenuListByRoleId(roleId); } @Override public List listResource(Long roleId) { return umsResourceMapper.getResourceListByRoleId(roleId); } @Override public int allocMenu(Long roleId, List menuIds) { //先删除原有关系 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda().eq(UmsRoleMenuRelation::getRoleId, roleId); roleMenuRelationService.remove(wrapper); //批量插入新关系 List relationList = new ArrayList<>(); for (Long menuId : menuIds) { UmsRoleMenuRelation relation = new UmsRoleMenuRelation(); relation.setRoleId(roleId); relation.setMenuId(menuId); relationList.add(relation); } roleMenuRelationService.saveBatch(relationList); return menuIds.size(); } @Override public int allocResource(Long roleId, List resourceIds) { //先删除原有关系 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda().eq(UmsRoleResourceRelation::getRoleId, roleId); roleResourceRelationService.remove(wrapper); //批量插入新关系 List relationList = new ArrayList<>(); for (Long resourceId : resourceIds) { UmsRoleResourceRelation relation = new UmsRoleResourceRelation(); relation.setRoleId(roleId); relation.setResourceId(resourceId); relationList.add(relation); } roleResourceRelationService.saveBatch(relationList); adminCacheService.delResourceListByRole(roleId); return resourceIds.size(); } @Override public Boolean updateStatusBatch(List ids, Integer status) { List roles = new ArrayList<>(); for (Long id : ids) { UmsRole umsRole = UmsRole.builder(). id(id).status(status).build(); roles.add(umsRole); } updateBatchById(roles, roles.size()); adminCacheService.delResourceListByRoleIds(ids); return true; } }