diff --git a/app/Http/Controllers/Admin/OtherController.php b/app/Http/Controllers/Admin/OtherController.php index 57e5313..129f416 100755 --- a/app/Http/Controllers/Admin/OtherController.php +++ b/app/Http/Controllers/Admin/OtherController.php @@ -273,11 +273,7 @@ class OtherController extends CommonController } } // 区域明细统计 - $areas = ParameterDetail::where('parameter_id', 5)->get(); - 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); - } + $areas = CourseSign::area($start_date, $end_date, 1, $courses->pluck('id'), true); return $this->success(compact('list', 'courseTypesSum', 'areas')); } diff --git a/app/Models/CourseSign.php b/app/Models/CourseSign.php index 4aebf59..41fc52c 100755 --- a/app/Models/CourseSign.php +++ b/app/Models/CourseSign.php @@ -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(); + } + } + }