|
|
|
@ -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 开始日期
|
|
|
|
* @param string $start_date 开始日期
|
|
|
|
@ -684,3 +787,4 @@ class CourseSign extends SoftDeletesModel
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|