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

📄 orgmanager.java

📁 EOS的一个很好的例子.包括页面构件、展现构件
💻 JAVA
字号:
package com.primeton.eos.fbframe.fborg.bizlets;

import org.w3c.dom.*;
import java.sql.*;

import com.primeton.tp.core.api.*;
import com.primeton.tp.common.logger.*;
import com.primeton.tp.common.xml.*;
import com.primeton.eos.bizlets.util.*;
import com.primeton.tp.core.bizservice.EOSParameter;
import com.primeton.tp.core.bizservice.ProcessException;
import com.primeton.tp.core.dataservice.DBManagerException;

/**
 * @author wkq
 * @version 1.0
 * @date 2005-9-21
 * @class_displayName orgManager
 */

public class orgManager {

	/**
	 * 移动一个机构到另外一个机构下,并且将这个机构下所有机构都转到目标机构<br>
	 * 返回值:
	 * <li> 1 - 成功
	 * <li>-1 - 移动机构序号为空
	 * <li>-2 - 机构编号不存在
	 * <li>-3 - 移动机构的目标机构是源机构的子机构
	 * @param doc type: Document, DOM;
	 * @param param type: BizContext;
	 * @return: int ,运算逻辑返回值,成功返回1
	 * @throws Exception 
	 * <p>
	 * ** bizlet 的显示名称 **
	 * @bizlet_displayName BL_moveOrgToOrg
	 * @bizlet_param passing="in" type="variable" value="" name="" desc="移动机构的源机构机构编号"
	 * @bizlet_param passing="in" type="variable" value="" name="" desc="移动机构的目标机构机构编号"
	 */
	public static int BL_moveOrgToOrg(Document doc, BizContext param) throws Exception{
		String srcID = (String)param.getParaObjectAt(0);
		String destID = (String)param.getParaObjectAt(1);

		if (srcID == null || srcID.equals(""))
			return -1;
		if (destID == null || destID.equals(""))
			return -1;

		
		PersistenceBroker broker = getOrgBroker(param.getRequestID());
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			Element srcOrg = doc.createElement("EOSORG_T_Organization");
			Element destOrg = doc.createElement("EOSORG_T_Organization");
			srcOrg.setAttribute("criteria", "=");
			destOrg.setAttribute("criteria", "=");
			BNXmlUtil.setNodeValue(srcOrg, "orgID", srcID);
			BNXmlUtil.setNodeValue(destOrg, "orgID", destID);

			// 查询源机构信息
			broker.expandAll(srcOrg);
			String srcSEQ = BNXmlUtil.getNodeValue(srcOrg, "orgSEQ");
			if (srcSEQ == null || srcSEQ.equals(""))
				return -2;
			int srcLevel = Integer.parseInt(BNXmlUtil.getNodeValue(srcOrg, "orgLevel"));

			// 查询目标机构信息
			broker.expandAll(destOrg);
			String destSEQ = BNXmlUtil.getNodeValue(destOrg, "orgSEQ");
			if (destSEQ == null || destSEQ.equals(""))
				return -2;
			int destLevel = Integer.parseInt(BNXmlUtil.getNodeValue(destOrg, "orgLevel"));
			

			if (destSEQ.startsWith(srcSEQ)) {
				return -3; //移动机构的目标机构是源机构的子机构
			}
			
			String str;
			// 查询源机构下的所有机构,修改移动引起的level seq 数据
			Connection conn = broker.getConnection();
			String sql = "select orgID, orgLevel, orgSEQ from EOSORG_T_Organization where orgSEQ like ? ";
			pstmt = conn.prepareStatement(sql);
			str = srcSEQ.concat("%");
			pstmt.setString(1, str);
			for (rs = pstmt.executeQuery(); rs.next(); ) {
				int id = rs.getInt(1);
				int level = rs.getInt(2);
				String seq = rs.getString(3);
				PreparedStatement pupdate = null;
				try {
					if (srcSEQ.equals(seq)) {
						String updateSql = "update EOSORG_T_Organization set orgSEQ=? , orgLevel=? , parentOrgID=? where orgID=?";
						pupdate = conn.prepareStatement(updateSql);
						str = destSEQ.concat(String.valueOf(srcID) + ".");
						pupdate.setString(1, str);
						pupdate.setInt(2, destLevel + 1);
						pupdate.setInt(3, Integer.parseInt(destID));
						pupdate.setInt(4, id);
						pupdate.executeUpdate();
					} else {
						StringBuffer newSeq = new StringBuffer(destSEQ);
						newSeq.append(srcID);
						newSeq.append(".");
						newSeq.append(seq.substring(srcSEQ.length()));
						String updateSql = "update EOSORG_T_Organization set orgSEQ=? , orgLevel=? where orgID=?";
						pupdate = conn.prepareStatement(updateSql);
						pupdate.setString(1, newSeq.toString());
						pupdate.setInt(2, level - srcLevel + destLevel + 1);
						pupdate.setInt(3, id);
						pupdate.executeUpdate();
					}
				} finally {
					if (pupdate != null) pupdate.close();
				}
			}
			
		} finally {
			if (rs != null) rs.close();
			if (pstmt != null) pstmt.close();
			if (broker != null ) broker.close();
		}
		return 1;
	}


	/**
	 * 移动一个业务机构到另外一个业务机构下,并且将这个机构下所有机构都转到目标机构<br>
	 * 返回值:
	 * <li> 1 - 成功
	 * <li>-1 - 移动机构序号为空
	 * <li>-2 - 机构编号不存在
	 * <li>-3 - 移动机构的目标机构是源机构的子机构
	 * @param doc type: Document, DOM;
	 * @param param type: BizContext;
	 * @return: int ,运算逻辑返回值,成功返回1
	 * @throws Exception 
	 * <p>
	 * ** bizlet 的显示名称 **
	 * @bizlet_displayName BL_moveBizOrg
	 * @bizlet_param passing="in" type="variable" value="" name="" desc="移动机构的源机构机构编号"
	 * @bizlet_param passing="in" type="variable" value="" name="" desc="移动机构的目标机构机构编号,0-移动到根业务机构"
	 */
	public static int BL_moveBizOrg(Document doc, BizContext param) throws Exception{
		String srcID = (String)param.getParaObjectAt(0);
		String destID = (String)param.getParaObjectAt(1);

		if (srcID == null || srcID.equals(""))
			return -1;
		if (destID == null || destID.equals(""))
			return -1;

		
		PersistenceBroker broker = getOrgBroker(param.getRequestID());
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		if (destID.equals("0")) {
			try {
				Element srcOrg = doc.createElement("EOSORG_T_OrgRef");
				srcOrg.setAttribute("criteria", "=");
				BNXmlUtil.setNodeValue(srcOrg, "bizOrgID", srcID);
	
				// 查询源机构信息
				broker.expandAll(srcOrg);
				String srcSEQ = BNXmlUtil.getNodeValue(srcOrg, "bizOrgSEQ");
				if (srcSEQ == null || srcSEQ.equals(""))
					return -2;
				int srcLevel = Integer.parseInt(BNXmlUtil.getNodeValue(srcOrg, "bizOrgLevel"));

				String str;
				// 查询源机构下的所有机构,修改移动引起的level seq 数据
				Connection conn = broker.getConnection();
				String sql = "select bizOrgID, bizOrgLevel, bizOrgSEQ from EOSORG_T_OrgRef where bizOrgSEQ like ? ";
				pstmt = conn.prepareStatement(sql);
				str = srcSEQ.concat("%");
				pstmt.setString(1, str);
				for (rs = pstmt.executeQuery(); rs.next(); ) {
					int id = rs.getInt(1);
					int level = rs.getInt(2);
					String seq = rs.getString(3);
					PreparedStatement pupdate = null;
					try {
						if (srcSEQ.equals(seq)) {
							String updateSql = "update EOSORG_T_OrgRef set bizOrgSEQ=? , bizOrgLevel=? , parentBizOrgID=? where bizOrgID=?";
							pupdate = conn.prepareStatement(updateSql);
							str = String.valueOf(srcID).concat(".");
							pupdate.setString(1, str);
							pupdate.setInt(2, 1);
							pupdate.setNull(3, Types.INTEGER);
							pupdate.setInt(4, id);
							pupdate.executeUpdate();
						} else {
							StringBuffer newSeq = new StringBuffer("");
							newSeq.append(srcID);
							newSeq.append(".");
							newSeq.append(seq.substring(srcSEQ.length()));
							String updateSql = "update EOSORG_T_OrgRef set bizOrgSEQ=? , bizOrgLevel=? where bizOrgID=?";
							pupdate = conn.prepareStatement(updateSql);
							pupdate.setString(1, newSeq.toString());
							pupdate.setInt(2, level - srcLevel + 1);
							pupdate.setInt(3, id);
							pupdate.executeUpdate();
						}
					} finally {
						if (pupdate != null) pupdate.close();
					}
				}
			} finally {
				if (rs != null) rs.close();
				if (pstmt != null) pstmt.close();
				if (broker != null ) broker.close();
			}
		} else {
			try {
				Element srcOrg = doc.createElement("EOSORG_T_OrgRef");
				Element destOrg = doc.createElement("EOSORG_T_OrgRef");
				srcOrg.setAttribute("criteria", "=");
				destOrg.setAttribute("criteria", "=");
				BNXmlUtil.setNodeValue(srcOrg, "bizOrgID", srcID);
				BNXmlUtil.setNodeValue(destOrg, "bizOrgID", destID);
	
				// 查询源机构信息
				broker.expandAll(srcOrg);
				String srcSEQ = BNXmlUtil.getNodeValue(srcOrg, "bizOrgSEQ");
				if (srcSEQ == null || srcSEQ.equals(""))
					return -2;
				int srcLevel = Integer.parseInt(BNXmlUtil.getNodeValue(srcOrg, "bizOrgLevel"));
	
				// 查询目标机构信息
				broker.expandAll(destOrg);
				String destSEQ = BNXmlUtil.getNodeValue(destOrg, "bizOrgSEQ");
				if (destSEQ == null || destSEQ.equals(""))
					return -2;
				int destLevel = Integer.parseInt(BNXmlUtil.getNodeValue(destOrg, "bizOrgLevel"));
				
	
				if (destSEQ.startsWith(srcSEQ)) {
					return -3; //移动机构的目标机构是源机构的子机构
				}
				
				String str;
				// 查询源机构下的所有机构,修改移动引起的level seq 数据
				Connection conn = broker.getConnection();
				String sql = "select bizOrgID, bizOrgLevel, bizOrgSEQ from EOSORG_T_OrgRef where bizOrgSEQ like ? ";
				pstmt = conn.prepareStatement(sql);
				str = srcSEQ.concat("%");
				pstmt.setString(1, str);
				for (rs = pstmt.executeQuery(); rs.next(); ) {
					int id = rs.getInt(1);
					int level = rs.getInt(2);
					String seq = rs.getString(3);
					PreparedStatement pupdate = null;
					try {
						if (srcSEQ.equals(seq)) {
							String updateSql = "update EOSORG_T_OrgRef set bizOrgSEQ=? , bizOrgLevel=? , parentBizOrgID=? where bizOrgID=?";
							pupdate = conn.prepareStatement(updateSql);
							str = destSEQ.concat(String.valueOf(srcID) + ".");
							pupdate.setString(1, str);
							pupdate.setInt(2, destLevel + 1);
							pupdate.setInt(3, Integer.parseInt(destID));
							pupdate.setInt(4, id);
							pupdate.executeUpdate();
						} else {
							StringBuffer newSeq = new StringBuffer(destSEQ);
							newSeq.append(srcID);
							newSeq.append(".");
							newSeq.append(seq.substring(srcSEQ.length()));
							String updateSql = "update EOSORG_T_OrgRef set bizOrgSEQ=? , bizOrgLevel=? where bizOrgID=?";
							pupdate = conn.prepareStatement(updateSql);
							pupdate.setString(1, newSeq.toString());
							pupdate.setInt(2, level - srcLevel + destLevel + 1);
							pupdate.setInt(3, id);
							pupdate.executeUpdate();
						}
					} finally {
						if (pupdate != null) pupdate.close();
					}
				}
				
			} finally {
				if (rs != null) rs.close();
				if (pstmt != null) pstmt.close();
				if (broker != null ) broker.close();
			}
		}
		return 1;
	}

	private static PersistenceBroker getOrgBroker(String requestID) throws DBManagerException, ProcessException
	{
		EOSParameter para = new EOSParameter();
		para.setUnitName("fborg");
		para.setUnitId("0");
		para.setRequestID(requestID);
		return para.getDBBroker();
	}

	private static BizContext getOrgBizContext(String requestID)
	{
		EOSParameter para = new EOSParameter();
		para.setUnitName("fborg");
		para.setUnitId("0");
		para.setRequestID(requestID);
		return para;
	}

	/**
	 * 检查当前用户是否可以管理某个机构<br>
	 * 如果角色是eosadmin,可以管理任何机构<br>
	 * 如果角色是orgadmin,可以管辖当前用户所在的机构和所有子机构
	 * 返回值:
	 * <li>1 - 有权限
	 * <li>0 - 无权限
	 * @param doc type: Document, DOM;
	 * @param param type: BizContext;
	 * @return: int ,运算逻辑返回值,如果失败返回0,成功返回1 
	 * @throws Exception 
	 * <p>
	 * ** bizlet 的显示名称 **
	 * @bizlet_displayName BL_checkOrgPrivilege
	 * @bizlet_param passing="in" type="variable" value="/" name="" desc="机构编号"
	 */
	public static int BL_checkOrgPrivilege(Document doc, BizContext param) throws Exception{
		String orgID = (String)param.getParaObjectAt(0);
		
		if (orgID == null || orgID.equals("")) {
			Logger.error(new orgManager(), "the organization id is empty!");
			return 0;
		}
		PersistenceBroker broker = getOrgBroker(param.getRequestID());
		try {
			// 查询当前检查的机构
			Element org = doc.createElement("EOSORG_T_Organization");
			org.setAttribute("criteria", "=");
			BNXmlUtil.setNodeValue(org, "orgID", orgID);
			broker.expandAll(org);
			String seq = BNXmlUtil.getNodeValue(org, "orgSEQ");
			if (seq == null || seq.equals("")){ //当前机构不存在
				Logger.error(new orgManager(), "the organization id is not exist!");
				return 0;
			}

			Node session = XmlUtil.findNode(doc, "/root/data/SessionEntity");
			if (session == null) {
				Logger.error(new orgManager(), "Cann't find SessionEntity in bizcontext!");
				return 0;
			}
			String userId = BNXmlUtil.getNodeValue(session, "userID");
			if (userId == null || userId.equals("")) {
				Logger.error(new orgManager(), "Cann't find current userID in SessionEntity!");
				return 0;
			}

			// 查询当前用户的角色列表
			Element operRole = doc.createElement("EOSVOperatorRole");
			Element list = doc.createElement("list");
			operRole.setAttribute("criteria", "=");
			BNXmlUtil.setNodeValue(operRole, "userID", userId);
			broker.findAll(list, operRole);
			NodeList nl = list.getChildNodes();
			boolean isOrgAdmin = false;
			for (int i=0; i<nl.getLength(); i++) {
				if (nl.item(i).getNodeType() != Node.ELEMENT_NODE) 
					continue;
				Node n = nl.item(i);
				String s = BNXmlUtil.getNodeValue(n, "roleID");
				if (s == null)
					continue;
				if (s.equals("eosadmin")) //是eosadmin系统管理员角色返回可以管理
					return 1;
				if (s.equals("orgadmin")) {
					isOrgAdmin = true;
					break;
				}
			}
			
			if (!isOrgAdmin) // 如果不是orgadmin机构管理员返回不能管理
				return 0;
			
			// 查询当前用户所在机构
			Element user = doc.createElement("EOSORG_V_Users");
			user.setAttribute("criteria", "=");
			BNXmlUtil.setNodeValue(user, "userID", userId);
			broker.expandAll(user);
			String orgSEQ = BNXmlUtil.getNodeValue(user, "orgSEQ");
			if (orgSEQ == null || orgSEQ.equals("")) //当前用户不属于任何机构
				return 0;

			if (seq.startsWith(orgSEQ))
				return 1;
			else
				return 0;
			
		} finally {
			if (broker != null) broker.close();
		}
	}
}

⌨️ 快捷键说明

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