tasks.md 7.9 KB

Tasks: 订单操作日志

Input: specs/007-orderlog/spec.md, specs/007-orderlog/plan.md Prerequisites: plan.md, spec.md Tests: 无自动化测试,通过手动操作验证(商家/骑手/用户操作后查看日志页面)。

Organization: 按 Phase 分组——基础设施 → 日志写入集成 → 前端页面 → 部署验证。

Format: [ID] [P?] Description

  • [P]: 可并行(不同文件,无依赖)
  • 包含具体文件路径

Path Conventions

  • 后端源码: ruoyi-system/src/main/java/com/ruoyi/system/ruoyi-admin/src/main/java/com/ruoyi/
  • MyBatis XML: ruoyi-system/src/main/resources/mapper/system/
  • SQL: updatesql/sql.md
  • 前端: E:\QtwCode\foodie\foodie-admin-vue\src\

Phase 1: 数据基础设施(表 + Entity + Mapper + Service)

Purpose: 新建 pos_order_log 表和完整的数据访问层,是所有后续任务的基础。

  • T001 在 updatesql/sql.md 末尾追加 CREATE TABLE pos_order_log 语句(id, dd_id, operator_type, operator_id, operator_name, content, create_time + 索引)
  • T002 [P] 创建 ruoyi-system/src/main/java/com/ruoyi/system/domain/PosOrderLog.java 实体类(id, ddId, operatorType, operatorId, operatorName, content, logTime),继承 BaseEntity,添加 @Excel 导出注解
  • T003 [P] 创建 ruoyi-system/src/main/java/com/ruoyi/system/mapper/PosOrderLogMapper.java 接口(insertOrderLog, selectOrderLogList, selectOrderLogById)
  • T004 [P] 创建 ruoyi-system/src/main/resources/mapper/system/PosOrderLogMapper.xml(resultMap、insert、selectList 带动态条件、selectById)
  • T005 [P] 创建 ruoyi-system/src/main/java/com/ruoyi/system/service/IPosOrderLogService.java 接口
  • T006 [P] 创建 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/PosOrderLogServiceImpl.java 实现

Checkpoint: 数据库建表执行完毕,项目编译通过,PosOrderLog 的 CRUD 可通过 Mapper 调用。


Phase 2: 日志写入基础设施(Helper + Controller)

Purpose: 封装日志写入工具类和后台管理接口。

  • T007 创建 ruoyi-system/src/main/java/com/ruoyi/system/utils/OrderLogHelper.java 工具类(异步 log + 同步 logSync 两个方法)
  • T008 [P] 创建 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/PosOrderLogController.java(list/detail/export 三个接口,权限 system:orderLog:*)

Checkpoint: 后台管理 /system/orderLog/list 接口可正常返回空列表,项目编译通过。


Phase 3: 日志写入集成 — 商家操作

Purpose: 商家端 4 种操作(接单/出餐/完成/取消)自动写入日志。

  • T009 修改 ruoyi-admin/src/main/java/com/ruoyi/app/order/PosOrderShOprateController.java:注入 OrderLogHelper,在 acceptOrder 方法 saveOrUpdate 之后写入日志(operatorType=2, "商家{名}已接单")
  • T010 修改 PosOrderShOprateController.java:在 dispatchOrder 方法 saveOrUpdate 之后写入日志("商家{名}已出餐")
  • T011 修改 PosOrderShOprateController.java:在 completeOrder 方法 saveOrUpdate 之后写入日志("商家{名}已完成订单")
  • T012 修改 PosOrderShOprateController.java:在 cancelOrder 方法 saveOrUpdate 之后写入日志("商家{名}取消订单")

Checkpoint: 商家执行接单→出餐→完成操作后,pos_order_log 表中有对应 3 条日志记录。


Phase 4: 日志写入集成 — 骑手操作

Purpose: 骑手端 3 种操作(接单/取餐/送达)自动写入日志。

  • T013 修改 ruoyi-admin/src/main/java/com/ruoyi/app/order/PosOrderQsOprateController.java:注入 OrderLogHelper,在 acceptOrder 方法写入日志(operatorType=3, "骑手{名}接单成功")
  • T014 修改 PosOrderQsOprateController.java:在 pickupOrder 方法写入日志("骑手{名}已取餐")
  • T015 修改 PosOrderQsOprateController.java:在 deliverOrder 方法写入日志("骑手{名}已送达")

Checkpoint: 骑手执行接单→取餐→送达后,pos_order_log 表中有对应 3 条日志记录。


Phase 5: 日志写入集成 — 用户 + 平台操作

Purpose: 用户端和平台管理端操作写入日志。

  • T016 修改 ruoyi-admin/src/main/java/com/ruoyi/app/order/UserOrderController.java:注入 OrderLogHelper,在 createOrderChild 订单创建成功后写入日志(operatorType=4, "用户{名}创建订单")
  • T017 修改 UserOrderController.java:在 confirmPickup 确认取餐后写入日志("用户{名}确认取餐")
  • T018 修改 UserOrderController.java:在 cancelOrder 取消订单后写入日志("用户{名}取消订单")
  • T019 修改 ruoyi-admin/src/main/java/com/ruoyi/app/order/PosOrderController.java:注入 OrderLogHelper,在 setorderuzt 方法状态修改成功后写入日志(operatorType=1, "平台管理员{名}修改订单状态: X → Y")

Checkpoint: 用户下单后日志表有 1 条记录,平台管理员修改状态后有对应日志。


Phase 6: 日志写入集成 — 系统操作

Purpose: 定时任务和支付回调写入日志。

  • T020 修改 ruoyi-admin/src/main/java/com/ruoyi/app/order/TestTask.java:注入 OrderLogHelper,在 testTiming 超时取消后调用 logSync(operatorType=0, "系统自动取消超时未接单订单")
  • T021 修改 TestTask.java:在 zidwancheng 自动完成后调用 logSync("系统自动完成超时订单")
  • T022 修改 TestTask.java:在 refundProcessing 退款完成后调用 logSync("系统处理退款完成")
  • T023 修改 ruoyi-admin/src/main/java/com/ruoyi/app/pay/PayController.java:注入 OrderLogHelper,在支付回调成功后调用 logSync("系统收到支付成功回调")

Checkpoint: 触发超时取消或支付回调后,日志表有对应系统日志记录。


Phase 7: 前端页面

Purpose: 平台管理端新增订单日志查询页面。

  • T024 [P] 创建 foodie-admin-vue/src/api/system/orderLog.js(listOrderLog, getOrderLog 两个 API 方法)
  • T025 创建 foodie-admin-vue/src/views/system/order/log.vue 日志查询页面:
    • 搜索栏:订单号输入框、操作人ID输入框、操作人名称输入框、搜索/重置/导出按钮
    • 数据表格:主键ID、订单号、操作人类型(格式化:0系统/1平台/2商家/3骑手/4用户)、操作人ID、操作人名称、操作内容、时间、操作(查看按钮)
    • 分页组件
    • 查看弹窗:el-dialog 显示单条日志详情
  • T026 在 updatesql/sql.md 末尾追加菜单插入 SQL(sys_menu 表:订单日志菜单 + 查询权限 + 导出权限)

Checkpoint: 平台管理端左侧菜单出现"订单日志",点击进入可看到日志列表,搜索和导出功能正常。


Phase 8: 部署验证

Purpose: 执行全部 SQL 并端到端验证。

  • T027 在 MySQL 中执行 updatesql/sql.md 中 007-orderlog 相关的所有 SQL(CREATE TABLE + 菜单 INSERT)
  • T028 启动后端服务,用商家端操作一个完整订单流程(接单→出餐→完成),打开平台管理端"订单日志"页面确认日志记录完整
  • T029 测试搜索功能(按订单号、操作人ID、操作人名称筛选)和导出功能

Checkpoint: 完整的端到端验证通过,所有操作日志正确记录并可查询导出。


依赖关系

Phase 1 (T001-T006) → Phase 2 (T007-T008) → Phase 3-6 (T009-T023, 可并行)
                                                  ↓
                                            Phase 7 (T024-T026, 部分可并行)
                                                  ↓
                                            Phase 8 (T027-T029)
  • Phase 1 全部完成后才能进入 Phase 2
  • Phase 2 完成后,Phase 3-6 可并行执行(各修改不同文件)
  • Phase 7 的 T024 可与 Phase 3-6 并行,T025 依赖后端接口可用
  • Phase 8 必须最后执行