From 1fda29d60d2ab3d0711c261873e123c406b0594e Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Fri, 28 Nov 2025 13:16:45 +0800 Subject: [PATCH] update --- .../Controllers/Admin/OtherController.php | 53 +++++++++++++------ app/Models/CourseSign.php | 28 ++++++++-- 2 files changed, 61 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/Admin/OtherController.php b/app/Http/Controllers/Admin/OtherController.php index 0d28a35..f4bdbab 100755 --- a/app/Http/Controllers/Admin/OtherController.php +++ b/app/Http/Controllers/Admin/OtherController.php @@ -565,13 +565,14 @@ class OtherController extends CommonController case 'company_market_total': // 上市公司明细 - 所有上市公司,关联学员、课程信息 + // 数据结构:主表是公司,子数据是学员信息 $companiesData = CourseSign::shangshi($start_date, $end_date, $course_ids->toArray(), true); foreach ($companiesData as $item) { $company = $item['company']; - $courseSigns = $item['courseSigns'] ?? []; + $users = $item['users'] ?? []; - if (empty($courseSigns)) { + if (empty($users)) { // 如果没有学员报名记录,仍然导出公司基本信息 $data[] = [ 'company_name' => $company->company_name, @@ -586,20 +587,40 @@ class OtherController extends CommonController 'course_type' => '', ]; } else { - // 每个学员-课程组合一行 - foreach ($courseSigns as $courseSign) { - $data[] = [ - 'company_name' => $company->company_name, - 'company_legal_representative' => $company->company_legal_representative ?? '', - 'company_date' => $company->company_date ?? '', - 'stock_date' => $company->stock_date ?? '', - 'company_address' => $company->company_address ?? '', - 'company_city' => $company->company_city ?? '', - 'company_area' => $company->company_area ?? '', - 'user_name' => $courseSign->user->name ?? '', - 'course_name' => $courseSign->course->name ?? '', - 'course_type' => $courseSign->course->typeDetail->name ?? '', - ]; + // 每个学员的每个课程组合一行 + foreach ($users as $userInfo) { + $courses = $userInfo['courses'] ?? []; + if (empty($courses)) { + // 如果学员没有课程,仍然导出学员基本信息 + $data[] = [ + 'company_name' => $company->company_name, + 'company_legal_representative' => $company->company_legal_representative ?? '', + 'company_date' => $company->company_date ?? '', + 'stock_date' => $company->stock_date ?? '', + 'company_address' => $company->company_address ?? '', + 'company_city' => $company->company_city ?? '', + 'company_area' => $company->company_area ?? '', + 'user_name' => $userInfo['user_name'] ?? '', + 'course_name' => '', + 'course_type' => '', + ]; + } else { + // 每个课程一行 + foreach ($courses as $courseInfo) { + $data[] = [ + 'company_name' => $company->company_name, + 'company_legal_representative' => $company->company_legal_representative ?? '', + 'company_date' => $company->company_date ?? '', + 'stock_date' => $company->stock_date ?? '', + 'company_address' => $company->company_address ?? '', + 'company_city' => $company->company_city ?? '', + 'company_area' => $company->company_area ?? '', + 'user_name' => $userInfo['user_name'] ?? '', + 'course_name' => $courseInfo['course_name'] ?? '', + 'course_type' => $courseInfo['course_type'] ?? '', + ]; + } + } } } } diff --git a/app/Models/CourseSign.php b/app/Models/CourseSign.php index dffab3f..b13ac8c 100755 --- a/app/Models/CourseSign.php +++ b/app/Models/CourseSign.php @@ -520,7 +520,7 @@ class CourseSign extends SoftDeletesModel ->keyBy('id'); if ($retList) { - // 返回详细列表,包含学员、课程信息 + // 返回详细列表:主表是公司,子数据是学员信息 $result = []; foreach ($courseSigns as $courseSign) { if (!$courseSign->user || !$courseSign->user->company) { @@ -539,12 +539,32 @@ class CourseSign extends SoftDeletesModel if (!isset($result[$companyId])) { $result[$companyId] = [ 'company' => $company, - 'courseSigns' => [], + 'users' => [], ]; } - // 添加学员报名记录(包含学员、课程信息) - $result[$companyId]['courseSigns'][] = $courseSign; + // 按学员分组,收集每个学员的课程信息 + $userId = $courseSign->user->id; + if (!isset($result[$companyId]['users'][$userId])) { + $result[$companyId]['users'][$userId] = [ + 'user' => $courseSign->user, + 'user_name' => $courseSign->user->name ?? '', + 'mobile' => $courseSign->user->mobile ?? '', + 'courses' => [], + ]; + } + + // 添加该学员的课程信息 + $result[$companyId]['users'][$userId]['courses'][] = [ + 'course_name' => $courseSign->course->name ?? '', + 'course_type' => $courseSign->course->typeDetail->name ?? '', + 'course_sign' => $courseSign, + ]; + } + + // 将 users 转换为数组(去掉 user_id 作为 key) + foreach ($result as $companyId => $item) { + $result[$companyId]['users'] = array_values($item['users']); } // 转换为数组并返回