timelimitcontrol.java

来自「公司自己开发的工作流引擎」· Java 代码 · 共 394 行 · 第 1/2 页

JAVA
394
字号
package cn.com.iaspec.workflow.engine.business;

import cn.com.iaspec.workflow.vo.db.WfProcInstanceExt;
import cn.com.iaspec.workflow.engine.dao.WfProcInstanceExtDAO;

import cn.com.iaspec.workflow.engine.dao.ProcessWorkflowDAO;
import cn.com.iaspec.workflow.vo.db.WfProcInstance;
import cn.com.iaspec.workflow.util.TimeUtil;
import cn.com.iaspec.workflow.WorkflowConstant;
import java.util.Date;
import cn.com.iaspec.workflow.exception.WorkflowException;
import cn.com.iaspec.workflow.vo.db.WfActiInstance;
import cn.com.iaspec.workflow.vo.db.WfActInstanceExt;
import cn.com.iaspec.workflow.engine.dao.WfActInstanceExtDAO;
import java.util.List;
import cn.com.iaspec.workflow.vo.db.WfWorkItemRel;
import cn.com.iaspec.workflow.vo.workflow.Activity;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.log4j.Logger;
import cn.com.iaspec.workflow.util.ConvertWorkitemDatetime;

/**
 * <p>Title: </p>
 *
 * <p>Description:时限控制</p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: iASPEC Technologies</p>
 *
 * @author xiesonglin
 * @version 1.5
 */
public class TimeLimitControl{
  private static Logger logger=Logger.getLogger(ProcessWorkFlow.class);
  public TimeLimitControl(){
  }

  /**
   * 更新流程实例的办理时限
   * @param procInstanceId 流程实例
   * @param timeLimit double
   * @param timeUnitType String
   */
  public void updateProcessTimeLimitInfo(long procInstanceId,double timeLimit,
      String timeUnitType)
      throws Exception{
    ProcessWorkflowDAO procWfDAO=new ProcessWorkflowDAO();

    //取得流程实例信息
    WfProcInstance procInstance=procWfDAO.getWfProcInstanceInfo(procInstanceId);
    if(procInstance==null){
      throw new WorkflowException("找不到流程实例信息。");
    }
    TimeUtil timeUtil=new TimeUtil();
    long maxTime=0;
    long warningTime=0;
    Date maxTimeOut=null;
    Date warningTimeOut=null;
    long passTime=0;
    //时间单位为工作日
    if(WorkflowConstant.TIMEUNIT_TYPE_WORKDAY.equals(timeUnitType)){
      maxTime=timeUtil.getWorkday(timeLimit);
      maxTimeOut=timeUtil.getWorkdayAnticipateDate(procInstance.getPriStartTime(),
          maxTime);
      warningTime=procInstance.getPrdEstimateTime();
      warningTimeOut=timeUtil.getWorkdayAnticipateDate(procInstance.
          getPriStartTime(),warningTime);
      passTime=timeUtil.getWorkdayPassTime(procInstance.getPriStartTime(),
          new java.util.Date());
    }
    //时间单位为自然日
    else if(WorkflowConstant.TIMEUNIT_TYPE_NATUREDAY.equals(timeUnitType)){
      maxTime=timeUtil.getNatureday(timeLimit);
      maxTimeOut=timeUtil.getNaturedayAnticipateDate(procInstance.
          getPriStartTime(),maxTime);
      warningTime=procInstance.getPrdEstimateTime();
      warningTimeOut=timeUtil.getNaturedayAnticipateDate(procInstance.
          getPriStartTime(),warningTime);
      passTime=timeUtil.getNaturedayPassTime(procInstance.getPriStartTime(),
          new java.util.Date());
    }

    WfProcInstanceExt proInstanceExt=new WfProcInstanceExt();
    proInstanceExt.setProcInstanceId(procInstanceId);
    //设置最长时间(办理时限)
    proInstanceExt.setProcMaxTime(maxTime);
    //设置办理时限超时时间
    proInstanceExt.setProcMaxTimeOut(maxTimeOut);
    //设置期望时间(提醒时限)
    proInstanceExt.setProcWarningTime(warningTime);
    //设置提醒时间超时时间
    proInstanceExt.setProcWarningTimeOut(warningTimeOut);
    //设置时限单位
    proInstanceExt.setProcTimeUnitType(timeUnitType);
    //设置已用时间
    proInstanceExt.setProcPassTime(passTime);

    WfProcInstanceExtDAO extDAO=new WfProcInstanceExtDAO();
    //判断是否已经插入记录
    if(extDAO.getWfProcInstanceExt(procInstanceId)!=null){
      //更新
      extDAO.updateProceInstanceExt(proInstanceExt);
    }
    else{
      //插入
      extDAO.insertProceInstanceExt(proInstanceExt);
    }
  }

  /**
   * 插入流程办理时限信息
   * @param procInstanceId 流程实例
   */
  public void insertProcessTimeLimitInfo(long procInstanceId)
      throws Exception{
    ProcessWorkflowDAO procWfDAO=new ProcessWorkflowDAO();
    //取得流程实例信息
    WfProcInstance procInstance=procWfDAO.getWfProcInstanceInfo(procInstanceId);
    if(procInstance!=null){
      TimeUtil timeUtil=new TimeUtil();
      WfProcInstanceExt proInstanceExt=new WfProcInstanceExt();
      proInstanceExt.setProcInstanceId(procInstanceId);
      //设置最长时间(办理时限)
      if(procInstance.getPrdMaxTime()!=0){
        proInstanceExt.setProcMaxTime(procInstance.getPrdMaxTime());
        //设置办理时限超时时间,流程设置中的最长时间(办理时限)默认时间单位为"工作日"
        proInstanceExt.setProcMaxTimeOut(timeUtil.getWorkdayAnticipateDate(
            procInstance.getPriStartTime(),procInstance.getPrdMaxTime()));
      }
      //设置期望时间(提醒时限)
      if(procInstance.getPrdEstimateTime()!=0){
        proInstanceExt.setProcWarningTime(procInstance.getPrdEstimateTime());
        //设置提醒时间超时时间,流程设置中的期望时间(提醒时限)默认时间单位为"工作日"
        proInstanceExt.setProcWarningTimeOut(timeUtil.getWorkdayAnticipateDate(
            procInstance.getPriStartTime(),procInstance.getPrdEstimateTime()));
      }
      //设置时限单位
      proInstanceExt.setProcTimeUnitType(WorkflowConstant.TIMEUNIT_TYPE_WORKDAY);
      proInstanceExt.setProcPassTime(0);

      //插入信息
      WfProcInstanceExtDAO extDAO=new WfProcInstanceExtDAO();
      System.out.println("-------debug1");
      extDAO.insertProceInstanceExt(proInstanceExt);
      System.out.println("-------debug2");
    }
  }

  /**
   * 更新活动实例的办理时限
   * @param actiInstanceId 活动实例id
   * @param timeLimit long
   * @param timeUnitType String
   */
  public void updateActivityInstanceTimeLimitInfo(long actiInstanceId,
      long timeLimit,String timeUnitType)
      throws Exception{
    ProcessWorkflowDAO procWfDAO=new ProcessWorkflowDAO();

    //取得活动实例信息
    WfActiInstance actiInstance=procWfDAO.getWfActiInstanceInfo(actiInstanceId);
    if(actiInstance==null){
      throw new WorkflowException("找不到活动实例信息。");
    }
    TimeUtil timeUtil=new TimeUtil();
    long maxTime=0;
    long warningTime=0;
    Date maxTimeOut=null;
    Date warningTimeOut=null;
    long passTime=0;
    //时间单位为工作日
    if(WorkflowConstant.TIMEUNIT_TYPE_WORKDAY.equals(timeUnitType)){
      maxTime=timeLimit;
      maxTimeOut=timeUtil.getWorkdayAnticipateDate(actiInstance.getAtiStartTime(),
          maxTime);
      warningTime=ConvertWorkitemDatetime.getLocalWorkDatetime(actiInstance.getAtdEstimateTime());
      warningTimeOut=timeUtil.getWorkdayAnticipateDate(actiInstance.
          getAtiStartTime(),warningTime);
      passTime=timeUtil.getWorkdayPassTime(actiInstance.getAtiStartTime(),
          new java.util.Date());
    }
    //时间单位为自然日
    else if(WorkflowConstant.TIMEUNIT_TYPE_NATUREDAY.equals(timeUnitType)){
      maxTime=timeLimit;
      maxTimeOut=timeUtil.getNaturedayAnticipateDate(actiInstance.
          getAtiStartTime(),maxTime);
      warningTime=actiInstance.getAtdEstimateTime();
      warningTimeOut=timeUtil.getNaturedayAnticipateDate(actiInstance.
          getAtiStartTime(),warningTime);
      passTime=timeUtil.getNaturedayPassTime(actiInstance.getAtiStartTime(),
          new java.util.Date());
    }

⌨️ 快捷键说明

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