Skip to content

BCPS 信用处理系统

一、系统概述

BCPS 是这组 COE 代码里最接近“信用账户与借据核心”的系统。它不仅有联机入口,还有独立的批量子系统、核心借据域、核心入账域、重组域、额度域、通知域、参数域和通用仓库层。

从模块命名、运行配置、核心表结构和联机适配层可以看出,BCPS 的职责明显重于普通产品编排服务,更像一套完整的信用处理核心平台。

属性
Group IDcn.webank.cnc.cps
Artifact IDbcps-parent
父 POMcn.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-dcnbcps-batch-dcnbcps-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-testCore 流程测试/内测壳,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-infrastructureCore DTO、持久层基础设施
bcps-core-repository通用仓库组件
bcps-core-param-defCore 参数定义
bcps-aspectAOP 支撑
bcps-spoke-mock外围模拟

2.5 Maven 与 Gradle 的差异

Gradle settings.gradle 里还能看到:

  • bcps-data-factory
  • bcps-core-online-nfs
  • bcps-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=U474
  • instanceType=BCPS-PROCESS
  • spring.profiles.active=pcps-auth
  • fsScenario=01

同时还定义了 4 个核心服务入口:

  • repayApplyServiceId=02100002
  • repayNotifyServiceId=02100001
  • loanApplyServiceId=02100004
  • loanNotifyServiceId=02100003

3.2 批量系统:bcps-batch-dcn

主类:cn.webank.cnc.CpsBatchApplication

关键特征:

  • @SpringBootApplication(exclude = {JpaRepositoriesAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
  • @EnableCaching
  • @Import({BatchConfig.class, ExecutorConfiguration.class})

配置文件可确认:

  • systemId=U566
  • instanceType=BCPS-DCN
  • cnc.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=Z524
  • cnc.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/request
  • facade/response
  • service/core/impl
  • service/core/schedule
  • service/core/record
  • service/core/helper

它更像“借据对象与计划生成引擎”,负责贷款生成、还款计划与借据记录的核心逻辑。

4.4 bcps-core-post

bcps-core-post 是全仓库最重的单体核心域之一,业务面极宽。service/core 下能直接看到大量专业子域:

  • account
  • payment
  • plan
  • schedule
  • interest
  • post
  • deposit
  • refund
  • repayrevert
  • reorg
  • writeoff
  • acctlimit
  • loanreg
  • remain
  • rollback
  • assign
  • stmt
  • terminate

这基本已经覆盖了一套信用核心在“记账、还款、利息、核销、冲正、重组、账单、额度”上的主干能力。

4.5 bcps-core-repository

仓库自带说明写得很直接:

  • “通用仓库组件”

同时 metadata/tdsql/adm/bcpscoredb/table/repository 下的表结构也能印证这一点,说明 BCPS 有一层明确的通用 ERM / Repository 抽象,不仅是普通 DAO。

五、联机入口与调用链

5.1 通信形态

BCPS 虽然存在少量 Controller,但业务主链路仍以 RMB 为主:

  • 全仓库 @RmbMap90
  • bcps-onlinesubserver 目录下就有 82@RmbMap
  • 真正的 @RestController / @Controller 入口共 9 处,其中 8 处来自 bcps-core-flow-test

所以 BCPS 本质上仍然是消息驱动核心,而非 REST-first 系统。

5.2 顶层授权入口

bcps-online 中的 RmbService 统一承接 4 个顶级金融服务:

  • 还款申请
  • 还款通知
  • 放款申请
  • 放款通知

该入口再转给 NewAuthOnlineServiceImpl

5.3 NewAuthOnlineServiceImpl

这是 BCPS 联机入口最关键的骨架类之一。它负责:

  1. 初始化系统/机构上下文
  2. 解析 RMB 报文为 Map
  3. 提取 serviceCode 等关键字段
  4. 落请求历史 TmReqHst
  5. 调用授权/账户/参数/状态机相关设施
  6. 在需要时进一步调用 CoreOnlineFacade / CoreFsFacadeImpl
  7. 统一组装响应报文

依赖中可以直接看到:

  • StateMachineConsole
  • CoreOnlineFacade
  • CoreAcctFacility
  • CoreReqConvertImpl
  • CoreContextConvertImpl
  • CoreAuthResultConvertImpl

这说明它不是简单的“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 在线适配层到核心层的标准桥梁,处理流程大致是:

  1. beforeProc() 前置扩展
  2. 解析/构造 CoreOnlineInterfaceReqContext
  3. 将外层 DTO 转换为 Core 请求对象
  4. 通过 ContextLoaderFactory 加载上下文模块
  5. 调用 coreOnlineFacade.entry(serviceKey, ...)
  6. 做错误码转换、降级、响应 DTO 回填

这条链路非常关键,因为大多数在线查询/操作类最终都会走这里。

5.6 bcps-core-online-facade

CoreOnlineApiRegister 会在启动时扫描 @CoreOnlineFacade@CoreServiceKey,注册核心联机门面。

实测:

  • @CoreServiceKey 标注 48
  • 门面实现类共 9 个,分别覆盖:
    • CoreLoanEscrowFacadeImpl
    • CoreAcctManageFacadeImpl
    • CoreLoanQueryFacadeImpl
    • CoreLoanReorgFacadeImpl
    • CoreStmtQueryFacadeImpl
    • CoreAcctQueryFacadeImpl
    • CoreCustAttrManageFacadeImpl
    • CoreOnlineAuthFacadeImpl
    • CoreTxnQueryFacadeImpl

这说明 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、风险、客服等队列侧非金融查询

配置文件里也明确区分了:

  • nfsSimFonServiceId
  • nfsRiskServiceId

说明 BCPS 同时给运营侧和风险侧提供非金融查询服务。

6.3 借据与计划生成域

bcps-core-loan 主要负责:

  • 借据生成
  • 还款计划生成
  • 借据记录与辅助逻辑

这是“贷款对象建模与计划计算”的核心域。

6.4 入账与后置处理域

bcps-core-post 主要负责:

  • 入账
  • 还款
  • 计息
  • 分期/计划
  • 账单
  • 冲正
  • 退款
  • 重组
  • 核销
  • 额度控制
  • 余额/汇总

这一层是 BCPS 最像“信用会计核心”的地方。

6.5 批扣与批处理域

bcps-core-ddbcps-batch-dcn 共同承担批量主链路。

bcps-batch-dcn 下可以直接看到这些任务簇:

  • dd
  • responsefile
  • file
  • loan
  • loanterminate
  • dataclean
  • tranadjcheck
  • tableDelByTime
  • s0100
  • s6000
  • s6004
  • s6005
  • s6006
  • s7000
  • s8000
  • s8004
  • s9106
  • s9200
  • s9230
  • s9250
  • s9410
  • s9500
  • s9505
  • s9510

这说明 BCPS 的批量子系统不是“几个简单 Job”,而是有完整作业簇、步骤号体系和文件处理链。

6.6 仓库与参数域

bcps-core-repositorybcps-core-param-defbcps-param-defbcps-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_ACCOUNT
  • TM_LOAN
  • TM_PLAN
  • TM_STMT
  • TM_SCHEDULE_HST
  • TM_LOAN_RECEIPT_LIST

7.2.2 交易与请求历史

  • TM_TRANS_LOG
  • TM_TRANS_CONTROL
  • TM_TRANS_INFO_HST
  • TM_REQ_HST
  • TM_NF_TRANS_ORDER

7.2.3 批扣、额度、参数

  • TM_DD_BATCH_CONFIG
  • TM_DD_ERROR_RULE
  • TM_DD_FREQUENCY_RULE
  • TM_ACCT_USED_LIMIT_CTL
  • TM_PARA_PRODUCT_GROUP
  • TM_PARA_AUTH_BUSINESS_CTL

7.2.4 资产、核销、保险、权益

  • TM_LOAN_ASSET_DISPOSAL
  • TM_LOAN_WRITEOFF
  • TM_INSURANCE_CONFIG
  • TM_LOAN_EQUITY_INFO
  • TM_LOAN_REG_EQUITY_INFO

7.3 Core Repository 库表域

metadata/tdsql/adm/bcpscoredb/table/repository 明确对应仓库/核心层表结构,例如:

  • TM_LOAN_REORG
  • TM_REORG_ORDER
  • TM_REORG_LOAN_RELATION
  • TM_SCHEDULE_STANDARD
  • TM_PLAN_BUCKET
  • TM_ACCT_STANDARD
  • TM_PAYMENT_ASSIGN_REG
  • TM_PAYMENT_REVERT
  • TM_PARA_BIZ_RULE
  • TM_PARA_TRANS_CONFIG
  • TM_PARA_SUBSIDY_CONFIG

这组表明显更偏“标准模型、产品配置、核心规则、重组/分配/标准计划”。

7.4 多产品线部署

BCPS 的配置目录显示它并不只支持 bcps 一套部署,还存在:

  • gcps-*
  • pcps-*
  • zcps-*
  • cps-*4wbp

对应数据库口径在配置或测试 metadata 中可看到:

  • bcpsdb
  • gcpsdb
  • pcpsdb
  • zcpsdb
  • wcpsdb

其中:

  • tdsql metadata 主要展开了 bcpsdbbcpscoredb
  • h2 metadata 还保留了 gcpsdbpcpsdbzcpsdb 变体

所以 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/cpsfacility/fs/cps 等包名说明 BNBS 会调用或编排 BCPS 能力。

结合两边结构来看,较稳妥的边界判断是:

  • BNBS:产品域流程编排、前台接入、资金/批扣中台
  • BCPS:账户、借据、入账、重组、批扣核心处理

也就是说,BNBS 更像产品域的外层组合层,BCPS 更像信用核心内核。

九、结论

BCPS 的架构本质可以概括为:

  • 外层:RMB 联机适配层
  • 中层:在线门面与上下文装载层
  • 内核:借据、入账、批扣、重组、额度等核心信用处理域
  • 底座:仓库、参数、基础设施、批量平台

它最鲜明的技术特征有 4 个:

  1. 核心域非常厚bcps-core-postbcps-core-loan 承担了真正的信用核心逻辑
  2. 联机适配强模板化:大量 IBiz_<serviceCode>_...Impl 命名与结构高度统一
  3. 多部署多产品线bcps/gcps/pcps/zcps/wcps 变体明显
  4. 批量能力很重:存在完整的作业簇、文件接收、扣款和数据清理体系

后续如果要继续深挖 BCPS,建议按问题类型分入口:

  1. 在线交易接入问题:先看 bcps-online/authorizationsubserver
  2. 查询类问题:再看 OnlineFacadeServicebcps-core-online-facade
  3. 借据/计划问题:重点看 bcps-core-loan
  4. 入账/还款/重组/核销问题:重点看 bcps-core-post
  5. 批扣/文件问题:看 bcps-batch-dcn + bcps-core-dd