From ae10745c42631943572cf95ebbaa18ea50d20558 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Thu, 27 Nov 2025 09:45:38 +0800 Subject: [PATCH] update --- .../Controllers/Admin/OtherController.php | 10 +++- app/Models/CourseSign.php | 57 ++++++++++++++----- 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/app/Http/Controllers/Admin/OtherController.php b/app/Http/Controllers/Admin/OtherController.php index 5e41b8d..19a741a 100755 --- a/app/Http/Controllers/Admin/OtherController.php +++ b/app/Http/Controllers/Admin/OtherController.php @@ -222,7 +222,7 @@ class OtherController extends CommonController $course_type_id = $params['course_type_id']; $courses = $params['courses']; // 被投企业数 - $list['course_signs_invested'] = CourseSign::yhInvested($start_date, $end_date); + $list['course_signs_invested'] = CourseSign::yhInvested($start_date, $end_date, $courses->pluck('id')->toArray()); // 报名人数 $list['course_signs_total'] = CourseSign::courseSignsTotal($start_date, $end_date, null, $courses->pluck('id')); // 审核通过人数 @@ -292,6 +292,12 @@ class OtherController extends CommonController 'course_type_signs_pass_unique' => CourseSign::courseSignsTotalByUnique($start_date, $end_date, 1, $courses2->pluck('id'), null), 'course_name' => $course->name, 'course_signs_pass' => CourseSign::courseSignsTotal($start_date, $end_date, 1, [$course->id]), + // 跟班学员数量 + 'genban_total' => CourseSign::genban($start_date, $end_date, [$course->id]), + // 被投企业数 + 'yh_invested_total' => CourseSign::yhInvested($start_date, $end_date, [$course->id]), + // 元禾同事数 + 'company_join_total' => CourseSign::companyJoin($start_date, $end_date, [$course->id]), ]; } } @@ -359,7 +365,7 @@ class OtherController extends CommonController switch ($export_type) { case 'course_signs_invested': // 被投企业明细 - 使用与coursesHome相同的算法 - $companies = CourseSign::yhInvested($start_date, $end_date, true); + $companies = CourseSign::yhInvested($start_date, $end_date, $course_ids, true); foreach ($companies as $company) { $data[] = [ 'company_name' => $company->company_name, diff --git a/app/Models/CourseSign.php b/app/Models/CourseSign.php index 18150b4..16856bf 100755 --- a/app/Models/CourseSign.php +++ b/app/Models/CourseSign.php @@ -148,27 +148,58 @@ class CourseSign extends SoftDeletesModel } /** - * 指定时间内的被投企业 + * 被投企业统计 + * @param string|null $start_date 开始日期 + * @param string|null $end_date 结束日期 + * @param array|null $course_ids 课程ID(仅在自定义时间时生效) + * @param bool $retList 是否返回列表 */ - public static function yhInvested($start_date = null, $end_date = null, $retList = false) + public static function yhInvested($start_date = null, $end_date = null, $course_ids = null, $retList = false) { - $userIds = self::getStudentList($start_date, $end_date, 1, null)->get()->pluck('user_id'); - $companies = Company::whereHas('users', fn($q) => $q->whereIn('id', $userIds)) - ->where('is_yh_invested', 1)->get(); + // 判断是否使用默认时间 + $isDefaultDate = empty($start_date) || $start_date == CourseType::START_DATE; - // 非默认时间:按 investDate 筛选 - if ($start_date && $start_date != CourseType::START_DATE) { + // 获取学员ID列表 + if ($isDefaultDate) { + // 默认时间:获取所有学员,不限制课程 + $userIds = self::getStudentList($start_date, $end_date, 1, null)->get()->pluck('user_id'); + } else { + // 自定义时间:按课程筛选学员 + $userIds = self::getStudentList($start_date, $end_date, 1, $course_ids)->get()->pluck('user_id'); + } + + // 获取这些学员所在的被投企业 + $companies = Company::whereHas('users', function ($query) use ($userIds) { + $query->whereIn('id', $userIds); + })->where('is_yh_invested', 1)->get(); + + // 自定义时间:需要按被投时间筛选 + if (!$isDefaultDate) { $startDate = substr($start_date, 0, 10); $endDate = substr($end_date, 0, 10); - $companies = $companies->filter(function ($company) use ($startDate, $endDate) { - return collect($company->project_users ?? [])->contains(function ($item) use ($startDate, $endDate) { + + // 筛选出被投时间在范围内的企业 + $filteredCompanies = []; + foreach ($companies as $company) { + $projectUsers = $company->project_users ?? []; + foreach ($projectUsers as $item) { $investDate = $item['investDate'] ?? null; - return $investDate && $investDate >= $startDate && $investDate <= $endDate; - }); - }); + // 检查被投时间是否在范围内 + if ($investDate && $investDate >= $startDate && $investDate <= $endDate) { + $filteredCompanies[] = $company; + break; // 只要有一条满足就加入 + } + } + } + $companies = collect($filteredCompanies); } - return $retList ? $companies->values() : $companies->count(); + // 返回结果 + if ($retList) { + return $companies->values(); + } else { + return $companies->count(); + } } /**