feat: 合同推送黑名单判定复用HcsCreditCheckSupport金蝶命中公共方法(不再取C101-1黑名单状态)
This commit is contained in:
+15
-14
@@ -112,6 +112,7 @@ public class HcsContractSyncSupport {
|
||||
private final HcsAttachmentSupport hcsAttachmentSupport;
|
||||
private final HcsExeStageSyncSupport hcsExeStageSyncSupport;
|
||||
private final HcsContractSpecSyncSupport hcsContractSpecSyncSupport;
|
||||
private final HcsCreditCheckSupport hcsCreditCheckSupport;
|
||||
|
||||
/**
|
||||
* 合同金蝶同步结果接收处理(合规 contractKingdee/result 推送,D903,投送人/钢厂/结算中心合同共用):
|
||||
@@ -279,16 +280,16 @@ public class HcsContractSyncSupport {
|
||||
RiskResult riskPartyB = queryRisk(contractManage, "乙方", contractManage.getPartyB());
|
||||
// 风险等级:甲乙双方取先查到的非空值(无法量化比较,留痕双方原始值,联调后细化)
|
||||
String riskLevel = StringUtil.isNotBlank(riskPartyA.riskLevel()) ? riskPartyA.riskLevel() : riskPartyB.riskLevel();
|
||||
// 黑名单状态:任一方黑名单即为是
|
||||
boolean blacklist = riskPartyA.blacklist() || riskPartyB.blacklist();
|
||||
// 黑名单状态:任一方金蝶黑名单(A801-5)命中即为是(复用 HcsCreditCheckSupport.isKingdeeBlacklistHit 公共口径)
|
||||
boolean blacklist = riskPartyA.kingdeeHit() || riskPartyB.kingdeeHit();
|
||||
contractManage.setHcsRiskLevel(riskLevel);
|
||||
contractManage.setKingdeeBlackStatus(blacklist ? BLACK_STATUS_YES : "no");
|
||||
contractManage.setHcsRiskTime(LocalDateTime.now());
|
||||
contractManageMapper.updateById(contractManage);
|
||||
boolean risky = HcsSyncConstant.RISK_LEVEL_HIGH.equals(riskLevel) || blacklist;
|
||||
log.info("HCS合同风险校验完成:contractNo={},甲方[{}={}/{}],乙方[{}={}/{}],高风险/黑名单={}",
|
||||
contractManage.getContractNo(), contractManage.getPartyA(), riskPartyA.blackStatus(), riskPartyA.riskLevel(),
|
||||
contractManage.getPartyB(), riskPartyB.blackStatus(), riskPartyB.riskLevel(), risky);
|
||||
log.info("HCS合同风险校验完成:contractNo={},甲方[金蝶黑名单={},等级={}],乙方[金蝶黑名单={},等级={}],高风险/黑名单={}",
|
||||
contractManage.getContractNo(), riskPartyA.kingdeeHit(), riskPartyA.riskLevel(),
|
||||
riskPartyB.kingdeeHit(), riskPartyB.riskLevel(), risky);
|
||||
return risky;
|
||||
}
|
||||
|
||||
@@ -346,13 +347,13 @@ public class HcsContractSyncSupport {
|
||||
if (customerArchive == null) {
|
||||
writeCheckLog(contractManage, HcsSyncConstant.CHECK_RESULT_SKIP,
|
||||
standing + "方[" + partyName + "]反查不到客商编号,跳过风险校验(§9-U6)", null);
|
||||
return new RiskResult(null, null, false);
|
||||
return new RiskResult(false, null);
|
||||
}
|
||||
// 内部组织类型客商默认无风险,不调 C101-1(与展示/提交/付款链路口径一致)
|
||||
if (HcsCreditCheckSupport.isInternalCustomer(customerArchive)) {
|
||||
writeCheckLog(contractManage, HcsSyncConstant.CHECK_RESULT_SKIP,
|
||||
standing + "方[" + partyName + "]为内部组织客商,默认无风险跳过校验", null);
|
||||
return new RiskResult(null, null, false);
|
||||
return new RiskResult(false, null);
|
||||
}
|
||||
HcsRiskQueryDTO param = new HcsRiskQueryDTO();
|
||||
// 【必填】客商编号:按甲乙方名称反查 CustomerArchive 客商编码(§9-U6)
|
||||
@@ -364,12 +365,12 @@ public class HcsContractSyncSupport {
|
||||
throw new HcsException("C101-1 客商风险查询失败:" + (result == null ? "响应为空" : result.getMsg()));
|
||||
}
|
||||
HcsRiskVO risk = result.getData();
|
||||
String blackStatus = risk == null ? null : risk.getFdBlackStatus();
|
||||
String riskLevel = risk == null ? null : risk.getFdRiskLevel();
|
||||
boolean blacklist = BLACK_STATUS_YES.equalsIgnoreCase(blackStatus);
|
||||
writeCheckLog(contractManage, blacklist ? HcsSyncConstant.CHECK_RESULT_FAIL : HcsSyncConstant.CHECK_RESULT_PASS,
|
||||
standing + "方[" + partyName + "]黑名单=" + blackStatus + ",风险等级=" + riskLevel, result.getTraceId());
|
||||
return new RiskResult(blackStatus, riskLevel, blacklist);
|
||||
// 黑名单判定复用公共方法:仅以金蝶黑名单(A801-5)命中为准,C101-1 黑名单状态不参与
|
||||
boolean kingdeeHit = hcsCreditCheckSupport.isKingdeeBlacklistHit(customerArchive.getUnifiedCreditCode());
|
||||
writeCheckLog(contractManage, kingdeeHit ? HcsSyncConstant.CHECK_RESULT_FAIL : HcsSyncConstant.CHECK_RESULT_PASS,
|
||||
standing + "方[" + partyName + "]金蝶黑名单=" + kingdeeHit + ",风险等级=" + riskLevel, result.getTraceId());
|
||||
return new RiskResult(kingdeeHit, riskLevel);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -780,8 +781,8 @@ public class HcsContractSyncSupport {
|
||||
}
|
||||
|
||||
/**
|
||||
* 单方风险查询结果
|
||||
* 单方风险查询结果(kingdeeHit=金蝶黑名单 A801-5 是否命中,公共口径见 {@link HcsCreditCheckSupport#isKingdeeBlacklistHit})
|
||||
*/
|
||||
private record RiskResult(String blackStatus, String riskLevel, boolean blacklist) {
|
||||
private record RiskResult(boolean kingdeeHit, String riskLevel) {
|
||||
}
|
||||
}
|
||||
|
||||
+16
@@ -358,6 +358,22 @@ public class HcsCreditCheckSupport {
|
||||
return StringUtil.isBlank(levelName) ? null : levelName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 金蝶黑名单命中判定(A801-5,公共方法):按统一社会信用代码/税号查询,
|
||||
* 黑名单记录存在即命中;查询失败静默返回 false(queryBlacklistByCodes 内记 error 日志备查)。
|
||||
* 展示组装(buildRiskDetail)、列表筛选、合同推送链路(checkRelativeRisk)统一复用本方法口径
|
||||
*
|
||||
* @param creditCode 统一社会信用代码/税号
|
||||
* @return 是否命中金蝶黑名单
|
||||
*/
|
||||
public boolean isKingdeeBlacklistHit(String creditCode) {
|
||||
if (StringUtil.isBlank(creditCode)) {
|
||||
return false;
|
||||
}
|
||||
String code = creditCode.trim().toUpperCase();
|
||||
return this.queryBlacklistByCodes(List.of(code)).get(code) != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 组装客商风险明细文案(后台统一组装、前端只展示;列表悬浮明细与表单实时提示共用本方法,口径一致),
|
||||
* 格式:【客商名称】:被列入外部黑名单(失信类别:xx);{列入事由};风险等级:xx,分段说明:
|
||||
|
||||
Reference in New Issue
Block a user