⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rightsmgrimpl.java

📁 基于Sturts+Spring+Hibernate的一个高级销售管理系统。内容丰富
💻 JAVA
字号:
package com.yuanchung.sales.service.admin.rights.impl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import com.yuanchung.sales.constants.SystemConstant;
import com.yuanchung.sales.dao.admin.RightsDAO;
import com.yuanchung.sales.exception.IllegalParameterException;
import com.yuanchung.sales.exception.SystemException;
import com.yuanchung.sales.model.admin.Rights;
import com.yuanchung.sales.model.admin.position.PositionRights;
import com.yuanchung.sales.model.admin.position.UserRights;
import com.yuanchung.sales.model.admin.role.RoleRights;
import com.yuanchung.sales.model.user.User;
import com.yuanchung.sales.service.admin.rights.RightsMgr;
import com.yuanchung.sales.util.Constants;
import com.yuanchung.sales.vo.right.WebRightsView;

public class RightsMgrImpl implements RightsMgr {

	private static RightsDAO rightsDAO;
	private static Logger log = Logger.getLogger(RightsMgrImpl.class);

	public RightsDAO getRightsDAO() {
		return rightsDAO;
	}

	public void setRightsDAO(RightsDAO rightsDAO) {
		this.rightsDAO = rightsDAO;
	}

	/**
	 * 获取系统所有功能权限,封装成一棵树,返回封装树的javascript语句
	 * 
	 * @return treeContent.toString
	 * @throws SystemException
	 */
	public static String getPositionRightsTreeView(String connect,
			int positionId, int parentId, List<PositionRights> positionRights)
			throws SystemException {
		StringBuffer treeContent = new StringBuffer();
		if (parentId == 0) {
			/* 实例化一个树对象 */
			treeContent.append("var rightTree = new dTree('rightTree');\n");
			Collection<Rights> rights = rightsDAO.findByParentId(parentId);
			if (rights.size() > 0) {
				Rights root = (Rights) rights.iterator().next();
				boolean flag = false;
				// 遍历某岗位已有权限
				for (int i = 0; i < positionRights.size(); i++) {
					if (root.getId()
							.equals(positionRights.get(i).getRightsId())) {
						// 标志置为true,终止循环
						flag = true;
						break;
					}
				}
				treeContent
						.append("rightTree.add("
								+ root.getId()
								+ ","
								+ parentId
								+ ",'"
								+ root.getRightsName()
								+ "','/sales/rights.do?dispatch=toRightsManagePage&rightsId="
								+ root.getId() + "'," + flag + ",'"
								+ positionId + "');" + "\n");
				if (isParent(root.getId())) {
					treeContent.append(getPositionRightsTreeView(treeContent
							.toString(), positionId, root.getId(),
							positionRights));
				}
			}
		} else {
			Collection<Rights> rights = rightsDAO.findByParentId(parentId);
			for (Iterator it = rights.iterator(); it.hasNext();) {
				Rights r = (Rights) it.next();
				boolean flag = false;
				// 遍历某岗位已有权限
				for (int i = 0; i < positionRights.size(); i++) {
					if (r.getId().equals(positionRights.get(i).getRightsId())) {
						// 标志置为true,终止循环
						flag = true;
						break;
					}
				}
				treeContent
						.append("rightTree.add("
								+ r.getId()
								+ ","
								+ r.getParentId()
								+ ",'"
								+ r.getRightsName()
								+ "','/sales/rights.do?dispatch=toRightsManagePage&rightsId="
								+ r.getId() + "'," + flag + ",'" + positionId
								+ "');" + "\n");
				if (isParent(r.getId())) {
					treeContent
							.append(getPositionRightsTreeView(treeContent
									.toString(), positionId, r.getId(),
									positionRights));
				}
			}
		}
		return treeContent.toString();
	}

	/**
	 * 获取系统所有功能权限,封装成一棵树,返回封装树的javascript语句
	 * 
	 * @return treeContent.toString
	 * @throws SystemException
	 */
	public static String getRoleRightsTreeView(String connect, int roleId,
			int parentId, List<RoleRights> roleRights) throws SystemException {
		StringBuffer treeContent = new StringBuffer();
		if (parentId == 0) {
			/* 实例化一个树对象 */
			treeContent.append("var rightTree = new dTree('rightTree');\n");
			Collection<Rights> rights = rightsDAO.findByParentId(parentId);
			if (rights.size() > 0) {
				Rights root = (Rights) rights.iterator().next();
				boolean flag = false;
				// 遍历角色已有权限
				for (int i = 0; i < roleRights.size(); i++) {
					if (root.getId().equals(roleRights.get(i).getRightsId())) {
						// 标志置为true,终止循环
						flag = true;
						break;
					}
				}
				treeContent
						.append("rightTree.add("
								+ root.getId()
								+ ","
								+ parentId
								+ ",'"
								+ root.getRightsName()
								+ "','/sales/rights.do?dispatch=toRightsManagePage&rightsId="
								+ root.getId() + "'," + flag + ",'" + roleId
								+ "');" + "\n");
				if (isParent(root.getId())) {
					treeContent.append(getRoleRightsTreeView(treeContent
							.toString(), roleId, root.getId(), roleRights));
				}
			}
		} else {
			Collection<Rights> rights = rightsDAO.findByParentId(parentId);
			for (Iterator it = rights.iterator(); it.hasNext();) {
				Rights r = (Rights) it.next();
				boolean flag = false;
				// 遍历某岗位已有权限
				for (int i = 0; i < roleRights.size(); i++) {
					if (r.getId().equals(roleRights.get(i).getRightsId())) {
						// 标志置为true,终止循环
						flag = true;
						break;
					}
				}
				treeContent
						.append("rightTree.add("
								+ r.getId()
								+ ","
								+ r.getParentId()
								+ ",'"
								+ r.getRightsName()
								+ "','/sales/rights.do?dispatch=toRightsManagePage&rightsId="
								+ r.getId() + "'," + flag + ",'" + roleId
								+ "');" + "\n");
				if (isParent(r.getId())) {
					treeContent.append(getRoleRightsTreeView(treeContent
							.toString(), roleId, r.getId(), roleRights));
				}
			}
		}
		return treeContent.toString();
	}

	/**
	 * 根据节点ID判断该节点是否为父节点(底下还有子节点)
	 * 
	 * @param nodeId
	 * @return
	 */
	public static boolean isParent(int nodeId) {
		try {
			Collection<Rights> rights = rightsDAO.findByParentId(nodeId);
			if (rights.size() > 0) {
				return true;
			} else {
				return false;
			}
		} catch (Exception re) {
			return false;
		}
	}

	/**
	 * 根据节点ID判断该节点是否为父节点(底下还有子节点)
	 * 
	 * @param nodeId
	 * @return
	 */
	public boolean isParentNode(String nodeId) {
		int parentId = 0;
		if (nodeId != null && !nodeId.equals("")) {
			parentId = Integer.parseInt(nodeId);
		}
		try {
			Collection<Rights> rights = rightsDAO.findByParentId(parentId);
			log.debug("服务器返回值是: " + (rights.size() > 0));
			if (rights.size() > 0) {
				return true;
			} else {
				return false;
			}
		} catch (Exception re) {
			return false;
		}
	}

	/**
	 * 根据权限名称判断该名称是否存在
	 * 
	 * @param nodeId
	 * @return
	 */
	public boolean isExistByRightsName(String rightsName) {
		try {
			Collection<Rights> rights = rightsDAO.findByRightsName(rightsName);
			if (rights.size() > 0) {
				return true;
			} else {
				return false;
			}
		} catch (Exception re) {
			return false;
		}
	}

	/**
	 * 根据ID获取权限记录
	 * 
	 * @param id
	 * @return
	 * @throws SystemException
	 */
	public static Rights findById(int id) throws SystemException {
		Rights r = rightsDAO.findById(id);
		return r;
	}

	/**
	 * 保存权限记录
	 * 
	 * @param id
	 * @return
	 * @throws SystemException
	 */
	public static void save(Rights right) throws SystemException {
		rightsDAO.save(right);
	}

	/**
	 * 修改权限记录
	 * 
	 * @param id
	 * @return
	 * @throws SystemException
	 */
	public static void update(Rights r) throws SystemException {
		rightsDAO.attachDirty(r);

	}

	/**
	 * 根据ID删除权限记录包括子权限
	 * 
	 * @param id
	 * @throws SystemException
	 */
	public static void delIncChildRightsById(Integer id) throws SystemException {
		if (isParent(id)) {
			Collection<Rights> rights = rightsDAO.findByParentId(id);
			for (Iterator it = rights.iterator(); it.hasNext();) {
				Rights r = (Rights) it.next();
				delIncChildRightsById(r.getId());// 递归调用,删除子节点
			}
			Rights parentRights = rightsDAO.findById(id);// 获取对象
			rightsDAO.delete(parentRights);// 删除完子节点,再删除当前节点
		} else {
			Rights childRights = rightsDAO.findById(id);// 获取对象
			rightsDAO.delete(childRights);
		}

	}

	/**
	 * 判断所传权限名称与session存放的权限名称是否一致
	 * 
	 * @param session
	 * @param rightsName
	 * @return
	 */
	public static boolean checkRights(HttpSession session, String rightsName) {
		boolean isExist = false;
		// 从session里获取用户权限
		List<Rights> rights = (List<Rights>) session
				.getAttribute(SystemConstant.SESSION_RIGHTS);
		for (int i = 0; i < rights.size(); i++) {
			Rights right = rights.get(i);
			// 判断权限是否存在
			if (right.getRightsName().equals(rightsName)) {
				isExist = true;
				break;
			}
		}

		return isExist;
	}

	/**
	 * DWR调用 判断当前用户权限是否被更改,如果被更改了,页面对其提示并自动刷新
	 * 
	 * @param HttpSession
	 *            session
	 * @return String htmlString
	 */
	public String checkRightsIsUpdate(HttpSession session) {

		String htmlString = "";

		// 获取全局会话
		ServletContext app = session.getServletContext();
		// 获取当前用户
		User user = (User) session.getAttribute(Constants.SESSION_USER);
		// 获取会话里的用户Session集合Map对象
		Map userInfo = (Map) app
				.getAttribute(SystemConstant.APPLICATION_USER_INFO);
		// 获取存储在全局会话里的用户Session
		HttpSession userSession = (HttpSession) userInfo.get(user.getId());
		// log.debug("是否有被修改: " +
		// ((Boolean)userSession.getAttribute(SystemConstant.SESSION_RIGHTS_IS_UPDATED)));
		// 判断权限是否有被修改
		if ((Boolean) userSession
				.getAttribute(SystemConstant.SESSION_RIGHTS_IS_UPDATED)) {
			// 获取修改后新的权限(管理员存放进去的)
			List<Rights> rights = (List<Rights>) userSession
					.getAttribute(SystemConstant.SESSION_RIGHTS);
			// 在当前Session里设入用户权限
			session.setAttribute(SystemConstant.SESSION_RIGHTS, rights);
			// 在全局会话Session里设入用户权限是否被修改的值,值为false
			userSession.setAttribute(SystemConstant.SESSION_RIGHTS_IS_UPDATED,
					false);
			userInfo.put(user.getId(), userSession);
			app.setAttribute(SystemConstant.APPLICATION_USER_INFO, userInfo);
			// 提示用户权限已被更改
			htmlString += "alert('您的权限已被管理员更改,页面将在5秒之后自动刷新!');";
			// 5秒钟后刷新页面
			htmlString += "window.setTimeout(refurbish(), 5000);";
		}

		return htmlString;
	}

	/**
	 * 封装功能权限页面数据
	 */
	@SuppressWarnings("unchecked")
	public Map<String, WebRightsView> getWebRightsView(List objRights,
			int flag, int jspRightsFlag) {
		// 取出岗位(角色,用户-权限)所有权限
		List idList = new ArrayList();
		// 岗位为1,角色为2,用户-权限为3
		for (int i = 0; i < objRights.size(); i++) {
			if (flag == Constants.POSITION_FLAG) {
				idList.add(((PositionRights) objRights.get(i)).getRightsId());
			}
			if (flag == Constants.ROLE_FALG) {
				idList.add(((RoleRights) objRights.get(i)).getRightsId());
			}
			// 2009-01-16 add
			if (flag == Constants.USER_RIGHTS_FALG) {
				idList.add(((UserRights) objRights.get(i)).getRightsId());
			}
			// end add
			//2009-01-21 add
			if(flag == Constants.RIGHTS_FALG){
				idList.add(((Rights)objRights.get(i)).getId());
			}
			//end 
		}
		log.debug(idList.size());
		List<Rights> rightsList = new ArrayList<Rights>();
		try {
			rightsList = rightsDAO.findByIds(idList);
		} catch (IllegalParameterException ie) {
			log.error(ie.getMessage());
			throw ie;
		} catch (RuntimeException re) {
			log.error(re.getMessage());
			throw new SystemException(Constants.SYSTEMEXCEPTION);
		}
		@SuppressWarnings("unused")
		Map<String, WebRightsView> webRightsViews = portfolioWebRightsView(
				rightsList, jspRightsFlag);
		return webRightsViews;
	}

	/**
	 * 根据功能模块组合权限在网页的视图
	 * 
	 * @param rightsList
	 */
	@SuppressWarnings("unchecked")
	private Map<String, WebRightsView> portfolioWebRightsView(
			List<Rights> rightsList, int jspRightsFlag) {
		List<Rights> allRights = new ArrayList<Rights>();// 为不包括parent_id为0的权限
		List<Rights> modules = new ArrayList<Rights>();// 从权限里取出parent_id为0的记录
		try {
			allRights = rightsDAO.findByProperty("parentId",
					Constants.RIGHTSMODULE, "!=");
			modules = rightsDAO.findByProperty("parentId",
					Constants.RIGHTSMODULE, "=");
		} catch (RuntimeException re) {
			log.error(re.getMessage());
			throw new SystemException(Constants.SYSTEMEXCEPTION);
		}
		log.debug("ok....");
		Map<String, WebRightsView> webRightsViews = new HashMap<String, WebRightsView>();
		log.debug("modules : " + modules.size());
		for (int i = 0; i < modules.size(); i++) {
			WebRightsView webRightsView = new WebRightsView();
			webRightsView.setModuleId(modules.get(i).getId());
			webRightsView.setModuleName(modules.get(i).getRightsName());
			log.debug("key: " + modules.get(i).getId());
			webRightsViews.put(modules.get(i).getId().toString(), webRightsView);
		}

		log.debug("封装权限");
		for (int i = 0; i < allRights.size(); i++) {
			webRightsViews.get(allRights.get(i).getParentId().toString()).getRightsMap()
					.put(allRights.get(i).getId().toString(), allRights.get(i));
		}

		if (rightsList != null) {
			for (int i = 0; i < rightsList.size(); i++) {
				log.debug("rightsId : " + rightsList.get(i).getId());
				log.debug("jspRightsFlag : " + jspRightsFlag);
				// 2009-01-20 add
				if (jspRightsFlag == Constants.JSPRIGHTSCONTROL_YES) {
					log.debug("jspRightsControl");
					webRightsViews.get(rightsList.get(i).getParentId().toString())
							.setStyle(Constants.STYLE_BLOCK);
					webRightsViews.get(rightsList.get(i).getParentId().toString())
							.getRightsMap().get(rightsList.get(i).getId().toString())
							.setStyle(Constants.STYLE_BLOCK);
				} else {
					// end
					webRightsViews.get(rightsList.get(i).getParentId().toString())
							.getRightsMap().get(rightsList.get(i).getId().toString())
							.setChecked("checked");
				}
			}
		}
		log.debug("封装完成");
		return webRightsViews;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -