-- ============================================= -- 订单系统完整表结构(最终版本) -- 包含所有新增表和优化后的表结构 -- ============================================= -- ============================================= -- 一、新增表 -- ============================================= -- 1. 购物车表 CREATE TABLE IF NOT EXISTS `store_cart` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `table_id` int(11) NOT NULL COMMENT '桌号ID', `store_id` int(11) NOT NULL COMMENT '门店ID', `cuisine_id` int(11) NOT NULL COMMENT '菜品ID', `cuisine_name` varchar(200) NOT NULL COMMENT '菜品名称', `cuisine_image` varchar(500) DEFAULT NULL COMMENT '菜品图片', `unit_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '单价', `quantity` int(11) NOT NULL DEFAULT '1' COMMENT '数量', `subtotal_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '小计金额', `add_user_id` int(11) DEFAULT NULL COMMENT '添加该菜品的用户ID', `add_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_table_id` (`table_id`), KEY `idx_store_id` (`store_id`), KEY `idx_cuisine_id` (`cuisine_id`), KEY `idx_add_user_id` (`add_user_id`), KEY `idx_created_time` (`created_time`), KEY `idx_table_delete` (`table_id`, `delete_flag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车表'; -- 2. 优惠券使用记录表 CREATE TABLE IF NOT EXISTS `store_coupon_usage` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `table_id` int(11) NOT NULL COMMENT '桌号ID', `store_id` int(11) NOT NULL COMMENT '门店ID', `order_id` int(11) DEFAULT NULL COMMENT '订单ID', `coupon_id` int(11) NOT NULL COMMENT '优惠券ID', `coupon_name` varchar(200) DEFAULT NULL COMMENT '优惠券名称', `discount_amount` decimal(10,2) DEFAULT '0.00' COMMENT '优惠金额', `usage_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '使用状态(0:已标记使用, 1:已下单, 2:已支付, 3:已取消)', `from_table_id` int(11) DEFAULT NULL COMMENT '换桌前的桌号ID', `migrate_time` datetime 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`), UNIQUE KEY `uk_table_coupon` (`table_id`, `coupon_id`, `delete_flag`), KEY `idx_table_id` (`table_id`), KEY `idx_store_id` (`store_id`), KEY `idx_order_id` (`order_id`), KEY `idx_coupon_id` (`coupon_id`), KEY `idx_usage_status` (`usage_status`), KEY `idx_created_time` (`created_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券使用记录表'; -- 3. 订单锁定记录表 CREATE TABLE IF NOT EXISTS `store_order_lock` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `table_id` int(11) DEFAULT NULL COMMENT '桌号ID', `order_id` int(11) DEFAULT NULL COMMENT '订单ID', `lock_type` tinyint(4) NOT NULL COMMENT '锁定类型(1:下单锁定, 2:结算锁定)', `lock_user_id` int(11) NOT NULL COMMENT '锁定用户ID', `lock_user_phone` varchar(20) DEFAULT NULL COMMENT '锁定用户手机号', `lock_expire_time` datetime NOT NULL COMMENT '锁定过期时间', `lock_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '锁定状态(0:已释放, 1:锁定中)', `release_time` datetime DEFAULT NULL COMMENT '释放时间', `delete_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记, 0:未删除, 1:已删除', `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), KEY `idx_table_id` (`table_id`), KEY `idx_order_id` (`order_id`), KEY `idx_lock_type` (`lock_type`), KEY `idx_lock_status` (`lock_status`), KEY `idx_lock_expire_time` (`lock_expire_time`), KEY `idx_table_lock` (`table_id`, `lock_type`, `lock_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单锁定记录表'; -- ============================================= -- 二、订单表(store_order)- 完整结构 -- ============================================= CREATE TABLE IF NOT EXISTS `store_order` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `order_no` varchar(64) NOT NULL COMMENT '订单号', `store_id` int(11) NOT NULL COMMENT '门店ID', `table_id` int(11) NOT NULL COMMENT '桌号ID', `table_number` varchar(50) DEFAULT NULL COMMENT '桌号', `diner_count` int(11) DEFAULT NULL COMMENT '就餐人数', `pay_user_id` int(11) DEFAULT NULL COMMENT '支付用户ID', `pay_user_phone` varchar(20) DEFAULT NULL COMMENT '支付用户手机号', `contact_phone` varchar(20) DEFAULT NULL COMMENT '联系电话', `tableware_fee` decimal(10,2) DEFAULT '0.00' COMMENT '餐具费', `order_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '订单状态(0:待支付, 1:已支付, 2:已取消, 3:已完成)', `total_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '订单总金额', `coupon_id` int(11) DEFAULT NULL COMMENT '优惠券ID', `current_coupon_id` int(11) DEFAULT NULL COMMENT '当前使用的优惠券ID', `discount_amount` decimal(10,2) DEFAULT '0.00' COMMENT '优惠金额', `pay_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '实付金额', `pay_type` tinyint(4) DEFAULT NULL COMMENT '支付方式(1:微信, 2:支付宝, 3:现金)', `pay_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '支付状态(0:未支付, 1:已支付, 2:已退款)', `pay_time` datetime DEFAULT NULL COMMENT '支付时间', `pay_trade_no` varchar(128) DEFAULT NULL COMMENT '支付交易号', `lock_user_id` int(11) DEFAULT NULL COMMENT '锁定用户ID', `lock_expire_time` datetime 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`), UNIQUE KEY `uk_order_no` (`order_no`), KEY `idx_store_id` (`store_id`), KEY `idx_table_id` (`table_id`), KEY `idx_pay_user_id` (`pay_user_id`), KEY `idx_order_status` (`order_status`), KEY `idx_created_time` (`created_time`), KEY `idx_current_coupon_id` (`current_coupon_id`), KEY `idx_lock_user_id` (`lock_user_id`), KEY `idx_table_status` (`table_id`, `order_status`), KEY `idx_store_status` (`store_id`, `order_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表'; -- ============================================= -- 三、订单明细表(store_order_detail)- 完整结构 -- ============================================= CREATE TABLE IF NOT EXISTS `store_order_detail` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `order_id` int(11) NOT NULL COMMENT '订单ID', `order_no` varchar(64) NOT NULL COMMENT '订单号', `cuisine_id` int(11) NOT NULL COMMENT '菜品ID', `cuisine_name` varchar(200) NOT NULL COMMENT '菜品名称', `cuisine_type` tinyint(4) NOT NULL COMMENT '菜品类型(1:单品, 2:套餐)', `cuisine_image` varchar(500) DEFAULT NULL COMMENT '菜品图片', `unit_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '单价', `quantity` int(11) NOT NULL DEFAULT '1' COMMENT '数量', `subtotal_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '小计金额', `add_user_id` int(11) DEFAULT NULL COMMENT '添加该菜品的用户ID', `add_user_phone` varchar(20) DEFAULT NULL COMMENT '添加该菜品的用户手机号', `is_add_dish` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否加餐(0:初始下单, 1:加餐)', `add_dish_time` datetime 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_cuisine_id` (`cuisine_id`), KEY `idx_add_user_id` (`add_user_id`), KEY `idx_created_time` (`created_time`), KEY `idx_order_cuisine` (`order_id`, `cuisine_id`), KEY `idx_is_add_dish` (`is_add_dish`), KEY `idx_add_dish_time` (`add_dish_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表'; -- ============================================= -- 四、桌号表(store_table)- 新增字段说明 -- ============================================= -- 注意:此表为已存在的表,以下为新增字段和索引 -- 如果表已存在,请使用 ALTER TABLE 语句添加字段 -- 新增字段(如果表已存在,请执行以下SQL): -- ALTER TABLE `store_table` -- ADD COLUMN `current_coupon_id` int(11) DEFAULT NULL COMMENT '当前使用的优惠券ID' AFTER `current_order_id`, -- ADD COLUMN `cart_item_count` int(11) DEFAULT '0' COMMENT '购物车商品数量' AFTER `current_coupon_id`, -- ADD COLUMN `cart_total_amount` decimal(10,2) DEFAULT '0.00' COMMENT '购物车总金额' AFTER `cart_item_count`; -- 就餐人数(首客选桌时填写,就餐中时后续用户共用;结账/清桌后清空): -- ALTER TABLE `store_table` ADD COLUMN `diner_count` int(11) DEFAULT NULL COMMENT '当前就餐人数' AFTER `status`; -- 新增索引(如果表已存在,请执行以下SQL): -- ALTER TABLE `store_table` -- ADD INDEX `idx_current_coupon_id` (`current_coupon_id`), -- ADD INDEX `idx_store_status` (`store_id`, `status`); -- ============================================= -- 表结构说明 -- ============================================= -- 1. store_cart: 购物车表,用于持久化购物车数据 -- 2. store_coupon_usage: 优惠券使用记录表,记录每张桌子的优惠券使用情况 -- 3. store_order_lock: 订单锁定记录表,记录下单和结算时的锁定信息 -- 4. store_order: 订单表,包含所有订单信息(已优化) -- 5. store_order_detail: 订单明细表,包含订单明细信息(已优化) -- 6. store_table: 桌号表,包含桌号信息(需添加新字段)