|
@@ -265,3 +265,73 @@ CREATE TABLE IF NOT EXISTS train_audit_log (
|
|
|
INDEX idx_actor (actor_uid),
|
|
INDEX idx_actor (actor_uid),
|
|
|
INDEX idx_target (target_type, target_id)
|
|
INDEX idx_target (target_type, target_id)
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审计日志';
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审计日志';
|
|
|
|
|
+
|
|
|
|
|
+-- 报名单表(报名/付费/裂变一期)
|
|
|
|
|
+CREATE TABLE IF NOT EXISTS train_enrollment (
|
|
|
|
|
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
+ uid BIGINT COMMENT '学员ID(登录后)',
|
|
|
|
|
+ class_id BIGINT COMMENT '所选班次ID',
|
|
|
|
|
+ name VARCHAR(50) COMMENT '姓名',
|
|
|
|
|
+ phone VARCHAR(11) COMMENT '手机号',
|
|
|
|
|
+ bring_laptop TINYINT DEFAULT 0 COMMENT '1=带电脑',
|
|
|
|
|
+ data_ready VARCHAR(50) COMMENT '已备数据类别(逗号分隔)',
|
|
|
|
|
+ top_problems TEXT COMMENT '最想解决的3个问题JSON',
|
|
|
|
|
+ source VARCHAR(20) DEFAULT 'scene' COMMENT '来源:scene/invite',
|
|
|
|
|
+ invite_code VARCHAR(50) COMMENT '邀请码(基于train_user.invite_code)',
|
|
|
|
|
+ status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/paid/confirmed/cancelled',
|
|
|
|
|
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
+ INDEX idx_uid (uid),
|
|
|
|
|
+ INDEX idx_class_id (class_id),
|
|
|
|
|
+ INDEX idx_status (status)
|
|
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报名单';
|
|
|
|
|
+
|
|
|
|
|
+-- 支付订单表
|
|
|
|
|
+CREATE TABLE IF NOT EXISTS train_order (
|
|
|
|
|
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
+ order_no VARCHAR(32) NOT NULL UNIQUE COMMENT '订单号',
|
|
|
|
|
+ enrollment_id BIGINT COMMENT '关联报名单',
|
|
|
|
|
+ uid BIGINT COMMENT '学员ID',
|
|
|
|
|
+ class_id BIGINT COMMENT '班次ID',
|
|
|
|
|
+ amount INT NOT NULL COMMENT '实付金额(分)',
|
|
|
|
|
+ original_amount INT COMMENT '原价(分)',
|
|
|
|
|
+ discount_amount INT DEFAULT 0 COMMENT '优惠(分)',
|
|
|
|
|
+ pay_channel VARCHAR(20) DEFAULT 'wechat' COMMENT '支付渠道',
|
|
|
|
|
+ status VARCHAR(20) DEFAULT 'unpaid' COMMENT 'unpaid/paid/refunded/failed/closed',
|
|
|
|
|
+ pay_time DATETIME,
|
|
|
|
|
+ wechat_txn_id VARCHAR(64) COMMENT '微信交易号',
|
|
|
|
|
+ prepay_id VARCHAR(64) COMMENT '预支付ID',
|
|
|
|
|
+ refund_amount INT DEFAULT 0 COMMENT '已退金额(分)',
|
|
|
|
|
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
+ INDEX idx_uid (uid),
|
|
|
|
|
+ INDEX idx_class_id (class_id),
|
|
|
|
|
+ INDEX idx_status (status),
|
|
|
|
|
+ INDEX idx_enrollment_id (enrollment_id)
|
|
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付订单';
|
|
|
|
|
+
|
|
|
|
|
+-- 转介绍关系表
|
|
|
|
|
+CREATE TABLE IF NOT EXISTS train_invite (
|
|
|
|
|
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
+ inviter_id BIGINT NOT NULL COMMENT '邀请人(train_user.id)',
|
|
|
|
|
+ invitee_id BIGINT COMMENT '被邀请人(train_user.id)',
|
|
|
|
|
+ invite_code VARCHAR(50) COMMENT '邀请码',
|
|
|
|
|
+ order_id BIGINT COMMENT '被邀请人的订单ID',
|
|
|
|
|
+ successful TINYINT DEFAULT 0 COMMENT '1=被邀请人已完成付费',
|
|
|
|
|
+ reward_status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/granted',
|
|
|
|
|
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
+ INDEX idx_inviter (inviter_id),
|
|
|
|
|
+ INDEX idx_invitee (invitee_id),
|
|
|
|
|
+ UNIQUE KEY uk_code_invitee (invite_code, invitee_id)
|
|
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='转介绍关系';
|
|
|
|
|
+
|
|
|
|
|
+-- 课前资料包表(二期)
|
|
|
|
|
+CREATE TABLE IF NOT EXISTS train_course_material (
|
|
|
|
|
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
+ class_id BIGINT COMMENT '班次ID(为空=通用资料)',
|
|
|
|
|
+ title VARCHAR(100) NOT NULL,
|
|
|
|
|
+ file_url VARCHAR(255) COMMENT 'PDF/附件URL',
|
|
|
|
|
+ sort INT DEFAULT 0,
|
|
|
|
|
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
+ INDEX idx_class_id (class_id)
|
|
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课前资料包';
|