diff --git a/app/Http/Controllers/Admin/OtherController.php b/app/Http/Controllers/Admin/OtherController.php index 23b6186..8cdeb09 100755 --- a/app/Http/Controllers/Admin/OtherController.php +++ b/app/Http/Controllers/Admin/OtherController.php @@ -264,22 +264,25 @@ class OtherController extends CommonController if ($children && $children->count() > 0) { $includedTypeIds = $includedTypeIds->merge($children->pluck('id')); } - $includedTypeIds = $includedTypeIds->unique()->values(); + // history_courses.type 是字符串,统一按字符串比对更稳定 + $includedTypeIds = $includedTypeIds->unique()->values()->map(function ($id) { + return (string)$id; + }); // 历史课程数据(添加时间范围限制;仅统计 type 为 is_history=0 的,is_history=1 的由下方「与 courses-home 口径一致」块统计,避免重复) // 口径升级:history_courses.type 存的是课程体系ID字符串,直接按 includedTypeIds 归集(避免名称匹配漂移) $historyCourse = HistoryCourse::whereIn('type', $includedTypeIds) - ->whereHas('typeDetail', function ($query) { - $query->where('is_history', 0); - })->where(function ($query) use ($configStartDate, $configEndDate) { - $query->whereBetween('start_time', [$configStartDate, $configEndDate]) - ->orWhereBetween('end_time', [$configStartDate, $configEndDate]); - })->get(); + ->where(function ($query) use ($configStartDate, $configEndDate) { + // 采用“区间相交”口径,避免漏掉跨越整个区间的课程 + $query->where('start_time', '<=', $configEndDate) + ->where('end_time', '>=', $configStartDate); + })->get(); // 实际课程数据(添加时间范围限制) $courses = Course::whereIn('type', $includedTypeIds)->where('is_chart', 1) ->where(function ($query) use ($configStartDate, $configEndDate) { - $query->whereBetween('start_date', [$configStartDate, $configEndDate]) - ->orWhereBetween('end_date', [$configStartDate, $configEndDate]); + // 采用“区间相交”口径,避免漏掉跨越整个区间的课程 + $query->where('start_date', '<=', $configEndDate) + ->where('end_date', '>=', $configStartDate); })->get(); $configCourseIds = $configCourseIds->merge($courses->pluck('id')); // 历史课程期数