feat(REQ-3769) - 解决一些兼容问题
This commit is contained in:
parent
4677aa7bf2
commit
0040b6e233
@ -3,6 +3,7 @@ package cn.axzo.workflow.client.feign.bpmn;
|
||||
import cn.axzo.workflow.client.annotation.WorkflowEngineFeignClient;
|
||||
import cn.axzo.workflow.common.annotation.InvokeMode;
|
||||
import cn.axzo.workflow.common.annotation.Manageable;
|
||||
import cn.axzo.workflow.common.model.dto.SignFileDTO;
|
||||
import cn.axzo.workflow.common.model.dto.SimpleDocDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BeforeProcessInstanceCreateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||
@ -318,4 +319,13 @@ public interface ProcessInstanceApi {
|
||||
@PostMapping("/api/process/instance/approver/read/status/change")
|
||||
@InvokeMode(SYNC)
|
||||
CommonResponse<Boolean> approveReadStatusChange(@Validated @RequestBody ChangeApproverReadStatusDTO dto);
|
||||
|
||||
/**
|
||||
* 获取签署业务流程最后替换的文档 fileKey 集合
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "获取签署业务流程最后替换的文档 fileKey 集合")
|
||||
@GetMapping("/api/process/instance/final/docs")
|
||||
CommonResponse<List<SignFileDTO>> getProcessInstanceFinalDocs(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId);
|
||||
}
|
||||
|
||||
@ -46,14 +46,33 @@ public class WpsUtil {
|
||||
/**
|
||||
* 调用 wps 文件变量替换接口
|
||||
*
|
||||
* @param processEngineConfiguration
|
||||
* @param processInstanceId
|
||||
* @param fileCode 基于该模板进行变量替换
|
||||
* @param fileKey 如果有值,则变量替换完成后,直接将文档覆盖该 fileKey 对应的文件;
|
||||
* @return 返回替换变量后的文件oss 的 fileKey
|
||||
*/
|
||||
public String wpsFileVariableReplace(ProcessEngineConfigurationImpl processEngineConfiguration,
|
||||
String processInstanceId, String fileCode, String fileKey) {
|
||||
public String wpsFileVariableReplace(List<VariableObjectDTO> wpsVariables,
|
||||
String fileCode, String fileKey) {
|
||||
FileTemplateReplaceRequest request = new FileTemplateReplaceRequest();
|
||||
request.setFileCode(fileCode);
|
||||
request.setFileKey(fileKey);
|
||||
request.setReplaceContentList(BeanMapper.copyList(wpsVariables.stream()
|
||||
.filter(i -> Objects.equals(i.getType().name(), "img") || Objects.equals(i.getType().name(), "text"))
|
||||
.collect(Collectors.toList()), FileReplaceContent.class, (s, t) -> {
|
||||
if (Objects.equals(s.getType().name(), "img")) {
|
||||
if (isJson(s.getValue().toString())) {
|
||||
t.setContent(JSON.parseArray(s.getValue().toString(), UploadFieldDTO.class).get(0).getFileUrl());
|
||||
} else {
|
||||
t.setContent(JSON.parseArray(JSON.toJSONString(s.getValue()), UploadFieldDTO.class).get(0).getFileUrl());
|
||||
}
|
||||
} else {
|
||||
t.setContent(Objects.nonNull(s.getValue()) ? s.getValue().toString() : "");
|
||||
}
|
||||
t.setType(s.getType().name());
|
||||
}));
|
||||
return RpcExternalUtil.rpcProcessor(() -> fileTemplateApi.replaceWordText(request), "替换 WPS 文档变量", request);
|
||||
}
|
||||
|
||||
public List<VariableObjectDTO> getWpsReplaceVariables(ProcessEngineConfigurationImpl processEngineConfiguration, String processInstanceId) {
|
||||
CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor();
|
||||
List<VariableObjectDTO> wpsVariables =
|
||||
commandExecutor.execute(new CustomGetProcessInstanceVariablesToObjectCmd(processInstanceId));
|
||||
@ -79,24 +98,7 @@ public class WpsUtil {
|
||||
}
|
||||
});
|
||||
wpsVariables.addAll(signatureAndAdvices);
|
||||
FileTemplateReplaceRequest request = new FileTemplateReplaceRequest();
|
||||
request.setFileCode(fileCode);
|
||||
request.setFileKey(fileKey);
|
||||
request.setReplaceContentList(BeanMapper.copyList(wpsVariables.stream()
|
||||
.filter(i -> Objects.equals(i.getType().name(), "img") || Objects.equals(i.getType().name(), "text"))
|
||||
.collect(Collectors.toList()), FileReplaceContent.class, (s, t) -> {
|
||||
if (Objects.equals(s.getType().name(), "img")) {
|
||||
if (isJson(s.getValue().toString())) {
|
||||
t.setContent(JSON.parseArray(s.getValue().toString(), UploadFieldDTO.class).get(0).getFileUrl());
|
||||
} else {
|
||||
t.setContent(JSON.parseArray(JSON.toJSONString(s.getValue()), UploadFieldDTO.class).get(0).getFileUrl());
|
||||
}
|
||||
} else {
|
||||
t.setContent(Objects.nonNull(s.getValue()) ? s.getValue().toString() : "");
|
||||
}
|
||||
t.setType(s.getType().name());
|
||||
}));
|
||||
return RpcExternalUtil.rpcProcessor(() -> fileTemplateApi.replaceWordText(request), "替换 WPS 文档变量", request);
|
||||
return wpsVariables;
|
||||
}
|
||||
|
||||
public void deleteWpsFile(String wpsCode) {
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package cn.axzo.workflow.server.controller.listener.activity;
|
||||
|
||||
import cn.axzo.workflow.common.enums.FileTypeEnum;
|
||||
import cn.axzo.workflow.common.model.dto.VariableObjectDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnSignConf;
|
||||
import cn.axzo.workflow.core.common.context.ActivityOperationContext;
|
||||
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
|
||||
@ -20,6 +21,7 @@ import org.springframework.core.Ordered;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
@ -52,10 +54,11 @@ public class TempFileArchiveActivityEvent_101_Listener extends AbstractBpmnEvent
|
||||
}
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration();
|
||||
ExtAxProcessSign processSign = extAxProcessSignService.findByProcessInstanceId(execution.getProcessInstanceId());
|
||||
List<VariableObjectDTO> wpsReplaceVariables = wpsUtil.getWpsReplaceVariables(processEngineConfiguration, execution.getProcessInstanceId());
|
||||
processSign.getFileArchive().stream().filter(i -> Objects.equals(i.getFileType(), FileTypeEnum.WORD)
|
||||
|| Objects.equals(i.getFileType(), FileTypeEnum.EXCEL))
|
||||
.forEach(docBaseVO -> {
|
||||
String newFileKey = wpsUtil.wpsFileVariableReplace(processEngineConfiguration, execution.getProcessInstanceId(), docBaseVO.getFileCode(), docBaseVO.getFileKey());
|
||||
String newFileKey = wpsUtil.wpsFileVariableReplace(wpsReplaceVariables, docBaseVO.getFileCode(), docBaseVO.getFileKey());
|
||||
docBaseVO.setFileKey(newFileKey);
|
||||
});
|
||||
extAxProcessSignService.updateById(processSign);
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.axzo.nanopart.doc.api.anonymous.DocAnonymousDatabaseApi;
|
||||
import cn.axzo.nanopart.doc.api.index.request.CopyNodeRequest;
|
||||
import cn.axzo.workflow.common.enums.FileTypeEnum;
|
||||
import cn.axzo.workflow.common.model.dto.SignFileDTO;
|
||||
import cn.axzo.workflow.common.model.dto.VariableObjectDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnSignConf;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.model.doc.DocBaseVO;
|
||||
import cn.axzo.workflow.core.common.context.ProcessOperationContext;
|
||||
@ -112,6 +113,7 @@ public class FileArchiveProcessEventListener extends AbstractBpmnEventListener<P
|
||||
|
||||
private List<SignFileDTO> replaceTemplateVariable(List<SignFileDTO> docTemplates, ProcessEngineConfigurationImpl processEngineConfiguration, String processInstanceId) {
|
||||
List<SignFileDTO> archives = new ArrayList<>();
|
||||
List<VariableObjectDTO> wpsReplaceVariables = wpsUtil.getWpsReplaceVariables(processEngineConfiguration, processInstanceId);
|
||||
docTemplates.forEach(template -> {
|
||||
SignFileDTO signFileDTO = new SignFileDTO();
|
||||
signFileDTO.setId(template.getId());
|
||||
@ -119,7 +121,7 @@ public class FileArchiveProcessEventListener extends AbstractBpmnEventListener<P
|
||||
signFileDTO.setFileType(template.getFileType());
|
||||
signFileDTO.setFileCode(template.getFileCode());
|
||||
if (Objects.equals(template.getFileType(), FileTypeEnum.WORD) || Objects.equals(template.getFileType(), FileTypeEnum.EXCEL)) {
|
||||
String fileKey = wpsUtil.wpsFileVariableReplace(processEngineConfiguration, processInstanceId, template.getFileCode(), null);
|
||||
String fileKey = wpsUtil.wpsFileVariableReplace(wpsReplaceVariables, template.getFileCode(), null);
|
||||
signFileDTO.setFileKey(fileKey);
|
||||
}
|
||||
archives.add(signFileDTO);
|
||||
@ -177,10 +179,11 @@ public class FileArchiveProcessEventListener extends AbstractBpmnEventListener<P
|
||||
private void archiveFinalDocs(HistoricProcessInstance instance) {
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration = (ProcessEngineConfigurationImpl) getEngineConfiguration();
|
||||
ExtAxProcessSign processSign = extAxProcessSignService.findByProcessInstanceId(instance.getId());
|
||||
List<VariableObjectDTO> wpsReplaceVariables = wpsUtil.getWpsReplaceVariables(processEngineConfiguration, instance.getId());
|
||||
processSign.getFileArchive().stream().filter(i -> Objects.equals(i.getFileType(), FileTypeEnum.WORD)
|
||||
|| Objects.equals(i.getFileType(), FileTypeEnum.EXCEL))
|
||||
.forEach(docBaseVO -> {
|
||||
String newFileKey = wpsUtil.wpsFileVariableReplace(processEngineConfiguration, instance.getId(), docBaseVO.getFileCode(), docBaseVO.getFileKey());
|
||||
String newFileKey = wpsUtil.wpsFileVariableReplace(wpsReplaceVariables, docBaseVO.getFileCode(), docBaseVO.getFileKey());
|
||||
docBaseVO.setFileKey(newFileKey);
|
||||
});
|
||||
// 删除非 WPS 的临时文档
|
||||
|
||||
@ -6,6 +6,7 @@ import cn.axzo.oss.http.model.ApiSignUrlDownloadRequest;
|
||||
import cn.axzo.oss.http.model.ApiSignUrlDownloadResponse;
|
||||
import cn.axzo.workflow.client.feign.bpmn.ProcessInstanceApi;
|
||||
import cn.axzo.workflow.common.exception.WorkflowEngineException;
|
||||
import cn.axzo.workflow.common.model.dto.SignFileDTO;
|
||||
import cn.axzo.workflow.common.model.dto.SimpleDocDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BeforeProcessInstanceCreateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||
@ -43,6 +44,7 @@ import cn.axzo.workflow.core.engine.cmd.CustomGetModelDocsCmd;
|
||||
import cn.axzo.workflow.core.repository.mapper.ExtAxModelDocMapper;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessTaskService;
|
||||
import cn.axzo.workflow.core.service.ExtAxProcessSignService;
|
||||
import cn.axzo.workflow.core.service.ExtAxReadRecordService;
|
||||
import cn.axzo.workflow.server.common.annotation.ErrorReporter;
|
||||
import cn.axzo.workflow.server.common.annotation.RepeatSubmit;
|
||||
@ -109,6 +111,8 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController
|
||||
private ExtAxModelDocMapper extAxModelDocMapper;
|
||||
@Resource
|
||||
private SpringProcessEngineConfiguration processEngineConfiguration;
|
||||
@Resource
|
||||
private ExtAxProcessSignService extAxProcessSignService;
|
||||
|
||||
/**
|
||||
* 超管查询所有流程实例
|
||||
@ -504,4 +508,11 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController
|
||||
|
||||
return success(readRecordService.changeReadStatus(dto));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Operation(summary = "获取签署业务流程最后替换的文档 fileKey 集合")
|
||||
@GetMapping("/api/process/instance/final/docs")
|
||||
public CommonResponse<List<SignFileDTO>> getProcessInstanceFinalDocs(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId) {
|
||||
return success(extAxProcessSignService.findByProcessInstanceId(processInstanceId).getFileArchive());
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user