ManagerServiceImpl.java 10.9 KB
package com.bjivt.service.showtime.impl;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.bjivt.dao.showtime.CompetenceDao;
import com.bjivt.dao.showtime.RoleDao;
import com.bjivt.dao.showtime.impl.ManagerDaoImpl;
import com.bjivt.entity.showtime.Competence;
import com.bjivt.entity.showtime.Manager;
import com.bjivt.service.showtime.ManagerService;
import com.bjivt.util.Pager;


@Component
public class ManagerServiceImpl implements ManagerService {
	@Autowired(required = true)
	private ManagerDaoImpl managerDaoImpl;
	@Autowired(required = true)
	private CompetenceDao competenceDao;
	@Autowired(required = true)
	private RoleDao roleDao;
	@Override
	public Manager loginCheckManager(String loginName, String password) {
		return managerDaoImpl.loginCheckManager(loginName, password);
	}

	@Override
	public List<Manager> findManager(Manager manager,Pager page) {
		page.setCount(managerDaoImpl.getManagerCount(manager));
		manager.setStartRow(page.getFrom());
		manager.setSizeRow(page.getSize());
		return managerDaoImpl.findManager(manager);
	}
	@Override
	public List<Manager> findAllManagers(Manager manager) {
		manager.setStartRow(null);
		manager.setSizeRow(null);
		return managerDaoImpl.findManager(manager);
	}
	@Override
	public int saveManager(Manager manager, String[] roleIds) {
		int m = managerDaoImpl.saveManager(manager);
		Integer managerId = manager.getId();
		if(roleIds!=null&&roleIds.length>0){
			for (String roleId : roleIds) {
				managerDaoImpl.saveRoleForManager(Integer.valueOf(roleId), managerId);
			} 
		}
		return m;
	}

	@Override
	public Manager getManager(Integer managerId) {
		return managerDaoImpl.getManager(managerId);
	}

	@Override
	public List<Integer> findRoleForManager(Integer managerId) {
		return managerDaoImpl.findRoleForManager(managerId);
	}

	@Override
	public int updateManager(Manager manager, String[] roleIds) {
		int m = managerDaoImpl.updateManager(manager);
		Integer managerId = manager.getId();
		managerDaoImpl.deleteRoleForManager(managerId);

		for (String roleId : roleIds) {
			managerDaoImpl.saveRoleForManager(Integer.valueOf(roleId), managerId);
		}
		 
		return m;
	}

	@Override
	public int updatePassword(String password, Integer managerId) {
		return managerDaoImpl.updatePassword(password, managerId);
	}

	@Override
	public int deleteManager(Integer managerId) {
		managerDaoImpl.deleteRoleForManager(managerId);
		return managerDaoImpl.deleteManager(managerId);
	}
	@Override
    public int updateAllManagerCompetence() throws Exception{
    	 List<Manager> managerList = managerDaoImpl.findManager(new Manager());
    	 int count = 0;
    	 for(Manager manager : managerList){
    		 String competenceTree = createElementTree(manager);
    		 String competencesXml=createCompetences(manager);
    		 manager.setCompetenceTree(competenceTree);
    		 manager.setCompetencesXml(competencesXml);
    		 managerDaoImpl.updateManagerCompetence(manager);
    		 count++;
    	 }
    	return count;
    }
	 public void refreshCompetenceByManagerId(Integer id) throws Exception{
    	 if(null == id){
    		 return; 
    	 }
    	 Manager manager = managerDaoImpl.getManager(id);
    	 if(manager==null){
    		 return;
    	 }
		 String competenceTree = createElementTree(manager);
		 String competencesXml=createCompetences(manager);
		 manager.setCompetenceTree(competenceTree);
		 manager.setCompetencesXml(competencesXml);
		 managerDaoImpl.updateManagerCompetence(manager);
    		  
    }
	/**
	 * 创建管理菜单-资源树(js)
	 * 
	 * @throws Exception
	 */
	@SuppressWarnings("null")
	public String createElementTree(Manager manager) throws Exception {

		if (manager == null) {
			return null;
		}
		StringBuffer duf = new StringBuffer();

		List<Competence> competences = new ArrayList<Competence>();
		try {

			Competence competenceArgs = new Competence();
			competenceArgs.setParentId(-1);
			competenceArgs.setType("1");
			//全部的权限
			competences = competenceDao.findCompetence(competenceArgs);
			if (competences != null && competences.size() > 0) {
				duf.append("[");
				// int i=0;
				for (Competence competence : competences) {

					if (verifyCompetence(manager, competence.getId())) {// 检查当前权限
						Competence childCompetenceArgs = new Competence();
						childCompetenceArgs.setParentId(competence.getId());
						childCompetenceArgs.setType("1");
						List<Competence> cs = competenceDao.findCompetence(childCompetenceArgs);// 获取下级菜单
						if (cs != null && cs.size() > 0) {
							duf.append("{isexpand:\"false\",text:\""
									+ competence.getName() + "\"");
							createSubElementTree(manager, duf,
									competence.getId());
							duf.append("}");
						} else {
							if (StringUtils.isEmpty(competence.getUrl())) {
								duf.append("{url:\"\",text:\""
										+ competence.getName() + "\"}");
							} else {
								duf.append("{url:\""
										+ (competence.getUrl().indexOf("../") > -1 ? (competence
												.getUrl().replace("../",
												"../admin/")) : "../admin/"
												+ competence.getUrl())
										+ "\" , text:\"" + competence.getName()
										+ "\"}");
							}
						}
						// if(competences.size()>i){
						duf.append(",");
						// }
					}
					// i++;
				}
				duf.deleteCharAt(duf.length() - 1);
				duf.append("]");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		// System.out.println(duf.toString());
		return duf.toString();
	}

	/**
	 * 递归创建树的子结点(js)
	 * 
	 * @throws Exception
	 */
	@SuppressWarnings("unused")
	private void createSubElementTree(Manager manager, StringBuffer duf,
			Integer id) throws Exception {
		Competence childCompetenceArgs = new Competence();
		childCompetenceArgs.setParentId(id);
		childCompetenceArgs.setType("1");
		List<Competence> cs = competenceDao.findCompetence(childCompetenceArgs);// 获取下级菜单
	
		if (cs != null && cs.size() > 0) {
			duf.append(", children:[ ");
			int i = 0;
			for (Competence competence : cs) {
				if (verifyCompetence(manager, competence.getId())) {// 检查权限
					// i++;
					Competence childCompArgs = new Competence();
					childCompArgs.setParentId(competence.getId());
					childCompArgs.setType("1");
					List<Competence> childComp = competenceDao.findCompetence(childCompArgs);// 获取下级菜单

					
					if (childComp != null && childComp.size() > 0) {
						duf.append("{isexpand:\"false\",text:\""
								+ competence.getName() + "\"");
						createSubElementTree(manager, duf, competence.getId());
						duf.append("}");
					} else {
						if (StringUtils.isEmpty(competence.getUrl())) {
							duf.append("{url:\"\",text:\""
									+ competence.getName() + "\"}");
						} else {
							duf.append("{url:\""
									+ competence.getUrl()
									+ "\" , text:\"" + competence.getName()
									+ "\"}");
						}
					}
					// if(departments.size()>i){
					duf.append(",");
					// }
				}
			}
			duf.deleteCharAt(duf.length() - 1);

			duf.append("]");
		}

	}
	
	/**
	 * 根据管理员获得拥有的权限
	 * @param managerId
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings({ "null", "unchecked" })
	public String createCompetences(Manager manager) {
		if (manager == null) {
			return null;
		}
		StringBuffer duf = new StringBuffer();
		List<Competence> competences = new ArrayList();
		try {
			Competence competenceArgs = new Competence();
			competenceArgs.setParentId(-1);
//			competenceArgs.setType("1");
			competences = competenceDao.findCompetence(competenceArgs);
			
			if (competences.size() > 0) {
				for (Competence competence : competences) {
					if(verifyCompetence(manager,competence.getId())){//检查权限
						duf.append("<competence><name value=\""+competence.getName()+"\"/><name url=\""+competence.getUrl()+"\"/></competence>");
						createSubCompetences(manager,duf, competence.getId());
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return duf.toString();
	}
	/**
	 * 递归获得下级权限(js)
	 * @throws Exception 
	 */
	@SuppressWarnings("unused")
	private void createSubCompetences(Manager manager,StringBuffer duf, Integer id) throws Exception {

		Competence childCompetenceArgs = new Competence();
		childCompetenceArgs.setParentId(id);
//		childCompetenceArgs.setType("1");
		List<Competence> departments = competenceDao.findCompetence(childCompetenceArgs);// 获取下级菜单
		
		if (departments != null && departments.size() > 0) {
			for (Competence competence : departments) {
				if(verifyCompetence(manager,competence.getId())){//检查权限
					duf.append("<competence><name value=\""+competence.getName()+"\"/><url value=\""+competence.getUrl()+"\"/></competence>");
					createSubCompetences(manager,duf, competence.getId());
				}
			}
		}
	}
	/**
	 * 验证当前管理员有操作权
	 * @param manager
	 * @param competenceId
	 * @return
	 * @throws Exception
	 */
	public boolean verifyCompetence(Manager manager, Integer competenceId)
			throws Exception {
		if (manager == null ||StringUtils.isEmpty(manager.getLoginName())) {
			return false;
		}
		if (competenceId == null || competenceId.equals("")) {
			return false;
		}
		if (manager.getLoginName().equals("administrator")) {
			return true;
		} else {
			List  rolesIds = managerDaoImpl.findRoleForManager(manager.getId());
			for(int i=0;i<rolesIds.size();i++){
				Integer roleId= Integer.parseInt(rolesIds.get(i).toString());
				List  competencesId = roleDao.findCompetenceIdsForRoleId(roleId);
				for(int j=0;j<competencesId.size();j++){
					String js=competencesId.get(j).toString();
					if(js.equals(competenceId.toString())){
						return true;
					}
				}
//				if(competencesId.contains(competenceId)) ;//此处对比不出来
			}
		}
		return false;
	}
	/**
	 * 页面链接检验
	 * @throws Exception 
	 * */
	public boolean getVerifyByUrl(HttpServletRequest request, String url) throws Exception{
		Manager manager=(Manager)request.getSession().getAttribute("manager");  
		return verifyCompetenceByUrlXml(  manager,   url);
//		return verifyCompetenceByUrl(  manager,   url);
	}
	/**
	 * 根据url单点检查管理员的xmlCompeternce
	 * @throws Exception
	 */
	public boolean verifyCompetenceByUrlXml(Manager manager, String validateUrl)
			throws Exception {
		if (manager == null || StringUtils.isEmpty(manager.getLoginName())||StringUtils.isEmpty(manager.getCompetencesXml())||StringUtils.isEmpty(validateUrl)) {
			return false;
		} 
		if (competenceDao.getCheckCompetence(validateUrl)) {//检查权限路径是否被收录
			if (manager.getLoginName().equals("administrator")) {
				return true;
			} else {
				if(manager.getCompetencesXml().indexOf(validateUrl)>-1){
					return true;
				}
			}
		}else{
			return true;
		}
		return false;
	}

	@Override
	public List<String> findRoleElement(String id) {
		return managerDaoImpl.findRoleElement(id);
	}

}