ModuleServiceImpl.java 2.83 KB
package com.bsth.service.sys.impl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Service;

import com.bsth.common.ResponseCode;
import com.bsth.entity.sys.Module;
import com.bsth.entity.sys.Role;
import com.bsth.entity.sys.SysUser;
import com.bsth.repository.sys.ModuleRepository;
import com.bsth.security.util.SecurityUtils;
import com.bsth.service.impl.BaseServiceImpl;
import com.bsth.service.sys.ModuleService;

@Service
public class ModuleServiceImpl extends BaseServiceImpl<Module, Integer> implements ModuleService{

	@Autowired
	ModuleRepository moduleRepository;
	
	@Override
	public List<Module> findByGroupType(String group) {
		String[] array;
		if(group.indexOf(",") != -1){
			array = group.split(",");
		}
		else
			array = new String[]{group};
		return moduleRepository.findByGroupType(array);
	}

	@Override
	public Map<String, Object> delete(Integer id) {
		
		Map<String, Object> map = new HashMap<>();
		
		//判断删除的节点是否有子节点
		List<Module> list = moduleRepository.findByPId(id);
		
		if(null != list && list.size() > 0){
			map.put("status", ResponseCode.ERROR);
			map.put("msg", "失败,要删除的项还存在子节点");
		}
		else{
			map = super.delete(id);
		}
		return map;
	}

	@Override
	public List<Module> findByCurrentUser() {
		
		SysUser user = SecurityUtils.getCurrentUser();
		Set<Role> roles = user.getRoles();
		
		List<Module> all = (List<Module>) moduleRepository.findAll(new Sort(Direction.ASC, "id"))
					,results = new ArrayList<>();
		
		Map<Integer, Module> map = new HashMap<>();
		for(Module m : all){
			map.put(m.getId(), m);
			for(Role r : roles){
				if(m.getRoles().contains(r))
					results.add(m);
			}
		}
		
		//上层目录和组节点
		Set<Module> pSet = new HashSet<>();
		for(Module m : results){
			searchParentNode(m, map, pSet);
		}
		results.addAll(pSet);
		return results;
	}
	
	/**
	 * 
	 * @Title: searchParentNode 
	 * @Description: TODO(搜索上层节点) 
	 * @param @param m  当前节点
	 * @param @param idMap 全量的ID和节点对照
	 * @param @param pSet  上层节点容器
	 * @throws
	 */
	public void searchParentNode(Module m, Map<Integer, Module> idMap, Set<Module> pSet){
		int pId = m.getpId(); 
		if(pId > 0){
			Module pModule = idMap.get(pId);
			pSet.add(pModule);
			
			if(null != pModule &&
					null != pModule.getpId() 
					&& pModule.getpId() > 0)
				searchParentNode(pModule, idMap, pSet);
		}
	}
}