master
cody 2 weeks ago
parent e3c18074a0
commit c15fcdfc98

@ -273,11 +273,7 @@ class OtherController extends CommonController
} }
} }
// 区域明细统计 // 区域明细统计
$areas = ParameterDetail::where('parameter_id', 5)->get(); $areas = CourseSign::area($start_date, $end_date, 1, $courses->pluck('id'), true);
foreach ($areas as $area) {
$area->course_signs_pass = CourseSign::courseSignsTotal($start_date, $end_date, 1, $courses->pluck('id'), $area->value);
$area->course_signs_pass_unique = CourseSign::courseSignsTotalByUnique($start_date, $end_date, 1, $courses->pluck('id'), $area->value);
}
return $this->success(compact('list', 'courseTypesSum', 'areas')); return $this->success(compact('list', 'courseTypesSum', 'areas'));
} }

@ -248,5 +248,59 @@ class CourseSign extends SoftDeletesModel
} }
} }
/**
* 区域统计
* @param string $start_date 开始日期
* @param string $end_date 结束日期
* @param array|null $course_ids 课程ID数组不传则统计所有课程
* @param bool $retList 是否返回列表false返回详情true返回列表
*/
public static function area($start_date, $end_date, $status = null, $course_ids = null, $retList = false)
{
// 获取所有学员id
$courseSignList = CourseSign::where(function ($query) use ($status, $course_ids) {
if (isset($status)) {
$query->where('status', $status);
}
if (isset($course_ids)) {
$query->whereIn('course_id', $course_ids);
}
})->whereHas('course', function ($query) use ($start_date, $end_date) {
// 开始结束日期的筛选。or查询
$query->whereBetween('start_date', [$start_date, $end_date])
->whereBetween('end_date', [$start_date, $end_date]);
})->whereHas('user')->whereNotIn('status', [4, 5]);
// 地区
$suzhouArea = Company::where('company_city', '苏州市')->pluck('company_area')->unique();
$list = [];
foreach ($suzhouArea as $area) {
$list[] = [
'area' => $area,
'total' => $courseSignList->whereHas('user', function ($query) use ($area) {
$query->whereHas('company', function ($query) use ($area) {
$query->where('company_area', $area);
});
})->count(),
];
}
$list[] = [
'area' => '苏州市外',
'total' => $courseSignList->whereHas('user', function ($query) use ($suzhouArea) {
$query->whereHas('company', function ($query) use ($suzhouArea) {
$query->whereNotIn('company_area', $suzhouArea);
});
})->count(),
];
if ($retList) {
// 返回列表
return $list;
} else {
// 返回统计数据
return $courseSignList->get();
}
}
} }

Loading…
Cancel
Save