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

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;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

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

	@Autowired
	ModuleRepository moduleRepository;

	@Autowired
	JdbcTemplate jdbcTemplate;
	
	@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();
		
		String inCond = "";
		for(Role r : roles)
			inCond += ("," + r.getId());

		inCond = "(" + inCond.substring(1) + ")";

		String sql = "select ID,CREATE_DATE,`ENABLE`,GROUP_TYPE,ICON,MAPP_SYMBOL,NAME,P_ID,PATH,UPDATE_DATE,CONTAINER from bsth_c_sys_module m where id in (select modules from bsth_c_sys_role_modules where roles in "+inCond+")  or group_type != 3";
		List<Module> all = jdbcTemplate.query(sql, new ModuleRowMapper())
				,rs = new ArrayList<>();

		Map<Integer, Module> map = new HashMap<>();
		for(Module m : all){
			map.put(m.getId(), m);
			if(m.getGroupType().equals("3") && m.isEnable())
				rs.add(m);
		}
		
		//上层目录和组节点
		Set<Module> pSet = new HashSet<>();
		for(Module m : rs){
			searchParentNode(m, map, pSet);
		}
		rs.addAll(pSet);

		//排序
		Collections.sort(rs, new Comparator<Module>() {
			@Override
			public int compare(Module o1, Module o2) {
				return o1.getId() - o2.getId();
			}
		});
		return rs;
	}

	@Override
	public List<Module> findAll_distinct() {
		return moduleRepository.findAll_distinct();
	}

	/**
	 * 
	 * @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);
		}
	}

	public class ModuleRowMapper implements RowMapper{

		@Override
		public Module mapRow(ResultSet rs, int rowNum) throws SQLException {
			Module module = new Module();
			module.setId(rs.getInt("ID"));
			module.setCreateDate(rs.getDate("CREATE_DATE"));
			module.setEnable(rs.getBoolean("ENABLE"));
			module.setGroupType(rs.getString("GROUP_TYPE"));
			module.setIcon(rs.getString("ICON"));
			module.setMappSymbol(rs.getString("MAPP_SYMBOL"));
			module.setName(rs.getString("NAME"));
			module.setpId(rs.getInt("P_ID"));
			module.setPath(rs.getString("PATH"));
			module.setUpdateDate(rs.getDate("UPDATE_DATE"));
			module.setContainer(rs.getString("CONTAINER"));
			return module;
		}
	}
}