From 4c77ecd3b20f419fe8f83c16115b16f39edff3ce Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Feb 2025 10:35:11 +0800 Subject: [PATCH] =?UTF-8?q?REQ-3581:=20=E4=BF=9D=E5=AD=98=E6=92=A4?= =?UTF-8?q?=E9=94=80=E5=90=88=E5=90=8C=E7=9A=84=E5=8E=9F=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/domain/contract/EssContractInfo.java | 4 ++++ .../ess/server/dao/EssContractDao.java | 5 ++++- .../ess/server/entity/EssContract.java | 20 ++++++++++++++----- .../ess/server/ess/ContractManager.java | 7 ++++--- .../ess/controller/CallbackController.java | 2 +- 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/contract/EssContractInfo.java b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/contract/EssContractInfo.java index a988bae7..ba0bd9d9 100644 --- a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/contract/EssContractInfo.java +++ b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/contract/EssContractInfo.java @@ -58,4 +58,8 @@ public class EssContractInfo { */ private List approveDetails; + /** + * 腾讯电子签那边的消息 + */ + private String essMessage; } \ 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 f6c60748..905c00b7 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 @@ -9,6 +9,7 @@ import cn.axzo.nanopart.ess.server.utils.BizAssertions; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Repository; import java.util.List; @@ -55,10 +56,12 @@ public class EssContractDao extends ServiceImpl public void updateState(EssContract contract, EssContractState state, - List approveDetailsOrPreserve) { + List approveDetailsOrPreserve, + String essMessage) { lambdaUpdate() .eq(EssContract::getId, contract.getId()) .set(EssContract::getState, state) + .set(StringUtils.isNotBlank(essMessage), EssContract::getEssMessage, essMessage) .set(CollectionUtils.isNotEmpty(approveDetailsOrPreserve), EssContract::getApproveDetails, approveDetailsOrPreserve == null ? "[]" : JSON.toJSONString(approveDetailsOrPreserve)) 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 df6a3413..bea0355a 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 @@ -4,8 +4,10 @@ import cn.axzo.foundation.dao.support.mysql.type.BaseListTypeHandler; import cn.axzo.nanopart.ess.api.domain.contract.Approver; import cn.axzo.nanopart.ess.api.domain.contract.EssApproveDetail; import cn.axzo.nanopart.ess.api.enums.Constraint; +import cn.axzo.nanopart.ess.api.enums.EssContractApproveState; import cn.axzo.nanopart.ess.api.enums.EssContractState; import cn.axzo.nanopart.ess.server.entity.domain.Assignment; +import cn.axzo.nanopart.ess.server.utils.BizAssertions; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import com.alibaba.fastjson.JSON; import com.alibaba.nacos.common.utils.UuidUtils; @@ -16,7 +18,6 @@ import lombok.Getter; import lombok.Setter; import java.util.List; -import java.util.Objects; import java.util.Optional; /** @@ -86,6 +87,11 @@ public class EssContract extends BaseEntity { @TableField(typeHandler = ApproveDetailListHandler.class) private List approveDetails; + /** + * 腾讯电子签那边的消息 + */ + private String essMessage; + /** * 合同oss信息 */ @@ -106,10 +112,13 @@ public class EssContract extends BaseEntity { public boolean isOrgSigned(Long ouId) { if (approveDetails == null) return false; - return approveDetails.stream() - .map(EssApproveDetail::getSignPerson) - .filter(Objects::nonNull) - .anyMatch(person -> ouId.equals(person.getOuId())); + for (EssApproveDetail detail : approveDetails) { + if (detail.getSignPerson() == null) continue; + if (ouId.equals(detail.getSignPerson().getOuId()) + && detail.getState() == EssContractApproveState.ACCEPT) + return true; + } + return false; } public int approverSize() { @@ -117,6 +126,7 @@ public class EssContract extends BaseEntity { } public Approver getApprover(Integer idx) { + BizAssertions.assertNotNull(approvers, "approver is null"); return approvers == null ? null : approvers.get(idx); } diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/ContractManager.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/ContractManager.java index 5ccef539..b330822a 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/ContractManager.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/ContractManager.java @@ -84,20 +84,21 @@ public class ContractManager { "合同已是最终状态 {}, 无法撤销", contract.getState().getDescription()); EssPerson superAdmin = getContractSuperAdmin(contract); essClient.revokeContract(superAdmin, contract.getEssContractId(), request.getReason()); - updateContractState(contract, EssContractState.CANCEL, null); + updateContractState(contract, EssContractState.CANCEL, null, request.getReason()); } @Transactional public void updateContractState(EssContract contract, EssContractState state, - List approveDetails) { + List approveDetails, + String essMessage) { EssContract reloadContract = essContractDao.findForUpdateOrNull(contract.getEssContractId()); BizAssertions.assertNotNull(reloadContract, "合同不存在: {}", contract.getEssContractId()); if (reloadContract.isFinalState()) { log.warn("合同[{}]已是最终状态[{}], 无法更新状态至{}", reloadContract.getEssContractId(), reloadContract.getState(), state); } else { - essContractDao.updateState(contract, state, approveDetails); + essContractDao.updateState(contract, state, approveDetails, essMessage); essBroadcaster.fireContractStateChanged(contract); } } diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java index 3a96fa81..74fa099d 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java @@ -157,7 +157,7 @@ class CallbackController implements EssCallbackApi, InitializingBean { if (contract == null) { log.warn("contract not found: {}", changes.getFlowId()); } else { - contractManager.updateContractState(contract, state, approveDetails); + contractManager.updateContractState(contract, state, approveDetails, changes.getFlowMessage()); essService.maybeUploadContractToOss(contract); } return changes.getFlowId();