94 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Research: sw-business-bank 银行代扣文件传输配置能力
## 研究目标
本轮研究只解决“配置承接 + 统一解析 + 审计落点 + 文档闭环”,不把真实银行生产联调、完整 SFTP/FTP 客户端接入或私有文件报文解析扩展进当前范围。
## 基线与现状
- backend 基线固定为:`water-backend` branch `001-sys009-withholding-closure` @ `84493513c1d06936210ab7e697985d38958ba5ee`
- 当前 `BankWithholdingServiceImpl` 在业务方法内硬编码生成送盘、回盘、对账路径,未复用统一解析层。
- 当前批次对象已能保存送盘/回盘/对账文件名与路径,但未统一保存协议与目录。
- 当前配置加载已沿用 Spring profile + Nacos 导入方式,可承接环境级默认规则。
- `ChannelApiConfigDO.extParams` 已存在但当前为空对象,可作为银行通道级覆盖配置的最小 carrier。
## 现有实现问题归纳
1. 路径硬编码散落在 `BankWithholdingServiceImpl` 中,无法支撑运行时切换。
2. 送盘、回盘、对账各自拼接路径,缺少统一优先级与字段级回退规则。
3. 审计仅留存文件名与路径,无法完整表达本轮要求的“协议 + 目录 + 路径 + 文件名”。
4. 当前 backend 尚未存在成熟的 SFTP/FTP 传输适配层,本轮不宜把联调闭环与传输客户端实现一并扩大到必交付。
## 配置承接方案比选
### Decision: 默认规则沿用 Spring profile + Nacos
**Rationale**:
- 现有应用已通过 `application-{profile}.yaml` + Nacos 导入配置,具备最低接入成本。
- 环境级默认规则更适合由 profile/Nacos 承接,避免在业务表中固化所有默认配置。
**Alternatives considered**:
- 完全新建独立文件传输配置表:当前范围过重,且与既有配置中心能力重复。
### Decision: 通道/租户覆盖优先复用 `ChannelApiConfigDO.extParams`
**Rationale**:
- 现有 `ChannelApiConfigDO` 已具备银行通道维度配置语义,`extParams` 可以作为最小增量承接文件传输覆盖规则。
- 复用既有对象可降低本轮 schema 扩张与治理成本。
**Alternatives considered**:
- 新增专门的文件传输策略表:对当前 brownfield 需求来说过重。
- 把所有覆盖规则继续塞入 service 常量:无法满足统一解析与运行时切换。
### Decision: 路径模板仅支持固定变量集合
**Rationale**:
- 当前已澄清只允许固定变量白名单,可显著降低解析复杂度与安全风险。
- 更适合形成稳定测试样本与正式文档说明。
**Alternatives considered**:
- 自由表达式模板:与已澄清约束冲突,且增加安全与维护风险。
- 完全固定路径:无法满足租户、通道、日期分化需求。
### Decision: 配置缺失或连接信息不完整时立即阻断
**Rationale**:
- 已澄清的失败策略要求立即阻断当前文件动作,避免静默回退或进入不确定人工补救状态。
- 有利于验证工件给出明确失败结论。
**Alternatives considered**:
- 仅记日志继续流程:会削弱审计与问题定位能力。
- 自动回退到其他租户/通道配置:存在误用配置风险。
## 决策结论
1. 引入统一解析入口,输入上下文、输出最终解析结果。
2. 作用域优先级固定为:`TENANT_CHANNEL > TENANT > CHANNEL > DEFAULT`
3. 上层覆盖不完整时采用字段级回退,而不是整组失败。
4. 配置变更仅影响新发起文件动作,已开始或已落库批次沿用原解析结果。
5. 审计只保存最终实际使用的协议、目录、路径、文件名,不强制留存配置版本或完整快照。
## 对正式文档的影响
- `12_REV_Detailed.md`:补齐 `REV-008` 的文件通道配置、路径分化、运行时切换与仍待补证边界。
- `03_Interface_Design.md`:补齐文件交换能力边界、解析优先级、失败规则与审计说明,不新增外部接口编号。
- `04_Security_Design.md`:补齐协议选择、凭据管理、敏感配置禁入仓库、优先 SFTP / 兼容 FTP 的治理口径。
- `05_Deployment_Design.md`:补齐 profile/Nacos 承接、银行文件交换通道、环境差异、白名单与本地临时/归档目录职责说明。
## Cross-Repo Impact
- `water-docs`
- 更新正式主文档与治理台账,形成可评审的规格闭环。
- `water-backend`
- `ApiTypeEnum` 新增文件传输配置类型。
- `ChannelApiConfigExtParams` 扩展作用域、业务类型、连接字段、目录字段。
- 新增 `config/filetransfer/``service/filetransfer/` 解析器。
- `BankWithholdingServiceImpl` 从硬编码目录切换到统一解析入口,并固化 send/back/reconcile 审计字段。
## 风险与 Deferred
- 真实 SFTP/FTP 客户端与网络连通性联调Deferred
- `BankCollection` 托收链路对等改造Deferred
- 生产凭据、证书、白名单开通Deferred
- `ARCHIVE / LOCAL_TEMP` 的独立持久化审计对象Deferred但当前可先纳入统一解析能力范围