public void abort()

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);

            }
        }

    }