feat: 客商信用代码为空改为抛出异常阻断风险校验

This commit is contained in:
刘泉佳
2026-11-09 16:01:06 +08:00
parent 923d963b29
commit dbfeadde3a
2 changed files with 12 additions and 25 deletions
@@ -337,8 +337,8 @@ public class HcsContractSyncSupport {
} }
/** /**
* 查询单方客商风险:按名称反查客商档案(§9-U6 编码体系联调确认),反查不到档案或信用代码为空记 skip 留痕不阻断; * 查询单方客商风险:按名称反查客商档案(§9-U6 编码体系联调确认),反查不到档案记 skip 留痕不阻断;
* 内部组织客商默认无风险跳过(与展示/提交/付款链路口径一致,不调 C101-1) * 内部组织客商默认无风险跳过(与展示/提交/付款链路口径一致,不调 C101-1);信用代码为空抛出业务异常阻断推送
*/ */
private RiskResult queryRisk(ContractManage contractManage, String standing, String partyName) { private RiskResult queryRisk(ContractManage contractManage, String standing, String partyName) {
CustomerArchive customerArchive = queryCustomerArchive(partyName); CustomerArchive customerArchive = queryCustomerArchive(partyName);
@@ -353,12 +353,11 @@ public class HcsContractSyncSupport {
standing + "方[" + partyName + "]为内部组织客商,默认无风险跳过校验", null); standing + "方[" + partyName + "]为内部组织客商,默认无风险跳过校验", null);
return new RiskResult(false, null); return new RiskResult(false, null);
} }
// C101-1 改按统一社会信用代码查询:信用代码为空无法查询,跳过并留痕(同反查不到口径) // C101-1 改按统一社会信用代码查询:信用代码为空无法查询,阻断推送
String creditCode = customerArchive.getUnifiedCreditCode(); String creditCode = customerArchive.getUnifiedCreditCode();
if (StringUtil.isBlank(creditCode)) { if (StringUtil.isBlank(creditCode)) {
writeCheckLog(contractManage, HcsSyncConstant.CHECK_RESULT_SKIP, log.warn("HCS合同推送风险校验阻断:contractNo={},{}方信用代码为空", contractManage.getContractNo(), standing);
standing + "方[" + partyName + "]信用代码为空,跳过风险校验", null); throw new ServiceException(standing + "方[" + partyName + "]统一社会信用代码为空,请先完善客商档案后再推送合同");
return new RiskResult(false, null);
} }
HcsRiskQueryDTO param = new HcsRiskQueryDTO(); HcsRiskQueryDTO param = new HcsRiskQueryDTO();
// 【必填】统一社会信用代码:按甲乙方名称反查 CustomerArchive(C101-1 改按信用代码查询) // 【必填】统一社会信用代码:按甲乙方名称反查 CustomerArchive(C101-1 改按信用代码查询)
@@ -133,13 +133,11 @@ public class HcsCreditCheckSupport {
"收款方[" + payment.getPayeeName() + "]为内部组织客商,默认无风险跳过校验", null); "收款方[" + payment.getPayeeName() + "]为内部组织客商,默认无风险跳过校验", null);
return; return;
} }
// C101-1 改按统一社会信用代码查询:信用代码为空无法查询,跳过并留痕(同反查不到口径) // C101-1 改按统一社会信用代码查询:信用代码为空无法查询,阻断提交
String creditCode = customerArchive.getUnifiedCreditCode(); String creditCode = customerArchive.getUnifiedCreditCode();
if (StringUtil.isBlank(creditCode)) { if (StringUtil.isBlank(creditCode)) {
writeCheckLog(payment, HcsSyncConstant.CHECK_TYPE_RISK, HcsSyncConstant.CHECK_RESULT_SKIP, log.warn("HCS付款提交风险校验阻断:paymentNo={},收款方信用代码为空", payment.getPaymentNo());
"收款方[" + payment.getPayeeName() + "]信用代码为空,跳过风险校验", null); throw new ServiceException("收款方[" + payment.getPayeeName() + "]统一社会信用代码为空,请先完善客商档案后再提交");
log.warn("HCS付款提交风险校验跳过:paymentNo={},收款方信用代码为空", payment.getPaymentNo());
return;
} }
HcsRiskQueryDTO param = new HcsRiskQueryDTO(); HcsRiskQueryDTO param = new HcsRiskQueryDTO();
// 【必填】统一社会信用代码:按收款方名称反查 CustomerArchive(C101-1 改按信用代码查询) // 【必填】统一社会信用代码:按收款方名称反查 CustomerArchive(C101-1 改按信用代码查询)
@@ -285,7 +283,7 @@ public class HcsCreditCheckSupport {
/** /**
* C101-1 单客商远程查询并组装展示信息(不查档案、不写留痕,供单查与定时批量刷新复用); * C101-1 单客商远程查询并组装展示信息(不查档案、不写留痕,供单查与定时批量刷新复用);
* riskTip 不在本方法组装,由调用方经 {@link #buildRiskDetail} 统一组装; * riskTip 不在本方法组装,由调用方经 {@link #buildRiskDetail} 统一组装;
* C101-1 改按统一社会信用代码查询,信用代码为空时不调远程、按无风险数据返回 * C101-1 改按统一社会信用代码查询,信用代码为空时抛出业务异常、不调远程
* *
* @param customerCode 客商编号(留痕与展示用) * @param customerCode 客商编号(留痕与展示用)
* @param creditCode 统一社会信用代码(C101-1 查询键) * @param creditCode 统一社会信用代码(C101-1 查询键)
@@ -294,13 +292,8 @@ public class HcsCreditCheckSupport {
*/ */
private RelativeRiskResult fetchRelativeRisk(String customerCode, String creditCode, String customerName) { private RelativeRiskResult fetchRelativeRisk(String customerCode, String creditCode, String customerName) {
if (StringUtil.isBlank(creditCode)) { if (StringUtil.isBlank(creditCode)) {
log.warn("HCS客商风险查询跳过:customerCode={}, 信用代码为空", customerCode); log.warn("HCS客商风险查询阻断:customerCode={}, customerName={}, 信用代码为空", customerCode, customerName);
CustomerRiskVO emptyRisk = new CustomerRiskVO(); throw new ServiceException("客商[" + (StringUtil.isNotBlank(customerName) ? customerName : customerCode) + "]统一社会信用代码为空,请先完善客商档案");
emptyRisk.setCustomerCode(customerCode);
emptyRisk.setCustomerName(customerName);
emptyRisk.setCustomerKind("external");
emptyRisk.setRisky(Boolean.FALSE);
return new RelativeRiskResult(emptyRisk, null);
} }
HcsRiskQueryDTO param = new HcsRiskQueryDTO(); HcsRiskQueryDTO param = new HcsRiskQueryDTO();
// 【必填】统一社会信用代码(C101-1 改按信用代码查询,字段名 fdNumber 保持合规侧定义) // 【必填】统一社会信用代码(C101-1 改按信用代码查询,字段名 fdNumber 保持合规侧定义)
@@ -535,12 +528,7 @@ public class HcsCreditCheckSupport {
List<HcsContractCheckLog> batchCheckLogs = new ArrayList<>(); List<HcsContractCheckLog> batchCheckLogs = new ArrayList<>();
for (CustomerArchive customerArchive : batch) { for (CustomerArchive customerArchive : batch) {
try { try {
// C101-1 改按信用代码查询:信用代码为空的档案跳过刷新(不计入失败数) // C101-1 按信用代码查询:信用代码为空在 fetchRelativeRisk 内抛出异常,由下方 catch 记为失败不中断批次
if (Func.isEmpty(customerArchive.getUnifiedCreditCode())) {
log.warn("定时刷新客商风险跳过:customerCode={}, fullName={}, 信用代码为空",
customerArchive.getCustomerCode(), customerArchive.getFullName());
continue;
}
RelativeRiskResult fetch = this.fetchRelativeRisk(customerArchive.getCustomerCode(), RelativeRiskResult fetch = this.fetchRelativeRisk(customerArchive.getCustomerCode(),
customerArchive.getUnifiedCreditCode(), customerArchive.getFullName()); customerArchive.getUnifiedCreditCode(), customerArchive.getFullName());
CustomerRiskVO risk = fetch.risk(); CustomerRiskVO risk = fetch.risk();