Files
2026-08-14 10:55:06 +08:00

281 lines
14 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =================================
-- 自由云商城 数据库结构 + 初始数据
-- 安装程序会自动把 __PREFIX__ 替换为用户填写的表前缀
-- 编码:utf8mb4 / InnoDB
-- =================================
-- 用户表(普通用户与后台管理员共用,is_admin=1 为管理员;status=0 表示被封禁)
CREATE TABLE `__PREFIX__users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`email` VARCHAR(120) NOT NULL DEFAULT '',
`is_admin` TINYINT(1) NOT NULL DEFAULT 0,
`role` VARCHAR(10) NOT NULL DEFAULT 'user' COMMENT 'admin管理员 cs客服 user普通用户(后台登录用 role IN admin/cs',
`avatar` VARCHAR(255) DEFAULT '' COMMENT '头像文件路径',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1正常 0已封禁',
`nickname` VARCHAR(60) NOT NULL DEFAULT '' COMMENT '昵称',
`verified` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '邮箱是否验证 0未验证 1已验证',
`email_token` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '邮箱验证令牌',
`reg_ip` VARCHAR(45) NOT NULL DEFAULT '' COMMENT '注册 IP(限频用)',
`points` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '积分余额',
`invite_code` VARCHAR(12) NOT NULL DEFAULT '' COMMENT '我的邀请码(唯一,用于邀请奖励)',
`invited_by` INT UNSIGNED DEFAULT NULL COMMENT '邀请人 user_id(通过邀请注册时记录)',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
UNIQUE KEY `uk_invite_code` (`invite_code`),
KEY `idx_invited_by` (`invited_by`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 商品表
CREATE TABLE `__PREFIX__products` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(120) NOT NULL,
`price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`stock` INT UNSIGNED NOT NULL DEFAULT 0,
`category` VARCHAR(40) NOT NULL DEFAULT '其他',
`icon` VARCHAR(40) NOT NULL DEFAULT 'fa-box',
`image` VARCHAR(255) DEFAULT '',
`description` TEXT,
`period_days` INT NOT NULL DEFAULT 0 COMMENT '周期天数:0=一次性/实物,>0=按天计的周期商品(如 30/90/365',
`points_price` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '积分价:0=不可用积分购买,>0=可用该积分数购买',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1上架 0下架',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_category` (`category`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 商品分组(后台可增删,用于首页分类筛选与商品归类)
CREATE TABLE `__PREFIX__product_groups` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(40) NOT NULL,
`icon` VARCHAR(40) NOT NULL DEFAULT 'fa-tags',
`sort_order` INT NOT NULL DEFAULT 0,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 订单表(status: pending待付款 paid已付款 shipped已发货 completed已完成 cancelled已取消)
CREATE TABLE `__PREFIX__orders` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_no` VARCHAR(32) NOT NULL,
`user_id` INT UNSIGNED NOT NULL,
`total` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`status` VARCHAR(20) NOT NULL DEFAULT 'pending',
`contact` VARCHAR(60) DEFAULT '',
`contact_email` VARCHAR(120) DEFAULT '' COMMENT '联系邮箱(下单人填写)',
`address` VARCHAR(255) DEFAULT '',
`note` VARCHAR(255) DEFAULT '',
`period_days` INT NOT NULL DEFAULT 0 COMMENT '本单周期天数(取商品最大值)',
`expires_at` DATETIME DEFAULT NULL COMMENT '到期时间(周期商品有值)',
`expire_notify_sent` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '到期前提醒邮件是否已发送 0未发 1已发',
`pay_type` VARCHAR(10) NOT NULL DEFAULT 'cash' COMMENT 'cash现金 points积分支付',
`points_used` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '积分支付时扣减的积分数',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_no` (`order_no`),
KEY `idx_user` (`user_id`),
KEY `idx_expires` (`expires_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 订单明细表
CREATE TABLE `__PREFIX__order_items` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_id` INT UNSIGNED NOT NULL,
`product_id` INT UNSIGNED NOT NULL,
`name` VARCHAR(120) NOT NULL,
`price` DECIMAL(10,2) NOT NULL,
`qty` INT UNSIGNED NOT NULL,
`subtotal` DECIMAL(10,2) NOT NULL,
`period_days` INT NOT NULL DEFAULT 0 COMMENT '下单时商品的周期天数',
PRIMARY KEY (`id`),
KEY `idx_order` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 发货信息表(管理员发货时填写:连接信息/登录凭据)
CREATE TABLE `__PREFIX__order_deliveries` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_id` INT UNSIGNED NOT NULL,
`server_ip` VARCHAR(60) DEFAULT '' COMMENT '服务器 IP',
`conn_addr` VARCHAR(255) DEFAULT '' COMMENT '连接地址/域名',
`login_user` VARCHAR(120) DEFAULT '' COMMENT '登录账户',
`login_pass` VARCHAR(255) DEFAULT '' COMMENT '登录密码',
`remark` TEXT,
`activated` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '激活状态:0未激活 1已激活(管理员填写,用户端展示)',
`product_info` TEXT COMMENT '商品信息(管理员填写后展示给用户)',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_order` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 系统设置表(SMTP 等键值对)
CREATE TABLE `__PREFIX__settings` (
`k` VARCHAR(64) NOT NULL,
`v` TEXT,
PRIMARY KEY (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 工单部门表
CREATE TABLE `__PREFIX__ticket_departments` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(60) NOT NULL,
`description` VARCHAR(255) DEFAULT '',
`sort` INT NOT NULL DEFAULT 0,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 工单表
CREATE TABLE `__PREFIX__tickets` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED NOT NULL,
`dept_id` INT UNSIGNED NOT NULL DEFAULT 0,
`order_id` INT UNSIGNED DEFAULT NULL COMMENT '关联订单(续期工单用)',
`type` VARCHAR(20) NOT NULL DEFAULT 'general' COMMENT 'general普通 renewal续期申请',
`subject` VARCHAR(160) NOT NULL,
`message` TEXT NOT NULL,
`status` VARCHAR(20) NOT NULL DEFAULT 'open' COMMENT 'open待处理 pending处理中 resolved已解决 closed已关闭',
`priority` TINYINT(1) NOT NULL DEFAULT 2 COMMENT '1低 2普通 3高',
`admin_reply` TEXT,
`admin_id` INT UNSIGNED DEFAULT NULL,
`assignee_id` INT UNSIGNED DEFAULT NULL COMMENT '负责人(客服/管理员)用户ID,NULL=未分配(仅管理员可见)',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`closed_at` DATETIME DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_user` (`user_id`),
KEY `idx_dept` (`dept_id`),
KEY `idx_order` (`order_id`),
KEY `idx_assignee` (`assignee_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 工单回复表(多轮对话,is_admin=1 表示客服/管理员回复)
CREATE TABLE `__PREFIX__ticket_replies` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`ticket_id` INT UNSIGNED NOT NULL,
`user_id` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '回复人 user_id(管理员/客服回复时填其 id,用户回复时填下单用户 id)',
`is_admin` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1=管理员/客服回复 0=用户回复',
`message` TEXT NOT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_ticket` (`ticket_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 公告中心
CREATE TABLE `__PREFIX__announcements` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`title` VARCHAR(160) NOT NULL,
`content` TEXT NOT NULL,
`pinned` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1置顶',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1显示 0隐藏',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_pinned` (`pinned`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 积分流水表(签到 / 邀请 / 消费 / 后台调整 等记录)
CREATE TABLE `__PREFIX__points_log` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED NOT NULL,
`type` VARCHAR(20) NOT NULL DEFAULT 'sign' COMMENT 'sign签到 invite邀请 purchase消费 admin后台调整 refund退还',
`amount` INT NOT NULL DEFAULT 0 COMMENT '变动量:正=增加 负=扣减',
`balance` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '变动后余额',
`remark` VARCHAR(255) DEFAULT '',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 每日签到记录(每人每天一条,防止重复签到)
CREATE TABLE `__PREFIX__sign_logs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED NOT NULL,
`sign_date` DATE NOT NULL,
`points` INT UNSIGNED NOT NULL DEFAULT 0,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_date` (`user_id`, `sign_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ============================================================
-- 初始示例商品(分类:周边 / 数码 / 虚拟 / 图书)
-- ============================================================
INSERT INTO `__PREFIX__products` (`name`, `price`, `stock`, `category`, `icon`, `image`, `description`) VALUES
('自由云定制帆布包', 39.00, 100, '周边', 'fa-shopping-bag', '', '印有自由云科技团队 Logo 的环保帆布包,简约实用,容量充足。'),
('自由云贴纸套装', 9.90, 500, '周边', 'fa-sticky-note', '', '多种尺寸防水贴纸,装点你的电脑、水杯与笔记本。'),
('机械键盘 87 键', 199.00, 50, '数码', 'fa-keyboard', '', '热插拔轴体,RGB 背光,打字手感顺滑,附赠拔轴器。'),
('10000mAh 移动电源', 79.00, 80, '数码', 'fa-battery-full', '', '轻薄便携,支持双向快充,可为手机平板多次续电。'),
('MC 服务器 VIP 月卡', 12.00, 9999, '虚拟', 'fa-cube', '', '自由 MC 服务器专属 VIP 月卡,享优先进入与专属昵称色。'),
('图床扩容包 10GB', 5.00, 9999, '虚拟', 'fa-images', '', '为你的公益图床账号扩容 10GB 存储空间。'),
('《从零学 PHP》实体书', 49.00, 30, '图书', 'fa-book', '', '面向中学生的 PHP 入门教程,案例丰富、通俗易懂。'),
('《网络安全小百科》', 35.00, 40, '图书', 'fa-shield-alt', '', '图文并茂的网络安全科普读物,适合青少年阅读。');
-- =======================
-- 初始商品分组(与上面商品 category 对应:周边 / 数码 / 虚拟 / 图书)
-- =======================
INSERT INTO `__PREFIX__product_groups` (`name`, `icon`, `sort_order`) VALUES
('周边', 'fa-shopping-bag', 1),
('数码', 'fa-microchip', 2),
('虚拟', 'fa-cube', 3),
('图书', 'fa-book', 4);
-- =====================
-- 初始工单部门
-- =====================
INSERT INTO `__PREFIX__ticket_departments` (`name`, `description`, `sort`) VALUES
('技术支持', '产品使用、功能咨询', 1),
('售后服务', '退换货、订单与物流问题', 2),
('财务与支付', '发票、支付异常', 3),
('其他', '其他无法归类的问题', 9);
-- =======================
-- 初始系统设置(SMTP 留空,安装后在后台「设置」中填写)
-- =======================
INSERT INTO `__PREFIX__settings` (`k`, `v`) VALUES
('smtp_host', ''),
('smtp_port', ''),
('smtp_enc', ''),
('smtp_user', ''),
('smtp_pass', ''),
('smtp_from', ''),
('smtp_fromname', '自由云商城'),
('notify_emails', ''),
('mall_about', '自由云商城是自由云科技团队旗下的公益电商,坚持「公益 · 实惠 · 用心挑选」的理念,为社区提供周边、数码、虚拟服务与图书等好物。所有收益用于支持团队的公益技术服务。'),
('points_enabled', '1'),
('points_sign', '5'),
('points_invite', '20');
-- 支付日志表(记录支付宝/微信支付流水)
CREATE TABLE `__PREFIX__pay_logs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_id` VARCHAR(64) NOT NULL COMMENT '商户订单号',
`pay_method` VARCHAR(20) NOT NULL DEFAULT 'alipay' COMMENT 'alipay / wechat',
`amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '支付金额',
`trade_no` VARCHAR(64) DEFAULT '' COMMENT '第三方交易号',
`status` ENUM('pending','paid','failed','refunded') NOT NULL DEFAULT 'pending',
`raw_response TEXT DEFAULT NULL COMMENT '原始回调数据(调试用)',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_method` (`order_id`, `pay_method`),
KEY `idx_status` (`status`),
KEY `idx_trade_no` (`trade_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 支付配置初始值
INSERT INTO `__PREFIX__settings` (`k`, `v`) VALUES
('pay_alipay_enabled', '0'),
('pay_alipay_appid', ''),
('pay_alipay_private_key',''),
('pay_alipay_public_key', ''),
('pay_alipay_sandbox', '0'),
('pay_wechat_enabled', '0'),
('pay_wechat_mch_id', ''),
('pay_wechat_api_key', ''),
('pay_wechat_appid', '');