From b72909449bb5a1ad0a4d8077f3056258aad53563 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 6 Nov 2025 18:31:42 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat(REQ-5965)=20-=20=E9=98=B2=E5=BE=A1?= =?UTF-8?q?=E6=80=A7=E7=BC=96=E7=A8=8B=EF=BC=8C=E5=85=BC=E5=AE=B9=20NPE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/engine/cmd/CustomGetProcessInstanceVariablesCmd.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesCmd.java index 80ffb959a..469dfe7d4 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesCmd.java @@ -67,7 +67,9 @@ public class CustomGetProcessInstanceVariablesCmd extends AbstractCommand Date: Thu, 6 Nov 2025 18:32:17 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat(REQ-5965)=20-=20=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E4=BB=BB=E5=8A=A1=E5=85=A5=E5=8F=82=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/model/request/bpmn/task/BpmnTaskAuditDTO.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/task/BpmnTaskAuditDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/task/BpmnTaskAuditDTO.java index 61b1a17bf..0cfe59964 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/task/BpmnTaskAuditDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/task/BpmnTaskAuditDTO.java @@ -106,7 +106,9 @@ public class BpmnTaskAuditDTO { private String operationDesc; /** - * 更新或新增流程变量 + * 更新或新增流程变量, + *

+ * 如果不修改,则map 的 value 设置为 null,内部会自动过滤 */ private Map variables; } From 3a755e0d9058ad1428ac32bae227947e18a98db5 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 6 Nov 2025 18:32:43 +0800 Subject: [PATCH 3/4] =?UTF-8?q?feat(REQ-5965)=20-=20=E8=A7=A3=E5=86=B3=20i?= =?UTF-8?q?batis=20=E6=B3=A8=E8=A7=A3=E4=B8=8D=E8=83=BD=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E5=93=8D=E5=BA=94=20json=20=E5=AD=97=E6=AE=B5=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/repository/mapper/ExtAxProcessLogMapper.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/mapper/ExtAxProcessLogMapper.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/mapper/ExtAxProcessLogMapper.java index 185b648ac..3eefd77b1 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/mapper/ExtAxProcessLogMapper.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/mapper/ExtAxProcessLogMapper.java @@ -1,9 +1,13 @@ package cn.axzo.workflow.core.repository.mapper; +import cn.axzo.workflow.core.conf.handler.ListAssigneeTypeHandler; import cn.axzo.workflow.core.repository.entity.ExtAxProcessLog; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; +import org.apache.ibatis.type.JdbcType; @Mapper public interface ExtAxProcessLogMapper extends BaseMapperX { @@ -13,5 +17,8 @@ public interface ExtAxProcessLogMapper extends BaseMapperX { @Select("select * from ext_ax_process_log WHERE process_instance_id = #{processInstanceId} and task_id = #{taskId}") + @Results({ + @Result(column = "assignee_full", property = "assigneeFull", jdbcType = JdbcType.ARRAY, typeHandler = ListAssigneeTypeHandler.class) + }) ExtAxProcessLog findByProcessIdAndTaskIdWithDeleted(String processInstanceId, String taskId); } From ccf56781fc4ddaaf01d1f341b69602753b1027a4 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 6 Nov 2025 18:33:23 +0800 Subject: [PATCH 4/4] =?UTF-8?q?feat(REQ-5965)=20-=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=90=8C=E6=84=8F=E6=93=8D=E4=BD=9C=E6=97=B6=E7=9A=84=E7=A9=BA?= =?UTF-8?q?=E5=80=BC=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/core/conf/SupportRefreshProperties.java | 2 +- .../controller/web/bpmn/BpmnProcessTaskController.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/conf/SupportRefreshProperties.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/conf/SupportRefreshProperties.java index 00328ecc5..7b3689bbe 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/conf/SupportRefreshProperties.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/conf/SupportRefreshProperties.java @@ -108,7 +108,7 @@ public class SupportRefreshProperties { @Value("${workflow.ignoreMqAlterApplicationNames:}") private List ignoreMqAlterApplicationNames; - @Value("${workflow.processLogHtmlUrl:https://taskflow-web.axzo.cn/#/document/log?processInstanceId=%s&personId=%d}") + @Value("${workflow.processLogHtmlUrl:https://taskflow-web.axzo.cn/#/document/log?processInstanceId=%s&personId=%s}") private String processLogHtmlUrl; } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessTaskController.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessTaskController.java index 29b7a051b..ffdec2cac 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessTaskController.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessTaskController.java @@ -54,6 +54,7 @@ import javax.validation.constraints.NotEmpty; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; import static cn.axzo.workflow.common.code.BpmnTaskRespCode.TASK_OPERATION_PARAM_INVALID; @@ -112,6 +113,10 @@ public class BpmnProcessTaskController extends BasicPopulateAvatarController imp if (!StringUtils.hasText(dto.getTaskId())) { dto.setTaskId(bpmnProcessTaskService.findTaskIdByInstanceIdAndPersonId(dto.getProcessInstanceId(), dto.getApprover().getPersonId())); } + + // 移除 variable 中 value 为 null 的 key + dto.getVariables().entrySet().removeIf(entry -> Objects.isNull(entry.getValue())); + List tempAttachments = ListUtils.defaultIfNull(dto.getAttachmentList(), new ArrayList<>()); if (StringUtils.hasText(dto.getSignatureUrl())) { AttachmentDTO signature = new AttachmentDTO(); @@ -138,6 +143,10 @@ public class BpmnProcessTaskController extends BasicPopulateAvatarController imp if (!StringUtils.hasText(dto.getTaskId())) { dto.setTaskId(bpmnProcessTaskService.findTaskIdByInstanceIdAndPersonId(dto.getProcessInstanceId(), dto.getApprover().getPersonId())); } + + // 移除 variable 中 value 为 null 的 key + dto.getVariables().entrySet().removeIf(entry -> Objects.isNull(entry.getValue())); + List tempAttachments = ListUtils.defaultIfNull(dto.getAttachmentList(), new ArrayList<>()); if (StringUtils.hasText(dto.getSignatureUrl())) { AttachmentDTO signature = new AttachmentDTO();