|
|
|
|
@ -831,6 +831,125 @@ class CourseSign extends SoftDeletesModel
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 苏州重点上市公司(统计或列表)
|
|
|
|
|
* 在上市公司基础上,限定为苏州地区的公司
|
|
|
|
|
* 条件:user表的company_address包含"苏州",或关联公司的company_address包含"苏州",或company_city包含"苏州"
|
|
|
|
|
* @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 suzhouStock($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();
|
|
|
|
|
|
|
|
|
|
// 获取这些公司中标记为上市的公司
|
|
|
|
|
$companies = Company::approvedStudents()->whereIn('id', $companyIds)
|
|
|
|
|
->where('company_market', 1)
|
|
|
|
|
->get()
|
|
|
|
|
->keyBy('id');
|
|
|
|
|
|
|
|
|
|
// 筛选苏州地区的公司
|
|
|
|
|
$suzhouCompanyIds = [];
|
|
|
|
|
foreach ($courseSigns as $courseSign) {
|
|
|
|
|
if (!$courseSign->user || !$courseSign->user->company) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$companyId = $courseSign->user->company->id;
|
|
|
|
|
// 只处理上市公司的记录
|
|
|
|
|
if (!isset($companies[$companyId])) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$user = $courseSign->user;
|
|
|
|
|
$company = $user->company;
|
|
|
|
|
|
|
|
|
|
// 判断是否为苏州地区:user表的company_address包含"苏州",或关联公司的company_address包含"苏州",或company_city包含"苏州"
|
|
|
|
|
$isSuzhou = false;
|
|
|
|
|
if ($user->company_address && strpos($user->company_address, '苏州') !== false) {
|
|
|
|
|
$isSuzhou = true;
|
|
|
|
|
} elseif ($company->company_address && strpos($company->company_address, '苏州') !== false) {
|
|
|
|
|
$isSuzhou = true;
|
|
|
|
|
} elseif ($company->company_city && strpos($company->company_city, '苏州') !== false) {
|
|
|
|
|
$isSuzhou = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($isSuzhou) {
|
|
|
|
|
$suzhouCompanyIds[$companyId] = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 只保留苏州地区的上市公司
|
|
|
|
|
$suzhouCompanies = $companies->filter(function ($company) use ($suzhouCompanyIds) {
|
|
|
|
|
return isset($suzhouCompanyIds[$company->id]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if ($retList) {
|
|
|
|
|
// 返回详细列表:主表是公司,子数据是学员信息
|
|
|
|
|
$result = [];
|
|
|
|
|
foreach ($courseSigns as $courseSign) {
|
|
|
|
|
if (!$courseSign->user || !$courseSign->user->company) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$companyId = $courseSign->user->company->id;
|
|
|
|
|
// 只处理苏州上市公司的记录
|
|
|
|
|
if (!isset($suzhouCompanyIds[$companyId])) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$company = $suzhouCompanies[$companyId] ?? $courseSign->user->company;
|
|
|
|
|
|
|
|
|
|
// 如果公司还没有在结果中,初始化
|
|
|
|
|
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 count($suzhouCompanyIds);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 今年上市公司(统计或列表)
|
|
|
|
|
* @param string|null $start_date 开始日期
|
|
|
|
|
|