diff --git a/app/Http/Controllers/Admin/OtherController.php b/app/Http/Controllers/Admin/OtherController.php index 83dbbf8..2bf97ca 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')); } @@ -329,6 +325,9 @@ class OtherController extends CommonController 'company_address' => $company->company_address ?? '', 'business_scope' => $company->business_scope ?? '', 'contact_phone' => $company->contact_phone ?? '', + 'contact_mail' => $company->contact_mail ?? '', + 'company_tag' => $company->company_tag ?? '', + 'credit_code' => ' ' . $company->credit_code ?? '', ]; } $fields = [ @@ -338,6 +337,9 @@ class OtherController extends CommonController 'company_address' => '地址', 'business_scope' => '营业范围', 'contact_phone' => '联系电话', + 'contact_mail' => '联系邮箱', + 'company_tag' => '企业资质', + 'credit_code' => '统一社会信用代码', ]; $filename = '被投企业明细'; break; @@ -384,7 +386,8 @@ class OtherController extends CommonController 'company_name' => $sign->user->company_name ?? '', 'company_area' => $sign->user->company_area ?? '', 'course_name' => $sign->course->name ?? '', - 'created_at' => $sign->created_at ? $sign->created_at->format('Y-m-d H:i:s') : '', + 'course_type' => $sign->course->typeDetail->name ?? '', + // 'created_at' => $sign->created_at ? $sign->created_at->format('Y-m-d H:i:s') : '', ]; } $fields = [ @@ -393,7 +396,8 @@ class OtherController extends CommonController 'company_name' => '企业名称', 'company_area' => '所在区域', 'course_name' => '课程名称', - 'created_at' => '报名时间', + 'course_type' => '课程类型', + // 'created_at' => '报名时间', ]; $filename = '审核通过人数明细'; break; @@ -401,13 +405,14 @@ class OtherController extends CommonController case 'course_signs_pass_unique': // 审核通过人数去重明细 - 使用courseSignsTotalByUnique方法获取列表 $users = CourseSign::courseSignsTotalByUnique($start_date, $end_date, 1, $course_ids, null, true); - foreach ($users as $user) { // 获取该学员报名的课程列表(与coursesHome逻辑保持一致) $userCourseSigns = CourseSign::where('user_id', $user->id) - ->whereDate('created_at', '>=', $start_date) - ->whereDate('created_at', '<=', $end_date) - ->where('status', 1) + ->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]); + })->where('status', 1) ->where(function ($query) use ($course_ids) { if ($course_ids->isNotEmpty()) { $query->whereIn('course_id', $course_ids); @@ -415,7 +420,7 @@ class OtherController extends CommonController })->whereNotIn('status', [4, 5]) ->with('course') ->get(); - $courseNames = $userCourseSigns->pluck('course.name')->filter()->unique()->implode('、'); + $courseNames = $userCourseSigns->pluck('course.name')->filter()->unique()->implode("\n\r"); $data[] = [ 'user_name' => $user->name ?? '', @@ -466,27 +471,31 @@ class OtherController extends CommonController case 'areas': // 区域明细 - 导出course_signs_pass列表数据,附加区域信息 - $courseSigns = CourseSign::courseSignsTotal($start_date, $end_date, 1, $course_ids, null, true); + $courseSigns = CourseSign::area($start_date, $end_date, 1, $courses->pluck('id'), false); // 加载关联关系 - $courseSigns->load(['user', 'course']); + $courseSigns->load(['user.company', 'course']); foreach ($courseSigns as $sign) { $data[] = [ - 'area_name' => $sign->user->company_area ?? '', + 'company_name' => $sign->user->company->company_name ?? '', + 'area_name' => $sign->user->company->company_area ?? '', + 'company_city' => $sign->user->company->company_city ?? '', + 'company_province' => $sign->user->company->company_province ?? '', 'user_name' => $sign->user->name ?? '', 'mobile' => $sign->user->mobile ?? '', - 'company_name' => $sign->user->company_name ?? '', 'course_name' => $sign->course->name ?? '', - 'created_at' => $sign->created_at ? $sign->created_at->format('Y-m-d H:i:s') : '', + // 'created_at' => $sign->created_at ? $sign->created_at->format('Y-m-d H:i:s') : '', ]; } $fields = [ - 'area_name' => '区域名称', + 'company_name' => '企业名称', + 'company_area' => '公司区域', + 'company_city' => '公司城市', + 'company_province' => '公司省份', 'user_name' => '学员姓名', 'mobile' => '手机号', - 'company_name' => '企业名称', 'course_name' => '课程名称', - 'created_at' => '报名时间', + // 'created_at' => '报名时间', ]; $filename = '区域明细'; break; @@ -567,11 +576,11 @@ class OtherController extends CommonController case 'company_market_after_enrollment_total': // 入学后上市公司明细 - 使用模型方法 - $companiesAfterEnrollment = CourseSign::companyMarketAfterEnrollment($start_date, $end_date, $course_ids->toArray(), true); + $companiesAfterEnrollment = CourseSign::companyMarketAfterEnrollment($start_date, $end_date, $course_ids, true); foreach ($companiesAfterEnrollment as $item) { $company = $item['company']; - $userNames = collect($item['users'])->pluck('name')->filter()->unique()->implode('、'); + $userNames = collect($item['users'])->pluck('name')->filter()->unique()->implode("\n\r"); $data[] = [ 'company_name' => $company->company_name, 'company_legal_representative' => $company->company_legal_representative ?? '', diff --git a/app/Models/CourseSign.php b/app/Models/CourseSign.php index c86ca1c..f0a7c38 100755 --- a/app/Models/CourseSign.php +++ b/app/Models/CourseSign.php @@ -139,7 +139,7 @@ class CourseSign extends SoftDeletesModel $user = User::whereIn('id', $courseSignByType->pluck('user_id'))->distinct('mobile'); if ($retList) { // 列表 - return $user->get(); + return $user->groupBy('mobile')->get(); } else { // 统计数据 return $user->count(); @@ -248,5 +248,67 @@ 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) { + $sourseSignList2 = (clone $courseSignList)->whereHas('user', function ($query) use ($area) { + $query->whereHas('company', function ($query) use ($area) { + $query->where('company_area', $area); + }); + })->get(); + + $list[] = [ + 'area' => $area, + // 未去重 + 'total' => $sourseSignList2->count(), + // 已去重 + 'total_unique' => User::whereIn('id', $sourseSignList2->pluck('user_id'))->distinct('mobile')->groupBy('mobile')->get()->count(), + ]; + + } + $courseSignList3 = (clone $courseSignList)->whereHas('user', function ($query) { + $query->whereHas('company', function ($query) { + $query->where('company_city', '!=', '苏州市'); + }); + })->get(); + $list[] = [ + 'area' => '苏州市外', + 'total' => $courseSignList3->count(), + // 已去重 + 'total_unique' => User::groupBy('mobile')->whereIn('id', $courseSignList3->pluck('user_id'))->count(), + ]; + + if ($retList) { + // 返回列表 + return $list; + } else { + // 返回统计数据 + return $courseSignList->get(); + } + } + }