BCPS 信用处理系统
一、系统概述
BCPS 是这组 COE 代码里最接近“信用账户与借据核心”的系统。它不仅有联机入口,还有独立的批量子系统、核心借据域、核心入账域、重组域、额度域、通知域、参数域和通用仓库层。
从模块命名、运行配置、核心表结构和联机适配层可以看出,BCPS 的职责明显重于普通产品编排服务,更像一套完整的信用处理核心平台。
| 属性 | 值 |
|---|---|
| Group ID | cn.webank.cnc.cps |
| Artifact ID | bcps-parent |
| 父 POM | cn.webank.cnc.sdk:zcnc-sdk-parent-for-coe:4.1.37-SNAPSHOT |
| Java 版本 | Java 21 |
| 构建方式 | Maven 主构建,Gradle 备选构建 |
| 主要数据库 | DCN 运行库 bcpsdb,ADM/Core 库 bcpscoredb |
| 主要通信方式 | RMB 消息总线 |
| 主要运行单元 | bcps-online-dcn、bcps-batch-dcn、bcps-core-flow-test |
| 系统编号 | 联机 U474,批量 U566,Core-ADM/测试 Z524 |
| 代码规模 | 6994 个 Java、1259 个 XML、1777 个 SQL |
二、模块结构
BCPS 是一个重型多模块仓库。根 POM 已声明 30+ 个模块,Gradle 还补充了 Maven 中未启用的若干模块。
2.1 运行时模块
| 模块 | 角色 |
|---|---|
bcps-online-dcn | 联机部署启动壳 |
bcps-batch-dcn | 批量部署启动壳 |
bcps-core-flow-test | Core 流程测试/内测壳,Gradle 中映射为 bcps-core-adm |
2.2 联机适配层
| 模块 | 角色 |
|---|---|
bcps-online | 联机服务主模块,包含授权、NFS、subserver 适配层 |
bcps-service-api | 对外协议 DTO 与服务协议定义 |
bcps-facility | 共享业务设施 |
bcps-infrastructure | 通用基础设施层 |
bcps-param-def | 参数定义 |
cust-info-manage | 客户信息管理相关能力 |
2.3 核心业务层
| 模块 | 角色 |
|---|---|
bcps-core-online/bcps-core-online-domain | 联机核心领域模型、状态机、上下文 |
bcps-core-online/bcps-core-online-facade | 联机核心门面与服务注册 |
bcps-core-online/bcps-core-online-facility | 联机核心设施 |
bcps-core-online/bcps-core-online-fs | 联机金融服务支持 |
bcps-core-loan | 借据生成、借款计划、借据记录 |
bcps-core-post | 入账、还款、计息、分配、冲正、重组、核销等核心后置处理 |
bcps-core-dd | 逾期批扣与扣款驱动 |
bcps-core-usedlimit | 已用额度管理 |
bcps-core-dbk | 存款核心/备付金类能力 |
bcps-core-escrow | 托管/担保类能力 |
bcps-core-fee-calculate | 费用计算 |
bcps-core-notice | 通知相关 |
bcps-core-batch | 核心批处理逻辑 |
bcps-core-report | 报表能力 |
bcps-core-rt-cache | 实时缓存 |
2.4 核心支撑层
| 模块 | 角色 |
|---|---|
bcps-core-infrastructure | Core DTO、持久层基础设施 |
bcps-core-repository | 通用仓库组件 |
bcps-core-param-def | Core 参数定义 |
bcps-aspect | AOP 支撑 |
bcps-spoke-mock | 外围模拟 |
2.5 Maven 与 Gradle 的差异
Gradle settings.gradle 里还能看到:
bcps-data-factorybcps-core-online-nfsbcps-core-adm(实际映射到bcps-core-flow-test)
这说明仓库处于“多构建体系并存、模块启停不完全一致”的状态。做变更时不能只看根 pom.xml。
三、启动与部署形态
3.1 联机系统:bcps-online-dcn
主类:cn.webank.CpsOnlineDcnApplication
关键特征:
@SpringBootApplication(exclude = {JpaRepositoriesAutoConfiguration.class, CncBatchAutoConfiguration.class})@ComponentScan("cn.webank.cnc.cps")@ImportResource({"classpath:biz/biz-context.xml","classpath:starter/biz/biz-context.xml"})@EnableCaching@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
配置文件可确认:
systemId=U474instanceType=BCPS-PROCESSspring.profiles.active=pcps-authfsScenario=01
同时还定义了 4 个核心服务入口:
repayApplyServiceId=02100002repayNotifyServiceId=02100001loanApplyServiceId=02100004loanNotifyServiceId=02100003
3.2 批量系统:bcps-batch-dcn
主类:cn.webank.cnc.CpsBatchApplication
关键特征:
@SpringBootApplication(exclude = {JpaRepositoriesAutoConfiguration.class, HibernateJpaAutoConfiguration.class})@EnableCaching@Import({BatchConfig.class, ExecutorConfiguration.class})
配置文件可确认:
systemId=U566instanceType=BCPS-DCNcnc.sdk.batch.enable=Y- 已接入 FPS:
- 文件接收监听
fpsListenerServiceId=06510011 - 文件合并服务
fpsServiceId=06510015 fpsSystemId=Z473
- 文件接收监听
3.3 Core 测试/管理壳
bcps-core-flow-test 对应主类 cn.webank.cnc.cps.core.CpsCoreApplication,且 Gradle 把它映射成 bcps-core-adm。
配置文件中可以看到:
systemId=Z524cnc.sdk.rmb.ignoreMQ=true
这更像内部测试、流程联调、核心域验证入口,而不是正式对客生产入口。
四、包架构与代码组织
4.1 bcps-online:联机适配与授权层
bcps-online 是 BCPS 最外层的业务适配壳,主要有 4 条线:
| 包 | 职责 |
|---|---|
authorization/* | 授权交易、状态机、请求历史、请求修正、RMB 入口 |
online/service/subserver/* | 按服务码拆分的联机适配实现 |
nfs/* | 非金融服务、参数更新、客户/账单/交易类查询 |
simpleservice/* | 联机上下文装载与通用适配 |
其目录结构已经能看出 BCPS 在线层不是单一入口,而是“授权入口 + 查询/操作适配 + NFS 支线”的组合。
4.2 bcps-core-online
这是 BCPS 联机核心中枢,分 4 层:
| 子模块 | 职责 |
|---|---|
bcps-core-online-domain | 领域上下文、状态机、认证域、联机服务域 |
bcps-core-online-facade | 门面注册、门面协议、服务键映射 |
bcps-core-online-facility | 联机核心设施 |
bcps-core-online-fs | 金融服务辅助 |
bcps-core-online-domain 里能看到这些典型包:
domain/auth/*domain/machine/*domain/service/*domain/context/*domain/extension/*
说明联机核心内部同样是明显的上下文化、状态机化和领域化设计。
4.3 bcps-core-loan
bcps-core-loan 结构集中在:
facade/requestfacade/responseservice/core/implservice/core/scheduleservice/core/recordservice/core/helper
它更像“借据对象与计划生成引擎”,负责贷款生成、还款计划与借据记录的核心逻辑。
4.4 bcps-core-post
bcps-core-post 是全仓库最重的单体核心域之一,业务面极宽。service/core 下能直接看到大量专业子域:
accountpaymentplanscheduleinterestpostdepositrefundrepayrevertreorgwriteoffacctlimitloanregremainrollbackassignstmtterminate
这基本已经覆盖了一套信用核心在“记账、还款、利息、核销、冲正、重组、账单、额度”上的主干能力。
4.5 bcps-core-repository
仓库自带说明写得很直接:
- “通用仓库组件”
同时 metadata/tdsql/adm/bcpscoredb/table/repository 下的表结构也能印证这一点,说明 BCPS 有一层明确的通用 ERM / Repository 抽象,不仅是普通 DAO。
五、联机入口与调用链
5.1 通信形态
BCPS 虽然存在少量 Controller,但业务主链路仍以 RMB 为主:
- 全仓库
@RmbMap约90处 bcps-online的subserver目录下就有82处@RmbMap- 真正的
@RestController/@Controller入口共9处,其中8处来自bcps-core-flow-test
所以 BCPS 本质上仍然是消息驱动核心,而非 REST-first 系统。
5.2 顶层授权入口
bcps-online 中的 RmbService 统一承接 4 个顶级金融服务:
- 还款申请
- 还款通知
- 放款申请
- 放款通知
该入口再转给 NewAuthOnlineServiceImpl。
5.3 NewAuthOnlineServiceImpl
这是 BCPS 联机入口最关键的骨架类之一。它负责:
- 初始化系统/机构上下文
- 解析 RMB 报文为 Map
- 提取
serviceCode等关键字段 - 落请求历史
TmReqHst - 调用授权/账户/参数/状态机相关设施
- 在需要时进一步调用
CoreOnlineFacade/CoreFsFacadeImpl - 统一组装响应报文
依赖中可以直接看到:
StateMachineConsoleCoreOnlineFacadeCoreAcctFacilityCoreReqConvertImplCoreContextConvertImplCoreAuthResultConvertImpl
这说明它不是简单的“listener + service”,而是 BCPS 联机交易的统一入口编排器。
5.4 服务码子适配层
bcps-online/src/main/java/.../online/service/subserver 下有 41 个一级子目录,采用高度模板化的实现方式,例如:
IBiz_215005_06201308_01Impl:借据列表查询IBiz_215006_06201309_01Impl:借据详情查询IBiz_215007_06201310_01Impl:还款计划查询IBiz_212201_00000000_01Impl:重组-借新还旧申请IBiz_212203_00000000_01Impl:重组相关交易
这些类的共性是:
- 命名高度规则化,带明显代码模板/生成痕迹
- 每个类只做少量协议映射
- 最终统一调用
OnlineFacadeService.invoke(...)
5.5 OnlineFacadeService
这是 BCPS 在线适配层到核心层的标准桥梁,处理流程大致是:
beforeProc()前置扩展- 解析/构造
CoreOnlineInterfaceReqContext - 将外层 DTO 转换为 Core 请求对象
- 通过
ContextLoaderFactory加载上下文模块 - 调用
coreOnlineFacade.entry(serviceKey, ...) - 做错误码转换、降级、响应 DTO 回填
这条链路非常关键,因为大多数在线查询/操作类最终都会走这里。
5.6 bcps-core-online-facade
CoreOnlineApiRegister 会在启动时扫描 @CoreOnlineFacade 与 @CoreServiceKey,注册核心联机门面。
实测:
@CoreServiceKey标注48处- 门面实现类共
9个,分别覆盖:CoreLoanEscrowFacadeImplCoreAcctManageFacadeImplCoreLoanQueryFacadeImplCoreLoanReorgFacadeImplCoreStmtQueryFacadeImplCoreAcctQueryFacadeImplCoreCustAttrManageFacadeImplCoreOnlineAuthFacadeImplCoreTxnQueryFacadeImpl
这说明 BCPS 在线核心是“服务键注册 + 门面分域”的设计,而不是一个巨大 Service 直接分支。
5.7 REST 入口的真实地位
仓库里确实有 ParamUpdateController,但类体目前为空。
同时 bcps-online/nfs/service/param/README.md 明确说明:
- 参数更新更推荐走 RMB 服务
- 支持
PARAM_STATIC_UPDATE - 支持
PARAM_DYNAMIC_UPDATE
所以 BCPS 的 REST 入口并不是主业务通道。
六、核心业务域分析
6.1 联机授权与金融入口域
由 authorization/* 和顶层 RmbService / NewAuthOnlineServiceImpl 承担,负责:
- 联机金融入口
- 请求去重与历史落库
- 状态机驱动
- 返回码与异常处理
- 与核心联机门面的桥接
6.2 查询与非金融适配域
online/service/subserver/* 与 nfs/* 共同承担:
- 借据查询
- 账单查询
- 交易查询
- 客户属性查询与修改
- 参数更新
- FON、风险、客服等队列侧非金融查询
配置文件里也明确区分了:
nfsSimFonServiceIdnfsRiskServiceId
说明 BCPS 同时给运营侧和风险侧提供非金融查询服务。
6.3 借据与计划生成域
bcps-core-loan 主要负责:
- 借据生成
- 还款计划生成
- 借据记录与辅助逻辑
这是“贷款对象建模与计划计算”的核心域。
6.4 入账与后置处理域
bcps-core-post 主要负责:
- 入账
- 还款
- 计息
- 分期/计划
- 账单
- 冲正
- 退款
- 重组
- 核销
- 额度控制
- 余额/汇总
这一层是 BCPS 最像“信用会计核心”的地方。
6.5 批扣与批处理域
bcps-core-dd 与 bcps-batch-dcn 共同承担批量主链路。
bcps-batch-dcn 下可以直接看到这些任务簇:
ddresponsefilefileloanloanterminatedatacleantranadjchecktableDelByTimes0100s6000s6004s6005s6006s7000s8000s8004s9106s9200s9230s9250s9410s9500s9505s9510
这说明 BCPS 的批量子系统不是“几个简单 Job”,而是有完整作业簇、步骤号体系和文件处理链。
6.6 仓库与参数域
bcps-core-repository、bcps-core-param-def、bcps-param-def、bcps-core-infrastructure 构成了一整层通用数据模型与参数框架。
bcps-core-infrastructure/readme.md 还直接记录了多个版本的 ERM 变更,例如:
- 决策组/共享属性/白名单表新增
- 账户扩展字段扩容
- 产品扩展字段新增
这说明参数与仓库层在 BCPS 中是长期演进的基础平台,而不只是附属包。
七、数据库与多产品线结构
7.1 Core / Runtime 分库
从配置和 metadata 可以确认 BCPS 至少存在两层主库:
bcpscoredb:核心/ADM/Repository 侧bcpsdb:DCN 运行侧
这与 BNBS 那种“按产品线分库”的模式不同,BCPS 更明显是“核心库 + 运行库”分层。
7.2 DCN 运行库表域
metadata/tdsql/dcn/bcpsdb/table 下的文件名已经足够说明 BCPS 的运行数据模型:
7.2.1 账户、借据、计划、账单
TM_ACCOUNTTM_LOANTM_PLANTM_STMTTM_SCHEDULE_HSTTM_LOAN_RECEIPT_LIST
7.2.2 交易与请求历史
TM_TRANS_LOGTM_TRANS_CONTROLTM_TRANS_INFO_HSTTM_REQ_HSTTM_NF_TRANS_ORDER
7.2.3 批扣、额度、参数
TM_DD_BATCH_CONFIGTM_DD_ERROR_RULETM_DD_FREQUENCY_RULETM_ACCT_USED_LIMIT_CTLTM_PARA_PRODUCT_GROUPTM_PARA_AUTH_BUSINESS_CTL
7.2.4 资产、核销、保险、权益
TM_LOAN_ASSET_DISPOSALTM_LOAN_WRITEOFFTM_INSURANCE_CONFIGTM_LOAN_EQUITY_INFOTM_LOAN_REG_EQUITY_INFO
7.3 Core Repository 库表域
metadata/tdsql/adm/bcpscoredb/table/repository 明确对应仓库/核心层表结构,例如:
TM_LOAN_REORGTM_REORG_ORDERTM_REORG_LOAN_RELATIONTM_SCHEDULE_STANDARDTM_PLAN_BUCKETTM_ACCT_STANDARDTM_PAYMENT_ASSIGN_REGTM_PAYMENT_REVERTTM_PARA_BIZ_RULETM_PARA_TRANS_CONFIGTM_PARA_SUBSIDY_CONFIG
这组表明显更偏“标准模型、产品配置、核心规则、重组/分配/标准计划”。
7.4 多产品线部署
BCPS 的配置目录显示它并不只支持 bcps 一套部署,还存在:
gcps-*pcps-*zcps-*cps-*4wbp
对应数据库口径在配置或测试 metadata 中可看到:
bcpsdbgcpsdbpcpsdbzcpsdbwcpsdb
其中:
tdsqlmetadata 主要展开了bcpsdb与bcpscoredbh2metadata 还保留了gcpsdb、pcpsdb、zcpsdb变体
所以 BCPS 具备明显的多产品线、多部署形态特征。
八、与 BFON / BNBS 的关系
这部分可以从当前仓库直接交叉验证。
8.1 BFON 与 BCPS
BFON 文档中出现的多个核心查询/操作码,在 BCPS subserver 层都能直接找到映射实现,例如:
215003:账户账务信息查询215005:借据列表查询215006:借据详情查询215007:还款计划查询215011:入账历史列表215012:入账历史详情215013:扣款结果查询212201:重组-借新还旧申请212203:重组相关交易
因此 BFON 对 BCPS 的依赖不是抽象推断,而是可以从服务码适配类直接印证。
8.2 BNBS 与 BCPS
BNBS 的 action/cps、facility/fs/cps 等包名说明 BNBS 会调用或编排 BCPS 能力。
结合两边结构来看,较稳妥的边界判断是:
- BNBS:产品域流程编排、前台接入、资金/批扣中台
- BCPS:账户、借据、入账、重组、批扣核心处理
也就是说,BNBS 更像产品域的外层组合层,BCPS 更像信用核心内核。
九、结论
BCPS 的架构本质可以概括为:
- 外层:RMB 联机适配层
- 中层:在线门面与上下文装载层
- 内核:借据、入账、批扣、重组、额度等核心信用处理域
- 底座:仓库、参数、基础设施、批量平台
它最鲜明的技术特征有 4 个:
- 核心域非常厚:
bcps-core-post与bcps-core-loan承担了真正的信用核心逻辑 - 联机适配强模板化:大量
IBiz_<serviceCode>_...Impl命名与结构高度统一 - 多部署多产品线:
bcps/gcps/pcps/zcps/wcps变体明显 - 批量能力很重:存在完整的作业簇、文件接收、扣款和数据清理体系
后续如果要继续深挖 BCPS,建议按问题类型分入口:
- 在线交易接入问题:先看
bcps-online/authorization和subserver - 查询类问题:再看
OnlineFacadeService与bcps-core-online-facade - 借据/计划问题:重点看
bcps-core-loan - 入账/还款/重组/核销问题:重点看
bcps-core-post - 批扣/文件问题:看
bcps-batch-dcn+bcps-core-dd