master
cody 2 weeks ago
parent 65e5a28d70
commit f2ea48c77c

@ -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);
// 全市干部参与企业

@ -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
}

Loading…
Cancel
Save