master
cody 1 week ago
parent 8bef604b52
commit ec9377aa39

@ -565,28 +565,13 @@ class OtherController extends CommonController
case 'company_market_total':
// 上市公司明细 - 所有上市公司,关联学员、课程信息
$companies = CourseSign::shangshi($start_date, $end_date, $courses->pluck('id'), true);
// 加载关联关系
// $companies->load(['users.courseSigns.course.typeDetail']);
$companiesData = CourseSign::shangshi($start_date, $end_date, $course_ids->toArray(), true);
foreach ($companies as $company) {
// 获取该公司在时间范围内的学员报名记录
$courseSigns = CourseSign::where(function ($query) use ($course_ids) {
$query->where('status', 1);
if (isset($course_ids)) {
$query->whereIn('course_id', $course_ids);
}
})->whereHas('course', function ($query) use ($start_date, $end_date) {
// 开始结束日期的筛选。or查询
if ($start_date && $end_date) {
$query->whereBetween('start_date', [$start_date, $end_date])
->orWhereBetween('end_date', [$start_date, $end_date]);
}
})->whereNotIn('status', [4, 5, 6])
->with(['user', 'course.typeDetail'])
->get();
foreach ($companiesData as $item) {
$company = $item['company'];
$courseSigns = $item['courseSigns'] ?? [];
if ($courseSigns->isEmpty()) {
if (empty($courseSigns)) {
// 如果没有学员报名记录,仍然导出公司基本信息
$data[] = [
'company_name' => $company->company_name,

@ -410,7 +410,7 @@ class CourseSign extends SoftDeletesModel
'常州团队',
'国企元禾'
];
// $company = Company::where(function ($query) use ($companyNameKeyword) {
// $company = Company::where(function ($query) use ($companyNameKeyword) {
// foreach ($companyNameKeyword as $item) {
// $query->orWhere('company_name', 'like', '%' . $item . '%');
// }
@ -495,20 +495,64 @@ 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 shangshi($start_date = null, $end_date = null, $course_ids = null, $retList = false)
{
$courseSignsQuery = self::getStudentList($start_date, $end_date, 1, $course_ids);
$list = Company::whereHas('users', function ($query) use ($courseSignsQuery) {
$query->whereIn('id', $courseSignsQuery->get()->pluck('user_id'));
})->where('company_market', 1)->get();
$courseSigns = $courseSignsQuery->with(['user.company', 'course.typeDetail'])->get();
// 获取所有上市公司的ID
$companyIds = $courseSigns->pluck('user.company.id')
->filter()
->unique()
->toArray();
// 获取这些公司中标记为上市的公司
$companies = Company::whereIn('id', $companyIds)
->where('company_market', 1)
->get()
->keyBy('id');
if ($retList) {
return $list;
// 返回详细列表,包含学员、课程信息
$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,
'courseSigns' => [],
];
}
// 添加学员报名记录(包含学员、课程信息)
$result[$companyId]['courseSigns'][] = $courseSign;
}
// 转换为数组并返回
return array_values($result);
} else {
return $list->count();
// 返回统计数据
return $companies->count();
}
}
/**

Loading…
Cancel
Save