📄 orgmanager.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 + -