BGLP 总账平台
一、系统概述
1.1 基本信息
| 属性 | 值 |
|---|---|
| Artifact | cn.webank.cnc.cluster.glp:glp-cluster-parent |
| 系统名称 | glp-cluster-parent - 总账平台 (General Ledger Platform) |
| Java版本 | Java 8 (source/target 1.8) |
| 父POM | cn.webank.cnc.sdk:zcnc-sdk-starter-parent:3.35.0-SNAPSHOT |
| 构建工具 | Maven多模块项目 |
| 源码规模 | 约1,029个Java文件 |
| 数据库 | TiDB (MySQL协议兼容),测试用H2 |
| SCM | Git (git@10.6.222.54:cnc/glp.git) |
1.2 技术栈
- 框架: Spring Boot + Spring Batch (批处理框架)
- ORM: MyBatis / JPA (MyBatis-Plus 3.1.0)
- 参数管理: zcnc-sdk 统一参数平台 (UnifiedParameterFacility)
- 银团参数: zbmp-service-sdk (BMP银团管理平台)
- 表达式引擎: MVEL 2.4.13 (规则/科目映射)
- 分布式: 多IDC/DCN部署架构,支持Region热点打散
- 序列号: TiDB自增主键 + 手动序列号双模式
- 测试: JUnit 4.13 + DBUnit + H2 + simpletester
- 代码覆盖: JaCoCo 0.8.8
- 代码质量: SonarQube + Maven Enforcer (循环依赖检测、包层次校验、依赖收敛)
1.3 系统定位
BGLP (Bank General Ledger Platform) 是微众银行核心会计核算系统的总账子平台,负责:
- 会计分录生成 - 根据交易流水和套型参数自动生成借贷分录
- 科目映射 - 多层次科目替换链,支持产品、银团、资产证券化等维度的科目映射
- 增值税价税分离 - 收入科目自动拆分税额
- 总账余额管理 - 维护科目级别的日/月/季/年多维度余额
- 银团分账 - 银团贷款按银行份额拆分流水和余额
- 资产证券化处理 - ABS出表、回购、清仓回购等全生命周期核算
- 日终批处理 - 50+步骤的完整日终总账处理流程
- 年终结转 - 总账余额年终结转到TM_GL_BAL_YEAR
- 对账与平衡检查 - GLP与CPS总分对账、调账平衡校验
二、模块结构
项目包含8个正式Maven模块 + 1个数据库升级模块(glp-core-upgrade):
glp-cluster-parent (pom)
├── glp-core-param-def # 参数定义层
├── glp-core-infrastructure # 基础设施层(DAO/DTO,空模块,代码已迁移)
├── glp-core-param-generator # 参数生成器(测试工具)
├── glp-core-facility # 基础工具设施层
├── glp-core-batch # 核心批处理引擎
├── glp-cluster-batch-adm # 集群批处理调度(ADM部署包)
├── glp-cluster-service-adm # 集群联机服务(ADM部署包)
├── glp-cluster-test # 集群测试模块
└── glp-core-upgrade # 数据库升级脚本(非Maven模块)2.1 glp-core-param-def(参数定义层)
职责: 定义所有业务参数的数据结构(POJO),不包含业务逻辑。
关键参数类:
| 类名 | 说明 | Key结构 |
|---|---|---|
TxnGlt | 交易套型(交易码→科目映射模板) | txnCd + currCd + ageGroup + bnpGroup |
Subject | 会计科目定义 | subject |
TxnCd | 交易代码定义 | txnCd |
BnpGroup / BnpGroupMapping | 余额成分组及映射 | planNbr + bucketType |
AgeGroup / AgeGroupMapping | 账龄组及映射 | ageCd |
ProductCredit | 产品参数(含税率、递延息标志等) | productCd |
ProductSubjectMap | 产品科目映射表 | productCd |
SubjectMapping | 科目通用映射 | subject |
BankGroupSubjectMapping | 银团科目映射 | subject + dbCrInd |
CommonSubjectMap | 通用科目映射(如OCI) | mappingFactor |
DeferredIncomeMapping | 递延收入科目映射 | subject |
ForceAcSubjectMapping | 强制AC科目映射 | org |
ReserveTaxSplitMapping | 预缴税科目拆分映射 | subject + dbCrInd + redBlueInd |
DeferredIncomeVatSplitMapping | 递延息已缴税拆分映射 | subject |
SystemConfig | 系统配置参数 | org |
BgTxnGroup | 银团交易分组参数 | org |
Branch / CurrencyCd | 机构/币种 | branch / currCd |
PlanSubjectMapping | 计划科目映射 | productCd + planNbr + bnpGroup |
VatParam / VatFreeConfig | 增值税参数/免税配置 | productCd |
AssetDisposalConfig | 资产处置配置 | - |
枚举类 (package: param.def.enums):
DbCrInd- 借贷标志 (D/C)RedBlueInd- 红蓝字标志 (R/B)PostGlIndicator- 总账入账标识 (N/S/W/M)SubjectType- 科目类型 (A资产/B负债/C损益/D共同/E表外)BalDbCrFlag/AmtDbCrFlag- 余额/发生额借贷方向Indicator- 通用Y/N标志BucketType- 余额成分 (Interest/Penalty/Principal等)LoanProcessFlag- 贷款处理标志 (WTO_P/W/ABSD等)AssetPoolType- 资产池类型 (OCI/AC等)LoanTermType- 贷款期限类型 (S/M/L)BgFlag/BgTxnGroupType- 银团相关标志
2.2 glp-core-infrastructure(基础设施层)
职责: 原本承载DAO和DTO,当前已迁移到glp-core-batch,此模块保留以维持依赖兼容。
DTO和DAO类主要包含:
- TM_前缀: 主表数据对象 (
TmGlBal,TmLoanGlp,TmLoanBg,TmLoanVms,TmLoanAbs,TmScheduleBg,TmBankGroup,TmBankGroupMember,TmGlBalYear等) - TT_前缀: 临时/流水表数据对象 (
TtTxnGl,TtGlSuccess,TtTxnGlBg,TtTxnGlAbs,TtGroupGlSuccess,TtGlBalYearAdm,TtAccountingAdj等) - DAO接口: 基于MyBatis Generator生成,提供CRUD操作
2.3 glp-core-param-generator(参数生成器)
职责: 测试辅助工具,从Excel读取参数数据并生成SQL或参数文件。
关键类 (package: test.param):
GenerateSubject- 生成科目参数GenerateGlt/GenerateTxnCode/GenerateTxnGroup- 生成套型/交易码/交易分组GenerateProduct/GenerateProductSubject- 生成产品参数和产品科目映射GenerateSubjectMapping/GenerateBankGroupSubjectMapping- 生成科目映射GenerateVatFreeConfig/GenerateTaxSupplyConfig- 生成税务配置GenerateOrgGlp/GenerateOrgBmp- 生成机构参数ExcelParser- Excel解析器PrmCompare- 参数比较工具
2.4 glp-core-facility(基础工具设施层)
职责: 提供跨步骤共享的工具类、缓存、Reader/Writer基础设施。
核心组件:
| 类/包 | 说明 |
|---|---|
ParamFacility | 参数查询工具(按Key查参数值) |
ParamCache | 参数缓存管理 |
ParamSubjectMappingCache | 科目映射缓存 |
SubjectMappingFacility | 通用科目映射规则执行引擎 |
ParaAssetDisposalFacility | 资产处置参数缓存和查询 |
ParaSubjectReconFacility | 科目对账参数 |
DataMigrationInfoFacility | 数据迁移信息管理 |
GlpCoreSeqNo / SeqNoForTidb | 序列号生成(TiDB适配) |
MvelMethods | MVEL表达式工具方法 |
FileItemInfoContextHolder | 文件项上下文持有 |
ParameterFactoryBean | 参数工厂Bean |
region/* | TiDB Region热点打散工具集 |
reader/* | 分页Key读取器(TiDB/通用/数据迁移) |
writer/DbFileParallelMultiWriter | 并行多写Writer |
processor/PDataMigration | 数据迁移处理器 |
bean/* | 数据迁移信息Key、DCN行项目等 |
dao/TmDataMigrationInfoDefDao | 数据迁移信息DAO |
2.5 glp-core-batch(核心批处理引擎)
职责: 系统核心模块,包含所有批处理步骤、会计引擎、科目映射、银团处理、年终处理等。
这是最大的模块,详细内容将在后续章节展开。
2.6 glp-cluster-batch-adm(集群批处理ADM部署包)
职责: 集群批处理的ADM部署入口,整合Spring Batch Job定义、Step编排、Spring上下文配置。
核心资源文件:
| 文件 | 说明 |
|---|---|
jobs.xml | 主日终批处理Job定义(50+步骤) |
jobsAdm.xml | ADM模式Job定义 |
jobsDcn.xml | DCN模式Job定义 |
jobs-year.xml | 年终结转Job定义 |
jobs-yearAdm.xml | ADM年终Job |
jobs-yearDcn.xml | DCN年终Job |
jobs-glp-compare.xml | 对账Job |
jobs-glp-data-bak.xml | 数据备份Job |
jobs-glp-clean.xml | 数据清理Job |
jobs-glp-test.xml | 测试Job |
batch-context.xml | Batch上下文配置 |
facility-context.xml | Facility Bean装配 |
rpc-context.xml | RPC服务配置 |
service-context.xml | 服务层配置 |
step-beans.xml | Step Bean定义 |
steps/*.xml | 各步骤详细配置 |
部署模式:
- ADM模式: 集中式部署,包含所有步骤
- DCN模式: 分布式部署,按DCN分区执行,需要文件同步和等待机制
2.7 glp-cluster-service-adm(集群联机服务)
职责: 提供联机查询和管理接口,主要面向BMP参数管理场景。
主要功能:
- 银行/银团参数维护 (AddBankSceneImpl, AddBankGroupSceneImpl)
- 资产处置参数管理 (RTmParaAssetDisposal)
- 资产所属机构映射 (RTmParaAssetOwnerMap)
- 保险项目管理 (MaintInsuProjectSceneImpl)
- 银行映射查询 (BankMapQueryService)
2.8 glp-cluster-test(集群测试模块)
职责: 独立测试应用,提供HTTP接口触发完整总账处理流程。
关键类:
GlpCoreAutoTestApplication- 测试应用启动类FullGlpProcessorController- 完整GL处理HTTP接口TestConnection- 连接测试AcctNoHolder- 账号持有器SeqNoMock- 序列号MockSystemStatusFacilityImpl- 系统状态实现
2.9 glp-core-upgrade(数据库升级脚本)
职责: 维护版本升级的DDL/DML脚本。
包含按版本组织的数据库变更脚本,如:
3.20.0/- 版本升级脚本22.08.29/- 历史升级脚本db/base/- 基础建表脚本
三、包架构
3.1 顶层包结构
cn.webank.cnc.glp.core
├── param.def # 参数定义(POJO + 枚举)
│ └── enums # 枚举定义
│ └── asset # 资产相关枚举
├── infrastructure # 基础设施(DAO + DTO,已迁移)
│ ├── dao # MyBatis DAO接口
│ └── dto # 数据传输对象
├── facility # 基础工具设施
│ ├── region # TiDB Region打散
│ ├── reader # 分页读取器
│ └── writer # 并行写入器
├── batch # 批处理步骤
│ ├── s0000-s7000 # 日终批处理步骤包
│ ├── year # 年终结转步骤
│ ├── checksum # 数据校验
│ ├── common # 批处理公共工具
│ └── listener # 批处理监听器
├── facility (core-batch内) # 核心业务设施
│ ├── accting # 会计引擎
│ ├── subject # 科目映射
│ ├── bg # 银团处理
│ ├── abs # 资产证券化
│ ├── vms # 增值税管理
│ ├── year # 年终结转
│ └── cleanMemo # 清理备注
└── service # 联机服务(cluster-service-adm内)
└── bmp # BMP参数管理服务3.2 核心包依赖关系
glp-core-param-def (无依赖)
↓
glp-core-infrastructure (依赖 param-def)
↓
glp-core-facility (依赖 param-def, infrastructure)
↓
glp-core-batch (依赖 param-def, infrastructure, facility, bmp-sdk)
↓
glp-cluster-batch-adm / glp-cluster-service-adm (依赖 core-batch)
↓
glp-cluster-test (依赖 cluster-batch-adm)四、核心类详解
4.1 AcctingHelper(会计引擎入口)
位置: glp-core-batch/.../facility/accting/AcctingHelper.java
职责: 会计分录生成的核心协调器,接收交易流水列表,协调分录生成全过程。
核心流程:
accting(List<TtTxnGl>) → IAcctEntry
1. cleanMemoFacility.cleanMemo() # 清理备注交易
2. 对每条流水调用 acctEntry() # 逐笔处理
2.1 校验 owningBranch / dbCrInd / ageGroup
2.2 getTransferTxnGlt() # 获取套型(零元回购时替换Y账龄组)
2.3 factory.getTxnGlt() # 科目映射替换
2.4 判断银团/自营
- 自营/单银行银团 → acctEntryHandler.genAcctEntries()
- 多银行银团 → factory.getBankGroupTxnGlAndTxnGlt() → 逐银行 genAcctEntries()
2.5 psr.replaceWebankOciSubject() # OCI科目替换依赖组件:
GltMappingFactory- 科目映射工厂AcctEntryHandler- 分录生成处理器CommonSubjectReplace- 通用科目替换BgMemberCache- 银团成员缓存CleanMemoFacility- 备注清理AssetDisposalDetailFacility- 资产处置明细
4.2 VatHelper(增值税价税分离)
位置: glp-core-batch/.../facility/accting/VatHelper.java
职责: 执行价税分离计算,支持普通收入和预缴税(代垫税)两种模式。
核心方法:
| 方法 | 说明 |
|---|---|
splitIncome(productCd, postAmt) | 标准价税分离(收入/(1+税率)) |
splitIncome(productCd, postAmt, specificTaxAmt) | 指定税额拆分 |
splitIncome4ReservedTax(...) | 代垫税拆分(含兜底逻辑,保证余额非负) |
createVatAcctEntry(...) | 生成增值税分录 |
价税分离公式: incomeAmt = postAmt / (1 + taxRate), vatAmt = postAmt - incomeAmt
代垫税兜底规则:
- 代垫税余额 >= 0
- 代垫税息余额 = 0 时,代垫税余额也为 0
- 代垫税息余额 >= 代垫税余额
4.3 AcctEntryHandler(分录生成处理器)
位置: glp-core-batch/.../facility/accting/AcctEntryHandler.java
职责: 根据交易类型和套型参数生成具体会计分录。
分录生成逻辑 (根据 PostGlIndicator):
| 标识 | 类型 | 生成的分录 |
|---|---|---|
| N/M | 正常入账 | ntDb借 + ntCr贷 + ntDbOs借(表外) + ntCrOs贷(表外) + ntCarryover借贷(结转) |
| S | 挂账交易 | stDb借 + stCr贷 |
| W | 核销交易 | woDb借 + woCr贷 + nt系列分录(正常入账) |
增值税拆分逻辑:
- 仅对损益类科目 (
SubjectType.C) 且needVatSplit != N的科目执行价税分离 - 仅对Webank或BXJG的银行号执行
- 拆分后: queue=11/21 (收入), queue=12/22 (增值税, 使用
VAT_CNC_SUBJECT) - 递延息已缴税产品(
isPreTax4Defer=Y): 延后统一拆分
虚拟科目处理: 通过 SubjectInterceptor 链判断虚拟科目是否可处理或忽略,无法处理则抛出异常断批。
4.4 GltMappingFactory(套型科目映射工厂)
位置: glp-core-batch/.../facility/subject/GltMappingFactory.java
职责: 核心科目映射协调器,执行完整的科目替换链。
科目替换链 (replaceSubject方法):
原始科目 (来自TxnGlt套型)
→ SubjectMapper[].mapping() # 循环执行所有SubjectMapper
├── AbsdMapper # 资产证券化科目映射
└── LoanTermMapper # 贷款期限科目映射 (S<=5期/M 6-12期/L>12期)
→ subjectMappingFacility.ruleExecute() # 通用科目映射规则引擎
→ ProductSubjectReplace.replace() # 产品级科目替换
→ DeferredIncomeReplace.replace() # 递延收入科目替换 (isDeferredIncome=Y)
→ ForceAcSubjectReplace.replace() # 强制AC科目替换 (forceAc=Y)
→ PlanSubjectReplace.replace() # 计划级科目替换银团处理 (getBankGroupTxnGlAndTxnGlt):
- 根据BankGroupSubjectMapping获取合作银行→我行的科目映射
- 生成两套流水: 一套合作银行科目 + 一套我行科目
- 助贷产品(
assistBgNotSpiltWbGl=Y)不拆分WB流水
4.5 SubjectMapper(科目映射抽象基类)
位置: glp-core-batch/.../facility/subject/SubjectMapper.java
职责: 科目映射的抽象模板,子类实现 doMapping() 方法。
实现类:
| 实现类 | 映射逻辑 |
|---|---|
AbsdMapper | 根据SubjectMapping + LoanProcessFlag.ABSD替换,条件: 有资产计划号或保险项目号且银行号≠资产所属机构号 |
LoanTermMapper | 根据贷款期数映射: S(<=5期), M(6-12期), L(>12期),特殊处理3期 |
4.6 CommonSubjectReplace(通用科目替换)
位置: glp-core-batch/.../facility/subject/CommonSubjectReplace.java
职责: 基于映射因子的科目替换,主要用于OCI资产池类型科目替换。
逻辑:
replace(subject, mappingFactor): 查找ProductSubjectMap参数,命中则替换replaceWebankOciSubject(glSucc): 当资产池类型=OCI且银行号=WEBANK时,将科目替换为OCI映射科目
4.7 ProductSubjectReplace(产品科目替换)
位置: glp-core-batch/.../facility/subject/ProductSubjectReplace.java
职责: 按产品编号查找个性化科目映射。
逻辑:
- 产品号以"Z"开头的统一使用"ABSD"产品映射
- 从ProductSubjectMap参数表查找科目映射关系
4.8 BankGroupSplit(银团分账处理)
位置: glp-core-batch/.../facility/bg/BankGroupSplit.java
职责: 银团贷款流水按银行份额反算拆分。
核心流程:
split(BgSplitContext) → BgSplitContext
1. 初始化 (BgTxnGroup + SystemConfig)
2. fristDayHandler() # 上线首日90天外利息/罚息初始化
3. 银团Handler链处理:
AutoAdjustTypeHandler → LendTypeHandler → AcruRevokeTypeHandler
→ XfrTypeHandler → SettleDbTypeHandler → PrePaymentTypeHandler
→ LoanCancelForOutPlanTypeHandler → CrTypeHandler
→ DepositCollectTypeHandler → PaymentTypeHandler → LoanCancelTypeHandler
→ BgRepoTypeHandler → BgTfrTypeHandler → BgWtoTypeHandler
→ BgWtoTypeSpecialHandler → AgeXfrTypeHandler
4. saveOrUpdateLoanBg() # 保存/更新银团借据
5. saveOrUpdateScheduleBg() # 保存/更新银团还款计划Handler排序机制: 通过 BankGroupHandler.comparator 对处理器进行排序,确保处理顺序正确。
4.9 GlBalYearFacility(年终结转设施)
位置: glp-core-batch/.../facility/year/GlBalYearFacility.java
职责: 总账余额年终处理的核心工具类。
核心方法:
| 方法 | 说明 |
|---|---|
getTmGlBalList(key) | 按条件查询当前总账余额 |
getCurAndLastTmGlBalYearList(key) | 查询今年和去年的年结记录 |
getTmGlBalYear(list, tmGlBal) | 匹配年结记录(去重校验) |
saveOrUpdateTmGlBalYear(glBalYear) | 保存/更新年结记录 |
addTtGlBalYearAdm(...) | 添加年结管理流水(含OF机构号匹配) |
4.10 P2010LoadGlTxn(流水加载处理器)
位置: glp-core-batch/.../batch/s2000/P2010LoadGlTxn.java
职责: 从CPS交易流水表(TM_GL_TXN_ITEM)加载并转换为总账交易流水(TtTxnGl)。
核心处理逻辑:
- 获取余额成分组映射 (BnpGroupMapping)
- 获取账龄组映射 (AgeGroupMapping)
- 获取产品参数 (ProductCredit)
- 判断是否走ABS处理 →
putTxnGlAbs()生成TtTxnGlAbs - 判断是否走银团处理 →
genTxnGlBgItem()生成TtTxnGlBg - 普通流水 →
genTxnGlItem()生成TtTxnGl - 设置各种细标: 资产处置标识、核销标识、保险标识、递延息标志等
4.11 P2030Accting(会计核算处理器)
位置: glp-core-batch/.../batch/s2000/P2030Accting.java
职责: 调用会计引擎对流水进行分录生成。
处理逻辑:
- 遍历按REF_NBR分组的交易流水
- 调用
acctingHelper.accting()生成会计分录 - 收集成功分录、失败报告、成功报告
4.12 P4100GlBal(总账余额处理器)
位置: glp-core-batch/.../batch/s4100/P4100GlBal.java
职责: 将分组汇总后的分录信息累加到总账余额表(TM_GL_BAL)。
处理逻辑:
- 按GlSuccessKey分组遍历汇总分录
- 查找或创建对应的TmGlBal记录
- 将每条分录的借贷金额累加到余额
- 分发为INSERT/UPDATE列表
TmGlBal余额维度 (GlSuccessKey):
- subject (科目) + productCd (产品) + branchId (机构) + org (组织)
- bankGroupId (银团) + bankNo (银行) + dcnNo (DCN) + assetOwnerNo (资产所属)
五、数据模型
5.1 核心业务表
TM_GL_BAL(总账余额表)
| 字段 | 类型 | 说明 |
|---|---|---|
| BAL_ID | bigint PK | 顺序号 |
| SUBJECT | varchar(40) | 科目 |
| PRODUCT_CD | varchar(6) | 产品编号 |
| BRANCH_ID | varchar(9) | 分支行号 |
| ORG | char(12) | 机构号 |
| DB_BAL / CR_BAL | decimal(20,2) | 借方/贷方余额 |
| DB_AMT / CR_AMT | decimal(20,2) | 借方/贷方发生额 |
| DB_COUNT / CR_COUNT | int | 借方/贷方笔数 |
| LAST_DB_BAL / LAST_CR_BAL | decimal(20,2) | 昨日余额 |
| LAST_MTH_DB_BAL / LAST_MTH_CR_BAL | decimal(20,2) | 上月末余额 |
| LAST_QTR_DB_BAL / LAST_QTR_CR_BAL | decimal(20,2) | 上季末余额 |
| LAST_YR_DB_BAL / LAST_YR_CR_BAL | decimal(20,2) | 上年末余额 |
| BANK_GROUP_ID | varchar(5) | 银团编号 |
| BANK_NO | varchar(10) | 银行号 |
| DCN_NO | varchar(5) | DCN编号 |
| ASSET_OWNER_NO | varchar(10) | 资产所属机构号 |
索引:
IDX_GLBAL_BG_DCN(BANK_GROUP_ID, DCN_NO)IDX_GLBAL_SUBJ_PRDCD_BRCID_ORG(SUBJECT, PRODUCT_CD, BRANCH_ID, ORG)
TM_GL_TXN_ITEM(CPS交易流水表)
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | bigint PK | 主键 |
| PART_DAY | int | 分区天数 |
| ORG | char(12) | 机构号 |
| CARD_NO | varchar(19) | 卡号 |
| ACCT_NO | bigint | 账号 |
| TXN_SEQ | varchar(36) | CPS交易流水号 |
| TXN_CODE | char(4) | 交易码 |
| DB_CR_IND | char(1) | 借贷标志 |
| POST_AMOUNT | decimal(15,2) | 入账金额 |
| POST_GL_IND | char(1) | 总账入账标识 (N/S/W/M) |
| BUCKET_TYPE | varchar(20) | 余额成分类型 |
| PRODUCT_CD | varchar(6) | 产品编号 |
| REF_NBR | varchar(23) | 交易参考号 |
| BANK_GROUP_ID | varchar(5) | 银团编号 |
| LOAN_PROCESS_FLAG | varchar(5) | 贷款后期处理标志 |
| ASSET_PLAN_NO | varchar(15) | 资管计划号 |
| ASSET_POOL_TYPE | varchar(5) | 资产类型 |
| IS_DEFERRED_INCOME | char(1) | 是否递延收入 |
TT_GL_SUCCESS(当日入账成功流水)
| 字段 | 类型 | 说明 |
|---|---|---|
| FLOW_ID | bigint PK | 流水号 |
| SUBJECT | varchar(40) | 科目 |
| DB_CR_IND | char(1) | 借贷标志 |
| POST_AMT | decimal(15,2) | 入账金额 |
| RED_BLUE_IND | char(1) | 红蓝字 |
| QUEUE | int | 排序序号 |
| AC_SUBJECT | varchar(40) | AC科目 |
| POST_GL_IND | char(1) | 总账入账标识 |
| BATCH_DATE | date | 批量日期 |
TM_LOAN_GLP(总账借据表)
最简借据表,仅含LOAN_KEY主键,作为总账处理的借据索引。
TM_LOAN_BG(银团贷款备份表)
| 关键字段 | 说明 |
|---|---|
| LOAN_ID | 顺序号(PK) |
| BANK_GROUP_ID / BANK_NO | 银团/银行标识 |
| CARD_NO / REF_NBR | 卡号/交易参考号 |
| LOAN_INIT_PRIN / PRIN_BAL | 放款金额/欠款本金 |
| INT_BAL / PENALTY_BAL | 欠款利息/罚息 |
| INT_ACRU | 应计利息 |
| AGE_CD / CURR_TERM | 账龄/当前期数 |
| LOAN_PROCESS_FLAG | 贷款处理标志 |
| ASSET_DISPOSAL_FLAG | 资产处置标识 |
| WRITEOFF_FLAG / INSURANCE_FLAG | 核销/保险标识 |
TM_LOAN_VMS(借据纳税加工表)
| 关键字段 | 说明 |
|---|---|
| BIZ_TAX_INTEREST | 营业税下应计和应收息 |
| VAT_INT_BAL | 90天内应纳税息余额 |
| VAT_TAX | 记账增值税 |
| ABS_REPO_INT / ABS_REPO_INT_BAL | ABS回购利息/余额 |
| TAXED_INT_BAL_OB / INT_TAX_BAL_OB | 出表已纳税利息/已缴税余额 |
| TAXED_PENALTY_BAL_OB / PENALTY_TAX_BAL_OB | 出表已纳税罚息/已缴税余额 |
TM_LOAN_ABS(ABS借据表)
| 关键字段 | 说明 |
|---|---|
| CARD_NO + REF_NBR + BANK_NO | 联合主键 |
| LOAN_BAL_PRINCIPAL | 本金余额 |
| LOAN_PROCESS_FLAG | 贷款后期处理标志 |
| ASSET_PLAN_NO | 资产计划号 |
| LAST_LOAN_PROCESS_FLAG | 上一次处理标志 |
TM_GL_BAL_YEAR(年终结转表)
| 关键字段 | 说明 |
|---|---|
| BAL_ID | 顺序号(PK) |
| ACCOUNTING_DATE | 年结日期 |
| PRE_YEAR_DB_BAL / PRE_YEAR_CR_BAL | 年结前借贷余额 |
| AFT_YEAR_DB_BAL / AFT_YEAR_CR_BAL | 年结后借贷余额 |
5.2 参数定义表
TM_PARA_SUBJECT(会计科目参数表)
| 字段 | 说明 |
|---|---|
| SUBJECT | 科目9位(PK) |
| BAL_TYPE | 余额类型 |
| ACCT_TYPE | 核算类型 |
| LOAN_CATEGORY | 贷款分类 |
| IS_OVER_DUE | 是否逾期 |
| IS_OUTER | 是否表外 |
| BAL_DB_CR_FLAG | 余额借贷方向 |
| IS_NEED_CARRY_OVER | 是否年终结转 |
| IS_USE_BAL_CHECK | 是否用于平衡检查 |
| IS_EAST | 是否EAST报表推送科目 |
TxnGlt(套型参数)
Key: txnCd|currCd|ageGroup|bnpGroup
包含字段:
- 正常交易: ntDbSubject/ntCrSubject + ntDbRedFlag/ntCrRedFlag
- 正常交易(表外): ntDbSubjectOs/ntCrSubjectOs + ntDbRedFlagOs/ntCrRedFlagOs
- 挂账交易: stDbSubject/stCrSubject + stDbRedFlag/stCrRedFlag
- 核销交易: woDbSubject/woCrSubject + woDbRedFlag/woCrRedFlag
- 结转科目: ntCarryoverDbSubject/ntCarryoverCrSubject
5.3 辅助表
| 表名 | 说明 |
|---|---|
| TM_BANK / TM_BANK_GROUP / TM_BANK_GROUP_MEMBER | 银行/银团/银团成员 |
| TM_BANK_MAP | 银行映射 |
| TM_DCN | DCN配置 |
| TM_GL_BAL_B | 总账余额备份表 |
| TM_GL_BAL_HST | 总账余额历史表 |
| TM_GL_HST | 总账历史表 |
| TM_GL_TXN_ADJ / TM_GL_TXN_ADJ_B | 交易调整表 |
| TM_SCHEDULE_BG / TM_SCHEDULE_BG_B | 银团还款计划 |
| TM_VAT_ADJ / TM_VAT_ADJ_HST | 增值税调整 |
| TM_VAT_TAX_RATES | 增值税税率表 |
| TM_SHADOW_PLAN_REPO | 影子计划回购 |
| TM_ABS_CLEAR_REPO_INFO / TM_ABS_CLEAR_REPO_CR_INFO | ABS清仓回购信息 |
| TT_TXN_GL / TT_TXN_GL_BG / TT_TXN_GL_ABS | 临时交易流水表 |
| TT_GROUP_GL_SUCCESS | 分组汇总分录 |
| TT_ACCOUNTING_ADJ / TT_ACCOUNTING_ADJ_HST | 会计调整流水 |
| TT_GL_BAL_OF / TT_GL_BAL_ADM | 总账余额输出/管理 |
| TT_ERROR_DATA | 异常数据表 |
| YAK_* | 文件传输相关表 |
六、会计引擎
6.1 分录处理流程
TM_GL_TXN_ITEM (CPS流水)
↓ P2010LoadGlTxn
TtTxnGl / TtTxnGlBg / TtTxnGlAbs (总账流水)
↓ P2020BankGroupSplit (银团拆分)
TtTxnGl (拆分后流水)
↓ P2030Accting
↓ AcctingHelper.accting()
↓ AcctEntryHandler.genAcctEntries()
TtGlSuccess (成功分录)
↓ P2090GlSummary (汇总)
↓ P4050/P4051/P4052 (分组汇总)
TtGroupGlSuccess (分组汇总分录)
↓ P4100GlBal
TM_GL_BAL (总账余额更新)6.2 分录生成规则
分录生成基于 PostGlIndicator 区分交易类型:
N/M - 正常入账交易:
- queue 1: 正常借方分录 (ntDbSubject)
- queue 2: 正常贷方分录 (ntCrSubject)
- queue 3: 表外借方分录 (ntDbSubjectOs)
- queue 4: 表外贷方分录 (ntCrSubjectOs)
- queue 9: 借方结转分录 (ntCarryoverDbSubject)
- queue 10: 贷方结转分录 (ntCarryoverCrSubject)
S - 挂账交易:
- queue 5: 挂账借方 (stDbSubject)
- queue 6: 挂账贷方 (stCrSubject)
W - 核销交易:
- queue 7: 核销借方 (woDbSubject)
- queue 8: 核销贷方 (woCrSubject)
- 同时生成N类型分录 (queue 1-4)
收入科目增值税拆分 (仅损益类 + Webank/BXJG):
- queue 11/21: 收入金额分录
- queue 12/22: 增值税金额分录 (VAT_CNC_SUBJECT)
6.3 科目映射
科目映射是一个多层替换链,在GltMappingFactory.replaceSubject()中执行:
原始科目 (来自TxnGlt套型参数)
↓ [循环] SubjectMapper链
├── AbsdMapper # ABS资产证券化映射
└── LoanTermMapper # 贷款期限映射
↓ SubjectMappingFacility # 通用科目映射规则引擎 (MVEL)
↓ ProductSubjectReplace # 产品级科目替换
↓ DeferredIncomeReplace # 递延收入科目替换 (条件: isDeferredIncome=Y)
↓ ForceAcSubjectReplace # 强制AC科目替换 (条件: forceAc=Y, 可通过参数开关控制)
↓ PlanSubjectReplace # 计划级科目替换 (productCd + planNbr + bnpGroup)科目替换链特点:
- 每一层替换都是可选的(查不到映射则保持原科目)
- 替换顺序有严格依赖关系
- 产品号以"Z"开头的统一走ABS映射
- 通用科目映射使用
SubjectMappingFacility支持复杂规则表达式
6.4 增值税价税分离
触发条件: 损益类科目 (SubjectType.C) + needVatSplit != N + 银行号为Webank或BXJG
分离公式:
- 收入额 = 入账金额 / (1 + 税率)
- 税额 = 入账金额 - 收入额
特殊场景:
| 场景 | 处理方式 |
|---|---|
| 普通收入 | 当场拆分税额,生成两笔分录 |
递延息 + 已缴税产品(isPreTax4Defer=Y) | 不当场拆税,在splitAcctEntry()统一处理 |
预缴税(needReserveTax=Y) | 使用ReserveTaxSplitMapping映射到预缴税科目 |
| 代垫税 | 使用splitIncome4ReservedTax(),含余额兜底逻辑 |
| 指定税额 | 按specificTaxAmt直接拆分 |
七、批处理流程
7.1 日终批处理主流程 (jobs.xml - clusterGlpJob)
完整的日终批处理流程包含以下步骤:
阶段一: 批前准备 (s0000 - s0100)
| 步骤 | 说明 |
|---|---|
| parameter-check | 银团+税率参数检查 |
| fileCleanStep | Yak文件数据清理 |
| before-clean-table | 批前临时表清理(都市TT表) |
| s0010-para-refresh | 刷新参数 |
| s0050-s0058 | 各类数据还原(loanBg/loanVms/scheduleBg/glBal/shadowPlan/loanAbs/repoPlan/clearRepo/txnAdj/vatAdj) |
| s0060-s0062 | 重跑历史数据清理(TmGlHst/TmVatAdjHst/TtAccountingAdjHst) |
| s0063 | YakFileItem清理 |
| split-gl-region / split-loan-region / simple-split-region | TiDB大表Region热点打散 |
| s0100-init-gl | 总账预处理 |
阶段二: 文件等待与处理 (s1240 - s1440)
| 步骤 | 说明 |
|---|---|
| s1240-inscLoan-wait | 等待索赔文件 |
| s1250-tfrLoanPlan-wait | 等待银团交割文件 |
| s1250-tfrLoanPlan-wb-wait | 等待自营交割文件 |
| s1250-abs-dm-checksum | 批前资产处置文件DM同步检查 |
| s1241-insc-loan-proc | 自营+银团索赔处理 |
| s1251-tfrloan-proc | 银团交割处理 |
| s1261-tfrloan-proc | 自营交割处理 |
| s1300-deliveryprice-adj | 银团交割折价处理 |
| vatAdj-file-wait + s1410 | 小微企业免税调账 |
| loanledger-file-wait + s1415 | 分户账调整文件处理 |
| accting-adj-wait + s1420 | 小会计调账文件落库 |
| s1425 | RONF小会计调账文件落库 |
| s1430 + s1430merge | 小会计调账平衡校验 |
| s1440AccountingAdj | 调整交易入会计流水 |
阶段三: 数据同步与校验 (s1800 - s1860)
| 步骤 | 说明 |
|---|---|
| s1800-file-wait | 检查CPS数据同步完成 |
| s1800_TSP_signal | 大数据校验DM同步信号 |
| s1800-file-check | DM同步数据校验 |
| s1800-dm-checksum | CPS同步数据明细校验 |
| s1810 + s1820 | 借据迁移初始化 |
| s1860 | 借据同步处理 |
阶段四: 总账核算核心 (s2000 - s2200)
| 步骤 | 说明 |
|---|---|
| outer-finished-wait | 批量完成文件等待 |
| s2000-gl-txn-master | 预处理入总账交易文件同步 |
| s2000-error-data-check | 异常数据检查 |
| s2100glFromOuter | 外部入总账交易文件处理 |
| s2200-adj-master | 调整交易处理 |
s2000步骤内部子步骤:
- P2005: 贷款数据加工
- P2010: 加载CPS流水→生成TtTxnGl
- P2012: 索赔流水处理
- P2015: 交易调整
- P2020: 银团分账拆分
- P2021: ABS科目拆分
- P2025: ABS清仓回购处理
- P2026: 预缴税VMS处理
- P2030: 会计核算(核心分录生成)
- P2040: VMS代垫税计算
- P2080: 自动调整已还清本金
- P2081: 银团自动调整
- P2090: 分录汇总
- P2095: 贷款ABS处理
- P2100: 更新数据处理
- P2200: 存款转出流水处理
阶段五: ABS回购处理 (s2600 - s2850)
| 步骤 | 说明 |
|---|---|
| s2600-clear-repo-wait | 清仓回购文件等待 |
| s2600-repo-dm-checksum | 回购文件DM同步检查 |
| s2800-genrepo-flow-master | ABS回购/撤销处理 |
| s2850-absc-discountprofit-master | ABS清仓回购折价收益处理 |
阶段六: 总账余额更新 (s4050 - s4900)
| 步骤 | 说明 |
|---|---|
| s4051GlGroupPartition | 分组汇总分录分区 |
| s4052GlGroup | 分组汇总分录 |
| s4100-gl-bal-master | 交易入总账(余额更新) |
| s4500SubjectAdj | 科目调整 |
| s4700-check-cps-balance | GLP与CPS总分对账 |
| s4800GlBalPartition | 总账余额分区 |
| s4900-after-accting-master | 出并账文件,记录历史 |
阶段七: 输出与清理 (s4900 - s7000)
| 步骤 | 说明 |
|---|---|
| s5150FileDataCheckToOF | 文件数据校验 |
| s4900-genOFYakFileItemByDay | 生成OF Yak文件项 |
| s4900_TSP_signal | 发送大数据抽数信号 |
| after-truncate | 批后数据清理 |
| s5200-genOFYakFileByDay | 生成OF Yak文件 |
| s6000sync | 同步TxnGlt |
| s7000_TSP_signal | 大数据抽数信号 |
| s7000-job-finished-file | Job完成标志文件 |
| gen-split-gl-region / gen-split-loan-region | 生成Region打散SQL |
7.2 数据备份流程 (jobs-glp-data-bak.xml)
| 步骤 | 说明 |
|---|---|
| s0500 | 已结清借据清理 |
| s0550 | 已结清ABS借据清理 |
| s0600 | 已结清历史数据清理 |
| s1000 | 银团借据备份(TM_LOAN_BG → TM_LOAN_BG_B) |
| s2000 | VMS数据备份(TM_LOAN_VMS → TM_LOAN_VMS_B) |
| s3000 | 银团还款计划备份 |
| s4000 | 总账余额备份 |
7.3 对账流程 (jobs-glp-compare.xml)
专门的总分对账批处理,对比GLP与CPS的数据一致性。
7.4 数据清理流程 (jobs-glp-clean.xml)
历史数据定期清理,包含:
- 数据清理配置管理
- 清理计划执行
- 清理日志记录
7.5 年终结转流程 (jobs-year.xml - clusterGlpYearJob)
| 步骤 | 说明 |
|---|---|
| wait-file-glp-adm-finish | 等待主批结束文件 |
| before-clean-table-year | 临时表清理 |
| s2000-year-account-master | 年结处理(更新TM_GL_BAL_YEAR) |
| s2010-s2040-year-bal-check | 年结余额校验(4轮) |
| s5000-TSP-signal | 发送大数据信号 |
| s5000-acct-bal-webank-transform | 我行部分金额累加+文件转换 |
| s6000-acct-bal-other-bank-transform | 他行部分金额累加+文件转换 |
| s6100-genOFYakFileByYear | 生成年终OF文件 |
年结内部处理 (year包):
P2000AccountingDate- 年结日期处理P2200AcctBalTransformAdm/P2300AcctBalTransformAdm- ADM余额转换P3000AcctBalTransform- 余额结转P4000AcctBalTransform- 余额结转(补充)P5000AcctBalWeBankTransform- 我行余额转换输出P6000AcctBalOtherBankTransform- 他行余额转换输出
八、科目管理
8.1 科目体系
科目定义 (Subject 类) 包含以下属性:
- 科目编号 (subject): 9位科目编码
- 余额方向 (balDbCrFlag): D(只借)/C(只贷)/B(轧差)/双向
- 发生额方向 (amtDbCrFlag): D(只借)/C(只贷)/B(双向)
- 科目类型 (type): A资产/B负债/C损益/D共同/E表外
- 币种 (currCd)
- 价税分离标志 (needVatSplit)
- 增值税科目 (incomeVatSubject)
- 虚拟科目标志 (isVirtualSubject)
- 年结结转标志 (needYearCarryOver)
8.2 科目映射机制
科目映射通过8层替换链实现,确保最终科目符合业务要求:
第1层: SubjectMapper链 (AbsdMapper + LoanTermMapper)
- 根据ABS标志和贷款期限进行初步科目映射
- 通过
SubjectMapping参数表查找映射关系
第2层: 通用科目映射规则引擎 (SubjectMappingFacility)
- 使用
SubjectMappingCache缓存映射规则 - 支持
TM_PARA_SUBJECT_MAPPING和TM_PARA_SUBJECT_MAPPING_TYPE表定义的映射规则 - 支持MVEL表达式规则
第3层: 产品科目替换 (ProductSubjectReplace)
- 根据产品编号查找
ProductSubjectMap参数 - ABS产品(Z开头)统一使用ABSD产品映射
第4层: 递延收入科目替换 (DeferredIncomeReplace)
- 条件:
isDeferredIncome = Y - 查找
DeferredIncomeMapping参数替换为递延科目
第5层: 强制AC科目替换 (ForceAcSubjectReplace)
- 条件:
forceAc = Y(清仓回购场景) - 可通过系统参数
IS_OPEN_FORCE_AC开关控制 - 查找
ForceAcSubjectMapping按机构替换
第6层: 计划科目替换 (PlanSubjectReplace)
- 基于
productCd + planNbr + bnpGroup维度 - 查找
PlanSubjectMapping参数
第7层: OCI科目替换 (CommonSubjectReplace)
- 在分录生成后执行
- 资产池类型=OCI且银行号=WEBANK时替换
- 映射因子格式:
ACCT|OCI
第8层: 银团科目映射 (BankGroupSubjectMapping)
- 仅银团交易生效
- 将合作银行科目替换为我行对应科目
- 同时生成一套我行科目分录
8.3 科目映射参数表
| 参数类 | Key | 用途 |
|---|---|---|
| SubjectMapping | subject | 通用科目映射(含LoanTerm/ABS维度) |
| ProductSubjectMap | productCd | 产品级科目映射 |
| BankGroupSubjectMapping | subject + dbCrInd | 银团科目映射 |
| DeferredIncomeMapping | subject | 递延收入科目替换 |
| ForceAcSubjectMapping | org | 强制AC科目替换 |
| PlanSubjectMapping | productCd + planNbr + bnpGroup | 计划级科目映射 |
| ReserveTaxSplitMapping | subject + dbCrInd + redBlueInd | 预缴税科目拆分 |
| DeferredIncomeVatSplitMapping | subject | 递延息已缴税拆分 |
| CommonSubjectMap | mappingFactor | 通用映射(如OCI) |
九、余额管理
9.1 总账余额 (TM_GL_BAL)
余额维度: SUBJECT + PRODUCT_CD + BRANCH_ID + ORG + BANK_GROUP_ID + BANK_NO + DCN_NO + ASSET_OWNER_NO
余额字段:
- 当日余额: DB_BAL / CR_BAL
- 当日发生额: DB_AMT / CR_AMT
- 当日笔数: DB_COUNT / CR_COUNT
- 昨日余额: LAST_DB_BAL / LAST_CR_BAL
- 上月末余额: LAST_MTH_DB_BAL / LAST_MTH_CR_BAL
- 上季末余额: LAST_QTR_DB_BAL / LAST_QTR_CR_BAL
- 上年末余额: LAST_YR_DB_BAL / LAST_YR_CR_BAL
余额更新流程:
- 分录按GlSuccessKey分组汇总 (P4050/P4051/P4052)
- 查找或创建TM_GL_BAL记录 (P4100)
- 将分录金额累加到发生额和余额
- INSERT或UPDATE到数据库
余额计算规则 (AcctEntry.accumulateTo):
- 借方分录: DB_BAL += amount, DB_AMT += amount, DB_COUNT++
- 贷方分录: CR_BAL += amount, CR_AMT += amount, CR_COUNT++
9.2 对账机制
GLP与CPS总分对账 (s4700):
- 对比总账余额与CPS系统的明细汇总
- 发现差异时生成对账报告
科目平衡校验 (s1430):
- 调账文件的借贷平衡校验
- 确保每笔调整交易的借方金额 = 贷方金额
9.3 年终结转
年结流程:
- 余额快照: 将TM_GL_BAL当前余额记录到TM_GL_BAL_YEAR
- 损益结转: 损益类科目(C类)余额结转到利润科目
- 余额校验: 4轮年结余额校验(s2010-s2040)
- 输出文件:
- 我行部分: 累加金额 + 文件格式转换 (P5000)
- 他行部分: 累加金额 + 文件格式转换 (P6000)
- OF文件: 生成年终OF Yak文件
年结记录字段 (TM_GL_BAL_YEAR):
- PRE_YEAR_DB_BAL/CR_BAL: 年结前余额
- AFT_YEAR_DB_BAL/CR_BAL: 年结后余额
- ACCOUNTING_DATE: 年结日期
十、业务流程
10.1 日终GL处理流程
完整日终处理时序:
[日终开始]
│
├─ 1. 参数检查与刷新
│ ├─ 银团/税率参数校验
│ ├─ Yak文件清理
│ ├─ 临时表清理
│ ├─ 参数刷新(BMP参数同步)
│ └─ 数据还原(重跑场景恢复)
│
├─ 2. Region热点打散
│ └─ TiDB大表(TT_GL_SUCCESS, TT_LOAN_MIGRATION)Region打散
│
├─ 3. 总账预处理
│ └─ 初始化总账环境
│
├─ 4. 文件等待与业务处理
│ ├─ 索赔文件等待与处理
│ ├─ 银团交割文件等待与处理
│ ├─ 自营交割文件等待与处理
│ ├─ 资产处置DM同步检查
│ ├─ 银团折价处理
│ ├─ 免税调账
│ ├─ 分户账调整
│ └─ 小会计调账
│
├─ 5. 数据同步与校验
│ ├─ CPS数据同步等待与校验
│ ├─ DM同步检查
│ └─ 借据同步处理
│
├─ 6. 总账核算核心
│ ├─ 流水加载(P2010)
│ ├─ 银团分账(P2020)
│ ├─ ABS处理(P2021/P2025)
│ ├─ 预缴税处理(P2026)
│ ├─ 会计核算/分录生成(P2030)
│ ├─ VMS计算(P2040)
│ ├─ 分录汇总(P2090)
│ └─ 外部流水处理(P2100/P2200)
│
├─ 7. ABS回购处理
│ ├─ 清仓回购等待
│ ├─ ABS回购/撤销处理
│ └─ 折价收益处理
│
├─ 8. 余额更新与对账
│ ├─ 分录分组汇总
│ ├─ 总账余额更新(P4100)
│ ├─ 科目调整(P4500)
│ └─ GLP与CPS对账(P4700)
│
├─ 9. 输出与清理
│ ├─ 出并账文件
│ ├─ OF Yak文件生成
│ ├─ 大数据抽数信号
│ ├─ 批后数据清理
│ ├─ TxnGlt同步
│ └─ Region打散SQL生成
│
[日终结束]10.2 DCN/ADM双模式部署
ADM模式 (集中式):
- 所有步骤在单节点执行
- 不需要文件同步等待
- 适合小规模或开发环境
DCN模式 (分布式):
- 按DCN分区执行批处理
- 需要文件同步和等待机制
- 步骤间通过文件标志(File Wait Tasklet)协调
- 支持多IDC部署
- 关键等待点: s1800(CPS同步), s2600(清仓回购), outer-finished-wait
DCN特有步骤:
- s0050-s0058: 各类数据还原
- s0060-s0062: 重跑历史数据清理
- s0063: YakFileItem清理
- Region打散步骤
10.3 年终处理流程
[年终处理开始] (clusterGlpYearJob)
│
├─ 等待主批(clusterGlpJob)结束
├─ 临时表清理
├─ 年结处理 (更新TM_GL_BAL_YEAR)
├─ 年结余额校验 (4轮)
├─ 发送大数据信号
├─ 我行余额转换输出
├─ 他行余额转换输出
└─ 生成年终OF文件
[年终处理结束]十一、配置与部署
11.1 集群配置 (13种)
系统支持多集群部署,每个集群有独立的配置目录:
| 配置目录 | 说明 |
|---|---|
conf/glp-cluster-batch-adm | 标准集群批处理(新) |
conf/glp-cluster-service-adm | (隐含)标准联机服务 |
conf/glp-cluster-test | 测试集群 |
conf/bglp-batch-adm | BGLP批处理ADM |
conf/bglp-batch-dcn | BGLP批处理DCN |
conf/bglp-cluster-batch-adm | BGLP集群批处理ADM |
conf/glp-cluster4gic | GIC集群配置 |
conf/glp-cluster4wbp | WBP集群配置 |
conf/glp-dcluster-batch-adm | D集群批处理 |
conf/glp-gcluster-batch-adm | G集群批处理 |
conf/glp-zcluster-batch-adm | Z集群批处理 |
conf/pglp-cluster-batch-adm | PGLP集群批处理 |
conf/rciglp-cluster-batch-adm | RCI GLP集群批处理 |
conf/sglp-cluster-batch-adm | SGLP集群批处理 |
11.2 配置文件结构
每个集群配置包含:
| 文件 | 说明 |
|---|---|
*.properties | 核心配置(数据源、参数等) |
*-env.properties | 环境变量配置 |
*-nodes.env | 节点配置 |
gns-api.properties | GNS API配置 |
gns-client.properties | GNS客户端配置 |
rmb-client.properties | RMB客户端配置 |
weservice.properties | Web服务配置 |
log4j2.xml | 日志配置 |
11.3 Spring上下文配置
| 配置文件 | 说明 |
|---|---|
batch-basic-context.xml | Batch基础上下文 |
batch-context.xml | Batch运行上下文 |
biz/biz-context.xml | 业务Bean装配 |
biz-context-jdbc.xml | JDBC数据源配置 |
biz-context-jdbc-cps.xml | CPS数据源配置 |
biz-context-jdbc-glp-tdsql.xml | GLP TDSQL数据源 |
cache-context.xml | 缓存配置 |
facility-context.xml | Facility Bean装配(含AcctingHelper等) |
fps-context.xml | FPS配置 |
rpc-context.xml | RPC服务配置 |
service-context.xml | 服务层配置 |
check-listener.xml | 检查监听器 |
step-beans.xml | Step Bean定义 |
11.4 部署架构
- 数据库: TiDB集群,多表按PART_DAY分区
- Region打散: 对热点大表(TT_GL_SUCCESS, TT_LOAN_MIGRATION)自动打散Region
- 序列号: TiDB自增主键 + 手动序列号双模式
- 文件传输: 基于Yak文件传输框架
- 参数管理: BMP统一参数管理平台
- 监控: 批处理状态通过BatchStatusFacility管理,TSP信号通知大数据平台
十二、DB迁移
12.1 数据库版本管理
数据库升级脚本组织结构:
glp-core-upgrade/db/
├── base/ # 基础建表脚本
│ └── ddl/
│ ├── acct_009_ddl_glpclusterdb_erm_create.sql
│ ├── acct_034_ddl_glpdb_b_create.sql
│ ├── acct_120_ddl_glpclusterdb_gl_bal_adj_create.sql
│ └── ...
├── 3.20.0/ # 版本3.20.0升级
│ └── ddl/
│ └── acct_094_glpcluster_gl_bal_year_add_index_alter.sql
├── 22.08.29/ # 历史升级
│ └── 829_acct_003_ddl_glpclusterdb_gl_bal_adj_create.sql
└── ...
dbScript/ # 外部维护的DB脚本
├── 24.05.28/ # 按日期组织的变更
├── 24.06.04/
├── 24.08.30/
└── ...12.2 DDL脚本分类
| 前缀 | 说明 |
|---|---|
acct_000 | Docker表 |
acct_001 | 双写表 |
acct_002 | 系统状态表 |
acct_003 | NAS相关 |
acct_004 | RMB相关 |
acct_005 | 批量插入表 |
acct_006 | Spring Batch表 |
acct_007 | 参数表 |
acct_008 | SDK表 |
acct_009 | ERM表(总账核心表) |
acct_011 | 增值税调整表 |
acct_017 | 总账历史表 |
acct_031 | BDP表 |
acct_034 | B备份表 |
acct_037 | 产品参数表 |
acct_040 | 科目参数表 |
acct_054 | 公允价值表 |
acct_103 | 交易调整备份表 |
acct_110 | 主表 |
acct_116 | 多IDC表 |
acct_117 | 开关表 |
acct_120 | 总账余额调整表 |
acct_121 | 总账余额Key表 |
acct_200 | ABS利润转移删除表 |
acct_201 | 规则检查表 |
12.3 数据迁移工具
DataMigrationInfoFacility: 管理数据迁移信息的工具类。
Reader/Writer:
AbstractPagingKeyTidbReader- TiDB分页Key读取器基类ChunkPagingKeyReader/ChunkPagingKeyTidbReader- 分块分页读取DataCopyChunkPagingReader- 数据复制分页读取DbMigrationInfoFilePageReader/DbMigrationInfoStringPageReader- 迁移信息分页读取DbFileParallelMultiWriter- 并行多写Writer
数据备份/还原:
- s0050-s0058: 批前数据还原(从备份表恢复)
- s1000-s4000 (data-bak): 批后数据备份(主表→备份表)
十三、外部系统集成
13.1 CPS (Core Processing System)
集成方式: 数据库表同步 + 文件传输
- 输入: TM_GL_TXN_ITEM表(CPS写入交易流水)
- 输出: TT_GL_SUCCESS / TT_GL_BAL_OF(总账分录和余额供CPS查询)
- 对账: s4700步骤进行GLP与CPS总分对账
- 同步等待: s1800步骤等待CPS数据同步完成
- DM同步: 通过大数据平台DM同步检查(s1250/s2600)
13.2 BMP (Bank Management Platform)
集成方式: SDK调用 (zbmp-service-sdk)
- 参数管理: 银行/银团/成员等参数通过BMP管理
- 参数刷新: s0010步骤刷新BMP参数
- 缓存: 通过bmpsdk-client-db缓存参数数据
- 联机服务: glp-cluster-service-adm提供BMP参数维护接口
13.3 大数据平台
集成方式: TSP信号 + 文件传输 (Yak)
- TSP信号: 批处理关键节点发送信号通知大数据平台抽数
- TSP_S1800: 数据同步信号
- TSP_S4900: 抽数信号
- TSP_S5000: 年终信号
- TSP_S7000: 最终抽数信号
- Yak文件: 通过Yak文件传输框架输出数据文件
- OF Yak文件: 日终/年终输出文件
- YakFileItem: 文件传输项管理
13.4 RMB (Reliable Message Bus)
集成方式: 消息总线
- 配置文件:
rmb-client.properties - 用于跨系统消息通信
13.5 GNS (Global Naming Service)
集成方式: 服务发现
- 配置文件:
gns-api.properties/gns-client.properties - 用于服务注册和发现
13.6 外部交易系统
集成方式: 文件传输 (s2100步骤)
- 外部系统通过文件抛入总账交易
P2100LoadGlTxnFromOutter处理外部交易文件P2200LoadGlTxnAdj/P2200DepositXfrOutGlTxn处理调整交易和存款转出
13.7 小会计系统
集成方式: 文件传输 + 数据库
- s1420/s1425: 小会计调账文件落库
- s1430: 调账平衡校验
- s1440: 调整交易入会计流水
- 支持FON(From Other Network)和RONF(Reverse Other Network File)模式
13.8 多集群协同
集成方式: 文件等待 + 数据库
- DCN模式: 各DCN节点独立处理,通过文件标志协调
- ADM模式: 集中处理,包含DCN汇聚
- 年终处理: 各DCN年结完成后汇聚到ADM
附录
A. 关键常量 (GlpConstants)
| 常量 | 值 | 说明 |
|---|---|---|
| BANK_NO_WEBANK | "WEBANK" | 我行银行号 |
| AGE_GROUP_Y | "Y" | Y账龄组(零元回购) |
| AGE_GROUP_W | "W" | W账龄组(核销) |
| AGE_GROUP_G | "G" | G账龄组(逾期) |
| AGE_GROUP_J | "J" | J账龄组 |
| VAT_CNC_SUBJECT | (配置值) | 增值税科目 |
| BG_ACRU_INIT_FLAG | (配置值) | 银团应计初始化标志 |
B. 批处理步骤包对照表
| 包名 | 步骤范围 | 说明 |
|---|---|---|
| s0000 | 数据准备 | 数据生成 |
| s0010 | 参数刷新 | 参数同步 |
| s0100 | 总账初始化 | 预处理 |
| s1000 | 数据备份 | LoanBg备份 |
| s11000 | 清理 | 数据清理 |
| s1200 | 索赔 | 保险索赔处理 |
| s1240 | 索赔等待 | 文件等待 |
| s1250 | 交割 | 银团/自营交割 |
| s1260 | 自营交割 | 自营交割处理 |
| s1300 | 折价 | 银团交割折价 |
| s1410 | 免税 | 小微免税调账 |
| s1415 | 分户账 | 分户账调整 |
| s1420 | 调账落库 | 小会计调账 |
| s1425 | FON调账 | RONF调账 |
| s1430 | 平衡校验 | 调账校验 |
| s1440 | 调整入账 | 调整交易入流水 |
| s1810 | 迁移初始化 | 借据迁移 |
| s1820 | 迁移处理 | 迁移执行 |
| s1860 | 借据同步 | 借据数据同步 |
| s2000 | 总账核心 | 流水加载/核算/分录 |
| s2100 | 外部流水 | 外部交易处理 |
| s2200 | 调整流水 | 调整交易处理 |
| s2650 | 影子计划 | Shadow Plan |
| s2750 | 清仓回购 | ABS清仓回购初始化 |
| s2800 | 回购处理 | ABS回购/撤销 |
| s2850 | 折价收益 | ABS清仓回购折价 |
| s4050 | 分组汇总 | 分录分组 |
| s4100 | 余额更新 | 总账余额 |
| s4500 | 科目调整 | 科目级调整 |
| s4700 | 总分对账 | GLP-CPS对账 |
| s4800 | 余额分区 | 余额分区处理 |
| s4900 | 出账文件 | 输出处理 |
| s5000 | OF文件 | OF文件生成 |
| s5100 | 数据校验 | 文件数据校验 |
| s5500 | (预留) | - |
| s6000 | 同步 | TxnGlt同步 |
| s7000 | 结束 | 信号/标志文件 |
| year/s2000 | 年结 | 年终结转 |
| year/s3000 | 年结文件 | 余额文件 |
| year/s4000 | 年结补充 | 补充余额 |
| year/s5000 | 我行输出 | 我行年结文件 |
| year/s6000 | 他行输出 | 他行年结文件 |
C. 数据库表清单
共约120张表,主要分类:
| 类别 | 前缀 | 表数量 | 说明 |
|---|---|---|---|
| 主数据 | TM_ | ~60 | 业务主表 |
| 临时表 | TT_ | ~25 | 批处理临时表 |
| 批处理 | BATCH_ | ~9 | Spring Batch元数据 |
| 文件传输 | YAK_ | ~8 | Yak文件传输 |
| 参数 | TM_PARA_ | ~15 | 参数配置表 |
本报告基于BGLP总账平台源码分析生成,涵盖系统架构、核心业务逻辑、数据模型、批处理流程等各个方面。