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);
});
}
}