Merge branch 'feature/REQ-5965' into pre

This commit is contained in:
wangli 2025-12-25 16:31:25 +08:00
commit e7eca766b6
2 changed files with 27 additions and 15 deletions

View File

@ -15,12 +15,15 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j; 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.api.FlowableObjectNotFoundException;
import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.HistoryService; import org.flowable.engine.HistoryService;
import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.engine.impl.util.CommandContextUtil; 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.FormInfo;
import org.flowable.form.api.FormRepositoryService; import org.flowable.form.api.FormRepositoryService;
import org.flowable.form.api.FormService; import org.flowable.form.api.FormService;
@ -36,10 +39,12 @@ import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static cn.axzo.workflow.common.code.FormModelRespCode.FORM_MODEL_NOT_EXISTS; 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_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;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_START_TIME_DESC; 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()); .build());
// 电子签名 // 电子签名
addSignature(returnVariables, (List<SignatureDTO>) processVariables.get(SIGNATURE_COLLECTION)); addSignature(returnVariables, (List<SignatureDTO>) processVariables.get(SIGNATURE_COLLECTION), historicProcessInstance);
// 表单中的变量 // 表单中的变量
addFormFieldValue(commandContext, historicProcessInstance, returnVariables, processVariables); addFormFieldValue(commandContext, historicProcessInstance, returnVariables, processVariables);
@ -241,20 +245,28 @@ public class CustomGetProcessInstanceVariablesToObjectCmd extends AbstractComman
}); });
} }
private void addSignature(List<VariableObjectDTO> variables, List<SignatureDTO> signatures) { private void addSignature(List<VariableObjectDTO> variables, List<SignatureDTO> signatures, HistoricProcessInstance historicProcessInstance) {
log.info("addSignature{}", JSON.toJSONString(signatures)); log.info("addSignature{}", JSON.toJSONString(signatures));
if (CollectionUtils.isEmpty(signatures)) { if (CollectionUtils.isEmpty(signatures)) {
return; return;
} }
signatures.forEach(sign -> {
if (!Objects.equals(NODE_STARTER.getType(), sign.getActivityId())) { Process process = ProcessDefinitionUtil.getProcess(historicProcessInstance.getProcessDefinitionId());
Map<String, FlowElement> bpmnElementMap = process.getFlowElements().stream().collect(Collectors.toMap(FlowElement::getId, Function.identity(), (s, t) -> s));
if (CollectionUtils.isEmpty(bpmnElementMap)) {
return;
}
Map<String, SignatureDTO> 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() variables.add(VariableObjectDTO.builder()
.key(sign.getActivityId()) .key(Objects.nonNull(sign) ? sign.getActivityId() : v.getId())
.desc(sign.getActivityName()) .desc(Objects.nonNull(sign) ? sign.getActivityName() : v.getName())
.value(sign.getSignatures()) .value(Objects.nonNull(sign) ? sign.getSignatures() : Collections.emptyList())
.type(VariableObjectDTO.Type.signatureAndAdvice) .type(VariableObjectDTO.Type.signatureAndAdvice)
.build()); .build());
}
}); });
} }

View File

@ -206,8 +206,8 @@ public class WpsUtil {
wpsVariables.stream().filter(i -> Objects.equals(signatureAndAdvice, i.getType())).forEach(variableObjectDTO -> { wpsVariables.stream().filter(i -> Objects.equals(signatureAndAdvice, i.getType())).forEach(variableObjectDTO -> {
List<SignatureDTO.SignDetail> signDetails = (List<SignatureDTO.SignDetail>) variableObjectDTO.getValue(); List<SignatureDTO.SignDetail> signDetails = (List<SignatureDTO.SignDetail>) variableObjectDTO.getValue();
log.info("getWpsReplaceVariables signDetails: {}", JSON.toJSONString(signDetails)); log.info("getWpsReplaceVariables signDetails: {}", JSON.toJSONString(signDetails));
if (!CollectionUtils.isEmpty(signDetails)) { // if (!CollectionUtils.isEmpty(signDetails)) {
SignatureDTO.SignDetail signDetail = signDetails.get(0); SignatureDTO.SignDetail signDetail = CollectionUtils.isEmpty(signDetails) ? new SignatureDTO.SignDetail() : signDetails.get(0);
signatureAndAdvices.add(VariableObjectDTO.builder() signatureAndAdvices.add(VariableObjectDTO.builder()
.key(variableObjectDTO.getKey() + "_approverName") .key(variableObjectDTO.getKey() + "_approverName")
.desc(variableObjectDTO.getDesc() + "姓名") .desc(variableObjectDTO.getDesc() + "姓名")
@ -241,7 +241,7 @@ public class WpsUtil {
.value(DateUtil.format(signDetail.getOperationTime(), "yyyy.MM.dd")) .value(DateUtil.format(signDetail.getOperationTime(), "yyyy.MM.dd"))
.type(VariableObjectDTO.Type.text) .type(VariableObjectDTO.Type.text)
.build()); .build());
} // }
}); });
wpsVariables.addAll(signatureAndAdvices); wpsVariables.addAll(signatureAndAdvices);