fix: 金蝶A801-5黑名单查询补必填分页参数并循环翻页取全量,查询异常上抛阻断客商提审

- BfiBlacklistQueryDTO 补 pageNo/pageSize 必填字段,pageSize 取值范围[1,2000]
- BfiConstant 新增 BLACKLIST_QUERY_PAGE_SIZE=2000,IBfiClient.blacklistQuery 返回契约改为 BfiPageVO 分页结构
- BfiServiceImpl.queryBlacklist 复用 BfiUtil.queryAllPages 循环翻页聚合全量黑名单
- CustomerArchiveServiceImpl.validateBlacklist 移除吞异常放行逻辑,金蝶查询失败直接上抛 BfiException 阻断提审
This commit is contained in:
刘泉佳
2026-10-08 17:32:20 +08:00
parent 7b41128db7
commit f4a4f1780e
5 changed files with 25 additions and 14 deletions
@@ -1054,7 +1054,7 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl<CustomerArchiveM
* 国资委黑名单校验(A801-5):客商提审进入准入审批前实时查询金蝶黑名单,
* 按统一社会信用代码精确匹配;命中禁止交易类(A)硬拦截,
* 风险警示类(B)默认放行告警、可经 {@code thirdparty.bfi.blacklist.blockRiskWarning} 配置拦截,
* 其他类别放行告警;黑名单查询异常不阻断准入(放行并记录错误日志),金蝶可用性口径待联调确认
* 其他类别放行告警;金蝶黑名单查询异常时向上抛出,阻断提审
*
* @param customer 客商
*/
@@ -1063,14 +1063,7 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl<CustomerArchiveM
if (Func.isEmpty(creditCode)) {
return;
}
List<BfiBlacklistVO> blacklist;
try {
blacklist = bfiService.queryBlacklist("1");
} catch (Exception exception) {
log.error("查询金蝶黑名单失败,黑名单校验放行,fullName={},unifiedCreditCode={}",
customer.getFullName(), creditCode, exception);
return;
}
List<BfiBlacklistVO> blacklist = bfiService.queryBlacklist("1");
String code = creditCode.trim().toUpperCase();
BfiBlacklistVO hit = blacklist.stream()
.filter(item -> Func.isNotEmpty(item.getNumber()) && code.equals(item.getNumber().trim().toUpperCase()))
@@ -84,6 +84,11 @@ public class BfiConstant {
*/
public static final long TOKEN_EXPIRE_BUFFER_MILLIS = 120_000L;
/**
* A801-5 黑名单查询页大小上限,取值范围[1, 2000]的正整数
*/
public static final int BLACKLIST_QUERY_PAGE_SIZE = 2000;
/**
* A303-5 开票申请发票查询 接口编码,固定值
*/
@@ -153,14 +153,14 @@ public interface IBfiClient {
BfiResultVO<BfiPageVO<BfiExchangeRateVO>> forexQuery(@RequestHeader(BfiConstant.HEADER_ACCESS_TOKEN) String accessToken, @SpringQueryMap BfiExchangeRateQueryDTO param);
/**
* A801-5 黑名单查询
* A801-5 黑名单查询(分页,pageSize 取值范围[1, 2000]的正整数)
*
* @param accessToken 访问令牌,通过 getToken 获取
* @param param 请求参数
* @return 黑名单列表
* @return 黑名单分页数据
*/
@GetMapping(BLACKLIST_QUERY_URL)
BfiResultVO<List<BfiBlacklistVO>> blacklistQuery(@RequestHeader(BfiConstant.HEADER_ACCESS_TOKEN) String accessToken, @SpringQueryMap BfiBlacklistQueryDTO param);
BfiResultVO<BfiPageVO<BfiBlacklistVO>> blacklistQuery(@RequestHeader(BfiConstant.HEADER_ACCESS_TOKEN) String accessToken, @SpringQueryMap BfiBlacklistQueryDTO param);
/**
* A103-1 付款申请保存(根据星瀚应付下推付款申请)
@@ -46,4 +46,14 @@ public class BfiBlacklistQueryDTO implements Serializable {
* 使用状态[1:可用, 0:禁用]
*/
private String enable;
/**
* 【必填】页码,从1开始
*/
private Integer pageNo;
/**
* 【必填】页大小
*/
private Integer pageSize;
}
@@ -229,8 +229,11 @@ public class BfiServiceImpl implements IBfiService {
BfiBlacklistQueryDTO param = new BfiBlacklistQueryDTO();
param.setEnable(enable);
String accessToken = getAccessToken();
BfiResultVO<List<BfiBlacklistVO>> result = commonCall("黑名单查询", () -> client.blacklistQuery(accessToken, param));
return result.getData() != null ? result.getData() : List.of();
return BfiUtil.queryAllPages(pageNo -> {
param.setPageNo(pageNo);
param.setPageSize(BfiConstant.BLACKLIST_QUERY_PAGE_SIZE);
return commonCall("黑名单查询", () -> client.blacklistQuery(accessToken, param)).getData();
});
}
@Override