相關api 執行個體
基礎部分
1.建立一個流程執行個體
@Override
public Result createProcessInstance(Paramenter paramenter) {
Result result = new Result();
String processInstanceByKey=paramenter.getProcessInstanceByKey();
try {
String processInstanceId=ProcessUtils.createProcessInstance(processEngine,processInstanceByKey);
result.setResult(true);
result.setCode(ConstCode.OPERAT_SUCCESS);
result.setData(processInstanceId);
} catch (Exception e) {
logger.error("業務流程執行個體化失敗!");
logger.error(e.getMessage());
result.setResult(false);
result.setCode(ConstCode.OPERAT_FAILURE);
result.setMessage("業務流程執行個體化失敗!");
result.setError(e.getMessage());
}
return result;
}
2.查找任務
@Override
public Result createProcessInstance(Paramenter paramenter) {
Result result = new Result();
String processInstanceByKey=paramenter.getProcessInstanceByKey();
try {
String processInstanceId=ProcessUtils.createProcessInstance(processEngine,processInstanceByKey);
result.setResult(true);
result.setCode(ConstCode.OPERAT_SUCCESS);
result.setData(processInstanceId);
} catch (Exception e) {
logger.error("業務流程執行個體化失敗!");
logger.error(e.getMessage());
result.setResult(false);
result.setCode(ConstCode.OPERAT_FAILURE);
result.setMessage("業務流程執行個體化失敗!");
result.setError(e.getMessage());
}
return result;
}
3.執行處理任務
@Override
public Result completeTask(Paramenter paramenter) {
Result result = new Result();
String taskId=paramenter.getTaskId();
Object signal=paramenter.getSignal();
try {
ProcessUtils.completeTask(processEngine, taskId, signal);
result.setResult(true);
result.setCode(ConstCode.OPERAT_SUCCESS);
} catch (Exception e) {
logger.error("使用者作業處理失敗!");
logger.error(e.getMessage());
result.setResult(false);
result.setCode(ConstCode.OPERAT_FAILURE);
result.setMessage("使用者作業處理失敗!");
result.setError(e.getMessage());
}
return result;
}
4.查找曆史任務
@Override
public Result historyTaskList(Paramenter paramenter) {
Result result = new Result();
String processInstanceId=paramenter.getProcessInstanceId();
List<TaskDto> taskDtoList=null;
TaskDto taskDto=null;
try {
List<HistoricTaskInstance> list=ProcessUtils.historyTaskList(processEngine, processInstanceId);
if(list!=null){
taskDtoList=new ArrayList<TaskDto>();
for (HistoricTaskInstance historicTaskInstance : list) {
taskDto=new TaskDto();
taskDto.setId(historicTaskInstance.getId());
taskDto.setExecutionId(historicTaskInstance.getExecutionId());
taskDto.setName(historicTaskInstance.getName());
taskDto.setProcessInstanceId(historicTaskInstance.getProcessInstanceId());
taskDto.setStartTime(historicTaskInstance.getStartTime());
taskDto.setEndTime(historicTaskInstance.getEndTime());
taskDtoList.add(taskDto);
}
}
result.setResult(true);
result.setCode(ConstCode.OPERAT_SUCCESS);
result.setListData(taskDtoList);
} catch (Exception e) {
logger.error("檢視流轉日志失敗!");
logger.error(e.getMessage());
result.setResult(false);
result.setCode(ConstCode.OPERAT_FAILURE);
result.setMessage("檢視流轉日志失敗!");
result.setError(e.getMessage());
}
return result;
}
5查找曆史Activity任務
@Override
public Result historyActivityList(Paramenter paramenter) {
Result result = new Result();
String processInstanceId=paramenter.getProcessInstanceId();
List<ActivityDto> activityDtoList=null;
ActivityDto activityDto=null;
try {
List<HistoricActivityInstance> list=ProcessUtils.historyActivityList(processEngine, processInstanceId);
if(list!=null){
activityDtoList=new ArrayList<ActivityDto>();
for (HistoricActivityInstance historicActivityInstance : list) {
activityDto=new ActivityDto();
activityDto.setActivitiId(historicActivityInstance.getActivityId());
activityDto.setActivityName(historicActivityInstance.getActivityName());
activityDto.setActivityType(historicActivityInstance.getActivityType());
activityDto.setDuration(historicActivityInstance.getDurationInMillis());
activityDto.setProcessInstanceId(historicActivityInstance.getProcessInstanceId());
activityDto.setTaskId(historicActivityInstance.getTaskId());
activityDto.setStartTime(historicActivityInstance.getStartTime());
activityDto.setEndTime(historicActivityInstance.getEndTime());
activityDtoList.add(activityDto);
}
}
result.setResult(true);
result.setCode(ConstCode.OPERAT_SUCCESS);
result.setListData(activityDtoList);
} catch (Exception e) {
logger.error("檢視流轉日志失敗!");
logger.error(e.getMessage());
result.setResult(false);
result.setCode(ConstCode.OPERAT_FAILURE);
result.setMessage("檢視流轉日志失敗!");
result.setError(e.getMessage());
}
return result;
}
特殊部分
1.删除任務
@Override
public Result deleteProcessInstance(Paramenter paramenter) {
Result result = new Result();
String processInstanceId=paramenter.getProcessInstanceId();
String deleteReason=paramenter.getDeleteReason();
try {
ProcessUtils.deleteProcessInstance(processEngine, processInstanceId, deleteReason);
result.setResult(true);
result.setCode(ConstCode.OPERAT_SUCCESS);
} catch (Exception e) {
logger.error("删除業務流程執行個體失敗!");
logger.error(e.getMessage());
result.setResult(false);
result.setCode(ConstCode.OPERAT_FAILURE);
result.setMessage("删除業務流程執行個體失敗!");
result.setError(e.getMessage());
}
return result;
}
2.挂機和重新開機任務
@Override
public Result suspendAndActivateProcessInstance(Paramenter paramenter) {
Result result = new Result();
String processInstanceId=paramenter.getProcessInstanceId();
Boolean suspendOrActivate=paramenter.getSuspendOrActivate();
try {
ProcessUtils.suspendOrActivateProcessInstance(processEngine, processInstanceId, suspendOrActivate);
result.setResult(true);
result.setCode(ConstCode.OPERAT_SUCCESS);
} catch (Exception e) {
logger.error("流程的挂起或激活失敗!");
logger.error(e.getMessage());
result.setResult(false);
result.setCode(ConstCode.OPERAT_FAILURE);
result.setMessage("流程的挂起或激活失敗!");
result.setError(e.getMessage());
}
return result;
}
3.執行任務帶審批内容
@Override
public Result completeTaskDetail(Paramenter paramenter) {
Result result = new Result();
String taskId=paramenter.getTaskId();
Object signal=paramenter.getSignal();
String context=paramenter.getContext();
try {
ProcessUtils.completeTaskDetail(processEngine, taskId, signal,context);
result.setResult(true);
result.setCode(ConstCode.OPERAT_SUCCESS);
} catch (Exception e) {
logger.error("使用者作業處理失敗!");
logger.error(e.getMessage());
result.setResult(false);
result.setCode(ConstCode.OPERAT_FAILURE);
result.setMessage("使用者作業處理失敗!");
result.setError(e.getMessage());
}
return result;
}
4.查找曆史流程執行個體帶審批
@Override
public Result historyTaskListDetail(Paramenter paramenter) {
Result result = new Result();
String processInstanceId=paramenter.getProcessInstanceId();
String taskId=paramenter.getTaskId();
List<TaskDto> taskDtoList=null;
TaskDto taskDto=null;
try {
List<HistoricTaskInstance> list=ProcessUtils.historyTaskList(processEngine, processInstanceId);
if(list!=null){
taskDtoList=new ArrayList<TaskDto>();
for (HistoricTaskInstance historicTaskInstance : list) {
taskDto=new TaskDto();
taskDto.setId(historicTaskInstance.getId());
taskDto.setExecutionId(historicTaskInstance.getExecutionId());
taskDto.setName(historicTaskInstance.getName());
taskDto.setProcessInstanceId(historicTaskInstance.getProcessInstanceId());
taskDto.setStartTime(historicTaskInstance.getStartTime());
taskDto.setEndTime(historicTaskInstance.getEndTime());
String executionId=taskDto.getExecutionId();
List<HistoricVariableInstance> lists = processEngine.getHistoryService()
.createHistoricVariableInstanceQuery()//建立一個曆史的流程變量查詢
.processInstanceId(processInstanceId)
.executionId(executionId)
.variableName("context")
//.taskId(taskDto.getId())
.list();
for(HistoricVariableInstance hiv : lists){
String context=(String) hiv.getValue();
taskDto.setContext(context);
}
taskDtoList.add(taskDto);
}
}
result.setResult(true);
result.setCode(ConstCode.OPERAT_SUCCESS);
result.setListData(taskDtoList);
} catch (Exception e) {
logger.error("檢視流轉日志失敗!");
logger.error(e.getMessage());
result.setResult(false);
result.setCode(ConstCode.OPERAT_FAILURE);
result.setMessage("檢視流轉日志失敗!");
result.setError(e.getMessage());
}
return result;
}
定義工具類ProcessUtils
public class ProcessUtils {
/**
* 流程操作
*
* @param taskId
* 作業Id
* @param content
* 審批内容
*/
public static void completeTask(ProcessEngine processEngine,String taskId, Object signal) {
Map<String, Object> variables = new HashMap();
variables.put("signal", signal);
processEngine.getTaskService().complete(taskId, variables);
}
/**
* 檢視流轉日志(某一次流程的執行經曆的任務)
*
* @param processInstanceId
*/
public static List<HistoricTaskInstance> historyTaskList(ProcessEngine processEngine,String processInstanceId) {
List<HistoricTaskInstance> list = processEngine.getHistoryService().createHistoricTaskInstanceQuery()
.processInstanceId(processInstanceId)
// .finished()
.list();
return list;
}
/**
* 檢視流轉日志(某一次流程的執行經曆的活動)
*
* @param processInstanceId
*/
public static List<HistoricActivityInstance> historyActivityList(ProcessEngine processEngine,String processInstanceId) {
List<HistoricActivityInstance> list = processEngine.getHistoryService().createHistoricActivityInstanceQuery()
.processInstanceId(processInstanceId)
// .finished()
.list();
return list;
}
/**
* 判斷目前流程是否執行完 0是,1否
*/
public static String processState(ProcessEngine processEngine,String processInstanceId) {
ProcessInstance pi = processEngine.getRuntimeService().createProcessInstanceQuery().processInstanceId(processInstanceId)
.singleResult();
String flag="1";
if (pi == null) {
flag="0";
}
return flag;
}
/**
* 删除目前流程執行個體
*/
public static void deleteProcessInstance(ProcessEngine processEngine,String processInstanceId,String deleteReason) {
processEngine.getRuntimeService().deleteProcessInstance(processInstanceId, deleteReason);
}
/**挂起或激活目前流程執行個體
*
* @param processEngine
* @param processInstanceId
* @param suspendOrActivate ture:挂起,false:激活
* @return
*/
public static Boolean suspendOrActivateProcessInstance(ProcessEngine processEngine,String processInstanceId,Boolean suspendOrActivate) {
RuntimeService ru=processEngine.getRuntimeService();
if(suspendOrActivate){
//挂起流程執行個體
ru.suspendProcessInstanceById(processInstanceId);
//驗證是否挂起
return ru.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().isSuspended();
}if(!suspendOrActivate){
//激活流程執行個體
ru.activateProcessInstanceById(processInstanceId);
//驗證是否激活
return !ru.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().isSuspended();
}
return false;
}
/**
* 傳回使用者流程作業
*
* @param candidateUser
* @return
*/
public static List<Task> findTask(ProcessEngine processEngine,String candidateUser) {
List<Task> taskList = processEngine.getTaskService().createTaskQuery().taskCandidateUser(candidateUser).list();
return taskList;
}
/** 查詢 曆史任務的使用者清單 */
public static List<HistoricIdentityLink> findHistoryGroupCandidate(ProcessEngine processEngine,String processInstanceId) {
// 流程執行個體ID
List<HistoricIdentityLink> list = processEngine.getHistoryService()
.getHistoricIdentityLinksForProcessInstance(processInstanceId);
if (list != null && list.size() > ) {
for (HistoricIdentityLink identityLink : list) {
System.out.println("任務ID:" + identityLink.getTaskId());
System.out.println("使用者ID:" + identityLink.getUserId());
System.out.println("工作流角色ID:" + identityLink.getGroupId());
}
}
return list;
}
/**
* 建立一個流程執行個體task(流程作業)
*
* @throws Exception
*/
public static String createProcessInstance(ProcessEngine processEngine,String processInstanceByKey) throws Exception {
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processInstanceByKey);
return processInstance.getId();
}
/**
* 建立一個流程執行個體task(流程作業帶業務主鍵)
*
* @param businessKey業務主鍵
* @return
* @throws Exception
*/
public static String createProcessInstance(ProcessEngine processEngine,String processInstanceByKey,String businessKey) throws Exception {
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processInstanceByKey,
businessKey);
return processInstance.getId();
}
public static void deploy(ProcessEngine processEngine,String name,String bpmn,String png) throws Exception {
// 擷取倉庫服務
RepositoryService repositoryService = processEngine.getRepositoryService();
// 建立釋出配置對象
DeploymentBuilder builder = repositoryService.createDeployment();
// 設定釋出資訊
builder.name(name)// 添加部署規則的顯示别名
.addClasspathResource(bpmn)// 添加規則檔案
.addClasspathResource(png);// 添加規則圖檔
// 不添加會自動産生一個圖檔不推薦
// 完成釋出
builder.deploy();
}
public void deployZIP(ProcessEngine processEngine,String name,String zip) throws Exception {
// 擷取倉庫服務
RepositoryService repositoryService = processEngine.getRepositoryService();
// 建立釋出配置對象
DeploymentBuilder builder = repositoryService.createDeployment();
// 獲得上傳檔案的輸入流程
InputStream in = this.getClass().getClassLoader().getResourceAsStream(zip);
ZipInputStream zipInputStream = new ZipInputStream(in);
// 設定釋出資訊
builder.name(name)// 添加部署規則的顯示别名
.addZipInputStream(zipInputStream);
// 完成釋出
builder.deploy();
}
/**
* 流程操作
*
* @param taskId
* 作業Id
* @param content
* 審批内容
*/
public static void completeTaskDetail(ProcessEngine processEngine,String taskId, Object signal,String context) {
Map<String, Object> variables = new HashMap();
variables.put("context", context);
variables.put("signal", signal);
processEngine.getTaskService().complete(taskId, variables);
}
public static void main(String[] args) throws Exception {
// 部署
// deploy();
// 流程執行個體化
// String proc_inst_id=createProcessInstance();
// 目前使用者作業
// findTask("aa");
// 處理
// completeTask("c8452602-08e4-11e7-8486-dc536091e18b","11");
//historyTaskList("c4c5bfff-08e0-11e7-a7bc-dc536091e18b");
}
/* public void setVariableValues() throws Exception {
TaskService taskService = processEngine.getTaskService();
String taskId = "";
String variableName = "";
taskService.setVariable("", "", "");
}
public void getVariableValues() throws Exception {
TaskService taskService = processEngine.getTaskService();
String taskId = "";
String variableName = "";
taskService.getVariable(taskId, variableName);
}
public void setRuVariableValues() throws Exception {
RuntimeService runtimeService = processEngine.getRuntimeService();
runtimeService.setVariable("", "", "");
String taskId = "";
String variableName = "";
}
public void setPVariableValues() throws Exception {
String processDefinitionKey = "varTest";
// 建立流程變量
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("請假人", "馮小剛");
// 在啟動時設定流程變量
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey,
variables);
System.out.println("pid:" + pi.getId());
}*/
}