master
cody 2 weeks ago
parent 12e352b220
commit ae10745c42

@ -222,7 +222,7 @@ class OtherController extends CommonController
$course_type_id = $params['course_type_id']; $course_type_id = $params['course_type_id'];
$courses = $params['courses']; $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')); $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_type_signs_pass_unique' => CourseSign::courseSignsTotalByUnique($start_date, $end_date, 1, $courses2->pluck('id'), null),
'course_name' => $course->name, 'course_name' => $course->name,
'course_signs_pass' => CourseSign::courseSignsTotal($start_date, $end_date, 1, [$course->id]), '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) { switch ($export_type) {
case 'course_signs_invested': case 'course_signs_invested':
// 被投企业明细 - 使用与coursesHome相同的算法 // 被投企业明细 - 使用与coursesHome相同的算法
$companies = CourseSign::yhInvested($start_date, $end_date, true); $companies = CourseSign::yhInvested($start_date, $end_date, $course_ids, true);
foreach ($companies as $company) { foreach ($companies as $company) {
$data[] = [ $data[] = [
'company_name' => $company->company_name, 'company_name' => $company->company_name,

@ -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)) $isDefaultDate = empty($start_date) || $start_date == CourseType::START_DATE;
->where('is_yh_invested', 1)->get();
// 非默认时间:按 investDate 筛选 // 获取学员ID列表
if ($start_date && $start_date != CourseType::START_DATE) { 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); $startDate = substr($start_date, 0, 10);
$endDate = substr($end_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; $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();
}
} }
/** /**

Loading…
Cancel
Save