processworkflowdao.java

来自「公司自己开发的工作流引擎」· Java 代码 · 共 265 行

JAVA
265
字号
package cn.com.iaspec.workflow.engine.dao;

import java.util.List;
import cn.com.iaspec.workflow.db.WorkflowDBConnectionManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Connection;
import org.apache.log4j.Logger;
import java.sql.SQLException;
import java.util.ArrayList;
import cn.com.iaspec.workflow.vo.workflow.ProcessDefine;
import cn.com.iaspec.workflow.vo.db.WfProcInstance;
import cn.com.iaspec.workflow.vo.db.WfActiInstance;
import java.util.Vector;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: IASPEC Technologies</p>
 *
 * @author xiesonglin
 * @version 1.0
 */
public class ProcessWorkflowDAO{
  private static Logger logger=Logger.getLogger(ProcessWorkflowDAO.class);
  public ProcessWorkflowDAO(){
  }

  /**
   * 取出要返回活动的办理人
   * @param workitemId 当前流程实例id
   * @param returnToActId 要返回的活动定义id
   * @return String
   * @throws Exception
   */
  public String getReturnActor(long proInstId,long returnToActDefId)
      throws Exception{
    String sendUserId="";
    Connection conn=null;
    Statement stm=null;
    try{
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      stm=conn.createStatement();
      String sql=" select wki_id,wki_user from workitem where wki_id in "+
          " (select max(a.wki_id) from workitem a inner join actiinstance b "+
          " on a.wki_atiid=b.ati_id where b.ati_atdid="+returnToActDefId+
          " and b.ati_priid="+proInstId+" and a.wki_state>=4) ";
      logger.info("......query sql:"+sql);
      ResultSet rs=stm.executeQuery(sql);
      if(rs.next()){
        sendUserId=rs.getString("wki_user");
      }
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(stm,false);
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
    return sendUserId;
  }

  /**
   * 取出要返回活动的办理人(可能有多个)
   * @param workitemId 当前流程实例id
   * @param returnToActId 要返回的活动定义id
   * @return Vector
   * @throws Exception
   */
  public Vector getReturnActors(long proInstId,long returnToActDefId)
      throws Exception{
    Vector vector=new Vector();
    Connection conn=null;
    Statement stm=null;
    try{
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      stm=conn.createStatement();
      String sql=" select distinct wki_id,wki_user from workitem where wki_id in "+
          " (select a.wki_id from workitem a inner join actiinstance b "+
          " on a.wki_atiid=b.ati_id where b.ati_atdid="+returnToActDefId+
          " and b.ati_priid="+proInstId+" and a.wki_state>=4) ";
      logger.info("......query sql:"+sql);
      ResultSet rs=stm.executeQuery(sql);
      while(rs.next()){
        vector.add(rs.getString("wki_user"));
      }
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(stm,false);
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
    return vector;
  }


  /**
   * 查询所有有效的流程定义
   *
   * @return List
   * @throws Exception
   */
  public List getAllProcesses()
      throws Exception{
    String sql="select * from procdefinition where prd_flag = 0";
    Connection conn=null;
    Statement stm=null;
    List processList=new ArrayList();
    ProcessDefine procDef=null;
    ResultSet rs=null;

    try{
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      stm=conn.createStatement();
      rs=stm.executeQuery(sql);

      while(rs.next()){
        procDef=new ProcessDefine();

        procDef.setProcessDefineId(rs.getLong("prd_id"));
        procDef.setProcessDefineName(rs.getString("prd_name"));
        procDef.setDescription(rs.getString("prd_description"));
        procDef.setVersion(rs.getString("prd_version"));
        procDef.setCreateDate(rs.getDate("prd_createDate"));
        procDef.setCreator(rs.getString("prd_creator"));

        processList.add(procDef);
      }
    }
    catch(SQLException sqle){
      sqle.printStackTrace();
      throw sqle;
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(rs);
      WorkflowDBConnectionManager.getInstance().close(stm,false);
      WorkflowDBConnectionManager.getInstance().close(conn);
    }

    return processList;
  }

  /**
   * 根据流程实例id取得流程实例信息
   * @param procInstanceId long
   * @return WfProcInstance
   * @throws Exception
   */
  public WfProcInstance getWfProcInstanceInfo(long procInstanceId)
      throws Exception{
    String sql="select b.pri_id,b.pri_state,b.pri_endtime,b.pri_starttime,a.prd_maxtime,a.prd_estimatetime "+
        " from procdefinition a,procinstance b where a.prd_id=b.pri_prdid "+
        "  and b.pri_id="+procInstanceId;
    Connection conn=null;
    Statement stm=null;
    ResultSet rs=null;
    WfProcInstance procInst=null;
    try{
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      stm=conn.createStatement();
      rs=stm.executeQuery(sql);

      while(rs.next()){
        procInst=new WfProcInstance();
        procInst.setPriId(rs.getLong("pri_id"));
        procInst.setPriState(rs.getInt("pri_state"));
        procInst.setPriStartTime(rs.getTimestamp("pri_starttime"));
        procInst.setPrdMaxTime(rs.getLong("prd_maxtime"));
        procInst.setPrdEstimateTime(rs.getLong("prd_estimatetime"));
        procInst.setPriEndTime(rs.getTimestamp("pri_endtime"));
      }
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(rs);
      WorkflowDBConnectionManager.getInstance().close(stm,false);
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
    return procInst;
  }

  /**
   * 根据活动实例id取得活动实例信息
   * @param procInstanceId long
   * @return WfProcInstance
   * @throws Exception
   */
  public WfActiInstance getWfActiInstanceInfo(long actiInstanceId)
      throws Exception{
    String sql="select b.ati_id,b.ati_state,b.ati_starttime,ati_endtime,a.atd_id,a.atd_uid,a.atd_maxtime,a.atd_estimatetime "+
        " from actidefinition a,actiinstance b where a.atd_id=b.ati_atdid "+
        "  and b.ati_id="+actiInstanceId;
    logger.info("......query sql:"+sql);
    Connection conn=null;
    Statement stm=null;
    ResultSet rs=null;
    WfActiInstance actiInst=null;
    try{
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      stm=conn.createStatement();
      rs=stm.executeQuery(sql);

      while(rs.next()){
        actiInst=new WfActiInstance();
        actiInst.setAtiId(rs.getLong("ati_id"));
        actiInst.setAtiState(rs.getInt("ati_state"));
        actiInst.setAtiStartTime(rs.getTimestamp("ati_starttime"));
        actiInst.setAtdMaxTime(rs.getLong("atd_maxtime"));
        actiInst.setAtdId(rs.getLong("atd_id"));
        actiInst.setAtdUid(rs.getString("atd_uid"));
        actiInst.setAtdEstimateTime(rs.getLong("atd_estimatetime"));
        actiInst.setAtiEndTime(rs.getTimestamp("ati_endtime"));
      }
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(rs);
      WorkflowDBConnectionManager.getInstance().close(stm,false);
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
    return actiInst;
  }

  /**
   * 根据活动实例id取得活动实例信息
   * @param workitemId 工作项id
   * @return WfActiInstance
   * @throws Exception
   */
  public WfActiInstance getWfActiInstanceInfoByWorkitemId(long workitemId)
      throws Exception{
    String sql="select b.ati_id,b.ati_state,b.ati_starttime,ati_endtime,a.atd_id,a.atd_uid,a.atd_maxtime,a.atd_estimatetime "+
        " from actidefinition a,actiinstance b,workitem c where a.atd_id=b.ati_atdid and c.wki_atiid=b.ati_id "+
        " and c.wki_id="+workitemId;
    logger.info("......query sql:"+sql);
    Connection conn=null;
    Statement stm=null;
    ResultSet rs=null;
    WfActiInstance actiInst=null;
    try{
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      stm=conn.createStatement();
      rs=stm.executeQuery(sql);

      while(rs.next()){
        actiInst=new WfActiInstance();
        actiInst.setAtiId(rs.getLong("ati_id"));
        actiInst.setAtiState(rs.getInt("ati_state"));
        actiInst.setAtiStartTime(rs.getTimestamp("ati_starttime"));
        actiInst.setAtdMaxTime(rs.getLong("atd_maxtime"));
        actiInst.setAtdId(rs.getLong("atd_id"));
        actiInst.setAtdUid(rs.getString("atd_uid"));
        actiInst.setAtdEstimateTime(rs.getLong("atd_estimatetime"));
        actiInst.setAtiEndTime(rs.getTimestamp("ati_endtime"));
      }
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(rs);
      WorkflowDBConnectionManager.getInstance().close(stm,false);
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
    return actiInst;
  }

}

⌨️ 快捷键说明

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