feat(REQ-3769) - 签署业务中, 增加流程实例的几个生命周期操作文档逻辑

This commit is contained in:
wangli 2025-04-03 18:11:21 +08:00
parent dc3d7a0641
commit 8a9161869c

View File

@ -22,6 +22,7 @@ import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent;
import org.flowable.common.engine.impl.interceptor.CommandExecutor;
import org.flowable.engine.HistoryService;
import org.flowable.engine.ProcessEngineConfiguration;
import org.flowable.engine.delegate.event.FlowableProcessStartedEvent;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.engine.impl.util.CommandContextUtil;
@ -30,6 +31,7 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Scope;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
@ -64,6 +66,11 @@ public class FileArchiveProcessEventListener extends AbstractBpmnEventListener<P
@Resource
private DocAnonymousDatabaseApi docApi;
/**
* 创建流程成功判断是否是签署业务如果是签署业务则进行第一次模型文件的副本创建作为与当前流程对应版本使用
*
* @param event
*/
@Override
public void onCreated(FlowableEngineEntityEvent event) {
Process mainProcess = ProcessDefinitionUtil.getBpmnModel(event.getProcessDefinitionId()).getMainProcess();
@ -74,7 +81,10 @@ public class FileArchiveProcessEventListener extends AbstractBpmnEventListener<P
// 流程发起时需要基于基础文档复制一份模板
ProcessEngineConfigurationImpl processEngineConfiguration = (ProcessEngineConfigurationImpl) getEngineConfiguration();
CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor();
List<DocBaseVO> docs = commandExecutor.execute(new CustomGetModelDocsCmd(event.getProcessInstanceId(), extAxModelDocMapper));
List<DocBaseVO> docs = commandExecutor.execute(new CustomGetModelDocsCmd(event.getProcessInstanceId(), true, extAxModelDocMapper));
if (CollectionUtils.isEmpty(docs)) {
return;
}
List<SignFileDTO> files = new ArrayList<>();
docs.forEach(doc -> {
@ -111,6 +121,35 @@ public class FileArchiveProcessEventListener extends AbstractBpmnEventListener<P
extAxProcessSignService.save(processSign);
}
/**
* 流程实例启用成功后进行初始数据的模板变量替换
*
* @param event
*/
@Override
public void onStarted(FlowableProcessStartedEvent event) {
// TODO 将拷贝后的文档进行初始的模板变量替换
ExtAxProcessSign processSign = extAxProcessSignService.findByProcessInstanceId(event.getNestedProcessInstanceId());
if (CollectionUtils.isEmpty(processSign.getFileArchive())) {
return;
}
List<SignFileDTO> archives = new ArrayList<>();
processSign.getDocTemplate().forEach(template -> {
SignFileDTO signFileDTO = new SignFileDTO();
signFileDTO.setId(template.getId());
signFileDTO.setFileTag(template.getFileTag());
signFileDTO.setFileType(template.getFileType());
// TODO 替换变量后获得新生成的文档code
signFileDTO.setFileCode("");
archives.add(signFileDTO);
});
processSign.setFileArchive(archives);
extAxProcessSignService.updateById(processSign);
}
@Override
public void onCompleted(FlowableEngineEntityEvent event) {
// TODO 将该模型关联的文档统一进行归档, 加载变量 并发送业务待办
@ -127,18 +166,20 @@ public class FileArchiveProcessEventListener extends AbstractBpmnEventListener<P
Map<String, Object> processVariables = instance.getProcessVariables();
// 文件归档将审批过程中产生的数据全部替换文档模板变量
archiveEnableDocs(processVariables, instance);
archiveFinalDocs(processVariables, instance);
// 发送业务待办
sendSignPending(signConfig.get(), processVariables);
}
private void archiveEnableDocs(Map<String, Object> processVariables, HistoricProcessInstance instance) {
private void archiveFinalDocs(Map<String, Object> processVariables, HistoricProcessInstance instance) {
ProcessEngineConfigurationImpl processEngineConfiguration = (ProcessEngineConfigurationImpl) getEngineConfiguration();
List<String> fileTags = getFileTags(processVariables);
List<DocBaseVO> needFirstArchiveDocs = processEngineConfiguration.getCommandExecutor().execute(new CustomGetModelDocsCmd(instance.getId(), extAxModelDocMapper))
List<DocBaseVO> needFirstArchiveDocs = processEngineConfiguration.getCommandExecutor().execute(new CustomGetModelDocsCmd(instance.getId(), true, extAxModelDocMapper))
.stream().filter(i -> fileTags.contains(i.getTag())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(needFirstArchiveDocs)) {
return;
}
List<SignFileDTO> fileArchives = new ArrayList<>();
needFirstArchiveDocs.forEach(docBaseVO -> {
// TODO 进行文档变量替换替换后返回 fileKey