From d01c5e431475f5c1b035c83630e9ace1fcbf8049 Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Feb 2025 16:45:39 +0800 Subject: [PATCH] =?UTF-8?q?REQ-3581:=20=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ess/server/dao/EssContractDao.java | 2 +- .../nanopart/ess/server/dao/EssLogDao.java | 10 ++++++ .../ess/server/entity/EssContract.java | 4 ++- .../server/entity/domain/OrgRecipientId.java | 14 --------- .../{dao => entity}/domain/OuAndPersonId.java | 2 +- .../nanopart/ess/server/ess/EssService.java | 31 ++++++++++++++----- .../ess/server/ess/PersonResignListener.java | 11 ++++--- .../nanopart/ess/server/ess/QueryService.java | 2 +- .../ess/server/ess/support/EssSupport.java | 10 +----- 9 files changed, 47 insertions(+), 39 deletions(-) delete mode 100644 ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/domain/OrgRecipientId.java rename ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/{dao => entity}/domain/OuAndPersonId.java (93%) 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 a54cf1e2..a8750c93 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 @@ -68,7 +68,7 @@ public class EssContractDao extends ServiceImpl .update(); } - public void setOssKey(EssContract contract, String fileKey) { + public void setOssFileKey(EssContract contract, String fileKey) { lambdaUpdate() .eq(EssContract::getId, contract.getId()) .set(EssContract::getOssFileKey, fileKey) diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssLogDao.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssLogDao.java index e8655e6f..edc5b84b 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssLogDao.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssLogDao.java @@ -1,9 +1,11 @@ package cn.axzo.nanopart.ess.server.dao; +import cn.axzo.nanopart.ess.api.utils.YesOrNo; import cn.axzo.nanopart.ess.server.entity.EssLog; import cn.axzo.nanopart.ess.server.mapper.EssLogMapper; import cn.axzo.nanopart.ess.server.utils.BizAssertions; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.base.Throwables; import org.springframework.stereotype.Repository; /** @@ -17,9 +19,17 @@ public class EssLogDao extends ServiceImpl { } public void log(String context, Object subject, Object... logContents) { + log(null, context, subject, logContents); + } + + public void log(Exception exception, String context, Object subject, Object... logContents) { EssLog log = new EssLog(); log.setContext(context); log.setSubject(String.valueOf(subject)); + if (exception != null) { + log.setIsError(YesOrNo.YES); + log.addLogContent("exception", Throwables.getStackTraceAsString(exception)); + } if (logContents != null && logContents.length > 0) { BizAssertions.assertTrue(logContents.length % 2 == 0, "logContents must be even"); for (int i = 0; i < logContents.length; i += 2) { 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 296d570a..b57af6c2 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 @@ -144,7 +144,9 @@ public class EssContract extends BaseEntity { .findFirst(); } - public boolean isAllSignPersonPreset() { + public boolean isApproversPreset() { + if (approvers == null) + return false; return approvers.stream().allMatch(Approver::isSignPersonPresent); } diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/domain/OrgRecipientId.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/domain/OrgRecipientId.java deleted file mode 100644 index 67464de3..00000000 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/domain/OrgRecipientId.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.axzo.nanopart.ess.server.entity.domain; - -import lombok.Getter; -import lombok.Setter; - -/** - * @author yanglin - */ -@Setter -@Getter -public class OrgRecipientId { - private Long ouId; - private String recipientId; -} \ No newline at end of file diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/domain/OuAndPersonId.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/domain/OuAndPersonId.java similarity index 93% rename from ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/domain/OuAndPersonId.java rename to ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/domain/OuAndPersonId.java index a2759188..a4158607 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/domain/OuAndPersonId.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/domain/OuAndPersonId.java @@ -1,4 +1,4 @@ -package cn.axzo.nanopart.ess.server.dao.domain; +package cn.axzo.nanopart.ess.server.entity.domain; import lombok.AccessLevel; import lombok.Getter; 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 435b13f0..43101e49 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 @@ -85,7 +85,11 @@ public class EssService { } public void essAddSealAuthorization(AddSealAuthorizationRequest request) { - essLogDao.logRequest("essAddSealAuthorization", request.getEssSealId(), request); + String subject = IdBuilder.builder() + .append(request.getEssSealId()) + .append(request.getPersonId()) + .build(); + essLogDao.logRequest("essAddSealAuthorization", subject, request); SealAndPerson sealAndPerson = getSealAndPersonOrThrow(request); EssSealPerson sealPerson = sealAndPerson.getSealPerson(); if (sealPerson.getIsAuthorized().isYes()) @@ -99,7 +103,11 @@ public class EssService { } public void essRemoveSealAuthorization(RemoveSealAuthorizationRequest request) { - essLogDao.logRequest("essRemoveSealAuthorization", request.getEssSealId(), request); + String subject = IdBuilder.builder() + .append(request.getEssSealId()) + .append(request.getPersonId()) + .build(); + essLogDao.logRequest("essRemoveSealAuthorization", subject, request); SealAndPerson sealAndPerson = getSealAndPersonOrThrow(request); if (sealAndPerson.getSealPerson().getIsAuthorized().isNo()) return; @@ -120,7 +128,12 @@ public class EssService { } public String getContractSignUrl(GetSignUrlRequest request) { - essLogDao.logRequest("getContractSignUrl", request.getEssContractId(), request); + String subject = IdBuilder.builder() + .append(request.getEssContractId()) + .append(request.getOuId()) + .append(request.getPersonId()) + .build(); + essLogDao.logRequest("getContractSignUrl", subject, request); EssPerson signPerson = essPersonDao.findOrNull(request); BizAssertions.assertNotNull(signPerson, "当前签署人员未加入单位, 无法签署"); EssContract contract = essContractDao.getOrThrow(request.getEssContractId()); @@ -137,7 +150,7 @@ public class EssService { ? signUrlInfo.getSignQrcodeUrl() : signUrlInfo.getSignUrl(); }; - if (contract.isAllSignPersonPreset()) + if (contract.isApproversPreset()) return signUrlFun.apply(null); BizAssertions.assertFalse(StringUtils.isBlank(request.getRecipientId()), "存在动态签署人的情况下, recipientId不能为空"); @@ -173,17 +186,19 @@ public class EssService { public void maybeUploadContractToOss(EssContract contract) { essSupport.asyncExec(() -> { + EssContract c = essContractDao.findOrNull(contract.getEssContractId()); + if (c == null || !c.shouldDownloadContract() || StringUtils.isNotBlank(c.getOssFileKey())) + return; try { - EssContract c = essContractDao.findOrNull(contract.getEssContractId()); - if (c == null || !c.shouldDownloadContract() || StringUtils.isNotBlank(c.getOssFileKey())) - return; String pdfUrl = getContractPDFUrlFromEss(c); String fileName = String.format("%s.pdf", c.getContractName()); String fileKey = ossService.uploadToOss(pdfUrl, fileName); - essContractDao.setOssKey(c, fileKey); + essContractDao.setOssFileKey(c, fileKey); + essLogDao.log("uploadContractToOss", c.getEssContractId()); log.info("上传合同到OSS成功, essContractId={}", c.getEssContractId()); } catch (Exception e) { log.warn("上传合同到OSS失败", e); + essLogDao.log(e, "uploadContractToOss", c.getEssContractId()); } }); } diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/PersonResignListener.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/PersonResignListener.java index f4abcbdc..f8f2e140 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/PersonResignListener.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/PersonResignListener.java @@ -10,6 +10,7 @@ import cn.axzo.nanopart.ess.server.dao.EssOrgDao; import cn.axzo.nanopart.ess.server.dao.EssPersonDao; import cn.axzo.nanopart.ess.server.entity.EssOrg; import cn.axzo.nanopart.ess.server.entity.EssPerson; +import cn.axzo.nanopart.ess.server.utils.IdBuilder; import com.alibaba.fastjson.JSON; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -65,15 +66,17 @@ public class PersonResignListener extends BaseListener EssOrg org = essOrgDao.findOrNull(event.getOuId()); if (org == null) return; EssPerson person = essPersonDao.findOrNull(event.getOuId(), event.getPersonId()); + String subject = IdBuilder.builder() + .append(event.getOuId()) + .append(event.getPersonId()) + .build(); if (person == null) { - essLogDao.log("personResigned", event.getOuId(), - "event", event, "isAuthorized", false); + essLogDao.log("personResigned", subject, "event", event, "isAuthorized", false); return; } EssPerson superAdmin = orgManager.getSuperAdminOrThrow(event.getOuId()); boolean isSuperAdmin = superAdmin.getPersonId().equals(event.getPersonId()); - essLogDao.log("personResigned", person.getOuId(), - "event", event, "isSuperAdmin", isSuperAdmin); + essLogDao.log("personResigned", subject, "event", event, "isSuperAdmin", isSuperAdmin); if (isSuperAdmin) { log.info("ignore super admin resigned: {}", JSON.toJSONString(person)); return; diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/QueryService.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/QueryService.java index 33028d75..ff3ce22d 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/QueryService.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/QueryService.java @@ -17,7 +17,7 @@ import cn.axzo.nanopart.ess.server.dao.EssOrgDao; import cn.axzo.nanopart.ess.server.dao.EssPersonDao; import cn.axzo.nanopart.ess.server.dao.EssSealDao; import cn.axzo.nanopart.ess.server.dao.EssSealPersonDao; -import cn.axzo.nanopart.ess.server.dao.domain.OuAndPersonId; +import cn.axzo.nanopart.ess.server.entity.domain.OuAndPersonId; import cn.axzo.nanopart.ess.server.entity.EssOrg; import cn.axzo.nanopart.ess.server.entity.EssPerson; import cn.axzo.nanopart.ess.server.entity.EssSeal; diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/support/EssSupport.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/support/EssSupport.java index b403cf61..bf2c0cf6 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/support/EssSupport.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/support/EssSupport.java @@ -2,7 +2,6 @@ package cn.axzo.nanopart.ess.server.ess.support; import cn.axzo.basics.profiles.api.UserProfileServiceApi; import cn.axzo.basics.profiles.dto.basic.PersonProfileDto; -import cn.axzo.basics.profiles.dto.request.QueryPersonProfileByIdOrPhoneDto; import cn.axzo.maokai.api.client.OrganizationalUnitApi; import cn.axzo.maokai.api.vo.request.OrganizationalUnitQuery; import cn.axzo.maokai.api.vo.response.OrganizationalUnitVO; @@ -41,7 +40,7 @@ public class EssSupport { private final ExecutorService executor = new ThreadPoolExecutor(1, 5, 0L, TimeUnit.MILLISECONDS, - new ArrayBlockingQueue<>(200), + new ArrayBlockingQueue<>(1024), new NamedThreadFactory(EssSupport.class.getName(), false), new CallerRunsPolicy()); @@ -93,13 +92,6 @@ public class EssSupport { return person; } - public Optional findPersonByPhone(String phone) { - QueryPersonProfileByIdOrPhoneDto request = new QueryPersonProfileByIdOrPhoneDto(); - request.setPhones(Collections.singletonList(phone)); - List profiles = assertResponse(userProfileServiceApi.findPersonProfileListByIdOrPhone(request)); - return CollectionUtils.isEmpty(profiles) ? Optional.empty() : Optional.of(profiles.get(0)); - } - public Optional findPersonProfile(OrgPerson orgPerson) { CommonResponse response = userProfileServiceApi.getPersonProfile(orgPerson.getPersonId()); if (response.getCode() == 404)