caseworkflowhelper.java
来自「公司自己开发的工作流引擎」· Java 代码 · 共 457 行 · 第 1/2 页
JAVA
457 行
package cn.com.iaspec.workflow.helper;
import java.util.*;
import javax.servlet.http.*;
import org.apache.log4j.*;
import cn.com.iaspec.workflow.engine.business.*;
import cn.com.iaspec.workflow.engine.ejb.*;
import cn.com.iaspec.workflow.exception.*;
import cn.com.iaspec.workflow.util.*;
import cn.com.iaspec.workflow.vo.db.*;
import cn.com.iaspec.workflow.vo.workflow.*;
import cn.com.iaspec.workflow.organize.ejb.OrganizationInfoEJB;
/**
*
* <p>Title: 工作流向业务系统提供的接口助手类</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: IASPEC Technologies</p>
* @author xiesonglin
* @version 1.0
*/
public class CaseWorkflowHelper{
private UserInfo userInfo;
private static Logger logger=Logger.getLogger(CaseWorkflowHelper.class);
public CaseWorkflowHelper(UserInfo user){
this.userInfo=user;
}
public void dealWithWorkflow(HttpServletRequest request,String businessId)
throws Exception{
dealWithWorkflow(request,businessId,null);
}
/**
* 提交处理工作流。首先从request取得参数信息,根据参数保存工作流数据,提交工作项,指定参与者,往工作流表与业务的关联信息表中插入数据。
* @param request HttpServletRequest http请求
* @param businessId String 业务id
*/
public void dealWithWorkflow(HttpServletRequest request,String businessId,
HashMap varParamDataMap)
throws Exception{
logger.info("begin dealWithWorkflow request...");
long startTime=System.currentTimeMillis();
//取得工作项id
String workItemId=request.getParameter("wf_workitem_id");
if(workItemId==null||workItemId.equals("")){
throw new WorkItemEmptyException("工作项id为空");
}
//取得项目id
String projectId=request.getParameter("wf_project_id")==null?"0":
request.getParameter("wf_project_id");
//取得父流程实例id
String parentProInstId=request.getParameter("wf_parent_process_instance_id")==null?
"0":request.getParameter("wf_parent_process_instance_id");
//取得辅助子流程标识
String aidSubflowTag=request.getParameter("wf_aid_subflow_tag")==null?"0":
request.getParameter("wf_aid_subflow_tag");
//取得当前及下一活动信息
WorkflowHelper helper=new WorkflowHelper();
NextActivityInfo nextActInfo=helper.getNextActivityInfo(userInfo,
Long.parseLong(workItemId));
//取得参与者
ParseRquestParameter parseParam=new ParseRquestParameter();
List actParticipator=parseParam.getActivityParticipator(request,nextActInfo);
//取得活动变量
ActivityVariable[] actVar=parseParam.getActivityVariable(request,
varParamDataMap);
//提交处理工作流
WorkflowEJBHandle handle=new WorkflowEJBHandle();
EngineEJB ejb=handle.getEngineEJB();
ejb.processWorkflow(Long.parseLong(workItemId),businessId,
Long.parseLong(projectId),actVar,actParticipator,nextActInfo,userInfo,
parentProInstId,aidSubflowTag);
logger.info("Execution dealWithWorkflow time: "+(System.currentTimeMillis()-
startTime)+" ms.");
}
public void dealWithWorkflow(WorkflowProcessInfo wfProInfo,String businessId)
throws Exception{
logger.info("begin dealWithWorkflow wfProInfo...");
long startTime=System.currentTimeMillis();
//取得工作项id
String workItemId=wfProInfo.getWorkitemId();
if(workItemId==null||workItemId.equals("")){
throw new WorkItemEmptyException("工作项id为空");
}
//取得项目id
String projectId=wfProInfo.getProjectId();
//取得父流程实例id
String parentProInstId=wfProInfo.getParentProInstId();
//取得辅助子流程标识
String aidSubflowTag=wfProInfo.getAidSubflowTag();
//取得当前及下一活动信息
NextActivityInfo nextActInfo=wfProInfo.getNextActInfo();
//取得参与者
List actParticipator=wfProInfo.getActParticipator();
//取得活动变量
ActivityVariable[] actVar=wfProInfo.getActVar();
//将varParamDataMap中的参数值更新到ActivityVariable中
ParseRquestParameter parseRequest=new ParseRquestParameter();
actVar=parseRequest.getActivityVariableFromParamDataMap(actVar,
wfProInfo.getVarParamDataMap());
//提交处理工作流
WorkflowEJBHandle handle=new WorkflowEJBHandle();
EngineEJB ejb=handle.getEngineEJB();
ejb.processWorkflow(Long.parseLong(workItemId),businessId,
Long.parseLong(projectId),actVar,actParticipator,nextActInfo,userInfo,
parentProInstId,aidSubflowTag);
logger.info("Execution dealWithWorkflow time: "+(System.currentTimeMillis()-
startTime)+" ms.");
//dealWithWorkflow(wfProInfo.getRequest(),businessId,wfProInfo.getVarParamDataMap());
}
/**
* 系列案提交处理工作流。首先保存第一条记录,然后打开另外一个线程,让该线程继续处理其他记录,接着将第一记录处理结果返回页面。
* @param request HttpServletRequest http请求
* @param registerIds String[] 多个案件登记号
*/
public void processSeriesCase(HttpServletRequest request,String[] registerIds)
throws Exception{
logger.info("begin processSeriesCase...");
long startTime=System.currentTimeMillis();
if(registerIds!=null&®isterIds.length>0){
//保存第一条记录
this.dealWithWorkflow(request,registerIds[0]);
//创建线程保存其他记录
if(registerIds.length>1){
HttpSession session=request.getSession(false);
UserInfo userInfo=(UserInfo)session.getAttribute(FlowWebKeys.
USER_SESSION);
String workitemId=request.getParameter("work_item_id");
WorkflowHelper helper=new WorkflowHelper();
NextActivityInfo nextActInfo=helper.getNextActivityInfo(userInfo,
Long.parseLong(workitemId));
ParseRquestParameter parseParam=new ParseRquestParameter();
List actParticipator=parseParam.getActivityParticipator(request,
nextActInfo);
//取得活动变量
ActivityVariable[] actVar=parseParam.getActivityVariable(request);
SeriesCaseWorkflowThread thread1=new SeriesCaseWorkflowThread(
nextActInfo,actParticipator,actVar,userInfo,registerIds);
thread1.start();
}
}
logger.info("Execution processSeriesCase time: "+(System.currentTimeMillis()-
startTime)+" ms.");
}
/**
* 根据流程名称启动辅助子流程
* @param proName String 辅助子流程名称
* @param workItemId String 当前工作项id
* @param proInstanceId String 当前工作流实例id
* @param registerId String 申诉登记id
*/
public void startAssistantWorkflow(String proName,String workItemId,
String proInstanceId,String registerId){
}
/**
* 根据活动名称调用api取得当前用户的待办事项,并将活动名称不等于“actName”的工作项过滤
* @param userinfo UserInfo
* @param actName String
* @return List 返回TaskCase组成的list
*/
public List getSplitCaseInfoByName(UserInfo userinfo,String actName){
SplitCaseInfoControl splitCaseInfo=new SplitCaseInfoControl();
List li=null;
try{
li=splitCaseInfo.getSplitCaseInfoByName(userinfo,actName);
}
catch(Exception e){
e.printStackTrace();
}
return li;
}
/**
* 批量分案(移交)处理
* @param list List 需要批量处理的案件信息list,由BatchCaseInfo组成
* @param nextActName 下一活动的名称
* @param userInfo 用户信息
*/
public void processBatchCase(List list,String nextActName,UserInfo userInfo)
throws Exception{
//批量分案处理
if(list!=null&&list.size()>0){
WorkflowEJBHandle handle=new WorkflowEJBHandle();
EngineEJB ejb=handle.getEngineEJB();
if(list.size()==1){
ejb.processBatchCase(list,nextActName,userInfo);
}
else{
List newList=new ArrayList();
newList.add(list.get(0));
ejb.processBatchCase(newList,nextActName,userInfo);
ProcessBatchCaseThread thread1=new ProcessBatchCaseThread(list,
nextActName,userInfo);
thread1.start();
}
}
}
/**
* 取得指定案件的在办工作项
* @param registerId String 申诉登记号
* @return List 返回由WorkItem组成的List,workItem信息包括工作项id,活动名称、活动实例id、活动定义id、流程定义id,流程实例id。
*/
public List getCaseWorkingItem(String registerId){
return null;
}
/**
* 取得当前工作项的信息
* @param userinfo UserInfo
* @param request HttpServletRequest http请求
* @return NextActivityInfo
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?