From 912a15e0ad36c5f42107e6a9ce18f9f95c5f50ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Fri, 30 Oct 2026 20:09:52 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=BB=91=E5=90=8D?= =?UTF-8?q?=E5=8D=95=E5=AE=A2=E5=95=86=E9=A3=8E=E9=99=A9=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=B9=B6=E6=94=AF=E6=8C=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=AE=A2=E5=95=86=E6=8C=89=E7=BC=96=E5=8F=B7=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../transport/pojo/vo/CustomerRiskVO.java | 3 ++ .../controller/HcsSyncController.java | 10 ++++--- .../support/hcs/HcsCreditCheckSupport.java | 30 ++++++++++++++++--- 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/CustomerRiskVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/CustomerRiskVO.java index da93615f..1a247302 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/CustomerRiskVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/CustomerRiskVO.java @@ -63,6 +63,9 @@ public class CustomerRiskVO implements Serializable { @Schema(description = "风险等级名称(服务端转义:黑名单/高风险/中风险/低风险,黑名单优先;无等级为空)") private String riskLevelName; + @Schema(description = "是否命中金蝶黑名单(A801-5,黑名单展示口径;红字细分由前端按等级+本标记翻译)") + private Boolean kingdeeBlackHit; + @Schema(description = "是否高风险/黑名单客商(外部客商专用,内部组织恒为 false)") private Boolean risky; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/HcsSyncController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/HcsSyncController.java index ea8c0527..f18be7eb 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/HcsSyncController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/HcsSyncController.java @@ -216,13 +216,15 @@ public class HcsSyncController { /** * 客商风险等级查询(C101-1,展示用,前端接入设计 §3.3;强制校验仍在推送/付款链路): - * 内部组织类型客商默认无风险不调合规,外部客商高风险/黑名单返回提示文案 + * 内部组织类型客商默认无风险不调合规,外部客商高风险/黑名单返回提示文案; + * creditCode 供新增客商(档案未落库)查金蝶黑名单兜底,档案存在时以档案为准 */ @GetMapping("/risk") @ApiOperationSupport(order = 10) - @Operation(summary = "客商风险等级查询", description = "C101-1 按客商编号查询风险等级与黑名单状态(展示用),内部客商默认无风险,高风险/黑名单返回风险提示文案,结果留痕") - public R risk(@Parameter(description = "客商编号", required = true) @RequestParam String customerCode) { - return R.data(hcsCreditCheckSupport.queryCustomerRisk(customerCode)); + @Operation(summary = "客商风险等级查询", description = "C101-1 按客商编号查询风险等级与黑名单状态(展示用),内部客商默认无风险,高风险/黑名单返回风险提示文案,结果留痕;creditCode 为新增客商场景金蝶黑名单查询兜底") + public R risk(@Parameter(description = "客商编号", required = true) @RequestParam String customerCode, + @Parameter(description = "统一社会信用代码(新增客商档案未落库时兜底查金蝶黑名单)") @RequestParam(required = false) String creditCode) { + return R.data(hcsCreditCheckSupport.queryCustomerRisk(customerCode, creditCode)); } /** diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsCreditCheckSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsCreditCheckSupport.java index 7a043ad0..2bd22cf2 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsCreditCheckSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsCreditCheckSupport.java @@ -205,12 +205,26 @@ public class HcsCreditCheckSupport { /** * 客商风险查询(C101-1,展示与提交校验共用,前端接入设计 §3.3): * 内部组织类型客商默认无风险(不调 C101-1);外部客商按编号查询风险等级与黑名单状态并留痕; + * 金蝶黑名单(A801-5)命中同样判定为风险客商(risky=true,C101-1 空数据不漏提示); * riskTip 经 {@link #buildRiskDetail} 统一组装(等级 + 金蝶黑名单失信类别/列入事由),与列表悬浮明细同口径 * * @param customerCode 客商编号 * @return 风险展示信息(customerKind/fdBlackStatus/fdRiskLevel/risky/riskTip) */ public CustomerRiskVO queryCustomerRisk(String customerCode) { + return this.queryCustomerRisk(customerCode, null); + } + + /** + * 客商风险查询(带信用代码,新增客商档案表单实时校验用): + * 金蝶带出的客商尚未落库(本地档案反查不到)时,信用代码无法从档案取得, + * 由前端将金蝶档案带出的统一社会信用代码随编号一并传入,保证 A801-5 黑名单段不缺失 + * + * @param customerCode 客商编号(金蝶档案带出的编码) + * @param creditCode 统一社会信用代码(档案存在时以档案为准,档案缺失时兜底入参) + * @return 风险展示信息 + */ + public CustomerRiskVO queryCustomerRisk(String customerCode, String creditCode) { if (StringUtil.isBlank(customerCode)) { throw new ServiceException("客商编号不能为空"); } @@ -230,12 +244,20 @@ public class HcsCreditCheckSupport { } RelativeRiskResult fetch = this.fetchRelativeRisk(customerCode, customerName); CustomerRiskVO riskVO = fetch.risk(); - // 表单实时提示与列表明细统一组装口径:追加金蝶黑名单段(A801-5 按档案信用代码查询,失败静默缺失) - String creditCode = customerArchive == null ? null : customerArchive.getUnifiedCreditCode(); - BfiBlacklistVO hit = StringUtil.isBlank(creditCode) ? null - : this.queryBlacklistByCodes(List.of(creditCode.trim().toUpperCase())).get(creditCode.trim().toUpperCase()); + // 表单实时提示与列表明细统一组装口径:追加金蝶黑名单段(A801-5 按信用代码查询,失败静默缺失; + // 档案缺失(新增客商实时校验)时兜底用入参信用代码) + String archiveCreditCode = customerArchive == null ? null : customerArchive.getUnifiedCreditCode(); + String effectiveCreditCode = StringUtil.isNotBlank(archiveCreditCode) ? archiveCreditCode : creditCode; + BfiBlacklistVO hit = StringUtil.isBlank(effectiveCreditCode) ? null + : this.queryBlacklistByCodes(List.of(effectiveCreditCode.trim().toUpperCase())).get(effectiveCreditCode.trim().toUpperCase()); String blackCategory = hit == null ? null : (Func.isEmpty(hit.getAwrpCombofieldTitle()) ? hit.getAwrpCombofield() : hit.getAwrpCombofieldTitle()); + // 黑名单判定仅以金蝶黑名单(A801-5)命中为准:C101-1 可能对已列入黑名单的客商返回空数据,命中时必须置 risky=true 才能触发前端提示; + // 命中结果落 kingdeeBlackHit 原始标记,红字文案细分(黑名单/高风险)由前端翻译 + if (hit != null) { + riskVO.setRisky(Boolean.TRUE); + riskVO.setKingdeeBlackHit(Boolean.TRUE); + } riskVO.setRiskTip(buildRiskDetail(customerName, riskVO.getFdRiskLevel(), blackCategory, hit == null ? null : hit.getAwrpTextareafield())); try {