BCVS 信核系统
一、系统概述
BCVS(Bank Credit Verification System,信核系统)是微众银行旗下的信用核验系统,负责在信贷业务流程中对客户进行多维度身份核验,涵盖电核(电话核验)、面核(面对面/视频核验)、刷脸识别、征信查询、公安核查等核心业务能力。
| 属性 | 值 |
|---|---|
| 组织标识 | cn.webank.cnc.cvs |
| 系统编号 | U568(service)/ U562(web) |
| 代码规模 | 约 2,257 个 Java 源文件 |
| 技术栈 | Spring Boot + MyBatis + RMB + ElasticSearch + Redis + WebSocket |
| 代码仓库 | git@git.weoa.com:cnc/ccvs.git |
系统能力概览
| 能力域 | 说明 |
|---|---|
| 电核(AF) | 自动/人工电话核验,含外呼、接听、通话记录 |
| 面核(FAC) | 视频面核,含微信视频、腾讯云实时音视频 |
| 刷脸识别 | 人脸比对、人脸质检、活体检测、降级处理 |
| 征信查询 | 人行征信、鹏元征信、公安联网核查 |
| 风控策略 | 策略引擎(Experian DA)、规则决策 |
| 答题核验 | 问答式核验(QE)、动态问题生成 |
| 工单管理 | 全生命周期工单流转、分配、审批、挂起、退单 |
| 外部集成 | 25+ 外部系统的 RMB/HTTP 调用 |
二、模块结构
bcvs/
├── pom.xml # 父 POM
├── bcvs-sdk/ # 核心业务 SDK 模块
├── bcvs-service/ # 后端服务模块(RMB 消息处理、后台任务)
├── bcvs-web/ # Web 前端接口模块(REST API、WebSocket)
├── conf/ # 生产环境配置
├── conf-dev/ # 开发环境配置
├── bin/ # 部署脚本
├── dbScript/ # 数据库脚本
└── metadata/ # 数据库元数据(建表 SQL)2.1 bcvs-sdk 模块
定位:核心业务逻辑层,包含全部业务领域逻辑、DAO、服务接口和外部系统调用客户端。
关键依赖:
| 依赖 | 用途 |
|---|---|
zcnc-sdk-starter-core | 微众云原生 SDK 核心 |
zcnc-sdk-starter-rcs | RCS(监管报送)SDK |
zrisk-sdk-pub / zrisk-sdk-qe / zrisk-sdk-pbc2 | 风控 SDK(策略引擎、答题、人行) |
DA / DA390 | Experian 策略引擎 |
ecif-cipher-aes | ECIF 加密 |
shardbatis | 分表路由 |
2.2 bcvs-service 模块
定位:后端服务进程,处理 RMB 消息驱动型业务逻辑、定时任务、异步处理。
主要职责:RMB 同步/异步消息接收与处理、批量工单处理、自动派单、定时任务、后台业务逻辑
2.3 bcvs-web 模块
定位:Web 服务进程,提供 REST API 接口,面向前端工作台和运营管理系统。
主要职责:REST Controller(25 个)、WebSocket 实时通信、HTTP 拦截器、定时任务
三、包架构
3.1 基础架构包
| 包路径 | 说明 | 关键类 |
|---|---|---|
cn.webank.cnc.cvs.base | 基类 | BaseService, BaseSao, BaseHandler, AbstractHandler |
cn.webank.cnc.cvs.annotation | 自定义注解 | @RmbOutFlag, @RmbInFilterFlag, @ReportBizType |
cn.webank.cnc.cvs.aspect | AOP 切面 | RmbOutAspect, RmbInAspect |
cn.webank.cnc.cvs.constants | 常量 | BaseConstant, PrmConstant, AssignRecConstant |
cn.webank.cnc.cvs.enums | 枚举 | 47 个枚举类 |
cn.webank.cnc.cvs.utils | 工具类 | BizSeqNoUtils, CaseUtil, CaseExtUtil |
3.2 业务域包(biz.*)
| 包路径 | 业务域 | 说明 |
|---|---|---|
biz.afs | 反欺诈/电核通知 | 电核结果通知 |
biz.cases | 工单管理 | 工单贷款/等待 |
biz.cases.opr | 工单操作 | 核心域:工单提交通过/拒绝/挂起/退单,20+ 类 |
biz.cases.query | 工单查询 | 工单提示/转单 |
biz.ccjs | 人行征信决策 | SQ007 征信决策 |
biz.cdps | 征信特征 | FIR(Feature Index Report) |
biz.config | 参数配置 | KV 参数管理、超时配置 |
biz.cris | 征信信息 | 人行征信、学历、公安核查 |
biz.engine | 策略引擎 | Experian DA 策略调用 |
biz.face | 刷脸核心 | 刷脸识别核心逻辑 |
biz.faceindentify | 刷脸决策流 | 刷脸策略:降级处理、重试、通过、超时拒绝 |
biz.file | 文件管理 | 文件上传/清理 |
biz.media | 影像件 | 影像件管理/统计 |
biz.qe | 答题核验 | QE 策略运行、答题缓存 |
biz.rec | 核查记录 | 通话记录/挂起记录 |
biz.rule | 策略规则 | 派单策略/核身策略/答题策略/天御策略/征信策略 |
biz.risk | 风控 | 客户风险标记 |
biz.rcs | RCS 报送 | 监管报送 |
3.3 SAO 客户端包(sao.*)
25+ 个外部系统调用客户端(详见第七章)。
3.4 DTO 包(dto.*)
30+ 个 DTO 子包,包含 100+ 个 Tm* 实体类及 Example 查询条件类。
四、核心类详解
4.1 BaseService(服务基类)
路径:cn.webank.cnc.cvs.base.BaseService
职责:所有业务 Service 的顶层基类,提供以下核心能力:
RMB 服务号常量定义:
ONLINE_SERVICE_ID = "06200261"— 同步 QASYNC_SERVICE_ID = "06210040"— 异步 QONLINE_SERVICE_ID_FOR_CALLBACK = "06201060"— 回调同步 QONLINE_SERVICE_ID_TWO = "06201148"— 驼峰格式同步 QONLINE_SERVICE_ID_ORDER_APPLY = "06201320"— 批量转单进件 QASYNC_SERVICE_ID_CASE_PULL = "06210544"— 自动派单异步 Q
工单子类路由:
getSubService(TmBaseCase)根据核身方式、产品号、场景查找对应的工单操作子类- 查找优先级:通用出件配置 >
S_核身方式_产品号_场景>S_核身方式_场景>S_核身方式_产品号>S_核身方式
- 查找优先级:通用出件配置 >
DCN 解析:通过 ECIF > 微信/QQ > 卡号 > 手机号 逐级解析 DCN
4.2 BaseSao(SAO 基类)
路径:cn.webank.cnc.cvs.base.BaseSao
职责:所有外部系统调用客户端的基类
- 同步 RMB 调用:
syncCall()— 通过RmbClientUtil.sendRequest()发送同步请求 - 异步 RMB 调用:
asyncCall()— 通过RmbClientUtil.publish()发布异步事件 - 序列号生成:注入
CaseSeqService和BizSeqNoUtils
4.3 RMBMessageFactory / RMBMessageSAOFactory
- RMBMessageFactory:构建 Message 对象(Fluent Builder 模式)
- RMBMessageSAOFactory:构建并直接发送 RMB 消息
buildAndSend()— 同步发送buildAndPublish()— 异步发布
4.4 工单操作服务(cases.opr)
接口:ISubCaseOprBizService
| 方法 | 说明 |
|---|---|
submitPass() | 提交通过 |
submitReject() | 提交拒绝 |
submitHangup() | 工单挂起 |
submitExceptionCase() | 提交异常工单 |
submitReturn() | 提交退单 |
processOverTimeCase() | 超时处理 |
子类实现(按 Bean 名称 S_核身方式 约定注册):
| 实现类 | Bean 名称 | 说明 |
|---|---|---|
CaseAfOprBizServices | S_AF | 电核 |
CaseAfaOprBizServices | S_AFA | 电核自动 |
CaseFacOprBizServices | S_FAC | 面核 |
CaseMdiSopOprBizServices | S_MDI_SOP | 多数据源 SOP |
CaseMdiXBOprBizServices | S_MDI_XB | 多数据源 XB |
CaseTelOprBizServices | S_TEL | 电话核验 |
继承体系:
CasesBaseOprBizService(公共基类)
├── CaseAfBaseOprService(电核基类)
│ └── CaseAfOprBizServices
├── CaseFacCommonOprBizServices(面核基类)
│ └── CaseFacOprBizServices
├── CaseTelBaseOprBizService(电话基类)
│ └── CaseTelOprBizServices
└── CaseMdiCommonOprBizServices(多数据源基类)
├── CaseMdiSopOprBizServices
└── CaseMdiXBOprBizServices4.5 刷脸识别服务(faceindentify)
接口:ISubCaseFaceIdentifyBizService
| 方法 | 说明 |
|---|---|
faceIdentifyPass() | 刷脸通过 |
faceIdentifyReject() | 降级拒绝 |
faceIdentifyRetry() | 重试刷脸 |
faceIdentifyDownVideo() | 降级面核 |
faceIdentifyDownTel() | 降级电核 |
faceIdentifyByWxRet() | 使用微信结论 |
faceIdentifyThingsAudit() | 事中复核 |
4.6 策略规则服务(rule)
| 服务类 | 说明 |
|---|---|
AssignCaseStraService | 派单策略:决定工单分配给哪个坐席/技能组 |
ValidateStraService | 核身策略:决定核身方式(电核/面核/刷脸) |
CvsQeStraService | 答题策略:生成核验问题 |
TyshAnStraService | 天御策略:腾讯天御反欺诈 |
CreStraService | 征信策略:征信查询决策 |
五、数据模型
5.1 核心实体表
| 实体类 | 对应表 | 说明 |
|---|---|---|
TmBaseCase | TM_BASE_CASE | 核心工单表:工单号、客户信息、核身方式、产品、状态、审核员 |
TmBaseCaseHis | TM_BASE_CASE_HIS | 工单历史表 |
TmCallRec | TM_CALL_REC | 通话记录表 |
TmHangupRec | TM_HANGUP_REC | 挂起记录 |
TmAssignRec | TM_ASSIGN_REC | 派单记录 |
TmCaseExt | TM_CASE_EXT | 工单扩展信息 |
TmCaseExceptionRec | TM_CASE_EXCEPTION_REC | 异常工单记录 |
TmCaseWaitTask | TM_CASE_WAIT_TASK | 等待任务 |
5.2 刷脸相关表
| 实体类 | 说明 |
|---|---|
TmFaceIdentifyFlow | 刷脸识别流转记录 |
TmFaceRecordFlow | 刷脸记录 |
TmFaceQueue | 刷脸队列 |
TmFaceWorker | 刷脸坐席 |
TmFaceDegradeFlow | 刷脸降级流转 |
5.3 配置参数表
| 实体类 | 说明 |
|---|---|
TmPrmConfig | 参数配置主表(KV 存储) |
TmPrmProductConfig | 产品级参数配置 |
TmPrmQtaskConfig | 答题任务配置 |
TmQueueConfig | 队列配置 |
TmVerifyConfig | 核身配置 |
TmAssignPriorityConfig | 派单优先级配置 |
5.4 征信/风控表
| 实体类 | 说明 |
|---|---|
TmPoliceCheck | 公安核查信息 |
TmPbcInfo | 人行信息 |
TmEducation | 学历 |
TmCrisTask | 征信任务 |
TmAiFeatureFlow | AI 特征流转 |
5.5 订单表
| 实体类 | 说明 |
|---|---|
TmOrder / TmOrderHis | 订单表/历史 |
TmOrderPool | 订单池 |
TmBatchOrder | 批量订单 |
5.6 枚举类(47 个)
| 分类 | 枚举类 |
|---|---|
| 工单状态 | CaseScenarioEnum, CaseStatusEnum, CaseQueryTypeEnum, ActionTypeEnum |
| 核身方式 | RequirementEnum, VerifySkillGroupEnum |
| 刷脸 | FaceMatchEnum |
| 风控 | RefuseCodeEnum, StraEnum, StrategyIdEnum, RiskMarkEnum |
| 通话 | PhoneTypeEnum, PhoneStatusEnum, HangupReasonEnum |
六、SAO 客户端(25+ 外部系统调用)
| SAO 包 | 外部系统 | 说明 |
|---|---|---|
sao.cap | CAP(影像归档) | 影像件拉取/删除 |
sao.ccjs | CCJS(征信决策) | SQ007 征信决策查询 |
sao.cdps | CDPS(征信特征) | FIR 特征查询 |
sao.cis | CIS(案件信息) | 案件建案申请 |
sao.cps | CPS(核身授权) | 客户授权验证 |
sao.crcdata | CRC Data | 监管数据报送 |
sao.dm | DM(数据管理) | 客户信息/特征上报 |
sao.ecif | ECIF(企业客户信息库) | 客户信息查询 |
sao.face | 刷脸引擎 | 人脸比对/刷脸结果查询 |
sao.media | MMS(多媒体服务) | 影像件操作 |
sao.mes | MES(管理执行系统) | 权益查询 |
sao.outgoing | 出件系统 | 工单结果通知(15+ SAO) |
sao.pmbank | PM Bank(微信银行) | 微信刷脸/微信 UserID |
sao.qe | QE 策略引擎 | 答题策略运行 |
sao.ras | RAS(地址服务) | 地址解析 |
sao.rcs | RCS(监管报送) | 刷脸结果报送 |
sao.reg | REG(注册系统) | 人脸注册核查 |
sao.risk | 风控系统 | 客户风险批量查询 |
sao.um | UM(统一用户管理) | 用户信息查询 |
sao.video | 视频服务 | 视频接通/挂断 |
七、Controller 层(25 个 REST Controller)
| Controller | 路径前缀 | 说明 |
|---|---|---|
HomeController | api/home | 登录/首页/接单 |
CaseAssignController | api/caseAssign | 工单分配 |
CasesOprController | api/caseOpr | 工单处理(通过/拒绝/挂起/退单) |
CasesQueryController | api/caseQuery | 工单查询 |
VdoCaseWorkController | api/vdoCaseWork | 面核管理(视频通话/IM聊天/录制) |
FaceIdentifySetController | api/faceIdentifySet | 刷脸设置 |
QueueConfigController | api/queueConfig | 场景优先级配置 |
SkillGroupController | api/skillGroup | 技能组管理 |
UserController | api/user | 用户管理 |
ApprovalController | api/web/approval/config | 审批流 |
FileInfoController | api/fileInfo | 文件信息 |
RecordTokenController | api/recordToken | 录音令牌 |
八、RMB 集成
8.1 RMB 服务号
| 服务号 | 用途 |
|---|---|
06200261 | 同步 Q(接收上游请求) |
06210040 | 异步 Q(异步处理) |
06201060 | 回调同步 Q |
06201148 | 驼峰格式同步 Q |
06201320 | 批量转单进件 Q |
06210544 | 自动派单异步 Q |
06201409 | AI 特征挖掘回调 Q |
12201874 | 模型特征回调 Q |
8.2 消息防重
RmbViolatedBizService 通过数据库唯一索引实现消息防重,防重 ID = serviceId + scenario + consumerSeqNo + serviceCode。
8.3 RMB 出站审计
通过 @RmbOutFlag 注解 + RmbOutAspect 切面实现 RMB 出站请求的自动审计落表。
九、业务流程
9.1 工单全生命周期
上游系统进件 → RMB消息接收 → 工单创建(TM_BASE_CASE) → 策略决策(核身方式)
→ 工单分配(技能组/坐席) → 电核/面核/刷脸 → 答题核验(QE)
→ 工单提交(通过/拒绝/挂起/退单) → 出件通知(上游系统)
→ 数据归档(历史表) → 文件清理9.2 电核流程(AF)
工单分配 → 坐席拨打电话 → 通话记录(TM_CALL_REC)
→ 核查记录(TM_ACTION_REC) → 答题核验(QE)
→ 提交通过/拒绝/挂起 → 出件通知9.3 面核流程(FAC)
工单分配 → 视频通话准备 → 接通(allowConnect) → IM聊天
→ 云端录制(createCloudRecording) → 核查记录
→ 提交通过/拒绝 → 出件通知支持微信视频和腾讯云实时音视频。
9.4 刷脸识别流程
工单分配 → 刷脸请求 → 刷脸策略运行 → 人脸比对 → 刷脸结果
├── 通过 → faceIdentifyPass → 出件
├── 拒绝 → faceIdentifyReject → 出件
├── 重试 → faceIdentifyRetry → 重新刷脸
├── 降级面核 → faceIdentifyDownVideo → 进入面核流程
├── 降级电核 → faceIdentifyDownTel → 进入电核流程
├── 使用微信结论 → faceIdentifyByWxRet
├── 事中复核 → faceIdentifyThingsAudit
└── 超时拒绝 → facIdentifyOvertimeReject9.5 征信查询流程
工单进件 → 征信策略决策(CreStraService)
→ 人行征信(PbcInfoBizService) → 公安核查(PoliceCheckBizService)
→ 学历核查(EducationBizService) → 征信特征查询(CdpsBizService)
→ 征信决策(CcjsBizService) → 策略结果十、配置与部署
10.1 实例类型
| 实例 | systemId | 说明 |
|---|---|---|
| bcvs-service | U568 | 后端服务进程 |
| bcvs-web | U562 | Web 服务进程 |
10.2 关键配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
task-executor.core-pool-size | 72 | 任务执行核心线程 |
rmb_timeout | 5000ms | RMB 超时 |
faceIdentifyStraSwitchFlag | 1 | 刷脸策略开关 |
caseParterSwitch | 1 | 出件通知开关 |
dataCleanEnableStatus | false | 数据清理开关 |
10.3 ElasticSearch 索引
12 个答题相关索引,命名规范为 cnces_adm_ccvsdb_tm_*。
十一、外部系统集成
| 系统 | 缩写 | 集成方向 | 说明 |
|---|---|---|---|
| ECIF 企业客户信息库 | ECIF | 出站 | 客户信息查询 |
| CPS 核身授权系统 | CPS | 双向 | 客户授权验证 |
| MMS 多媒体管理系统 | MMS | 出站 | 影像件存储/查询 |
| CAP 内容归档平台 | CAP | 出站 | 影像件拉取/删除 |
| CCJS 征信决策系统 | CCJS | 出站 | SQ007 征信决策 |
| CDPS 征信特征系统 | CDPS | 双向 | FIR 特征查询 |
| Experian DA 策略引擎 | DA | 出站 | 规则决策执行 |
| 公安联网核查 | PSC/PBC | 出站 | 公安核查 |
| RCS 监管报送 | RCS | 出站 | 监管数据报送 |
| PM Bank 微信银行 | PM | 出站 | 微信刷脸 |
| 腾讯云实时音视频 | TRTC | 出站 | 视频面核 |
| GNS 全局命名服务 | GNS | 出站 | DCN 解析 |
| TSP 数据清理平台 | TSP | 双向 | 数据清理 |
| FPS 文件传输 | FPS | 出站 | 文件传输 |
数据库与存储
| 存储类型 | 用途 |
|---|---|
| TDSQL | 主数据库(bcvsdb) |
| ElasticSearch | 答题数据存储(12 个索引) |
| Redis | 限流、缓存 |
| CAP | 影像件存储 |
本报告基于 BCVS 系统源代码静态分析生成,覆盖了全部 2,257 个 Java 文件的结构与功能分析。