Skip to content

Instantly share code, notes, and snippets.

@strongme
Created March 26, 2019 15:44
Show Gist options
  • Save strongme/9d0537e084e6bc668e06111bfcecf0e2 to your computer and use it in GitHub Desktop.
Save strongme/9d0537e084e6bc668e06111bfcecf0e2 to your computer and use it in GitHub Desktop.
@Deployment(resources = {"processes/测试撤回功能.bpmn20.xml"})
public void testProcessRollback() {
ProcessInstance instance = runtimeService.startProcessInstanceByKey("test-rollback");
log.info("ProcessInstance Id : {}, Id: {}", instance.getProcessInstanceId(), instance.getProcessInstanceId());
String processInstanceId = instance.getProcessInstanceId();
//发起会议
Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).taskDefinitionKey("startMeeting").active().singleResult();
List<String> userList = Lists.newArrayList("userA", "userB", "userC");
Map<String, Object> params = Maps.newHashMap();
params.put("userList", userList);
taskService.complete(task.getId(), params);
//查找发表意见的三个任务
List<Task> tasksForSubmitOpinion = taskService.createTaskQuery().processInstanceId(processInstanceId).taskDefinitionKey("submitOpinion").active().list();
assertThat(tasksForSubmitOpinion.size()).isEqualTo(3);
List<String> exIds = tasksForSubmitOpinion.stream().map(Task::getExecutionId).collect(Collectors.toList());
//回退到发起会议
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(processInstanceId)
.moveExecutionsToSingleActivityId(exIds, "startMeeting")
.changeState();
task = taskService.createTaskQuery().processInstanceId(processInstanceId).taskDefinitionKey("startMeeting").active().singleResult();
assertThat(task).isNotNull();
//再次发起会议
taskService.complete(task.getId(), params);
//再次查询发表会议意见任务
tasksForSubmitOpinion = taskService.createTaskQuery().processInstanceId(processInstanceId).taskDefinitionKey("submitOpinion").active().list();
assertThat(tasksForSubmitOpinion.size()).isEqualTo(3);
for (int i = 0; i < tasksForSubmitOpinion.size(); i++) {
Task taskCurrent = tasksForSubmitOpinion.get(i);
Map<String, Object> paramsInner = Maps.newHashMap();
paramsInner.put("code", i);
taskService.complete(taskCurrent.getId(), paramsInner, true);
}
instance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).active().singleResult();
assertThat(instance).isNull();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment