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.NoArgsConstructor;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -23,7 +24,10 @@ import java.io.Serializable;
|
|||||||
public class CustomDocDTO implements Serializable {
|
public class CustomDocDTO implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = -8709597975507074853L;
|
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
|
* wps 文件的标识,通过{@link cn.axzo.nanopart.doc.api.anonymous.DocAnonymousDatabaseApi#createFile(cn.axzo.nanopart.doc.api.anonymous.request.AnonymousCreateFileRequest)} 接口创建文件后返回的 fileCode
|
||||||
*/
|
*/
|
||||||
private String fileCode;
|
private String fileCode;
|
||||||
|
/**
|
||||||
|
* oss 地址的文件标识
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "文件的 oss key 不能为空")
|
||||||
|
private String fileKey;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件的类型
|
* 文件的类型
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import lombok.Builder;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.apache.commons.lang3.math.NumberUtils;
|
import org.apache.commons.lang3.math.NumberUtils;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
@ -149,4 +150,14 @@ public class BpmnProcessInstanceCreateDTO extends BpmnProcessInstanceCreateWithF
|
|||||||
}
|
}
|
||||||
return null;
|
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) {
|
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(
|
List<CustomDocDTO> bizCustomDocs = Optional.ofNullable(
|
||||||
runtimeService.getVariable(processInstanceId, SIGN_BIZ_CUSTOM_DOCS, List.class))
|
runtimeService.getVariable(processInstanceId, SIGN_BIZ_CUSTOM_DOCS, List.class))
|
||||||
.orElse(Collections.emptyList());
|
.orElse(Collections.emptyList());
|
||||||
@ -1925,7 +1929,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
|||||||
}
|
}
|
||||||
|
|
||||||
int baseOrder = baseOpt.map(DocBaseVO::getOrder).orElse(0);
|
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);
|
AtomicInteger orderCounter = new AtomicInteger(baseOrder);
|
||||||
int delta = appendLast ? 1 : -1;
|
int delta = appendLast ? 1 : -1;
|
||||||
@ -1933,8 +1937,10 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
|||||||
List<DocBaseVO> docBaseVOS = BeanMapper.copyList(bizCustomDocs, DocBaseVO.class, (s, t) -> {
|
List<DocBaseVO> docBaseVOS = BeanMapper.copyList(bizCustomDocs, DocBaseVO.class, (s, t) -> {
|
||||||
t.setStatus(true);
|
t.setStatus(true);
|
||||||
t.setTempFile(false);
|
t.setTempFile(false);
|
||||||
|
t.setTemplateName(s.getFileName());
|
||||||
t.setOrder(orderCounter.addAndGet(delta));
|
t.setOrder(orderCounter.addAndGet(delta));
|
||||||
t.setTenantId(tenantId);
|
t.setTenantId(tenantId);
|
||||||
|
t.setFileRelationId(s.getFileKey());
|
||||||
});
|
});
|
||||||
|
|
||||||
if (appendLast) {
|
if (appendLast) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
|
|||||||
|
|
||||||
|
|
||||||
@MapperScan({"cn.axzo.workflow.core.**.mapper", "cn.axzo.workflow.admin.**.mapper"})
|
@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"})
|
@EnableFeignClients({"cn.axzo.oss", "cn.axzo.riven.client.feign", "cn.axzo.msg.center", "cn.axzo.basics.profiles"})
|
||||||
@SpringBootApplication(exclude = RabbitAutoConfiguration.class)
|
@SpringBootApplication(exclude = RabbitAutoConfiguration.class)
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
|
|||||||
@ -94,24 +94,28 @@ public class FirstCopyTemplateFileTaskEvent_105_Listener extends AbstractBpmnEve
|
|||||||
processSign.setProcessInstanceId(processInstanceId);
|
processSign.setProcessInstanceId(processInstanceId);
|
||||||
processSign.setSignType(signConfig.get().getSignType().getType());
|
processSign.setSignType(signConfig.get().getSignType().getType());
|
||||||
processSign.setPendingMessageId(signConfig.get().getSignPendingProperty().getPendingMessageId());
|
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.setDocTemplate(Collections.emptyList());
|
||||||
processSign.setFileArchive(Collections.emptyList());
|
processSign.setFileArchive(Collections.emptyList());
|
||||||
} else {
|
} else {
|
||||||
// 复制基础模板
|
// 复制基础模板
|
||||||
List<SignFileDTO> docTemplates = copyTempTemplate(docs);
|
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<>();
|
List<SignFileDTO> customDocTemplates = new ArrayList<>();
|
||||||
for (int i = 0; i < customDocs.size(); i++) {
|
for (CustomDocDTO customDoc : customDocs) {
|
||||||
customDocTemplates.add(SignFileDTO.builder()
|
customDocTemplates.add(SignFileDTO.builder()
|
||||||
.id(i - (i + 1L)) // 负数 ID,避免冲突
|
.id(customDoc.getId())
|
||||||
.fileName(customDocs.get(i).getFileName())
|
.fileName(customDoc.getFileName())
|
||||||
.templateName(customDocs.get(i).getFileName())
|
.templateName(customDoc.getFileName())
|
||||||
.fileTag(customDocs.get(i).getFileTag())
|
.fileTag(customDoc.getFileTag())
|
||||||
.fileCode(customDocs.get(i).getFileCode())
|
.fileCode(customDoc.getFileCode())
|
||||||
.fileType(customDocs.get(i).getFileType())
|
.fileKey(customDoc.getFileKey())
|
||||||
|
.fileType(customDoc.getFileType())
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,7 +146,7 @@ public class FirstCopyTemplateFileTaskEvent_105_Listener extends AbstractBpmnEve
|
|||||||
signFileDTO.setFileType(template.getFileType());
|
signFileDTO.setFileType(template.getFileType());
|
||||||
signFileDTO.setFileCode(template.getFileCode());
|
signFileDTO.setFileCode(template.getFileCode());
|
||||||
if (Objects.equals(template.getFileType(), FileTypeEnum.WORD) || Objects.equals(template.getFileType(), FileTypeEnum.EXCEL)) {
|
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);
|
signFileDTO.setFileKey(fileKey);
|
||||||
}
|
}
|
||||||
archives.add(signFileDTO);
|
archives.add(signFileDTO);
|
||||||
|
|||||||
@ -1,6 +1,9 @@
|
|||||||
package cn.axzo.workflow.server.controller.web;
|
package cn.axzo.workflow.server.controller.web;
|
||||||
|
|
||||||
import cn.axzo.framework.domain.ServiceException;
|
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.client.feign.bpmn.ProcessInstanceApi;
|
||||||
import cn.axzo.workflow.common.model.dto.VariableObjectDTO;
|
import cn.axzo.workflow.common.model.dto.VariableObjectDTO;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
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.azxo.framework.common.model.CommonResponse;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.flowable.bpmn.model.FlowElement;
|
import org.flowable.bpmn.model.FlowElement;
|
||||||
import org.flowable.common.engine.impl.interceptor.CommandExecutor;
|
import org.flowable.common.engine.impl.interceptor.CommandExecutor;
|
||||||
@ -54,6 +58,8 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -113,6 +119,8 @@ public class TestController {
|
|||||||
private TaskService taskService;
|
private TaskService taskService;
|
||||||
@Resource
|
@Resource
|
||||||
private SupportRefreshProperties refreshProperties;
|
private SupportRefreshProperties refreshProperties;
|
||||||
|
@Resource
|
||||||
|
private ServerFileServiceSdk serverFileServiceSdk;
|
||||||
|
|
||||||
@RepeatSubmit
|
@RepeatSubmit
|
||||||
@GetMapping("/test")
|
@GetMapping("/test")
|
||||||
@ -405,5 +413,15 @@ public class TestController {
|
|||||||
public CommonResponse<String> refreshProperties() {
|
public CommonResponse<String> refreshProperties() {
|
||||||
return CommonResponse.success(JSON.toJSONString(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