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);