feat(REQ-3769) - 模板变量替换逻辑
This commit is contained in:
parent
13376741e4
commit
3f2a97bab9
@ -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";
|
||||
|
||||
@ -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));
|
||||
|
||||
|
||||
@ -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 和业务下分组变量信息
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user