master
cody 4 months ago
parent 0007b80aae
commit cb860292d5

@ -859,20 +859,25 @@ class CourseController extends CommonController
if ($validator->fails()) { if ($validator->fails()) {
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
} }
$startDate = $all['month'] . '-01'; // $startDate = $all['month'] . '-01';
$endDate = date('Y-m-t', strtotime($startDate)); // $endDate = date('Y-m-t', strtotime($startDate));
$range = getDates($startDate, $endDate); $list = Calendar::with('course', 'courseContent')
$list = []; ->orderBy('start_time', 'asc')
foreach ($range as $date) { ->whereDate('start_time', '<=', $all['month'])
// 查询Calendar模型里start_time和end_time在日期内的数据,其中date是年月日start_time和end_time是时分秒 ->get();
$list[] = [
'date' => $date, // $range = getDates($startDate, $endDate);
'details' => Calendar::with('course', 'courseContent') // $list = [];
->whereDate('start_time', '<=', $date) // foreach ($range as $date) {
->whereDate('end_time', '>=', $date) // // 查询Calendar模型里start_time和end_time在日期内的数据,其中date是年月日start_time和end_time是时分秒
->get() // $list[] = [
]; // 'date' => $date,
} // 'details' => Calendar::with('course', 'courseContent')
// ->whereDate('start_time', '<=', $date)
// ->whereDate('end_time', '>=', $date)
// ->get()
// ];
// }
return $this->success($list); return $this->success($list);
} }

@ -1,104 +0,0 @@
# 课程URL更新命令使用说明
## 功能描述
这个Laravel命令 `UpdateCourseUrls` 用于从Excel文件读取课程信息并自动更新数据库中课程的URL字段。
## 主要功能
1. **Excel文件解析**: 读取Excel文件中的课程数据和跳转链接信息
2. **数据匹配**: 从`phome_ecms_news`表中根据跳转链接匹配title字段获取对应的titleurl
3. **智能匹配**: 支持精确匹配、模糊匹配和相似度匹配三种方式
4. **批量更新**: 将获取到的titleurl批量更新到`courses`表的url字段
## 命令使用方法
### 基本用法
```bash
php artisan update:course-urls
```
### 指定Excel文件
```bash
php artisan update:course-urls "your_excel_file.xlsx"
```
## Excel文件格式要求
Excel文件需要包含以下列
- **课程**: 包含课程名称的列
- **跳转链接**: 包含需要匹配的标题的列
文件可以包含多个工作表,命令会自动处理所有工作表。
## 匹配逻辑
### 1. 新闻标题匹配从phome_ecms_news表
- **精确匹配**: 直接匹配title字段
- **模糊匹配**: 使用LIKE进行部分匹配
- **相似度匹配**: 使用Levenshtein算法计算字符串相似度自动选择相似度最高的记录
### 2. 课程名称匹配更新courses表
- **精确匹配**: 直接匹配name字段
- **模糊匹配**: 使用LIKE进行部分匹配
- **相似度匹配**: 使用Levenshtein算法计算字符串相似度自动选择相似度最高的记录
## 特殊处理
1. **软删除过滤**: 只处理未被软删除的课程记录
2. **空值检查**: 自动跳过空的课程名称或跳转链接
3. **重复更新**: 如果课程已有URL会被新的URL覆盖
4. **详细日志**: 提供详细的处理日志,包括匹配方式和相似度信息
5. **失败统计**: 自动显示匹配失败的课程名称列表
## 相似度算法说明
相似度计算使用多种策略:
- **Levenshtein距离**: 计算字符编辑距离
- **包含检查**: 如果一个字符串包含另一个,会提高相似度
- **预处理**: 移除空格并转换为小写进行比较
## 示例输出
```
开始处理文件: 课程台账.xlsx
Excel文件包含 2 个工作表
正在处理工作表: Sheet1
工作表 Sheet1 有 10 行,最高列为 C
表头: 序号, 课程, 跳转链接
找到课程列: 2跳转链接列: 3
处理行 2: 课程='Python基础课程', 跳转链接='Python编程入门教程'
通过相似度匹配找到 (相似度: 85.7%): 'Python编程入门教程完整版' -> '/news/python-tutorial-2024'
✓ 成功更新课程 'Python基础课程' 的URL为: /news/python-tutorial-2024
工作表 Sheet1 中匹配失败的课程:
- 高级数据分析课程
- 机器学习实战
处理完成,总共更新了 6 条记录
```
## 注意事项
1. 确保Excel文件位于项目根目录或提供正确的文件路径
2. 确保数据库连接正常,特别是`phome_ecms_news`表的访问权限
3. 建议在执行前备份`courses`表的数据
4. 相似度匹配会自动选择最高相似度的记录,无需设置阈值
5. 命令会显示所有匹配失败的课程名称,便于后续手动处理
## 错误处理
命令包含完善的错误处理机制:
- 文件不存在检查
- 数据库连接错误处理
- Excel格式错误处理
- 详细的错误日志输出
## 数据库表结构要求
### phome_ecms_news表
- `title`: 新闻标题字段
- `titleurl`: 新闻URL字段
### courses表
- `name`: 课程名称字段
- `url`: 课程URL字段会被更新
- `deleted_at`: 软删除时间戳字段

@ -1,143 +0,0 @@
# 课程关联日历命令使用说明
## 功能描述
这个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`: 链接
Loading…
Cancel
Save