update - 否定行为结束审批时,提供删除原因的展示

This commit is contained in:
wangli 2024-04-01 17:31:12 +08:00
parent 219c199bba
commit 28c15e730a
6 changed files with 36 additions and 28 deletions

View File

@ -24,6 +24,8 @@ public interface BpmnConstants {
String INTERNAL_PROCESS_TYPE_REJECT = "[_INTERNAL_PROCESS_TYPE_REJECT_]"; String INTERNAL_PROCESS_TYPE_REJECT = "[_INTERNAL_PROCESS_TYPE_REJECT_]";
String INTERNAL_PROCESS_TYPE_ABORT = "[_INTERNAL_PROCESS_TYPE_ABORT_]"; String INTERNAL_PROCESS_TYPE_ABORT = "[_INTERNAL_PROCESS_TYPE_ABORT_]";
String INTERNAL_SPECIFY_NEXT_APPROVER = "[_INTERNAL_SPECIFY_NEXT_APPROVER_]"; String INTERNAL_SPECIFY_NEXT_APPROVER = "[_INTERNAL_SPECIFY_NEXT_APPROVER_]";
// 取消/驳回/终止时,记录原因
String INTERNAL_PROCESS_DELETE_REASON = "[_INTERNAL_PROCESS_DELETE_REASON_]";
String BIZ_ORG_RELATION = "[_BIZ_ORG_RELATION_]"; String BIZ_ORG_RELATION = "[_BIZ_ORG_RELATION_]";
String PENDING_TEMPLATE_VARIABLE = "[_PENDING_VARIABLES]"; String PENDING_TEMPLATE_VARIABLE = "[_PENDING_VARIABLES]";
String INTERNAL_PROCESS_AGENT = "[_INTERNAL_PROCESS_AGENT]"; String INTERNAL_PROCESS_AGENT = "[_INTERNAL_PROCESS_AGENT]";

View File

@ -25,6 +25,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_DELETE_PRO
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_TENANT_ID; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_TENANT_ID;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_USER_ID; 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_END_USER_NAME;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_DELETE_REASON;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_TYPE_ABORT; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_TYPE_ABORT;
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_ASSIGNEE_SKIP_FLAT; import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_ASSIGNEE_SKIP_FLAT;
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_COMPLETE_OPERATION_TYPE; import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_COMPLETE_OPERATION_TYPE;
@ -86,11 +87,12 @@ public class CustomAbortProcessInstanceCmd implements Command<Void>, Serializabl
variables.put(INTERNAL_END_USER_ID, "system"); variables.put(INTERNAL_END_USER_ID, "system");
variables.put(INTERNAL_END_USER_NAME, "系统"); variables.put(INTERNAL_END_USER_NAME, "系统");
variables.put(INTERNAL_DELETE_PROCESS_FLAG, INTERNAL_PROCESS_TYPE_ABORT); variables.put(INTERNAL_DELETE_PROCESS_FLAG, INTERNAL_PROCESS_TYPE_ABORT);
variables.put(INTERNAL_PROCESS_DELETE_REASON, reason);
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
runtimeService.setVariables(instance.getId(), variables); runtimeService.setVariables(instance.getId(), variables);
CommandContextUtil.getAgenda(commandContext).planOperation(new DeleteProcessInstanceOperation(commandContext, CommandContextUtil.getAgenda(commandContext).planOperation(new DeleteProcessInstanceOperation(commandContext,
processInstanceId, extAxHiTaskInstService, reason)); processInstanceId, extAxHiTaskInstService));
// 添加自定义的节点,用于展示最后的操作 // 添加自定义的节点,用于展示最后的操作
Task task = createVirtualTask(commandContext, extAxHiTaskInstService, processInstanceId, Task task = createVirtualTask(commandContext, extAxHiTaskInstService, processInstanceId,

View File

@ -22,6 +22,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_DELETE_PRO
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_TENANT_ID; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_TENANT_ID;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_USER_ID; 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_END_USER_NAME;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_DELETE_REASON;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_TYPE_CANCEL; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_TYPE_CANCEL;
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_CANCEL; import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_CANCEL;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.ABORTED; import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.ABORTED;
@ -86,11 +87,12 @@ public class CustomCancelProcessInstanceCmd implements Command<Void>, Serializab
variables.put(INTERNAL_END_USER_ID, initiator.buildAssigneeId()); variables.put(INTERNAL_END_USER_ID, initiator.buildAssigneeId());
variables.put(INTERNAL_END_USER_NAME, initiator.getAssignerName()); variables.put(INTERNAL_END_USER_NAME, initiator.getAssignerName());
variables.put(INTERNAL_DELETE_PROCESS_FLAG, INTERNAL_PROCESS_TYPE_CANCEL); variables.put(INTERNAL_DELETE_PROCESS_FLAG, INTERNAL_PROCESS_TYPE_CANCEL);
variables.put(INTERNAL_PROCESS_DELETE_REASON, reason);
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
runtimeService.setVariables(instance.getId(), variables); runtimeService.setVariables(instance.getId(), variables);
CommandContextUtil.getAgenda(commandContext).planOperation(new DeleteProcessInstanceOperation(commandContext, CommandContextUtil.getAgenda(commandContext).planOperation(new DeleteProcessInstanceOperation(commandContext,
processInstanceId, extAxHiTaskInstService, reason)); processInstanceId, extAxHiTaskInstService));
// 添加自定义的节点,用于展示最后的操作 // 添加自定义的节点,用于展示最后的操作
Task task = createVirtualTask(commandContext, extAxHiTaskInstService, processInstanceId, Task task = createVirtualTask(commandContext, extAxHiTaskInstService, processInstanceId,

View File

@ -25,6 +25,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_DELETE_PRO
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_TENANT_ID; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_TENANT_ID;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_END_USER_ID; 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_END_USER_NAME;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_DELETE_REASON;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_TYPE_REJECT; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_TYPE_REJECT;
import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_COMPLETE_OPERATION_TYPE; import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_COMPLETE_OPERATION_TYPE;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.REJECTED; import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.REJECTED;
@ -89,9 +90,10 @@ public class CustomRejectionTaskCmd implements Command<Void>, Serializable {
variables.put(INTERNAL_END_USER_NAME, approver.getAssignerName()); variables.put(INTERNAL_END_USER_NAME, approver.getAssignerName());
variables.put(INTERNAL_END_USER_ID, approver.buildAssigneeId()); variables.put(INTERNAL_END_USER_ID, approver.buildAssigneeId());
variables.put(INTERNAL_DELETE_PROCESS_FLAG, INTERNAL_PROCESS_TYPE_REJECT); variables.put(INTERNAL_DELETE_PROCESS_FLAG, INTERNAL_PROCESS_TYPE_REJECT);
variables.put(INTERNAL_PROCESS_DELETE_REASON, reason);
runtimeService.setVariables(task.getProcessInstanceId(), variables); runtimeService.setVariables(task.getProcessInstanceId(), variables);
CommandContextUtil.getAgenda(commandContext) CommandContextUtil.getAgenda(commandContext)
.planOperation(new DeleteProcessInstanceOperation(commandContext, task.getProcessInstanceId(), .planOperation(new DeleteProcessInstanceOperation(commandContext, task.getProcessInstanceId(),
extAxHiTaskInstService, reason)); extAxHiTaskInstService));
} }
} }

View File

@ -25,14 +25,12 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.HIDDEN_ASSIGNEE_ID;
public class DeleteProcessInstanceOperation extends AbstractOperation { public class DeleteProcessInstanceOperation extends AbstractOperation {
private final String processInstanceId; private final String processInstanceId;
private final ExtAxHiTaskInstService extAxHiTaskInstService; private final ExtAxHiTaskInstService extAxHiTaskInstService;
private final String reason;
public DeleteProcessInstanceOperation(CommandContext commandContext, String processInstanceId, public DeleteProcessInstanceOperation(CommandContext commandContext, String processInstanceId,
ExtAxHiTaskInstService extAxHiTaskInstService, String reason) { ExtAxHiTaskInstService extAxHiTaskInstService) {
super(commandContext, null); super(commandContext, null);
this.processInstanceId = processInstanceId; this.processInstanceId = processInstanceId;
this.extAxHiTaskInstService = extAxHiTaskInstService; this.extAxHiTaskInstService = extAxHiTaskInstService;
this.reason = reason;
} }
@Override @Override
@ -56,8 +54,8 @@ public class DeleteProcessInstanceOperation extends AbstractOperation {
} }
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
// runtimeService.deleteProcessInstance(processInstanceId, HIDDEN_ASSIGNEE_ID); runtimeService.deleteProcessInstance(processInstanceId, HIDDEN_ASSIGNEE_ID);
// 将结束流程实例的原因记录下来 // 将结束流程实例的原因记录下来
runtimeService.deleteProcessInstance(processInstanceId, reason); // runtimeService.deleteProcessInstance(processInstanceId, reason);
} }
} }

View File

@ -26,6 +26,7 @@ import java.util.Objects;
import static cn.axzo.workflow.common.constant.BpmnConstants.FLOW_SERVER_VERSION_121; import static cn.axzo.workflow.common.constant.BpmnConstants.FLOW_SERVER_VERSION_121;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_DELETE_REASON;
import static cn.axzo.workflow.common.constant.BpmnConstants.WORKFLOW_ENGINE_VERSION; import static cn.axzo.workflow.common.constant.BpmnConstants.WORKFLOW_ENGINE_VERSION;
import static cn.axzo.workflow.common.enums.ProcessInstanceEventEnum.PROCESS_INSTANCE_ABORTED; import static cn.axzo.workflow.common.enums.ProcessInstanceEventEnum.PROCESS_INSTANCE_ABORTED;
import static cn.axzo.workflow.common.enums.ProcessInstanceEventEnum.PROCESS_INSTANCE_CANCELLED; import static cn.axzo.workflow.common.enums.ProcessInstanceEventEnum.PROCESS_INSTANCE_CANCELLED;
@ -149,14 +150,10 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime()) .setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId()) .setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
.setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey()) .setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey())
.setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName()) .setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName());
.setReason(String.valueOf(event.getCause()));
BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf); BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf);
String version = (String) runtimeService.getVariable(event.getProcessInstanceId(), WORKFLOW_ENGINE_VERSION); setProcessDeleteReason(event, dto);
if (Objects.isNull(version)) { setWorkflowEngineVersion(event, dto);
version = FLOW_SERVER_VERSION_121;
}
dto.setWorkflowEngineVersion(version);
sendMessageQueue(dto, PROCESS_INSTANCE_CANCELLED); sendMessageQueue(dto, PROCESS_INSTANCE_CANCELLED);
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("MessagePushProcessEventListener#onCancelled...end: {}", event.getProcessInstanceId()); log.debug("MessagePushProcessEventListener#onCancelled...end: {}", event.getProcessInstanceId());
@ -190,14 +187,10 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime()) .setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId()) .setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
.setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey()) .setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey())
.setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName()) .setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName());
.setReason(String.valueOf(event.getCause()));
BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf); BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf);
String version = (String) runtimeService.getVariable(event.getProcessInstanceId(), WORKFLOW_ENGINE_VERSION); setProcessDeleteReason(event, dto);
if (Objects.isNull(version)) { setWorkflowEngineVersion(event, dto);
version = FLOW_SERVER_VERSION_121;
}
dto.setWorkflowEngineVersion(version);
sendMessageQueue(dto, PROCESS_INSTANCE_REJECTED); sendMessageQueue(dto, PROCESS_INSTANCE_REJECTED);
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("MessagePushProcessEventListener#onRejected...end: {}", event.getProcessInstanceId()); log.debug("MessagePushProcessEventListener#onRejected...end: {}", event.getProcessInstanceId());
@ -226,18 +219,27 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime()) .setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId()) .setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
.setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey()) .setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey())
.setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName()) .setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName());
.setReason(String.valueOf(event.getCause()));
BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf); BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf);
setProcessDeleteReason(event, dto);
setWorkflowEngineVersion(event, dto);
sendMessageQueue(dto, PROCESS_INSTANCE_ABORTED);
if (log.isDebugEnabled()) {
log.debug("MessagePushProcessEventListener#onAborted...end: {}", event.getProcessInstanceId());
}
}
private void setProcessDeleteReason(FlowableCancelledEvent event, ProcessInstanceDTO dto) {
String processDeleteReason = (String) runtimeService.getVariable(event.getProcessInstanceId(), INTERNAL_PROCESS_DELETE_REASON);
dto.setReason(processDeleteReason);
}
private void setWorkflowEngineVersion(FlowableCancelledEvent event, ProcessInstanceDTO dto) {
String version = (String) runtimeService.getVariable(event.getProcessInstanceId(), WORKFLOW_ENGINE_VERSION); String version = (String) runtimeService.getVariable(event.getProcessInstanceId(), WORKFLOW_ENGINE_VERSION);
if (Objects.isNull(version)) { if (Objects.isNull(version)) {
version = FLOW_SERVER_VERSION_121; version = FLOW_SERVER_VERSION_121;
} }
dto.setWorkflowEngineVersion(version); dto.setWorkflowEngineVersion(version);
sendMessageQueue(dto, PROCESS_INSTANCE_ABORTED);
if (log.isDebugEnabled()) {
log.debug("MessagePushProcessEventListener#onAborted...end: {}", event.getProcessInstanceId());
}
} }
@Override @Override