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 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.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@ -55,10 +56,12 @@ public class EssContractDao extends ServiceImpl<EssContractMapper, EssContract>
public void updateState(EssContract contract, public void updateState(EssContract contract,
EssContractState state, EssContractState state,
List<EssApproveDetail> approveDetailsOrPreserve) { List<EssApproveDetail> approveDetailsOrPreserve,
String essMessage) {
lambdaUpdate() lambdaUpdate()
.eq(EssContract::getId, contract.getId()) .eq(EssContract::getId, contract.getId())
.set(EssContract::getState, state) .set(EssContract::getState, state)
.set(StringUtils.isNotBlank(essMessage), EssContract::getEssMessage, essMessage)
.set(CollectionUtils.isNotEmpty(approveDetailsOrPreserve), .set(CollectionUtils.isNotEmpty(approveDetailsOrPreserve),
EssContract::getApproveDetails, EssContract::getApproveDetails,
approveDetailsOrPreserve == null ? "[]" : JSON.toJSONString(approveDetailsOrPreserve)) 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.Approver;
import cn.axzo.nanopart.ess.api.domain.contract.EssApproveDetail; import cn.axzo.nanopart.ess.api.domain.contract.EssApproveDetail;
import cn.axzo.nanopart.ess.api.enums.Constraint; 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.api.enums.EssContractState;
import cn.axzo.nanopart.ess.server.entity.domain.Assignment; 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 cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.common.utils.UuidUtils; import com.alibaba.nacos.common.utils.UuidUtils;
@ -16,7 +18,6 @@ import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
/** /**
@ -86,6 +87,11 @@ public class EssContract extends BaseEntity<EssContract> {
@TableField(typeHandler = ApproveDetailListHandler.class) @TableField(typeHandler = ApproveDetailListHandler.class)
private List<EssApproveDetail> approveDetails; private List<EssApproveDetail> approveDetails;
/**
* 腾讯电子签那边的消息
*/
private String essMessage;
/** /**
* 合同oss信息 * 合同oss信息
*/ */
@ -106,10 +112,13 @@ public class EssContract extends BaseEntity<EssContract> {
public boolean isOrgSigned(Long ouId) { public boolean isOrgSigned(Long ouId) {
if (approveDetails == null) if (approveDetails == null)
return false; return false;
return approveDetails.stream() for (EssApproveDetail detail : approveDetails) {
.map(EssApproveDetail::getSignPerson) if (detail.getSignPerson() == null) continue;
.filter(Objects::nonNull) if (ouId.equals(detail.getSignPerson().getOuId())
.anyMatch(person -> ouId.equals(person.getOuId())); && detail.getState() == EssContractApproveState.ACCEPT)
return true;
}
return false;
} }
public int approverSize() { public int approverSize() {
@ -117,6 +126,7 @@ public class EssContract extends BaseEntity<EssContract> {
} }
public Approver getApprover(Integer idx) { public Approver getApprover(Integer idx) {
BizAssertions.assertNotNull(approvers, "approver is null");
return approvers == null ? null : approvers.get(idx); return approvers == null ? null : approvers.get(idx);
} }

View File

@ -84,20 +84,21 @@ public class ContractManager {
"合同已是最终状态 {}, 无法撤销", contract.getState().getDescription()); "合同已是最终状态 {}, 无法撤销", contract.getState().getDescription());
EssPerson superAdmin = getContractSuperAdmin(contract); EssPerson superAdmin = getContractSuperAdmin(contract);
essClient.revokeContract(superAdmin, contract.getEssContractId(), request.getReason()); essClient.revokeContract(superAdmin, contract.getEssContractId(), request.getReason());
updateContractState(contract, EssContractState.CANCEL, null); updateContractState(contract, EssContractState.CANCEL, null, request.getReason());
} }
@Transactional @Transactional
public void updateContractState(EssContract contract, public void updateContractState(EssContract contract,
EssContractState state, EssContractState state,
List<EssApproveDetail> approveDetails) { List<EssApproveDetail> approveDetails,
String essMessage) {
EssContract reloadContract = essContractDao.findForUpdateOrNull(contract.getEssContractId()); EssContract reloadContract = essContractDao.findForUpdateOrNull(contract.getEssContractId());
BizAssertions.assertNotNull(reloadContract, "合同不存在: {}", contract.getEssContractId()); BizAssertions.assertNotNull(reloadContract, "合同不存在: {}", contract.getEssContractId());
if (reloadContract.isFinalState()) { if (reloadContract.isFinalState()) {
log.warn("合同[{}]已是最终状态[{}], 无法更新状态至{}", log.warn("合同[{}]已是最终状态[{}], 无法更新状态至{}",
reloadContract.getEssContractId(), reloadContract.getState(), state); reloadContract.getEssContractId(), reloadContract.getState(), state);
} else { } else {
essContractDao.updateState(contract, state, approveDetails); essContractDao.updateState(contract, state, approveDetails, essMessage);
essBroadcaster.fireContractStateChanged(contract); essBroadcaster.fireContractStateChanged(contract);
} }
} }

View File

@ -157,7 +157,7 @@ class CallbackController implements EssCallbackApi, InitializingBean {
if (contract == null) { if (contract == null) {
log.warn("contract not found: {}", changes.getFlowId()); log.warn("contract not found: {}", changes.getFlowId());
} else { } else {
contractManager.updateContractState(contract, state, approveDetails); contractManager.updateContractState(contract, state, approveDetails, changes.getFlowMessage());
essService.maybeUploadContractToOss(contract); essService.maybeUploadContractToOss(contract);
} }
return changes.getFlowId(); return changes.getFlowId();