update - 重新利用扩展的任务表来记录状态

This commit is contained in:
wangli 2024-01-05 11:05:29 +08:00
parent 3f00bcaa2a
commit a4354094cf
9 changed files with 26 additions and 11 deletions

View File

@ -67,7 +67,7 @@ public class CustomApproveTaskCmd implements Command<Void>, Serializable {
batchAddAttachment(commandContext, task.getProcessInstanceId(), taskId, attachmentList, approver);
((TaskEntity) task).setTransientVariable(TASK_COMPLETE_OPERATION_TYPE, APPROVED.getStatus());
((TaskEntity) task).setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + taskId, APPROVED.getStatus());
if (StringUtils.hasLength(task.getExecutionId())) {
// 正常完成流程任务审批通过

View File

@ -91,7 +91,7 @@ public class CustomBizSpecifyAssigneeToTaskCmd implements Command<Boolean>, Seri
});
taskService.setAssignee(task.getId(), HIDDEN_ASSIGNEE_ID);
((TaskEntity) task).setTransientVariable(TASK_COMPLETE_OPERATION_TYPE, DELETED.getStatus());
((TaskEntity) task).setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + task.getId(), DELETED.getStatus());
CustomTaskHelper.deleteMultiTask(commandContext, (TaskEntity) task);
}

View File

@ -24,7 +24,6 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_TENANT
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_USER_ID;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_USER_NAME;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_TYPE_CANCEL;
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_COMPLETE_OPERATION_TYPE;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.ABORTED;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.CANCELLED;
import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS;
@ -108,7 +107,8 @@ public class CustomCancelProcessInstanceCmd implements Command<Void>, Serializab
// 添加自定义的节点,用于展示最后的操作
Task task = createVirtualTask(commandContext, extAxHiTaskInstService, processInstanceId,
"发起人撤销", CANCEL_ID, reason, initiator.buildAssigneeId(), CANCELLED.getStatus());
runtimeService.setVariable(task.getProcessInstanceId(), TASK_COMPLETE_OPERATION_TYPE + task.getId(), CANCELLED);
// runtimeService.setVariable(task.getProcessInstanceId(), TASK_COMPLETE_OPERATION_TYPE + task.getId()
// , CANCELLED);
return null;
}
}

View File

@ -89,7 +89,7 @@ public class CustomCountersignUserTaskCmd implements Command<Void>, Serializable
CustomTaskHelper.batchAddAttachment(commandContext, task.getProcessInstanceId(), task.getId(), attachmentList,
originTaskAssignee);
CustomTaskHelper.deleteMultiTask(commandContext, (TaskEntity) task);
((TaskEntity) task).setTransientVariable(TASK_COMPLETE_OPERATION_TYPE, COUNTERSIGN.getStatus());
((TaskEntity) task).setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + task.getId(), COUNTERSIGN.getStatus());
return null;
}

View File

@ -61,10 +61,11 @@ public class CustomRejectionTaskCmd implements Command<Void>, Serializable {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
validTask((TaskEntity) task, approver);
((TaskEntity) task).setTransientVariable(TASK_COMPLETE_OPERATION_TYPE, REJECTED.getStatus());
((TaskEntity) task).setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + task.getId(), REJECTED.getStatus());
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
runtimeService.setVariable(task.getProcessInstanceId(), TASK_COMPLETE_OPERATION_TYPE + task.getId(), REJECTED);
// runtimeService.setVariable(task.getProcessInstanceId(), TASK_COMPLETE_OPERATION_TYPE + task.getId()
// , REJECTED);
createVirtualTask(commandContext, extAxHiTaskInstService, task.getProcessInstanceId(), task.getName(),
task.getTaskDefinitionKey(), advice, approver.buildAssigneeId(), REJECTED.getStatus());

View File

@ -79,7 +79,7 @@ public class CustomTransferUserTaskCmd implements Command<Void>, Serializable {
addMultiTask(commandContext, (TaskEntity) task, targetTaskAssignee);
deleteMultiTask(commandContext, (TaskEntity) task);
((TaskEntity) task).setTransientVariable(TASK_COMPLETE_OPERATION_TYPE, TRANSFER.getStatus());
((TaskEntity) task).setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + task.getId(), TRANSFER.getStatus());
return null;
}

View File

@ -258,7 +258,7 @@ public class CustomTaskHelper {
CustomTaskHelper.createExtTaskInst(extAxHiTaskInstService, task.getProcessInstanceId(),
task.getId(), task.getTaskDefinitionKey(), userId, extTaskInstStatus);
((TaskEntity) task).setTransientVariable(TASK_COMPLETE_OPERATION_TYPE, extTaskInstStatus);
task.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + task.getId(), extTaskInstStatus);
// 完成临时节点
taskService.complete(task.getId());

View File

@ -9,7 +9,10 @@ import lombok.extern.slf4j.Slf4j;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.stereotype.Component;
import java.util.Objects;
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_COMPLETE_OPERATION_TYPE;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.DELETED;
/**
* Core 包内置的,可共用与 Jar 包集成和微服务集成
@ -41,9 +44,19 @@ public class InternalTaskEventListener implements BpmnTaskEventListener {
@Override
public void onDeleted(DelegateTask delegateTask) {
Object operationType = delegateTask.getTransientVariable(TASK_COMPLETE_OPERATION_TYPE + delegateTask.getId());
if (log.isDebugEnabled()) {
log.debug("taskId:{}, operationType:{}", delegateTask.getId(), operationType);
}
ExtAxHiTaskInst taskInst = hiTaskInstService.getByTaskId(delegateTask.getId(),
delegateTask.getProcessInstanceId());
taskInst.setStatus(String.valueOf(delegateTask.getTransientVariable(TASK_COMPLETE_OPERATION_TYPE)));
if (Objects.nonNull(operationType)) {
taskInst.setStatus(String.valueOf(operationType));
} else {
// 多实例或签同意时,无法正确区分状态, 所以默认认为这种是无需展示在日志中的
taskInst.setStatus(DELETED.getStatus());
}
hiTaskInstService.update(taskInst);
}
}

View File

@ -56,7 +56,8 @@ public class StartNodeAutoCompleteEventListener implements BpmnTaskEventListener
BpmnTaskDelegateAssigner.class);
delegateTask.setVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(),
initiator);
delegateTask.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE, APPROVED.getStatus());
delegateTask.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + delegateTask.getId(),
APPROVED.getStatus());
// 直接完成
taskService.complete(delegateTask.getId(), runtimeService.getVariables(delegateTask.getExecutionId()));
}