# 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 表和完整的数据访问层,是所有后续任务的基础。 - [x] T001 在 `updatesql/sql.md` 末尾追加 CREATE TABLE pos_order_log 语句(id, dd_id, operator_type, operator_id, operator_name, content, create_time + 索引) - [x] T002 [P] 创建 `ruoyi-system/src/main/java/com/ruoyi/system/domain/PosOrderLog.java` 实体类(id, ddId, operatorType, operatorId, operatorName, content, logTime),继承 BaseEntity,添加 @Excel 导出注解 - [x] T003 [P] 创建 `ruoyi-system/src/main/java/com/ruoyi/system/mapper/PosOrderLogMapper.java` 接口(insertOrderLog, selectOrderLogList, selectOrderLogById) - [x] T004 [P] 创建 `ruoyi-system/src/main/resources/mapper/system/PosOrderLogMapper.xml`(resultMap、insert、selectList 带动态条件、selectById) - [x] T005 [P] 创建 `ruoyi-system/src/main/java/com/ruoyi/system/service/IPosOrderLogService.java` 接口 - [x] T006 [P] 创建 `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/PosOrderLogServiceImpl.java` 实现 **Checkpoint**: 数据库建表执行完毕,项目编译通过,PosOrderLog 的 CRUD 可通过 Mapper 调用。 --- ## Phase 2: 日志写入基础设施(Helper + Controller) **Purpose**: 封装日志写入工具类和后台管理接口。 - [x] T007 创建 `ruoyi-system/src/main/java/com/ruoyi/system/utils/OrderLogHelper.java` 工具类(异步 log + 同步 logSync 两个方法) - [x] 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 种操作(接单/出餐/完成/取消)自动写入日志。 - [x] T009 修改 `ruoyi-admin/src/main/java/com/ruoyi/app/order/PosOrderShOprateController.java`:注入 OrderLogHelper,在 acceptOrder 方法 saveOrUpdate 之后写入日志(operatorType=2, "商家{名}已接单") - [x] T010 修改 `PosOrderShOprateController.java`:在 dispatchOrder 方法 saveOrUpdate 之后写入日志("商家{名}已出餐") - [x] T011 修改 `PosOrderShOprateController.java`:在 completeOrder 方法 saveOrUpdate 之后写入日志("商家{名}已完成订单") - [x] T012 修改 `PosOrderShOprateController.java`:在 cancelOrder 方法 saveOrUpdate 之后写入日志("商家{名}取消订单") **Checkpoint**: 商家执行接单→出餐→完成操作后,pos_order_log 表中有对应 3 条日志记录。 --- ## Phase 4: 日志写入集成 — 骑手操作 **Purpose**: 骑手端 3 种操作(接单/取餐/送达)自动写入日志。 - [x] T013 修改 `ruoyi-admin/src/main/java/com/ruoyi/app/order/PosOrderQsOprateController.java`:注入 OrderLogHelper,在 acceptOrder 方法写入日志(operatorType=3, "骑手{名}接单成功") - [x] T014 修改 `PosOrderQsOprateController.java`:在 pickupOrder 方法写入日志("骑手{名}已取餐") - [x] T015 修改 `PosOrderQsOprateController.java`:在 deliverOrder 方法写入日志("骑手{名}已送达") **Checkpoint**: 骑手执行接单→取餐→送达后,pos_order_log 表中有对应 3 条日志记录。 --- ## Phase 5: 日志写入集成 — 用户 + 平台操作 **Purpose**: 用户端和平台管理端操作写入日志。 - [x] T016 修改 `ruoyi-admin/src/main/java/com/ruoyi/app/order/UserOrderController.java`:注入 OrderLogHelper,在 createOrderChild 订单创建成功后写入日志(operatorType=4, "用户{名}创建订单") - [x] T017 修改 `UserOrderController.java`:在 confirmPickup 确认取餐后写入日志("用户{名}确认取餐") - [x] T018 修改 `UserOrderController.java`:在 cancelOrder 取消订单后写入日志("用户{名}取消订单") - [x] T019 修改 `ruoyi-admin/src/main/java/com/ruoyi/app/order/PosOrderController.java`:注入 OrderLogHelper,在 setorderuzt 方法状态修改成功后写入日志(operatorType=1, "平台管理员{名}修改订单状态: X → Y") **Checkpoint**: 用户下单后日志表有 1 条记录,平台管理员修改状态后有对应日志。 --- ## Phase 6: 日志写入集成 — 系统操作 **Purpose**: 定时任务和支付回调写入日志。 - [x] T020 修改 `ruoyi-admin/src/main/java/com/ruoyi/app/order/TestTask.java`:注入 OrderLogHelper,在 testTiming 超时取消后调用 logSync(operatorType=0, "系统自动取消超时未接单订单") - [x] T021 修改 `TestTask.java`:在 zidwancheng 自动完成后调用 logSync("系统自动完成超时订单") - [x] T022 修改 `TestTask.java`:在 refundProcessing 退款完成后调用 logSync("系统处理退款完成") - [x] T023 修改 `ruoyi-admin/src/main/java/com/ruoyi/app/pay/PayController.java`:注入 OrderLogHelper,在支付回调成功后调用 logSync("系统收到支付成功回调") **Checkpoint**: 触发超时取消或支付回调后,日志表有对应系统日志记录。 --- ## Phase 7: 前端页面 **Purpose**: 平台管理端新增订单日志查询页面。 - [x] T024 [P] 创建 `foodie-admin-vue/src/api/system/orderLog.js`(listOrderLog, getOrderLog 两个 API 方法) - [x] T025 创建 `foodie-admin-vue/src/views/system/order/log.vue` 日志查询页面: - 搜索栏:订单号输入框、操作人ID输入框、操作人名称输入框、搜索/重置/导出按钮 - 数据表格:主键ID、订单号、操作人类型(格式化:0系统/1平台/2商家/3骑手/4用户)、操作人ID、操作人名称、操作内容、时间、操作(查看按钮) - 分页组件 - 查看弹窗:el-dialog 显示单条日志详情 - [x] T026 在 `updatesql/sql.md` 末尾追加菜单插入 SQL(sys_menu 表:订单日志菜单 + 查询权限 + 导出权限) **Checkpoint**: 平台管理端左侧菜单出现"订单日志",点击进入可看到日志列表,搜索和导出功能正常。 --- ## Phase 8: 部署验证 **Purpose**: 执行全部 SQL 并端到端验证。 - [x] T027 在 MySQL 中执行 updatesql/sql.md 中 007-orderlog 相关的所有 SQL(CREATE TABLE + 菜单 INSERT) - [x] T028 启动后端服务,用商家端操作一个完整订单流程(接单→出餐→完成),打开平台管理端"订单日志"页面确认日志记录完整 - [x] 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 必须最后执行