REQ-3581: 保存撤销合同的原因

This commit is contained in:
yanglin 2025-02-21 10:35:11 +08:00
parent 2b35622cb7
commit 4c77ecd3b2
5 changed files with 28 additions and 10 deletions

View File

@ -58,4 +58,8 @@ public class EssContractInfo {
*/
private List<EssApproveDetail> approveDetails;
/**
* 腾讯电子签那边的消息
*/
private String essMessage;
}

View File

@ -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<EssContractMapper, EssContract>
public void updateState(EssContract contract,
EssContractState state,
List<EssApproveDetail> approveDetailsOrPreserve) {
List<EssApproveDetail> 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))

View File

@ -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<EssContract> {
@TableField(typeHandler = ApproveDetailListHandler.class)
private List<EssApproveDetail> approveDetails;
/**
* 腾讯电子签那边的消息
*/
private String essMessage;
/**
* 合同oss信息
*/
@ -106,10 +112,13 @@ public class EssContract extends BaseEntity<EssContract> {
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<EssContract> {
}
public Approver getApprover(Integer idx) {
BizAssertions.assertNotNull(approvers, "approver is null");
return approvers == null ? null : approvers.get(idx);
}

View File

@ -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<EssApproveDetail> approveDetails) {
List<EssApproveDetail> 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);
}
}

View File

@ -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();