docs: design presign save auto-submit finance confirmation
Document frontend orchestration so saving a presign order submits all dfj earnest transfers on web and mobile. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
e4ec917a03
commit
b217ffcdca
1 file changed
+78
@@ -0,0 +1,78 @@
|
||||
# 预签约订单:保存时自动提交已付款意向金财务确认 — 设计说明
|
||||
|
||||
**日期:** 2026-10-14
|
||||
**状态:** 已确认(方案 1:前端保存后编排)
|
||||
**范围:** `web-admin` 预签约新增/编辑弹窗;`mobile-oa-h5` 预签约新增/编辑(`mobile-h5` 经 WebView 复用同一套,无独立业务改动)
|
||||
**前置:** 意向金转账须先落库拿到服务端 `id` 才能提交财务确认
|
||||
|
||||
## 1. 目标
|
||||
|
||||
保存预签约订单时,对当前表单中**所有仍为「已付款」`dfj`** 的意向金转账笔,在落库成功后自动调用「提交财务确认」(`dfj` → `jfqrz`),避免「新增转账 → 保存 → 再打开 → 再点提交」的两步操作。
|
||||
|
||||
覆盖范围包括:本次新创建的转账、以前已保存但未提交的 `dfj` 笔、撤回后又回到 `dfj` 的笔。
|
||||
|
||||
## 2. 决策摘要
|
||||
|
||||
| 项 | 决策 |
|
||||
|----|------|
|
||||
| 自动提交对象 | 表单内全部 `payStatus === 'dfj'` 且已有服务端 `id` 的转账笔 |
|
||||
| 实现方式 | 前端编排:先保存订单/转账,再逐笔调用现有提交 API |
|
||||
| 后端 | 不改保存语义;不新增专用「保存并提交」接口 |
|
||||
| 端覆盖 | Web + 移动端一起改 |
|
||||
| 部分失败 | 订单/转账仍算保存成功;提示失败笔数与原因;Web 关弹窗、移动回列表 |
|
||||
| 手动按钮 | 保留「提交财务确认」,供自动提交失败后补提 |
|
||||
|
||||
## 3. 保存后流程
|
||||
|
||||
1. 按现有逻辑完成订单校验与保存,以及 `dfj` 转账的创建/更新落库。
|
||||
2. 收集待提交列表:`payStatus === 'dfj'` 且存在非空服务端 `id`。
|
||||
3. 对列表逐笔调用现有「提交财务确认」接口;单笔失败不中断后续笔,也不回滚已保存数据。
|
||||
4. 提示:
|
||||
- 无需提交或全部成功:沿用现有「保存成功」。
|
||||
- 有失败:`订单已保存,但有 N 笔提交财务确认失败:原因1;原因2…`(原因优先用接口错误信息)。
|
||||
5. 导航不变:Web 关闭弹窗并 `saved`;移动端回列表。
|
||||
|
||||
### 3.1 新增 vs 编辑
|
||||
|
||||
| 场景 | 落库 | 取 `id` | 自动提交 |
|
||||
|------|------|---------|----------|
|
||||
| 编辑 | 更新订单;无 `id` 的 `dfj` 创建转账;有 `id` 的 `dfj` 更新 | 创建接口返回值写回对应行;已有行沿用 `id` | 对所有仍为 `dfj` 且有 `id` 的笔提交 |
|
||||
| 新增 | 创建订单时附带 `transfers`(或等价) | 从创建订单响应的 `transfers` 取 `id` | 对响应中 `dfj` 笔提交 |
|
||||
|
||||
编辑路径须修复当前「创建转账不写回 `id`」的缺口,否则新笔无法进入自动提交。
|
||||
|
||||
### 3.2 边界
|
||||
|
||||
- 已转正式 / 作废等不可操作状态:仍由现有保存校验拦截,不进入自动提交。
|
||||
- 非 `dfj`(确认中 / 已完成 / 退费等):不参与。
|
||||
- 空转账列表:保存行为与现网一致。
|
||||
- 自动提交阶段关闭接口成功 toast,避免「保存成功」后又连弹多次「已提交」。
|
||||
- 不在保存前强制要求每笔都能提交成功;缺转账方式/金额等由提交接口返回,计入部分失败提示。
|
||||
|
||||
## 4. 实现落点
|
||||
|
||||
### 4.1 Web(`web-admin`)
|
||||
|
||||
- 主改:`PresignOrderFormDialog.vue` 的 `handleSave`。
|
||||
- API:`fetchCreatePresignTransfer` / `fetchCreatePresignOrder` 须拿到返回数据;自动提交调用 `fetchSubmitPresignTransferFinance`,且成功 toast 关闭(如 `showSuccessMessage: false` 或调用侧等价控制)。
|
||||
- 手动 `submitTransfer` 行为保持不变。
|
||||
|
||||
### 4.2 移动(`mobile-oa-h5`)
|
||||
|
||||
- 主改:`PresignOrderForm.vue` 的 `save`:在转账落库(`persistTransfers` / 创建响应)之后、`goList` 之前执行自动提交。
|
||||
- 复用:`mergePersistedTransfer`、`createPresignTransfer`、`submitPresignTransfer`、`marketErrorMessage`。
|
||||
- 建议抽纯函数(如收集待提交 id、汇总失败文案),便于单测;`mobile-h5` 无独立业务逻辑则不改。
|
||||
|
||||
## 5. 测试
|
||||
|
||||
- 保存后对所有 `dfj` 调用提交;非 `dfj` 不调用。
|
||||
- 新创建转账:先落库拿到 `id` 再提交。
|
||||
- 部分失败:提示含 N 与原因;仍关弹窗 / 回列表。
|
||||
- 手动「提交财务确认」仍可用(契约/现有测试不回归)。
|
||||
|
||||
## 6. 非目标
|
||||
|
||||
- 不改财务确认列表、财务审核侧接口与页面。
|
||||
- 不把自动提交下沉到后端 create/update 事务。
|
||||
- 不自动提交非意向金业务(协议样本缴费等)的转账笔。
|
||||
- 不改 `mobile-h5` 壳工程(仅 WebView 承载)。
|
||||
Reference in new issue
Block a user