diff --git a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/wps/request/WpsEditUploadCompleteRequest.java b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/wps/request/WpsEditUploadCompleteRequest.java index 766ef35a..ade52260 100644 --- a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/wps/request/WpsEditUploadCompleteRequest.java +++ b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/wps/request/WpsEditUploadCompleteRequest.java @@ -82,4 +82,9 @@ public class WpsEditUploadCompleteRequest { * 获取上传地址时,要求原样带回的额外参数 */ private Map sendBackParams; + + /** + * 更新人 + */ + private String modifierId; } diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsedit/WpsEditManager.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsedit/WpsEditManager.java index 9ac35c2b..a66b96b6 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsedit/WpsEditManager.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsedit/WpsEditManager.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; +import cn.axzo.nanopart.doc.api.domain.FileAttributes; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component; @@ -17,6 +18,7 @@ import cn.axzo.nanopart.doc.api.wps.response.WpsEditUploadCompleteResponse; import cn.axzo.nanopart.doc.api.wps.response.WpsEditUploadPrepareResponse; import cn.axzo.nanopart.doc.config.DocProps; import cn.axzo.nanopart.doc.dao.IndexNodeDao; +import cn.axzo.nanopart.doc.dao.TemplateDatabaseDao; import cn.axzo.nanopart.doc.entity.IndexNode; import cn.axzo.nanopart.doc.file.index.IndexManager; import cn.axzo.nanopart.doc.file.mq.FileBroadcaster; @@ -25,6 +27,7 @@ import cn.axzo.oss.http.model.ApiSignUrlUploadRequest; import cn.axzo.oss.http.model.ApiSignUrlUploadResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; /** * 文档编辑 @@ -40,6 +43,7 @@ import lombok.extern.slf4j.Slf4j; public class WpsEditManager { private final IndexManager indexManager; + private final TemplateDatabaseDao templateDatabaseDao; private final IndexNodeDao indexNodeDao; private final DocOssGateway docOssGateway; private final FileBroadcaster fileBroadcaster; @@ -105,10 +109,14 @@ public class WpsEditManager { * 3 上传完成后,回调通知上传结果 * 说明:WebOffice 在将新版本文件上传到指定地址后,将会回调通知接入方 */ + @Transactional public WpsEditUploadCompleteResponse uploadComplete(WpsEditUploadCompleteRequest request) { log.info("wpsEditManager-uploadComplete-params,request:{}", request); - IndexNode node = indexNodeDao.findOrNull(request.getDocCode()); - indexManager.updateFileSize(node, request.getSize()); + //加锁 + IndexNode node = indexNodeDao.getForUpdateOrThrow(request.getDocCode()); + //当上传完成后,更新文件基础信息 + this.updateIndexNodeWhenUploadComplete(node, request); + return WpsEditUploadCompleteResponse.builder() .docCode(request.getDocCode()) .name(node.getFullFileName()) @@ -121,6 +129,21 @@ public class WpsEditManager { .build(); } + /** + * 当上传完成后,更新文件基础信息 + */ + private void updateIndexNodeWhenUploadComplete(IndexNode node, WpsEditUploadCompleteRequest request) { + FileAttributes fileAttributes = node.getOrCreateFileAttributes(); + if (StringUtils.isNotBlank(request.getModifierId())) { + fileAttributes.setModifierId(request.getModifierId()); + } + fileAttributes.setVersion(fileAttributes.getVersion() + 1); + indexNodeDao.updateAttributes(node); + indexNodeDao.updateFileSize(request.getDocCode(), request.getSize()); + + fileBroadcaster.fireFileSizeChanged(request.getDocCode()); + } + } \ No newline at end of file