|
|
# 课程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`: 软删除时间戳字段
|