BCDPS 征信数据处理服务
一、系统概述
BCDPS 是微众银行风控生态中的征信数据中间件平台,作为统一的征信数据查询网关。接收来自上游贷款/信贷系统的征信查询请求,将请求分发至外部征信平台(CRIS)和模型平台(CMSS),处理响应结果,应用业务规则后返回给调用方。
| 属性 | 值 |
|---|---|
| Group ID | cn.webank.cnc.bcdps |
| Artifact ID | bcdps |
| 父 POM | cn.webank.cnc.risksdk:brisk-sdk-parent:3.32.0-SNAPSHOT |
| Java 版本 | 1.8 |
| 数据库 | MySQL (TDSQL) - bcdpsdb |
| 消息中间件 | RMB(基于 Solace/WeMQ) |
| 系统编号 | U635 |
| SCM | git@code.weoa.com:cnc/bcdps.git |
二、模块结构
2.1 bcdps-dao — 数据访问层
- Artifact:
cn.webank.cnc.bcdps:bcdps-dao - 职责: 所有 MyBatis DAO 接口、DTO/Entity 类、DDL 脚本、分库分表策略
- 路径:
bcdps/bcdps-dao/
2.2 bcdps-service — 业务逻辑层
- Artifact:
cn.webank.cnc.bcdps:bcdps-service(打包方式: jar) - 职责: RMB 消息监听、业务服务、处理器、定时任务、配置、文件处理、缓存
- 路径:
bcdps/bcdps-service/ - 主类:
cn.webank.cnc.bcdps.BcdpsApplication
三、包架构
3.1 bcdps-dao 包
| 包 | 职责 |
|---|---|
cn.webank.cnc.bcdps.dao | MyBatis DAO 接口(25 个 DAO) |
cn.webank.cnc.bcdps.dao.sharding | 分库分表策略(CommonShardStrategy、ResultIndexShardStrategy) |
cn.webank.cnc.bcdps.dto | Entity/DTO 类及 MyBatis Example 类 |
cn.webank.cnc.bcdps.enums | DAO 层枚举(LogKeyEnum) |
3.2 bcdps-service 包
| 包 | 职责 |
|---|---|
cn.webank.cnc.bcdps.config | Spring 配置 Bean(缓存、调度、服务、线程池) |
cn.webank.cnc.bcdps.constants | 常量定义(Common、Service、File、Mock、Task、DistributeTask) |
cn.webank.cnc.bcdps.dto.credit | 征信领域 DTO(CreditQueryDto、BatchQueryDto、CreditResponseDto 等) |
cn.webank.cnc.bcdps.dto.cmss | CMSS 集成 DTO(CmssRequest、CmssDataSet、CmssBaseParam) |
cn.webank.cnc.bcdps.dto.cris | CRIS 集成 DTO(CrisCdpsRequest、CrisCdpsResponse) |
cn.webank.cnc.bcdps.dto.gray | 灰度发布配置 DTO |
cn.webank.cnc.bcdps.dto.mock | 测试 Mock 数据 DTO |
cn.webank.cnc.bcdps.dto.threads | 线程池配置 DTO |
cn.webank.cnc.bcdps.enums | 业务枚举(CdpsCode、RecordStatus、ReqType、RmbServiceTypeEnum 等) |
cn.webank.cnc.bcdps.exception | 自定义异常(CdpsServiceException、ExpectedSuccException) |
cn.webank.cnc.bcdps.facility | 缓存管理基础设施(AutowiredSimpleCacheManager、CacheManageFacility) |
cn.webank.cnc.bcdps.service | 顶层 RMB 服务抽象(AbstractRmbService、AbstractResponseServiceOrEvent) |
cn.webank.cnc.bcdps.service.biz | 可插拔征信类型处理框架的抽象基类 |
cn.webank.cnc.bcdps.service.biz.cmss | CMSS(模型平台)具体实现 |
cn.webank.cnc.bcdps.service.biz.cris | CRIS(征信平台)具体实现 |
cn.webank.cnc.bcdps.service.biz.com | 通用驱动流程实现 |
cn.webank.cnc.bcdps.service.cache | 配置缓存与刷新服务 |
cn.webank.cnc.bcdps.service.com | 通用工具(Facility、ServiceCodeConfig、StoreAndForward) |
cn.webank.cnc.bcdps.service.credit | 核心征信业务编排服务(14 个服务类) |
cn.webank.cnc.bcdps.service.dao | Service 层 DAO 包装(17 个 DaoService 类) |
cn.webank.cnc.bcdps.service.file | 大文件读取与批处理 |
cn.webank.cnc.bcdps.service.handler | 请求/响应处理器(RMB 入口到业务的桥梁) |
cn.webank.cnc.bcdps.service.handler.paramCheckHandler | 参数校验链(String、Integer、List、Map 类型校验) |
cn.webank.cnc.bcdps.service.rmb | RMB 消息监听实现(6 个服务) |
cn.webank.cnc.bcdps.task | 定时任务入口 |
cn.webank.cnc.bcdps.task.handler | 定时任务处理器(批量查询、批量响应、兜底) |
cn.webank.cnc.bcdps.threads | 异步处理 Runnable 线程类 |
cn.webank.cnc.bcdps.validation | 请求校验服务 |
四、核心类详解
4.1 应用入口
BcdpsApplication
- 路径:
bcdps/bcdps-service/src/main/java/cn/webank/cnc/bcdps/BcdpsApplication.java - 标准 Spring Boot 应用,注解:
@SpringBootApplication、@EnableAspectJAutoProxy、@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
4.2 RMB 消息监听器(service.rmb 包)
系统通过 6 个消息驱动的入口接收 RMB 消息:
| 类名 | RMB Service ID | 场景 | 功能 |
|---|---|---|---|
AsyncSingleQueryService | 06310228 | 01 | 异步单笔征信查询 |
AsyncUnionQueryService | 06310229 | 01 | 异步联合查询(组合征信类型) |
SyncSingleQueryService | 06300386 | 01 | 同步单笔查询(当前已禁用,@Service 已注释) |
AsyncBatchQueryService | 06310230 | 01 | 异步批量征信查询(文件方式) |
AsyncCreditResponseService | 06310231 | 01 | 异步征信响应回调 |
AsyncBatchCreditResponseService | 06310233 | 01 | 批量征信响应回调 |
AsyncSingleQueryService 详解:
- 接收异步单笔征信查询请求
- 解析消息,校验
serviceCode - 使用按征信类型配置的线程池
- 委托给
CreditSingleAsyncQueryHandler处理
AsyncCreditResponseService 详解:
- 接收外部征信平台返回的响应
- 按 service ID 或 service code 路由到对应的
AbstractResponseServiceOrEventBean - 回退到默认处理器
CRIS.RESP.COMMON
4.3 抽象基类(service 包根)
AbstractRmbService
- 路径:
bcdps-service/.../service/AbstractRmbService.java - 所有 RMB 监听器的基类
- 核心方法:
analyMsg()— JSON 消息解析dealRmb()— RMB 消息防重复(通过TM_RMB_ANTI_REPEAT表插入去重)doProcess()— 模板方法:解析 → 防重 → 抽象process()getResponseService()— 响应路由:按CRIS.RESP.<serviceId>.<scenario>或CRIS.RESP.<serviceCode>查找 Bean
AbstractResponseServiceOrEvent(实现 OnlineServiceOrEvent)
- 路径:
bcdps-service/.../service/AbstractResponseServiceOrEvent.java - 征信响应处理的模板方法:
beforeProcess()— 校验transRefNbr存在doProcess()— 构建CreditResponseDto,调用CreditComResponseService.process()afterProcess()— 抽象方法,留给子类实现
4.4 请求处理器(service.handler 包)
CreditSingleAsyncQueryHandler — @Service
- 路径:
bcdps-service/.../service/handler/CreditSingleAsyncQueryHandler.java - 编排完整的单笔异步查询流程:
creditQueryService.validate()— 参数校验creditAuthConfigService.checkAuth()— 授权检查creditQueryService.createTmCase()— 创建 CASE 记录creditQueryService.buildQueryList()— 拆解为子查询(支持组合类型)creditQueryService.createQueryRec()— 为每个子查询创建 REC 记录comSingleAsyncQueryService.process()— 执行每个子查询
CreditBatchQueryHandler — @Service
- 路径:
bcdps-service/.../service/handler/CreditBatchQueryHandler.java - 批量查询流程:校验 → 授权检查 → 提交到线程池 →
CreditBatchQueryService.process()
CommonResponseHandler — @Service("CRIS.RESP.COMMON")
- 默认响应处理器,
afterProcess()为空操作
CmssResponseHandler — @Service("CRIS.RESP.CMSS")
- CMSS 响应处理器,校验
SEQ_NO字段而非transRefNbr
4.5 核心征信业务服务(service.credit 包)
CreditProcessFactory — @Service
- 路径:
bcdps-service/.../service/credit/CreditProcessFactory.java - 可插拔征信类型处理的核心工厂/路由器
- 通过 Spring 注入的 Map 按 Bean 命名规则定位处理器:
CDPS_SINGLE_<creditType>→AbstractComCreditSingleAsyncQueryServiceCDPS_RESPONSE_<creditType>→AbstractComCreditResponseProcessServiceCDPS_BATCH_<creditType>→AbstractComCreditBatchQueryServiceCDPS_DRIVE_<creditType>或CDPS_DRIVE_COM→AbstractComCreditDriveProcessService
- 支持通过
TM_PARA_CREDIT_TYPE_INFO中的mappingCreditType进行类型映射
CreditQueryService — @Service
- 路径:
bcdps-service/.../service/credit/CreditQueryService.java - 核心查询准备服务:
validate()— 解析ComCreditRequestDto,执行requestCheckService.requestCheck(),校验征信类型buildQueryList()— 将请求拆解为List<CreditCommonQueryDto>(按征信集拆分)createTmCase()— 创建 CASE 记录(含批量去重检查)createQueryRec()— 创建查询 REC 记录batchValidate()— 批量查询的参数校验
CreditComSingleAsyncQueryService — @Service
- 路径:
bcdps-service/.../service/credit/CreditComSingleAsyncQueryService.java - 单笔异步查询编排:
- 通过工厂定位
AbstractComCreditSingleAsyncQueryService checkRequest()— 校验并解析请求resolveRequest()— 构建请求对象,设置 DB 字段startQuery()— 发送查询到外部系统- 更新 REC 状态:INIT → SEND
afterProcess()— 处理同步数据源响应
- 通过工厂定位
CreditComResponseService — @Service
- 路径:
bcdps-service/.../service/credit/CreditComResponseService.java - 响应处理编排:
- 按
cdpsSeqNo查找状态为 SEND 的 REC - 按 caseNo 查找 CASE
- 通过工厂路由到响应处理器
validate()— 解析响应,提取结果码/消息/内容- 更新 REC 状态:SEND → RESP
- 保存响应到
TM_CREDIT_RESP_INFO - 失败时检查重试配置,可能重新入队
- 批量模式写入
TM_ASYNC_MSG_QUEUE;单笔模式走syncProcess()
- 按
CreditProcessManagementService — @Service
- 路径:
bcdps-service/.../service/credit/CreditProcessManagementService.java - 生命周期管理:
response()— 通过 RMB publish/sendRequest 回调上游isAllReturn()— 检查 CASE 下所有子查询是否完成imProperRspQuerier()— 异常返回(部分结果)finalProcess()— 将所有 REC 和 CASE 移至历史表exceptionResponse()— 异常回调
CreditRetryManagementService — @Service
- 路径:
bcdps-service/.../service/credit/CreditRetryManagementService.java - 重试管理:
getRetryConfig()— 从TM_PARA_CREDIT_RETRY加载重试配置getRetryRec()— 创建重试 REC(递减重试次数,延长过期时间)
CreditDriveProcessService — @Service
- 路径:
bcdps-service/.../service/credit/CreditDriveProcessService.java - 驱动(级联)查询逻辑:
judgeNeedDriveProcess()— 根据TM_PARA_DRIVE_CONFIG判断是否需要二次查询getDriveConfig()— 获取指定征信类型的驱动配置
CreditBatchQueryService — @Service
- 路径:
bcdps-service/.../service/credit/CreditBatchQueryService.java - 批量查询执行:
- 从 FPS 下载文件
- 使用
BigFileReader(5 线程)逐行处理 - 每行由
BatchQuerySingleLineDealHandler处理 - 流水记录到
TM_BATCH_QUERY_FLOW
CreditAuthConfigService — @Service
- 征信查询授权:验证
qrySysId是否有权查询指定creditType的reqType
CreditTypeInfoService — @Service
- 征信类型元数据管理,缓存在
ConfigCacheService
CreditQueryConfService — @Service
- 从
TM_PARA_CREDIT_INFO加载查询配置,提供每种征信类型的 RMB Service ID 和场景
CreditNotifyService — @Service
- 通过
RmbUtilAdaptor.publish()向外部征信平台发送异步 RMB 消息
4.6 可插拔业务框架(service.biz 包)
抽象基类
AbstractComCreditSingleAsyncQueryService<T extends BaseRequest>
- 路径:
bcdps-service/.../service/biz/AbstractComCreditSingleAsyncQueryService.java - 发送查询到外部系统的模板:
checkRequest()— 抽象:校验/解析请求resolveRequest()— 抽象:转换为 DB 对象startQuery()— 抽象:发送到外部系统buildComRequest()— 构建通用请求字段(Service ID、场景、DCN)afterProcess()— 处理同步数据源响应
AbstractComCreditResponseProcessService<T, C>
- 路径:
bcdps-service/.../service/biz/AbstractComCreditResponseProcessService.java - 征信响应处理模板(最复杂的类):
syncProcess()— 主处理流水线:parse → calcVar → callEng → save → drive check → afterProcessparseMessage()— 抽象:解析响应内容calcVar()— 抽象:派生变量callEng()— 可选执行风控策略/规则save()— 抽象:持久化结果failRspProcess()— 失败响应处理driveProcess()— 发起级联查询fillRespMap()— 组装最终响应
AbstractComCreditDriveProcessService
- 路径:
bcdps-service/.../service/biz/AbstractComCreditDriveProcessService.java - 驱动查询模板:
resolvePreResult()— 抽象:处理前置结果buildDriveQueryDto()— 抽象:构建驱动查询 DTOdriveCheck()— 检查所有前置子查询是否达到终态
AbstractComCreditBatchQueryService
- 批量查询处理模板
AbstractComCreditSingleSyncQueryService<T>
- 同步数据源查询模板
CRIS 实现
| 类 | Bean 名称 | 功能 |
|---|---|---|
CrisSingleAsyncQueryService | CDPS_SINGLE_CRIS | 构建 CRIS 请求(certNo、certType、certName、phone、transCode) |
CrisResponseProcessService | CDPS_RESPONSE_CRIS | 校验 CRIS 响应,解析 JSON/ARRAY 格式结果,GZip 解压,保存到 TM_CREDIT_JSON_RESULT |
CrisBatchQueryServiceImpl | CDPS_BATCH_CRIS | CRIS 批量查询实现 |
CrisProcessService | 工具类 | CRIS 请求/响应 JSON 构建与解析 |
CMSS 实现
| 类 | Bean 名称 | 功能 |
|---|---|---|
CmssSingleAsyncQueryService | CDPS_SINGLE_CMSS | 收集所有成功的子查询结果,GZip+Base64 编码为 CmssDataSet,发送到 CMSS |
CmssResponseProcessService | CDPS_RESPONSE_CMSS | 通过 CmssRspCodeEnum 映射 CMSS 响应码,保存到 TM_CMSS_JSON_RESULT |
CmssProcessService | 工具类 | CMSS 请求构建和数据集组装 |
通用驱动实现
| 类 | Bean 名称 | 功能 |
|---|---|---|
ComCreditDriveProcessService | CDPS_DRIVE_COM | 默认驱动实现,拆分 drivenCreditTypes 并创建子查询 DTO |
4.7 基础设施类
Facility — @Component
- 路径:
bcdps-service/.../service/com/Facility.java - 序列号生成:
getCdpsSeqNo()、getBizSeqNo()、getSysSeqNo()、getSeqNo(tableName)
RmbDaoService — @Service
- 路径:
bcdps-service/.../service/dao/RmbDaoService.java - 防重复检查:
isViolatedMsg()插入TM_RMB_ANTI_REPEAT;重复插入返回 false
ConfigRefreshService — @Service
- 路径:
bcdps-service/.../service/cache/ConfigRefreshService.java @PostConstruct加载,之后每 5 分钟刷新:征信类型信息和授权配置到内存缓存
StoreAndForwardService — @Service
- 使用 SDK 的 TaskGroup 进行延迟重试的 Mock 响应投递
4.8 定时任务
AppScheduleTask — @Component
- 路径:
bcdps-service/.../task/AppScheduleTask.java - 三个定时任务:
creditBatchQueryTask()— 每 1 分钟,分布式锁,处理批量查询队列(TM_COM_CREDIT_QUERY_REC中 INIT 状态的批量类型)creditBatchResponseTaskHandler()— 每 1 分钟,分布式锁,处理批量响应队列(TM_ASYNC_MSG_QUEUE)fallBackTask()— Cron0 0 1,22 * * ?(每天 1 点和 22 点),兜底/安全网处理
五、数据模型
5.1 数据库表(23 张表,数据库 bcdpsdb)
| # | 表名 | 用途 |
|---|---|---|
| 1 | TM_PARA_CREDIT_TYPE_INFO | 征信类型注册表 — 定义每种征信来源(SINGLE/UNION)、异步标志、批量支持、压缩类型 |
| 2 | TM_CASE | 工单表 — 每笔征信查询请求一条记录。包含 bizSeqNo、creditType、客户信息、状态、回调信息、耗时等 |
| 3 | TM_CASE_HIS | TM_CASE 的历史表(相同 schema) |
| 4 | TM_COM_CREDIT_QUERY_REC | 查询记录表 — 一个 CASE 中的每个子查询一条。跟踪状态生命周期:INIT→SEND→RESP→PROCESSING→PROCESSED |
| 5 | TM_COM_CREDIT_QUERY_REC_HIS | 查询记录历史表 |
| 6 | TM_CREDIT_RESP_INFO | 响应内容表 — 存储征信平台返回的原始响应(mediumtext,压缩),按 cdpsSeqNo 关联 |
| 7 | TM_CREDIT_JSON_RESULT | CRIS JSON 结果表 — CRIS 响应中解析出的 JSON 结果 |
| 8 | TM_BATCH_QUERY_FLOW | 批量查询流水表 — 跟踪批量文件处理(fileId、hashValues、validLineCount、costTime) |
| 9 | TM_ASYNC_MSG_QUEUE | 异步消息队列 — 批量模式下,存放等待定时任务处理的响应记录 |
| 10 | TM_ASYNC_MSG_QUEUE_HIS | 异步消息队列历史表 |
| 11 | TM_CREDIT_AUTH_CONFIG | 授权配置表 — 复合键(creditType、qrySysId、reqType)控制哪些系统可查询哪些征信类型 |
| 12 | TM_PARA_CREDIT_INFO | 查询配置表 — 每种征信类型的 RMB Service ID(在线/批量查询和回调)、结果类型、结果表名 |
| 13 | TM_PARA_CREDIT_REQ | 输入参数配置 — 每种征信类型可配置的请求参数定义(key、type、length、required、default、target mapping) |
| 14 | TM_PARA_CREDIT_RESULT | 输出参数配置 — 可配置的响应参数定义 |
| 15 | TM_PARA_DRIVE_CONFIG | 驱动配置 — 级联查询规则:哪些征信类型触发哪些二次查询 |
| 16 | TM_PARA_PROCESS_LINE_INFO | 处理线配置 — CMSS 处理线定义(processLineId、creditType、subCreditTypes) |
| 17 | TM_CMSS_JSON_RESULT | CMSS JSON 结果表 — CMSS 模型平台返回的解析结果 |
| 18 | TM_PARA_THREAD_POOL | 线程池配置表,按(serviceType、creditType)配置 |
| 19 | TM_MOCK_INFO | 测试 Mock 数据(按 ecifNo、creditType、sceneType) |
| 20 | TM_PARA_CREDIT_RETRY | 重试配置 — 按(creditType、orgCreditType、qrySysId、productCd、sceneType):重试次数和重试间隔 |
| 21 | TM_TABLE_SEQ | 序列号生成表 |
| 22 | TM_RMB_ANTI_REPEAT | RMB 消息防重表 |
| 23 | TM_SCHEDULED_TASK_CONFIG | 定时任务调优参数(taskName、taskKey、loopSize、perSize) |
5.2 关键 Entity/DTO 类
DAO 层 Entity(位于 bcdps-dao/src/main/java/cn/webank/cnc/bcdps/dto/):
TmCase、TmCaseHis— 工单及历史TmComCreditQueryRec、TmComCreditQueryRecHis— 查询记录及历史TmCreditRespInfo— 响应内容TmCreditJsonResult— CRIS JSON 结果TmCmssJsonResult— CMSS JSON 结果TmAsyncMsgQueue、TmAsyncMsgQueueHis— 异步消息队列及历史TmBatchQueryFlow— 批量查询流水TmParaCreditInfo— 查询配置TmParaCreditReq— 输入参数配置TmCreditAuthConfig— 授权配置
Service 层 DTO(位于 bcdps-service/src/main/java/cn/webank/cnc/bcdps/dto/):
credit/ComCreditRequestDto— 通用请求 DTO(serviceCode、productCd、transRefNbr、custInfo、callbackInfo、creditSets)credit/CreditQueryDto— 单笔查询请求 DTOcredit/CreditCommonQueryDto— 通用子查询 DTO(扩展自 CreditQueryDto,含 TmCase、TmComCreditQueryRec)credit/BatchQueryDto— 批量查询请求 DTOcredit/CreditResponseDto— 征信响应 DTOcredit/ComCreditInfoDto— 扩展 DTO(含结果 Map)credit/CustInfo— 客户信息(ecifNo、name、idNo、idType、phoneNo)credit/CallbackInfo— 回调配置(callbackServiceId、callbackScenarioId、callbackDcn)credit/CreditEntity— 征信集条目credit/ComResponseDto— 响应信封(code、desc、transRefNbr、creditContentList)credit/ComSingleResponseDto— 单数据源响应cris/CrisCdpsRequest— CRIS 请求cris/CrisCdpsResponse— CRIS 响应cmss/CmssRequest— CMSS 请求(seqNo、serviceCode、dataSets、processLineId)cmss/CmssDataSet— CMSS 数据集(sourceData 经 GZip+Base64 编码)
六、业务流程
6.1 单笔异步征信查询流程
上游系统 → RMB(06310228/01) → AsyncSingleQueryService
→ CreditSingleAsyncQueryHandler
→ CreditQueryService.validate()(参数校验)
→ CreditAuthConfigService.checkAuth()(授权检查)
→ CreditQueryService.createTmCase()(创建 CASE)
→ CreditQueryService.buildQueryList()(拆分子查询)
→ CreditQueryService.createQueryRec()(创建 REC)
→ CreditComSingleAsyncQueryService.process()
→ CreditProcessFactory 路由
→ CrisSingleAsyncQueryService / CmssSingleAsyncQueryService
→ checkRequest() → resolveRequest() → startQuery()
→ CreditNotifyService.async()(RMB 发送到外部平台)
→ REC 状态: INIT → SEND6.2 征信响应处理流程
外部征信平台 → RMB(06310231/01) → AsyncCreditResponseService
→ CommonResponseHandler / CmssResponseHandler
→ CreditComResponseService.process()
→ 查找 REC(状态 SEND)和 CASE
→ 路由到 CrisResponseProcessService / CmssResponseProcessService
→ validate()(解析响应码、内容)
→ REC 状态: SEND → RESP
→ 保存到 TM_CREDIT_RESP_INFO
→ 失败: 检查重试配置 → 可能重新入队
→ 成功: syncProcess()
→ parseMessage() → calcVar() → callEng() → save()
→ driveProcess()(级联查询检查)
→ afterProcess()(检查是否所有子查询完成)
→ 全部完成: 回调上游,移至历史表6.3 批量查询流程
上游系统 → RMB(06310230/01) → AsyncBatchQueryService
→ CreditBatchQueryHandler
→ 校验参数、授权检查
→ CreditBatchQueryService.process()
→ 从 FPS 下载文件
→ BigFileReader(5 线程)逐行处理
→ 每行创建 CASE + REC
→ 流水记录到 TM_BATCH_QUERY_FLOW
→ 删除本地文件
→ 定时任务 creditBatchQueryTask(每分钟)
→ 扫描 INIT 状态的批量 REC
→ 按征信类型分组,限流控制
→ 发送到外部平台6.4 重试流程
征信查询返回错误(S9999)
→ CreditRetryManagementService.getRetryConfig()
→ 从 TM_PARA_CREDIT_RETRY 加载重试配置
→ 重试次数 > 0:
→ REC 状态从 RESP 改回 SEND
→ 创建新重试 REC(递减重试次数,延长过期时间)
→ 等待定时任务重新处理6.5 驱动(级联)查询流程
征信响应处理完成后 syncProcess()
→ 检查 TM_PARA_DRIVE_CONFIG
→ 满足驱动条件:
→ 从 TM_CREDIT_RESP_INFO 加载前置结果
→ resolvePreResult() 提取数据
→ driveCheck() 检查前置子查询是否终态
→ buildDriveQueryDto() 创建驱动查询 DTO
→ 创建新 REC 记录
→ 提交到 CreditComSingleAsyncQueryService.process()6.6 CMSS 集成流程
组合征信类型需要 CMSS 模型平台:
→ CmssSingleAsyncQueryService 收集所有成功的子查询结果
→ GZip+Base64 编码为 CmssDataSet
→ 发送到 CMSS(带 processLineId)
CMSS 返回:
→ CmssResponseHandler 路由到 CmssResponseProcessService
→ CmssRspCodeEnum 映射响应码
→ 保存到 TM_CMSS_JSON_RESULT七、RMB 消息处理汇总
| 方向 | Service ID | 场景 | 处理类 | 消息类型 |
|---|---|---|---|---|
| 入站 | 06310228 | 01 | AsyncSingleQueryService | 单笔异步征信查询请求 |
| 入站 | 06310229 | 01 | AsyncUnionQueryService | 联合异步征信查询请求 |
| 入站 | 06310230 | 01 | AsyncBatchQueryService | 批量文件征信查询请求 |
| 入站 | 06300386 | 01 | SyncSingleQueryService(已禁用) | 同步单笔查询 |
| 入站 | 06310231 | 01 | AsyncCreditResponseService | 异步征信响应回调 |
| 入站 | 06310233 | 01 | AsyncBatchCreditResponseService | 批量征信响应回调 |
| 出站 | 按类型配置 | 按类型配置 | CreditNotifyService | 征信查询发送到 CRIS/CMSS |
| 出站 | CASE 记录中配置 | CASE 记录中配置 | CreditProcessManagementService.response() | 结果回调上游 |
所有入站服务使用 @RmbMap 注解,实现 MessageListener 接口。所有消息通过 TM_RMB_ANTI_REPEAT 表进行防重复保护。
八、线程池配置
| 线程池名称 | 核心线程 | 最大线程 | 队列容量 | 用途 |
|---|---|---|---|---|
taskExecutor | 3 | 10 | 10 | 定时/调度任务 |
fileTaskExecutor | 20 | 20 | 10000 | 文件处理 |
concurrentTaskExecutor | 64 | 512 | 200 | RiskSDK 并发处理 |
commonQueryTaskExecutor | 20 | 50 | 4000 | 通用查询处理 |
comAsyncSingleQueryExecutor | 20 | 100 | 1024 | 异步单笔查询 |
comAsyncUnionQueryExecutor | 20 | 50 | 4000 | 异步联合查询 |
comAsyncBatchQueryExecutor | 20 | 20 | 10000 | 异步批量查询 |
comAsyncCreditResponseExecutor | 20 | 120 | 2000 | 异步征信响应 |
comBatchCreditResponseExecutor | 20 | 120 | 10000 | 批量征信响应 |
syncQueryRmbExecutor | 10 | 30 | 10 | 同步查询 RMB 处理 |
configRefreshScheduler | 3 | - | - | 配置刷新调度 |
九、配置与部署
9.1 关键配置文件
| 文件 | 路径 | 用途 |
|---|---|---|
bcdps-service.properties | conf/bcdps-service/ | 主应用配置:系统 ID(U635)、RMB 超时、FPS 路径、数据清理、流控、MASA |
bcdps-service-env.properties | conf/bcdps-service/ | 环境配置:TDSQL 连接、FPS 客户端、主机 IP |
rmb-client.properties | conf/bcdps-service/ | RMB 客户端:Solace/WeMQ 连接、VPN、线程池(72 线程,最大 288)、队列 10 |
9.2 关键配置项
| 配置项 | 值 | 说明 |
|---|---|---|
systemId | U635 | BCDPS 系统标识 |
rmb_timeout | 5000 | RMB 消息超时(毫秒) |
cnc.sdk.rmb.unionRmbRepeatChk | true | RMB 防重检查 |
flow.control.enabled | true | 流控启用 |
十、外部系统集成
10.1 出站调用
| 系统 | 集成方式 | 用途 |
|---|---|---|
| CRIS(征信信息系统) | RMB 异步发布 | 发送征信查询请求 |
| CMSS(征信模型服务系统) | RMB 异步发布 | 发送组合征信数据进行模型评分 |
| FPS(文件处理服务) | FPS SDK 客户端 | 上传/下载批量查询文件 |
| GNS(全局命名服务) | GNS API | RMB 目标的服务发现 |
10.2 入站调用
| 系统 | RMB Service | 用途 |
|---|---|---|
| 上游贷款/信贷系统 | 06310228/01 | 单笔征信查询请求 |
| 上游贷款/信贷系统 | 06310229/01 | 联合征信查询请求 |
| 上游贷款/信贷系统 | 06310230/01 | 批量征信查询请求 |
| CRIS 平台 | 06310231/01 | 征信查询响应回调 |
| CMSS 平台 | 06310231/01 | 模型评分响应回调 |
| 外部平台 | 06310233/01 | 批量征信响应回调 |
十一、架构设计亮点
- 可插拔征信类型处理:
CreditProcessFactory通过 Bean 命名规则路由,新增征信类型只需创建新的 Bean 实现 - CASE/REC 生命周期管理: 每笔查询创建 CASE(工单)+ 多个 REC(子查询记录),状态机:
INIT → SEND → RESP → PROCESSING → PROCESSED - 双处理模式: 单笔异步查询在 RMB 线程中处理;批量查询使用文件+定时任务消费模式
- 级联查询(Drive): 一次查询结果可触发二次查询,实现复杂的多源数据聚合
- 表驱动的重试和授权: 重试策略和查询权限均通过配置表管理,支持运营级变更无需发版
- 细粒度线程池: 9 个独立线程池,支持按(serviceType、creditType)DB 配置线程数
十二、服务层交互全景图
上游贷款系统
│ RMB (06310228/01, 06310229/01, 06310230/01)
▼
┌──────────────────────────────────┐
│ RMB 消息监听器 (service.rmb) │
│ AsyncSingleQueryService │
│ AsyncUnionQueryService │
│ AsyncBatchQueryService │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ 请求处理器 (service.handler) │
│ CreditSingleAsyncQueryHandler │
│ CreditBatchQueryHandler │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ 核心征信服务 (service.credit) │
│ CreditQueryService → 创建 CASE + REC
│ CreditComSingleAsyncQueryService
│ → CreditProcessFactory 路由
│ CreditNotifyService → RMB 发出
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ 可插拔框架 (service.biz) │
│ CrisSingleAsyncQueryService │ → CRIS 平台
│ CmssSingleAsyncQueryService │ → CMSS 平台
└──────────────────────────────────┘
│ 外部征信平台返回响应
▼
┌──────────────────────────────────┐
│ 响应处理器 │
│ CommonResponseHandler │
│ CmssResponseHandler │
│ → CreditComResponseService │
│ → CrisResponseProcessService / CmssResponseProcessService
│ → parse → calcVar → callEng → save → drive
└──────────────┬───────────────────┘
│
▼
上游贷款系统(RMB 回调)