diff --git a/app/Http/Controllers/Mobile/CourseController.php b/app/Http/Controllers/Mobile/CourseController.php index cf5ed68..bfa5fec 100755 --- a/app/Http/Controllers/Mobile/CourseController.php +++ b/app/Http/Controllers/Mobile/CourseController.php @@ -859,20 +859,25 @@ class CourseController extends CommonController if ($validator->fails()) { return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); } - $startDate = $all['month'] . '-01'; - $endDate = date('Y-m-t', strtotime($startDate)); - $range = getDates($startDate, $endDate); - $list = []; - foreach ($range as $date) { - // 查询Calendar模型里start_time和end_time在日期内的数据,其中date是年月日,start_time和end_time是时分秒 - $list[] = [ - 'date' => $date, - 'details' => Calendar::with('course', 'courseContent') - ->whereDate('start_time', '<=', $date) - ->whereDate('end_time', '>=', $date) - ->get() - ]; - } +// $startDate = $all['month'] . '-01'; +// $endDate = date('Y-m-t', strtotime($startDate)); + $list = Calendar::with('course', 'courseContent') + ->orderBy('start_time', 'asc') + ->whereDate('start_time', '<=', $all['month']) + ->get(); + +// $range = getDates($startDate, $endDate); +// $list = []; +// foreach ($range as $date) { +// // 查询Calendar模型里start_time和end_time在日期内的数据,其中date是年月日,start_time和end_time是时分秒 +// $list[] = [ +// 'date' => $date, +// 'details' => Calendar::with('course', 'courseContent') +// ->whereDate('start_time', '<=', $date) +// ->whereDate('end_time', '>=', $date) +// ->get() +// ]; +// } return $this->success($list); } diff --git a/course_url_update_readme.md b/course_url_update_readme.md deleted file mode 100644 index fb41718..0000000 --- a/course_url_update_readme.md +++ /dev/null @@ -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`: 软删除时间戳字段 diff --git a/link_courses_to_calendar_readme.md b/link_courses_to_calendar_readme.md deleted file mode 100644 index e08439f..0000000 --- a/link_courses_to_calendar_readme.md +++ /dev/null @@ -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`: 链接