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