删除无用信息
This commit is contained in:
@@ -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();
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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());
|
||||
Reference in New Issue
Block a user