流程工具类 ProcessUtil
com.justep.util.process.ProcessUtil 类用于在服务端处理流程,主要包括两方面:
- 控制流程的执行,如将流程进行流转、回退、重启等
- 修改执行相关信息,如执行人、流程标题等
getPIByData
getPIByData(HttpServletRequest contextRequest, String data, String process, String status, String filter)
功能:通过业务主键查询流程实例
参数:
contextRequest:当前请求对象
data:业务主键
process:目标流程
status: 流程实例状态,取值范围{"finished", "waiting", ""}
filter: 过滤条件,例如 SA_Task.sName='订单申请'
返回:
类型:List<Task>
示例:
List<Task> tasks=ProcessUtil.getPIByData(SpringWebUtil.getRequest(), vars.getString("sData1"), "/SA/wf/default/ykdm_dmsksksq", null, null);
getActiveTaskByData
getActiveTaskByData(HttpServletRequest contextRequest, String data, String process)
功能:通过业务主键获取当前活动环节的任务对象集合,如需要在后端驱动流程流转时,可使用此方法获取对应待流转的任务
参数:
contextRequest:当前请求对象
data:业务主键
process:目标流程
返回:
类型:List<Task>
示例:
List<Task> tasks=ProcessUtil.getActiveTaskByData(SpringWebUtil.getRequest(), vars.getString("sData1"),"/SA/wf/default/ykdm_dmsksksq");
deletePI
deletePI(HttpServletRequest contextRequest, String task, boolean force)
功能:根据任务标识删除流程实例
参数:
contextRequest:当前请求对象
task:任务标识
force:是否强制删除
返回:
类型:void
示例:
ProcessUtil.deletePI(SpringWebUtil.getRequest(), "taskId", true);
startProcess
startProcess(HttpServletRequest contextRequest, String process, String sData1, JSONObject formData) startProcess(HttpServletRequest contextRequest, String process, String sData1, JSONObject formData, JSONObject attrs, JSONObject vars) startProcess(HttpServletRequest contextRequest, String process, String sData1, JSONObject formData, String executor, String creator) startProcess(HttpServletRequest contextRequest, String process, String sData1, JSONObject formData, String executor, String creator, JSONObject attrs, JSONObject vars)
功能:启动流程
参数:
contextRequest:当前请求对象
process:目标流程
sData1:流程主键
formData:流程表单信息(此参数内容已废弃,请置 null)
attrs:任务属性,可以在这里设置 sData2,sData3 等任务属性的值
vars:流程变量的初始值
executor:执行人员 ID 或 FID(ID 默认获取的主岗信息)
creator:创建人员 ID 或 FID(ID 默认获取的主岗信息)
返回:
类型:ProcessResult
示例:
ProcessResult processResult=ProcessUtil.startProcess(SpringWebUtil.getRequest(), "/SA/wf/default/ykdm_dmsksksq", vars.getString("sData1"), null);
String pId=processResult.getPI();//获取流程实例ID
List<Task> tasks=processResult.getActiveTasks();//获取当前活动的任务集合
advanceProcessQuery
advanceProcessQuery(HttpServletRequest contextRequest, String task)
功能:流转查询
参数:
contextRequest:当前请求对象
task:当前任务ID
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl processControl=ProcessUtil.advanceProcessQuery(SpringWebUtil.getRequest(),"taskId");
advanceProcess
advanceProcess(HttpServletRequest contextRequest, String task, ProcessControl control)
功能:流程流转
参数:
contextRequest:当前请求对象
task:当前任务 ID
control:需要控制流程核心数据时传入,如执行人、流程标题等等,可传 null 执行默认规则
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl processControl=ProcessUtil.advanceProcessQuery(SpringWebUtil.getRequest(),"taskId");
ProcessUtil.advanceProcess(SpringWebUtil.getRequest(),"taskId",processControl);//流程流转
backProcess
backProcess(HttpServletRequest contextRequest, String task, ProcessControl control)
功能:流程回退
参数:
contextRequest:当前请求对象
task:当前任务 ID
control:需要控制流程核心数据时传入,如执行人、流程标题等等,可传 null 执行默认规则
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl backRootProcessQuery=ProcessUtil.backRootProcessQuery(SpringWebUtil.getRequest(),"taskId");//流程回退首环节查询
ProcessUtil.backProcess(SpringWebUtil.getRequest(),"taskId",backRootProcessQuery);//流程回退
backProcessQuery
backProcessQuery(HttpServletRequest contextRequest, String task)
功能:流程回退查询
参数:
contextRequest:当前请求对象
task:当前任务 ID
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl backProcessQuery=ProcessUtil.backProcessQuery(SpringWebUtil.getRequest(),"taskId");//流程回退查询
backRootProcessQuery
backRootProcessQuery(HttpServletRequest contextRequest, String task)
功能:流程回退首环节查询
参数:
contextRequest:当前请求对象
task:当前任务 ID
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl backRootProcessQuery=ProcessUtil.backRootProcessQuery(SpringWebUtil.getRequest(),"taskId");//流程回退首环节查询
abortProcessQuery
abortProcessQuery(HttpServletRequest contextRequest, String task)
功能:流程终止查询
参数:
contextRequest:当前请求对象
task:当前任务 ID
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl abortProcessQuery=ProcessUtil.abortProcessQuery(SpringWebUtil.getRequest(),"taskId");//流程终止查询
abortProcess
abortProcess(HttpServletRequest contextRequest, String task, ProcessControl control)
功能:流程终止
参数:
contextRequest:当前请求对象
task:当前任务 ID
control:需要控制流程核心数据时传入,如执行人、流程标题等等,可传 null 执行默认规则
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl abortProcessQuery=ProcessUtil.abortProcessQuery(SpringWebUtil.getRequest(),"taskId");//流程终止查询
ProcessUtil.abortProcess(SpringWebUtil.getRequest(),"taskId",abortProcessQuery);//流程终止
suspendProcessQuery
suspendProcessQuery(HttpServletRequest contextRequest, String task)
功能:流转暂停查询
参数:
contextRequest:当前请求对象
task:当前任务 ID
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl suspendProcessQuery=ProcessUtil.suspendProcessQuery(SpringWebUtil.getRequest(),"taskId");//流转暂停查询
suspendProcess
suspendProcess(HttpServletRequest contextRequest, String task, ProcessControl control)
功能:流程暂停
参数:
contextRequest:当前请求对象
task:当前任务ID
control:需要控制流程核心数据时传入,如执行人、流程标题等等,可传 null 执行默认规则
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl suspendProcessQuery=ProcessUtil.suspendProcessQuery(SpringWebUtil.getRequest(),"taskId");//流转暂停查询
ProcessUtil.suspendProcess(SpringWebUtil.getRequest(),"taskId",suspendProcessQuery);//流程暂停
transferTaskQuery
transferTaskQuery(HttpServletRequest contextRequest, String task)
功能:流转转发查询
参数:
contextRequest:当前请求对象
task:当前任务ID
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl transferTaskQuery=ProcessUtil.transferTaskQuery(SpringWebUtil.getRequest(),"taskId");//流转转发查询
transferTask
transferTask(HttpServletRequest contextRequest, String task, ProcessControl control)
功能:流程转发
参数:
contextRequest:当前请求对象
task:当前任务 ID
control:需要控制流程核心数据时传入,如执行人、流程标题等等,可传 null 执行默认规则
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl transferTaskQuery=ProcessUtil.transferTaskQuery(SpringWebUtil.getRequest(),"taskId");//流转转发查询
ProcessUtil.transferTask(SpringWebUtil.getRequest(),"taskId",transferTaskQuery);//流程转发
specialProcessQuery
specialProcessQuery(HttpServletRequest contextRequest, String task)
功能:流转特送查询
参数:
contextRequest:当前请求对象
task:当前任务 ID
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl specialProcessQuery=ProcessUtil.specialProcessQuery(SpringWebUtil.getRequest(),"taskId");//流转特送查询
specialProcess
specialProcess(HttpServletRequest contextRequest, String task, ProcessControl control)
功能:流程特送
参数:
contextRequest:当前请求对象
task:当前任务 ID
control:需要控制流程核心数据时传入,如执行人、流程标题等等,可传 null 执行默认规则
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl specialProcessQuery=ProcessUtil.specialProcessQuery(SpringWebUtil.getRequest(),"taskId");//流转特送查询
ProcessUtil.specialProcess(SpringWebUtil.getRequest(),"taskId",specialProcessQuery);//流程特送
restartProcessQuery
restartProcessQuery(HttpServletRequest contextRequest, String task, String mode)
功能:流转重启查询,流程结束后可重启
参数:
contextRequest:当前请求对象
task:当前任务 ID
mode:重启模式,可传入 lastActivityExecutor 或"",分别表示仅允许最后环节执行者重启和允许所有人重启
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl restartProcessQuery=ProcessUtil.restartProcessQuery(SpringWebUtil.getRequest(),"taskId","");//流转重启查询,流程结束后可重启
restartProcess
restartProcess(HttpServletRequest contextRequest, String task, String mode, ProcessControl control)
功能:流程重启,流程结束后可重启
参数:
contextRequest:当前请求对象
task:当前任务 ID
mode:重启模式,可传入 lastActivityExecutor 或"",分别表示仅允许最后环节执行者重启和允许所有人重启
control:需要控制流程核心数据时传入,如执行人、流程标题等等,可传 null 执行默认规则
返回:
类型:ProcessControl,流程的核心数据,如执行人、流程标题等等
示例:
ProcessControl restartProcessQuery=ProcessUtil.restartProcessQuery(SpringWebUtil.getRequest(),"taskId","");//流转重启查询,流程结束后可重启
ProcessUtil.restartProcess(SpringWebUtil.getRequest(),"taskId","",restartProcessQuery);//流程重启,流程结束后可重启
resumeProcess
resumeProcess(HttpServletRequest contextRequest, String task)
功能:流程唤醒,流程暂停后可唤醒
参数:
contextRequest:当前请求对象
task:当前任务 ID
返回:
类型:void
示例:
ProcessUtil.resumeProcess(SpringWebUtil.getRequest(),"taskId");//流程唤醒,流程暂停后可唤醒
withdrawTask
withdrawTask(HttpServletRequest contextRequest, String task)
功能:回收流程
参数:
contextRequest:当前请求对象
task:当前任务 ID
返回:
类型:void
示例:
ProcessUtil.withdrawTask(SpringWebUtil.getRequest(),"taskId");//回收流程
参考"后端新增流程数据并启动流程"完成示例:
package main.service.impl;
import com.justep.util.*;
import com.justep.context.RequestContext;
import com.justep.opm.PersonMember;
import com.justep.util.process.ProcessControl;
import com.justep.util.process.ProcessResult;
import com.justep.util.process.ProcessUtil;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import com.justep.cloud.data.*;
import main.entity.*;
import main.service.*;
import main.mapper.*;
import main.vo.*;
@Service("main-ProcessUserService")
public class ProcessUserServiceImpl implements ProcessService {
@Autowired
FlowdataMapper flowdataMapper;
//系统生成代码,请不要修改或删除 <actionStart:advance>
public String advance() throws Exception {
HttpServletRequest request = SpringWebUtil.getRequest();
//获取当前登录人
RequestContext rc = ContextUtil.getRequestContext(request);
PersonMember personMember = rc.getCurrentPersonMember(request);
//创建流程表单内容
String mainId = UUID.randomUUID().toString().replace("-","");
String num=String.valueOf(System.currentTimeMillis());
Flowdata flowdata=new Flowdata();
flowdata.setFid(mainId);
flowdata.setName("后端启动流程"+num);
flowdata.setNo(num);
flowdata.setDescription("后端启动流程");
//设置创建人信息
if(personMember!=null){
flowdata.setCreatePersonID(StringUtils.defaultIfBlank(personMember.getFcode(), "system"));
flowdata.setCreatePerson(StringUtils.defaultIfBlank(personMember.getName(), "system"));
}
//新增流程表单数据入库
int res=flowdataMapper.insert(flowdata);
if(res<1){
return "error";
}
//启动流程并流转
ProcessResult result = ProcessUtil.startProcess(request,"/SA/wf/default/react_houduanfqlc_yx",mainId,null);
ProcessControl processcontrol=ProcessUtil.advanceProcessQuery(request,result.getActiveTasks().get(0).getId());
ProcessUtil.advanceProcess(request,result.getActiveTasks().get(0).getId(),processcontrol);
return "ok";
}
//系统生成代码,请不要修改或删除 <actionEnd:advance>
}