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

📄 omserviceimpl2.java

📁 EOS的一个很好的例子.包括页面构件、展现构件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -