From b486ed49271fcedf2ed7b863a03ca50250db2bcf Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 25 Dec 2025 16:28:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-5965)=20-=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=94=A8=E4=BA=8E=E6=9B=BF=E6=8D=A2=20wps=20?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E4=B9=8B=E5=89=8D=E7=9A=84=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E9=85=8D=E5=90=88=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E4=B8=AD=E7=9A=84=E6=9B=BF=E6=8D=A2=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E7=9A=84=E9=85=8D=E7=BD=AE=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...etProcessInstanceVariablesToObjectCmd.java | 36 ++++++++++++------- .../workflow/server/common/util/WpsUtil.java | 6 ++-- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesToObjectCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesToObjectCmd.java index a651b4bc0..5ec049e09 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesToObjectCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetProcessInstanceVariablesToObjectCmd.java @@ -15,12 +15,15 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.FlowElement; +import org.flowable.bpmn.model.Process; import org.flowable.common.engine.api.FlowableObjectNotFoundException; import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.engine.HistoryService; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.util.CommandContextUtil; +import org.flowable.engine.impl.util.ProcessDefinitionUtil; import org.flowable.form.api.FormInfo; import org.flowable.form.api.FormRepositoryService; import org.flowable.form.api.FormService; @@ -36,10 +39,12 @@ import java.io.Serializable; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.function.Function; import java.util.stream.Collectors; import static cn.axzo.workflow.common.code.FormModelRespCode.FORM_MODEL_NOT_EXISTS; @@ -57,7 +62,6 @@ import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCE import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INSTANCE_ID_DESC; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_START_TIME; import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_START_TIME_DESC; -import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_STARTER; /** * 自定义获取流程实例中的变量命令实现 @@ -130,7 +134,7 @@ public class CustomGetProcessInstanceVariablesToObjectCmd extends AbstractComman .build()); // 电子签名 - addSignature(returnVariables, (List) processVariables.get(SIGNATURE_COLLECTION)); + addSignature(returnVariables, (List) processVariables.get(SIGNATURE_COLLECTION), historicProcessInstance); // 表单中的变量 addFormFieldValue(commandContext, historicProcessInstance, returnVariables, processVariables); @@ -241,20 +245,28 @@ public class CustomGetProcessInstanceVariablesToObjectCmd extends AbstractComman }); } - private void addSignature(List variables, List signatures) { + private void addSignature(List variables, List signatures, HistoricProcessInstance historicProcessInstance) { log.info("addSignature:{}", JSON.toJSONString(signatures)); if (CollectionUtils.isEmpty(signatures)) { return; } - signatures.forEach(sign -> { - if (!Objects.equals(NODE_STARTER.getType(), sign.getActivityId())) { - variables.add(VariableObjectDTO.builder() - .key(sign.getActivityId()) - .desc(sign.getActivityName()) - .value(sign.getSignatures()) - .type(VariableObjectDTO.Type.signatureAndAdvice) - .build()); - } + + Process process = ProcessDefinitionUtil.getProcess(historicProcessInstance.getProcessDefinitionId()); + Map bpmnElementMap = process.getFlowElements().stream().collect(Collectors.toMap(FlowElement::getId, Function.identity(), (s, t) -> s)); + + if (CollectionUtils.isEmpty(bpmnElementMap)) { + return; + } + Map signMap = signatures.stream().collect(Collectors.toMap(SignatureDTO::getActivityId, Function.identity(), (s, t) -> s)); + + bpmnElementMap.forEach((k, v) -> { + SignatureDTO sign = signMap.getOrDefault(k, null); + variables.add(VariableObjectDTO.builder() + .key(Objects.nonNull(sign) ? sign.getActivityId() : v.getId()) + .desc(Objects.nonNull(sign) ? sign.getActivityName() : v.getName()) + .value(Objects.nonNull(sign) ? sign.getSignatures() : Collections.emptyList()) + .type(VariableObjectDTO.Type.signatureAndAdvice) + .build()); }); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/util/WpsUtil.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/util/WpsUtil.java index f0852dc62..59d3a5a23 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/util/WpsUtil.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/common/util/WpsUtil.java @@ -206,8 +206,8 @@ public class WpsUtil { wpsVariables.stream().filter(i -> Objects.equals(signatureAndAdvice, i.getType())).forEach(variableObjectDTO -> { List signDetails = (List) variableObjectDTO.getValue(); log.info("getWpsReplaceVariables signDetails: {}", JSON.toJSONString(signDetails)); - if (!CollectionUtils.isEmpty(signDetails)) { - SignatureDTO.SignDetail signDetail = signDetails.get(0); +// if (!CollectionUtils.isEmpty(signDetails)) { + SignatureDTO.SignDetail signDetail = CollectionUtils.isEmpty(signDetails) ? new SignatureDTO.SignDetail() : signDetails.get(0); signatureAndAdvices.add(VariableObjectDTO.builder() .key(variableObjectDTO.getKey() + "_approverName") .desc(variableObjectDTO.getDesc() + "姓名") @@ -241,7 +241,7 @@ public class WpsUtil { .value(DateUtil.format(signDetail.getOperationTime(), "yyyy.MM.dd")) .type(VariableObjectDTO.Type.text) .build()); - } +// } }); wpsVariables.addAll(signatureAndAdvices);