Files
jsowell-charger-web/docs/plan/2026-07-16-todo-center-task-tracker.md
2026-07-16 17:06:49 +08:00

191 lines
10 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.
# 待办事项中心开发任务跟踪
## 任务概述
- 需求来源:`docs/PRD-待办事项功能.md`
- 开发目标:先交付面向当前登录用户的通用待办闭环,再接入首期开票业务,最后补充管理和扩展能力。
- 后端仓库:当前根仓库,分支 `feature-待办中心`
- 前端仓库:`jsowell-charge-ui/` 独立 Git 仓库,当前分支 `dev`
- 状态定义:`todo` 未开始、`in_progress` 进行中、`blocked` 阻塞、`done` 已完成
## 优先级说明
- P0首期上线必需缺失时无法形成可用闭环。
- P1首期开票业务落地和运营管理必需可在通用能力稳定后接入。
- P2安全、运维和体验增强不阻塞首期核心流程。
- P3后续业务扩展和实时化能力。
## 关键设计决策
### 幂等键生命周期
PRD 同时要求“幂等键唯一”和“任务完成后允许同一业务重新产生任务”。MySQL 普通唯一索引无法同时满足这两个要求,因此采用双字段方案:
- `idempotent_key`:保存业务方传入的原始幂等键,历史记录不修改。
- `active_idempotent_key`:仅非终态任务保存原始幂等键,并建立唯一索引。
- 任务进入 `COMPLETED``CANCELLED``EXPIRED` 后,将 `active_idempotent_key` 置空。
该方案利用 MySQL 唯一索引允许多个 `NULL` 的特性,保证并发创建时只有一条有效待办,同时允许终态后再次创建。
### 数据权限边界
- 用户端接口不接收接收人 ID统一从当前登录态获取用户 ID。
- 用户端详情、已读、完成和取消更新均在 SQL 条件中携带 `assignee_user_id`,避免先查后改产生越权窗口。
- 管理端能力使用独立路径和权限标识,不复用用户端接口绕过接收人过滤。
### 前后端仓库边界
`jsowell-charge-ui/` 是独立 Git 仓库。后端和前端分别提交中文 commit不将前端目录作为未跟踪目录加入后端仓库。
## 执行批次
| 批次 | 范围 | 优先级 | 状态 | 验收结果 | Commit |
| --- | --- | --- | --- | --- | --- |
| B01 | 任务拆分、数据表和索引 | P0 | done | SQL 结构和索引评审通过 | `e65017ab2` |
| B02 | 实体、命令模型、枚举、Mapper、Service | P0 | done | 模块编译和 Mapper XML 校验通过 | `181d4a5b4` |
| B03 | 当前用户查询、已读、完成、取消接口及测试 | P0 | done | 全量依赖编译、9 个专项测试通过 | `f84ec43ce` |
| B04 | 前端 API、待办中心页面和路由跳转 | P0 | done | ESLint 和生产构建通过 | 前端 `ff6b890` |
| B05 | 首页待办卡片、数量展示和轮询刷新 | P0 | done | ESLint 和生产构建通过 | 前端 `0627061` |
| B06 | 菜单权限 SQL、联调和首期回归 | P0 | done | 菜单 SQL、构建和专项回归通过待测试库执行 SQL | `974e68cf5` |
| B07 | 平台采购开票待办接入 | P1 | blocked | 仓库内未找到平台采购开票模型、审核状态或接口入口 | - |
| B08 | 司机开票申请待办接入 | P1 | done | 全依赖编译、12 个专项测试通过 | 本批提交 |
| B09 | 管理端创建、分配、取消和隐藏能力 | P1 | todo | - | - |
| B10 | 归档清理、过期任务和操作审计增强 | P2 | todo | - | - |
| B11 | 路由白名单、性能压测和安全专项验证 | P2 | todo | - | - |
| B12 | 汇付、提现、清分、订单异常和实时推送扩展 | P3 | todo | - | - |
## 任务清单
### TODO-001 建表和索引
- 优先级P0
- 批次B01
- 状态done
- 目标:创建 `sys_todo_task` 表,覆盖任务状态、阅读状态、业务路由、接收人、幂等和审计字段。
- 验收标准:
- 有效任务幂等键具备数据库唯一约束。
- 当前用户首页和列表查询具备组合索引。
- 业务单据、运营商范围和历史清理具备查询索引。
- SQL 可重复交付,不包含真实环境配置或数据。
### TODO-002 通用领域模型和服务
- 优先级P0
- 批次B02
- 状态done
- 目标新增实体、创建命令、状态常量、Mapper 和统一 `TodoTaskService`
- 验收标准:
- 创建接口校验必要字段并设置默认状态、优先级和阅读状态。
- 并发重复创建返回已有有效任务,不产生重复记录。
- 完成、取消和过期操作释放有效幂等键并记录操作信息。
- 业务模块仅依赖 Service不直接依赖 Mapper。
### TODO-003 当前用户后端接口
- 优先级P0
- 批次B03
- 状态done
- 目标:实现未完成数量、首页列表、分页列表、详情、已读、全部已读、完成和取消接口。
- 验收标准:
- 所有用户端查询和更新强制使用当前登录用户 ID。
- 首页最多返回 10 条,默认 3 条,按优先级和创建时间倒序。
- 已完成、已取消和已过期任务不计入首页数量。
- 状态流转非法时返回明确业务错误。
- 核心 Service 和 Controller 权限边界有自动化测试。
### TODO-004 待办中心前端页面
- 优先级P0
- 批次B04
- 状态done
- 目标:增加 API 封装、待办中心列表、筛选、分页、批量已读和安全跳转。
- 验收标准:
- 支持任务状态、阅读状态、任务类型和关键字筛选。
- 未读任务有清晰样式,点击后标记已读。
- 跳转只使用后端返回的已配置路由名称,并附带 `businessType``businessId``todoId`
- 已完成记录默认保留展示,不执行物理删除。
### TODO-005 首页待办卡片
- 优先级P0
- 批次B05
- 状态done
- 目标:在运营商工作台首页展示未完成数量和最近 3 条任务。
- 验收标准:
- 数量超过 99 显示 `99+`
- 无任务时显示空状态。
- 页面打开立即加载,并按 60 秒轮询刷新。
- 完成任务或返回首页后主动刷新。
### TODO-006 菜单权限和联调
- 优先级P0
- 批次B06
- 状态done
- 当前进展:
- 菜单、查询、已读、完成和取消权限 SQL 已完成。
- 列表、查询和已读权限默认授予正常角色;完成和取消权限保留为按业务角色授权。
- 后端 9 个专项测试、前端专项 ESLint 和生产构建已通过。
- 待在测试库执行 `docs/sql/sys_todo_menu.sql` 后进行登录态 HTTP 联调。
- 目标:补充菜单与权限 SQL完成前后端构建和核心流程联调。
- 验收标准:
- 普通用户只看到本人待办。
- 无权限用户不能访问管理接口或完成无权业务。
-`sys_notice` 功能和菜单不受影响。
- 后端编译、相关测试、前端 lint/build 通过或记录环境阻塞原因。
### TODO-007 平台采购开票接入
- 优先级P1
- 批次B07
- 状态blocked
- 阻塞原因:当前仓库检索不到平台采购开票对应的数据库模型、审核拒绝/补充材料状态和业务接口,无法安全判断创建与完成时机。
- 目标:在平台采购开票审核拒绝或要求补充材料时创建待办,重新提交或平台关闭时完成。
- 验收标准:同一开票事件对同一接收人只产生一条有效待办,跳转参数和完成条件正确。
### TODO-008 司机开票申请接入
- 优先级P1
- 批次B08
- 状态in_progress
- 目标:收到司机开票申请时创建待办,审核通过、驳回或关闭时完成。
- 验收标准:创建和完成与开票业务事务一致,异常回滚时不产生脏任务状态。
### TODO-009 管理端异常任务处理
- 优先级P1
- 批次B09
- 状态todo
- 目标:实现管理员列表、人工创建、分配、取消和逻辑隐藏。
- 验收标准:接口具备独立权限标识和操作日志,普通用户不能访问。
### TODO-010 运维与安全增强
- 优先级P2
- 批次B10-B11
- 状态todo
- 目标补充过期、180 天归档清理、操作审计、路由白名单和性能验证。
- 验收标准:首页查询目标响应时间小于 500ms路由不能被请求参数任意覆盖历史任务按策略保留。
### TODO-011 后续业务扩展
- 优先级P3
- 批次B12
- 状态todo
- 目标:接入汇付开户、结算账户、提现、清分和订单异常,并评估 WebSocket/SSE。
- 验收标准:新增业务只通过统一待办 Service 接入,不修改通用数据权限和状态模型。
## 提交记录
每完成一个批次,在此追加:完成时间、验证命令、结果和 commit hash。
- 2026-07-16B01完成优先级拆分、任务跟踪文档和 `sys_todo_task` 建表脚本;通过 SQL 人工结构评审与 `git diff --check`commit `e65017ab2`
- 2026-07-16B01 环境进展:用户已在测试数据库创建 `sys_todo_task` 表,可供后续接口联调。
- 2026-07-16B02完成领域模型、创建/查询 DTO、状态常量、Mapper 和统一 Service`mvn -pl jsowell-system -am -DskipTests compile` 与 Mapper XML 语法校验通过commit `181d4a5b4`
- 2026-07-16B03完成当前用户数量、首页列表、分页列表、详情、已读、全部已读、完成和取消接口`mvn -pl jsowell-admin -am -DskipTests compile` 通过9 个 Service/Controller 专项测试通过commit `f84ec43ce`
- 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 hash 在下一批记录中回填。