From ec9377aa39621c50b52efdf91d152ae464216966 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Fri, 28 Nov 2025 13:12:41 +0800 Subject: [PATCH] update --- .../Controllers/Admin/OtherController.php | 25 ++------ app/Models/CourseSign.php | 60 ++++++++++++++++--- 2 files changed, 57 insertions(+), 28 deletions(-) diff --git a/app/Http/Controllers/Admin/OtherController.php b/app/Http/Controllers/Admin/OtherController.php index d4467c9..0d28a35 100755 --- a/app/Http/Controllers/Admin/OtherController.php +++ b/app/Http/Controllers/Admin/OtherController.php @@ -565,28 +565,13 @@ class OtherController extends CommonController case 'company_market_total': // 上市公司明细 - 所有上市公司,关联学员、课程信息 - $companies = CourseSign::shangshi($start_date, $end_date, $courses->pluck('id'), true); - // 加载关联关系 - // $companies->load(['users.courseSigns.course.typeDetail']); + $companiesData = CourseSign::shangshi($start_date, $end_date, $course_ids->toArray(), true); - foreach ($companies as $company) { - // 获取该公司在时间范围内的学员报名记录 - $courseSigns = CourseSign::where(function ($query) use ($course_ids) { - $query->where('status', 1); - if (isset($course_ids)) { - $query->whereIn('course_id', $course_ids); - } - })->whereHas('course', function ($query) use ($start_date, $end_date) { - // 开始结束日期的筛选。or查询 - if ($start_date && $end_date) { - $query->whereBetween('start_date', [$start_date, $end_date]) - ->orWhereBetween('end_date', [$start_date, $end_date]); - } - })->whereNotIn('status', [4, 5, 6]) - ->with(['user', 'course.typeDetail']) - ->get(); + foreach ($companiesData as $item) { + $company = $item['company']; + $courseSigns = $item['courseSigns'] ?? []; - if ($courseSigns->isEmpty()) { + if (empty($courseSigns)) { // 如果没有学员报名记录,仍然导出公司基本信息 $data[] = [ 'company_name' => $company->company_name, diff --git a/app/Models/CourseSign.php b/app/Models/CourseSign.php index 1db9824..dffab3f 100755 --- a/app/Models/CourseSign.php +++ b/app/Models/CourseSign.php @@ -410,7 +410,7 @@ class CourseSign extends SoftDeletesModel '常州团队', '国企元禾' ]; -// $company = Company::where(function ($query) use ($companyNameKeyword) { + // $company = Company::where(function ($query) use ($companyNameKeyword) { // foreach ($companyNameKeyword as $item) { // $query->orWhere('company_name', 'like', '%' . $item . '%'); // } @@ -495,20 +495,64 @@ class CourseSign extends SoftDeletesModel } /** - * 上市公司 + * 上市公司(统计或列表) + * @param string|null $start_date 开始日期 + * @param string|null $end_date 结束日期 + * @param array|null $course_ids 课程ID数组,不传则统计所有课程 + * @param bool $retList 是否返回列表,false返回数量,true返回列表(包含学员、课程信息) + * @return int|array */ public static function shangshi($start_date = null, $end_date = null, $course_ids = null, $retList = false) { $courseSignsQuery = self::getStudentList($start_date, $end_date, 1, $course_ids); - $list = Company::whereHas('users', function ($query) use ($courseSignsQuery) { - $query->whereIn('id', $courseSignsQuery->get()->pluck('user_id')); - })->where('company_market', 1)->get(); + $courseSigns = $courseSignsQuery->with(['user.company', 'course.typeDetail'])->get(); + + // 获取所有上市公司的ID + $companyIds = $courseSigns->pluck('user.company.id') + ->filter() + ->unique() + ->toArray(); + + // 获取这些公司中标记为上市的公司 + $companies = Company::whereIn('id', $companyIds) + ->where('company_market', 1) + ->get() + ->keyBy('id'); + if ($retList) { - return $list; + // 返回详细列表,包含学员、课程信息 + $result = []; + foreach ($courseSigns as $courseSign) { + if (!$courseSign->user || !$courseSign->user->company) { + continue; + } + + $companyId = $courseSign->user->company->id; + // 只处理上市公司的记录 + if (!isset($companies[$companyId])) { + continue; + } + + $company = $companies[$companyId]; + + // 如果公司还没有在结果中,初始化 + if (!isset($result[$companyId])) { + $result[$companyId] = [ + 'company' => $company, + 'courseSigns' => [], + ]; + } + + // 添加学员报名记录(包含学员、课程信息) + $result[$companyId]['courseSigns'][] = $courseSign; + } + + // 转换为数组并返回 + return array_values($result); } else { - return $list->count(); + // 返回统计数据 + return $companies->count(); } - } /**