From bcd30ae5de1fd136d13561a0971d299abab7b5d8 Mon Sep 17 00:00:00 2001 From: YoVinchen Date: Sat, 2 May 2026 17:17:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/flash_sale_db.sql | 864 ++++++++++++++++++ sql/flash_sale_db_2025-07-04_231121.sql | 376 -------- src/main/resources/sql/demo-users.sql | 17 - .../resources/sql/fix-groupbuying-data.sql | 132 --- src/main/resources/sql/schema.sql | 338 ------- src/main/resources/sql/test-data.sql | 126 --- 6 files changed, 864 insertions(+), 989 deletions(-) create mode 100644 sql/flash_sale_db.sql delete mode 100644 sql/flash_sale_db_2025-07-04_231121.sql delete mode 100644 src/main/resources/sql/demo-users.sql delete mode 100644 src/main/resources/sql/fix-groupbuying-data.sql delete mode 100644 src/main/resources/sql/schema.sql delete mode 100644 src/main/resources/sql/test-data.sql diff --git a/sql/flash_sale_db.sql b/sql/flash_sale_db.sql new file mode 100644 index 0000000..d5c845a --- /dev/null +++ b/sql/flash_sale_db.sql @@ -0,0 +1,864 @@ +/* + Navicat Premium Dump SQL + + Source Server : localhost_3306 + Source Server Type : MySQL + Source Server Version : 80036 (8.0.36) + Source Host : localhost:3306 + Source Schema : flash_sale_db + + Target Server Type : MySQL + Target Server Version : 80036 (8.0.36) + File Encoding : 65001 + + Date: 25/03/2026 23:57:40 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for flash_sales +-- ---------------------------- +DROP TABLE IF EXISTS `flash_sales`; +CREATE TABLE `flash_sales` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '秒杀活动ID', + `product_id` bigint NOT NULL COMMENT '商品ID', + `flash_price` decimal(10, 2) NOT NULL COMMENT '秒杀价格', + `flash_stock` int NOT NULL COMMENT '秒杀库存', + `start_time` timestamp NOT NULL COMMENT '开始时间', + `end_time` timestamp NOT NULL COMMENT '结束时间', + `status` tinyint DEFAULT '1' COMMENT '状态:1-未开始,2-进行中,3-已结束', + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_product_id` (`product_id`), + KEY `idx_start_time` (`start_time`), + KEY `idx_end_time` (`end_time`), + KEY `idx_status` (`status`), + KEY `idx_created_at` (`created_at`), + CONSTRAINT `flash_sales_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE +) ENGINE = InnoDB + AUTO_INCREMENT = 13 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci COMMENT ='秒杀活动表'; + +-- ---------------------------- +-- Records of flash_sales +-- ---------------------------- +BEGIN; +INSERT INTO `flash_sales` (`id`, `product_id`, `flash_price`, `flash_stock`, `start_time`, `end_time`, `status`, + `created_at`, `updated_at`) +VALUES (10, 4, 0.01, 10, '2026-03-14 15:55:00', '2026-08-02 15:55:00', 2, '2026-03-14 15:50:34', '2026-03-14 09:55:25'); +INSERT INTO `flash_sales` (`id`, `product_id`, `flash_price`, `flash_stock`, `start_time`, `end_time`, `status`, + `created_at`, `updated_at`) +VALUES (11, 1, 0.01, 9, '2026-03-14 17:12:00', '2027-03-19 17:12:00', 2, '2026-03-14 17:07:14', '2026-03-14 09:47:30'); +INSERT INTO `flash_sales` (`id`, `product_id`, `flash_price`, `flash_stock`, `start_time`, `end_time`, `status`, + `created_at`, `updated_at`) +VALUES (12, 2, 0.01, 1, '2026-03-14 20:48:00', '2027-03-13 20:48:00', 1, '2026-03-14 20:43:59', '2026-03-14 12:43:59'); +COMMIT; + +-- ---------------------------- +-- Table structure for group_buying +-- ---------------------------- +DROP TABLE IF EXISTS `group_buying`; +CREATE TABLE `group_buying` +( + `id` bigint NOT NULL AUTO_INCREMENT, + `created_at` datetime(6) NOT NULL, + `duration_minutes` int NOT NULL, + `end_time` datetime(6) NOT NULL, + `group_price` decimal(10, 2) NOT NULL, + `max_per_user` int NOT NULL, + `product_id` bigint NOT NULL, + `remaining_stock` int NOT NULL, + `required_members` int NOT NULL, + `start_time` datetime(6) NOT NULL, + `status` int NOT NULL, + `total_stock` int NOT NULL, + `updated_at` datetime(6) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `FK59r61d7iyp2vxxkoyjudk343o` (`product_id`), + CONSTRAINT `FK59r61d7iyp2vxxkoyjudk343o` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) +) ENGINE = InnoDB + AUTO_INCREMENT = 4 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci; + +-- ---------------------------- +-- Records of group_buying +-- ---------------------------- +BEGIN; +INSERT INTO `group_buying` (`id`, `created_at`, `duration_minutes`, `end_time`, `group_price`, `max_per_user`, + `product_id`, `remaining_stock`, `required_members`, `start_time`, `status`, `total_stock`, + `updated_at`) +VALUES (1, '2026-03-13 23:32:29.162000', 1440, '2026-07-05 00:00:00.000000', 0.01, 1, 1, 98, 2, + '2026-03-13 23:32:21.000000', 2, 100, '2026-03-13 23:32:32.081000'); +INSERT INTO `group_buying` (`id`, `created_at`, `duration_minutes`, `end_time`, `group_price`, `max_per_user`, + `product_id`, `remaining_stock`, `required_members`, `start_time`, `status`, `total_stock`, + `updated_at`) +VALUES (2, '2026-03-14 15:49:21.162000', 1440, '2026-03-29 15:54:00.000000', 0.01, 1, 5, 95, 2, + '2026-03-14 15:54:00.000000', 2, 100, '2026-03-14 15:49:25.451000'); +INSERT INTO `group_buying` (`id`, `created_at`, `duration_minutes`, `end_time`, `group_price`, `max_per_user`, + `product_id`, `remaining_stock`, `required_members`, `start_time`, `status`, `total_stock`, + `updated_at`) +VALUES (3, '2026-03-16 23:57:24.818000', 1440, '2026-03-18 00:02:00.000000', 0.01, 3, 11, 96, 2, + '2026-03-16 00:02:00.000000', 2, 100, '2026-03-17 00:17:44.859000'); +COMMIT; + +-- ---------------------------- +-- Table structure for group_buying_group +-- ---------------------------- +DROP TABLE IF EXISTS `group_buying_group`; +CREATE TABLE `group_buying_group` +( + `id` bigint NOT NULL AUTO_INCREMENT, + `completed_at` datetime(6) DEFAULT NULL, + `created_at` datetime(6) NOT NULL, + `current_members` int NOT NULL, + `expire_time` datetime(6) NOT NULL, + `group_buying_id` bigint NOT NULL, + `group_no` varchar(64) NOT NULL, + `leader_user_id` bigint NOT NULL, + `required_members` int NOT NULL, + `status` int NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_9khnmu1trewcuahx5k2m0am51` (`group_no`), + KEY `FKqa4p2gmyfgv73i1278fncxyjd` (`group_buying_id`), + KEY `FKmc231ojxg44fsobry8h71p7ts` (`leader_user_id`), + CONSTRAINT `FKmc231ojxg44fsobry8h71p7ts` FOREIGN KEY (`leader_user_id`) REFERENCES `users` (`id`), + CONSTRAINT `FKqa4p2gmyfgv73i1278fncxyjd` FOREIGN KEY (`group_buying_id`) REFERENCES `group_buying` (`id`) +) ENGINE = InnoDB + AUTO_INCREMENT = 8 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci; + +-- ---------------------------- +-- Records of group_buying_group +-- ---------------------------- +BEGIN; +INSERT INTO `group_buying_group` (`id`, `completed_at`, `created_at`, `current_members`, `expire_time`, + `group_buying_id`, `group_no`, `leader_user_id`, `required_members`, `status`) +VALUES (1, '2026-03-16 21:06:50.390000', '2026-03-14 15:49:34.380000', 1, '2026-03-15 15:49:34.379000', 1, + 'GB1773474574379662', 3, 2, 3); +INSERT INTO `group_buying_group` (`id`, `completed_at`, `created_at`, `current_members`, `expire_time`, + `group_buying_id`, `group_no`, `leader_user_id`, `required_members`, `status`) +VALUES (2, '2026-03-16 16:01:20.000000', '2026-03-16 21:09:52.417000', 2, '2026-03-17 21:09:52.413000', 1, + 'GB1773666592413340', 3, 2, 2); +INSERT INTO `group_buying_group` (`id`, `completed_at`, `created_at`, `current_members`, `expire_time`, + `group_buying_id`, `group_no`, `leader_user_id`, `required_members`, `status`) +VALUES (3, '2026-03-16 16:01:20.000000', '2026-03-16 23:36:48.080000', 2, '2026-03-17 23:36:48.076000', 2, + 'GB1773675408076559', 3, 2, 2); +INSERT INTO `group_buying_group` (`id`, `completed_at`, `created_at`, `current_members`, `expire_time`, + `group_buying_id`, `group_no`, `leader_user_id`, `required_members`, `status`) +VALUES (4, '2026-03-16 16:01:20.000000', '2026-03-16 23:44:34.651000', 2, '2026-03-17 23:44:34.647000', 2, + 'GB1773675874647308', 3, 2, 2); +INSERT INTO `group_buying_group` (`id`, `completed_at`, `created_at`, `current_members`, `expire_time`, + `group_buying_id`, `group_no`, `leader_user_id`, `required_members`, `status`) +VALUES (5, NULL, '2026-03-16 23:47:02.225000', 1, '2026-03-17 23:47:02.224000', 2, 'GB1773676022224046', 15, 2, 1); +INSERT INTO `group_buying_group` (`id`, `completed_at`, `created_at`, `current_members`, `expire_time`, + `group_buying_id`, `group_no`, `leader_user_id`, `required_members`, `status`) +VALUES (6, NULL, '2026-03-17 00:06:39.985000', 2, '2026-03-18 00:06:39.983000', 3, 'GB1773677199982359', 3, 2, 1); +INSERT INTO `group_buying_group` (`id`, `completed_at`, `created_at`, `current_members`, `expire_time`, + `group_buying_id`, `group_no`, `leader_user_id`, `required_members`, `status`) +VALUES (7, '2026-03-17 00:18:19.615000', '2026-03-17 00:17:54.946000', 2, '2026-03-18 00:17:54.941000', 3, + 'GB1773677874941488', 3, 2, 2); +COMMIT; + +-- ---------------------------- +-- Table structure for group_buying_member +-- ---------------------------- +DROP TABLE IF EXISTS `group_buying_member`; +CREATE TABLE `group_buying_member` +( + `id` bigint NOT NULL AUTO_INCREMENT, + `group_id` bigint NOT NULL, + `joined_at` datetime(6) NOT NULL, + `order_id` bigint DEFAULT NULL, + `status` int NOT NULL, + `user_id` bigint NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_group_user` (`group_id`, `user_id`), + KEY `FK2k1d07r2qich4sqquxisdkf7e` (`user_id`), + CONSTRAINT `FK2k1d07r2qich4sqquxisdkf7e` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), + CONSTRAINT `FKplwuuxax228wqw6nr6pnmmllq` FOREIGN KEY (`group_id`) REFERENCES `group_buying_group` (`id`) +) ENGINE = InnoDB + AUTO_INCREMENT = 13 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci; + +-- ---------------------------- +-- Records of group_buying_member +-- ---------------------------- +BEGIN; +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (1, 1, '2026-03-14 15:49:34.432000', 21, 3, 3); +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (2, 2, '2026-03-16 21:09:52.464000', 23, 2, 3); +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (3, 2, '2026-03-16 23:09:11.629000', 25, 2, 15); +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (4, 3, '2026-03-16 23:36:48.130000', 26, 2, 3); +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (5, 3, '2026-03-16 23:37:04.179000', 27, 2, 15); +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (6, 4, '2026-03-16 23:44:34.711000', 28, 2, 3); +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (7, 4, '2026-03-16 23:45:05.179000', 29, 2, 15); +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (8, 5, '2026-03-16 23:47:02.250000', 30, 1, 15); +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (9, 6, '2026-03-17 00:06:40.074000', 31, 1, 3); +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (10, 6, '2026-03-17 00:06:47.015000', 32, 1, 15); +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (11, 7, '2026-03-17 00:17:55.040000', 33, 2, 3); +INSERT INTO `group_buying_member` (`id`, `group_id`, `joined_at`, `order_id`, `status`, `user_id`) +VALUES (12, 7, '2026-03-17 00:18:19.601000', 34, 2, 15); +COMMIT; + +-- ---------------------------- +-- Table structure for notifications +-- ---------------------------- +DROP TABLE IF EXISTS `notifications`; +CREATE TABLE `notifications` +( + `id` bigint NOT NULL AUTO_INCREMENT, + `created_at` datetime(6) NOT NULL, + `link` varchar(255) DEFAULT NULL, + `message` text NOT NULL, + `is_read` bit(1) NOT NULL, + `title` varchar(255) NOT NULL, + `type` varchar(32) NOT NULL, + `user_id` bigint NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_notification_user_read` (`user_id`, `is_read`), + KEY `idx_notification_user_created` (`user_id`, `created_at`) +) ENGINE = InnoDB + AUTO_INCREMENT = 15 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci; + +-- ---------------------------- +-- Records of notifications +-- ---------------------------- +BEGIN; +INSERT INTO `notifications` (`id`, `created_at`, `link`, `message`, `is_read`, `title`, `type`, `user_id`) +VALUES (4, '2026-03-16 23:07:03.974000', '/order/24', '您的订单 #24 已创建,请尽快完成支付', b'0', '订单创建成功', + 'order', 3); +INSERT INTO `notifications` (`id`, `created_at`, `link`, `message`, `is_read`, `title`, `type`, `user_id`) +VALUES (5, '2026-03-16 23:07:12.309000', '/order/24', '您的订单 #24 已支付成功,等待商家发货', b'0', '订单支付成功', + 'order', 3); +INSERT INTO `notifications` (`id`, `created_at`, `link`, `message`, `is_read`, `title`, `type`, `user_id`) +VALUES (6, '2026-03-16 23:09:32.499000', '/order/25', '您的订单 #25 已支付成功,等待商家发货', b'0', '订单支付成功', + 'order', 15); +INSERT INTO `notifications` (`id`, `created_at`, `link`, `message`, `is_read`, `title`, `type`, `user_id`) +VALUES (7, '2026-03-16 23:10:35.244000', '/order/23', '您的订单 #23 退货申请已提交,请等待审核', b'0', '退货申请已提交', + 'return', 3); +INSERT INTO `notifications` (`id`, `created_at`, `link`, `message`, `is_read`, `title`, `type`, `user_id`) +VALUES (8, '2026-03-16 23:11:26.084000', '/order/23', '您的订单 #23 退货申请已通过,请尽快寄回商品', b'0', + '退货申请已通过', 'return', 3); +INSERT INTO `notifications` (`id`, `created_at`, `link`, `message`, `is_read`, `title`, `type`, `user_id`) +VALUES (9, '2026-03-16 23:37:56.413000', '/order/26', '您的订单 #26 已支付成功,等待商家发货', b'0', '订单支付成功', + 'order', 3); +INSERT INTO `notifications` (`id`, `created_at`, `link`, `message`, `is_read`, `title`, `type`, `user_id`) +VALUES (10, '2026-03-16 23:38:20.405000', '/order/27', '您的订单 #27 已支付成功,等待商家发货', b'0', '订单支付成功', + 'order', 15); +INSERT INTO `notifications` (`id`, `created_at`, `link`, `message`, `is_read`, `title`, `type`, `user_id`) +VALUES (11, '2026-03-16 23:46:54.529000', '/order/29', '您的订单 #29 已支付成功,等待商家发货', b'0', '订单支付成功', + 'order', 15); +INSERT INTO `notifications` (`id`, `created_at`, `link`, `message`, `is_read`, `title`, `type`, `user_id`) +VALUES (12, '2026-03-16 23:47:12.529000', '/order/30', '您的订单 #30 已支付成功,等待商家发货', b'0', '订单支付成功', + 'order', 15); +INSERT INTO `notifications` (`id`, `created_at`, `link`, `message`, `is_read`, `title`, `type`, `user_id`) +VALUES (13, '2026-03-17 00:09:01.296000', '/order/32', '您的订单 #32 已支付成功,等待商家发货', b'0', '订单支付成功', + 'order', 15); +INSERT INTO `notifications` (`id`, `created_at`, `link`, `message`, `is_read`, `title`, `type`, `user_id`) +VALUES (14, '2026-03-17 00:09:21.874000', '/order/31', '您的订单 #31 已支付成功,等待商家发货', b'0', '订单支付成功', + 'order', 3); +COMMIT; + +-- ---------------------------- +-- Table structure for order_items +-- ---------------------------- +DROP TABLE IF EXISTS `order_items`; +CREATE TABLE `order_items` +( + `id` bigint NOT NULL AUTO_INCREMENT, + `created_at` datetime(6) NOT NULL, + `order_id` bigint NOT NULL, + `price` decimal(10, 2) NOT NULL, + `product_id` bigint NOT NULL, + `product_image_url` varchar(500) DEFAULT NULL, + `product_name` varchar(200) NOT NULL, + `quantity` int NOT NULL, + `subtotal` decimal(10, 2) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE = InnoDB + AUTO_INCREMENT = 14 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci; + +-- ---------------------------- +-- Records of order_items +-- ---------------------------- +BEGIN; +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (1, '2026-03-16 23:07:03.951000', 24, 168.00, 14, + '/uploads/products/2026/03/14/2e380b9213824856b7d00e0d2b54b436.png', '五常大米 10kg', 2, 336.00); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (2, '2026-03-16 23:36:48.126000', 26, 0.01, 5, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 'Apple Watch Series 9', 1, 0.01); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (3, '2026-03-16 23:37:04.171000', 27, 0.01, 5, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 'Apple Watch Series 9', 1, 0.01); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (4, '2026-03-16 23:44:34.708000', 28, 0.01, 5, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 'Apple Watch Series 9', 1, 0.01); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (5, '2026-03-16 23:45:05.177000', 29, 0.01, 5, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 'Apple Watch Series 9', 1, 0.01); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (6, '2026-03-16 23:47:02.241000', 30, 0.01, 5, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 'Apple Watch Series 9', 1, 0.01); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (7, '2026-03-14 15:49:34.000000', 21, 0.01, 1, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 'iPhone 15 Pro Max', 1, 0.01); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (8, '2026-03-16 21:09:52.000000', 23, 0.01, 1, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 'iPhone 15 Pro Max', 1, 0.01); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (9, '2026-03-16 23:09:12.000000', 25, 0.01, 1, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 'iPhone 15 Pro Max', 1, 0.01); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (10, '2026-03-17 00:06:40.069000', 31, 0.01, 11, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', '深入理解Java虚拟机', 1, 0.01); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (11, '2026-03-17 00:06:47.011000', 32, 0.01, 11, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', '深入理解Java虚拟机', 1, 0.01); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (12, '2026-03-17 00:17:55.030000', 33, 0.01, 11, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', '深入理解Java虚拟机', 1, 0.01); +INSERT INTO `order_items` (`id`, `created_at`, `order_id`, `price`, `product_id`, `product_image_url`, `product_name`, + `quantity`, `subtotal`) +VALUES (13, '2026-03-17 00:18:19.597000', 34, 0.01, 11, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', '深入理解Java虚拟机', 1, 0.01); +COMMIT; + +-- ---------------------------- +-- Table structure for order_returns +-- ---------------------------- +DROP TABLE IF EXISTS `order_returns`; +CREATE TABLE `order_returns` +( + `id` bigint NOT NULL AUTO_INCREMENT, + `admin_remark` varchar(500) DEFAULT NULL, + `cancelled_at` datetime(6) DEFAULT NULL, + `completed_at` datetime(6) DEFAULT NULL, + `created_at` datetime(6) NOT NULL, + `description` text, + `images` varchar(2000) DEFAULT NULL, + `order_id` bigint NOT NULL, + `reason` varchar(500) NOT NULL, + `refund_amount` decimal(10, 2) NOT NULL, + `reject_reason` varchar(500) DEFAULT NULL, + `return_no` varchar(64) NOT NULL, + `return_tracking` varchar(100) DEFAULT NULL, + `reviewed_at` datetime(6) DEFAULT NULL, + `shipped_at` datetime(6) DEFAULT NULL, + `status` int NOT NULL, + `updated_at` datetime(6) DEFAULT NULL, + `user_id` bigint NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_elu6c1jupuay4bgn9gffdsbcx` (`return_no`) +) ENGINE = InnoDB + AUTO_INCREMENT = 2 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci; + +-- ---------------------------- +-- Records of order_returns +-- ---------------------------- +BEGIN; +INSERT INTO `order_returns` (`id`, `admin_remark`, `cancelled_at`, `completed_at`, `created_at`, `description`, + `images`, `order_id`, `reason`, `refund_amount`, `reject_reason`, `return_no`, + `return_tracking`, `reviewed_at`, `shipped_at`, `status`, `updated_at`, `user_id`) +VALUES (1, NULL, NULL, NULL, '2026-03-16 23:10:35.208000', '1', NULL, 23, '商品与描述不符', 0.01, NULL, + 'RT1773673835208', NULL, '2026-03-16 23:11:26.080000', NULL, 2, '2026-03-16 23:11:26.096000', 3); +COMMIT; + +-- ---------------------------- +-- Table structure for orders +-- ---------------------------- +DROP TABLE IF EXISTS `orders`; +CREATE TABLE `orders` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单ID', + `user_id` bigint NOT NULL COMMENT '用户ID', + `product_id` bigint NOT NULL COMMENT '商品ID', + `quantity` int NOT NULL DEFAULT '1' COMMENT '购买数量', + `total_price` decimal(10, 2) NOT NULL COMMENT '总价', + `status` tinyint DEFAULT '1' COMMENT '状态:1-待支付,2-已支付,3-已发货,4-已完成,5-已取消', + `order_type` tinyint DEFAULT '1' COMMENT '订单类型:1-普通订单,2-秒杀订单', + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `completed_at` datetime(6) DEFAULT NULL, + `group_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `order_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, + `paid_at` datetime(6) DEFAULT NULL, + `payment_method` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `receiver_address` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `receiver_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `receiver_phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `shipped_at` datetime(6) DEFAULT NULL, + `flash_sale_id` bigint DEFAULT NULL, + `group_buying_group_id` bigint DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_user_id` (`user_id`), + KEY `idx_product_id` (`product_id`), + KEY `idx_status` (`status`), + KEY `idx_order_type` (`order_type`), + KEY `idx_created_at` (`created_at`), + KEY `idx_user_product` (`user_id`, `product_id`), + CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, + CONSTRAINT `orders_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE +) ENGINE = InnoDB + AUTO_INCREMENT = 35 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci COMMENT ='订单表'; + +-- ---------------------------- +-- Records of orders +-- ---------------------------- +BEGIN; +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (18, 3, 1, 1, 7999.00, 3, 2, '2025-07-04 22:02:40', '2026-03-14 16:24:42', NULL, NULL, '', NULL, NULL, NULL, + NULL, NULL, '商家发货', '2026-03-14 16:24:42.039000', NULL, NULL); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (19, 3, 14, 1, 168.00, 4, 1, '2025-07-04 22:03:38', '2026-03-16 23:10:49', '2026-03-16 23:10:49.075000', NULL, + '', NULL, NULL, NULL, NULL, NULL, '用户确认收货', '2026-03-14 16:24:50.513000', NULL, NULL); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (20, 3, 14, 2, 336.00, 4, 1, '2025-07-30 09:07:22', '2026-03-16 23:10:45', '2026-03-16 23:10:45.025000', NULL, + '', '2026-03-13 23:33:50.367000', 'ONLINE', NULL, NULL, NULL, '用户确认收货', '2026-03-14 16:24:48.353000', + NULL, NULL); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (21, 3, 1, 1, 0.01, 4, 3, '2026-03-14 15:49:34', '2026-03-14 16:25:00', '2026-03-14 16:25:00.018000', NULL, + 'GB1773474574422850', '2026-03-14 15:54:07.163000', 'ONLINE', NULL, NULL, NULL, '用户确认收货', + '2026-03-14 16:24:37.672000', NULL, 1); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (22, 3, 1, 1, 0.01, 4, 2, '2026-03-14 17:47:30', '2026-03-16 23:10:40', '2026-03-16 23:10:39.916000', NULL, + 'FS1773481650367298', '2026-03-14 17:47:37.837000', 'ONLINE', NULL, NULL, NULL, '用户确认收货', + '2026-03-16 23:07:25.085000', 11, NULL); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (23, 3, 1, 1, 0.01, 6, 3, '2026-03-16 21:09:52', '2026-03-16 23:10:35', '2026-03-16 23:06:38.357000', NULL, + 'GB1773666592456790', '2026-03-16 21:12:56.248000', 'ONLINE', NULL, NULL, NULL, '用户申请退货', + '2026-03-16 21:26:18.999000', NULL, 2); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (24, 3, 14, 2, 336.00, 4, 1, '2026-03-16 23:07:04', '2026-03-16 23:10:17', '2026-03-16 23:10:17.251000', NULL, + 'FS1773673623934239', '2026-03-16 23:07:12.285000', 'ONLINE', NULL, NULL, NULL, '用户确认收货', + '2026-03-16 23:07:22.791000', NULL, NULL); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (25, 15, 1, 1, 0.01, 4, 3, '2026-03-16 23:09:12', '2026-03-16 23:14:48', '2026-03-16 23:14:48.467000', NULL, + 'GB1773673751625355', '2026-03-16 23:09:32.485000', 'ONLINE', NULL, NULL, NULL, '用户确认收货', + '2026-03-16 23:11:18.685000', NULL, 2); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (26, 3, 5, 1, 0.01, 2, 3, '2026-03-16 23:36:48', '2026-03-16 23:37:56', NULL, NULL, 'GB1773675408118011', + '2026-03-16 23:37:56.394000', 'ONLINE', NULL, NULL, NULL, '模拟支付成功 - ONLINE', NULL, NULL, 3); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (27, 15, 5, 1, 0.01, 2, 3, '2026-03-16 23:37:04', '2026-03-16 23:38:20', NULL, NULL, 'GB1773675424159373', + '2026-03-16 23:38:20.390000', 'ONLINE', NULL, NULL, NULL, '模拟支付成功 - ONLINE', NULL, NULL, 3); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (28, 3, 5, 1, 0.01, 1, 3, '2026-03-16 23:44:35', '2026-03-16 23:44:35', NULL, NULL, 'GB1773675874699140', NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, 4); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (29, 15, 5, 1, 0.01, 2, 3, '2026-03-16 23:45:05', '2026-03-16 23:46:55', NULL, NULL, 'GB1773675905174079', + '2026-03-16 23:46:54.506000', 'ONLINE', NULL, NULL, NULL, '模拟支付成功 - ONLINE', NULL, NULL, 4); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (30, 15, 5, 1, 0.01, 2, 3, '2026-03-16 23:47:02', '2026-03-16 23:47:13', NULL, NULL, 'GB1773676022236796', + '2026-03-16 23:47:12.518000', 'ONLINE', NULL, NULL, NULL, '模拟支付成功 - ONLINE', NULL, NULL, 5); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (31, 3, 11, 1, 0.01, 2, 3, '2026-03-17 00:06:40', '2026-03-17 00:09:22', NULL, NULL, 'GB1773677200059352', + '2026-03-17 00:09:21.854000', 'ONLINE', NULL, NULL, NULL, '模拟支付成功 - ONLINE', NULL, NULL, 6); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (32, 15, 11, 1, 0.01, 2, 3, '2026-03-17 00:06:47', '2026-03-17 00:09:01', NULL, NULL, 'GB1773677207007351', + '2026-03-17 00:09:01.270000', 'ONLINE', NULL, NULL, NULL, '模拟支付成功 - ONLINE', NULL, NULL, 6); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (33, 3, 11, 1, 0.01, 1, 3, '2026-03-17 00:17:55', '2026-03-17 00:17:55', NULL, NULL, 'GB1773677875020045', NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, 7); +INSERT INTO `orders` (`id`, `user_id`, `product_id`, `quantity`, `total_price`, `status`, `order_type`, `created_at`, + `updated_at`, `completed_at`, `group_no`, `order_no`, `paid_at`, `payment_method`, + `receiver_address`, `receiver_name`, `receiver_phone`, `remark`, `shipped_at`, `flash_sale_id`, + `group_buying_group_id`) +VALUES (34, 15, 11, 1, 0.01, 1, 3, '2026-03-17 00:18:20', '2026-03-17 00:18:20', NULL, NULL, 'GB1773677899592443', NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, 7); +COMMIT; + +-- ---------------------------- +-- Table structure for product_reviews +-- ---------------------------- +DROP TABLE IF EXISTS `product_reviews`; +CREATE TABLE `product_reviews` +( + `id` bigint NOT NULL AUTO_INCREMENT, + `admin_reply` text, + `content` text NOT NULL, + `created_at` datetime(6) NOT NULL, + `order_id` bigint NOT NULL, + `product_id` bigint NOT NULL, + `rating` int NOT NULL, + `replied_at` datetime(6) DEFAULT NULL, + `status` int NOT NULL, + `updated_at` datetime(6) DEFAULT NULL, + `user_id` bigint NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_review_order_user_product` (`order_id`, `user_id`, `product_id`) +) ENGINE = InnoDB + AUTO_INCREMENT = 2 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci; + +-- ---------------------------- +-- Records of product_reviews +-- ---------------------------- +BEGIN; +INSERT INTO `product_reviews` (`id`, `admin_reply`, `content`, `created_at`, `order_id`, `product_id`, `rating`, + `replied_at`, `status`, `updated_at`, `user_id`) +VALUES (1, NULL, '13245', '2026-03-14 16:25:09.918000', 21, 1, 5, NULL, 1, '2026-03-16 21:26:27.855000', 3); +COMMIT; + +-- ---------------------------- +-- Table structure for products +-- ---------------------------- +DROP TABLE IF EXISTS `products`; +CREATE TABLE `products` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '商品ID', + `name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品名称', + `description` text COLLATE utf8mb4_unicode_ci COMMENT '商品描述', + `price` decimal(10, 2) NOT NULL COMMENT '商品价格', + `stock` int NOT NULL DEFAULT '0' COMMENT '库存数量', + `image_url` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商品图片URL', + `status` tinyint DEFAULT '1' COMMENT '状态:1-上架,0-下架', + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `category` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_name` (`name`), + KEY `idx_price` (`price`), + KEY `idx_stock` (`stock`), + KEY `idx_status` (`status`), + KEY `idx_created_at` (`created_at`) +) ENGINE = InnoDB + AUTO_INCREMENT = 18 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci COMMENT ='商品表'; + +-- ---------------------------- +-- Records of products +-- ---------------------------- +BEGIN; +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (1, 'iPhone 15 Pro Max', '苹果最新旗舰手机,A17 Pro芯片,钛金属设计', 9999.00, 100, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 1, '2026-03-14 17:51:14', + '2026-03-14 17:51:14', NULL); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (2, 'MacBook Pro 16英寸', 'M3 Max芯片,36GB内存,1TB存储', 25999.00, 50, + '/uploads/products/2026/03/14/4943b3f7cd1048a6ba008a5f163d9cd7.webp', 1, '2026-03-14 17:51:14', + '2026-03-14 17:51:14', '默认分类'); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (3, 'iPad Air', '10.9英寸液晶显示屏,M1芯片', 4399.00, 80, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 1, '2026-03-14 17:51:14', + '2026-03-14 17:51:14', NULL); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (4, 'AirPods Pro 2', '主动降噪无线耳机,空间音频', 1899.00, 200, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 1, '2026-03-14 17:51:14', + '2026-03-14 17:51:14', NULL); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (5, 'Apple Watch Series 9', '健康监测,GPS+蜂窝网络', 3199.00, 150, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 1, '2026-03-14 17:51:14', + '2026-03-14 17:51:14', NULL); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (6, '小米电视 65英寸', '4K超高清,120Hz刷新率', 2999.00, 60, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 1, '2026-03-14 17:51:14', + '2026-03-14 17:51:14', NULL); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (7, '戴森吸尘器 V15', '激光显微尘,强劲吸力', 4690.00, 40, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 1, '2026-03-14 17:51:14', + '2026-03-14 17:51:14', NULL); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (8, '美的空调 1.5匹', '变频节能,静音运行', 2599.00, 80, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 1, '2026-03-14 17:51:14', + '2026-03-14 17:51:14', NULL); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (9, 'Nike Air Jordan 1', '经典篮球鞋,限量版配色1', 1299.00, 119, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 1, '2026-03-14 17:51:14', + '2026-03-14 17:51:14', NULL); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (10, 'Adidas Ultra Boost', '缓震跑鞋,Boost中底', 1599.00, 100, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 1, '2026-03-14 17:51:14', + '2026-03-14 17:51:14', NULL); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (11, '深入理解Java虚拟机', 'JVM原理与实践,第3版', 89.00, 500, + '/uploads/products/2025/07/29/019006fd420548d0b306982931329205.jpg', 1, '2026-03-14 17:51:14', + '2026-03-14 17:51:14', NULL); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (14, '五常大米 10kg', '东北优质大米,香甜可口1111', 168.00, 192, + '/uploads/products/2026/03/14/2e380b9213824856b7d00e0d2b54b436.png', 1, '2026-03-14 17:51:14', + '2026-03-16 15:07:03', '默认分类'); +INSERT INTO `products` (`id`, `name`, `description`, `price`, `stock`, `image_url`, `status`, `created_at`, + `updated_at`, `category`) +VALUES (17, '123', '', 0.01, 10, '', 1, '2026-03-14 17:51:14', '2026-03-14 17:51:14', '123'); +COMMIT; + +-- ---------------------------- +-- Table structure for user_addresses +-- ---------------------------- +DROP TABLE IF EXISTS `user_addresses`; +CREATE TABLE `user_addresses` +( + `id` bigint NOT NULL AUTO_INCREMENT, + `address` varchar(255) NOT NULL, + `city` varchar(50) DEFAULT NULL, + `created_at` datetime(6) NOT NULL, + `district` varchar(50) DEFAULT NULL, + `is_default` bit(1) NOT NULL, + `name` varchar(100) NOT NULL, + `phone` varchar(20) NOT NULL, + `province` varchar(50) DEFAULT NULL, + `updated_at` datetime(6) DEFAULT NULL, + `user_id` bigint NOT NULL, + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci; + +-- ---------------------------- +-- Records of user_addresses +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for user_favorites +-- ---------------------------- +DROP TABLE IF EXISTS `user_favorites`; +CREATE TABLE `user_favorites` +( + `id` bigint NOT NULL AUTO_INCREMENT, + `created_at` datetime(6) NOT NULL, + `product_id` bigint NOT NULL, + `user_id` bigint NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_favorite_user_product` (`user_id`, `product_id`) +) ENGINE = InnoDB + AUTO_INCREMENT = 3 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci; + +-- ---------------------------- +-- Records of user_favorites +-- ---------------------------- +BEGIN; +INSERT INTO `user_favorites` (`id`, `created_at`, `product_id`, `user_id`) +VALUES (2, '2026-03-16 21:26:46.264000', 14, 3); +COMMIT; + +-- ---------------------------- +-- Table structure for users +-- ---------------------------- +DROP TABLE IF EXISTS `users`; +CREATE TABLE `users` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名', + `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码(加密)', + `email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱', + `phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号', + `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '用户状态:1-正常,0-禁用', + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `last_login` datetime DEFAULT NULL COMMENT '最后登录时间', + `avatar` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `role` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `username` (`username`), + KEY `idx_username` (`username`), + KEY `idx_email` (`email`), + KEY `idx_phone` (`phone`), + KEY `idx_status` (`status`), + KEY `idx_created_at` (`created_at`), + KEY `idx_users_status` (`status`), + KEY `idx_users_last_login` (`last_login`), + KEY `idx_users_created_at` (`created_at`) +) ENGINE = InnoDB + AUTO_INCREMENT = 16 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci COMMENT ='用户表'; + +-- ---------------------------- +-- Records of users +-- ---------------------------- +BEGIN; +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (1, 'demo1', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', 'admin_updated@example.com', + '13888888888', 1, '2026-03-14 17:51:14', '2026-03-14 17:51:14', NULL, NULL, ''); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (2, 'demo2', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', 'demo2@example.com', '13800138002', + 1, '2026-03-14 17:51:14', '2026-03-14 17:51:14', NULL, NULL, ''); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (3, 'admin', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', 'admin@example.com', '13800138000', + 1, '2026-03-14 17:51:14', '2026-03-17 00:17:36', '2026-03-17 00:17:36', NULL, ''); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (4, 'testuser1', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', 'test1@example.com', + '13800138003', 1, '2026-03-14 17:51:14', '2026-03-14 17:51:14', NULL, NULL, ''); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (5, 'testuser2', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', 'test2@example.com', + '13800138004', 1, '2026-03-14 17:51:14', '2026-03-14 17:51:14', NULL, NULL, ''); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (6, 'testuser3', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', 'test3@example.com', + '13800138005', 1, '2026-03-14 17:51:14', '2026-03-14 17:51:14', NULL, NULL, ''); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (7, 'testuser4', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', 'test4@example.com', + '13800138006', 1, '2026-03-14 17:51:14', '2026-03-14 17:51:14', NULL, NULL, ''); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (8, 'testuser5', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', 'test5@example.com', + '13800138007', 1, '2026-03-14 17:51:14', '2026-03-14 17:51:14', NULL, NULL, ''); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (11, 'student', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', '1231231@gmail.com', + '19889899898', 1, '2026-03-14 17:51:14', '2026-03-14 17:51:14', NULL, NULL, ''); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (12, 'student1', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', 'gz1@gmail.com', '19566111010', + 1, '2026-03-14 17:51:14', '2026-03-14 17:51:14', NULL, NULL, ''); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (13, '123123', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', NULL, NULL, 1, + '2026-03-14 17:51:14', '2026-03-14 17:51:14', NULL, NULL, ''); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (14, '123', '$2a$10$3V4zVguC/6eJjkuh78JqeufsNnjtHado/xUpGzrdLylF/TjH1ZoQ6', '123@qq.com', '', 1, + '2026-03-14 17:51:14', '2026-03-14 17:51:14', NULL, '', 'USER'); +INSERT INTO `users` (`id`, `username`, `password`, `email`, `phone`, `status`, `created_at`, `updated_at`, `last_login`, + `avatar`, `role`) +VALUES (15, '123456', '$2a$10$a7YnUMYMmgWt1mdf6WmyEux/4YPT05rutsab2KLajgGYf60aZfbUW', '1232@qq.com', '13223322332', 1, + '2026-03-16 23:08:57', '2026-03-17 00:18:13', '2026-03-17 00:18:13', '', 'USER'); +COMMIT; + +-- ---------------------------- +-- View structure for active_flash_sales +-- ---------------------------- +DROP VIEW IF EXISTS `active_flash_sales`; +CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `active_flash_sales` AS +select `fs`.`id` AS `id`, + `fs`.`product_id` AS `product_id`, + `p`.`name` AS `product_name`, + `p`.`price` AS `original_price`, + `fs`.`flash_price` AS `flash_price`, + `fs`.`flash_stock` AS `flash_stock`, + `fs`.`start_time` AS `start_time`, + `fs`.`end_time` AS `end_time`, + `fs`.`status` AS `status`, + `p`.`image_url` AS `image_url` +from (`flash_sales` `fs` join `products` `p` on ((`fs`.`product_id` = `p`.`id`))) +where ((`fs`.`status` = 2) and (`fs`.`start_time` <= now()) and (`fs`.`end_time` > now()) and (`p`.`status` = 1)); + +-- ---------------------------- +-- View structure for order_statistics +-- ---------------------------- +DROP VIEW IF EXISTS `order_statistics`; +CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `order_statistics` AS +select cast(`orders`.`created_at` as date) AS `order_date`, + count(0) AS `total_orders`, + sum((case when (`orders`.`status` = 1) then 1 else 0 end)) AS `pending_orders`, + sum((case when (`orders`.`status` = 2) then 1 else 0 end)) AS `paid_orders`, + sum((case when (`orders`.`status` = 4) then 1 else 0 end)) AS `completed_orders`, + sum((case when (`orders`.`order_type` = 2) then 1 else 0 end)) AS `flash_sale_orders`, + sum(`orders`.`total_price`) AS `total_amount` +from `orders` +group by cast(`orders`.`created_at` as date) +order by `order_date` desc; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/sql/flash_sale_db_2025-07-04_231121.sql b/sql/flash_sale_db_2025-07-04_231121.sql deleted file mode 100644 index c2496a4..0000000 --- a/sql/flash_sale_db_2025-07-04_231121.sql +++ /dev/null @@ -1,376 +0,0 @@ --- MySQL dump 10.13 Distrib 5.7.24, for osx11.1 (x86_64) --- --- Host: 127.0.0.1 Database: flash_sale_db --- ------------------------------------------------------ --- Server version 8.0.36 - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT = @@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS = @@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION = @@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; -/*!40103 SET @OLD_TIME_ZONE = @@TIME_ZONE */; -/*!40103 SET TIME_ZONE = '+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS = @@UNIQUE_CHECKS, UNIQUE_CHECKS = 0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS = @@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0 */; -/*!40101 SET @OLD_SQL_MODE = @@SQL_MODE, SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES = @@SQL_NOTES, SQL_NOTES = 0 */; - --- --- Temporary table structure for view `active_flash_sales` --- - -DROP TABLE IF EXISTS `active_flash_sales`; -/*!50001 DROP VIEW IF EXISTS `active_flash_sales`*/; -SET @saved_cs_client = @@character_set_client; -SET character_set_client = utf8; -/*!50001 CREATE VIEW `active_flash_sales` AS -SELECT 1 AS `id`, - 1 AS `product_id`, - 1 AS `product_name`, - 1 AS `original_price`, - 1 AS `flash_price`, - 1 AS `flash_stock`, - 1 AS `start_time`, - 1 AS `end_time`, - 1 AS `status`, - 1 AS `image_url` - */; -SET character_set_client = @saved_cs_client; - --- --- Table structure for table `flash_sales` --- - -DROP TABLE IF EXISTS `flash_sales`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `flash_sales` -( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '秒杀活动ID', - `product_id` bigint NOT NULL COMMENT '商品ID', - `flash_price` decimal(10, 2) NOT NULL COMMENT '秒杀价格', - `flash_stock` int NOT NULL COMMENT '秒杀库存', - `start_time` timestamp NOT NULL COMMENT '开始时间', - `end_time` timestamp NOT NULL COMMENT '结束时间', - `status` tinyint DEFAULT '1' COMMENT '状态:1-未开始,2-进行中,3-已结束', - `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`), - KEY `idx_product_id` (`product_id`), - KEY `idx_start_time` (`start_time`), - KEY `idx_end_time` (`end_time`), - KEY `idx_status` (`status`), - KEY `idx_created_at` (`created_at`), - CONSTRAINT `flash_sales_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE -) ENGINE = InnoDB - AUTO_INCREMENT = 10 - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='秒杀活动表'; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `flash_sales` --- - -/*!40000 ALTER TABLE `flash_sales` - DISABLE KEYS */; -INSERT INTO `flash_sales` -VALUES (1, 1, 7999.00, 19, '2025-06-29 02:06:16', '2025-07-12 07:07:00', 2, '2025-06-29 02:07:16', - '2025-07-04 14:02:39'), - (2, 4, 1299.00, 49, '2025-06-29 02:06:16', '2025-07-12 07:07:00', 2, '2025-06-29 02:07:16', - '2025-07-03 07:37:53'), - (3, 6, 1999.00, 15, '2025-06-29 02:06:16', '2025-07-12 07:07:00', 2, '2025-06-29 02:07:16', - '2025-07-03 03:23:51'), - (4, 2, 19999.00, 10, '2025-06-29 02:06:16', '2025-06-29 06:07:16', 2, '2025-06-29 02:07:16', - '2025-07-02 08:39:07'), - (5, 9, 899.00, 29, '2025-06-29 02:06:16', '2025-07-12 07:07:00', 2, '2025-06-29 02:07:16', - '2025-07-03 03:23:51'), - (7, 7, 3999.00, 10, '2025-06-29 02:06:16', '2025-07-12 07:07:00', 2, '2025-06-29 02:07:16', - '2025-07-03 03:23:51'), - (8, 11, 59.00, 100, '2025-06-29 02:06:16', '2025-07-12 07:07:00', 2, '2025-06-29 02:07:16', - '2025-07-03 03:23:51'), - (9, 12, 1.00, 1, '2025-07-05 22:44:00', '2025-07-12 22:44:00', 1, '2025-07-04 22:44:57', '2025-07-04 14:44:56'); -/*!40000 ALTER TABLE `flash_sales` - ENABLE KEYS */; - --- --- Temporary table structure for view `order_statistics` --- - -DROP TABLE IF EXISTS `order_statistics`; -/*!50001 DROP VIEW IF EXISTS `order_statistics`*/; -SET @saved_cs_client = @@character_set_client; -SET character_set_client = utf8; -/*!50001 CREATE VIEW `order_statistics` AS -SELECT 1 AS `order_date`, - 1 AS `total_orders`, - 1 AS `pending_orders`, - 1 AS `paid_orders`, - 1 AS `completed_orders`, - 1 AS `flash_sale_orders`, - 1 AS `total_amount` - */; -SET character_set_client = @saved_cs_client; - --- --- Table structure for table `orders` --- - -DROP TABLE IF EXISTS `orders`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `orders` -( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单ID', - `user_id` bigint NOT NULL COMMENT '用户ID', - `product_id` bigint NOT NULL COMMENT '商品ID', - `quantity` int NOT NULL DEFAULT '1' COMMENT '购买数量', - `total_price` decimal(10, 2) NOT NULL COMMENT '总价', - `status` tinyint DEFAULT '1' COMMENT '状态:1-待支付,2-已支付,3-已发货,4-已完成,5-已取消', - `order_type` tinyint DEFAULT '1' COMMENT '订单类型:1-普通订单,2-秒杀订单', - `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`), - KEY `idx_user_id` (`user_id`), - KEY `idx_product_id` (`product_id`), - KEY `idx_status` (`status`), - KEY `idx_order_type` (`order_type`), - KEY `idx_created_at` (`created_at`), - KEY `idx_user_product` (`user_id`, `product_id`), - CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, - CONSTRAINT `orders_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE -) ENGINE = InnoDB - AUTO_INCREMENT = 20 - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='订单表'; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `orders` --- - -/*!40000 ALTER TABLE `orders` - DISABLE KEYS */; -INSERT INTO `orders` -VALUES (1, 1, 11, 1, 89.00, 4, 1, '2025-06-27 02:07:16', '2025-06-28 02:07:16'), - (2, 1, 12, 1, 79.00, 2, 1, '2025-06-28 02:07:16', '2025-06-28 02:07:16'), - (3, 2, 14, 1, 168.00, 3, 1, '2025-06-28 23:07:16', '2025-06-29 00:07:16'), - (4, 2, 7, 1, 3999.00, 1, 2, '2025-06-29 01:07:16', '2025-06-29 01:07:16'), - (6, 5, 10, 1, 1599.00, 4, 1, '2025-06-28 14:07:16', '2025-06-28 16:07:16'), - (7, 6, 8, 1, 2599.00, 3, 1, '2025-06-28 02:07:16', '2025-06-28 06:07:16'), - (8, 11, 5, 1, 3199.00, 2, 1, '2025-06-27 02:07:16', '2025-07-02 08:57:17'), - (10, 11, 9, 1, 1299.00, 2, 1, '2025-07-03 00:11:39', '2025-07-03 00:46:10'), - (11, 11, 14, 1, 168.00, 2, 1, '2025-07-03 00:18:55', '2025-07-03 00:39:56'), - (12, 11, 13, 1, 2680.00, 1, 1, '2025-07-03 08:48:38', '2025-07-03 08:48:38'), - (13, 11, 13, 1, 2680.00, 1, 1, '2025-07-03 08:56:50', '2025-07-03 08:56:50'), - (14, 11, 14, 1, 168.00, 1, 1, '2025-07-03 08:57:46', '2025-07-03 08:57:46'), - (15, 11, 14, 1, 168.00, 2, 1, '2025-07-03 11:08:56', '2025-07-03 11:09:06'), - (16, 11, 9, 1, 899.00, 2, 2, '2025-07-03 11:23:51', '2025-07-03 11:24:07'), - (17, 11, 4, 1, 1299.00, 1, 2, '2025-07-03 15:37:53', '2025-07-03 15:37:53'), - (18, 3, 1, 1, 7999.00, 2, 2, '2025-07-04 22:02:40', '2025-07-04 22:03:18'), - (19, 3, 14, 1, 168.00, 2, 1, '2025-07-04 22:03:38', '2025-07-04 22:03:46'); -/*!40000 ALTER TABLE `orders` - ENABLE KEYS */; - --- --- Table structure for table `products` --- - -DROP TABLE IF EXISTS `products`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `products` -( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '商品ID', - `name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品名称', - `description` text COLLATE utf8mb4_unicode_ci COMMENT '商品描述', - `price` decimal(10, 2) NOT NULL COMMENT '商品价格', - `stock` int NOT NULL DEFAULT '0' COMMENT '库存数量', - `image_url` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商品图片URL', - `status` tinyint DEFAULT '1' COMMENT '状态:1-上架,0-下架', - `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`), - KEY `idx_name` (`name`), - KEY `idx_price` (`price`), - KEY `idx_stock` (`stock`), - KEY `idx_status` (`status`), - KEY `idx_created_at` (`created_at`) -) ENGINE = InnoDB - AUTO_INCREMENT = 17 - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='商品表'; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `products` --- - -/*!40000 ALTER TABLE `products` - DISABLE KEYS */; -INSERT INTO `products` -VALUES (1, 'iPhone 15 Pro Max', '苹果最新旗舰手机,A17 Pro芯片,钛金属设计', 9999.00, 100, '/images/iphone15.jpg', 1, - '2025-06-29 02:07:16', '2025-06-29 02:07:16'), - (2, 'MacBook Pro 16英寸', 'M3 Max芯片,36GB内存,1TB存储', 25999.00, 50, '/images/macbook.jpg', 1, - '2025-06-29 02:07:16', '2025-06-29 02:07:16'), - (3, 'iPad Air', '10.9英寸液晶显示屏,M1芯片', 4399.00, 80, '/images/ipad.jpg', 1, '2025-06-29 02:07:16', - '2025-06-29 02:07:16'), - (4, 'AirPods Pro 2', '主动降噪无线耳机,空间音频', 1899.00, 200, '/images/airpods.jpg', 1, '2025-06-29 02:07:16', - '2025-06-29 02:07:16'), - (5, 'Apple Watch Series 9', '健康监测,GPS+蜂窝网络', 3199.00, 150, '/images/watch.jpg', 1, '2025-06-29 02:07:16', - '2025-06-29 02:07:16'), - (6, '小米电视 65英寸', '4K超高清,120Hz刷新率', 2999.00, 60, '/images/tv.jpg', 1, '2025-06-29 02:07:16', - '2025-06-29 02:07:16'), - (7, '戴森吸尘器 V15', '激光显微尘,强劲吸力', 4690.00, 40, '/images/dyson.jpg', 1, '2025-06-29 02:07:16', - '2025-06-29 02:07:16'), - (8, '美的空调 1.5匹', '变频节能,静音运行', 2599.00, 80, '/images/airconditioner.jpg', 1, '2025-06-29 02:07:16', - '2025-06-29 02:07:16'), - (9, 'Nike Air Jordan 1', '经典篮球鞋,限量版配色1', 1299.00, 119, '/images/jordan.jpg', 1, '2025-06-29 02:07:16', - '2025-07-02 16:11:39'), - (10, 'Adidas Ultra Boost', '缓震跑鞋,Boost中底', 1599.00, 100, '/images/ultraboost.jpg', 1, - '2025-06-29 02:07:16', '2025-06-29 02:07:16'), - (11, '深入理解Java虚拟机', 'JVM原理与实践,第3版', 89.00, 500, '/images/jvm-book.jpg', 1, '2025-06-29 02:07:16', - '2025-06-29 02:07:16'), - (12, 'Redis设计与实现', 'Redis内部机制详解', 79.00, 300, '/images/redis-book.jpg', 1, '2025-06-29 02:07:16', - '2025-06-29 02:07:16'), - (13, '茅台酒 53度 500ml', '国酒茅台,收藏佳品', 2680.00, 28, '/images/maotai.jpg', 1, '2025-06-29 02:07:16', - '2025-07-03 00:56:50'), - (14, '五常大米 10kg', '东北优质大米,香甜可口1111', 168.00, 196, '/images/rice.jpg', 1, '2025-06-29 02:07:16', - '2025-07-04 14:03:38'); -/*!40000 ALTER TABLE `products` - ENABLE KEYS */; - --- --- Table structure for table `users` --- - -DROP TABLE IF EXISTS `users`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `users` -( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', - `username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名', - `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码(加密)', - `email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱', - `phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号', - `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '用户状态:1-正常,0-禁用', - `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `last_login` datetime DEFAULT NULL COMMENT '最后登录时间', - PRIMARY KEY (`id`), - UNIQUE KEY `username` (`username`), - KEY `idx_username` (`username`), - KEY `idx_email` (`email`), - KEY `idx_phone` (`phone`), - KEY `idx_status` (`status`), - KEY `idx_created_at` (`created_at`), - KEY `idx_users_status` (`status`), - KEY `idx_users_last_login` (`last_login`), - KEY `idx_users_created_at` (`created_at`) -) ENGINE = InnoDB - AUTO_INCREMENT = 13 - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='用户表'; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `users` --- - -/*!40000 ALTER TABLE `users` - DISABLE KEYS */; -INSERT INTO `users` -VALUES (1, 'demo1', '$2a$10$UD7rr9R.hQJko9Nf.Yz9ku461It2c7RygHDDFD/cbBqJiTtBNL0pW', 'admin_updated@example.com', - '13888888888', 1, '2025-06-29 02:07:16', '2025-07-04 14:00:34', NULL), - (2, 'demo2', '$2a$10$UD7rr9R.hQJko9Nf.Yz9ku461It2c7RygHDDFD/cbBqJiTtBNL0pW', 'demo2@example.com', '13800138002', - 1, '2025-06-29 02:07:16', '2025-07-04 14:00:34', NULL), - (3, 'admin', '$2a$10$UD7rr9R.hQJko9Nf.Yz9ku461It2c7RygHDDFD/cbBqJiTtBNL0pW', 'admin@example.com', '13800138000', - 1, '2025-06-29 02:07:16', '2025-07-04 14:00:34', NULL), - (4, 'testuser1', '$2a$10$UD7rr9R.hQJko9Nf.Yz9ku461It2c7RygHDDFD/cbBqJiTtBNL0pW', 'test1@example.com', - '13800138003', 1, '2025-06-29 02:07:16', '2025-07-04 14:00:34', NULL), - (5, 'testuser2', '$2a$10$UD7rr9R.hQJko9Nf.Yz9ku461It2c7RygHDDFD/cbBqJiTtBNL0pW', 'test2@example.com', - '13800138004', 1, '2025-06-29 02:07:16', '2025-07-04 14:00:34', NULL), - (6, 'testuser3', '$2a$10$UD7rr9R.hQJko9Nf.Yz9ku461It2c7RygHDDFD/cbBqJiTtBNL0pW', 'test3@example.com', - '13800138005', 1, '2025-06-29 02:07:16', '2025-07-04 14:00:34', NULL), - (7, 'testuser4', '$2a$10$UD7rr9R.hQJko9Nf.Yz9ku461It2c7RygHDDFD/cbBqJiTtBNL0pW', 'test4@example.com', - '13800138006', 1, '2025-06-29 02:07:16', '2025-07-04 14:00:34', NULL), - (8, 'testuser5', '$2a$10$UD7rr9R.hQJko9Nf.Yz9ku461It2c7RygHDDFD/cbBqJiTtBNL0pW', 'test5@example.com', - '13800138007', 1, '2025-06-29 02:07:16', '2025-07-04 14:00:34', NULL), - (11, 'student', '$2a$10$UD7rr9R.hQJko9Nf.Yz9ku461It2c7RygHDDFD/cbBqJiTtBNL0pW', '1231231@gmail.com', - '19889899898', 1, '2025-06-30 14:34:57', '2025-07-04 14:00:34', NULL), - (12, 'student1', '$2a$10$UD7rr9R.hQJko9Nf.Yz9ku461It2c7RygHDDFD/cbBqJiTtBNL0pW', 'gz1@gmail.com', '19566111010', - 1, '2025-07-04 22:00:18', '2025-07-04 22:00:18', NULL); -/*!40000 ALTER TABLE `users` - ENABLE KEYS */; - --- --- Dumping routines for database 'flash_sale_db' --- - --- --- Final view structure for view `active_flash_sales` --- - -/*!50001 DROP VIEW IF EXISTS `active_flash_sales`*/; -/*!50001 SET @saved_cs_client = @@character_set_client */; -/*!50001 SET @saved_cs_results = @@character_set_results */; -/*!50001 SET @saved_col_connection = @@collation_connection */; -/*!50001 SET character_set_client = utf8mb4 */; -/*!50001 SET character_set_results = utf8mb4 */; -/*!50001 SET collation_connection = utf8mb4_0900_ai_ci */; -/*!50001 CREATE ALGORITHM = UNDEFINED */ /*!50013 DEFINER =`root`@`%` SQL SECURITY DEFINER */ /*!50001 VIEW `active_flash_sales` AS -select `fs`.`id` AS `id`, - `fs`.`product_id` AS `product_id`, - `p`.`name` AS `product_name`, - `p`.`price` AS `original_price`, - `fs`.`flash_price` AS `flash_price`, - `fs`.`flash_stock` AS `flash_stock`, - `fs`.`start_time` AS `start_time`, - `fs`.`end_time` AS `end_time`, - `fs`.`status` AS `status`, - `p`.`image_url` AS `image_url` -from (`flash_sales` `fs` join `products` `p` on ((`fs`.`product_id` = `p`.`id`))) -where ((`fs`.`status` = 2) and (`fs`.`start_time` <= now()) and (`fs`.`end_time` > now()) and (`p`.`status` = 1)) - */; -/*!50001 SET character_set_client = @saved_cs_client */; -/*!50001 SET character_set_results = @saved_cs_results */; -/*!50001 SET collation_connection = @saved_col_connection */; - --- --- Final view structure for view `order_statistics` --- - -/*!50001 DROP VIEW IF EXISTS `order_statistics`*/; -/*!50001 SET @saved_cs_client = @@character_set_client */; -/*!50001 SET @saved_cs_results = @@character_set_results */; -/*!50001 SET @saved_col_connection = @@collation_connection */; -/*!50001 SET character_set_client = utf8mb4 */; -/*!50001 SET character_set_results = utf8mb4 */; -/*!50001 SET collation_connection = utf8mb4_0900_ai_ci */; -/*!50001 CREATE ALGORITHM = UNDEFINED */ /*!50013 DEFINER =`root`@`%` SQL SECURITY DEFINER */ /*!50001 VIEW `order_statistics` AS -select cast(`orders`.`created_at` as date) AS `order_date`, - count(0) AS `total_orders`, - sum((case when (`orders`.`status` = 1) then 1 else 0 end)) AS `pending_orders`, - sum((case when (`orders`.`status` = 2) then 1 else 0 end)) AS `paid_orders`, - sum((case when (`orders`.`status` = 4) then 1 else 0 end)) AS `completed_orders`, - sum((case when (`orders`.`order_type` = 2) then 1 else 0 end)) AS `flash_sale_orders`, - sum(`orders`.`total_price`) AS `total_amount` -from `orders` -group by cast(`orders`.`created_at` as date) -order by `order_date` desc - */; -/*!50001 SET character_set_client = @saved_cs_client */; -/*!50001 SET character_set_results = @saved_cs_results */; -/*!50001 SET collation_connection = @saved_col_connection */; -/*!40103 SET TIME_ZONE = @OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE = @OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS = @OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS = @OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT = @OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS = @OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION = @OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES = @OLD_SQL_NOTES */; - --- Dump completed on 2025-07-04 23:11:23 diff --git a/src/main/resources/sql/demo-users.sql b/src/main/resources/sql/demo-users.sql deleted file mode 100644 index b002198..0000000 --- a/src/main/resources/sql/demo-users.sql +++ /dev/null @@ -1,17 +0,0 @@ --- 演示账号初始化脚本 --- 账号:demo1 / 123456,demo2 / 123456,admin / admin123 - -USE flash_sale_db; - -INSERT INTO users (username, password, email, phone, avatar, role, status, created_at, updated_at) -VALUES - ('demo1', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'demo1@example.com', '13800138001', '', 'USER', 1, NOW(), NOW()), - ('demo2', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'demo2@example.com', '13800138002', '', 'USER', 1, NOW(), NOW()), - ('admin', '$2a$10$DOwVJZHH.5PkZKJKJKJKJOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'admin@example.com', '13800138000', '', 'ADMIN', 1, NOW(), NOW()) -ON DUPLICATE KEY UPDATE - email = VALUES(email), - phone = VALUES(phone), - avatar = VALUES(avatar), - role = VALUES(role), - status = VALUES(status), - updated_at = NOW(); diff --git a/src/main/resources/sql/fix-groupbuying-data.sql b/src/main/resources/sql/fix-groupbuying-data.sql deleted file mode 100644 index 3dda8a9..0000000 --- a/src/main/resources/sql/fix-groupbuying-data.sql +++ /dev/null @@ -1,132 +0,0 @@ --- ============================================================ --- 拼团历史数据修复脚本 --- 修复内容: --- 1. 已满员但状态仍为 FORMING(1) 的团组 → 更新为 SUCCESS(2) --- 2. 已成团团组的成员状态从 已加入(1) → 已成团(2) --- 3. 拼团订单的 order_type 修正为 3(拼团订单) --- 4. 已过期且未满员的 FORMING 团组 → 更新为 FAILED(3) --- 5. 已失败团组的成员状态更新 --- 使用方式:mysql -u root -p flash_sale_db < fix-groupbuying-data.sql --- ============================================================ - --- 先查看当前数据状况(仅查询,不修改) -SELECT '====== 修复前数据概况 ======' AS info; - -SELECT '满员但仍为FORMING的团组' AS category, COUNT(*) AS cnt -FROM group_buying_group -WHERE status = 1 AND current_members >= required_members; - -SELECT '已过期但仍为FORMING的团组' AS category, COUNT(*) AS cnt -FROM group_buying_group -WHERE status = 1 AND expire_time < NOW(); - -SELECT '拼团订单但order_type不是3的订单' AS category, COUNT(*) AS cnt -FROM orders -WHERE group_buying_group_id IS NOT NULL AND order_type != 3; - -SELECT '缺少order_items记录的拼团订单' AS category, COUNT(*) AS cnt -FROM orders o -WHERE o.group_buying_group_id IS NOT NULL - AND NOT EXISTS (SELECT 1 FROM order_items oi WHERE oi.order_id = o.id); - --- ============================================================ --- 修复1: 已满员的团组 → SUCCESS(2) --- ============================================================ -UPDATE group_buying_group -SET status = 2, - completed_at = COALESCE(completed_at, NOW()) -WHERE status = 1 - AND current_members >= required_members; - -SELECT CONCAT('修复1完成: ', ROW_COUNT(), ' 个满员团组已更新为已成团') AS result; - --- ============================================================ --- 修复2: 已成团(status=2)团组的成员状态 → 已成团(2) --- ============================================================ -UPDATE group_buying_member m - INNER JOIN group_buying_group g ON m.group_id = g.id -SET m.status = 2 -WHERE g.status = 2 - AND m.status = 1; - -SELECT CONCAT('修复2完成: ', ROW_COUNT(), ' 个成员状态已更新为已成团') AS result; - --- ============================================================ --- 修复3: 已过期且未满员的团组 → FAILED(3) --- ============================================================ -UPDATE group_buying_group -SET status = 3 -WHERE status = 1 - AND expire_time < NOW() - AND current_members < required_members; - -SELECT CONCAT('修复3完成: ', ROW_COUNT(), ' 个过期团组已更新为已失败') AS result; - --- ============================================================ --- 修复4: 已失败(status=3)团组的成员状态 → 已退出(3) --- ============================================================ -UPDATE group_buying_member m - INNER JOIN group_buying_group g ON m.group_id = g.id -SET m.status = 3 -WHERE g.status = 3 - AND m.status = 1; - -SELECT CONCAT('修复4完成: ', ROW_COUNT(), ' 个失败团组成员已更新为已退出') AS result; - --- ============================================================ --- 修复5: 拼团关联订单的 order_type 修正为 3 --- ============================================================ -UPDATE orders -SET order_type = 3 -WHERE group_buying_group_id IS NOT NULL - AND order_type != 3; - -SELECT CONCAT('修复5完成: ', ROW_COUNT(), ' 个拼团订单的order_type已修正') AS result; - --- ============================================================ --- 修复6: 补充缺失的 order_items 记录(拼团订单) --- ============================================================ -INSERT INTO order_items (order_id, product_id, product_name, product_image_url, price, quantity, subtotal, created_at) -SELECT o.id, - o.product_id, - COALESCE(p.name, '未知商品'), - p.image_url, - o.total_price / o.quantity, - o.quantity, - o.total_price, - o.created_at -FROM orders o - LEFT JOIN products p ON o.product_id = p.id -WHERE o.group_buying_group_id IS NOT NULL - AND NOT EXISTS (SELECT 1 FROM order_items oi WHERE oi.order_id = o.id); - -SELECT CONCAT('修复6完成: ', ROW_COUNT(), ' 条缺失的订单明细已补充') AS result; - --- ============================================================ --- 修复7: 已失败团组关联的待支付订单 → 取消(5) --- ============================================================ -UPDATE orders o - INNER JOIN group_buying_group g ON o.group_buying_group_id = g.id -SET o.status = 5 -WHERE g.status = 3 - AND o.status = 1; - -SELECT CONCAT('修复7完成: ', ROW_COUNT(), ' 个失败团组的待支付订单已取消') AS result; - --- 修复后数据验证 -SELECT '====== 修复后数据验证 ======' AS info; - -SELECT status, - CASE status WHEN 1 THEN '拼团中' WHEN 2 THEN '已成团' WHEN 3 THEN '已失败' END AS status_desc, - COUNT(*) AS cnt -FROM group_buying_group -GROUP BY status -ORDER BY status; - -SELECT '仍有异常的团组(满员但非SUCCESS)' AS category, COUNT(*) AS cnt -FROM group_buying_group -WHERE current_members >= required_members AND status != 2; - -SELECT '仍有异常的团组(过期但仍FORMING)' AS category, COUNT(*) AS cnt -FROM group_buying_group -WHERE expire_time < NOW() AND status = 1; diff --git a/src/main/resources/sql/schema.sql b/src/main/resources/sql/schema.sql deleted file mode 100644 index 847a90a..0000000 --- a/src/main/resources/sql/schema.sql +++ /dev/null @@ -1,338 +0,0 @@ --- 社区生鲜团购系统数据库结构 --- 说明:本脚本只负责数据库对象定义,不包含演示数据。 - -CREATE DATABASE IF NOT EXISTS flash_sale_db - CHARACTER SET utf8mb4 - COLLATE utf8mb4_unicode_ci; - -USE flash_sale_db; - --- ================================ --- 1. 用户表 --- ================================ -CREATE TABLE IF NOT EXISTS users ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID', - username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名', - password VARCHAR(255) NOT NULL COMMENT '密码(加密)', - email VARCHAR(100) COMMENT '邮箱', - phone VARCHAR(20) COMMENT '手机号', - avatar VARCHAR(500) COMMENT '头像', - role VARCHAR(20) NOT NULL DEFAULT 'USER' COMMENT '角色:ADMIN/USER', - status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-正常,0-禁用', - last_login TIMESTAMP NULL COMMENT '最后登录时间', - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - INDEX idx_users_username (username), - INDEX idx_users_email (email), - INDEX idx_users_phone (phone), - INDEX idx_users_status (status), - INDEX idx_users_created_at (created_at) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='用户表'; - --- ================================ --- 2. 商品表 --- ================================ -CREATE TABLE IF NOT EXISTS products ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '商品ID', - name VARCHAR(200) NOT NULL COMMENT '商品名称', - description TEXT COMMENT '商品描述', - price DECIMAL(10, 2) NOT NULL COMMENT '商品价格', - category VARCHAR(100) COMMENT '商品分类', - stock INT NOT NULL DEFAULT 0 COMMENT '库存数量', - image_url VARCHAR(500) COMMENT '商品图片URL', - status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-上架,0-下架', - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - INDEX idx_products_name (name), - INDEX idx_products_category (category), - INDEX idx_products_price (price), - INDEX idx_products_stock (stock), - INDEX idx_products_status (status), - INDEX idx_products_created_at (created_at) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='商品表'; - --- ================================ --- 3. 秒杀活动表 --- ================================ -CREATE TABLE IF NOT EXISTS flash_sales ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '秒杀活动ID', - product_id BIGINT NOT NULL COMMENT '商品ID', - flash_price DECIMAL(10, 2) NOT NULL COMMENT '秒杀价格', - flash_stock INT NOT NULL COMMENT '秒杀库存', - start_time TIMESTAMP NOT NULL COMMENT '开始时间', - end_time TIMESTAMP NOT NULL COMMENT '结束时间', - status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-未开始,2-进行中,3-已结束', - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - CONSTRAINT fk_flash_sales_product FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE, - INDEX idx_flash_sales_product_id (product_id), - INDEX idx_flash_sales_start_time (start_time), - INDEX idx_flash_sales_end_time (end_time), - INDEX idx_flash_sales_status (status), - INDEX idx_flash_sales_created_at (created_at) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='秒杀活动表'; - --- ================================ --- 4. 订单主表 --- ================================ -CREATE TABLE IF NOT EXISTS orders ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID', - order_no VARCHAR(64) NOT NULL UNIQUE COMMENT '订单号', - group_no VARCHAR(64) COMMENT '聚合订单号(兼容旧数据)', - user_id BIGINT NOT NULL COMMENT '用户ID', - product_id BIGINT NOT NULL COMMENT '兼容字段:主商品ID', - flash_sale_id BIGINT COMMENT '秒杀活动ID', - group_buying_group_id BIGINT COMMENT '拼团团组ID', - quantity INT NOT NULL DEFAULT 1 COMMENT '兼容字段:总购买数量', - total_price DECIMAL(10, 2) NOT NULL COMMENT '订单总价', - status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-待支付,2-已支付,3-已发货,4-已完成,5-已取消', - order_type TINYINT NOT NULL DEFAULT 1 COMMENT '订单类型:1-普通订单,2-秒杀订单', - receiver_name VARCHAR(100) COMMENT '收货人', - receiver_phone VARCHAR(20) COMMENT '收货手机号', - receiver_address VARCHAR(255) COMMENT '收货地址', - remark VARCHAR(255) COMMENT '订单备注', - payment_method VARCHAR(50) COMMENT '支付方式', - paid_at TIMESTAMP NULL COMMENT '支付时间', - shipped_at TIMESTAMP NULL COMMENT '发货时间', - completed_at TIMESTAMP NULL COMMENT '完成时间', - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, - CONSTRAINT fk_orders_product FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE, - INDEX idx_orders_order_no (order_no), - INDEX idx_orders_group_no (group_no), - INDEX idx_orders_user_id (user_id), - INDEX idx_orders_product_id (product_id), - INDEX idx_orders_flash_sale_id (flash_sale_id), - INDEX idx_orders_status (status), - INDEX idx_orders_order_type (order_type), - INDEX idx_orders_created_at (created_at) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='订单主表'; - --- ================================ --- 5. 订单明细表 --- ================================ -CREATE TABLE IF NOT EXISTS order_items ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '明细ID', - order_id BIGINT NOT NULL COMMENT '主订单ID', - product_id BIGINT NOT NULL COMMENT '商品ID', - product_name VARCHAR(200) NOT NULL COMMENT '商品名称快照', - product_image_url VARCHAR(500) COMMENT '商品图片快照', - price DECIMAL(10, 2) NOT NULL COMMENT '下单单价', - quantity INT NOT NULL COMMENT '购买数量', - subtotal DECIMAL(10, 2) NOT NULL COMMENT '小计', - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - CONSTRAINT fk_order_items_order FOREIGN KEY (order_id) REFERENCES orders (id) ON DELETE CASCADE, - CONSTRAINT fk_order_items_product FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE, - INDEX idx_order_items_order_id (order_id), - INDEX idx_order_items_product_id (product_id) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='订单明细表'; - --- ================================ --- 6. 用户地址表 --- ================================ -CREATE TABLE IF NOT EXISTS user_addresses ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '地址ID', - user_id BIGINT NOT NULL COMMENT '用户ID', - name VARCHAR(100) NOT NULL COMMENT '收货人', - phone VARCHAR(20) NOT NULL COMMENT '手机号', - province VARCHAR(50) COMMENT '省份', - city VARCHAR(50) COMMENT '城市', - district VARCHAR(50) COMMENT '区县', - address VARCHAR(255) NOT NULL COMMENT '详细地址', - is_default TINYINT NOT NULL DEFAULT 0 COMMENT '是否默认地址', - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - CONSTRAINT fk_user_addresses_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, - INDEX idx_user_addresses_user_id (user_id), - INDEX idx_user_addresses_default (is_default) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='用户地址表'; - --- ================================ --- 7. 商品评价表 --- ================================ -CREATE TABLE IF NOT EXISTS product_reviews ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '评价ID', - product_id BIGINT NOT NULL COMMENT '商品ID', - user_id BIGINT NOT NULL COMMENT '用户ID', - order_id BIGINT NOT NULL COMMENT '订单ID', - rating TINYINT NOT NULL DEFAULT 5 COMMENT '评分', - content TEXT NOT NULL COMMENT '评价内容', - status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-显示,0-隐藏', - admin_reply TEXT COMMENT '管理员回复', - replied_at TIMESTAMP NULL COMMENT '回复时间', - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - CONSTRAINT fk_product_reviews_product FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE, - CONSTRAINT fk_product_reviews_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, - CONSTRAINT fk_product_reviews_order FOREIGN KEY (order_id) REFERENCES orders (id) ON DELETE CASCADE, - UNIQUE KEY uk_review_order_user_product (order_id, user_id, product_id), - INDEX idx_product_reviews_product_id (product_id), - INDEX idx_product_reviews_user_id (user_id), - INDEX idx_product_reviews_status (status) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='商品评价表'; - --- ================================ --- 8. 用户收藏表 --- ================================ -CREATE TABLE IF NOT EXISTS user_favorites ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '收藏ID', - user_id BIGINT NOT NULL COMMENT '用户ID', - product_id BIGINT NOT NULL COMMENT '商品ID', - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - CONSTRAINT fk_user_favorites_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, - CONSTRAINT fk_user_favorites_product FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE, - UNIQUE KEY uk_favorite_user_product (user_id, product_id), - INDEX idx_user_favorites_user_id (user_id), - INDEX idx_user_favorites_product_id (product_id) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='用户收藏表'; - --- ================================ --- 9. 视图 --- ================================ --- ================================ --- 9. 拼团活动表 --- ================================ -CREATE TABLE IF NOT EXISTS group_buying ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '拼团活动ID', - product_id BIGINT NOT NULL COMMENT '商品ID', - group_price DECIMAL(10, 2) NOT NULL COMMENT '拼团价格', - required_members INT NOT NULL DEFAULT 2 COMMENT '成团人数', - duration_minutes INT NOT NULL DEFAULT 1440 COMMENT '拼团有效期(分钟)', - total_stock INT NOT NULL COMMENT '总库存', - remaining_stock INT NOT NULL COMMENT '剩余库存', - max_per_user INT NOT NULL DEFAULT 1 COMMENT '每人限购', - status TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0-草稿 1-未开始 2-进行中 3-已结束', - start_time DATETIME NOT NULL COMMENT '开始时间', - end_time DATETIME NOT NULL COMMENT '结束时间', - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - CONSTRAINT fk_group_buying_product FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE, - INDEX idx_group_buying_product_id (product_id), - INDEX idx_group_buying_status (status), - INDEX idx_group_buying_start_time (start_time), - INDEX idx_group_buying_end_time (end_time) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='拼团活动表'; - --- ================================ --- 10. 拼团团组表 --- ================================ -CREATE TABLE IF NOT EXISTS group_buying_group ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '团组ID', - group_no VARCHAR(64) NOT NULL UNIQUE COMMENT '团号', - group_buying_id BIGINT NOT NULL COMMENT '关联拼团活动', - leader_user_id BIGINT NOT NULL COMMENT '团长用户ID', - required_members INT NOT NULL COMMENT '需要人数', - current_members INT NOT NULL DEFAULT 1 COMMENT '当前人数', - status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-拼团中 2-已成团 3-已失败(超时)', - expire_time DATETIME NOT NULL COMMENT '过期时间', - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - completed_at TIMESTAMP NULL COMMENT '成团时间', - CONSTRAINT fk_gbg_group_buying FOREIGN KEY (group_buying_id) REFERENCES group_buying (id) ON DELETE CASCADE, - CONSTRAINT fk_gbg_leader FOREIGN KEY (leader_user_id) REFERENCES users (id) ON DELETE CASCADE, - INDEX idx_gbg_group_no (group_no), - INDEX idx_gbg_group_buying_id (group_buying_id), - INDEX idx_gbg_status (status), - INDEX idx_gbg_expire_time (expire_time) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='拼团团组表'; - --- ================================ --- 11. 拼团成员表 --- ================================ -CREATE TABLE IF NOT EXISTS group_buying_member ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '成员ID', - group_id BIGINT NOT NULL COMMENT '关联团组', - user_id BIGINT NOT NULL COMMENT '用户ID', - order_id BIGINT COMMENT '关联订单', - status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-已加入 2-已成团 3-已退出', - joined_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '加入时间', - CONSTRAINT fk_gbm_group FOREIGN KEY (group_id) REFERENCES group_buying_group (id) ON DELETE CASCADE, - CONSTRAINT fk_gbm_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, - UNIQUE KEY uk_group_user (group_id, user_id), - INDEX idx_gbm_group_id (group_id), - INDEX idx_gbm_user_id (user_id), - INDEX idx_gbm_order_id (order_id) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_unicode_ci COMMENT ='拼团成员表'; - --- ================================ --- 12. 退货表 --- ================================ -CREATE TABLE IF NOT EXISTS order_returns ( - id BIGINT AUTO_INCREMENT PRIMARY KEY, - return_no VARCHAR(64) NOT NULL UNIQUE COMMENT '退货单号', - order_id BIGINT NOT NULL COMMENT '订单ID', - user_id BIGINT NOT NULL COMMENT '用户ID', - refund_amount DECIMAL(10,2) NOT NULL COMMENT '退款金额', - reason VARCHAR(500) NOT NULL COMMENT '退货原因', - description TEXT COMMENT '详细描述', - images VARCHAR(2000) COMMENT '图片URL(逗号分隔)', - status TINYINT NOT NULL DEFAULT 1 COMMENT '1-待审核 2-已同意 3-退货中 4-已完成 5-已拒绝 6-已取消', - reject_reason VARCHAR(500) COMMENT '拒绝原因', - admin_remark VARCHAR(500) COMMENT '管理员备注', - return_tracking VARCHAR(100) COMMENT '退货物流单号', - reviewed_at TIMESTAMP NULL, - shipped_at TIMESTAMP NULL, - completed_at TIMESTAMP NULL, - cancelled_at TIMESTAMP NULL, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT fk_order_returns_order FOREIGN KEY (order_id) REFERENCES orders(id), - CONSTRAINT fk_order_returns_user FOREIGN KEY (user_id) REFERENCES users(id), - INDEX idx_returns_user_id (user_id), - INDEX idx_returns_status (status), - INDEX idx_returns_created_at (created_at) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单退货表'; - --- 13. 视图 --- ================================ -CREATE OR REPLACE VIEW active_flash_sales AS -SELECT fs.id, - fs.product_id, - p.name AS product_name, - p.price AS original_price, - fs.flash_price, - fs.flash_stock, - fs.start_time, - fs.end_time, - fs.status, - p.image_url -FROM flash_sales fs -JOIN products p ON fs.product_id = p.id -WHERE fs.status = 2 - AND fs.start_time <= NOW() - AND fs.end_time > NOW() - AND p.status = 1; - -CREATE OR REPLACE VIEW order_statistics AS -SELECT DATE(created_at) AS order_date, - COUNT(*) AS total_orders, - SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS pending_orders, - SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END) AS paid_orders, - SUM(CASE WHEN status = 4 THEN 1 ELSE 0 END) AS completed_orders, - SUM(CASE WHEN order_type = 2 THEN 1 ELSE 0 END) AS flash_sale_orders, - SUM(total_price) AS total_amount -FROM orders -GROUP BY DATE(created_at) -ORDER BY order_date DESC; diff --git a/src/main/resources/sql/test-data.sql b/src/main/resources/sql/test-data.sql deleted file mode 100644 index 16a2116..0000000 --- a/src/main/resources/sql/test-data.sql +++ /dev/null @@ -1,126 +0,0 @@ --- 测试业务数据初始化脚本 --- 依赖:请先执行 schema.sql 和 demo-users.sql - -USE flash_sale_db; - -SET FOREIGN_KEY_CHECKS = 0; -DELETE FROM user_favorites; -DELETE FROM product_reviews; -DELETE FROM user_addresses; -DELETE FROM order_items; -DELETE FROM orders; -DELETE FROM flash_sales; -DELETE FROM products; -DELETE FROM users WHERE username LIKE 'testuser%'; -ALTER TABLE products AUTO_INCREMENT = 1; -ALTER TABLE flash_sales AUTO_INCREMENT = 1; -ALTER TABLE orders AUTO_INCREMENT = 1; -ALTER TABLE order_items AUTO_INCREMENT = 1; -ALTER TABLE user_addresses AUTO_INCREMENT = 1; -ALTER TABLE product_reviews AUTO_INCREMENT = 1; -ALTER TABLE user_favorites AUTO_INCREMENT = 1; -SET FOREIGN_KEY_CHECKS = 1; - --- ================================ --- 1. 测试用户 --- ================================ -INSERT INTO users (username, password, email, phone, avatar, role, status, created_at, updated_at) -VALUES - ('testuser1', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'test1@example.com', '13800138003', '', 'USER', 1, NOW(), NOW()), - ('testuser2', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'test2@example.com', '13800138004', '', 'USER', 1, NOW(), NOW()), - ('testuser3', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'test3@example.com', '13800138005', '', 'USER', 1, NOW(), NOW()) -ON DUPLICATE KEY UPDATE - email = VALUES(email), - phone = VALUES(phone), - updated_at = NOW(); - --- ================================ --- 2. 商品 --- ================================ -INSERT INTO products (name, description, price, category, stock, image_url, status, created_at, updated_at) -VALUES - ('iPhone 15 Pro Max', '苹果最新旗舰手机,A17 Pro 芯片,钛金属设计。', 9999.00, '电子产品', 100, '/images/iphone15.svg', 1, NOW(), NOW()), - ('MacBook Pro 16英寸', 'M3 Max 芯片,36GB 内存,1TB 存储。', 25999.00, '电子产品', 50, '/images/macbook.svg', 1, NOW(), NOW()), - ('iPad Air', '10.9 英寸显示屏,轻薄便携。', 4399.00, '电子产品', 80, '/images/ipad.svg', 1, NOW(), NOW()), - ('AirPods Pro 2', '主动降噪无线耳机。', 1899.00, '电子产品', 200, '/images/default-product.svg', 1, NOW(), NOW()), - ('Apple Watch Series 9', '健康监测与运动记录。', 3199.00, '电子产品', 150, '/images/default-product.svg', 1, NOW(), NOW()), - ('小米电视 65英寸', '4K 超高清,120Hz 刷新率。', 2999.00, '家电', 60, '/images/default-product.svg', 1, NOW(), NOW()), - ('戴森吸尘器 V15', '激光显微尘,强劲吸力。', 4690.00, '家电', 40, '/images/default-product.svg', 1, NOW(), NOW()), - ('Nike Air Jordan 1', '经典篮球鞋,限量版配色。', 1299.00, '服饰鞋包', 120, '/images/default-product.svg', 1, NOW(), NOW()), - ('深入理解Java虚拟机', 'JVM 原理与实践,第 3 版。', 89.00, '图书音像', 500, '/images/default-product.svg', 1, NOW(), NOW()), - ('五常大米 10kg', '东北优质大米,香甜可口。', 168.00, '食品饮料', 200, '/images/default-product.svg', 1, NOW(), NOW()); - --- ================================ --- 3. 秒杀活动 --- ================================ -INSERT INTO flash_sales (product_id, flash_price, flash_stock, start_time, end_time, status, created_at, updated_at) -VALUES - (1, 7999.00, 20, DATE_SUB(NOW(), INTERVAL 10 MINUTE), DATE_ADD(NOW(), INTERVAL 2 HOUR), 2, NOW(), NOW()), - (4, 1299.00, 50, DATE_SUB(NOW(), INTERVAL 5 MINUTE), DATE_ADD(NOW(), INTERVAL 1 HOUR), 2, NOW(), NOW()), - (6, 1999.00, 15, DATE_SUB(NOW(), INTERVAL 1 MINUTE), DATE_ADD(NOW(), INTERVAL 3 HOUR), 2, NOW(), NOW()), - (2, 19999.00, 10, DATE_ADD(NOW(), INTERVAL 30 MINUTE), DATE_ADD(NOW(), INTERVAL 4 HOUR), 1, NOW(), NOW()), - (8, 899.00, 30, DATE_ADD(NOW(), INTERVAL 1 HOUR), DATE_ADD(NOW(), INTERVAL 5 HOUR), 1, NOW(), NOW()), - (9, 59.00, 100, DATE_SUB(NOW(), INTERVAL 1 DAY), DATE_SUB(NOW(), INTERVAL 22 HOUR), 3, NOW(), NOW()); - --- ================================ --- 4. 地址 --- ================================ -INSERT INTO user_addresses (user_id, name, phone, province, city, district, address, is_default, created_at, updated_at) -SELECT id, '演示用户一', '13800138001', '上海市', '上海市', '浦东新区', '张江高科技园区 100 号', 1, NOW(), NOW() FROM users WHERE username = 'demo1' -UNION ALL -SELECT id, '演示用户二', '13800138002', '浙江省', '杭州市', '西湖区', '文三路 88 号', 1, NOW(), NOW() FROM users WHERE username = 'demo2' -UNION ALL -SELECT id, '测试用户一', '13800138003', '广东省', '深圳市', '南山区', '科技园科苑路 18 号', 1, NOW(), NOW() FROM users WHERE username = 'testuser1'; - --- ================================ --- 5. 订单主表 --- ================================ -INSERT INTO orders ( - order_no, group_no, user_id, product_id, flash_sale_id, quantity, total_price, status, order_type, - receiver_name, receiver_phone, receiver_address, remark, payment_method, - paid_at, shipped_at, completed_at, created_at, updated_at -) -VALUES - ('ORD202603110001', NULL, (SELECT id FROM users WHERE username = 'demo1'), 9, NULL, 1, 89.00, 4, 1, '演示用户一', '13800138001', '上海市 上海市 浦东新区 张江高科技园区 100 号', '已完成测试订单', 'ALIPAY', DATE_SUB(NOW(), INTERVAL 2 DAY), DATE_SUB(NOW(), INTERVAL 2 DAY), DATE_SUB(NOW(), INTERVAL 1 DAY), DATE_SUB(NOW(), INTERVAL 2 DAY), DATE_SUB(NOW(), INTERVAL 1 DAY)), - ('ORD202603110002', NULL, (SELECT id FROM users WHERE username = 'demo1'), 4, NULL, 1, 1899.00, 2, 1, '演示用户一', '13800138001', '上海市 上海市 浦东新区 张江高科技园区 100 号', '待发货测试订单', 'WECHAT', DATE_SUB(NOW(), INTERVAL 1 DAY), NULL, NULL, DATE_SUB(NOW(), INTERVAL 1 DAY), DATE_SUB(NOW(), INTERVAL 1 DAY)), - ('ORD202603110003', NULL, (SELECT id FROM users WHERE username = 'demo2'), 10, NULL, 1, 168.00, 3, 1, '演示用户二', '13800138002', '浙江省 杭州市 西湖区 文三路 88 号', '已发货测试订单', 'ONLINE', DATE_SUB(NOW(), INTERVAL 4 HOUR), DATE_SUB(NOW(), INTERVAL 2 HOUR), NULL, DATE_SUB(NOW(), INTERVAL 6 HOUR), DATE_SUB(NOW(), INTERVAL 2 HOUR)), - ('ORD202603110004', NULL, (SELECT id FROM users WHERE username = 'demo2'), 4, 2, 1, 1299.00, 1, 2, '演示用户二', '13800138002', '浙江省 杭州市 西湖区 文三路 88 号', '秒杀待支付订单', NULL, NULL, NULL, NULL, DATE_SUB(NOW(), INTERVAL 1 HOUR), DATE_SUB(NOW(), INTERVAL 1 HOUR)), - ('ORD202603110005', NULL, (SELECT id FROM users WHERE username = 'testuser1'), 1, NULL, 2, 11798.00, 2, 1, '测试用户一', '13800138003', '广东省 深圳市 南山区 科技园科苑路 18 号', '多商品主订单', 'ONLINE', DATE_SUB(NOW(), INTERVAL 5 HOUR), NULL, NULL, DATE_SUB(NOW(), INTERVAL 5 HOUR), DATE_SUB(NOW(), INTERVAL 5 HOUR)); - --- ================================ --- 6. 订单明细 --- ================================ -INSERT INTO order_items (order_id, product_id, product_name, product_image_url, price, quantity, subtotal, created_at) -SELECT o.id, 9, '深入理解Java虚拟机', '/images/default-product.svg', 89.00, 1, 89.00, o.created_at FROM orders o WHERE o.order_no = 'ORD202603110001' -UNION ALL -SELECT o.id, 4, 'AirPods Pro 2', '/images/default-product.svg', 1899.00, 1, 1899.00, o.created_at FROM orders o WHERE o.order_no = 'ORD202603110002' -UNION ALL -SELECT o.id, 10, '五常大米 10kg', '/images/default-product.svg', 168.00, 1, 168.00, o.created_at FROM orders o WHERE o.order_no = 'ORD202603110003' -UNION ALL -SELECT o.id, 4, 'AirPods Pro 2', '/images/default-product.svg', 1299.00, 1, 1299.00, o.created_at FROM orders o WHERE o.order_no = 'ORD202603110004' -UNION ALL -SELECT o.id, 1, 'iPhone 15 Pro Max', '/images/iphone15.svg', 9999.00, 1, 9999.00, o.created_at FROM orders o WHERE o.order_no = 'ORD202603110005' -UNION ALL -SELECT o.id, 9, '深入理解Java虚拟机', '/images/default-product.svg', 89.00, 2, 178.00, o.created_at FROM orders o WHERE o.order_no = 'ORD202603110005' -UNION ALL -SELECT o.id, 10, '五常大米 10kg', '/images/default-product.svg', 168.00, 1, 168.00, o.created_at FROM orders o WHERE o.order_no = 'ORD202603110005' -UNION ALL -SELECT o.id, 4, 'AirPods Pro 2', '/images/default-product.svg', 1899.00, 1, 1899.00, o.created_at FROM orders o WHERE o.order_no = 'ORD202603110005'; - --- ================================ --- 7. 评价 --- ================================ -INSERT INTO product_reviews (product_id, user_id, order_id, rating, content, status, admin_reply, replied_at, created_at, updated_at) -VALUES - (9, (SELECT id FROM users WHERE username = 'demo1'), (SELECT id FROM orders WHERE order_no = 'ORD202603110001'), 5, '内容很扎实,适合深入学习 JVM。', 1, '感谢支持,后续会持续补充相关图书。', NOW(), DATE_SUB(NOW(), INTERVAL 1 DAY), NOW()), - (4, (SELECT id FROM users WHERE username = 'demo1'), (SELECT id FROM orders WHERE order_no = 'ORD202603110002'), 4, '耳机效果不错,降噪很明显。', 1, NULL, NULL, DATE_SUB(NOW(), INTERVAL 12 HOUR), DATE_SUB(NOW(), INTERVAL 12 HOUR)); - --- ================================ --- 8. 收藏 --- ================================ -INSERT INTO user_favorites (user_id, product_id, created_at) -VALUES - ((SELECT id FROM users WHERE username = 'demo1'), 1, NOW()), - ((SELECT id FROM users WHERE username = 'demo1'), 4, NOW()), - ((SELECT id FROM users WHERE username = 'demo2'), 2, NOW()), - ((SELECT id FROM users WHERE username = 'testuser1'), 9, NOW());