diff --git a/app/Http/Controllers/Admin/OtherController.php b/app/Http/Controllers/Admin/OtherController.php index 83db11f..0a707a2 100755 --- a/app/Http/Controllers/Admin/OtherController.php +++ b/app/Http/Controllers/Admin/OtherController.php @@ -933,24 +933,67 @@ class OtherController extends CommonController break; case 'areas': - // 区域明细 - 导出course_signs_pass列表数据,附加区域信息 - $courseSigns = CourseSign::area($start_date, $end_date, 1, $courses->pluck('id'), false); - // 加载关联关系 - $courseSigns->load(['user.company', 'course']); + // 区域明细 - 使用与coursesHome统计逻辑一致的CourseSign::area方法 + // 第一个sheet:普通学员区域明细 + $courseSignList = CourseSign::getStudentList($start_date, $end_date, 1, $courses->pluck('id')); + + // 从数据字典获取区域列表(与CourseSign::area逻辑一致) + $suzhouAreas = ParameterDetail::where('parameter_id', 5) + ->where('status', 1) + ->orderBy('sort', 'asc') + ->pluck('value') + ->toArray(); + + $areasData = []; + foreach ($suzhouAreas as $area) { + // 按照CourseSign::area的逻辑获取该区域下的CourseSign + if ($area === '高新区') { + $areaCourseSigns = (clone $courseSignList)->whereHas('user', function ($query) { + $query->whereHas('company', function ($query) { + $query->where('company_city', '苏州市') + ->where(function ($q) { + $q->where('company_area', '高新区') + ->orWhere('company_area', '虎丘区'); + }); + }); + })->get(); + } elseif ($area === '苏州市外') { + // 苏州市外:统计除了苏州之外的所有数据 + $areaCourseSigns = (clone $courseSignList)->whereHas('user', function ($query) { + $query->whereHas('company', function ($query) { + $query->where('company_city', '!=', '苏州市'); + }); + })->get(); + } else { + // 其他区域:正常统计 + $areaCourseSigns = (clone $courseSignList)->whereHas('user', function ($query) use ($area) { + $query->whereHas('company', function ($query) use ($area) { + $query->where('company_city', '苏州市') + ->where('company_area', 'like', '%' . $area . '%'); + }); + })->get(); + } - foreach ($courseSigns as $sign) { - $data[] = [ - 'company_name' => $sign->user->company->company_name ?? '', - 'company_area' => $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 ?? '', - 'course_name' => $sign->course->name ?? '', - // 'created_at' => $sign->created_at ? $sign->created_at->format('Y-m-d H:i:s') : '', - ]; + // 加载关联关系 + $areaCourseSigns->load(['user.company', 'course']); + + // 将该区域下的学员明细添加到导出数据 + foreach ($areaCourseSigns as $sign) { + $areasData[] = [ + 'area' => $area, + 'company_name' => $sign->user->company->company_name ?? '', + 'company_area' => $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 ?? '', + 'course_name' => $sign->course->name ?? '', + ]; + } } + $fields = [ + 'area' => '区域', 'company_name' => '企业名称', 'company_area' => '公司区域', 'company_city' => '公司城市', @@ -958,9 +1001,75 @@ class OtherController extends CommonController 'user_name' => '学员姓名', 'mobile' => '手机号', 'course_name' => '课程名称', - // 'created_at' => '报名时间', ]; + + // 第二个sheet:校友区域明细 - 使用CourseSign::area方法,is_schoolmate=true + $courseSignListSchoolmate = CourseSign::getStudentList($start_date, $end_date, 1, $courses->pluck('id')); + // 添加校友筛选条件 + $courseSignListSchoolmate->whereHas('user', function ($query) { + $query->where('is_schoolmate', 1); + }); + + $areasSchoolmateData = []; + foreach ($suzhouAreas as $area) { + // 按照CourseSign::area的逻辑获取该区域下的CourseSign(校友) + if ($area === '高新区') { + $areaCourseSigns = (clone $courseSignListSchoolmate)->whereHas('user', function ($query) { + $query->whereHas('company', function ($query) { + $query->where('company_city', '苏州市') + ->where(function ($q) { + $q->where('company_area', '高新区') + ->orWhere('company_area', '虎丘区'); + }); + }); + })->get(); + } elseif ($area === '苏州市外') { + // 苏州市外:统计除了苏州之外的所有数据 + $areaCourseSigns = (clone $courseSignListSchoolmate)->whereHas('user', function ($query) { + $query->whereHas('company', function ($query) { + $query->where('company_city', '!=', '苏州市'); + }); + })->get(); + } else { + // 其他区域:正常统计 + $areaCourseSigns = (clone $courseSignListSchoolmate)->whereHas('user', function ($query) use ($area) { + $query->whereHas('company', function ($query) use ($area) { + $query->where('company_city', '苏州市') + ->where('company_area', 'like', '%' . $area . '%'); + }); + })->get(); + } + + // 加载关联关系 + $areaCourseSigns->load(['user.company', 'course']); + + // 将该区域下的校友明细添加到导出数据 + foreach ($areaCourseSigns as $sign) { + $areasSchoolmateData[] = [ + 'area' => $area, + 'company_name' => $sign->user->company->company_name ?? '', + 'company_area' => $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 ?? '', + 'course_name' => $sign->course->name ?? '', + ]; + } + } + + $sheets = [ + new SheetExport($areasData, $fields, '区域明细'), + new SheetExport($areasSchoolmateData, $fields, '校友区域明细'), + ]; + $filename = '区域明细'; + + // 直接返回多 sheet 导出 + return Excel::download( + new MultiSheetExport($sheets), + $filename . '_' . date('YmdHis') . '.xlsx' + ); break; case 'company_market_total':