Files
app-java/docs/db_paopao_v2.sql
2026-05-08 17:07:33 +08:00

1027 lines
53 KiB
SQL
Raw 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.

/*
paopao 电商系统数据库设计
适配功能明细.md + 核心业务流程整理.md
更新版本: 2026-05-08
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- =============================================
-- 一、用户模块
-- =============================================
-- 用户表
DROP TABLE IF EXISTS `app_user`;
CREATE TABLE `app_user` (
`user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`openid` varchar(100) DEFAULT NULL COMMENT '微信openid',
`unionid` varchar(100) DEFAULT NULL COMMENT '微信unionid',
`nickname` varchar(100) DEFAULT NULL COMMENT '昵称',
`avatar` varchar(500) DEFAULT NULL COMMENT '头像',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号',
`gender` tinyint DEFAULT '0' COMMENT '性别: 0未知 1男 2女',
`birthday` date DEFAULT NULL COMMENT '生日',
`balance` decimal(15,2) DEFAULT '0.00' COMMENT '余额',
`points` int DEFAULT '0' COMMENT '积分',
`member_level_id` int DEFAULT NULL COMMENT '会员等级ID',
`member_expire_time` datetime DEFAULT NULL COMMENT '会员到期时间',
`inviter_id` bigint DEFAULT NULL COMMENT '邀请人用户ID',
`display_id` varchar(20) DEFAULT NULL COMMENT '显示ID(用户专属推广码)',
`status` tinyint DEFAULT '1' COMMENT '状态: 0禁用 1正常',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`register_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
`last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`user_id`),
UNIQUE KEY `uk_openid` (`openid`),
UNIQUE KEY `uk_phone` (`phone`),
UNIQUE KEY `uk_display_id` (`display_id`),
KEY `idx_inviter_id` (`inviter_id`),
KEY `idx_member_level` (`member_level_id`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';
-- 用户地址表
DROP TABLE IF EXISTS `app_user_address`;
CREATE TABLE `app_user_address` (
`address_id` bigint NOT NULL AUTO_INCREMENT COMMENT '地址ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`consignee` varchar(50) NOT NULL COMMENT '收货人姓名',
`phone` varchar(20) NOT NULL COMMENT '收货人电话',
`province` varchar(50) DEFAULT NULL COMMENT '省份',
`city` varchar(50) DEFAULT NULL COMMENT '城市',
`district` varchar(50) DEFAULT NULL COMMENT '区/县',
`detail` varchar(200) NOT NULL COMMENT '详细地址',
`is_default` tinyint DEFAULT '0' COMMENT '是否默认: 0否 1是',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`address_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_is_default` (`is_default`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户地址表';
-- 会员等级表
DROP TABLE IF EXISTS `app_member_level`;
CREATE TABLE `app_member_level` (
`level_id` int NOT NULL AUTO_INCREMENT COMMENT '等级ID',
`level_name` varchar(50) NOT NULL COMMENT '等级名称',
`level_code` varchar(20) DEFAULT NULL COMMENT '等级编码',
`price` decimal(10,2) NOT NULL COMMENT '开通价格(注册费)',
`member_fee` decimal(10,2) DEFAULT '0.00' COMMENT '下级会员费(会员收取下级的费用)',
`duration_days` int DEFAULT NULL COMMENT '时长(天),NULL表示永久',
`discount_rate` decimal(5,2) DEFAULT '100.00' COMMENT '折扣率(%)',
`commission_rate` decimal(5,2) DEFAULT '0.00' COMMENT '分销佣金比例(%)',
`description` varchar(500) DEFAULT NULL COMMENT '等级描述',
`privileges` text COMMENT '会员权益(JSON)',
`sort_number` int DEFAULT '0' COMMENT '排序号',
`status` tinyint DEFAULT '1' COMMENT '状态: 0禁用 1启用',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`level_id`),
UNIQUE KEY `uk_level_code` (`level_code`),
KEY `idx_status` (`status`),
KEY `idx_sort_number` (`sort_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='会员等级表';
-- 用户会员购买记录表
DROP TABLE IF EXISTS `app_user_member_order`;
CREATE TABLE `app_user_member_order` (
`order_id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单ID',
`order_no` varchar(64) NOT NULL COMMENT '订单编号',
`user_id` bigint NOT NULL COMMENT '用户ID',
`level_id` int NOT NULL COMMENT '会员等级ID',
`level_name` varchar(50) DEFAULT NULL COMMENT '等级名称(冗余)',
`price` decimal(10,2) NOT NULL COMMENT '支付金额(注册费)',
`pay_type` tinyint DEFAULT '0' COMMENT '支付方式: 0余额 1微信 2支付宝',
`pay_status` tinyint DEFAULT '0' COMMENT '支付状态: 0未支付 1已支付',
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`transaction_id` varchar(128) DEFAULT NULL COMMENT '第三方交易号',
`start_time` datetime DEFAULT NULL COMMENT '开始时间',
`expire_time` datetime DEFAULT NULL COMMENT '到期时间',
`status` tinyint DEFAULT '0' COMMENT '状态: 0待支付 1已支付 2已取消',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`order_id`),
UNIQUE KEY `uk_order_no` (`order_no`),
KEY `idx_user_id` (`user_id`),
KEY `idx_level_id` (`level_id`),
KEY `idx_pay_status` (`pay_status`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户会员购买记录表';
-- 会员推广下级记录表(会员录入下级手机号)
DROP TABLE IF EXISTS `app_member_subordinate`;
CREATE TABLE `app_member_subordinate` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`member_id` bigint NOT NULL COMMENT '会员ID(上级)',
`sub_phone` varchar(20) NOT NULL COMMENT '下级手机号',
`sub_user_id` bigint DEFAULT NULL COMMENT '下级用户ID(注册后填充)',
`member_fee` decimal(10,2) NOT NULL COMMENT '收取的下级会员费',
`fee_paid` tinyint DEFAULT '0' COMMENT '会员费是否已收: 0未确认 1已确认',
`register_status` tinyint DEFAULT '0' COMMENT '注册状态: 0待注册 1已注册',
`status` tinyint DEFAULT '0' COMMENT '状态: 0待处理 1已完成 2已取消',
`remark` varchar(200) DEFAULT NULL COMMENT '备注',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_member_id` (`member_id`),
KEY `idx_sub_phone` (`sub_phone`),
KEY `idx_sub_user_id` (`sub_user_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='会员推广下级记录表';
-- =============================================
-- 二、商品模块
-- =============================================
-- 商品分类表(三级分类)
DROP TABLE IF EXISTS `app_product_category`;
CREATE TABLE `app_product_category` (
`category_id` int NOT NULL AUTO_INCREMENT COMMENT '分类ID',
`category_name` varchar(100) NOT NULL COMMENT '分类名称',
`parent_id` int DEFAULT '0' COMMENT '父级分类ID,0表示一级分类',
`level` tinyint DEFAULT '1' COMMENT '分类层级: 1一级 2二级 3三级',
`image` varchar(500) DEFAULT NULL COMMENT '分类图片',
`sort_number` int DEFAULT '0' COMMENT '排序号',
`is_show` tinyint DEFAULT '1' COMMENT '是否显示: 0否 1是',
`is_recommend` tinyint DEFAULT '0' COMMENT '是否推荐: 0否 1是',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`category_id`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_level` (`level`),
KEY `idx_is_show` (`is_show`),
KEY `idx_sort_number` (`sort_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品分类表(三级分类)';
-- 商品品牌表
DROP TABLE IF EXISTS `app_product_brand`;
CREATE TABLE `app_product_brand` (
`brand_id` int NOT NULL AUTO_INCREMENT COMMENT '品牌ID',
`brand_name` varchar(100) NOT NULL COMMENT '品牌名称',
`brand_logo` varchar(500) DEFAULT NULL COMMENT '品牌LOGO',
`sort_number` int DEFAULT '0' COMMENT '排序号',
`is_show` tinyint DEFAULT '1' COMMENT '是否显示: 0否 1是',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`brand_id`),
KEY `idx_is_show` (`is_show`),
KEY `idx_sort_number` (`sort_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品品牌表';
-- 商品规格表
DROP TABLE IF EXISTS `app_product_spec`;
CREATE TABLE `app_product_spec` (
`spec_id` int NOT NULL AUTO_INCREMENT COMMENT '规格ID',
`spec_name` varchar(50) NOT NULL COMMENT '规格名称(如:颜色、尺码)',
`sort_number` int DEFAULT '0' COMMENT '排序号',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`spec_id`),
KEY `idx_sort_number` (`sort_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品规格表';
-- 商品规格值表
DROP TABLE IF EXISTS `app_product_spec_value`;
CREATE TABLE `app_product_spec_value` (
`value_id` int NOT NULL AUTO_INCREMENT COMMENT '规格值ID',
`spec_id` int NOT NULL COMMENT '规格ID',
`spec_value` varchar(100) NOT NULL COMMENT '规格值(如:红色、XL)',
`sort_number` int DEFAULT '0' COMMENT '排序号',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`value_id`),
KEY `idx_spec_id` (`spec_id`),
KEY `idx_sort_number` (`sort_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品规格值表';
-- 商品表
DROP TABLE IF EXISTS `app_product`;
CREATE TABLE `app_product` (
`product_id` bigint NOT NULL AUTO_INCREMENT COMMENT '商品ID',
`product_name` varchar(200) NOT NULL COMMENT '商品名称',
`product_code` varchar(100) DEFAULT NULL COMMENT '商品编码',
`category_id` int DEFAULT NULL COMMENT '三级分类ID',
`brand_id` int DEFAULT NULL COMMENT '品牌ID',
`main_image` varchar(500) NOT NULL COMMENT '主图',
`images` text COMMENT '商品图片(JSON数组)',
`video_url` varchar(500) DEFAULT NULL COMMENT '商品视频URL',
`price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '售价',
`market_price` decimal(10,2) DEFAULT NULL COMMENT '市场价/划线价',
`cost_price` decimal(10,2) DEFAULT NULL COMMENT '成本价',
`stock` int DEFAULT '0' COMMENT '总库存',
`sales` int DEFAULT '0' COMMENT '销量',
`description` longtext COMMENT '商品详情',
`spec_type` tinyint DEFAULT '0' COMMENT '规格类型: 0单规格 1多规格',
`commission_rate` decimal(5,2) DEFAULT '0.00' COMMENT '分销佣金比例(%)',
`points_give` int DEFAULT '0' COMMENT '赠送积分',
`is_hot` tinyint DEFAULT '0' COMMENT '是否热销: 0否 1是',
`is_recommend` tinyint DEFAULT '0' COMMENT '是否推荐: 0否 1是',
`is_new` tinyint DEFAULT '0' COMMENT '是否新品: 0否 1是',
`status` tinyint DEFAULT '1' COMMENT '状态: 0下架 1上架',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`sort_number` int DEFAULT '0' COMMENT '排序号',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`product_id`),
UNIQUE KEY `uk_product_code` (`product_code`),
KEY `idx_category_id` (`category_id`),
KEY `idx_brand_id` (`brand_id`),
KEY `idx_status` (`status`),
KEY `idx_is_hot` (`is_hot`),
KEY `idx_is_recommend` (`is_recommend`),
KEY `idx_sales` (`sales`),
KEY `idx_sort_number` (`sort_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品表';
-- 商品SKU表多规格
DROP TABLE IF EXISTS `app_product_sku`;
CREATE TABLE `app_product_sku` (
`sku_id` bigint NOT NULL AUTO_INCREMENT COMMENT 'SKU ID',
`product_id` bigint NOT NULL COMMENT '商品ID',
`sku_code` varchar(100) DEFAULT NULL COMMENT 'SKU编码',
`spec_json` text COMMENT '规格组合JSON(如: [{"spec_name":"颜色","spec_value":"红色"},...])',
`price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '售价',
`market_price` decimal(10,2) DEFAULT NULL COMMENT '市场价',
`stock` int DEFAULT '0' COMMENT '库存',
`sales` int DEFAULT '0' COMMENT '销量',
`image` varchar(500) DEFAULT NULL COMMENT 'SKU图片',
`status` tinyint DEFAULT '1' COMMENT '状态: 0禁用 1启用',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`sku_id`),
UNIQUE KEY `uk_sku_code` (`sku_code`),
KEY `idx_product_id` (`product_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品SKU表多规格';
-- =============================================
-- 三、订单模块
-- =============================================
-- 购物车表
DROP TABLE IF EXISTS `app_cart`;
CREATE TABLE `app_cart` (
`cart_id` bigint NOT NULL AUTO_INCREMENT COMMENT '购物车ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`product_id` bigint NOT NULL COMMENT '商品ID',
`sku_id` bigint DEFAULT NULL COMMENT 'SKU ID,单规格为NULL',
`quantity` int NOT NULL DEFAULT '1' COMMENT '数量',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`cart_id`),
UNIQUE KEY `uk_user_product_sku` (`user_id`,`product_id`,`sku_id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='购物车表';
-- 订单表
DROP TABLE IF EXISTS `app_order`;
CREATE TABLE `app_order` (
`order_id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单ID',
`order_no` varchar(64) NOT NULL COMMENT '订单编号',
`user_id` bigint NOT NULL COMMENT '用户ID',
`total_amount` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '订单总金额',
`discount_amount` decimal(15,2) DEFAULT '0.00' COMMENT '优惠金额(优惠券等)',
`shipping_fee` decimal(10,2) DEFAULT '0.00' COMMENT '运费',
`pay_amount` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '实际支付金额',
`points_used` int DEFAULT '0' COMMENT '使用积分',
`points_discount` decimal(10,2) DEFAULT '0.00' COMMENT '积分抵扣金额',
`coupon_id` bigint DEFAULT NULL COMMENT '使用优惠券ID',
`coupon_discount` decimal(10,2) DEFAULT '0.00' COMMENT '优惠券优惠金额',
`pay_type` tinyint DEFAULT '0' COMMENT '支付方式: 0余额 1微信 2支付宝',
`pay_status` tinyint DEFAULT '0' COMMENT '支付状态: 0未支付 1已支付 2已退款',
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`transaction_id` varchar(128) DEFAULT NULL COMMENT '第三方交易号',
`order_status` tinyint DEFAULT '0' COMMENT '订单状态: 0待支付 1待发货 2待收货 3已完成 4已取消 5已关闭 6退款中 7已退款',
`shipping_name` varchar(50) DEFAULT NULL COMMENT '快递公司',
`shipping_no` varchar(100) DEFAULT NULL COMMENT '快递单号',
`shipping_time` datetime DEFAULT NULL COMMENT '发货时间',
`receive_time` datetime DEFAULT NULL COMMENT '收货时间',
`cancel_time` datetime DEFAULT NULL COMMENT '取消时间',
`cancel_reason` varchar(200) DEFAULT NULL COMMENT '取消原因',
`address_id` bigint DEFAULT NULL COMMENT '收货地址ID',
`consignee` varchar(50) DEFAULT NULL COMMENT '收货人姓名',
`consignee_phone` varchar(20) DEFAULT NULL COMMENT '收货人电话',
`consignee_address` varchar(500) DEFAULT NULL COMMENT '收货地址',
`remark` varchar(500) DEFAULT NULL COMMENT '订单备注',
`commission_status` tinyint DEFAULT '0' COMMENT '佣金结算状态: 0未结算 1已结算',
`commission_amount` decimal(15,2) DEFAULT '0.00' COMMENT '佣金总额',
`aftersale_end_time` datetime DEFAULT NULL COMMENT '售后期结束时间',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`order_id`),
UNIQUE KEY `uk_order_no` (`order_no`),
KEY `idx_user_id` (`user_id`),
KEY `idx_pay_status` (`pay_status`),
KEY `idx_order_status` (`order_status`),
KEY `idx_commission_status` (`commission_status`),
KEY `idx_create_time` (`create_time`),
KEY `idx_pay_time` (`pay_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订单表';
-- 订单商品表
DROP TABLE IF EXISTS `app_order_item`;
CREATE TABLE `app_order_item` (
`item_id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单商品ID',
`order_id` bigint NOT NULL COMMENT '订单ID',
`product_id` bigint NOT NULL COMMENT '商品ID',
`product_name` varchar(200) DEFAULT NULL COMMENT '商品名称(冗余)',
`sku_id` bigint DEFAULT NULL COMMENT 'SKU ID',
`spec_json` text COMMENT '规格组合JSON(冗余)',
`price` decimal(10,2) NOT NULL COMMENT '商品单价',
`quantity` int NOT NULL COMMENT '购买数量',
`total_price` decimal(15,2) NOT NULL COMMENT '商品总价',
`image` varchar(500) DEFAULT NULL COMMENT '商品图片(冗余)',
`commission_rate` decimal(5,2) DEFAULT '0.00' COMMENT '佣金比例(%)',
`commission_amount` decimal(10,2) DEFAULT '0.00' COMMENT '佣金金额',
`refund_status` tinyint DEFAULT '0' COMMENT '退款状态: 0无退款 1申请退款 2退款中 3已退款',
`refund_amount` decimal(10,2) DEFAULT '0.00' COMMENT '退款金额',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`item_id`),
KEY `idx_order_id` (`order_id`),
KEY `idx_product_id` (`product_id`),
KEY `idx_refund_status` (`refund_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订单商品表';
-- 订单支付记录表
DROP TABLE IF EXISTS `app_order_payment`;
CREATE TABLE `app_order_payment` (
`payment_id` bigint NOT NULL AUTO_INCREMENT COMMENT '支付记录ID',
`order_id` bigint NOT NULL COMMENT '订单ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`pay_amount` decimal(15,2) NOT NULL COMMENT '支付金额',
`pay_type` tinyint NOT NULL COMMENT '支付方式: 0余额 1微信 2支付宝',
`pay_status` tinyint DEFAULT '0' COMMENT '支付状态: 0失败 1成功',
`transaction_id` varchar(128) DEFAULT NULL COMMENT '第三方交易号',
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`payment_id`),
KEY `idx_order_id` (`order_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_pay_status` (`pay_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订单支付记录表';
-- 退款/售后表
DROP TABLE IF EXISTS `app_order_refund`;
CREATE TABLE `app_order_refund` (
`refund_id` bigint NOT NULL AUTO_INCREMENT COMMENT '退款ID',
`refund_no` varchar(64) NOT NULL COMMENT '退款单号',
`order_id` bigint NOT NULL COMMENT '订单ID',
`order_item_id` bigint DEFAULT NULL COMMENT '订单商品ID(部分退款)',
`user_id` bigint NOT NULL COMMENT '用户ID',
`refund_amount` decimal(10,2) NOT NULL COMMENT '退款金额',
`refund_reason` varchar(500) DEFAULT NULL COMMENT '退款原因',
`refund_desc` text COMMENT '退款说明',
`images` text COMMENT '凭证图片(JSON数组)',
`refund_status` tinyint DEFAULT '0' COMMENT '退款状态: 0待审核 1审核通过 2审核拒绝 3退款中 4已退款 5已关闭',
`review_time` datetime DEFAULT NULL COMMENT '审核时间',
`review_note` varchar(500) DEFAULT NULL COMMENT '审核备注',
`refund_time` datetime DEFAULT NULL COMMENT '退款完成时间',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`refund_id`),
UNIQUE KEY `uk_refund_no` (`refund_no`),
KEY `idx_order_id` (`order_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_refund_status` (`refund_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='退款/售后表';
-- =============================================
-- 四、积分与营销模块
-- =============================================
-- 积分记录表
DROP TABLE IF EXISTS `app_points_record`;
CREATE TABLE `app_points_record` (
`record_id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`points` int NOT NULL COMMENT '积分变动(正数为获得,负数为消费)',
`balance` int DEFAULT '0' COMMENT '变动后余额',
`type` varchar(20) NOT NULL COMMENT '类型: signin签到 shop购物 consume消费 refund退款 admin管理员操作',
`relation_id` bigint DEFAULT NULL COMMENT '关联ID(订单ID等)',
`remark` varchar(200) DEFAULT NULL COMMENT '备注',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`record_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_type` (`type`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='积分记录表';
-- 签到记录表
DROP TABLE IF EXISTS `app_signin_record`;
CREATE TABLE `app_signin_record` (
`record_id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`signin_date` date NOT NULL COMMENT '签到日期',
`points` int NOT NULL COMMENT '获得积分',
`continuous_days` int DEFAULT '1' COMMENT '连续签到天数',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`record_id`),
UNIQUE KEY `uk_user_date` (`user_id`,`signin_date`),
KEY `idx_user_id` (`user_id`),
KEY `idx_signin_date` (`signin_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='签到记录表';
-- 优惠券表
DROP TABLE IF EXISTS `app_coupon`;
CREATE TABLE `app_coupon` (
`coupon_id` bigint NOT NULL AUTO_INCREMENT COMMENT '优惠券ID',
`coupon_name` varchar(100) NOT NULL COMMENT '优惠券名称',
`type` tinyint NOT NULL COMMENT '类型: 1无门槛 2满减券 3折扣券 4场地使用券',
`discount_amount` decimal(10,2) DEFAULT NULL COMMENT '减免金额(满减券)',
`discount_rate` decimal(5,2) DEFAULT NULL COMMENT '折扣率(折扣券,如: 80表示8折)',
`min_amount` decimal(10,2) DEFAULT '0.00' COMMENT '最低消费金额',
`valid_days` int DEFAULT NULL COMMENT '领取后有效天数',
`start_time` datetime DEFAULT NULL COMMENT '有效期开始',
`end_time` datetime DEFAULT NULL COMMENT '有效期结束',
`total_count` int DEFAULT '0' COMMENT '发放总量,0表示不限',
`receive_count` int DEFAULT '0' COMMENT '已领取数量',
`per_limit` int DEFAULT '1' COMMENT '每人限领数量',
`is_member_only` tinyint DEFAULT '0' COMMENT '是否仅会员领取: 0否 1是',
`is_specified_user` tinyint DEFAULT '0' COMMENT '是否指定用户: 0否 1是',
`status` tinyint DEFAULT '1' COMMENT '状态: 0禁用 1启用',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`coupon_id`),
KEY `idx_type` (`type`),
KEY `idx_status` (`status`),
KEY `idx_start_time` (`start_time`),
KEY `idx_end_time` (`end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='优惠券表';
-- 用户优惠券表
DROP TABLE IF EXISTS `app_user_coupon`;
CREATE TABLE `app_user_coupon` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`coupon_id` bigint NOT NULL COMMENT '优惠券ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`coupon_name` varchar(100) DEFAULT NULL COMMENT '优惠券名称(冗余)',
`type` tinyint DEFAULT NULL COMMENT '类型(冗余)',
`discount_amount` decimal(10,2) DEFAULT NULL COMMENT '减免金额(冗余)',
`discount_rate` decimal(5,2) DEFAULT NULL COMMENT '折扣率(冗余)',
`min_amount` decimal(10,2) DEFAULT NULL COMMENT '最低消费金额(冗余)',
`status` tinyint DEFAULT '0' COMMENT '状态: 0未使用 1已使用 2已过期',
`use_time` datetime DEFAULT NULL COMMENT '使用时间',
`order_id` bigint DEFAULT NULL COMMENT '使用的订单ID',
`receive_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '领取时间',
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
`receive_type` tinyint DEFAULT '0' COMMENT '领取方式: 0主动领取 1后台发放 2活动奖励',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_coupon_id` (`coupon_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_status` (`status`),
KEY `idx_expire_time` (`expire_time`),
KEY `idx_receive_time` (`receive_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户优惠券表';
-- 优惠券指定用户表(后台定向发放)
DROP TABLE IF EXISTS `app_coupon_specified_user`;
CREATE TABLE `app_coupon_specified_user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`coupon_id` bigint NOT NULL COMMENT '优惠券ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`status` tinyint DEFAULT '0' COMMENT '发送状态: 0待发送 1已发送 2已拒绝',
`send_time` datetime DEFAULT NULL COMMENT '发送时间',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_coupon_id` (`coupon_id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='优惠券指定用户表';
-- 积分兑换商品表
DROP TABLE IF EXISTS `app_points_product`;
CREATE TABLE `app_points_product` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`product_name` varchar(200) NOT NULL COMMENT '商品名称',
`product_image` varchar(500) DEFAULT NULL COMMENT '商品图片',
`product_type` tinyint DEFAULT '0' COMMENT '商品类型: 0实物 1优惠券 2虚拟商品',
`coupon_id` bigint DEFAULT NULL COMMENT '优惠券ID(商品类型为优惠券时)',
`points_price` int NOT NULL COMMENT '兑换所需积分',
`money_price` decimal(10,2) DEFAULT '0.00' COMMENT '补差价金额',
`stock` int DEFAULT '0' COMMENT '库存',
`sales` int DEFAULT '0' COMMENT '兑换量',
`description` text COMMENT '商品描述',
`is_hot` tinyint DEFAULT '0' COMMENT '是否热门: 0否 1是',
`status` tinyint DEFAULT '1' COMMENT '状态: 0下架 1上架',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`sort_number` int DEFAULT '0' COMMENT '排序号',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_is_hot` (`is_hot`),
KEY `idx_sort_number` (`sort_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='积分兑换商品表';
-- 积分兑换订单表
DROP TABLE IF EXISTS `app_points_order`;
CREATE TABLE `app_points_order` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`order_no` varchar(64) NOT NULL COMMENT '订单编号',
`user_id` bigint NOT NULL COMMENT '用户ID',
`product_id` bigint NOT NULL COMMENT '积分商品ID',
`product_name` varchar(200) DEFAULT NULL COMMENT '商品名称(冗余)',
`points_price` int NOT NULL COMMENT '兑换积分',
`money_price` decimal(10,2) DEFAULT '0.00' COMMENT '补差价金额',
`pay_type` tinyint DEFAULT '0' COMMENT '支付方式: 0余额 1微信 2支付宝',
`pay_status` tinyint DEFAULT '0' COMMENT '支付状态: 0未支付 1已支付',
`order_status` tinyint DEFAULT '0' COMMENT '订单状态: 0待处理 1已发货 2已完成 3已取消',
`shipping_name` varchar(50) DEFAULT NULL COMMENT '快递公司',
`shipping_no` varchar(100) DEFAULT NULL COMMENT '快递单号',
`shipping_time` datetime DEFAULT NULL COMMENT '发货时间',
`receive_time` datetime DEFAULT NULL COMMENT '收货时间',
`address_id` bigint DEFAULT NULL COMMENT '收货地址ID',
`consignee` varchar(50) DEFAULT NULL COMMENT '收货人姓名',
`consignee_phone` varchar(20) DEFAULT NULL COMMENT '收货人电话',
`consignee_address` varchar(500) DEFAULT NULL COMMENT '收货地址',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_no` (`order_no`),
KEY `idx_user_id` (`user_id`),
KEY `idx_order_status` (`order_status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='积分兑换订单表';
-- =============================================
-- 五、会员分销模块
-- =============================================
-- 分销关系表
DROP TABLE IF EXISTS `app_distribution_relation`;
CREATE TABLE `app_distribution_relation` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`inviter_id` bigint NOT NULL COMMENT '邀请人ID',
`level` tinyint DEFAULT '1' COMMENT '关系层级: 1直接下级 2间接下级',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_inviter` (`user_id`,`inviter_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_inviter_id` (`inviter_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='分销关系表';
-- 佣金记录表
DROP TABLE IF EXISTS `app_commission_record`;
CREATE TABLE `app_commission_record` (
`record_id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录ID',
`user_id` bigint NOT NULL COMMENT '获得佣金的用户ID(上级)',
`from_user_id` bigint NOT NULL COMMENT '消费用户ID(下级)',
`order_id` bigint DEFAULT NULL COMMENT '订单ID',
`order_item_id` bigint DEFAULT NULL COMMENT '订单商品ID',
`product_id` bigint DEFAULT NULL COMMENT '商品ID',
`product_name` varchar(200) DEFAULT NULL COMMENT '商品名称',
`order_amount` decimal(15,2) DEFAULT '0.00' COMMENT '订单金额',
`commission_rate` decimal(5,2) DEFAULT '0.00' COMMENT '佣金比例(%)',
`commission_amount` decimal(15,2) NOT NULL COMMENT '佣金金额',
`status` tinyint DEFAULT '0' COMMENT '状态: 0待结算 1已结算 2已失效',
`settle_time` datetime DEFAULT NULL COMMENT '结算时间',
`order_settle_time` datetime DEFAULT NULL COMMENT '订单过售后期时间',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`record_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_from_user_id` (`from_user_id`),
KEY `idx_order_id` (`order_id`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`),
KEY `idx_settle_time` (`settle_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='佣金记录表';
-- 佣金提现表
DROP TABLE IF EXISTS `app_commission_withdraw`;
CREATE TABLE `app_commission_withdraw` (
`withdraw_id` bigint NOT NULL AUTO_INCREMENT COMMENT '提现ID',
`withdraw_no` varchar(64) NOT NULL COMMENT '提现单号',
`user_id` bigint NOT NULL COMMENT '用户ID',
`amount` decimal(15,2) NOT NULL COMMENT '提现金额',
`balance_before` decimal(15,2) DEFAULT '0.00' COMMENT '提现前余额',
`balance_after` decimal(15,2) DEFAULT '0.00' COMMENT '提现后余额',
`payee_account` varchar(100) DEFAULT NULL COMMENT '收款账号(微信openid等)',
`payee_name` varchar(50) DEFAULT NULL COMMENT '收款人姓名',
`status` tinyint DEFAULT '0' COMMENT '状态: 0待审核 1审核通过 2审核拒绝 3提现中 4已到账 5已取消',
`review_time` datetime DEFAULT NULL COMMENT '审核时间',
`review_note` varchar(500) DEFAULT NULL COMMENT '审核备注',
`transfer_time` datetime DEFAULT NULL COMMENT '转账时间',
`transaction_id` varchar(128) DEFAULT NULL COMMENT '第三方交易号',
`daily_limit` decimal(15,2) DEFAULT '2000.00' COMMENT '每日提现限额',
`single_limit` decimal(15,2) DEFAULT '200.00' COMMENT '单次提现限额(最低)',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`withdraw_id`),
UNIQUE KEY `uk_withdraw_no` (`withdraw_no`),
KEY `idx_user_id` (`user_id`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='佣金提现表';
-- =============================================
-- 六、活动与预约模块
-- =============================================
-- 活动表
DROP TABLE IF EXISTS `app_activity`;
CREATE TABLE `app_activity` (
`activity_id` bigint NOT NULL AUTO_INCREMENT COMMENT '活动ID',
`activity_name` varchar(200) NOT NULL COMMENT '活动名称',
`activity_type` tinyint DEFAULT '0' COMMENT '活动类型: 0比赛 1普通活动',
`image` varchar(500) DEFAULT NULL COMMENT '活动封面图',
`images` text COMMENT '活动图片(JSON数组)',
`content` longtext COMMENT '活动详情',
`start_time` datetime NOT NULL COMMENT '活动开始时间',
`end_time` datetime NOT NULL COMMENT '活动结束时间',
`signup_start` datetime DEFAULT NULL COMMENT '报名开始时间',
`signup_end` datetime DEFAULT NULL COMMENT '报名结束时间',
`max_participants` int DEFAULT '0' COMMENT '最大报名人数,0表示不限',
`max_teams` int DEFAULT '0' COMMENT '最大报名队伍数,0表示不限',
`current_participants` int DEFAULT '0' COMMENT '当前报名人数',
`price` decimal(10,2) DEFAULT '0.00' COMMENT '报名费用,0表示免费',
`size_options` text COMMENT '尺码选项JSON(比赛活动用,如: ["S","M","L","XL"])',
`required_fields` text COMMENT '必填项JSON(如: ["姓名","手机号","身份证"])',
`is_hot` tinyint DEFAULT '0' COMMENT '是否热门: 0否 1是',
`status` tinyint DEFAULT '1' COMMENT '状态: 0禁用 1启用',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`sort_number` int DEFAULT '0' COMMENT '排序号',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`activity_id`),
KEY `idx_activity_type` (`activity_type`),
KEY `idx_status` (`status`),
KEY `idx_is_hot` (`is_hot`),
KEY `idx_start_time` (`start_time`),
KEY `idx_end_time` (`end_time`),
KEY `idx_sort_number` (`sort_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='活动表';
-- 活动报名表
DROP TABLE IF EXISTS `app_activity_signup`;
CREATE TABLE `app_activity_signup` (
`signup_id` bigint NOT NULL AUTO_INCREMENT COMMENT '报名ID',
`activity_id` bigint NOT NULL COMMENT '活动ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`signup_data` text COMMENT '报名填写数据JSON(根据活动必填项)',
`size_option` varchar(20) DEFAULT NULL COMMENT '尺码选择(比赛活动)',
`pay_amount` decimal(10,2) DEFAULT '0.00' COMMENT '支付金额',
`pay_status` tinyint DEFAULT '0' COMMENT '支付状态: 0未支付 1已支付',
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`transaction_id` varchar(128) DEFAULT NULL COMMENT '第三方交易号',
`status` tinyint DEFAULT '0' COMMENT '状态: 0已报名 1已取消',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`signup_id`),
UNIQUE KEY `uk_activity_user` (`activity_id`,`user_id`),
KEY `idx_activity_id` (`activity_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_pay_status` (`pay_status`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='活动报名表';
-- 门店表
DROP TABLE IF EXISTS `app_store`;
CREATE TABLE `app_store` (
`store_id` bigint NOT NULL AUTO_INCREMENT COMMENT '门店ID',
`store_name` varchar(100) NOT NULL COMMENT '门店名称',
`address` varchar(500) NOT NULL COMMENT '门店地址',
`longitude` decimal(10,7) DEFAULT NULL COMMENT '经度',
`latitude` decimal(10,7) DEFAULT NULL COMMENT '纬度',
`phone` varchar(20) DEFAULT NULL COMMENT '联系电话',
`business_hours` varchar(200) DEFAULT NULL COMMENT '营业时间(如: 09:00-21:00)',
`description` text COMMENT '门店描述',
`images` text COMMENT '门店图片(JSON数组)',
`username` varchar(50) DEFAULT NULL COMMENT '登录账号',
`password` varchar(255) DEFAULT NULL COMMENT '登录密码(加密)',
`status` tinyint DEFAULT '1' COMMENT '状态: 0禁用 1启用',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`store_id`),
UNIQUE KEY `uk_username` (`username`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='门店表';
-- 穿线预约表
DROP TABLE IF EXISTS `app_stringing_appointment`;
CREATE TABLE `app_stringing_appointment` (
`appointment_id` bigint NOT NULL AUTO_INCREMENT COMMENT '预约ID',
`appointment_no` varchar(64) NOT NULL COMMENT '预约编号',
`user_id` bigint NOT NULL COMMENT '用户ID',
`store_id` bigint NOT NULL COMMENT '门店ID',
`store_name` varchar(100) DEFAULT NULL COMMENT '门店名称(冗余)',
`appointment_time` datetime NOT NULL COMMENT '预约时间',
`contact_name` varchar(50) NOT NULL COMMENT '联系人姓名',
`contact_phone` varchar(20) NOT NULL COMMENT '联系人电话',
`racket_info` varchar(500) DEFAULT NULL COMMENT '球拍信息',
`string_info` varchar(500) DEFAULT NULL COMMENT '穿线信息',
`remark` text COMMENT '备注',
`status` tinyint DEFAULT '0' COMMENT '状态: 0待处理 1已确认 2已完成 3已取消',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`appointment_id`),
UNIQUE KEY `uk_appointment_no` (`appointment_no`),
KEY `idx_user_id` (`user_id`),
KEY `idx_store_id` (`store_id`),
KEY `idx_appointment_time` (`appointment_time`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='穿线预约表';
-- =============================================
-- 七、内容管理模块
-- =============================================
-- 轮播图表
DROP TABLE IF EXISTS `app_banner`;
CREATE TABLE `app_banner` (
`banner_id` int NOT NULL AUTO_INCREMENT COMMENT '轮播图ID',
`title` varchar(100) DEFAULT NULL COMMENT '标题',
`image` varchar(500) NOT NULL COMMENT '图片地址',
`link_type` tinyint DEFAULT '0' COMMENT '链接类型: 0无 1商品 2活动 3文章 4外链',
`link_id` bigint DEFAULT NULL COMMENT '链接ID(商品ID/活动ID等)',
`link_url` varchar(500) DEFAULT NULL COMMENT '外链地址',
`sort_number` int DEFAULT '0' COMMENT '排序号',
`is_show` tinyint DEFAULT '1' COMMENT '是否显示: 0否 1是',
`position` varchar(20) DEFAULT 'home' COMMENT '展示位置: home首页 store商城 activity活动',
`start_time` datetime DEFAULT NULL COMMENT '开始时间',
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`banner_id`),
KEY `idx_is_show` (`is_show`),
KEY `idx_position` (`position`),
KEY `idx_sort_number` (`sort_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='轮播图表';
-- 文章/公告表
DROP TABLE IF EXISTS `app_article`;
CREATE TABLE `app_article` (
`article_id` int NOT NULL AUTO_INCREMENT COMMENT '文章ID',
`title` varchar(200) NOT NULL COMMENT '文章标题',
`type` varchar(20) DEFAULT 'article' COMMENT '类型: article普通文章 announcement公告',
`category_id` int DEFAULT NULL COMMENT '分类ID',
`image` varchar(500) DEFAULT NULL COMMENT '封面图',
`content` longtext COMMENT '正文内容',
`overview` varchar(500) DEFAULT NULL COMMENT '摘要',
`source` varchar(120) DEFAULT NULL COMMENT '来源',
`author` varchar(80) DEFAULT NULL COMMENT '作者',
`views` int DEFAULT '0' COMMENT '阅读量',
`is_recommend` tinyint DEFAULT '0' COMMENT '是否推荐: 0否 1是',
`is_show_index` tinyint DEFAULT '0' COMMENT '是否首页显示: 0否 1是',
`sort_number` int DEFAULT '0' COMMENT '排序值',
`status` tinyint DEFAULT '1' COMMENT '状态: 0草稿 1已发布 2已下架',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`publish_time` datetime DEFAULT NULL COMMENT '发布时间',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`article_id`),
KEY `idx_type` (`type`),
KEY `idx_category_id` (`category_id`),
KEY `idx_status` (`status`),
KEY `idx_is_recommend` (`is_recommend`),
KEY `idx_sort_number` (`sort_number`),
KEY `idx_publish_time` (`publish_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='文章/公告表';
-- 协议内容表(隐私政策、服务协议等)
DROP TABLE IF EXISTS `app_agreement`;
CREATE TABLE `app_agreement` (
`agreement_id` int NOT NULL AUTO_INCREMENT COMMENT '协议ID',
`agreement_key` varchar(50) NOT NULL COMMENT '协议标识: privacy隐私政策 service服务协议 copyright版权信息 about关于我们',
`agreement_name` varchar(100) NOT NULL COMMENT '协议名称',
`title` varchar(200) DEFAULT NULL COMMENT '前端显示标题',
`content` longtext COMMENT '协议正文内容',
`version` varchar(20) DEFAULT '1.0' COMMENT '版本号',
`is_show` tinyint DEFAULT '1' COMMENT '是否显示: 0否 1是',
`is_required` tinyint DEFAULT '1' COMMENT '是否必读: 0否 1是',
`sort_number` int DEFAULT '0' COMMENT '排序号',
`status` tinyint DEFAULT '1' COMMENT '状态: 0禁用 1启用',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`agreement_id`),
UNIQUE KEY `uk_agreement_key` (`agreement_key`),
KEY `idx_status` (`status`),
KEY `idx_is_show` (`is_show`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='协议内容表';
-- 消息通知表
DROP TABLE IF EXISTS `app_notification`;
CREATE TABLE `app_notification` (
`notification_id` bigint NOT NULL AUTO_INCREMENT COMMENT '通知ID',
`user_id` bigint NOT NULL COMMENT '接收用户ID,0表示全站通知',
`type` varchar(20) NOT NULL COMMENT '类型: system系统 order订单 payment支付 commission佣金 activity活动',
`title` varchar(200) NOT NULL COMMENT '通知标题',
`content` varchar(500) DEFAULT NULL COMMENT '通知内容',
`ref_id` bigint DEFAULT NULL COMMENT '关联ID(订单ID/活动ID等)',
`ref_type` varchar(30) DEFAULT NULL COMMENT '关联类型',
`is_read` tinyint DEFAULT '0' COMMENT '是否已读: 0未读 1已读',
`read_time` datetime DEFAULT NULL COMMENT '读取时间',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`notification_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_type` (`type`),
KEY `idx_is_read` (`is_read`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='消息通知表';
-- =============================================
-- 八、系统管理模块
-- =============================================
-- 系统用户表(后台管理员)
DROP TABLE IF EXISTS `app_admin_user`;
CREATE TABLE `app_admin_user` (
`admin_id` int NOT NULL AUTO_INCREMENT COMMENT '管理员ID',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(255) NOT NULL COMMENT '密码(加密)',
`nickname` varchar(50) DEFAULT NULL COMMENT '昵称',
`avatar` varchar(500) DEFAULT NULL COMMENT '头像',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`role_id` int DEFAULT NULL COMMENT '角色ID',
`last_login_ip` varchar(50) DEFAULT NULL COMMENT '最后登录IP',
`last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
`status` tinyint DEFAULT '1' COMMENT '状态: 0禁用 1正常',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`admin_id`),
UNIQUE KEY `uk_username` (`username`),
KEY `idx_role_id` (`role_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='后台管理员表';
-- 角色表
DROP TABLE IF EXISTS `app_role`;
CREATE TABLE `app_role` (
`role_id` int NOT NULL AUTO_INCREMENT COMMENT '角色ID',
`role_name` varchar(50) NOT NULL COMMENT '角色名称',
`role_code` varchar(50) DEFAULT NULL COMMENT '角色编码',
`description` varchar(200) DEFAULT NULL COMMENT '角色描述',
`permissions` text COMMENT '权限列表(JSON或逗号分隔)',
`status` tinyint DEFAULT '1' COMMENT '状态: 0禁用 1启用',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`role_id`),
UNIQUE KEY `uk_role_code` (`role_code`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='角色表';
-- 系统配置表
DROP TABLE IF EXISTS `app_system_config`;
CREATE TABLE `app_system_config` (
`config_id` int NOT NULL AUTO_INCREMENT COMMENT '配置ID',
`config_key` varchar(100) NOT NULL COMMENT '配置键',
`config_value` text COMMENT '配置值',
`config_group` varchar(50) DEFAULT 'base' COMMENT '配置分组: base基础 wechat微信 payment支付 sms短信',
`config_type` varchar(20) DEFAULT 'string' COMMENT '值类型: string/json/number/boolean',
`description` varchar(200) DEFAULT NULL COMMENT '配置说明',
`is_public` tinyint DEFAULT '0' COMMENT '是否公开: 0否 1是(前端可读取)',
`sort_number` int DEFAULT '0' COMMENT '排序号',
`status` tinyint DEFAULT '1' COMMENT '状态: 0禁用 1启用',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`config_id`),
UNIQUE KEY `uk_config_key` (`config_key`),
KEY `idx_config_group` (`config_group`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统配置表';
-- 文件上传记录表
DROP TABLE IF EXISTS `app_file_upload`;
CREATE TABLE `app_file_upload` (
`file_id` bigint NOT NULL AUTO_INCREMENT COMMENT '文件ID',
`file_name` varchar(200) NOT NULL COMMENT '文件原始名称',
`file_path` varchar(500) NOT NULL COMMENT '文件路径',
`file_url` varchar(500) NOT NULL COMMENT '文件访问URL',
`file_size` bigint DEFAULT '0' COMMENT '文件大小(字节)',
`file_type` varchar(50) DEFAULT NULL COMMENT '文件类型(MIME)',
`file_ext` varchar(10) DEFAULT NULL COMMENT '文件扩展名',
`user_id` bigint DEFAULT NULL COMMENT '上传用户ID,0表示系统',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`file_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_file_type` (`file_type`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='文件上传记录表';
-- =============================================
-- 九、财务模块
-- =============================================
-- 余额充值记录表
DROP TABLE IF EXISTS `app_recharge_record`;
CREATE TABLE `app_recharge_record` (
`record_id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录ID',
`record_no` varchar(64) NOT NULL COMMENT '充值单号',
`user_id` bigint NOT NULL COMMENT '用户ID',
`amount` decimal(15,2) NOT NULL COMMENT '充值金额',
`pay_type` tinyint DEFAULT '0' COMMENT '支付方式: 0余额 1微信 2支付宝(实际是从余额扣)',
`pay_status` tinyint DEFAULT '0' COMMENT '支付状态: 0未支付 1已支付',
`pay_time` datetime DEFAULT NULL COMMENT '支付时间',
`transaction_id` varchar(128) DEFAULT NULL COMMENT '第三方交易号',
`balance_before` decimal(15,2) DEFAULT '0.00' COMMENT '充值前余额',
`balance_after` decimal(15,2) DEFAULT '0.00' COMMENT '充值后余额',
`status` tinyint DEFAULT '0' COMMENT '状态: 0待支付 1已完成 2已取消',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`record_id`),
UNIQUE KEY `uk_record_no` (`record_no`),
KEY `idx_user_id` (`user_id`),
KEY `idx_pay_status` (`pay_status`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='余额充值记录表';
-- 资金流水表
DROP TABLE IF EXISTS `app_fund_flow`;
CREATE TABLE `app_fund_flow` (
`flow_id` bigint NOT NULL AUTO_INCREMENT COMMENT '流水ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`flow_type` varchar(20) NOT NULL COMMENT '流水类型: recharge充值 consume消费 refund退款 commission佣金 withdraw提现',
`amount` decimal(15,2) NOT NULL COMMENT '变动金额(正数为收入,负数为支出)',
`balance` decimal(15,2) DEFAULT '0.00' COMMENT '变动后余额',
`relation_id` bigint DEFAULT NULL COMMENT '关联ID(订单ID/充值ID等)',
`remark` varchar(200) DEFAULT NULL COMMENT '备注',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`flow_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_flow_type` (`flow_type`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='资金流水表';
-- 积分抵扣配置表
DROP TABLE IF EXISTS `app_points_config`;
CREATE TABLE `app_points_config` (
`config_id` int NOT NULL AUTO_INCREMENT COMMENT '配置ID',
`points_per_yuan` int DEFAULT '1' COMMENT '多少积分抵1元',
`max_percent` decimal(5,2) DEFAULT '10.00' COMMENT '最多可抵扣订单金额比例(%)',
`status` tinyint DEFAULT '1' COMMENT '状态: 0禁用(不可使用积分抵扣) 1启用',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`config_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='积分抵扣配置表';
-- 签到配置表
DROP TABLE IF EXISTS `app_signin_config`;
CREATE TABLE `app_signin_config` (
`config_id` int NOT NULL AUTO_INCREMENT COMMENT '配置ID',
`day_number` int NOT NULL COMMENT '第几天(1-7循环)',
`points` int NOT NULL COMMENT '获得积分数',
`deleted` tinyint DEFAULT '0' COMMENT '是否删除: 0否 1是',
PRIMARY KEY (`config_id`),
KEY `idx_day_number` (`day_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='签到积分配置表';
-- =============================================
-- 初始化数据
-- =============================================
-- 初始化默认协议
INSERT INTO `app_agreement` (`agreement_key`, `agreement_name`, `title`, `content`, `version`, `is_show`, `is_required`) VALUES
('privacy', '隐私政策', '隐私政策', '隐私政策内容...', '1.0', 1, 1),
('service', '服务协议', '服务协议', '服务协议内容...', '1.0', 1, 1);
-- 初始化系统配置
INSERT INTO `app_system_config` (`config_key`, `config_value`, `config_group`, `config_type`, `description`, `is_public`) VALUES
('app_name', '泡菜甄选', 'base', 'string', '小程序名称', 1),
('app_logo', '/uploads/logo.png', 'base', 'string', '小程序LOGO', 1),
('signin_points', '10', 'base', 'number', '每日签到积分', 1),
('withdraw_min_amount', '200', 'base', 'number', '最低提现金额', 1),
('withdraw_daily_limit', '2000', 'base', 'number', '每日提现上限', 1);
SET FOREIGN_KEY_CHECKS = 1;