# Kylin Education

智慧教育培训扩展包 — 提供课程管理、学员管理、排课系统、在线考试等核心业务能力，符合教育行业国家标准。

## 功能特性

### 课程管理
- **课程全生命周期**：创建/编辑/审核/发布，`CourseStatus` 状态机管理
- **课程分类**：`CourseCategory` 多级分类树
- **章节管理**：`CourseChapter` 章节编排，支持视频/文档/图文
- **课程类型**：`CourseType` 枚举（直播/录播/面授/混合）

### 学员管理
- **学籍管理**：`Student` 模型，`StudentStatus` 状态机（在读/休学/毕业/退学）
- **未成年人保护**：`GuardianConsentService` 监护人同意机制（依据《未成年人保护法》第七十二条）
- **分班管理**：`StudentClass` 班级管理，`Enrollment` 选课记录
- **隐私管理**：`IdCardEncryptor` 身份证号加密存储，`Encryptable` Trait

### 排课系统
- **自动排课**：约束满足算法，`ScheduleController` 自动排课
- **冲突检测**：教师/教室/班级冲突检测
- **手动调整**：支持拖拽调整
- **教室管理**：`Classroom` 教室资源管理
- **课表查看**：`ScheduleStatus` 课表状态管理

### 在线考试
- **题库管理**：`Question` 题库，`QuestionType`（单选/多选/判断/填空/问答），`QuestionDifficulty` 难度分级
- **组卷方式**：随机组卷/固定组卷，`ExamQuestion` 关联表
- **防作弊机制**：`AntiCheatService` 切屏检测/复制检测/时间异常检测
- **自动阅卷**：客观题自动评分，主观题人工评分
- **成绩管理**：`Attempt` 考试记录，`AttemptAnswer` 答题记录，`AttemptStatus` 状态机

### 数据统计
- 仪表盘、学员统计、课程统计、考试统计、报表导出

## 安装

```bash
composer require kylin/education
php artisan vendor:publish --tag=kylin-education-config
php artisan vendor:publish --tag=kylin-education-migrations
php artisan migrate
```

## 使用示例

### 课程管理

```php
use Kylin\Education\Http\Controllers\CourseController;

// 创建课程
$course = Course::create([
    'title' => '高中数学',
    'type' => CourseType::Live,
    'status' => CourseStatus::Draft,
    'category_id' => $categoryId,
    'teacher_id' => $teacherId,
]);

// 发布课程
$course->update(['status' => CourseStatus::Published]);
```

### 学员管理

```php
use Kylin\Education\Services\GuardianConsentService;
use Kylin\Education\Services\IdCardEncryptor;

// 注册学员（未成年人需监护人同意）
$student = Student::create([
    'name' => '张三',
    'id_card' => IdCardEncryptor::encrypt('110101201001011234'),
    'guardian_name' => '张父',
    'guardian_phone' => '13800138000',
    'status' => StudentStatus::Active,
]);

// 监护人同意验证
$consentService->verify($student->id);
```

### 在线考试

```php
use Kylin\Education\Services\AntiCheatService;

// 开始考试
$attempt = Attempt::create([
    'exam_id' => $examId,
    'student_id' => $studentId,
    'status' => AttemptStatus::InProgress,
    'started_at' => now(),
]);

// 防作弊检测
$antiCheatService->detectScreenSwitch($attempt->id);
$antiCheatService->detectCopyPaste($attempt->id);
```

## 数据库表

| 表名 | 说明 |
|------|------|
| `kylin_edu_courses` | 课程表 |
| `kylin_edu_course_categories` | 课程分类表 |
| `kylin_edu_course_chapters` | 课程章节表 |
| `kylin_edu_students` | 学员表（身份证号加密存储） |
| `kylin_edu_student_classes` | 班级表 |
| `kylin_edu_enrollments` | 选课记录表 |
| `kylin_edu_classrooms` | 教室表 |
| `kylin_edu_schedules` | 排课表 |
| `kylin_edu_exams` | 考试表 |
| `kylin_edu_questions` | 题库表 |
| `kylin_edu_exam_questions` | 考试题目关联表 |
| `kylin_edu_attempts` | 考试记录表 |
| `kylin_edu_attempt_answers` | 答题记录表 |

## 行业标准合规

- **GB/T 36342-2018** 智慧学习基础数据规范
- **GB/T 36343-2018** 智慧学习总体框架
- **JY/T 0633-2020** 教育基础数据字典
- **GB/T 22239-2019** 信息安全等级保护（等保 2.0）
- **GB/T 35273-2020** 个人信息安全规范
- **GB/T 45574-2025** 敏感信息处理要求
- **《未成年人保护法》第七十二条** — 未成年人个人信息保护

## 法律合规

详见 [LEGAL.md](./LEGAL.md)，涵盖：
- 《中华人民共和国教育法》
- 《中华人民共和国民办教育促进法》
- 《中华人民共和国未成年人保护法》— 第七十二条
- 《中华人民共和国个人信息保护法》— 第二十八条、第五十一条
- 《中华人民共和国网络安全法》— 第四十七条
- GB/T 36342-2018、GB/T 36343-2018、JY/T 0633-2020

## 依赖

- PHP ^8.5
- Laravel ^13.0
- kylin/core
- kylin/audit-log（审计日志）
- kylin/rbac（权限控制）

## 许可证

私有软件，未经授权禁止使用。
