From d6197092412d03890750b8d5d463c74037bb40d7 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Mon, 19 Jan 2026 13:42:42 +0800 Subject: [PATCH 1/3] update --- app/Http/Controllers/Admin/CompanyController.php | 13 +++++++++++-- app/Http/Controllers/Admin/OtherController.php | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Admin/CompanyController.php b/app/Http/Controllers/Admin/CompanyController.php index 8ee3b8b..1685aac 100644 --- a/app/Http/Controllers/Admin/CompanyController.php +++ b/app/Http/Controllers/Admin/CompanyController.php @@ -117,6 +117,7 @@ class CompanyController extends BaseController * @OA\Parameter(name="is_schoolmate", in="query", @OA\Schema(type="string"), required=false, description="是否校友0否1是"), * @OA\Parameter(name="course_start_date", in="query", @OA\Schema(type="string"), required=false, description="课程开始日期(筛选课程起止时间在范围内的企业)"), * @OA\Parameter(name="course_end_date", in="query", @OA\Schema(type="string"), required=false, description="课程结束日期(筛选课程起止时间在范围内的企业)"), + * @OA\Parameter(name="is_chart", in="query", @OA\Schema(type="string"), required=false, description="课程是否参与统计0否1是(按公司下用户关联的课程筛选)"), * @OA\Response( * response="200", * description="暂无" @@ -147,8 +148,10 @@ class CompanyController extends BaseController }); } // 课程起止时间筛选 - if ((isset($all['course_start_date']) && !empty($all['course_start_date'])) || - (isset($all['course_end_date']) && !empty($all['course_end_date']))) { + if ( + (isset($all['course_start_date']) && !empty($all['course_start_date'])) || + (isset($all['course_end_date']) && !empty($all['course_end_date'])) + ) { $query->whereHas('courses', function ($q) use ($all) { $course_start_date = $all['course_start_date'] ?? null; $course_end_date = $all['course_end_date'] ?? null; @@ -167,6 +170,12 @@ class CompanyController extends BaseController } }); } + // 课程是否参与统计:0否 1是(按公司下用户关联的课程的 is_chart 筛选) + if (isset($all['is_chart']) && $all['is_chart'] !== '') { + $query->whereHas('courses', function ($q) use ($all) { + $q->where('is_chart', $all['is_chart']); + }); + } if (isset($all['user_name']) && !empty($all['user_name'])) { $query->where('username', 'like', '%' . $all['user_name'] . '%'); } diff --git a/app/Http/Controllers/Admin/OtherController.php b/app/Http/Controllers/Admin/OtherController.php index 7fdc4cc..6a2068a 100755 --- a/app/Http/Controllers/Admin/OtherController.php +++ b/app/Http/Controllers/Admin/OtherController.php @@ -318,7 +318,7 @@ class OtherController extends CommonController $course_ids = $courses->pluck('id'); - // 上市公司数(所有上市公司) + // 上市公司覆盖数(所有上市公司) $list['company_market_total'] = CourseSign::shangshi($start_date, $end_date, $course_ids); // 跟班学员数(在指定时间范围内报名的学员中,from为'跟班学员'的数量) $list['ganbu_total'] = CourseSign::genban($start_date, $end_date, $course_ids); From 26f084f8d8e3231404eced5a2bb030484f16ccc3 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Mon, 19 Jan 2026 13:49:56 +0800 Subject: [PATCH 2/3] update --- .../Controllers/Admin/CompanyController.php | 75 ++++++++++--------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/app/Http/Controllers/Admin/CompanyController.php b/app/Http/Controllers/Admin/CompanyController.php index 1685aac..72aff74 100644 --- a/app/Http/Controllers/Admin/CompanyController.php +++ b/app/Http/Controllers/Admin/CompanyController.php @@ -137,43 +137,44 @@ class CompanyController extends BaseController })->with('courseSigns.course'); } ])->whereHas('users', function ($query) use ($all) { - if (isset($all['course_type_id']) && !empty($all['course_type_id'])) { - $query->whereHas('courses', function ($q) use ($all) { - $q->where('type', $all['course_type_id']); - }); - } - if (isset($all['course_name']) && !empty($all['course_name'])) { - $query->whereHas('courses', function ($q) use ($all) { - $q->where('name', 'like', '%' . $all['course_name'] . '%'); - }); - } - // 课程起止时间筛选 - if ( - (isset($all['course_start_date']) && !empty($all['course_start_date'])) || - (isset($all['course_end_date']) && !empty($all['course_end_date'])) - ) { - $query->whereHas('courses', function ($q) use ($all) { - $course_start_date = $all['course_start_date'] ?? null; - $course_end_date = $all['course_end_date'] ?? null; - if ($course_start_date && $course_end_date) { - // 课程开始时间或结束时间在指定时间范围内 - $q->where(function ($subQuery) use ($course_start_date, $course_end_date) { - $subQuery->whereBetween('start_date', [$course_start_date, $course_end_date]) - ->orWhereBetween('end_date', [$course_start_date, $course_end_date]); - }); - } elseif ($course_start_date) { - // 只指定开始日期,筛选课程结束时间 >= 开始日期 - $q->where('end_date', '>=', $course_start_date); - } elseif ($course_end_date) { - // 只指定结束日期,筛选课程开始时间 <= 结束日期 - $q->where('start_date', '<=', $course_end_date); - } - }); - } - // 课程是否参与统计:0否 1是(按公司下用户关联的课程的 is_chart 筛选) - if (isset($all['is_chart']) && $all['is_chart'] !== '') { - $query->whereHas('courses', function ($q) use ($all) { - $q->where('is_chart', $all['is_chart']); + // 课程筛选:与 courses-home / getStudentList 口径一致,仅 status=1 的报名,且由同一条 courseSign 满足 type/name/日期/is_chart + $hasCourseFilter = (isset($all['course_type_id']) && $all['course_type_id'] !== '') || + (isset($all['course_name']) && $all['course_name'] !== '') || + (isset($all['course_start_date']) && $all['course_start_date'] !== '') || + (isset($all['course_end_date']) && $all['course_end_date'] !== '') || + (isset($all['is_chart']) && $all['is_chart'] !== ''); + + if ($hasCourseFilter) { + $query->whereHas('courseSigns', function ($q) use ($all) { + $q->where('status', 1); + $q->whereHas('course', function ($c) use ($all) { + if (isset($all['course_type_id']) && $all['course_type_id'] !== '') { + $c->where('type', $all['course_type_id']); + } + if (isset($all['course_name']) && $all['course_name'] !== '') { + $c->where('name', 'like', '%' . $all['course_name'] . '%'); + } + if ( + (isset($all['course_start_date']) && $all['course_start_date'] !== '') || + (isset($all['course_end_date']) && $all['course_end_date'] !== '') + ) { + $course_start_date = $all['course_start_date'] ?? null; + $course_end_date = $all['course_end_date'] ?? null; + if ($course_start_date && $course_end_date) { + $c->where(function ($sub) use ($course_start_date, $course_end_date) { + $sub->whereBetween('start_date', [$course_start_date, $course_end_date]) + ->orWhereBetween('end_date', [$course_start_date, $course_end_date]); + }); + } elseif ($course_start_date) { + $c->where('end_date', '>=', $course_start_date); + } elseif ($course_end_date) { + $c->where('start_date', '<=', $course_end_date); + } + } + if (isset($all['is_chart']) && $all['is_chart'] !== '') { + $c->where('is_chart', $all['is_chart']); + } + }); }); } if (isset($all['user_name']) && !empty($all['user_name'])) { From 8c00b49a5ff9508ca2e54d6b91f7a1078099f02e Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Mon, 19 Jan 2026 14:05:40 +0800 Subject: [PATCH 3/3] update --- .../Controllers/Admin/CompanyController.php | 11 ++++- app/Models/Company.php | 47 ------------------- app/Models/CourseSign.php | 2 +- 3 files changed, 10 insertions(+), 50 deletions(-) diff --git a/app/Http/Controllers/Admin/CompanyController.php b/app/Http/Controllers/Admin/CompanyController.php index 72aff74..6836bd6 100644 --- a/app/Http/Controllers/Admin/CompanyController.php +++ b/app/Http/Controllers/Admin/CompanyController.php @@ -9,6 +9,7 @@ use App\Models\AppointmentType; use App\Models\Book; use App\Models\Calendar; use App\Models\Company; +use App\Models\Course; use App\Models\CourseContentEvaluationAsk; use App\Models\CourseContentEvaluationForm; use App\Models\CourseSign; @@ -283,8 +284,14 @@ class CompanyController extends BaseController $start_date = $start_year ? $start_year . '-01-01' : date('Y-01-01'); $end_date = $end_year ? $end_year . '-12-31' : date('Y-m-d'); if ($start_date && $end_date) { - // 累计被投企业数(从起始日期到结束日期) - $investedCompanies = Company::yhInvestedTotal($end_date, true); + // 累计被投企业数(与 CourseSign::yhInvestedTotal / courses-home 口径一致:getStudentList 学员 + 被投企业) + $course_ids = null; + if (!empty($all['course_type_id'])) { + $tid = is_array($all['course_type_id']) ? $all['course_type_id'] : explode(',', (string) $all['course_type_id']); + $tid = array_filter(array_map('trim', $tid)); + $course_ids = $tid ? Course::whereIn('type', $tid)->pluck('id')->toArray() : null; + } + $investedCompanies = CourseSign::yhInvestedTotal(CourseType::START_DATE, $end_date, $course_ids, true); if ($investedCompanies) { $investedCompaniesCollection = collect($investedCompanies); $statistics['course_signs_invested'] = $investedCompaniesCollection->count(); diff --git a/app/Models/Company.php b/app/Models/Company.php index 745e3fc..8f2d463 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -73,53 +73,6 @@ class Company extends SoftDeletesModel } } - /** - * 累计被投企业统计 - * @param string|null $start_date 开始日期 - * @param string|null $end_date 结束日期 - * @param array|null $course_ids 课程ID(仅在自定义时间时生效) - * @param bool $retList 是否返回列表 - */ - public static function yhInvestedTotal($end_date = null, $retList = false) - { - // 获取这些学员所在的被投企业 - $companies = Company::approvedStudents()->where('is_yh_invested', 1)->get(); - // 自定义时间:需要按被投时间筛选 - // 筛选出被投时间在范围内的企业 - $filteredCompanies = []; - foreach ($companies as $company) { - $projectUsers = $company->project_users ?? []; - $hasValidInvestDate = false; - $allInvestDatesNull = true; - - foreach ($projectUsers as $item) { - $investDate = $item['investDate'] ?? null; - // 检查是否有有效的被投时间 - if ($investDate) { - $allInvestDatesNull = false; - // 检查被投时间是否在范围内 - if ($investDate <= $end_date) { - $hasValidInvestDate = true; - break; // 只要有一条满足就加入 - } - } - } - - // 如果有有效的被投时间在范围内,或者所有被投时间都是null,则加入结果 - if ($hasValidInvestDate || $allInvestDatesNull) { - $filteredCompanies[] = $company; - } - } - $companies = collect($filteredCompanies); - - // 返回结果 - if ($retList) { - return $companies->values(); - } else { - return $companies->count(); - } - } - /** * 今年被投企业统计(统计或列表)- 按年份范围统计 * @param string|null $start_date 开始日期 diff --git a/app/Models/CourseSign.php b/app/Models/CourseSign.php index f4014d8..36d0a88 100755 --- a/app/Models/CourseSign.php +++ b/app/Models/CourseSign.php @@ -181,7 +181,7 @@ class CourseSign extends SoftDeletesModel */ public static function yhInvestedTotal($start_date = null, $end_date = null, $course_ids = null, $retList = false) { - // 默认时间:获取所有学员,不限制课程 + // 默认时间:获取所有学员 $userIds = self::getStudentList($start_date, $end_date, 1, $course_ids)->get()->pluck('user_id'); // 获取这些学员所在的被投企业