Merge branch 'feature/countersign_ext' into dev
# Conflicts: # workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java
This commit is contained in:
commit
a7e28e6914
@ -7,6 +7,7 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
@ -23,7 +24,10 @@ import java.io.Serializable;
|
||||
public class CustomDocDTO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -8709597975507074853L;
|
||||
|
||||
/**
|
||||
* 该属性内部使用,无需赋值
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
* 文件名称,可能会包含变量
|
||||
*/
|
||||
@ -40,6 +44,11 @@ public class CustomDocDTO implements Serializable {
|
||||
* wps 文件的标识,通过{@link cn.axzo.nanopart.doc.api.anonymous.DocAnonymousDatabaseApi#createFile(cn.axzo.nanopart.doc.api.anonymous.request.AnonymousCreateFileRequest)} 接口创建文件后返回的 fileCode
|
||||
*/
|
||||
private String fileCode;
|
||||
/**
|
||||
* oss 地址的文件标识
|
||||
*/
|
||||
@NotBlank(message = "文件的 oss key 不能为空")
|
||||
private String fileKey;
|
||||
|
||||
/**
|
||||
* 文件的类型
|
||||
|
||||
@ -11,6 +11,7 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
@ -149,4 +150,14 @@ public class BpmnProcessInstanceCreateDTO extends BpmnProcessInstanceCreateWithF
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<CustomDocDTO> getCustomDocs() {
|
||||
if (CollectionUtils.isEmpty(customDocs)) {
|
||||
return customDocs;
|
||||
}
|
||||
for (int i = 0; i < customDocs.size(); i++) {
|
||||
customDocs.get(i).setId(i - (i + 1L)); // 负数 ID,避免冲突
|
||||
}
|
||||
return customDocs;
|
||||
}
|
||||
}
|
||||
@ -1907,6 +1907,10 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
}
|
||||
|
||||
private List<DocBaseVO> getAndAddBizCustomDocs(String processInstanceId, List<DocBaseVO> docs) {
|
||||
HistoricProcessInstance processInstance = null;
|
||||
if (CollectionUtils.isEmpty(docs)) {
|
||||
processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
||||
}
|
||||
List<CustomDocDTO> bizCustomDocs = Optional.ofNullable(
|
||||
runtimeService.getVariable(processInstanceId, SIGN_BIZ_CUSTOM_DOCS, List.class))
|
||||
.orElse(Collections.emptyList());
|
||||
@ -1925,7 +1929,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
}
|
||||
|
||||
int baseOrder = baseOpt.map(DocBaseVO::getOrder).orElse(0);
|
||||
String tenantId = baseOpt.map(DocBaseVO::getTenantId).orElse(null);
|
||||
String tenantId = baseOpt.map(DocBaseVO::getTenantId).orElse(Objects.nonNull(processInstance) ? processInstance.getTenantId() : null);
|
||||
|
||||
AtomicInteger orderCounter = new AtomicInteger(baseOrder);
|
||||
int delta = appendLast ? 1 : -1;
|
||||
@ -1933,8 +1937,10 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
List<DocBaseVO> docBaseVOS = BeanMapper.copyList(bizCustomDocs, DocBaseVO.class, (s, t) -> {
|
||||
t.setStatus(true);
|
||||
t.setTempFile(false);
|
||||
t.setTemplateName(s.getFileName());
|
||||
t.setOrder(orderCounter.addAndGet(delta));
|
||||
t.setTenantId(tenantId);
|
||||
t.setFileRelationId(s.getFileKey());
|
||||
});
|
||||
|
||||
if (appendLast) {
|
||||
|
||||
@ -12,7 +12,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
|
||||
@MapperScan({"cn.axzo.workflow.core.**.mapper", "cn.axzo.workflow.admin.**.mapper"})
|
||||
@ComponentScan({"cn.axzo.workflow"})
|
||||
@ComponentScan({"cn.axzo.workflow", "cn.axzo.oss"})
|
||||
@EnableFeignClients({"cn.axzo.oss", "cn.axzo.riven.client.feign", "cn.axzo.msg.center", "cn.axzo.basics.profiles"})
|
||||
@SpringBootApplication(exclude = RabbitAutoConfiguration.class)
|
||||
@EnableTransactionManagement
|
||||
|
||||
@ -94,24 +94,28 @@ public class FirstCopyTemplateFileTaskEvent_105_Listener extends AbstractBpmnEve
|
||||
processSign.setProcessInstanceId(processInstanceId);
|
||||
processSign.setSignType(signConfig.get().getSignType().getType());
|
||||
processSign.setPendingMessageId(signConfig.get().getSignPendingProperty().getPendingMessageId());
|
||||
if (CollectionUtils.isEmpty(docs)) {
|
||||
|
||||
// 业务自定义文档
|
||||
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
|
||||
List<CustomDocDTO> customDocs = runtimeService.getVariable(processInstanceId, SIGN_BIZ_CUSTOM_DOCS, List.class);
|
||||
|
||||
if (CollectionUtils.isEmpty(docs) && CollectionUtils.isEmpty(customDocs)) {
|
||||
processSign.setDocTemplate(Collections.emptyList());
|
||||
processSign.setFileArchive(Collections.emptyList());
|
||||
} else {
|
||||
// 复制基础模板
|
||||
List<SignFileDTO> docTemplates = copyTempTemplate(docs);
|
||||
// 处理业务自定义文档
|
||||
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
|
||||
List<CustomDocDTO> customDocs = runtimeService.getVariable(processInstanceId, SIGN_BIZ_CUSTOM_DOCS, List.class);
|
||||
|
||||
List<SignFileDTO> customDocTemplates = new ArrayList<>();
|
||||
for (int i = 0; i < customDocs.size(); i++) {
|
||||
for (CustomDocDTO customDoc : customDocs) {
|
||||
customDocTemplates.add(SignFileDTO.builder()
|
||||
.id(i - (i + 1L)) // 负数 ID,避免冲突
|
||||
.fileName(customDocs.get(i).getFileName())
|
||||
.templateName(customDocs.get(i).getFileName())
|
||||
.fileTag(customDocs.get(i).getFileTag())
|
||||
.fileCode(customDocs.get(i).getFileCode())
|
||||
.fileType(customDocs.get(i).getFileType())
|
||||
.id(customDoc.getId())
|
||||
.fileName(customDoc.getFileName())
|
||||
.templateName(customDoc.getFileName())
|
||||
.fileTag(customDoc.getFileTag())
|
||||
.fileCode(customDoc.getFileCode())
|
||||
.fileKey(customDoc.getFileKey())
|
||||
.fileType(customDoc.getFileType())
|
||||
.build());
|
||||
}
|
||||
|
||||
@ -142,7 +146,7 @@ public class FirstCopyTemplateFileTaskEvent_105_Listener extends AbstractBpmnEve
|
||||
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(wpsReplaceVariables, template.getFileCode(), null, template.getTemplateName() + template.getFileType().getSuffix());
|
||||
String fileKey = wpsUtil.wpsFileVariableReplace(wpsReplaceVariables, template.getFileCode(), template.getFileKey(), template.getTemplateName() + template.getFileType().getSuffix());
|
||||
signFileDTO.setFileKey(fileKey);
|
||||
}
|
||||
archives.add(signFileDTO);
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
package cn.axzo.workflow.server.controller.web;
|
||||
|
||||
import cn.axzo.framework.domain.ServiceException;
|
||||
import cn.axzo.oss.http.api.ServerFileServiceSdk;
|
||||
import cn.axzo.oss.http.model.ServerFileUploadSdkRequest;
|
||||
import cn.axzo.oss.http.model.ServerFileUploadSdkResponse;
|
||||
import cn.axzo.workflow.client.feign.bpmn.ProcessInstanceApi;
|
||||
import cn.axzo.workflow.common.model.dto.VariableObjectDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||
@ -23,6 +26,7 @@ import cn.axzo.workflow.server.xxljob.SpecifyProcessInstanceSyncEsJobHandler;
|
||||
import cn.azxo.framework.common.model.CommonResponse;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.flowable.bpmn.model.FlowElement;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandExecutor;
|
||||
@ -54,6 +58,8 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -113,6 +119,8 @@ public class TestController {
|
||||
private TaskService taskService;
|
||||
@Resource
|
||||
private SupportRefreshProperties refreshProperties;
|
||||
@Resource
|
||||
private ServerFileServiceSdk serverFileServiceSdk;
|
||||
|
||||
@RepeatSubmit
|
||||
@GetMapping("/test")
|
||||
@ -405,5 +413,15 @@ public class TestController {
|
||||
public CommonResponse<String> refreshProperties() {
|
||||
return CommonResponse.success(JSON.toJSONString(refreshProperties));
|
||||
}
|
||||
|
||||
@PostMapping("/server/file/upload")
|
||||
@SneakyThrows
|
||||
public CommonResponse<String> serverFileUpload(@RequestBody ServerFileUploadSdkRequest request) {
|
||||
String filePath = "/Users/wangli/Downloads/锦绣碧湖B区B-1工程模板施工专项方案4-30.docx";
|
||||
byte[] fileBytes = Files.readAllBytes(Paths.get(filePath));
|
||||
request.setFileContent(fileBytes);
|
||||
ServerFileUploadSdkResponse serverFileUploadSdkResponse = serverFileServiceSdk.uploadFile(request);
|
||||
return CommonResponse.success(JSON.toJSONString(serverFileUploadSdkResponse));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user