|
|
@@ -0,0 +1,182 @@
|
|
|
+-- ============================================================
|
|
|
+-- 酒店订单管理:建表 + 字典 + 菜单资源
|
|
|
+-- ============================================================
|
|
|
+
|
|
|
+-- 订单主表
|
|
|
+CREATE TABLE IF NOT EXISTS `hotel_order` (
|
|
|
+ `id` bigint NOT NULL COMMENT '主键ID(雪花算法)',
|
|
|
+ `tenant_id` bigint NOT NULL DEFAULT 1 COMMENT '租户ID',
|
|
|
+ `order_no` varchar(32) NOT NULL COMMENT '订单号(RM+日期+序号)',
|
|
|
+ `room_no` varchar(32) DEFAULT NULL COMMENT '房间号',
|
|
|
+ `room_id` bigint DEFAULT NULL COMMENT '房间ID',
|
|
|
+ `room_type` varchar(64) DEFAULT NULL COMMENT '房型名称',
|
|
|
+ `contact_name` varchar(64) DEFAULT NULL COMMENT '联系人姓名',
|
|
|
+ `contact_phone` varchar(32) DEFAULT NULL COMMENT '联系电话',
|
|
|
+ `status` int NOT NULL DEFAULT 1 COMMENT '订单状态(1=待接单,2=已接单,3=备餐中,4=已出餐,5=配送中,6=已完成,7=已拒单,8=退单待审核,9=已退单)',
|
|
|
+ `total_amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '订单总金额(元)',
|
|
|
+ `delivery_fee` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '配送费(元)',
|
|
|
+ `pay_method` varchar(32) DEFAULT NULL COMMENT '支付方式',
|
|
|
+ `delivery_time_type` varchar(16) DEFAULT NULL COMMENT '配送时间类型(ASAP=立即送达,CUSTOM=自定义)',
|
|
|
+ `custom_delivery_time` datetime DEFAULT NULL COMMENT '自定义配送时间',
|
|
|
+ `note` varchar(500) DEFAULT NULL COMMENT '订单备注',
|
|
|
+ `accept_time` datetime DEFAULT NULL COMMENT '接单时间',
|
|
|
+ `ready_time` datetime DEFAULT NULL COMMENT '出餐时间',
|
|
|
+ `deliver_time` datetime DEFAULT NULL COMMENT '配送时间',
|
|
|
+ `complete_time` datetime DEFAULT NULL COMMENT '完成时间',
|
|
|
+ `reject_reason` varchar(500) DEFAULT NULL COMMENT '拒单原因',
|
|
|
+ `refund_reason` varchar(500) DEFAULT NULL COMMENT '退单原因',
|
|
|
+ `refund_initiator` varchar(32) DEFAULT NULL COMMENT '退单发起方(CUSTOMER=客户,HOTEL_DESK=前台)',
|
|
|
+ `refund_time` datetime DEFAULT NULL COMMENT '退单时间',
|
|
|
+ `del_flag` bigint NOT NULL DEFAULT 0 COMMENT '删除标记(0=未删除,删除时写入主键ID)',
|
|
|
+ `create_by` bigint DEFAULT NULL COMMENT '创建者',
|
|
|
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
+ `create_dept` bigint DEFAULT NULL COMMENT '创建部门',
|
|
|
+ `update_by` bigint DEFAULT NULL COMMENT '更新者',
|
|
|
+ `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ UNIQUE KEY `uk_order_no` (`order_no`),
|
|
|
+ KEY `idx_tenant_status` (`tenant_id`, `status`),
|
|
|
+ KEY `idx_room_no` (`room_no`),
|
|
|
+ KEY `idx_create_time` (`create_time`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='酒店订单表';
|
|
|
+
|
|
|
+-- 订单明细表
|
|
|
+CREATE TABLE IF NOT EXISTS `hotel_order_item` (
|
|
|
+ `id` bigint NOT NULL COMMENT '主键ID(雪花算法)',
|
|
|
+ `tenant_id` bigint NOT NULL DEFAULT 1 COMMENT '租户ID',
|
|
|
+ `order_id` bigint NOT NULL COMMENT '订单ID',
|
|
|
+ `dish_id` bigint DEFAULT NULL COMMENT '菜品ID',
|
|
|
+ `dish_name` varchar(128) DEFAULT NULL COMMENT '菜品名称(冗余)',
|
|
|
+ `spec_desc` varchar(256) DEFAULT NULL COMMENT '规格描述(冗余)',
|
|
|
+ `additions_desc` varchar(256) DEFAULT NULL COMMENT '加料描述(冗余)',
|
|
|
+ `quantity` int NOT NULL DEFAULT 1 COMMENT '数量',
|
|
|
+ `unit_price` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '单价(元)',
|
|
|
+ `subtotal` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '小计(元)',
|
|
|
+ `note` varchar(256) DEFAULT NULL COMMENT '备注',
|
|
|
+ `del_flag` bigint NOT NULL DEFAULT 0 COMMENT '删除标记(0=未删除,删除时写入主键ID)',
|
|
|
+ `create_by` bigint DEFAULT NULL COMMENT '创建者',
|
|
|
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
+ `create_dept` bigint DEFAULT NULL COMMENT '创建部门',
|
|
|
+ `update_by` bigint DEFAULT NULL COMMENT '更新者',
|
|
|
+ `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ KEY `idx_order_id` (`order_id`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='酒店订单明细表';
|
|
|
+
|
|
|
+-- ============================================================
|
|
|
+-- 字典数据
|
|
|
+-- ============================================================
|
|
|
+
|
|
|
+-- 订单状态字典类型
|
|
|
+INSERT INTO sys_dict_type (tenant_id, dict_name, dict_type, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, '订单状态', 'hotel_order_status', 1, '酒店订单状态', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE dict_type = 'hotel_order_status' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 1, '待接单', '1', 'hotel_order_status', NULL, 'warning', 'N', 1, '待接单', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_order_status' AND dict_value = '1' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 2, '已接单', '2', 'hotel_order_status', NULL, 'primary', 'N', 1, '已接单', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_order_status' AND dict_value = '2' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 3, '备餐中', '3', 'hotel_order_status', NULL, 'primary', 'N', 1, '备餐中', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_order_status' AND dict_value = '3' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 4, '已出餐', '4', 'hotel_order_status', NULL, 'success', 'N', 1, '已出餐', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_order_status' AND dict_value = '4' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 5, '配送中', '5', 'hotel_order_status', NULL, 'primary', 'N', 1, '配送中', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_order_status' AND dict_value = '5' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 6, '已完成', '6', 'hotel_order_status', NULL, 'success', 'N', 1, '已完成', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_order_status' AND dict_value = '6' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 7, '已拒单', '7', 'hotel_order_status', NULL, 'danger', 'N', 1, '已拒单', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_order_status' AND dict_value = '7' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 8, '退单待审核', '8', 'hotel_order_status', NULL, 'warning', 'N', 1, '退单待审核', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_order_status' AND dict_value = '8' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 9, '已退单', '9', 'hotel_order_status', NULL, 'info', 'N', 1, '已退单', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_order_status' AND dict_value = '9' AND tenant_id = 1);
|
|
|
+
|
|
|
+-- 支付方式字典类型
|
|
|
+INSERT INTO sys_dict_type (tenant_id, dict_name, dict_type, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, '支付方式', 'hotel_pay_method', 1, '酒店支付方式', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE dict_type = 'hotel_pay_method' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 1, '模拟支付', 'MOCK', 'hotel_pay_method', NULL, 'default', 'N', 1, '开发阶段模拟支付', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_pay_method' AND dict_value = 'MOCK' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 2, '现金', 'CASH', 'hotel_pay_method', NULL, 'success', 'N', 1, '现金支付', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_pay_method' AND dict_value = 'CASH' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 3, '在线支付', 'ONLINE', 'hotel_pay_method', NULL, 'primary', 'N', 1, '在线支付', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_pay_method' AND dict_value = 'ONLINE' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 4, '挂账', 'CREDIT', 'hotel_pay_method', NULL, 'warning', 'N', 1, '挂账(记入房费)', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_pay_method' AND dict_value = 'CREDIT' AND tenant_id = 1);
|
|
|
+
|
|
|
+-- 配送时间类型字典
|
|
|
+INSERT INTO sys_dict_type (tenant_id, dict_name, dict_type, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, '配送时间类型', 'hotel_delivery_time_type', 1, '酒店配送时间类型', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE dict_type = 'hotel_delivery_time_type' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 1, '立即送达', 'ASAP', 'hotel_delivery_time_type', NULL, 'primary', 'N', 1, '尽快送达', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_delivery_time_type' AND dict_value = 'ASAP' AND tenant_id = 1);
|
|
|
+
|
|
|
+INSERT INTO sys_dict_data (tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, dict_status, remark, create_time, update_time)
|
|
|
+SELECT 1, 2, '自定义时间', 'CUSTOM', 'hotel_delivery_time_type', NULL, 'info', 'N', 1, '指定送达时间', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'hotel_delivery_time_type' AND dict_value = 'CUSTOM' AND tenant_id = 1);
|
|
|
+
|
|
|
+-- ============================================================
|
|
|
+-- 菜单资源(sys_resource)
|
|
|
+-- ============================================================
|
|
|
+
|
|
|
+-- 查找酒店管理目录
|
|
|
+SET @hotel_parent_id = (SELECT id FROM sys_resource WHERE resource_name = '酒店管理' AND tenant_id = 1 AND parent_id = 0 LIMIT 1);
|
|
|
+
|
|
|
+-- 订单管理菜单
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, path, component, is_external, is_public, menu_status, visible, icon, keep_alive, always_show, remark, create_time, update_time)
|
|
|
+SELECT 1, '订单管理', @hotel_parent_id, 2, 20, '/hotel/order', 'hotel/order', 0, 0, 1, 1, 'mdi:order-book-outline', 0, 0, '订单管理菜单', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_resource WHERE resource_name = '订单管理' AND parent_id = @hotel_parent_id);
|
|
|
+
|
|
|
+SET @order_menu_id = (SELECT id FROM sys_resource WHERE resource_name = '订单管理' AND parent_id = @hotel_parent_id LIMIT 1);
|
|
|
+
|
|
|
+-- 订单按钮权限
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '订单查询', @order_menu_id, 3, 1, 'hotel:order:query', 0, 0, 1, 1, '查询订单', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:order:query' AND parent_id = @order_menu_id);
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '订单接单', @order_menu_id, 3, 2, 'hotel:order:accept', 0, 0, 1, 1, '餐厅接单', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:order:accept' AND parent_id = @order_menu_id);
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '订单拒单', @order_menu_id, 3, 3, 'hotel:order:reject', 0, 0, 1, 1, '餐厅拒单', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:order:reject' AND parent_id = @order_menu_id);
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '订单备餐', @order_menu_id, 3, 4, 'hotel:order:prepare', 0, 0, 1, 1, '开始备餐', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:order:prepare' AND parent_id = @order_menu_id);
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '订单配送', @order_menu_id, 3, 5, 'hotel:order:deliver', 0, 0, 1, 1, '开始配送/完成配送', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:order:deliver' AND parent_id = @order_menu_id);
|
|
|
+
|
|
|
+INSERT INTO sys_resource (tenant_id, resource_name, parent_id, resource_type, sort, perms, is_external, is_public, menu_status, visible, remark, create_time, update_time)
|
|
|
+SELECT 1, '退单审核', @order_menu_id, 3, 6, 'hotel:order:refund:approve', 0, 0, 1, 1, '退单审核(同意/驳回)', NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM sys_resource WHERE perms = 'hotel:order:refund:approve' AND parent_id = @order_menu_id);
|