From 68ad3346b7328ef402397637b47b19d80e1368da Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Sat, 29 Nov 2025 13:30:28 +0800 Subject: [PATCH] update --- .../Controllers/Admin/CompanyController.php | 61 +++++++++++++------ 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/app/Http/Controllers/Admin/CompanyController.php b/app/Http/Controllers/Admin/CompanyController.php index 216210f..60a09ae 100644 --- a/app/Http/Controllers/Admin/CompanyController.php +++ b/app/Http/Controllers/Admin/CompanyController.php @@ -39,8 +39,6 @@ class CompanyController extends BaseController * tags={"公司管理"}, * summary="参数", * description="", - * @OA\Parameter(name="start_date", in="query", @OA\Schema(type="string"), required=false, description="开始日期"), - * @OA\Parameter(name="end_date", in="query", @OA\Schema(type="string"), required=false, description="结束日期"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Response( * response="200", @@ -50,9 +48,6 @@ class CompanyController extends BaseController */ public function config() { - // 如果提供了开始时间和结束时间,则计算统计 - $start_date = request('start_date', CourseType::START_DATE); - $end_date = request('end_date', date('Y-m-d')); // 企业标签 $companiesTags = Company::where('company_tag', '!=', '')->pluck('company_tag'); $companiesTags = $companiesTags->flatten()->implode(','); @@ -63,17 +58,7 @@ class CompanyController extends BaseController }); $companiesTags = array_values($companiesTags); - // 累计被投企业数(从起始日期到结束日期) - $course_signs_invested = CourseSign::yhInvestedTotal(CourseType::START_DATE, $end_date, null); - - // 入学后被投企业数量(在指定时间范围内报名的学员所在公司中,在入学后被投的公司数量) - $company_invested_after_enrollment_total = CourseSign::companyInvestedAfterEnrollment($start_date, $end_date, null); - - // 今年范围内被投企业数(在指定时间范围内报名的学员所在公司中,被投时间在年份范围内的公司数量) - $company_invested_year_total = CourseSign::companyInvestedYear($start_date, $end_date, null); - - - return $this->success(compact('companiesTags', 'course_signs_invested', 'company_invested_after_enrollment_total', 'company_invested_year_total')); + return $this->success(compact('companiesTags')); } @@ -92,6 +77,10 @@ class CompanyController extends BaseController * @OA\Parameter(name="sort_name", in="query", @OA\Schema(type="string"), required=false, description="排序字段名字"), * @OA\Parameter(name="sort_type", in="query", @OA\Schema(type="string"), required=false, description="排序类型"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Parameter(name="start_year", in="query", @OA\Schema(type="string"), required=false, description="开始年份"), + * @OA\Parameter(name="end_year", in="query", @OA\Schema(type="string"), required=false, description="结束年份"), + * @OA\Parameter(name="start_date", in="query", @OA\Schema(type="string"), required=false, description="开始日期(用于统计)"), + * @OA\Parameter(name="end_date", in="query", @OA\Schema(type="string"), required=false, description="结束日期(用于统计)"), * @OA\Parameter(name="course_type_id", in="query", @OA\Schema(type="string"), required=true, description="课程体系id"), * @OA\Parameter(name="course_name", in="query", @OA\Schema(type="string"), required=true, description="课程名称"), * @OA\Parameter(name="user_name", in="query", @OA\Schema(type="string"), required=true, description="学员名称"), @@ -105,6 +94,9 @@ class CompanyController extends BaseController public function index() { $all = request()->all(); + $start_year = $all['start_year'] ?? null; + $end_year = $all['end_year'] ?? null; + $list = $this->model->with([ 'users' => function ($query) use ($all) { $query->whereHas('courseSigns', function ($q) { @@ -128,7 +120,17 @@ class CompanyController extends BaseController if (isset($all['is_schoolmate'])) { $query->where('is_schoolmate', $all['is_schoolmate']); } - })->where(function ($query) use ($all) { + })->where(function ($query) use ($all, $start_year, $end_year) { + // 根据开始和结束年份筛选 project_users 中的 investDate + if ($start_year && $end_year) { + // 使用 LIKE 匹配 JSON 字符串中的年份范围 + $query->where(function ($q) use ($start_year, $end_year) { + for ($year = (int)$start_year; $year <= (int)$end_year; $year++) { + $q->orWhere('project_users', 'like', '%"investDate":"' . $year . '%'); + } + }); + } + if (isset($all['filter']) && !empty($all['filter'])) { foreach ($all['filter'] as $condition) { $key = $condition['key'] ?? null; @@ -200,7 +202,30 @@ class CompanyController extends BaseController // 输出 $list = $list->paginate($all['page_size'] ?? 20); } - return $this->success($list); + + // 计算统计数据(如果提供了开始和结束年份) + $statistics = [ + 'course_signs_invested' => 0, + 'company_invested_after_enrollment_total' => 0, + 'company_invested_year_total' => 0, + ]; + $start_date = $start_year ? $start_year . '-01-01' : CourseType::START_DATE; + $end_date = $end_year ? $end_year . '-12-31' : date('Y-m-d'); + if ($start_date && $end_date) { + // 累计被投企业数(从起始日期到结束日期) + $statistics['course_signs_invested'] = CourseSign::yhInvestedTotal(CourseType::START_DATE, $end_date, null); + + // 入学后被投企业数量(在指定时间范围内报名的学员所在公司中,在入学后被投的公司数量) + $statistics['company_invested_after_enrollment_total'] = CourseSign::companyInvestedAfterEnrollment($start_date, $end_date, null); + + // 年份范围内被投企业数(在指定时间范围内报名的学员所在公司中,被投时间在年份范围内的公司数量) + $statistics['company_invested_year_total'] = CourseSign::companyInvestedYear($start_date, $end_date, null); + } + + // 将统计数据添加到返回结果中 + $result = $list->toArray(); + $result['statistics'] = $statistics; + return $this->success($result); } /**