From f2ea48c77c776db76d0e1d803d1cfdb6b484f563 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Fri, 28 Nov 2025 16:28:07 +0800 Subject: [PATCH] update --- .../Controllers/Admin/OtherController.php | 3 + app/Models/CourseSign.php | 104 ++++++++++++++++++ 2 files changed, 107 insertions(+) diff --git a/app/Http/Controllers/Admin/OtherController.php b/app/Http/Controllers/Admin/OtherController.php index 08037af..144c406 100755 --- a/app/Http/Controllers/Admin/OtherController.php +++ b/app/Http/Controllers/Admin/OtherController.php @@ -261,6 +261,9 @@ class OtherController extends CommonController // 入学后被投企业数量(在指定时间范围内报名的学员所在公司中,在入学后被投的公司数量) $list['company_invested_after_enrollment_total'] = CourseSign::companyInvestedAfterEnrollment($start_date, $end_date, $course_ids); + // 今年被投企业数 + $list['company_invested_year_total'] = CourseSign::companyInvestedYear($start_date, $end_date, $course_ids); + // 元和员工参与人数 $list['company_join_total'] = CourseSign::companyJoin($start_date, $end_date, $course_ids); // 全市干部参与企业 diff --git a/app/Models/CourseSign.php b/app/Models/CourseSign.php index 8faebf9..08eb36a 100755 --- a/app/Models/CourseSign.php +++ b/app/Models/CourseSign.php @@ -213,6 +213,109 @@ 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 companyInvestedYear($start_date = null, $end_date = null, $course_ids = null, $retList = false) + { + $courseSignsQuery = self::getStudentList($start_date, $end_date, 1, $course_ids); + $courseSigns = $courseSignsQuery->with(['user.company', 'course.typeDetail'])->get(); + + // 获取所有被投企业的ID + $companyIds = $courseSigns->pluck('user.company.id') + ->filter() + ->unique() + ->toArray(); + + $year = date('Y'); + // 获取这些公司中标记为被投的公司 + $allInvestedCompanies = Company::whereIn('id', $companyIds) + ->where('is_yh_invested', 1) + ->get(); + + // 筛选出被投时间在今年的企业 + $companies = []; + foreach ($allInvestedCompanies as $company) { + $projectUsers = $company->project_users ?? []; + $hasInvestThisYear = false; + foreach ($projectUsers as $item) { + $investDate = $item['investDate'] ?? null; + if ($investDate) { + $investYear = date('Y', strtotime($investDate)); + if ($investYear == $year) { + $hasInvestThisYear = true; + break; + } + } + } + if ($hasInvestThisYear) { + $companies[$company->id] = $company; + } + } + $companies = collect($companies); + + if ($retList) { + // 返回详细列表:主表是公司,子数据是学员信息 + $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, + 'users' => [], + ]; + } + + // 按学员分组,收集每个学员的课程信息 + $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']); + } + + // 转换为数组并返回 + return array_values($result); + } else { + // 返回统计数据 + return $companies->count(); + } + } + + /** * 跟班学员(统计或列表) * @param string $start_date 开始日期 @@ -684,3 +787,4 @@ class CourseSign extends SoftDeletesModel } +