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 + -
显示快捷键?