:fix: 合同特批附件归口佐证材料区校验并更新特批附件文案

This commit is contained in:
刘泉佳
2026-10-21 15:48:41 +08:00
parent 1ba114e859
commit 41ee328455
2 changed files with 57 additions and 8 deletions
@@ -161,7 +161,7 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
prepare(contractManage);
validateDraft(contractManage);
validateTemporary(contractManage);
// 高风险/黑名单客商管控:必须上传特批说明附件(外部客商,内部组织默认无风险)
// 高风险/黑名单客商管控:必须上传特批附件(外部客商,内部组织默认无风险)
validateSpecExplanationOnSubmit(contractManage);
if (Func.isNotEmpty(contractManage.getId())) {
validateContractPartyCombinationUnique(contractManage);
@@ -185,7 +185,7 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
throw new ServiceException("仅草稿或已撤回/已驳回的临时合同允许提交临时合同审批");
}
validateTemporary(contractManage);
// 高风险/黑名单客商管控:必须上传特批说明附件(外部客商,内部组织默认无风险)
// 高风险/黑名单客商管控:必须上传特批附件(外部客商,内部组织默认无风险)
validateSpecExplanationOnSubmit(contractManage);
// 临时放开新增合同从草稿转临时合同时的组合重复校验。
// validateContractPartyCombinationUnique(contractManage);
@@ -205,7 +205,7 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
throw new ServiceException("仅临时合同或已撤回/已驳回的正式合同允许提交正式合同审批");
}
validateFormal(contractManage);
// 高风险/黑名单客商管控:必须上传特批说明附件(外部客商,内部组织默认无风险)
// 高风险/黑名单客商管控:必须上传特批附件(外部客商,内部组织默认无风险)
validateSpecExplanationOnSubmit(contractManage);
// 临时放开新增合同从临时转正式合同时的组合重复校验。
// validateContractPartyCombinationUnique(contractManage);
@@ -1118,7 +1118,8 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
/**
* 高风险/黑名单客商提交校验:甲/乙方为外部客商且高风险(C101-1 风险等级=2)或黑名单时,
* 必须已上传「特批说明」类型附件(fileType=特批说明,业务字典 contract_attachment_type);内部组织类型客商默认无风险
* 必须已上传「特批附件」类型附件(fileType=特批附件,业务字典 contract_supporting_attachment_type),
* 归口「附件(佐证材料等)」(attachmentsJson)区上传;用印材料(contractFileJson)历史已传行兼容放行;内部组织类型客商默认无风险
*
* @param contractManage 合同单
*/
@@ -1127,14 +1128,25 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
if (!risky) {
return;
}
boolean hasSpecExplanation = parseJsonArray(contractManage.getAttachmentsJson()).stream()
boolean hasSpecExplanation = this.hasSpecAttachment(contractManage.getAttachmentsJson())
|| this.hasSpecAttachment(contractManage.getContractFileJson());
if (!hasSpecExplanation) {
throw new ServiceException("合同相对方存在高风险/黑名单客商,必须上传「特批附件」类型附件后再提交审批");
}
}
/**
* 附件 JSON 中是否已存在特批附件(fileType=特批附件)
*
* @param attachmentsJson 附件元数据 JSON 数组
* @return 是否存在特批附件
*/
private boolean hasSpecAttachment(String attachmentsJson) {
return parseJsonArray(attachmentsJson).stream()
.filter(Map.class::isInstance)
.map(Map.class::cast)
.anyMatch(attachment -> HcsSyncConstant.ATTACHMENT_TYPE_SPEC_EXPLANATION
.equals(Objects.toString(attachment.get(HcsSyncConstant.ATTACHMENT_TYPE_FIELD), null)));
if (!hasSpecExplanation) {
throw new ServiceException("合同相对方存在高风险/黑名单客商,必须上传「特批说明」类型附件后再提交审批");
}
}
/**