From 0516396ea5a32e7072c35297eca75dd101c2ec44 Mon Sep 17 00:00:00 2001 From: yangqicheng Date: Wed, 18 Dec 2024 11:02:04 +0800 Subject: [PATCH 1/3] =?UTF-8?q?REQ-3383-=E4=B8=AD=E6=AD=A2=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0advice=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../process/BpmnProcessInstanceAbortDTO.java | 8 +++++ .../cmd/CustomAbortProcessInstanceCmd.java | 30 +++++++++---------- .../EngineExecutionStartListener.java | 1 + 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/process/BpmnProcessInstanceAbortDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/process/BpmnProcessInstanceAbortDTO.java index 401434819..a98fcdebf 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/process/BpmnProcessInstanceAbortDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/process/BpmnProcessInstanceAbortDTO.java @@ -52,6 +52,14 @@ public class BpmnProcessInstanceAbortDTO { @Length(max = 100, message = "中止原因长度不能超过 100 个字符") private String reason; + /** + * 评论信息 + * advice 统一均为审批节点的审批意见,一般为用户在同意、驳回时填写的内容 + * 有值时,在日志中一般出现在 operationDesc 的下方 + */ + @ApiModelProperty(value = "中止意见") + private String advice; + /** * 附件列表 */ diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java index c80375496..874905b18 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java @@ -8,6 +8,7 @@ import cn.axzo.workflow.core.engine.model.AddComment; import cn.axzo.workflow.core.engine.operation.DeleteProcessInstanceOperation; import cn.axzo.workflow.core.service.ExtAxHiTaskInstService; import com.alibaba.fastjson.JSON; +import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; @@ -24,23 +25,12 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_DELETE_PROCESS_FLAG; -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_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.TASK_ASSIGNEE_SKIP_FLAT; -import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_COMPLETE_OPERATION_TYPE; +import static cn.axzo.workflow.common.constant.BpmnConstants.*; import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_ABORT; 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; -import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_CANT_ABORT; -import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS; -import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.batchAddAttachment; -import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.completeVirtualTask; -import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.createVirtualTask; +import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.*; +import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.*; /** * 自定义的中止流程实例的命令实现 @@ -49,14 +39,16 @@ import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.createVir * @since 2024/1/2 18:19 */ public class CustomAbortProcessInstanceCmd extends AbstractCommand implements Serializable { + private static final long serialVersionUID = -4141519915611160506L; private final String processInstanceId; private final String tenantId; private final String reason; private final List attachmentList; private final String nodeName; - private BpmnTaskDelegateAssigner assigner; + private final BpmnTaskDelegateAssigner assigner; private final String signatureUrl; private final ExtAxHiTaskInstService extAxHiTaskInstService; + private final String advice; public CustomAbortProcessInstanceCmd(BpmnProcessInstanceAbortDTO dto, ExtAxHiTaskInstService extAxHiTaskInstService) { this.processInstanceId = dto.getProcessInstanceId(); @@ -68,6 +60,7 @@ public class CustomAbortProcessInstanceCmd extends AbstractCommand impleme BpmnTaskDelegateAssigner.buildDummyAssigner("system", TASK_ASSIGNEE_SKIP_FLAT, ""); this.signatureUrl = dto.getSignatureUrl(); this.extAxHiTaskInstService = extAxHiTaskInstService; + this.advice = dto.getAdvice(); } @Override @@ -125,7 +118,12 @@ public class CustomAbortProcessInstanceCmd extends AbstractCommand impleme runtimeService.setVariable(task.getProcessInstanceId(), TASK_COMPLETE_OPERATION_TYPE + task.getId(), ABORTED); batchAddAttachment(commandContext, task.getProcessInstanceId(), task, attachmentList, assigner); - + //添加中止意见 + if (StringUtils.hasLength(advice)) { + Authentication.setAuthenticatedUserId(assigner.buildAssigneeId()); + addComment(commandContext, task, COMMENT_TYPE_ADVICE, advice); + Authentication.setAuthenticatedUserId(null); + } completeVirtualTask(commandContext, task); return null; } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java index 4a8e8ff8b..592192619 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java @@ -199,6 +199,7 @@ public class EngineExecutionStartListener implements ExecutionListener { assigners.addAll(approverSelect(ApproverEmptyHandleTypeEnum.specifyAssignee.getType(), userTask, execution, true)); finalEmptyAssigneeHandle(assigners, userTask, execution, "转交指定人员失败,系统自动中止"); + break; default: break; } From 04f883be8a2d31440f9cdf3b9da964906e2ef2df Mon Sep 17 00:00:00 2001 From: yangqicheng Date: Wed, 18 Dec 2024 11:06:44 +0800 Subject: [PATCH 2/3] =?UTF-8?q?REQ-3383-=E8=B0=83=E6=95=B4=E4=B8=AD?= =?UTF-8?q?=E6=AD=A2=E6=B5=81=E7=A8=8B=E6=B7=BB=E5=8A=A0=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/engine/cmd/CustomAbortProcessInstanceCmd.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java index 874905b18..f74e400c2 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java @@ -114,16 +114,10 @@ public class CustomAbortProcessInstanceCmd extends AbstractCommand impleme // 添加自定义的节点,用于展示最后的操作 TaskEntity task = createVirtualTask(commandContext, extAxHiTaskInstService, processInstanceId, - nodeName, NODE_ABORT.getType(), null, assigner, ABORTED.getStatus(), new AddComment(reason)); + nodeName, NODE_ABORT.getType(), advice, assigner, ABORTED.getStatus(), new AddComment(reason)); runtimeService.setVariable(task.getProcessInstanceId(), TASK_COMPLETE_OPERATION_TYPE + task.getId(), ABORTED); batchAddAttachment(commandContext, task.getProcessInstanceId(), task, attachmentList, assigner); - //添加中止意见 - if (StringUtils.hasLength(advice)) { - Authentication.setAuthenticatedUserId(assigner.buildAssigneeId()); - addComment(commandContext, task, COMMENT_TYPE_ADVICE, advice); - Authentication.setAuthenticatedUserId(null); - } completeVirtualTask(commandContext, task); return null; } From 23e65ca58a4a2ba9ce8e5e634194a95f7b2b1ed3 Mon Sep 17 00:00:00 2001 From: yangqicheng Date: Wed, 18 Dec 2024 15:48:20 +0800 Subject: [PATCH 3/3] =?UTF-8?q?REQ-3383-=E5=A4=84=E7=90=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=90=88=E5=B9=B6=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java index a26faa236..e78406f28 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomAbortProcessInstanceCmd.java @@ -24,11 +24,11 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.*; import static cn.axzo.workflow.common.constant.BpmnConstants.*; import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_ABORT; 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.*; import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.*; /**