Initial commit
This commit is contained in:
79
xuexiao/sql/keshi_ledger_tables.sql
Normal file
79
xuexiao/sql/keshi_ledger_tables.sql
Normal file
@@ -0,0 +1,79 @@
|
||||
-- 课时核对表 Excel 流水账 — 扩展字段 + 月度快照 + 上课记录
|
||||
-- 与现有 students / courses / student_accounts 集成,非独立库
|
||||
|
||||
-- ---------- students 扩展 ----------
|
||||
ALTER TABLE `students`
|
||||
ADD COLUMN `display_name` VARCHAR(50) NULL COMMENT '括号外正式姓名' AFTER `name`,
|
||||
ADD COLUMN `nickname` VARCHAR(50) NULL COMMENT '括号内小名' AFTER `display_name`;
|
||||
|
||||
-- ---------- courses 扩展 ----------
|
||||
ALTER TABLE `courses`
|
||||
ADD COLUMN `course_code` VARCHAR(20) NULL COMMENT 'scratch/python/c++/wedo' AFTER `name`,
|
||||
ADD UNIQUE INDEX `uk_courses_code` (`course_code`);
|
||||
|
||||
-- ---------- student_accounts(学员课程账户)扩展 ----------
|
||||
ALTER TABLE `student_accounts`
|
||||
ADD COLUMN `unit_price` DECIMAL(10,4) DEFAULT 0 COMMENT '当前单价' AFTER `cumulative_start_date`,
|
||||
ADD COLUMN `account_status` VARCHAR(20) DEFAULT 'active' COMMENT 'active/graduated' AFTER `unit_price`;
|
||||
|
||||
-- ---------- monthly_snapshots(月度快照,核心表)----------
|
||||
CREATE TABLE IF NOT EXISTS `monthly_snapshots` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`account_id` INT NOT NULL,
|
||||
`year` SMALLINT NOT NULL,
|
||||
`month` SMALLINT NOT NULL,
|
||||
`seq_no` INT NULL,
|
||||
`prev_lessons` DECIMAL(10,2) NULL,
|
||||
`prev_gift_lessons` DECIMAL(10,2) NULL,
|
||||
`prev_total_lessons` DECIMAL(10,2) NULL,
|
||||
`prev_balance` DECIMAL(12,2) NULL,
|
||||
`new_signup_amount` DECIMAL(12,2) NULL,
|
||||
`new_signup_lessons` DECIMAL(10,2) NULL,
|
||||
`new_signup_gift_lessons` DECIMAL(10,2) NULL,
|
||||
`renewal_amount` DECIMAL(12,2) NULL,
|
||||
`renewal_lessons` DECIMAL(10,2) NULL,
|
||||
`renewal_gift_lessons` DECIMAL(10,2) NULL,
|
||||
`consumed_lessons` DECIMAL(10,2) NULL,
|
||||
`consumed_amount` DECIMAL(12,2) NULL,
|
||||
`refund_lessons` DECIMAL(10,2) NULL,
|
||||
`account_fee` DECIMAL(12,2) NULL,
|
||||
`refund_gift_lessons` DECIMAL(10,2) NULL,
|
||||
`refund_amount` DECIMAL(12,2) NULL,
|
||||
`end_lessons` DECIMAL(10,2) NULL,
|
||||
`end_gift_lessons` DECIMAL(10,2) NULL,
|
||||
`end_total_lessons` DECIMAL(10,2) NULL,
|
||||
`end_balance` DECIMAL(12,2) NULL,
|
||||
`unit_price` DECIMAL(10,4) NULL,
|
||||
`notes` TEXT NULL,
|
||||
`source_file` VARCHAR(200) NULL,
|
||||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uq_snapshot_account_month` (`account_id`, `year`, `month`),
|
||||
KEY `idx_snapshot_period` (`year`, `month`),
|
||||
KEY `idx_snapshot_account` (`account_id`),
|
||||
CONSTRAINT `fk_snapshot_account` FOREIGN KEY (`account_id`) REFERENCES `student_accounts` (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课时核对表月度快照';
|
||||
|
||||
-- ---------- class_records(上课记录)----------
|
||||
CREATE TABLE IF NOT EXISTS `class_records` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT,
|
||||
`account_id` INT NOT NULL,
|
||||
`year` SMALLINT NOT NULL,
|
||||
`month` SMALLINT NOT NULL,
|
||||
`class_date` DATE NOT NULL,
|
||||
`lessons_consumed` DECIMAL(10,2) DEFAULT 2,
|
||||
`raw_text` VARCHAR(50) NULL,
|
||||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uq_class_record_day` (`account_id`, `year`, `month`, `class_date`, `lessons_consumed`),
|
||||
KEY `idx_class_record_account` (`account_id`),
|
||||
KEY `idx_class_record_date` (`class_date`),
|
||||
CONSTRAINT `fk_class_record_account` FOREIGN KEY (`account_id`) REFERENCES `student_accounts` (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Excel上课情况解析记录';
|
||||
|
||||
-- 初始化课程类型(可按机构调整显示名)
|
||||
INSERT IGNORE INTO `courses` (`name`, `course_code`, `level`, `type`, `status`) VALUES
|
||||
('Scratch', 'scratch', 'scratch', '编程', 1),
|
||||
('Python', 'python', 'python', '编程', 1),
|
||||
('C++', 'c++', 'c++', '编程', 1),
|
||||
('WeDo', 'wedo', 'wedo', '编程', 1);
|
||||
323
xuexiao/sql/mysql_tables.sql
Normal file
323
xuexiao/sql/mysql_tables.sql
Normal file
@@ -0,0 +1,323 @@
|
||||
-- ============================================================
|
||||
-- 学生课程管理系统 - MySQL 数据库建表脚本
|
||||
-- 使用方法: mysql -u root -p < mysql_tables.sql
|
||||
-- 注意: 此脚本必须与 models.py 中的模型定义完全一致
|
||||
-- ============================================================
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS student_course DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
USE student_course;
|
||||
|
||||
-- 1. 角色表
|
||||
CREATE TABLE IF NOT EXISTS roles (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(50) NOT NULL UNIQUE COMMENT '角色名称',
|
||||
description VARCHAR(200) COMMENT '角色描述',
|
||||
permissions TEXT COMMENT '权限列表(JSON格式)',
|
||||
remark TEXT COMMENT '备注',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
|
||||
|
||||
-- 2. 用户表(管理员、老师等)
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(50) NOT NULL UNIQUE COMMENT '登录用户名',
|
||||
password VARCHAR(200) NOT NULL COMMENT '密码(哈希)',
|
||||
real_name VARCHAR(50) NOT NULL COMMENT '真实姓名',
|
||||
role_id INT NOT NULL COMMENT '角色ID',
|
||||
phone VARCHAR(20) COMMENT '手机号',
|
||||
email VARCHAR(100) COMMENT '邮箱',
|
||||
status TINYINT DEFAULT 1 COMMENT '1-启用, 0-禁用',
|
||||
remark TEXT COMMENT '备注',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (role_id) REFERENCES roles(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
|
||||
|
||||
-- 3. 老师表
|
||||
CREATE TABLE IF NOT EXISTS teachers (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT COMMENT '关联用户ID',
|
||||
name VARCHAR(50) NOT NULL COMMENT '老师姓名',
|
||||
phone VARCHAR(20) COMMENT '联系电话',
|
||||
specialty VARCHAR(200) COMMENT '擅长科目',
|
||||
status TINYINT DEFAULT 1 COMMENT '1-在职, 0-离职',
|
||||
remark TEXT COMMENT '备注',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='老师表';
|
||||
|
||||
-- 4. 学员表
|
||||
CREATE TABLE IF NOT EXISTS students (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(50) NOT NULL COMMENT '学员姓名',
|
||||
gender VARCHAR(10) COMMENT '性别',
|
||||
phone VARCHAR(20) COMMENT '联系电话',
|
||||
parent_phone VARCHAR(20) COMMENT '家长电话',
|
||||
birthday DATE COMMENT '出生日期',
|
||||
address VARCHAR(200) COMMENT '地址',
|
||||
remark TEXT COMMENT '备注',
|
||||
status TINYINT DEFAULT 1 COMMENT '1-在读, 0-停课/离校',
|
||||
source VARCHAR(50) DEFAULT '新学员' COMMENT '来源: 新学员/老带新/团报',
|
||||
referrer_id INT COMMENT '推荐人学员ID(老带新)',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学员表';
|
||||
|
||||
-- 5. 课程表
|
||||
CREATE TABLE IF NOT EXISTS courses (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL COMMENT '课程名称',
|
||||
level VARCHAR(50) COMMENT '课程阶段/等级',
|
||||
description TEXT COMMENT '课程描述',
|
||||
price_per_hour DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '每课时单价',
|
||||
total_hours INT DEFAULT 0 COMMENT '总课时数',
|
||||
material_fee DECIMAL(10,2) DEFAULT 0 COMMENT '材料费',
|
||||
type VARCHAR(50) DEFAULT '一对一' COMMENT '课程类型: 一对一/小班/大班',
|
||||
remark TEXT COMMENT '备注',
|
||||
status TINYINT DEFAULT 1 COMMENT '1-启用, 0-停用',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程表';
|
||||
|
||||
-- 6. 班级表
|
||||
CREATE TABLE IF NOT EXISTS classes (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL COMMENT '班级名称',
|
||||
course_id INT NOT NULL COMMENT '课程ID',
|
||||
teacher_id INT NOT NULL COMMENT '授课老师ID',
|
||||
start_date DATE COMMENT '开班日期',
|
||||
end_date DATE COMMENT '结课日期',
|
||||
schedule VARCHAR(200) COMMENT '上课时间安排',
|
||||
max_students INT DEFAULT 20 COMMENT '最大学员数',
|
||||
current_students INT DEFAULT 0 COMMENT '当前学员数',
|
||||
status TINYINT DEFAULT 1 COMMENT '1-进行中, 2-已结束, 0-未开始',
|
||||
remark TEXT COMMENT '备注',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (course_id) REFERENCES courses(id),
|
||||
FOREIGN KEY (teacher_id) REFERENCES teachers(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='班级表';
|
||||
|
||||
-- 7. 班级学员关联表
|
||||
CREATE TABLE IF NOT EXISTS class_students (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
class_id INT NOT NULL COMMENT '班级ID',
|
||||
student_id INT NOT NULL COMMENT '学员ID',
|
||||
join_date DATE NOT NULL COMMENT '入班日期',
|
||||
status TINYINT DEFAULT 1 COMMENT '1-在读, 2-已转出, 3-已毕业',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (class_id) REFERENCES classes(id),
|
||||
FOREIGN KEY (student_id) REFERENCES students(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='班级学员关联表';
|
||||
|
||||
-- 8. 学员课时账户表
|
||||
CREATE TABLE IF NOT EXISTS student_accounts (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
student_id INT NOT NULL COMMENT '学员ID',
|
||||
course_id INT NOT NULL COMMENT '课程ID',
|
||||
normal_hours DECIMAL(10,2) DEFAULT 0 COMMENT '正课剩余课时',
|
||||
gifted_hours DECIMAL(10,2) DEFAULT 0 COMMENT '赠课剩余课时',
|
||||
consumed_normal DECIMAL(10,2) DEFAULT 0 COMMENT '已消正课课时',
|
||||
consumed_gifted DECIMAL(10,2) DEFAULT 0 COMMENT '已消赠课课时',
|
||||
normal_validity VARCHAR(20) DEFAULT 'permanent' COMMENT '正课有效期: permanent/permanent',
|
||||
normal_expiry_date DATE COMMENT '正课到期日期(NULL=永久)',
|
||||
gifted_validity VARCHAR(20) DEFAULT 'permanent' COMMENT '赠课有效期: permanent/permanent',
|
||||
gifted_expiry_date DATE COMMENT '赠课到期日期(NULL=永久)',
|
||||
is_stopped TINYINT DEFAULT 0 COMMENT '是否停课保号: 0-否, 1-是',
|
||||
stop_end_date DATE COMMENT '停课结束日期',
|
||||
cumulative_amount DECIMAL(10,2) DEFAULT 0 COMMENT '累计充值金额(用于优惠触发)',
|
||||
cumulative_start_date DATE COMMENT '累计周期起点日期',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (student_id) REFERENCES students(id),
|
||||
FOREIGN KEY (course_id) REFERENCES courses(id),
|
||||
UNIQUE KEY uk_student_course (student_id, course_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学员课时账户表';
|
||||
|
||||
-- 9. 充值优惠活动表
|
||||
CREATE TABLE IF NOT EXISTS recharge_activities (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL COMMENT '活动名称',
|
||||
trigger_amount DECIMAL(10,2) NOT NULL COMMENT '优惠触发金额',
|
||||
gifted_hours DECIMAL(10,2) DEFAULT 0 COMMENT '基础赠送课时',
|
||||
gift_type VARCHAR(50) DEFAULT '课时' COMMENT '优惠赠送类型',
|
||||
is_cumulative TINYINT DEFAULT 0 COMMENT '是否支持累计充值: 0-否, 1-是',
|
||||
cumulative_window INT DEFAULT 0 COMMENT '累计时间窗口(天),0=不限制',
|
||||
cumulative_clear TINYINT DEFAULT 0 COMMENT '超出时间窗口是否清零: 0-不清零, 1-清零',
|
||||
allow_multi_trigger TINYINT DEFAULT 0 COMMENT '是否允许多次触发: 0-否, 1-是',
|
||||
is_time_limited TINYINT DEFAULT 0 COMMENT '是否限制活动有效期: 0-否, 1-是',
|
||||
start_date DATE COMMENT '活动开始日期',
|
||||
end_date DATE COMMENT '活动结束日期',
|
||||
target_audience VARCHAR(50) DEFAULT 'all' COMMENT '参与人群: all/new/old',
|
||||
can_stack TINYINT DEFAULT 1 COMMENT '是否可与其他优惠叠加: 0-否, 1-是',
|
||||
gift_cap DECIMAL(10,2) DEFAULT 0 COMMENT '赠送权益封顶,0=不限制',
|
||||
group_discount TINYINT DEFAULT 0 COMMENT '是否有团报优惠: 0-否, 1-是',
|
||||
group_min_people INT DEFAULT 0 COMMENT '团报最低人数',
|
||||
group_extra_hours DECIMAL(10,2) DEFAULT 0 COMMENT '团报额外赠课',
|
||||
referral_reward TINYINT DEFAULT 0 COMMENT '是否有老带新奖励: 0-否, 1-是',
|
||||
referral_reward_hours DECIMAL(10,2) DEFAULT 0 COMMENT '老带新奖励课时',
|
||||
reward_timing VARCHAR(50) DEFAULT 'immediate' COMMENT '奖励到账时效: immediate/manual',
|
||||
status TINYINT DEFAULT 1 COMMENT '1-启用, 0-停用',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='充值优惠活动表';
|
||||
|
||||
-- 10. 充值记录表
|
||||
CREATE TABLE IF NOT EXISTS recharge_records (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
student_id INT NOT NULL COMMENT '学员ID',
|
||||
course_id INT NOT NULL COMMENT '课程ID',
|
||||
activity_id INT COMMENT '关联优惠活动ID',
|
||||
amount DECIMAL(10,2) NOT NULL COMMENT '充值金额',
|
||||
normal_hours DECIMAL(10,2) NOT NULL COMMENT '充值正课课时',
|
||||
gifted_hours DECIMAL(10,2) DEFAULT 0 COMMENT '赠送课时',
|
||||
payment_method VARCHAR(50) COMMENT '支付方式',
|
||||
operator_id INT NOT NULL COMMENT '操作人ID',
|
||||
remark TEXT COMMENT '备注',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (student_id) REFERENCES students(id),
|
||||
FOREIGN KEY (course_id) REFERENCES courses(id),
|
||||
FOREIGN KEY (activity_id) REFERENCES recharge_activities(id),
|
||||
FOREIGN KEY (operator_id) REFERENCES users(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='充值记录表';
|
||||
|
||||
-- 11. 消课记录表
|
||||
CREATE TABLE IF NOT EXISTS consumption_records (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
student_id INT NOT NULL COMMENT '学员ID',
|
||||
class_id INT COMMENT '班级ID',
|
||||
course_id INT NOT NULL COMMENT '课程ID',
|
||||
hours_consumed DECIMAL(10,2) NOT NULL COMMENT '消耗课时总数',
|
||||
consume_type VARCHAR(20) NOT NULL COMMENT '消耗类型: normal/gifted/mixed',
|
||||
normal_consumed DECIMAL(10,2) DEFAULT 0 COMMENT '消耗正课课时',
|
||||
gifted_consumed DECIMAL(10,2) DEFAULT 0 COMMENT '消耗赠课课时',
|
||||
operator_id INT NOT NULL COMMENT '操作人ID',
|
||||
consume_date DATE NOT NULL COMMENT '上课日期',
|
||||
is_makeup TINYINT DEFAULT 0 COMMENT '是否补录: 0-否, 1-是',
|
||||
is_trial TINYINT DEFAULT 0 COMMENT '是否试听(不扣课): 0-否, 1-是',
|
||||
remark TEXT COMMENT '备注',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (student_id) REFERENCES students(id),
|
||||
FOREIGN KEY (class_id) REFERENCES classes(id),
|
||||
FOREIGN KEY (course_id) REFERENCES courses(id),
|
||||
FOREIGN KEY (operator_id) REFERENCES users(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消课记录表';
|
||||
|
||||
-- 12. 退费记录表
|
||||
CREATE TABLE IF NOT EXISTS refund_records (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
student_id INT NOT NULL COMMENT '学员ID',
|
||||
course_id INT NOT NULL COMMENT '课程ID',
|
||||
refund_amount DECIMAL(10,2) NOT NULL COMMENT '退费金额',
|
||||
remaining_normal_hours DECIMAL(10,2) COMMENT '剩余正课课时',
|
||||
remaining_gifted_hours DECIMAL(10,2) COMMENT '剩余赠课课时',
|
||||
deduct_gifted_hours DECIMAL(10,2) DEFAULT 0 COMMENT '扣回赠课课时',
|
||||
consumed_hours_value DECIMAL(10,2) DEFAULT 0 COMMENT '已消课时按原价核算金额',
|
||||
material_fee_per_quarter DECIMAL(10,2) DEFAULT 250 COMMENT '每季度材料费',
|
||||
quarters INT DEFAULT 0 COMMENT '学习季度数',
|
||||
total_deduct DECIMAL(10,2) DEFAULT 0 COMMENT '总扣除金额',
|
||||
reason TEXT COMMENT '退费原因',
|
||||
operator_id INT NOT NULL COMMENT '操作人ID',
|
||||
status TINYINT DEFAULT 1 COMMENT '1-已退, 0-待审核',
|
||||
remark TEXT COMMENT '备注',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (student_id) REFERENCES students(id),
|
||||
FOREIGN KEY (course_id) REFERENCES courses(id),
|
||||
FOREIGN KEY (operator_id) REFERENCES users(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='退费记录表';
|
||||
|
||||
-- 13. 转课记录表
|
||||
CREATE TABLE IF NOT EXISTS transfer_records (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
from_student_id INT NOT NULL COMMENT '转出学员ID',
|
||||
to_student_id INT COMMENT '转入学员ID(转赠时)',
|
||||
from_course_id INT NOT NULL COMMENT '转出课程ID',
|
||||
to_course_id INT COMMENT '转入课程ID(转课时)',
|
||||
transfer_type VARCHAR(20) NOT NULL COMMENT '类型: transfer-转课, gift-转赠',
|
||||
transfer_hours DECIMAL(10,2) NOT NULL COMMENT '转出课时数',
|
||||
transfer_amount DECIMAL(10,2) COMMENT '转出金额(按剩余金额换算)',
|
||||
operator_id INT NOT NULL COMMENT '操作人ID',
|
||||
remark TEXT COMMENT '备注',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (from_student_id) REFERENCES students(id),
|
||||
FOREIGN KEY (to_student_id) REFERENCES students(id),
|
||||
FOREIGN KEY (from_course_id) REFERENCES courses(id),
|
||||
FOREIGN KEY (to_course_id) REFERENCES courses(id),
|
||||
FOREIGN KEY (operator_id) REFERENCES users(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='转课记录表';
|
||||
|
||||
-- 14. 停课记录表
|
||||
CREATE TABLE IF NOT EXISTS stop_records (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
student_id INT NOT NULL COMMENT '学员ID',
|
||||
course_id INT NOT NULL COMMENT '课程ID',
|
||||
start_date DATE NOT NULL COMMENT '停课开始日期',
|
||||
end_date DATE NOT NULL COMMENT '停课结束日期',
|
||||
reason TEXT COMMENT '停课原因',
|
||||
operator_id INT NOT NULL COMMENT '操作人ID',
|
||||
status TINYINT DEFAULT 1 COMMENT '1-停课中, 2-已复课, 0-已取消',
|
||||
remark TEXT COMMENT '备注',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (student_id) REFERENCES students(id),
|
||||
FOREIGN KEY (course_id) REFERENCES courses(id),
|
||||
FOREIGN KEY (operator_id) REFERENCES users(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='停课记录表';
|
||||
|
||||
-- 15. 考勤记录表
|
||||
CREATE TABLE IF NOT EXISTS attendance_records (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
student_id INT NOT NULL COMMENT '学员ID',
|
||||
class_id INT NOT NULL COMMENT '班级ID',
|
||||
date DATE NOT NULL COMMENT '考勤日期',
|
||||
status VARCHAR(20) NOT NULL COMMENT '出勤状态: present/absent/leave',
|
||||
remark TEXT COMMENT '备注',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (student_id) REFERENCES students(id),
|
||||
FOREIGN KEY (class_id) REFERENCES classes(id),
|
||||
UNIQUE KEY uk_attendance (student_id, class_id, date)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考勤记录表';
|
||||
|
||||
-- 16. 操作日志表
|
||||
CREATE TABLE IF NOT EXISTS operation_logs (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT NOT NULL COMMENT '操作用户ID',
|
||||
operation_type VARCHAR(50) NOT NULL COMMENT '操作类型',
|
||||
operation_detail TEXT COMMENT '操作详情',
|
||||
ip_address VARCHAR(50) COMMENT 'IP地址',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志表';
|
||||
|
||||
-- 17. 课程安排表
|
||||
CREATE TABLE IF NOT EXISTS schedules (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
class_id INT NOT NULL COMMENT '班级ID',
|
||||
date DATE NOT NULL COMMENT '上课日期',
|
||||
start_time TIME NOT NULL COMMENT '开始时间',
|
||||
end_time TIME NOT NULL COMMENT '结束时间',
|
||||
teacher_id INT NOT NULL COMMENT '授课老师ID',
|
||||
topic VARCHAR(200) COMMENT '课程主题',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (class_id) REFERENCES classes(id),
|
||||
FOREIGN KEY (teacher_id) REFERENCES teachers(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程安排表';
|
||||
|
||||
-- ============================================================
|
||||
-- 初始化数据
|
||||
-- ============================================================
|
||||
|
||||
-- 默认角色
|
||||
INSERT INTO roles (name, description, permissions) VALUES
|
||||
('超级管理员', '拥有所有权限', 'all'),
|
||||
('校区管理员', '管理本校区的所有业务', 'student,course,class,recharge,consumption,refund,transfer,statistics'),
|
||||
('财务', '管理充值、退费等财务相关业务', 'recharge,refund,statistics'),
|
||||
('授课老师', '管理消课、考勤等教学相关业务', 'consumption,attendance,class');
|
||||
|
||||
-- 默认管理员账号 (密码: admin123)
|
||||
-- 注意: 此哈希值由 werkzeug.security.generate_password_hash('admin123') 生成
|
||||
-- 如果登录失败,请删除 users 表中 admin 记录后重启应用,让程序自动重建
|
||||
INSERT INTO users (username, password, real_name, role_id, phone, status) VALUES
|
||||
('admin', 'scrypt:32768:8:1$Mlf6DtqLw5isLOHE$8e59ad3d57ed6379aba2304122a139c15aa06e086631bdd886ee8fe83db640ed41adb7f847be1574f86e9676939cc38826100f6c22058f552166be8cd59976f0', '系统管理员', 1, '13800000000', 1);
|
||||
|
||||
-- 默认课程
|
||||
INSERT INTO courses (name, level, description, price_per_hour, total_hours, material_fee, type, status) VALUES
|
||||
('美术基础班', '初级', '美术基础课程,适合零基础学员', 100.00, 40, 250.00, '小班', 1),
|
||||
('美术进阶班', '中级', '美术进阶课程,适合有基础学员', 120.00, 40, 250.00, '小班', 1),
|
||||
('美术高级班', '高级', '美术高级课程,适合进阶提升', 150.00, 40, 250.00, '一对一', 1);
|
||||
Reference in New Issue
Block a user