|
|
# 课程关联日历命令使用说明
|
|
|
|
|
|
## 功能描述
|
|
|
|
|
|
这个Laravel命令 `LinkCoursesToCalendar` 用于将指定的课程列表自动关联到`calendars`日历表中。
|
|
|
|
|
|
## 主要功能
|
|
|
|
|
|
1. **批量课程关联**: 一次性处理69个指定的课程
|
|
|
2. **智能匹配**: 支持精确匹配、模糊匹配和相似度匹配三种策略
|
|
|
3. **重复检查**: 自动检查并跳过已存在日历记录的课程
|
|
|
4. **事务保护**: 使用数据库事务确保数据一致性
|
|
|
5. **详细统计**: 提供完整的处理结果统计
|
|
|
|
|
|
## 命令使用方法
|
|
|
|
|
|
### 基本用法
|
|
|
```bash
|
|
|
php artisan link:courses-to-calendar
|
|
|
```
|
|
|
|
|
|
## 课程列表
|
|
|
|
|
|
命令会处理以下69个课程:
|
|
|
|
|
|
### 高研班系列
|
|
|
- 高研班|第四期高级科创人才研修班-第七模块
|
|
|
- 高研班|第五期高级科创人才研修班-第五模块
|
|
|
- 高研班|第六期高级科创人才研修班-第三模块
|
|
|
- 高研班|第五期高级科创人才研修班-毕业模块
|
|
|
- 高研班|第四期高级科创人才研修班-第八模块
|
|
|
- ... (共29个高研班课程)
|
|
|
|
|
|
### 第二课堂系列
|
|
|
- 第二课堂|走进珂玛科技
|
|
|
- 第二课堂|走进世华科技
|
|
|
- 第二课堂|走进姑苏区
|
|
|
- 第二课堂|走进科沃斯
|
|
|
- ... (共17个第二课堂课程)
|
|
|
|
|
|
### 其他培训类
|
|
|
- 人才培训、初创班、攀峰班、产业加速营、专题培训等 (共23个课程)
|
|
|
|
|
|
## 匹配策略
|
|
|
|
|
|
### 1. 精确匹配
|
|
|
直接匹配courses表中的name字段
|
|
|
|
|
|
### 2. 模糊匹配
|
|
|
使用LIKE查询进行部分匹配
|
|
|
|
|
|
### 3. 相似度匹配
|
|
|
- 使用Levenshtein算法计算字符串相似度
|
|
|
- 最低相似度阈值:30%
|
|
|
- 自动选择相似度最高的课程
|
|
|
|
|
|
## 日历记录创建
|
|
|
|
|
|
为每个匹配的课程创建以下日历记录:
|
|
|
|
|
|
```php
|
|
|
[
|
|
|
'type' => 1, // 类型1为课程
|
|
|
'course_id' => $course->id, // 关联的课程ID
|
|
|
'date' => $course->start_date, // 课程开始日期
|
|
|
'title' => $course->name, // 课程标题
|
|
|
'content' => $course->content, // 课程内容
|
|
|
'start_time' => '09:00:00', // 默认开始时间
|
|
|
'end_time' => '17:00:00', // 默认结束时间
|
|
|
'url' => $course->url, // 课程链接
|
|
|
]
|
|
|
```
|
|
|
|
|
|
## 输出示例
|
|
|
|
|
|
```
|
|
|
开始将课程关联到calendars日历表...
|
|
|
总共需要处理 69 个课程
|
|
|
正在处理课程: 第三期:张平院士— 6G通信与AI融合
|
|
|
✓ 找到匹配课程: 第三期:张平院士— 6G通信与AI融合 (ID: 123)
|
|
|
✓ 成功创建日历记录 (ID: 456) 关联课程: 第三期:张平院士— 6G通信与AI融合
|
|
|
|
|
|
正在处理课程: 高研班|第四期高级科创人才研修班-第七模块
|
|
|
通过模糊匹配找到课程: '第四期高级科创人才研修班-第七模块'
|
|
|
✓ 成功创建日历记录 (ID: 457) 关联课程: 第四期高级科创人才研修班-第七模块
|
|
|
|
|
|
============================================================
|
|
|
处理完成!
|
|
|
成功关联课程数量: 65
|
|
|
已存在日历记录: 2
|
|
|
未找到匹配课程: 2
|
|
|
|
|
|
未找到匹配的课程列表:
|
|
|
- 某个未找到的课程1
|
|
|
- 某个未找到的课程2
|
|
|
|
|
|
已存在日历记录的课程列表:
|
|
|
- 某个已存在的课程1
|
|
|
- 某个已存在的课程2
|
|
|
```
|
|
|
|
|
|
## 安全特性
|
|
|
|
|
|
1. **数据库事务**: 所有操作在事务中执行,出错时自动回滚
|
|
|
2. **重复检查**: 防止创建重复的日历记录
|
|
|
3. **软删除过滤**: 只处理未被软删除的课程
|
|
|
4. **错误处理**: 完善的异常处理机制
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
1. **备份数据**: 建议执行前备份`calendars`表数据
|
|
|
2. **权限检查**: 确保数据库连接正常,有足够的读写权限
|
|
|
3. **课程匹配**: 相似度匹配可能不是100%准确,建议执行后检查结果
|
|
|
4. **重复执行**: 命令可以安全地重复执行,已存在的记录会被跳过
|
|
|
|
|
|
## 错误处理
|
|
|
|
|
|
命令包含完善的错误处理机制:
|
|
|
- 数据库连接错误处理
|
|
|
- 事务回滚保护
|
|
|
- 详细的错误日志输出
|
|
|
- 匹配失败统计
|
|
|
|
|
|
## 数据库表要求
|
|
|
|
|
|
### courses表
|
|
|
- `id`: 主键
|
|
|
- `name`: 课程名称
|
|
|
- `start_date`: 开始日期
|
|
|
- `end_date`: 结束日期
|
|
|
- `content`: 课程内容
|
|
|
- `url`: 课程链接
|
|
|
- `deleted_at`: 软删除时间戳
|
|
|
|
|
|
### calendars表
|
|
|
- `type`: 类型(1=课程,2=课堂,3=事件)
|
|
|
- `course_id`: 关联的课程ID
|
|
|
- `date`: 日期
|
|
|
- `title`: 标题
|
|
|
- `content`: 内容
|
|
|
- `start_time`: 开始时间
|
|
|
- `end_time`: 结束时间
|
|
|
- `url`: 链接
|