package com.jilongda.manage.authority.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.jilongda.manage.authority.mapper.SecResourcesMapper; import com.jilongda.manage.authority.mapper.SecRoleMapper; import com.jilongda.manage.authority.model.SecResources; import com.jilongda.common.basic.PageInfo; import com.jilongda.common.utils.SpringUtils; import com.jilongda.manage.authority.dto.SecUserQueryDTO; import com.jilongda.manage.authority.model.SecRole; import com.jilongda.manage.authority.service.SecRoleService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jilongda.manage.authority.vo.SecResourceVO; import com.jilongda.manage.authority.vo.SecUserVO; import org.apache.commons.compress.utils.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static java.util.stream.Collectors.toList; /** *

* 服务实现类 *

* * @author xiaochen * @since 2022-06-08 */ @Service public class SecRoleServiceImpl extends ServiceImpl implements SecRoleService { @Autowired private SecRoleMapper secRoleMapper; @Autowired private SecResourcesMapper secResourcesMapper; @Override public SecRoleMapper getSecRoleMapper() { return secRoleMapper; } @Override public PageInfo getUserByRole(SecUserQueryDTO dto) { PageInfo pageInfo = new PageInfo(dto.getPageNum(), dto.getPageSize()); List secUserVOS = secRoleMapper.getUserByRole(dto, pageInfo); pageInfo.setRecords(secUserVOS); // 获取列表 return pageInfo; } @Override public List selectRoleResourcesByRid(Long rid) { List allResources = secResourcesMapper.selectList(Wrappers.emptyWrapper()); List resourceIds = secRoleMapper.selectResByRid(rid); SecResourceVO item; //获取根节点的集合 List root = new ArrayList<>(); Map tempMap = new HashMap<>(3); //子节点集合 SecResourceVO parent; for (SecResources resources : allResources) { item = SpringUtils.beanCopy(resources, SecResourceVO.class); if (resourceIds.contains(resources.getId())) { item.setFlag(true); } //每次循环都将集合重新循环添加到父集合中 tempMap.put(resources.getId(), item); parent = tempMap.get(resources.getParentId()); if (null != parent) { //父集合不为空时,获取下级集合 //子节点集合 parent.getChildren().add(item); } else { //根集合 root.add(item); } } return root; } @Override public List getRecursion(Long rid) { List secResourceVOS = secResourcesMapper.getList(rid); // 判空 if (CollectionUtils.isEmpty(secResourceVOS)) return Lists.newArrayList(); // 找出所有父级 List parent = secResourceVOS.stream().filter(resourceVO -> resourceVO.getParentId().equals("0")).collect(toList()); // 通过父级递归子集 getChildren(secResourceVOS,parent); return parent; } private void getChildren(List secResourceVOS, List parentList) { parentList.forEach(parent -> { List childrenList = secResourceVOS.stream().filter(resourceVO -> resourceVO.getParentId().equals(parent.getId())).collect(toList()); parent.setChildren(childrenList); if (!CollectionUtils.isEmpty(childrenList)) getChildren(secResourceVOS,childrenList); }); } }