feat(REQ-3769) - 模板变量替换逻辑

This commit is contained in:
wangli 2025-04-22 12:34:39 +08:00
parent 13376741e4
commit 3f2a97bab9
4 changed files with 74 additions and 4 deletions

View File

@ -31,6 +31,7 @@ public interface VariableConstants {
String PRINT_VAR_PROCESS_DEFINITION_KEY = "processDefinitionKey";
String PRINT_VAR_PROCESS_INSTANCE_ID = "processInstanceId";
String PRINT_VAR_PROCESS_START_TIME = "startTime";
String PRINT_VAR_PROCESS_END_TIME = "endTime";
String PRINT_VAR_PROCESS_INITIATOR = "initiator";
String PRINT_VAR_PROCESS_INITIATOR_NAME = "initiatorName";
String PRINT_VAR_PROCESS_INITIATOR_POSITION = "initiatorPosition";

View File

@ -23,6 +23,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.BPM_MODEL_CATEGORY;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR;
import static cn.axzo.workflow.common.constant.BpmnConstants.SIGNATURE_COLLECTION;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_DEFINITION_KEY;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_END_TIME;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INSTANCE_ID;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_START_TIME;
@ -60,14 +61,15 @@ public class CustomGetProcessInstanceVariablesCmd extends AbstractCommand<Map<St
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration();
HistoryService historyService = processEngineConfiguration.getHistoryService();
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
HistoricProcessInstance instance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId).includeProcessVariables().singleResult();
// 添加流程开始时间
variables.put(PRINT_VAR_PROCESS_START_TIME, sdf.format(historicProcessInstance.getStartTime()));
variables.put(PRINT_VAR_PROCESS_START_TIME, sdf.format(instance.getStartTime()));
variables.put(PRINT_VAR_PROCESS_END_TIME, Objects.nonNull(instance.getEndTime()) ? sdf.format(instance.getEndTime()) : null);
// 添加流程业务 ID
addProcessDefinitionKey(variables, historicProcessInstance);
addProcessDefinitionKey(variables, instance);
Map<String, Object> processVariables = historicProcessInstance.getProcessVariables();
Map<String, Object> processVariables = instance.getProcessVariables();
// 发起人流程引擎内部模型需要外部调用该命令时再解析
variables.put(PRINT_VAR_PROCESS_INITIATOR, processVariables.get(INTERNAL_INITIATOR));

View File

@ -44,6 +44,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR;
import static cn.axzo.workflow.common.constant.BpmnConstants.SIGNATURE_COLLECTION;
import static cn.axzo.workflow.common.constant.BpmnConstants.SIGN_VARIABLE;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_DEFINITION_KEY;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_END_TIME;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INSTANCE_ID;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_START_TIME;
@ -99,6 +100,10 @@ public class CustomGetProcessInstanceVariablesToObjectCmd extends AbstractComman
.key(PRINT_VAR_PROCESS_START_TIME)
.value(sdf.format(historicProcessInstance.getStartTime()))
.build());
returnVariables.add(VariableObjectDTO.builder()
.key(PRINT_VAR_PROCESS_END_TIME)
.value(Objects.nonNull(historicProcessInstance.getEndTime()) ? sdf.format(historicProcessInstance.getEndTime()) : null)
.build());
Map<String, Object> processVariables = historicProcessInstance.getProcessVariables();
// 添加流程业务 ID 和业务下分组变量信息

View File

@ -1,6 +1,9 @@
package cn.axzo.workflow.server.common.util;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.maokai.api.client.OrganizationalNodeUserQueryApi;
import cn.axzo.maokai.api.vo.request.OrgNodeUserBriefInfoListReq;
import cn.axzo.maokai.api.vo.response.OrgNodeUserBriefInfoResp;
import cn.axzo.nanopart.doc.api.domain.FileReplaceContent;
import cn.axzo.nanopart.doc.api.filetemplate.FileTemplateApi;
import cn.axzo.nanopart.doc.api.filetemplate.request.FileTemplateReplaceRequest;
@ -13,6 +16,7 @@ import cn.axzo.workflow.common.enums.FileTypeEnum;
import cn.axzo.workflow.common.model.dto.SignatureDTO;
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
import cn.axzo.workflow.common.model.dto.VariableObjectDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.core.engine.cmd.CustomGetProcessInstanceVariablesToObjectCmd;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
@ -24,10 +28,16 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR_NAME;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR_PHONE;
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_INITIATOR_POSITION;
import static cn.axzo.workflow.common.model.dto.VariableObjectDTO.Type.signatureAndAdvice;
/**
@ -43,6 +53,8 @@ public class WpsUtil {
private FileTemplateApi fileTemplateApi;
@Resource
private ServerFileServiceApi serverFileServiceApi;
@Resource
private OrganizationalNodeUserQueryApi organizationalNodeUserQueryApi;
/**
* 调用 wps 文件变量替换接口
@ -109,6 +121,24 @@ public class WpsUtil {
}
});
wpsVariables.addAll(signatureAndAdvices);
wpsVariables.stream().filter(i -> Objects.equals(i.getKey(), PRINT_VAR_PROCESS_INITIATOR)).findAny().ifPresent(i -> {
BpmnTaskDelegateAssigner initiator = BpmnTaskDelegateAssigner.toObjectCompatible(i.getValue());
Optional<OrgNodeUserBriefInfoResp> user = getUserInfo(initiator);
wpsVariables.add(VariableObjectDTO.builder()
.key(PRINT_VAR_PROCESS_INITIATOR_NAME)
.value(user.isPresent() ? user.get().getRealName() : "")
.build());
wpsVariables.add(VariableObjectDTO.builder()
.key(PRINT_VAR_PROCESS_INITIATOR_POSITION)
.value(user.isPresent() && Objects.nonNull(user.get().getJob()) ? user.get().getJob().getName() : "")
.build());
wpsVariables.add(VariableObjectDTO.builder()
.key(PRINT_VAR_PROCESS_INITIATOR_PHONE)
.value(user.isPresent() ? user.get().getProfile().getPhone() : "")
.build());
});
return wpsVariables;
}
@ -133,4 +163,36 @@ public class WpsUtil {
public static boolean isWpsFile(FileTypeEnum fileTypeEnum) {
return WPS_SUPPORTED_FILE_TYPES.contains(fileTypeEnum);
}
private Optional<OrgNodeUserBriefInfoResp> getUserInfo(BpmnTaskDelegateAssigner assigner) {
if (Objects.isNull(assigner)) {
return Optional.empty();
}
OrgNodeUserBriefInfoListReq req = new OrgNodeUserBriefInfoListReq();
if (StringUtils.hasText(assigner.getTenantId())) {
req.setWorkspaceId(Long.valueOf(assigner.getTenantId()));
}
if (StringUtils.hasText(assigner.getOuId())) {
req.setOuId(Long.valueOf(assigner.getOuId()));
}
if (StringUtils.hasText(assigner.getNodeId())) {
req.setOrgNodeIds(Lists.newArrayList(Long.valueOf(assigner.getNodeId())));
}
if (StringUtils.hasText(assigner.getPersonId())) {
req.setPersonIds(Lists.newArrayList(Long.valueOf(assigner.getPersonId())));
}
req.setNeedJob(true);
req.setNeedUnit(true);
req.setNeedProfile(true);
req.setContainsExited(true);
List<OrgNodeUserBriefInfoResp> users = RpcExternalUtil.rpcApiResultProcessor(() -> organizationalNodeUserQueryApi.listOrgNodeUsers(req),
"查询审批人员组织信息", req);
if (CollectionUtils.isEmpty(users)) {
return Optional.empty();
}
return users.stream().sorted(Comparator.comparing(OrgNodeUserBriefInfoResp::getExited).reversed())
.collect(Collectors.toList()).stream().findFirst();
}
}