in core/src/main/java/com/alibaba/smart/framework/engine/service/command/impl/DefaultProcessCommandService.java [155:193]
public void abort(String processInstanceId, Map<String, Object> request) {
ProcessInstance processInstance = processInstanceStorage.findOne(processInstanceId,processEngineConfiguration );
processInstance.setStatus(InstanceStatus.aborted);
String reason = null;
if (null != request){
reason = ObjectUtil.obj2Str(request.get(RequestMapSpecialKeyConstant.PROCESS_INSTANCE_ABORT_REASON)) ;
}
processInstance.setReason(reason);
processInstanceStorage.update(processInstance, processEngineConfiguration);
List<ExecutionInstance> executionInstanceList = executionInstanceStorage.findActiveExecution(processInstanceId, processEngineConfiguration);
if(null != executionInstanceList){
for (ExecutionInstance executionInstance : executionInstanceList) {
//TUNE 有点违反在最后去写 DB 的原则。 不过由于这个是终态了,应该不会产生问题。
MarkDoneUtil.markDoneExecutionInstance(executionInstance,executionInstanceStorage,
processEngineConfiguration);
}
}
TaskInstanceQueryParam taskInstanceQueryParam = new TaskInstanceQueryParam();
List<String> processInstanceIdList = new ArrayList<String>(2);
processInstanceIdList.add(processInstanceId);
taskInstanceQueryParam.setProcessInstanceIdList(processInstanceIdList);
List<TaskInstance> taskInstanceList = taskInstanceStorage.findTaskList(taskInstanceQueryParam,processEngineConfiguration );
if(null!=taskInstanceList){
for (TaskInstance taskInstance : taskInstanceList) {
if(TaskInstanceConstant.COMPLETED.equals(taskInstance.getStatus()) || TaskInstanceConstant.CANCELED.equals(taskInstance.getStatus())){
continue;
}
MarkDoneUtil.markDoneTaskInstance(taskInstance, TaskInstanceConstant.ABORTED,TaskInstanceConstant.PENDING, request,
taskInstanceStorage, processEngineConfiguration);
}
}
}