任务说明 — 现金贷业务时序与接口落地梳理
本文是梳理任务的工作笔记(目的/方法/进展/备忘),不是给开发的交付文档。给开发看的是同目录下
00-总览+ 各阶段文件。
目的
把 现金贷产品定义 的业务旅程,逐步映射到现网代码里真实存在的接口与调用时序,标注每一步能否跑通,暴露能力缺口,供研发对照代码评估改造点。
依据与方法
- 代码来源:
gitlab/backend-cashloan各服务 master 分支(已 pull 最新)。 - 可信度:接口名、
@RequestMapping路径、Feign 客户端、调用顺序均来自源码核对,非推测。 - 深度边界:到接口串联级;标「待读实现」处表示未深入方法内部逻辑。
- 读法路径:前端 H5 → 业务网关(路由/鉴权/加解密)→ bns
service-api(端点)→ bnsbusiness层(编排)→facility/outgoingFeign 调下游。 - 工具:
code-toolsetMCP。code_search(语义分级 def/ref/string,跨模块一次到位)是定位调用方、确认实现的主力,优于裸 grep。call_graph(LSP 符号级 callers/callees)用于追调用链,仅在单个 reactor 工作区内有效(如 fund-control),其外的调用者不出现、跨边界被调者解析到 jar 而非源码——0 结果须用code_search在更大范围复核。跨服务 Feign 调用(如 bns→fcs)任何工具都追不到(HTTP 边界),靠手工接口对应。
时序梳理标准(追踪到头)
每条调用链路必须追到终点,终点只有三类之一,不允许画到中间服务就停:
| 终点类型 | 表现 | 图中画法 |
|---|---|---|
| ① 系统内部闭环 | 落本地表 / 查本地表 / 纯计算,不再外呼 | Note over 服务: ...(内部落库/查表) |
| ② 外部三方 | 打到 Smile Identity / 支付通道 / 银行 / NIBSS 等 | 画到外部 participant,箭头指向它 |
| ③ 缺失系统 | 不在代码库 / 被注释 / 留 TODO(如 Bridge、res) | 画到缺失节点并标 ✗ |
附加规则:
- 每个 participant 必须有连线,没有连线的节点不许出现(孤立节点 = 梳理漏项)。
- 每条连线必须有代码出处(接口名 / 类:行)。
- bns 调下游服务的,继续追该下游服务的终点(跨服务追,直到落到上面三类之一)。
梳理教训(踩过的坑)
- 锚定产品定义阶段,不自创阶段:试算、逾期是子步骤不是阶段(曾误把”试算”当独立阶段)。
- 注释 / TODO 即事实:被
//todo或/* */注释的调用标 ✗(当前不执行),不可当它在跑(风控决策/互斥/agg 通知都栽在这)。 - 子流程不压成一行:像绑卡这种”取地址 → 跳转 → 回调”是子系统交互,要展开到终点,不能简化成单接口(绑卡曾被压成一行 routeRedirect)。
- 声明的节点必须用到:曾在授信图里放了 FCS 节点却无连线——授信其实不调 FCS。
- mermaid 文本禁用半角分号
;:Note/消息文本里的;触发 parse error,用逗号或、代替;同时避免)+紧邻。 - 不要用窄 grep 证伪「缺失」(04 放款栽过的大跟头,连栽两次):曾 grep
paymentOrderPush/plutus-pay-charge/空IPlutusClient没命中就判”放款链路缺失”——错;再用sendMessagePay(死代码)/doTransferOrder(实为订单归档) 误判”待确认”——又错。真实派发是loanApplyCallBack→BeforePaymentLA.execute→laChannelPlutus→PlutusLoanApplyPublisher.sendMsg(放款)/BeforePaymentPlutusPublisher(还款)。教训:判”缺失”前用 call_graph 追 callees 把事件 publisher 抽象查全,别靠猜命名去 grep。 - R/P/W = Reader/Processor/Writer(Spring Batch),不是业务语义;批处理逻辑常在 Processor,别只看 Writer。
- 标 ✓ 前必须读实现体:端点存在 ≠ 已实现。
applyOverFlowRepay/queryLoanForOverFlowRepay端点在、却是return null空壳(超额还款栽过)。光看 service-api 接口清单会把空壳误标 ✓——下游接口要进 impl 确认非return null/非空体。 - 每个阶段/旁路文档结构统一:概述 → 时序图 → 接口落地表 → 缺口小结。即使是 FCS 纯内部流程也要画时序(含内部闭环终点),不可省图。
架构事实(跨阶段复用)
- 两层网关 + Eureka 服务发现:
business-gateway(C 端入口,路由/bns /agg /crs /fcs,Token/AES)+middle-gateway/infrgateway(中台/服务网关,经 Eurekalb://路由 blc/ims/bfs/cfk/mkt/hapmt/plutus-pmt,每条路由套脱敏加解密)。“中台服务前端不直连”仅对 business-gateway 成立——中台服务经 middle-gateway 可达。bns 内部调下游仍走 Feign。内部服务别名:blc=bns-gateway、cfk=fcs、bfs=pfs、ims=ims、plutus-pmt=pmt。 - bns 分层:
service-api(@RequestMapping端点)→service-impl(薄,转调)→business(编排核心,时序读这层)→facility/outgoing(Feign 下游)。 - 外部 Bridge(Transsnet,env
TANK_BRIDGE_SERVICE) 只在 fcs 接 4 个 Feign(风控/优惠券/大数据/发布),唯一活跃是发布saveEventLog(放款/还款事件日志),其余全注释或空壳。bns 不接 bridge——bns 的风控决策/BVN/互斥/人脸调用均注释,目标是 res/大数据/crs。 - 绑卡经跳转绕开网关:bns
routeRedirect返回redirectUrl+bindCardType→ 前端跳 IMS 托管页/通道页完成(银行卡走 token;银行账户走 Direct Debit + OTP)→ 通道回调 IMS → IMS 回调 bnsbindCardCallBack。 - “判断类能力被系统性注释”是反复出现的模式:授信风控决策、借款大数据互斥、agg 变量通知均被注释/TODO;信息采集与落库链路完整,缺的是”判断”。这是评估改造点的核心结论。
- 核验类能力同样空转:BVN/KYC 核验活跃路径(
kycBvnMatch/kycDataPocket)只构造本地对象不外呼,真实第三方调用(queryBigdataBvn/bankBvnMatch)注释——授信”采集完整但核验/判断都不真实执行”。 - fcs→pmt 资金派发走事件 publisher:放款
PlutusLoanApplyPublisher、还款BeforePaymentPlutusPublisher(不同 publisher);BeforePaymentFactory(9 case:LA/AP/RP/CLP/CBP/BCP/RF/IP/DR,扣款前构造)+AfterPaymentFactory(14+ case,回流销账);TxnType 枚举 30+ 种,主动还款=MP(非 AP,AP before 处理器空壳),详见 00-总览。 - 服务名易误导:
doTransferOrder是”订单归档到历史表”非放款转账;sendMessagePay是死代码。按名字猜功能会错,必须读实现 / 用 call_graph。
命名约定
- 本任务目录:
13-现金贷业务时序与接口落地/,00-总览+0X-阶段名(编号对齐 05 系统交互 习惯)。 - 手机分期后续同法另起
14-手机分期业务时序与接口落地/。 - 各阶段文件统一结构:概述 → 时序图(真实服务名)→ 接口落地表 → 缺口小结。
进展
阶段口径:按动作切分。试算/绑卡/合同/提交归入借款;首借/复借是借款内的
isFirstLoan分支(符合「首借/复借是用信内分支」原则);逾期归入还款。
| 阶段 | 文件 | 状态 |
|---|---|---|
| 总览 | 00-总览 | 已出(随阶段补充缺口总表) |
| ① 注册登录 | 01-注册登录 | 已出 |
| ② 授信 | 02-授信 | 已出 |
| ③ 借款(首借/复借分支,含试算/绑卡/合同/提交) | 03-借款 | 已出 |
| ④ 放款 | 04-放款 | 已出 |
| ⑤ 还款(含逾期处置) | 05-还款 | 已出 |
| 旁路 · 提额 | 06-旁路-提额 | 已出 |
| 旁路 · 超额还款 | 07-旁路-超额还款 | 已出 |
| 旁路 · 优惠券减免 | 08-旁路-优惠券减免 | 已出(整段注释,依赖外部 Bridge) |
| 旁路 · 减免/调额 | 09-旁路-减免调额 | 已出 |
| 旁路 · 邀请返现 | — | 暂不做(用户定,IInversionInviteClient→外部 agg) |
已知问题 / 备忘
- 结构性发现(已校正):风控决策/大数据 BVN/互斥/人脸核验在 bns(与 fcs)里均注释,目标据注释是 res/大数据/crs,不是 bridge。bridge(
TANK_BRIDGE_SERVICE)只在 fcs,且只剩发布saveEventLog(放款/还款事件日志)活跃。评估”能否独立跑通”围绕 res/crs/大数据 三个未就绪模块,不是 bridge。 - res 决策引擎仓库未拿到(本地无 res 目录);从调用方
riskPrice(bns/fcs 均注释)反推其契约。 - 早期”bns 未推送”的判断不成立——bns 已推送可读(business-system 197 java + business-gateway 11 java)。
- 验证码短信发送出口在 bns 中未见(无短信 Feign 客户端)。
- CRS(征信/KYC)在现金贷主链路未被 bns 调用,与空壳现状一致。
- 放款派发机制(④ 已更正):fcs→pmt 放款经事件桥
BeforePaymentPublisher.publish(EventType.FCS_BEFORE_PAYMENT)(事务提交后发消息到 pmt)→ PMTIThirdPayment.transfer通道放款。链路是通的(先前误判为缺失已更正)。 - 待确认(需后端讲解人):bns 提现申请单(applyStatus=C) → fcs 放款触发(createDebitOrder/doTransferOrder) 的精确衔接;PMT 消费
FCS_BEFORE_PAYMENT的 binding 配置;建据(LoanInfo)时点。 - 待确认(需深入读实现):多期销账细节——进入 ⑤ 还款阶段再定是否深读。