# 007 - 订单操作日志 **Feature Branch**: `007-order-log` **Created**: 2026-05-19 **Status**: Done **Input**: 平台管理端新增订单操作日志页面,记录所有订单状态变更的完整审计轨迹。 ## 背景 订单状态已拆分为四字段(state/deliveryStatus/payStatus/afterSaleStatus),状态变更涉及多方角色(平台管理员、商家、骑手、用户、系统)。需要独立的日志表记录每次变更,用于问题排查和运营审计。 ## 需求概览 新增 `pos_order_log` 表,在每次订单状态变更时自动写入一条日志。平台管理端提供日志查询页面,支持按订单号、操作人筛选和导出。 ## 数据库设计 ### 新表:pos_order_log | 字段 | 类型 | 说明 | |------|------|------| | id | BIGINT (AUTO_INCREMENT) | 主键 | | dd_id | VARCHAR(64) | 订单号(关联 pos_order.dd_id) | | operator_type | TINYINT | 操作人类型:0 系统, 1 平台管理员, 2 商家, 3 骑手, 4 用户 | | operator_id | BIGINT | 操作人ID(对应各角色表的主键) | | operator_name | VARCHAR(128) | 操作人名称(冗余存储,避免查询时 JOIN) | | content | VARCHAR(512) | 操作内容描述(如"平台管理员tongdai修改订单状态: 取餐中 → 配送中") | | create_time | DATETIME | 操作时间 | ```sql -- 2026-05-19 新增订单操作日志表 CREATE TABLE pos_order_log ( id BIGINT AUTO_INCREMENT PRIMARY KEY, dd_id VARCHAR(64) NOT NULL COMMENT '订单号', operator_type TINYINT NOT NULL COMMENT '操作人类型:0系统,1平台管理员,2商家,3骑手,4用户', operator_id BIGINT COMMENT '操作人ID', operator_name VARCHAR(128) COMMENT '操作人名称', content VARCHAR(512) NOT NULL COMMENT '操作内容', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间', INDEX idx_dd_id (dd_id), INDEX idx_operator_id (operator_id), INDEX idx_create_time (create_time) ) COMMENT='订单操作日志'; ``` ### operator_type 枚举 | 值 | 含义 | 说明 | |----|------|------| | 0 | 系统 | 定时任务、自动取消等系统触发 | | 1 | 平台管理员 | 后台管理端操作 | | 2 | 商家 | 商家端操作(接单、出餐、完成等) | | 3 | 骑手 | 骑手端操作(接单、取餐、送达等) | | 4 | 用户 | 用户端操作(下单、取消、确认取餐等) | ## 日志写入时机 在以下操作执行成功后写入日志(由 Service 层统一处理): ### 商家操作(operator_type=2) | 操作 | content 模板 | |------|-------------| | 接单 | `商家{名称}已接单` | | 出餐 | `商家{名称}已出餐` | | 完成(自取/堂食) | `商家{名称}已完成订单` | | 取消订单 | `商家{名称}取消订单` | ### 骑手操作(operator_type=3) | 操作 | content 模板 | |------|-------------| | 接单 | `骑手{名称}接单成功` | | 取餐 | `骑手{名称}已取餐` | | 送达 | `骑手{名称}已送达` | ### 用户操作(operator_type=4) | 操作 | content 模板 | |------|-------------| | 下单 | `用户{名称}创建订单` | | 取消订单 | `用户{名称}取消订单` | | 确认取餐 | `用户{名称}确认取餐` | | 申请退款 | `用户{名称}申请退款` | ### 平台管理员操作(operator_type=1) | 操作 | content 模板 | |------|-------------| | 修改订单状态 | `平台管理员{名称}修改订单状态: {旧状态} → {新状态}` | | 修改配送状态 | `平台管理员{名称}修改配送状态: {旧状态} → {新状态}` | ### 系统操作(operator_type=0) | 操作 | content 模板 | |------|-------------| | 超时自动取消 | `系统自动取消超时未接单订单` | | 超时自动完成 | `系统自动完成超时订单` | | 支付回调 | `系统收到支付成功回调` | ## 平台管理端页面 ### 页面位置 `E:\QtwCode\foodie\foodie-admin-vue\src\views\system\order\log.vue`(新增页面) ### 搜索条件 | 搜索字段 | 类型 | 说明 | |---------|------|------| | 订单号 | 输入框 | 模糊搜索 dd_id | | 操作人ID | 输入框 | 精确匹配 operator_id | | 操作人名称 | 输入框 | 模糊搜索 operator_name | ### 表格列 | 列名 | 字段 | 说明 | |------|------|------| | 主键ID | id | | | 订单号 | ddId | | | 操作人类型 | operatorType | 显示中文名称(系统/平台/商家/骑手/用户) | | 操作人ID | operatorId | | | 操作人名称 | operatorName | | | 操作内容 | content | | | 时间 | createTime | | | 操作 | - | 查看按钮(跳转订单详情或弹窗显示详情) | ### 操作按钮 - **搜索**:按筛选条件查询 - **重置**:清空筛选条件 - **导出**:导出当前筛选结果为 Excel ### 菜单配置 在平台管理端的"订单管理"菜单下新增"订单日志"子菜单。 ## 后端接口 ### 日志列表接口 **接口**:`GET /system/orderLog/list` **权限**:`system:orderLog:list` | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | ddId | String | 否 | 订单号(模糊搜索) | | operatorId | Long | 否 | 操作人ID | | operatorName | String | 否 | 操作人名称(模糊搜索) | | pageNum | int | 是 | 页码,默认1 | | pageSize | int | 是 | 每页条数,默认10 | ### 日志详情接口 **接口**:`GET /system/orderLog/{id}` **权限**:`system:orderLog:query` ### 导出接口 **接口**:`POST /system/orderLog/export` **权限**:`system:orderLog:export` ## 实现范围 ### 本次实现(P1) 1. 新建 `pos_order_log` 表 2. 新建 PosOrderLog 实体类、Mapper、Service、Controller 3. 在所有订单状态变更处插入日志记录 4. 平台管理端新增日志查询页面 ### 后续扩展(P2) - 按时间范围筛选 - 按操作人类型筛选 - 订单详情弹窗中展示该订单的操作日志时间线