-- =============================================
-- 订单变更记录表（记录每次下单/更新订单的商品变化）
-- 用于展示每次操作都加了什么商品
-- =============================================

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 = ?
-- =============================================
