-- ============================================= -- 订单变更记录表(记录每次下单/更新订单的商品变化) -- 用于展示每次操作都加了什么商品 -- ============================================= CREATE TABLE IF NOT EXISTS `store_order_change_log` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `order_id` int(11) NOT NULL COMMENT '订单ID', `order_no` varchar(64) NOT NULL COMMENT '订单号', `batch_no` varchar(64) NOT NULL COMMENT '批次号(同一时间点的操作使用同一批次号,用于分组展示)', `operation_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '操作类型(1:首次下单, 3:更新订单)', `cuisine_id` int(11) NOT NULL COMMENT '菜品ID', `cuisine_name` varchar(200) NOT NULL COMMENT '菜品名称', `cuisine_type` tinyint(4) DEFAULT NULL COMMENT '菜品类型(1:单品, 2:套餐)', `cuisine_image` varchar(500) DEFAULT NULL COMMENT '菜品图片', `unit_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '单价', `quantity_change` int(11) NOT NULL DEFAULT '0' COMMENT '数量变化(新增的数量,正数表示增加,负数表示减少)', `quantity_before` int(11) DEFAULT NULL COMMENT '变化前数量(用于展示变化前后对比)', `quantity_after` int(11) DEFAULT NULL COMMENT '变化后数量(用于展示变化前后对比)', `amount_change` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '金额变化(新增的金额)', `operation_time` datetime NOT NULL COMMENT '操作时间', `operator_user_id` int(11) DEFAULT NULL COMMENT '操作人ID', `operator_user_phone` varchar(20) DEFAULT NULL COMMENT '操作人手机号', `remark` varchar(500) DEFAULT NULL COMMENT '备注', `delete_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记, 0:未删除, 1:已删除', `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `created_user_id` int(11) DEFAULT NULL COMMENT '创建人ID', `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', `updated_user_id` int(11) DEFAULT NULL COMMENT '修改人ID', PRIMARY KEY (`id`), KEY `idx_order_id` (`order_id`), KEY `idx_order_no` (`order_no`), KEY `idx_batch_no` (`batch_no`), KEY `idx_operation_type` (`operation_type`), KEY `idx_operation_time` (`operation_time`), KEY `idx_cuisine_id` (`cuisine_id`), KEY `idx_operator_user_id` (`operator_user_id`), KEY `idx_order_batch` (`order_id`, `batch_no`), KEY `idx_order_time` (`order_id`, `operation_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单变更记录表(记录每次下单/更新订单的商品变化)'; -- ============================================= -- 表结构说明: -- -- 1. batch_no(批次号): -- - 同一时间点的操作使用同一批次号 -- - 格式建议:ORDER{orderId}_{timestamp} 或 ORDER{orderId}_{yyyyMMddHHmmss} -- - 用于按批次分组,展示每次操作都加了什么商品 -- -- 2. operation_type(操作类型): -- - 1: 首次下单(创建订单时) -- - 3: 更新订单(更新订单时重新下单,只记录新增或数量增加的商品) -- -- 3. quantity_change(数量变化): -- - 正数:新增的数量 -- - 负数:减少的数量(如果支持减少) -- - 0:数量未变化(理论上不应该出现) -- -- 4. quantity_before / quantity_after(变化前后数量): -- - 用于展示变化前后对比 -- - 首次下单时,quantity_before = 0, quantity_after = quantity_change -- - 更新订单时,quantity_before = 原数量, quantity_after = 当前数量 -- -- 5. 使用场景: -- - 查询某个订单的所有变更记录:SELECT * FROM store_order_change_log WHERE order_id = ? ORDER BY operation_time -- - 按批次分组展示:SELECT batch_no, operation_type, operation_time, GROUP_CONCAT(...) FROM store_order_change_log WHERE order_id = ? GROUP BY batch_no ORDER BY operation_time -- - 查询某次操作的所有商品:SELECT * FROM store_order_change_log WHERE batch_no = ? -- =============================================