调整开票待办业务场景和后续任务

This commit is contained in:
jsowell
2026-07-17 16:03:54 +08:00
parent 4720194fe7
commit c416bdacc9
2 changed files with 54 additions and 27 deletions

View File

@@ -55,14 +55,18 @@
## 5. 首期业务范围
### 5.1 开票待办
### 5.1 首期开票待办
首期优先实现截图中的开票场景:
首期建设以下两个真实业务场景:
| 待办类型 | 触发条件 | 处理页面 | 完成条件 |
| --- | --- | --- | --- |
| 平台采购开票 | 平台审核拒绝或要求补充材料 | 发票详情/开票申请页 | 用户重新提交或平台关闭任务 |
| 司机开票申请 | 收到司机开票申请 | 发票申请处理页 | 审核通过、驳回或关闭 |
| 待办类型 | 接收人 | 触发条件 | 处理页面 | 完成条件 |
| --- | --- | --- | --- | --- |
| 充电订单开票申请 | 对应运营商管理员 | 用户完成充电后提交订单开票申请 | 发票申请处理页 | 运营商完成开票、驳回或关闭申请 |
| 运营商提现向平台开票 | 对应运营商管理员 | 运营商提现成功,提现状态变为 `已提现` | 财务详情/提现开票处理页 | 运营商提交发票号码及凭证后自动完成,或平台管理员关闭任务 |
首期接收人按运营商管理员角色解析,不向该运营商部门下所有普通用户广播。当前系统创建运营商时使用 `role_id = 3` 创建运营商管理员,实施时需要在测试库确认该角色的 `role_key`,并将角色配置化。
提现向平台开票按“一笔成功提现对应一条待办”实现。首期新增提现开票信息记录,至少保存发票状态、发票号码、凭证地址、提交人和提交时间;后续如平台允许合并多笔提现开具一张发票,再扩展为批量关联模型。
### 5.2 预留业务类型
@@ -74,7 +78,7 @@
| 清分异常 | 清分失败、分账配置错误或账单待处理 |
| 订单异常 | 订单退款、结算或支付异常需要人工介入 |
首期只实现开票待办,其他类型只完成通用模型和扩展接口,不要求全部接入。
首期只实现上述两个开票待办,其他类型只完成通用模型和扩展接口,不要求全部接入。
## 6. 业务流程
@@ -268,7 +272,7 @@ TodoTaskService.countUnread(Long userId);
```java
todoTaskService.createTask(TodoTaskCreateCommand.builder()
.taskType("INVOICE_REVIEW")
.title("司机开票申请")
.title("充电订单开票申请")
.summary("有新的开票申请需要处理")
.businessType("INVOICE_APPLY")
.businessId(invoiceId.toString())
@@ -329,8 +333,8 @@ todoTaskService.createTask(TodoTaskCreateCommand.builder()
### 首期业务
- 平台采购开票待办可以正常生成、展示、跳转和完成。
- 司机开票申请待办可以正常生成、展示、跳转和完成。
- 用户充电订单开票申请待办可以按运营商管理员生成、展示、跳转和完成。
- 运营商提现成功后可以生成“向平台开票”待办,并在提交发票信息后完成。
- 原有 `sys_notice` 公告功能不受影响。
## 14. 实施拆分
@@ -344,10 +348,11 @@ todoTaskService.createTask(TodoTaskCreateCommand.builder()
### 第二期:开票接入
- 接入平台采购开票事件
- 接入司机开票申请事件
- 配置业务路由和完成条件
- 增加接口和页面联调测试
- 将充电订单开票待办接收人收敛为运营商管理员
- 接入提现成功事件,创建运营商向平台开票待办
- 新增提现开票信息表、提交发票信息接口和处理页面
- 配置两个业务场景的路由和完成条件
- 增加接口、事务和页面联调测试。
### 第三期:平台业务扩展

View File

@@ -33,6 +33,12 @@ PRD 同时要求“幂等键唯一”和“任务完成后允许同一业务重
- 用户端详情、已读、完成和取消更新均在 SQL 条件中携带 `assignee_user_id`,避免先查后改产生越权窗口。
- 管理端能力使用独立路径和权限标识,不复用用户端接口绕过接收人过滤。
### 首期两个开票场景
- 充电订单开票:沿用 `order_invoice_record` 创建事件,接收人收敛为对应运营商管理员;当前创建运营商时使用 `role_id = 3`,正式实现前在测试库确认角色标识并配置化。
- 提现向平台开票:监听 `clearing_withdraw_info.withdraw_status` 从处理中变为已提现(`1`)的成功事件;每笔成功提现创建一条 `MERCHANT_WITHDRAW_INVOICE` 待办。
- 提现开票完成不能只依赖手工点完成,新增开票信息记录,保存发票状态、发票号码、凭证地址、提交人和提交时间,提交成功后与待办在同一事务内完成。
### 前后端仓库边界
`jsowell-charge-ui/` 是独立 Git 仓库。后端和前端分别提交中文 commit不将前端目录作为未跟踪目录加入后端仓库。
@@ -48,12 +54,13 @@ PRD 同时要求“幂等键唯一”和“任务完成后允许同一业务重
| B05 | 首页待办卡片、数量展示和轮询刷新 | P0 | done | ESLint 和生产构建通过 | 前端 `0627061` |
| B05-F1 | 待办中心页面上下间距优化 | P0 | done | ESLint 和生产构建通过 | 前端 `380e2dc` |
| B06 | 菜单权限 SQL、联调和首期回归 | P0 | done | 菜单 SQL、构建和专项回归通过待测试库执行 SQL | `974e68cf5` |
| B07 | 平台采购开票待办接入 | P1 | blocked | 仓库内未找到平台采购开票模型、审核状态或接口入口 | - |
| B08 | 司机开票申请待办接入 | P1 | done | 全依赖编译、12 个专项测试通过 | `cbc2e3c72` |
| B07 | 提现成功后向平台开票待办 | P1 | todo | - | - |
| B08 | 充电订单开票申请待办接入 | P1 | done | 已接入业务事件;接收人需按新口径收敛为运营商管理员 | `cbc2e3c72` |
| B08-F1 | 充电订单开票接收人和文案收敛 | P1 | todo | - | - |
| B09 | 管理端创建、分配、取消和隐藏能力 | P1 | todo | - | - |
| B10 | 归档清理、过期任务和操作审计增强 | P2 | todo | - | - |
| B11 | 路由白名单、性能压测和安全专项验证 | P2 | todo | - | - |
| B12 | 汇付、提现、清分、订单异常和实时推送扩展 | P3 | todo | - | - |
| B12 | 汇付、清分、订单异常和实时推送扩展 | P3 | todo | - | - |
## 任务清单
@@ -135,23 +142,38 @@ PRD 同时要求“幂等键唯一”和“任务完成后允许同一业务重
-`sys_notice` 功能和菜单不受影响。
- 后端编译、相关测试、前端 lint/build 通过或记录环境阻塞原因。
### TODO-007 平台采购开票接入
### TODO-007 提现成功后向平台开票接入
- 优先级P1
- 批次B07
- 状态:blocked
- 阻塞原因:当前仓库检索不到平台采购开票对应的数据库模型、审核拒绝/补充材料状态和业务接口,无法安全判断创建与完成时机
- 目标:在平台采购开票审核拒绝或要求补充材料时创建待办,重新提交或平台关闭时完成
- 验收标准:同一开票事件对同一接收人只产生一条有效待办,跳转参数和完成条件正确。
- 状态:todo
- 现有入口:`AdapayService.drawCash()` 创建提现记录,提现成功回调 `cashSucceeded()` 将状态更新为 `1`
- 目标:提现成功后为对应运营商管理员创建“向平台开票”待办,并提供提交发票信息后自动完成的闭环
- 任务拆分:
- 新增提现开票信息表及唯一提现单号约束。
- 在提现成功状态更新事务中创建待办,使用 `MERCHANT_WITHDRAW_INVOICE` 类型。
- 新增查询提现开票详情、提交发票信息、平台关闭任务接口。
- 财务详情页增加待办处理入口,跳转携带 `merchantId``withdrawCode``todoId`
- 验收标准:同一提现成功事件对同一管理员只产生一条有效待办;提交发票号码和凭证后待办自动完成;提现失败不创建该待办。
### TODO-008 司机开票申请接入
### TODO-008 充电订单开票申请接入
- 优先级P1
- 批次B08
- 状态:in_progress
- 目标:收到司机开票申请时创建待办,审核通过、驳回或关闭时完成。
- 状态:done
- 目标:收到用户充电订单开票申请时创建待办,运营商完成开票、驳回或关闭时完成。
- 当前实现:已接入 `order_invoice_record` 创建、完成和关闭事件,并与业务事务绑定。
- 待收敛:接收人当前按运营商部门树下正常用户解析,需要改为只解析运营商管理员。
- 验收标准:创建和完成与开票业务事务一致,异常回滚时不产生脏任务状态。
### TODO-008-F1 充电订单开票接收人和文案收敛
- 优先级P1
- 批次B08-F1
- 状态todo
- 目标:将现有 `INVOICE_REVIEW` 待办的标题、类型文案从“司机开票申请”统一为“充电订单开票申请”,接收人限制为运营商管理员。
- 验收标准:运营商普通财务或普通操作员不会收到该待办;管理员收到的待办可正常跳转、完成和关闭。
### TODO-009 管理端异常任务处理
- 优先级P1
@@ -173,7 +195,7 @@ PRD 同时要求“幂等键唯一”和“任务完成后允许同一业务重
- 优先级P3
- 批次B12
- 状态todo
- 目标:接入汇付开户、结算账户、提现、清分和订单异常,并评估 WebSocket/SSE。
- 目标:接入汇付开户、结算账户、清分和订单异常,并评估 WebSocket/SSE。
- 验收标准:新增业务只通过统一待办 Service 接入,不修改通用数据权限和状态模型。
## 提交记录
@@ -187,6 +209,6 @@ PRD 同时要求“幂等键唯一”和“任务完成后允许同一业务重
- 2026-07-16B04完成前端 API、待办中心筛选分页、批量已读和安全路由跳转新增文件专项 ESLint 通过,`NODE_OPTIONS=--openssl-legacy-provider npm run build:prd` 构建通过;前端 commit `ff6b890`
- 2026-07-16B05完成首页右侧待办卡片、`99+` 数量、最近 3 条、空状态、错误重试和 60 秒轮询;专项 ESLint 与生产构建通过;前端 commit `0627061`
- 2026-07-16B06完成幂等菜单/权限 SQL列表、查询和已读权限默认授予正常角色完成和取消权限需按业务角色显式授权后端 9 个专项测试再次通过,前端构建沿用 B05 验证结果commit `974e68cf5`
- 2026-07-16B07 分析:当前仓库未发现平台采购开票业务落点,需补充对应模块/表/接口信息后继续。
- 2026-07-16B08司机开票记录创建后按运营商部门树为正常后台用户幂等创建待办开票状态更新为已开票时自动完成删除/关闭记录时自动取消;业务与待办状态处于同一事务;全依赖编译和 12 个专项测试通过commit `cbc2e3c72`
- 2026-07-17B05-F1局部覆盖全局卡片纵向内边距并补充待办页面顶部和底部留白专项 ESLint 与生产构建通过;前端 commit `380e2dc`
- 2026-07-17需求调整移除不存在的平台采购开票场景新增“提现成功后运营商向平台开票”场景并将充电订单开票接收人明确为运营商管理员。