wfworkitemprocesstimedao.java

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

JAVA
286
字号
package cn.com.iaspec.workflow.engine.dao;
import java.sql.*;
import java.util.*;
import org.apache.log4j.*;
import cn.com.iaspec.workflow.db.*;
import cn.com.iaspec.workflow.*;
import cn.com.iaspec.workflow.util.*;
import cn.com.iaspec.workflow.vo.db.*;
import java.text.SimpleDateFormat;

public class WfWorkitemProcessTimeDAO{
  private static Logger logger=Logger.getLogger(WfWorkitemProcessTimeDAO.class);
  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  public WfWorkitemProcessTimeDAO(){

  }

  public List query(WfWorkitemProcessTime pro)
      throws SQLException{
    Connection conn=null;
    Statement stm=null;
    try{
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      stm=conn.createStatement();
      String sql=" select * from wf_workitem_process_time ";
      StringBuffer sbWhere=getQueryString(pro);
      sql=sql+sbWhere.toString();
      logger.info("......query sql:"+sql);
      ResultSet rs=stm.executeQuery(sql);
      List list=this.resultsetToLaWorkitemProcessTime(rs);
      return list;
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(stm,false);
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
  }

  /**
   * 将list存贮的LaWorkitemProcessTime信息,首先进行检查,如果数据库中不存在该记录,则往表LaWorkitemProcessTime插入记录
   * @param list List
   * @throws Exception
   */
  public void insert(List list)
      throws Exception{
    logger.info("begin insert(List list)...");
    if(list==null){
      return;
    }
    for(int i=0;i<list.size();i++){
      WfWorkitemProcessTime pro=(WfWorkitemProcessTime)list.get(i);
      //检查是否已经插入记录
      if(!this.checkIfExist(pro.getWorkitemId())){
        insert(pro);
      }
    }
  }

  /**
   *
   * @param list List
   * @throws Exception
   */
  public void insertByIds(List list)
      throws Exception{
    logger.info("begin insertByIds...");
    if(list==null){
      return;
    }
    for(int i=0;i<list.size();i++){
      WfWorkitemProcessTime pro=(WfWorkitemProcessTime)list.get(i);
      //检查是否已经插入记录
      if(!this.checkIfExist(pro.getWorkitemId())){
        pro=getWorkitemTimeInfo(pro);
        this.insert(pro);
      }
    }
  }

  /**
   *取得工作项办理时限信息
   * @param list List
   * @throws Exception
   */
  public WfWorkitemProcessTime getWorkitemTimeInfo(WfWorkitemProcessTime pro)
      throws Exception{
    logger.info("begin getWorkitemTimeInfo...");
    Connection conn=null;
    Statement stm=null;
    ResultSet rs=null;
    WfWorkitemProcessTime proTemp=null;
    try{
      if(pro!=null){
        conn=WorkflowDBConnectionManager.getInstance().getConnection();
        stm=conn.createStatement();
        String sql=" select a.wki_id,c.atd_estimatetime From workitem a,actiinstance b,actidefinition c "+
            " Where a.wki_atiid=b.ati_id And c.atd_id = b.ati_atdid And a.wki_id="+
            pro.getWorkitemId();
        logger.info("......query sql:"+sql);
        rs=stm.executeQuery(sql);

        if(rs.next()){
          proTemp=new WfWorkitemProcessTime();
          proTemp.setDayTimeLimit(rs.getLong("atd_estimatetime"));
          //转换工作流引擎时间为工作日时间
          proTemp.setTimeLimit(ConvertWorkitemDatetime.getLocalWorkDatetime(rs.
              getLong("atd_estimatetime")));
          proTemp.setTimeLeft(proTemp.getTimeLimit());
          proTemp.setTimeUsed(0);
          proTemp.setWorkitemId(pro.getWorkitemId());
        }
      }
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(rs);
      WorkflowDBConnectionManager.getInstance().close(stm,false);
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
    return proTemp;
  }

  /**
   * 往表LaWorkitemProcessTime插入记录
   * @param pro LaWorkitemProcessTime
   * @throws Exception
   */
  public void insert(WfWorkitemProcessTime pro)
      throws Exception{
    logger.info("begin insert(LaWorkitemProcessTime pro)...");
    Connection conn=null;
    Statement stm=null;
    try{
      if(pro==null){
        return;
      }
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      stm=conn.createStatement();
      StringBuffer sbInsertValue=this.getStrInsertValues(pro);
      String sql=" insert into wf_workitem_process_time ("+this.getStrFields()+
          ") "+" values ("+sbInsertValue.toString()+")";
      logger.info("......insert sql:"+sql);
      stm.execute(sql);
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(stm,false);
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
  }

  /**
   * 检查是否在数据库中是否已经存在记录
   * @param fromItemId long
   * @throws SQLException
   * @return boolean
   */
  public boolean checkIfExist(long workitemId)
      throws SQLException{
    WfWorkitemProcessTime pro=new WfWorkitemProcessTime();
    pro.setWorkitemId(workitemId);
    List list=this.query(pro);
    if(list!=null&&list.size()>0){
      return true;
    }
    else{
      return false;
    }
  }

  private List resultsetToLaWorkitemProcessTime(ResultSet rs)
      throws SQLException{
    List list=new ArrayList();
    while(rs.next()){
      WfWorkitemProcessTime pro=new WfWorkitemProcessTime();
      pro.setTimeLeft(rs.getLong("time_left"));
      pro.setTimeLimit(rs.getLong("time_limit"));
      pro.setTimeUsed(rs.getLong("time_used"));
      pro.setWorkitemId(rs.getLong("workitem_id"));
      list.add(pro);
    }
    return list;
  }

  /**
   * 取得查询条件
   * @param pro LaWorkitemProcessTime
   * @return StringBuffer
   */
  private StringBuffer getQueryString(WfWorkitemProcessTime pro){
    StringBuffer sb=new StringBuffer();
    if(pro!=null){
      if(pro.getDayTimeLimit()!=WorkflowConstant.LONG_INIT_VALUE){
        sb.append(" day_time_limit = "+pro.getDayTimeLimit()+" ");
        sb.append(" and ");
      }
      if(pro.getTimeLeft()!=WorkflowConstant.LONG_INIT_VALUE){
        sb.append(" time_left = "+pro.getTimeLeft()+" ");
        sb.append(" and ");
      }
      if(pro.getTimeLimit()!=WorkflowConstant.LONG_INIT_VALUE){
        sb.append(" time_limit = "+pro.getTimeLimit()+" ");
        sb.append(" and ");
      }
      if(pro.getTimeUsed()!=WorkflowConstant.LONG_INIT_VALUE){
        sb.append(" time_used = "+pro.getTimeUsed()+" ");
        sb.append(" and ");
      }
      if(pro.getWorkitemId()!=WorkflowConstant.LONG_INIT_VALUE){
        sb.append(" workitem_id = "+pro.getWorkitemId()+" ");
        sb.append(" and ");
      }
    }
    if(sb.length()>0){
      //增加查询条件关键字
      sb.insert(0," where ");
      //去除最后一个" AND "操作符
      sb.delete(sb.length()-5,sb.length());
    }
    return sb;
  }

  /**
   * 得到本表内所有字段名,以","分开
   * @throws Exception
   * @return String
   */
  private String getStrFields()
      throws Exception{
    return "day_time_limit,time_left,time_limit,time_used,workitem_id";
  }

  /**
   * 根据info取得insert语句
   * @param info LaProcessCaseInfo
   * @throws Exception
   * @return StringBuffer
   */
  private StringBuffer getStrInsertValues(WfWorkitemProcessTime pro)
      throws Exception{
    StringBuffer sbSQL=new StringBuffer();
    if(pro.getDayTimeLimit()!=WorkflowConstant.LONG_INIT_VALUE){
      sbSQL.append(pro.getDayTimeLimit());
      sbSQL.append(",");
    }
    else{
      sbSQL.append("null");
      sbSQL.append(",");
    }
    if(pro.getTimeLeft()!=WorkflowConstant.LONG_INIT_VALUE){
      sbSQL.append(pro.getTimeLeft());
      sbSQL.append(",");
    }
    else{
      sbSQL.append("null");
      sbSQL.append(",");
    }
    if(pro.getTimeLimit()!=WorkflowConstant.LONG_INIT_VALUE){
      sbSQL.append(pro.getTimeLimit());
      sbSQL.append(",");
    }
    else{
      sbSQL.append("null");
      sbSQL.append(",");
    }
    if(pro.getTimeUsed()!=WorkflowConstant.LONG_INIT_VALUE){
      sbSQL.append(pro.getTimeUsed());
      sbSQL.append(",");
    }
    else{
      sbSQL.append("null");
      sbSQL.append(",");
    }
    if(pro.getWorkitemId()!=WorkflowConstant.LONG_INIT_VALUE){
      sbSQL.append(pro.getWorkitemId());
      sbSQL.append(",");
    }
    else{
      sbSQL.append("null");
      sbSQL.append(",");
    }
    //删除最后一个逗号
    sbSQL.delete(sbSQL.length()-1,sbSQL.length());
    return sbSQL;
  }

}

⌨️ 快捷键说明

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