fix: 客商黑名单口径调整为仅金蝶黑名单命中(A801-5),C101-1黑名单状态不用于展示与筛选

This commit is contained in:
刘泉佳
2026-10-30 13:33:56 +08:00
parent 410c7c167c
commit 4ef3e90d5d
5 changed files with 17 additions and 15 deletions
@@ -181,11 +181,11 @@
<if test="customer.createTimeEnd != null">
AND create_time &lt;= #{customer.createTimeEnd}
</if>
<!-- 客商风险筛选:blacklist 按黑名单状态过滤;等级筛选与黑名单独立(黑名单客商也有等级,组合展示口径一致) -->
<!-- 客商风险筛选:blacklist 仅按金蝶黑名单(A801-5)命中过滤;等级筛选独立 -->
<if test="customer.customerRisk != null and customer.customerRisk != ''">
<choose>
<when test="customer.customerRisk == 'blacklist'">
AND hcs_black_status = 'yes'
AND (kingdee_black_category IS NOT NULL OR kingdee_black_reason IS NOT NULL)
</when>
<when test="customer.customerRisk == 'high'">
AND hcs_risk_level = '2'
@@ -2158,7 +2158,7 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl<CustomerArchiveM
for (CustomerArchiveVO record : records) {
String customerName = Func.isEmpty(record.getFullName()) ? record.getCustomerCode() : record.getFullName();
record.setHcsRiskDetail(HcsCreditCheckSupport.buildRiskDetail(customerName,
"yes".equalsIgnoreCase(record.getHcsBlackStatus()), record.getHcsRiskLevel(),
record.getHcsRiskLevel(),
record.getKingdeeBlackCategory(), record.getKingdeeBlackReason()));
}
}
@@ -235,8 +235,8 @@ public class HcsCreditCheckSupport {
: this.queryBlacklistByCodes(List.of(creditCode.trim().toUpperCase())).get(creditCode.trim().toUpperCase());
String blackCategory = hit == null ? null
: (Func.isEmpty(hit.getAwrpCombofieldTitle()) ? hit.getAwrpCombofield() : hit.getAwrpCombofieldTitle());
riskVO.setRiskTip(buildRiskDetail(customerName, BLACK_STATUS_YES.equalsIgnoreCase(riskVO.getFdBlackStatus()),
riskVO.getFdRiskLevel(), blackCategory, hit == null ? null : hit.getAwrpTextareafield()));
riskVO.setRiskTip(buildRiskDetail(customerName, riskVO.getFdRiskLevel(),
blackCategory, hit == null ? null : hit.getAwrpTextareafield()));
try {
hcsContractCheckLogMapper.insert(this.buildRiskCheckLog(customerCode, riskVO, fetch.traceId()));
} catch (Exception exception) {
@@ -361,21 +361,21 @@ public class HcsCreditCheckSupport {
/**
* 组装客商风险明细文案(后台统一组装、前端只展示;列表悬浮明细与表单实时提示共用本方法,口径一致),
* 格式:【客商名称】:被列入外部黑名单(失信类别:xx);{列入事由};风险等级:xx,分段说明:
* ① 黑名单段:合同系统黑名单(blackStatusYes)或金蝶黑名单命中(类别/事由任一非空)→「被列入外部黑名单」,
* 失信类别(A801-5 awrp_combofield_title,缺失兜底 awrp_combofield)有值时括号展示区分禁止交易/风险警示类;
* ① 黑名单段:**仅以金蝶黑名单(A801-5)命中为准**(失信类别/列入事由任一非空),
* 失信类别(awrp_combofield_title,缺失兜底 awrp_combofield)有值时括号展示区分禁止交易/风险警示类;
* 合同合规系统 C101-1 的黑名单状态(fdBlackStatus)不作为展示黑名单依据;
* ② 列入事由:金蝶 A801-5 awrp_textareafield 真实明细,非空时追加;
* ③ 等级段:C101-1 风险等级(risk_level 字典翻译,黑名单不转义、按实际等级展示),非空时追加
* ③ 等级段:C101-1 风险等级(risk_level 字典翻译),非空时追加
*
* @param customerName 客商名称
* @param blackStatusYes 合同系统黑名单状态(C101-1 fdBlackStatus=yes)
* @param riskLevel C101-1 风险等级(0/1/2)
* @param blackCategory 金蝶黑名单失信类别
* @param blackReason 金蝶黑名单列入事由
* @return 明细文案,无风险信息返回空字符串
*/
public static String buildRiskDetail(String customerName, boolean blackStatusYes, String riskLevel, String blackCategory, String blackReason) {
public static String buildRiskDetail(String customerName, String riskLevel, String blackCategory, String blackReason) {
List<String> parts = new ArrayList<>();
boolean blacklist = blackStatusYes || Func.isNotEmpty(blackCategory) || Func.isNotEmpty(blackReason);
boolean blacklist = Func.isNotEmpty(blackCategory) || Func.isNotEmpty(blackReason);
if (blacklist) {
parts.add(Func.isNotEmpty(blackCategory)
? "被列入外部黑名单(失信类别:" + blackCategory + ")"
@@ -17,7 +17,7 @@ TMS 从**两个外部系统**获取客商风险数据,每日自动更新到客
| 名词 | 含义 |
|---|---|
| 黑名单 | 客商被列入外部(国资委)黑名单。金蝶分 **A 类(禁止交易类,不允许交易)** 和 **B 类(风险警示类,需关注)** |
| 黑名单 | 客商被列入外部(国资委)黑名单,**以金蝶黑名单查询(A801-5)命中为准**,命中记录含失信类别与列入事由。金蝶分 **A 类(禁止交易类,不允许交易)** 和 **B 类(风险警示类,需关注)** |
| 失信类别 | 黑名单的分类名称(如"禁止交易类"),来自金蝶黑名单记录 |
| 列入事由 | 被列入黑名单的具体原因(如"涉贪污受贿裁判相关提及方(3年以上及其他)"),来自金蝶黑名单记录 |
| 风险等级 | 合同合规系统对客商的风险评级:0=低风险、1=中风险、2=高风险 |
@@ -66,14 +66,16 @@ flowchart TD
| 客商情况 | 显示 | 颜色 |
|---|---|---|
| 黑名单 + 风险等级(组合展示,等级在前) | 高风险、黑名单 / 中风险、黑名单 / 低风险、黑名单 | 红 |
| 仅黑名单(无等级数据) | 黑名单 | 红 |
| 金蝶黑名单命中 + 风险等级(组合展示,等级在前) | 高风险、黑名单 / 中风险、黑名单 / 低风险、黑名单 | 红 |
| 金蝶黑名单命中(无等级数据) | 黑名单 | 红 |
| 仅高风险 | 高风险 | 红 |
| 中风险 | 中风险 | 黄 |
| 低风险 | 低风险 | 绿 |
| 内部组织客商 | 无风险(默认,不查询) | 绿 |
| 尚未查询到数据 | - | — |
> "黑名单"仅指**金蝶黑名单命中**;合同合规系统返回的黑名单状态字段不用于列表展示(仅在付款提交强制校验中使用)。
- 红色标签(黑名单/高风险)**鼠标悬浮**可查看明细:失信类别、列入事由、风险等级。
- 搜索栏新增**客商风险**下拉筛选:黑名单 / 高风险 / 中风险 / 低风险。
- 数据为每日凌晨刷新结果,当天有变动的以次日刷新为准。
@@ -105,7 +105,7 @@
唯一出口:`HcsCreditCheckSupport.buildRiskDetail(customerName, blackStatusYes, riskLevel, blackCategory, blackReason)`,
格式:`【客商名称】:被列入外部黑名单(失信类别:xx);{列入事由};风险等级:xx`
- 黑名单段:合同系统黑名单 **或** 金蝶命中(类别/事由任一非空);
- 黑名单段:**仅金蝶命中**(类别/事由任一非空);C101-1 的 `hcs_black_status`(fdBlackStatus)不参与展示,仅付款提交强制校验使用;
- 等级段:`risk_level` 字典翻译(`DictBizCache` 未命中兜底 `DictCache`);
- 列表(`hcs_risk_detail`,列表查询时组装不落库)与表单实时提示(`riskTip`)同口径。