📄 omserviceimpl2.java
字号:
package com.primeton.eos.fbframe.om;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import org.w3c.dom.Element;
import com.primeton.eos.util.StringUtil;
import com.primeton.eos.util.XML;
import com.primeton.eos.util.XMLException;
import com.primeton.eos.wf.service.api.DataAccessException;
import com.primeton.eos.wf.service.api.DataAccessService;
import com.primeton.eos.wf.service.api.ServiceFactory;
import com.primeton.eos.wf.service.api.WFOMException;
import com.primeton.eos.wf.service.api.WFOMService2;
import com.primeton.eos.wf.service.api.consts.DefineConst;
import com.primeton.eos.wf.service.api.omdefinition.OrganizationParticipant;
import com.primeton.eos.wf.service.api.omdefinition.PersonParticipant;
import com.primeton.eos.wf.service.api.omdefinition.PositionParticipant;
import com.primeton.eos.wf.service.api.omdefinition.RoleParticipant;
import com.primeton.tp.core.api.DataServiceException;
import com.primeton.tp.core.api.PersistenceBroker;
import com.primeton.tp.core.bizservice.EOSParameter;
import com.primeton.tp.core.bizservice.ProcessException;
import com.primeton.tp.core.dataservice.DBManagerException;
import com.primeton.eos.wf.service.om.OMServiceImpl;
/**
*
* @author wkq
* @version 1.0
* @date 2005-9-21
* @class_displayName OMServiceImpl2
*
* 支持岗位的工作流组织机构接口 *
*
*/
public class OMServiceImpl2 extends OMServiceImpl implements WFOMService2{
/**
*
*/
public OMServiceImpl2() {
super();
}
/**
* get position participant by positionID
*
* @throws WFOMException
*/
public PositionParticipant findPositionParticipant(String positionID)
throws WFOMException {
try {
String sqlStr = "select * from EOSORG_T_POSITION where POSITIONID=?";
ArrayList postList = executeQueryPosition(sqlStr, positionID);
if (postList == null || postList.size() == 0)
return null;
return (PositionParticipant) postList.get(0);
} catch (Exception e) {
return null;
}
}
/**
* get positions under the organization
*
* @throws WFOMException
*/
public PositionParticipant[] getPositionsByOrganizationID(String orgID)
throws WFOMException {
// modify by wangkq 如果岗位表不存在时候,并不抛出异常,返回一个空的岗位列表
try {
String sqlStr = "select * from EOSORG_T_POSITION where ORGID=?";
ArrayList postList = executeQueryPosition(sqlStr, orgID);
PositionParticipant[] ret = new PositionParticipant[postList.size()];
for (int i = 0; i < ret.length; i++) {
ret[i] = (PositionParticipant) postList.get(i);
}
return ret;
} catch (Exception e) {
return new PositionParticipant[0];
}
}
/**
* get persons by positionID
*/
public PersonParticipant[] getPersonsByPositionID(String positionID)
throws WFOMException {
// modify by wangkq 如果岗位表不存在时候,并不抛出异常,返回一个空的个人列表
String sqlStr = "select * from EOSORG_V_OMEMPOPERVIEW where OPERATORID in(select OPERATORID from EOSORG_T_EMPPOSITION where POSITIONID=?)";
Connection conn = null;
ResultSet rs = null;
PersistenceBroker broker = null;
PreparedStatement ps = null;
ArrayList partiList = new ArrayList();
try {
broker = getOrgBroker();
conn = broker.getConnection();
ps = conn.prepareStatement(sqlStr);
ps.setString(1, positionID);
rs = ps.executeQuery();
int i = 0;
while (rs.next()) {
PersonParticipant parti = new PersonParticipant();
parti.setID(String.valueOf(rs.getString(2)));
parti.setName(rs.getString(4));
parti
.setType(DefineConst.PARTICIPANTINFO_PARTICIPANTLIST_TYPE_PERSON);
parti.setPosition(rs.getString(9));
parti.setEmail(rs.getString(7));
partiList.add(i, parti);
i++;
}
} catch (DataAccessException e) {
e.printStackTrace();
return new PersonParticipant[0];
} catch (SQLException e) {
e.printStackTrace();
return new PersonParticipant[0];
} catch (DataServiceException e) {
e.printStackTrace();
return new PersonParticipant[0];
} finally {
try {
if (rs != null)
rs.close();
if (ps != null)
ps.close();
if (conn != null)
conn.close();
if (broker != null)
broker.close();
} catch (SQLException e2) {
e2.printStackTrace();
} catch (DataServiceException e) {
e.printStackTrace();
}
}
PersonParticipant[] ret = new PersonParticipant[partiList.size()];
for (int i = 0; i < ret.length; i++) {
ret[i] = (PersonParticipant) partiList.get(i);
}
return ret;
}
/**
*
*/
public PositionParticipant[] getPositionsByPersonID(String personID)
throws WFOMException {
ArrayList postList = new ArrayList();
try {
String sqlStr = "select * from EOSORG_T_POSITION where positionID in(select positionID from EOSORG_T_EMPPOSITION where OPERATORID in (select operatorID from EOSOperator where userID=?))";
postList = executeQueryPosition(sqlStr, personID);
} catch (Exception e){
e.printStackTrace();
}
// 查询个人的岗位列表时候,如果岗位列表不存在并不抛出异常,并且根据个人所在的机构和角色形成这个人的虚拟岗位
ArrayList orgList = executeGetOrgByPerson(personID);
RoleParticipant[] roles = getRolesByPersonID(personID);
int len = postList.size();
if (orgList.size() > 0 && roles.length >0) {
len += orgList.size() * roles.length;
}
PositionParticipant[] posts = new PositionParticipant[len];
for (int i = 0; i < postList.size(); i++) {
posts[i] = (PositionParticipant) postList.get(i);
}
if (orgList.size() > 0 && roles.length >0) {
int plen = postList.size();
int s = 0;
for (int i=0; i<orgList.size(); i++) {
for (int j=0; j<roles.length; j++) {
String oId = ((OrganizationParticipant)orgList.get(i)).getID();
String oName = ((OrganizationParticipant)orgList.get(i)).getName();
posts[plen+s] = new PositionParticipant();
posts[plen+s].setID(oId + "{" + roles[j].getID() + "}");
posts[plen+s].setType(DefineConst.PARTICIPANTINFO_PARTICIPANTLIST_TYPE_POSITION);
String n = oName + roles[j].getName();
try {
byte[] b = n.getBytes("GBK");
if (b.length > 64) {
n = new String(b, 0, 64, "GBK");
}
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
posts[plen+i].setName(n);
s++;
}
}
}
return posts;
}
/**
* query position by criteria input orgID <Condition type='OR'> <orgID>1001
* </orgID> <roleID>rolea </roleID> </Condition>
*/
public PositionParticipant[] queryPositions(Element criteria)
throws WFOMException {
String orgid = null;
String roleid = null;
try {
orgid = XML.getNodeValue(criteria, "orgID");
roleid = XML.getNodeValue(criteria, "roleID");
} catch (XMLException e) {
throw new WFOMException(e.getMessage());
}
String optType = criteria.getAttribute("type");
if (StringUtil.isNull(optType))
throw new WFOMException("Node[Condition]'s attr[type] is null");
if ("OR".equals(optType)) {
PositionParticipant[] p = new PositionParticipant[0];
try {
p = queryPositionTypeOR(orgid, roleid);
} catch (Exception e) {
e.printStackTrace();
}
// 根据机构和角色编号产生一个虚拟的岗位
OrganizationParticipant org = findOrganizationByID(orgid);
RoleParticipant role = findRoleByID(roleid);
if (org == null)
throw new WFOMException("The organization '" + orgid + "' is not exist!");
if (role == null)
throw new WFOMException("The role '" + roleid + "' is not exist!");
PositionParticipant[] posts = new PositionParticipant[p.length + 1];
for (int i=0; i<p.length; i++)
posts[i] = p[i];
posts[p.length] = new PositionParticipant();
posts[p.length].setID(org.getID() + "{" + role.getID() + "}");
posts[p.length].setType(DefineConst.PARTICIPANTINFO_PARTICIPANTLIST_TYPE_POSITION);
String n = org.getName() + role.getName();
try {
byte[] b = n.getBytes("GBK");
if (b.length > 64) {
n = new String(b, 0, 64, "GBK");
}
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
posts[p.length].setName(n);
return posts;
}
else
//waitting expend here
throw new WFOMException("Node[Condition]'s attr[type] is not OR");
}
/**
* implement this method later
*/
public PersonParticipant[] queryPersons(Element criteria)
throws WFOMException {
return null;
}
/**
* implement this method later
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -