From d9f155b9fe9afff8189de9c042dcde17325a5d89 Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Feb 2025 13:46:59 +0800 Subject: [PATCH] =?UTF-8?q?REQ-3581:=20=E4=B8=8B=E8=BD=BD=E5=90=88?= =?UTF-8?q?=E5=90=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/nanopart/ess/api/EssApi.java | 10 +++++++++- .../request/SaveContractSnapshotRequest.java | 20 +++++++++++++++++++ .../ess/server/dao/EssContractDao.java | 8 ++++++++ .../ess/server/entity/EssContract.java | 11 ++++++++++ .../nanopart/ess/server/ess/EssService.java | 14 +++++++++++-- .../server/ess/controller/ApiController.java | 7 +++++++ 6 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/SaveContractSnapshotRequest.java diff --git a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/EssApi.java b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/EssApi.java index c76a4aae..dc26cfbd 100644 --- a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/EssApi.java +++ b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/EssApi.java @@ -16,6 +16,7 @@ import cn.axzo.nanopart.ess.api.request.GetSignUrlRequest; import cn.axzo.nanopart.ess.api.request.RemoveSealAuthorizationRequest; import cn.axzo.nanopart.ess.api.request.RemoveSealPersonRequest; import cn.axzo.nanopart.ess.api.request.RevokeContractRequest; +import cn.axzo.nanopart.ess.api.request.SaveContractSnapshotRequest; import cn.axzo.nanopart.ess.api.response.CreateConsoleLoginUrlResponse; import cn.axzo.nanopart.ess.api.response.CreateContractByFileResponse; import cn.axzo.nanopart.ess.api.response.DownloadSingedContractPdfResponse; @@ -115,12 +116,19 @@ public interface EssApi { @RequestBody @Valid GetSignUrlRequest request); /** - * 下载合同PDF. 下载链接有效期为5分钟 + * 获取合同PDF文件地址. 下载链接有效期为5分钟 */ @PostMapping("api/ess/getContractPDFUrl") ApiResult getContractPDFUrl( @RequestBody @Valid DownloadSingedContractPdfRequest request); + /** + * 从腾讯电子签下载合同PDF文件 + */ + @PostMapping("api/ess/saveContractSnapshot") + ApiResult saveContractSnapshot( + @RequestBody @Valid SaveContractSnapshotRequest request); + /** * 撤销合同 */ diff --git a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/SaveContractSnapshotRequest.java b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/SaveContractSnapshotRequest.java new file mode 100644 index 00000000..204134d9 --- /dev/null +++ b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/SaveContractSnapshotRequest.java @@ -0,0 +1,20 @@ +package cn.axzo.nanopart.ess.api.request; + +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +/** + * @author yanglin + */ +@Setter @Getter +public class SaveContractSnapshotRequest { + + /** + * 合同id + */ + @NotBlank(message = "essContractId不能为空") + private String essContractId; + +} \ No newline at end of file diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssContractDao.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssContractDao.java index 905c00b7..a54cf1e2 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssContractDao.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssContractDao.java @@ -75,4 +75,12 @@ public class EssContractDao extends ServiceImpl .update(); } + public void updateExt(EssContract contract) { + if (contract.getRecordExt() == null) + return; + lambdaUpdate() + .eq(EssContract::getId, contract.getId()) + .set(EssContract::getRecordExt, JSON.toJSONString(contract.getRecordExt())) + .update(); + } } \ No newline at end of file diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/EssContract.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/EssContract.java index e63c018a..032f31bc 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/EssContract.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/EssContract.java @@ -103,6 +103,12 @@ public class EssContract extends BaseEntity { @TableField(typeHandler = FastjsonTypeHandler.class) private RecordExt recordExt; + public RecordExt getOrCreateExt() { + if (recordExt == null) + recordExt = new RecordExt(); + return recordExt; + } + public Assignment getOrCreateAssignment() { if (assignment == null) assignment = new Assignment(); @@ -142,6 +148,10 @@ public class EssContract extends BaseEntity { return approvers.stream().allMatch(Approver::isSignPersonPresent); } + public boolean downloadContract() { + return isFinalState() || getOrCreateExt().isDownloadContract(); + } + public boolean isFinalState() { return state.isFinalState(); } @@ -158,6 +168,7 @@ public class EssContract extends BaseEntity { @Setter @Getter public static class RecordExt { + private boolean downloadContract; } // @formatter:off diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/EssService.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/EssService.java index 0fdc05ee..7ae425e1 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/EssService.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/EssService.java @@ -22,7 +22,6 @@ import cn.axzo.nanopart.ess.server.entity.EssSeal; import cn.axzo.nanopart.ess.server.entity.EssSealPerson; import cn.axzo.nanopart.ess.server.ess.domain.OrgAndPerson; import cn.axzo.nanopart.ess.server.ess.domain.SealAndPerson; -import cn.axzo.nanopart.ess.server.ess.support.EssProps; import cn.axzo.nanopart.ess.server.ess.support.EssSupport; import cn.axzo.nanopart.ess.server.ess.support.OssService; import cn.axzo.nanopart.ess.server.utils.BizAssertions; @@ -32,6 +31,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.support.TransactionTemplate; import java.util.function.Function; @@ -52,10 +52,10 @@ public class EssService { private final EssSealPersonDao essSealPersonDao; private final EssContractDao essContractDao; private final EssPersonDao essPersonDao; - private final EssProps essProps; private final OssService ossService; private final EssLogDao essLogDao; private final EssSupport essSupport; + private final TransactionTemplate transactionTemplate; public String createConsoleLoginUrl(CreateConsoleLoginUrlRequest request) { essLogDao.logRequest("createConsoleLoginUrl", request.getPersonId(), request); @@ -158,6 +158,16 @@ public class EssService { return getContractPDFUrlFromEss(contract); } + public void saveContractSnapshot(String essContractId) { + EssContract c = transactionTemplate.execute(unused -> { + EssContract contract = essContractDao.getOrThrow(essContractId); + contract.getRecordExt().setDownloadContract(true); + essContractDao.updateExt(contract); + return contract; + }); + maybeUploadContractToOss(c); + } + public String getContractPDFUrlFromEss(EssContract contract) { EssPerson creator = orgManager.getSuperAdminOrThrow(contract.getCreatorOuId()); return essClient.getContractPDFUrl(creator, contract.getEssContractId()); diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/ApiController.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/ApiController.java index 6617f172..9e01f715 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/ApiController.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/ApiController.java @@ -19,6 +19,7 @@ import cn.axzo.nanopart.ess.api.request.GetSignUrlRequest; import cn.axzo.nanopart.ess.api.request.RemoveSealAuthorizationRequest; import cn.axzo.nanopart.ess.api.request.RemoveSealPersonRequest; import cn.axzo.nanopart.ess.api.request.RevokeContractRequest; +import cn.axzo.nanopart.ess.api.request.SaveContractSnapshotRequest; import cn.axzo.nanopart.ess.api.response.CreateConsoleLoginUrlResponse; import cn.axzo.nanopart.ess.api.response.CreateContractByFileResponse; import cn.axzo.nanopart.ess.api.response.DownloadSingedContractPdfResponse; @@ -125,6 +126,12 @@ class ApiController implements EssApi { return ApiResult.ok(response); } + @Override + public ApiResult saveContractSnapshot(SaveContractSnapshotRequest request) { + essService.saveContractSnapshot(request.getEssContractId()); + return ApiResult.ok(); + } + @Override public ApiResult revokeContract(RevokeContractRequest request) { contractManager.revokeContract(request);