diff --git a/app/Models/CourseSign.php b/app/Models/CourseSign.php index 0105595..a522f58 100755 --- a/app/Models/CourseSign.php +++ b/app/Models/CourseSign.php @@ -296,15 +296,15 @@ class CourseSign extends SoftDeletesModel $years = []; if ($start_date && $end_date) { // 从开始和结束日期中提取年份范围 - $startYear = (int)date('Y', strtotime($start_date)); - $endYear = (int)date('Y', strtotime($end_date)); + $startYear = (int) date('Y', strtotime($start_date)); + $endYear = (int) date('Y', strtotime($end_date)); // 生成所有年份的数组 for ($year = $startYear; $year <= $endYear; $year++) { $years[] = $year; } } else { // 如果没有提供日期,使用当前年份 - $years[] = (int)date('Y'); + $years[] = (int) date('Y'); } // 获取这些公司中标记为被投的公司 @@ -320,7 +320,7 @@ class CourseSign extends SoftDeletesModel foreach ($projectUsers as $item) { $investDate = $item['investDate'] ?? null; if ($investDate) { - $investYear = (int)date('Y', strtotime($investDate)); + $investYear = (int) date('Y', strtotime($investDate)); if (in_array($investYear, $years)) { $hasInvestInYears = true; break; @@ -465,34 +465,50 @@ class CourseSign extends SoftDeletesModel * @param bool $retList 是否返回列表,false返回数量,true返回列表 * @return int|array */ - public static function companyInvestedAfterEnrollment($start_date, $end_date, $retList = false) + public static function companyInvestedAfterEnrollment($start_date, $end_date, $course_ids = null, $retList = false) { - $courseSignsQuery = self::getStudentList($start_date, $end_date, 1); - $courseSignsForInvest = $courseSignsQuery->with('user.company')->get(); - dd($courseSignsForInvest->count()); + $courseSignsQuery = self::getStudentList($start_date, $end_date, 1, $course_ids); + $courseSignsForInvest = $courseSignsQuery->with(['user.company', 'course'])->get(); $companiesAfterEnrollment = []; foreach ($courseSignsForInvest as $sign) { if ($sign->user && $sign->user->company && $sign->user->company->is_yh_invested == 1) { - $signDate = \Carbon\Carbon::parse($sign->created_at)->format('Y-m-d'); - // 从 project_users 中获取最早的被投时间 + // 使用课程开课时间作为入学时间 + $enrollmentDate = null; + if ($sign->course && $sign->course->start_date) { + $enrollmentDate = \Carbon\Carbon::parse($sign->course->start_date)->format('Y-m-d'); + } + + // 如果没有开课时间,跳过这条记录 + if (!$enrollmentDate) { + continue; + } + + // 从 project_users 中检查是否有任何一个被投时间 >= 课程开课时间 $projectUsers = $sign->user->company->project_users; + $hasInvestAfterEnrollment = false; $investDate = null; if (!empty($projectUsers) && is_array($projectUsers)) { foreach ($projectUsers as $projectUser) { if (!empty($projectUser['investDate'])) { - if ($investDate === null || $projectUser['investDate'] < $investDate) { - $investDate = $projectUser['investDate']; + $currentInvestDate = $projectUser['investDate']; + // 只要有一个被投时间 >= 课程开课时间,就满足条件 + if ($currentInvestDate >= $enrollmentDate) { + $hasInvestAfterEnrollment = true; + // 记录满足条件的被投时间(如果有多个,记录最早的) + if ($investDate === null || $currentInvestDate < $investDate) { + $investDate = $currentInvestDate; + } } } } } - // 被投时间 >= 报名时间,说明是入学后被投 - if ($investDate && $investDate >= $signDate) { + // 只要有一个被投时间 >= 课程开课时间,说明是入学后被投 + if ($hasInvestAfterEnrollment && $investDate) { $companyId = $sign->user->company->id; if (!isset($companiesAfterEnrollment[$companyId])) { $companiesAfterEnrollment[$companyId] = [ 'company' => $sign->user->company, - 'first_sign_date' => $signDate, + 'first_sign_date' => $enrollmentDate, 'invest_date' => $investDate, 'users' => [], ];