Skip to content

BNBS 贷款底座新业务系统

一、系统概述

BNBS 不是单一职责的小型服务,而是一套围绕贷款底座前台产品域构建的组合系统。按代码结构看,它至少同时承担了 4 类职责:

  1. 前端通用网关(CGI)
  2. 产品 ADM / DCN 业务编排
  3. 批扣与资金中台(MID-BATCH / MID-FS)
  4. 批量文件、对账、通知、断点恢复等配套基础能力

从仓库 README、启动模块、包结构和配置可以确认,BNBS 的定位更接近“产品域编排层 + 资金/批扣中台”,而不是会计核心或借据核心。

属性
Group IDcn.webank.cnc.nbs
Artifact IDbnbs-parent
父 POMcn.webank.cnc.sdk:zcnc-sdk-parent-for-coe:4.1.37-SNAPSHOT
Java 版本Java 21
构建方式Maven 多模块
数据库贷款 bnbsdb,信用卡 ccnbsdb
主要通信方式RMB 消息总线
活跃部署形态ADM union appDCN union app
系统编号贷款 ADM U554,贷款 DCN U492,信用卡 ADM U857,信用卡 DCN U836
代码规模3757 个 Java、266 个 XML、4845 个 SQL

二、模块结构

BNBS 根 POM 只有 5 个一级模块,但内部再次拆分成 CGI、核心业务、中台和启动壳 4 层。

2.1 一级模块

模块角色
bnbs-core产品域核心业务,覆盖 ADM、DCN、批量、断点恢复、共享组件
bnbs-cgi前端通用网关层,负责协议转换、报文定义、渠道适配
bnbs-mid资金中台与批扣中台,覆盖 MID-FS、MID-BATCH
bnbs-service-adm-union-appADM 联合部署启动壳
bnbs-service-dcn-union-appDCN 联合部署启动壳

2.2 bnbs-core 子模块

子模块作用
bnbs-comm-def参数类、枚举、通用定义
bnbs-daoDAO 与 MyBatis 层
bnbs-facility共享 facility、工具、环境、流水号等
bnbs-comm联机/批量通用组件、远程 RMB 调用、BaseContext
bnbs-service-admADM 联机业务
bnbs-service-dcnDCN 联机业务
bnbs-batch-dcnDCN 批量任务
bnbs-batch-admADM 批量任务
bnbs-breakpoint断点恢复/补偿能力
bnbs-core-facade对外监听抽象与门面定义

2.3 bnbs-cgi 子模块

子模块作用
bnbs-cgi-daoCGI 独立 DAO
bnbs-cgi-comm-defCGI 报文与定义
bnbs-cgi-commCGI 公共组件
bnbs-cgi-facilityCGI 层基础设施
bnbs-cgi-service-admCGI 服务入口与状态机执行

2.4 bnbs-mid 子模块

子模块作用
bnbs-mid-dao中台 DAO
bnbs-mid-comm-def中台定义
bnbs-mid-facility中台公共能力、RMB 发送、任务设施
bnbs-midfs-service-dcn联机资金中台
bnbs-mid-batch-dcn批扣中台批量任务
bnbs-mid-facade中台对外门面

2.5 架构演化特征

  • 原先的 NbsServiceDcnApplicationNbsBatchDcnApplicationNbsMidFsApplicationNbsMidBatchApplication 等启动类仍在仓库中,但均已注释停用。
  • 当前有效形态是“联合部署”:用 union-app 把 CGI、ADM、DCN、批量、中台聚合到更少的运行单元中。
  • 这意味着排障时不能只看模块名,要同时区分“代码归属模块”和“实际部署单元”。

三、启动与部署形态

3.1 ADM 联合部署

主类:cn.webank.cnc.nbs.NbsServiceAdmUnionApplication

关键特征:

  • @SpringBootApplication
  • @EnableScheduling
  • @EnableAsync
  • @EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
  • 扫描 cn.webank.cnc.bnbscn.webank.cnc.nbscn.webank.cnc.rcbs.** 等包
  • @ImportResource({"classpath:biz/biz-context.xml", "classpath:xml/biz-context.xml"})

配置文件中可确认:

  • startup.mode=union
  • domain.name=LOAN
  • systemId=U554

3.2 DCN 联合部署

主类:cn.webank.cnc.nbs.NbsServiceDcnUnionApplication

关键特征:

  • 比 ADM 启动壳引入更多模块:midclrenginefctmigrationnbs.bclfs、批量模块等
  • @EnableCaching
  • @ImportResource({"classpath:biz/biz-context.xml", "classpath:mid/biz-context.xml", "classpath:batchdcn/biz-context.xml", "classpath:midbatch/biz-context.xml"})

配置文件中可确认:

  • startup.mode=union
  • domain.name=LOAN
  • systemId=U492

3.3 双产品线共仓

BNBS 同一套代码同时支持贷款和信用卡两条产品线:

  • 贷款:bnbsdb
  • 信用卡:ccnbsdb

配置目录也分成 4 套:

  • bnbs-service-adm-union-app
  • bnbs-service-dcn-union-app
  • ccnbs-service-adm-union-app
  • ccnbs-service-dcn-union-app

这说明 BNBS 不是单纯“贷款系统”,而是一个贷款/信用卡共仓、多部署、多库的产品域平台。

四、包架构与代码组织

BNBS 的联机代码高度状态机化、上下文化、服务码化。

4.1 bnbs-service-dcn

bnbs-service-dcn 是最核心的对客编排层,目录结构非常能说明问题:

  • context/*:按服务码或业务域拆分的上下文对象,实测一级子目录 43
  • state/*:状态机状态实现,一级域包 9
  • action/*:外部系统或子流程动作,一级域包 11
  • flowAction/*:流程动作编排层
  • service/impl:RMB 入口和通用入口
  • service/callback:异步回调
  • facility/fsfacility/nfs:金融/非金融侧基础设施
  • remote/mesremote/edm:远程系统适配
  • rppcenter/*:还款计划/承诺支付相关独立子域

从目录命名可明确识别的集成方向包括:

  • action/tcs:风控/交易控制相关
  • action/cvs:信核/核验回调
  • action/cps:核心信用处理系统
  • action/mes:消息/通知
  • action/ref:外部审批/核验结果
  • action/fs / action/midFs:资金转账
  • action/dps:文件/数据处理侧

4.2 bnbs-service-adm

ADM 层比 DCN 更聚焦于“客户建档前与产品配置相关的流程”:

  • action/ecifaction/dcnaction/contract
  • state/ecifstate/contractstate/channelLimit
  • flowAction/contract
  • psc/*ecif/*

结合 README 和入口服务码,ADM 的主责非常清晰:

  • 开户预审
  • 欢迎页/前置产品逻辑
  • ECIF 查询与建档前校验
  • 名单校验
  • 合同决策与合同校验
  • 客户信息创建前置处理

4.3 bnbs-cgi-service-adm

CGI 层是前端通用网关,不承担产品核心决策,但负责:

  • 渠道协议转换
  • 报文定义隔离
  • DCN 路由定位
  • 请求合法性校验
  • 页面返回码和文案映射
  • 会话/客户级缓存

对应包结构有:

  • context
  • state
  • action
  • processhandler
  • service
  • serviceCodeEnum

这与 README 对 CGI 的定位完全一致。

4.4 bnbs-mid

bnbs-mid 明显是一个独立的中台域:

  • bnbs-midfs-service-dcn:联机资金转账
  • bnbs-mid-batch-dcn:批量扣款、对账、通知、文件处理
  • bnbs-mid-facility:RMB 发送、任务、灰度、公共能力

其中 MidWayFsOnlineServiceImpl 注释直接写明:

  • 资金中台联机接口在子系统合并后通过本地消息调用
  • 不再对外单独暴露 RMB 服务

这说明在当前联合部署形态下,MID-FS 已被嵌入 BNBS DCN 运行单元内部。

4.5 通用入口模板

StandardModuleOnlineServiceImpl 是 BNBS 的关键骨架类。它负责:

  1. RMB 报文解析
  2. 提取公共字段并打平
  3. 装载 TxnServiceAttribute
  4. 执行接口级数据修正 IFixProc
  5. 落交易流水 TM_TRACE_NBS
  6. 调用状态机/业务流程 process()
  7. 统一组装响应报文与返回码

它同时依赖:

  • StateMachineConsole
  • StateMachineConsoleForConfig
  • BreakpointFacility
  • GrayCtlFacility
  • UnifiedParameterFacility
  • ModuleDbFacility

因此 BNBS 的主处理模式可以概括为:

RMB 入口 -> 数据修正 -> 配置装载 -> 状态机执行 -> 统一响应

五、对外入口与通信模式

5.1 通信形态

BNBS 基本是纯消息驱动系统:

  • 全仓库 @RmbMap 标注约 196
  • @RestController / @Controller0

也就是说,BNBS 对外几乎不暴露标准 REST API,核心能力都通过 RMB 服务号承接。

5.2 主要服务入口

入口类服务数角色
RcbsCgiOnlineService4LoanImpl33@RmbMap贷款 CGI 前台网关入口
BnbsOnlineServiceForLoanAdmImpl8@RmbMap贷款 ADM 联机入口
BnbsOnlineServiceForRetailLoanDcnImpl55@RmbMap贷款 DCN 联机入口
BnbsOnlineServiceForCreditCardAdmImpl多个信用卡 ADM 入口
BnbsOnlineServiceForCreditCardDcnImpl多个信用卡 DCN 入口
MidFsAsyncOnlineServiceImpl1 个回调入口资金中台异步回调

5.3 服务码家族

README 中对接口 ID 命名规则写得很明确:

  • CG:授信
  • LA:借款
  • RA:还款
  • NQ:非金融查询
  • NW:非金融写交易
  • RN:运营内管
  • CS:客服
  • TN:通知

代码目录也与这一规则高度一致,例如:

  • context/cg1001
  • context/la1003
  • context/ra1201
  • state/operate/rn0011
  • flowAction/tn2001

5.4 CGI 报文定义隔离

CGI 层额外定义了一套隔离规则:

  • CGI-REQxxx
  • CGI-RSPxxx

目的是把 CGI 报文定义与产品 ADM/DCN 层的接口定义隔开,避免同名冲突。这一点来自 README,且与 bnbs-cgi-comm-defserviceCodeEnum 的结构相互印证。

六、核心业务域分析

6.1 CGI 网关域

作用:

  • 前端请求协议转换
  • 基础校验
  • 页面码映射
  • 渠道到产品域的路由

它本身不是最终业务处理者,而是 BNBS 产品域的前置接入层。

6.2 ADM 预处理域

作用:

  • 客户建档前校验
  • ECIF 前置处理
  • 名单校验
  • 合同决策
  • 产品配置类功能

ADM 更像“开户/签约前的产品治理层”。

6.3 DCN 对客编排域

作用:

  • 对客借款、授信、还款、个人中心、证件上传、影像回调等主流程
  • 组合调用风控、核验、核心账务、消息、合同、资金等外部能力
  • 状态机推进与流程异常处理

这部分是 BNBS 最核心、也最复杂的业务中枢。

6.4 MID-FS 资金中台

作用:

  • 联机资金转账
  • 不同转账策略编排
  • 对接存款核心(DEPOSIT)和支付系统(UPP)

MidWayFsOnlineServiceImpl 的实现里可看到:

  • 幂等处理
  • 流控
  • 交易历史记录
  • 发送 RMB / 取目标 DCN / 自定义返回码装配

所以 MID-FS 不是简单工具模块,而是独立的资金处理子系统。

6.5 MID-BATCH / DCN-BATCH

README 与包目录都显示 BNBS 有两条批量能力线:

  • bnbs-batch-dcn:产品域批量,如批扣、提醒、文件处理、合同归档
  • bnbs-mid-batch-dcn:中台批量,如扣款策略、对账、通知、资金文件处理

bnbs-mid-batch-dcn/README.md 明确提到:

  • 自扣兼容客户账户不存在场景
  • 公众号 openId 落库
  • 免息券到期提醒
  • 通知类 JOB 拆分

说明该层已深度承担运营通知和文件作业逻辑。

七、数据库与脚本结构

7.1 分库模型

BNBS 明确按产品线分库:

  • 贷款:bnbsdb
  • 信用卡:ccnbsdb

同时遵循:

  • DDL 共用一套表结构
  • DML 按贷款/信用卡分别维护

7.2 元数据目录

metadata 目录结构非常清晰:

  • table-model/adm/ddl
  • table-model/adm/dml/loan
  • table-model/adm/dml/credit-card
  • table-model/dcn/ddl
  • table-model/dcn/dml/loan
  • table-model/dcn/dml/credit-card

这意味着 BNBS 的脚本治理是“ADM/DCN 分层 + loan/card 分产品线”的。

7.3 关键表域

按 DDL 文件名可归纳出 4 组核心数据域。

7.3.1 客户与产品

  • TM_NBS_CUST
  • TM_NBS_CUST_PRODUCT
  • TM_NBS_CUST_PRODUCT_CREDIT
  • TM_NBS_CUST_ATTR_PHONE
  • TM_BANK_CARD_LIST_HST

7.3.2 流程与追踪

  • TM_MAIN_TRANS
  • TM_TRANS_FLOW
  • TM_TRANS_FLOW_IDCARD
  • TM_STATE_MACHINE_CTL
  • TM_STATE_MACHINE_FLOW_CONF
  • TM_TRACE_NBS
  • TM_TRACE_NBS_EXT

7.3.3 合同、决策与风控配置

  • TM_AGREEMENT_LOAN
  • TM_CONTRACT_PRE_SIGN
  • TM_CONTRACT_SIGN_TASK_HST
  • TM_DECISION
  • TM_DECISION_GROUP
  • TM_PARA_GROUP_CONTRACT

7.3.4 批量、清算与扣款

  • TM_PRE_WITHHOLD_PLAN
  • TM_BATCH_CPS_DDREQ_LK
  • TM_CLR_BATCH_FILE_ITEM
  • TM_CLR_BATCH_FILE_CFG
  • TM_BCLFS_BA_WITHHOLD_SUMMARY
  • TM_BCLFS_UDS_LK_DTL

7.4 脚本治理

  • dbScript/:增量版本脚本
  • metadata/:完整初始化口径

README 还明确要求版本开发完成后把增量脚本同步回 metadata,这说明团队是把 metadata 当作“最终全量基线”来管理的。

八、业务主链路理解

以下链路是基于代码结构和入口职责的推断,不等同于单笔请求必然经过的完整实时路径。

8.1 前台对客链路

  1. 渠道请求先进入 CGI 网关
  2. CGI 做协议转换、报文校验、文案码映射、DCN 路由
  3. 贷款主流程进入 DCN 编排层
  4. 建档前或合同前置流程进入 ADM 编排层
  5. DCN/ADM 按状态机组合调用外部系统并返回结果

8.2 借款与还款链路

BnbsOnlineServiceForRetailLoanDcnImpl 的服务码可以直接看出,它覆盖了:

  • 借款反欺诈
  • 放款接口与放款结果查询
  • 借款试算
  • 主动还款/预约还款/还款结果查询
  • 借据详情/借据列表/还款记录查询
  • 合同签署、合同校验、合同决策

因此 BNBS 在贷款产品域里承担的是“客户流程组合层”,而不是只负责某一个局部动作。

8.3 资金与批量链路

  1. 联机资金转账进入 MID-FS
  2. 产品批扣、对账、提醒进入 BNBS-BATCH 或 MID-BATCH
  3. 文件经 FPS / BCLFS / 中台文件设施处理
  4. 结果回调或通知再回流到 BNBS 对客流程

九、与其他系统的边界关系

按代码里的包名和入口设计,可以较确定地看出 BNBS 会直接编排或依赖以下能力:

  • CPS:核心信用处理/账务能力
  • TCS:风控或交易控制能力
  • CVS:信核/影像审批结果
  • MES:消息通知
  • REF:外部审批/核验结果回传
  • MID-FS:资金中台
  • BCLFS / UPP / DEPOSIT:文件与资金清算侧

所以 BNBS 的边界不是“一个简单产品服务”,而是连接前台渠道、风控、核验、核心账务、资金和批量的综合编排平台。

十、结论

BNBS 的本质可以概括为:

  • 前台渠道网关:CGI
  • 产品前置治理:ADM
  • 对客主流程编排:DCN
  • 资金/批扣中台:MID-FSMID-BATCH

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

  1. 强状态机驱动:上下文、状态、流程动作全部按服务码拆分
  2. 强消息驱动:几乎完全以 RMB 作为系统间通信方式
  3. 强联合部署:逻辑模块边界清晰,但运行时已明显聚合

后续如果要继续深挖 BNBS,最值得优先按下面顺序切入:

  1. bnbs-service-dcn/service/impl 的入口类
  2. StandardModuleOnlineServiceImplprocess() 调度链
  3. context / state / action 对应的具体服务码实现
  4. bnbs-mid 中的 MID-FS / MID-BATCH 资金与批扣逻辑