diff --git a/plugin/admin/app/controller/StudentScheduleController.php b/plugin/admin/app/controller/StudentScheduleController.php index fbf9f45..3ca6b53 100644 --- a/plugin/admin/app/controller/StudentScheduleController.php +++ b/plugin/admin/app/controller/StudentScheduleController.php @@ -8,6 +8,8 @@ use app\common\model\Teacher; use app\common\model\TeacherScheduleTime; use app\common\service\SendMsgCronJobService; use app\constant\ResponseCode; +use PhpOffice\PhpSpreadsheet\Spreadsheet; +use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use support\Request; use support\Response; use plugin\admin\app\model\StudentSchedule; @@ -88,6 +90,10 @@ class StudentScheduleController extends Crud $total = $student_schedule->count(); $list = $student_schedule->with(['teacher', 'subject'])->page($page, $limit)->select(); + foreach ($list as &$item) { + $item['week'] = date('D', strtotime($item['date'])); + } + return json([ 'code' => ResponseCode::WEB_API_SUCCESS, 'data' => $list, @@ -203,7 +209,7 @@ class StudentScheduleController extends Crud //删除其它学生的课程 $student_schedule = StudentSchedule::where(['teacher_schedule_time_id' => $teacher_schedule_time->id])->delete(); - $student = Student::where(['id'=>$data['student_id']])->findOrEmpty(); + $student = Student::where(['id' => $data['student_id']])->findOrEmpty(); $res = \app\common\model\StudentSchedule::create([ 'student_id' => $data['student_id'], 'student_name' => $student->student_name, @@ -280,7 +286,7 @@ class StudentScheduleController extends Crud foreach ($list as $item) { $time_period = explode('-', $item['time']); if ($item['subject_id']) { - $title = $item['time'] . PHP_EOL . $item['teacher_name'] . PHP_EOL . $item['subject_name'] . '/' . $item['english_name']; + $title = $item['time'] . PHP_EOL . $item['teacher_name'] . PHP_EOL . $item['subject_name'] . '/' . $item['english_name']; if ($item['is_publish'] == 0) { $color = 'orange'; } else { @@ -321,7 +327,7 @@ class StudentScheduleController extends Crud { $data = $request->get(); - $schedule_time = \app\common\model\StudentSchedule::where(['id'=>$data['schedule_time_id']])->with(['teacher', 'subject',])->findOrEmpty()->toArray(); + $schedule_time = \app\common\model\StudentSchedule::where(['id' => $data['schedule_time_id']])->with(['teacher', 'subject',])->findOrEmpty()->toArray(); return view('student/schedule_time_setting', ['schedule_time' => $schedule_time]); } @@ -341,9 +347,9 @@ class StudentScheduleController extends Crud throw new Exception('未找到排课时间'); } $changeData = []; - if(isset($data['is_publish'])){ + if (isset($data['is_publish'])) { $student_schedule_time->is_publish = $data['is_publish']; - if($data['is_publish']){ + if ($data['is_publish']) { (new SendMsgCronJobService())->teacherScheduleTimePublishMsgToStudent($student_schedule_time->teacher_schedule_time_id); } } @@ -355,7 +361,7 @@ class StudentScheduleController extends Crud 'data' => [], 'msg' => 'success' ]); - }catch (Exception $e) { + } catch (Exception $e) { return json([ 'code' => ResponseCode::WEB_API_FAIL, 'data' => [], @@ -364,4 +370,160 @@ class StudentScheduleController extends Crud } } + public function exportStudentSchedule(Request $request) + { + try { + $data = $request->post(); + + if (!isset($data['student_id']) || empty($data['student_id'])) { + throw new Exception('请选择学生后导出'); + } + + if (!isset($data['month']) || empty($data['month'])) { + throw new Exception('请选择月份后导出'); + } + + $student_schedule = \app\common\model\StudentSchedule::order('start_time asc'); + + if (isset($data['student_id']) && !empty($data['student_id'])) { + $student_schedule->where(['student_id' => $data['student_id']]); + } + if (isset($data['teacher_id']) && !empty($data['teacher_id'])) { + $student_schedule->where(['teacher_id' => $data['teacher_id']]); + } + if (isset($data['subject_id']) && !empty($data['subject_id'])) { + $student_schedule->where(['subject_id' => $data['subject_id']]); + } + + if (isset($data['month']) && !empty($data['month'])) { + $student_schedule->where(['month' => $data['month']]); + } + + $publish_status = 'all'; + + if (isset($data['is_publish']) && !empty($data['is_publish'])) { + if($data['is_publish'] == 1){ + $publish_status = 'published'; + }else{ + $publish_status = 'unpublished'; + } + $student_schedule->where(['is_publish' => $data['is_publish']]); + } + $summary = $student_schedule->with(['teacher', 'subject'])->select()->toArray(); + + $export_data = []; + foreach ($summary as $item) { + $export_data[$item['date']][$item['time']][] = $item; + } + + + + $spreadsheet = new Spreadsheet(); + $worksheet = $spreadsheet->getActiveSheet(); +//设置工作表标题名称 + $worksheet->setTitle('学生排课汇总'); + $worksheet->setCellValue('A1', 'Week'); + $worksheet->setCellValue('B1', 'Date'); + $worksheet->setCellValue('C1', 'China TIme'); + $worksheet->setCellValue('D1', 'Local Time(Tutor)'); + $worksheet->setCellValue('E1', 'Subject'); + $worksheet->setCellValue('F1', 'Tutor'); + $worksheet->setCellValue('G1', 'Student'); + $worksheet->setCellValue('H1', 'Duration'); + $worksheet->setCellValue('I1', 'Note'); + $worksheet->getStyle('A1:I1')->getFill() + ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) + ->getStartColor()->setRGB('4f81bd'); + + + $month_days = get_dates_in_month(date('Y', strtotime($data['month'])), date('m', strtotime($data['month']))); + +// $column = Coordinate::columnIndexFromString(2); + + $global_student_name = ''; + $offset_row = 2; + foreach ($month_days as $index => $date) { + $week = date('l', strtotime($date)); + + if ($week == 'Sunday' && $index != 0) { + //合并单元格 + $merge_offset = $index + $offset_row; + $worksheet->mergeCells("A{$merge_offset}:H{$merge_offset}"); + $offset_row++; + } + + $merge_count = 1; + $china_time = ''; + $en_time = ''; + $subject_name = ''; + $teacher_name = ''; + $student_name = ''; + $row_publish_status = ''; + $hour = ''; + if (isset($export_data[$date])) { + $merge_count = count($export_data[$date]); + foreach ($export_data[$date] as $schedule) { + foreach ($schedule as $schedule_time) { + $china_time = $schedule_time['time']; + $en_time = $schedule_time['en_time']; + $subject_name = $schedule_time['english_name']; + $teacher_name = $schedule_time['teacher_name']; + $student_name = $schedule_time['student_name']; + $global_student_name = $student_name; + $row_publish_status = $schedule_time['is_publish']? 'published' : 'unpublished'; + $hour = $schedule_time['hour']; + } + + } + } + + $row = $index + $offset_row; + if ($merge_count > 1) { + //合并单元格 + $worksheet->mergeCells("A{$row}:A" . ($row + $merge_count - 1)); + } + + $worksheet->setCellValue('A' . $row, $week); + $worksheet->setCellValue('B' . $row, date('m/d', strtotime($date))); + $worksheet->setCellValue('C' . $row, $china_time); + $worksheet->setCellValue('D' . $row, $en_time); + $worksheet->setCellValue('E' . $row, $subject_name); + $worksheet->setCellValue('F' . $row, $teacher_name); + $worksheet->setCellValue('G' . $row, $student_name); + $worksheet->setCellValue('H' . $row, $hour); + $worksheet->setCellValue('I' . $row, $row_publish_status); + } + + $writer = new Xlsx($spreadsheet); + + + $file_name = $data['month'] . '-' . $global_student_name .'-' . $publish_status .'-' . time() . '.xlsx'; + + $file_path = '/export_file/'; + $save_path = public_path($file_path); + if (!is_dir($save_path)) { + mkdir($save_path, 0777, true); + } + $writer->save($save_path . $file_name); + + return json([ + 'code' => ResponseCode::WEB_API_SUCCESS, + 'data' => [ + 'file_url' => getenv('SERVER_DOMAIN') . $file_path . $file_name, +// 'file_url' => 'http://course.test' . $file_path . $file_name, + 'file_name' => $file_name + ], + 'msg' => 'success' + ]); + + + } catch (Exception $e) { + return json([ + 'code' => ResponseCode::WEB_API_FAIL, + 'data' => [], + 'msg' => $e->getMessage() + ]); + } + } + } diff --git a/plugin/admin/app/controller/TeacherScheduleTimeController.php b/plugin/admin/app/controller/TeacherScheduleTimeController.php index 6a12c01..5df7bdf 100644 --- a/plugin/admin/app/controller/TeacherScheduleTimeController.php +++ b/plugin/admin/app/controller/TeacherScheduleTimeController.php @@ -595,7 +595,7 @@ class TeacherScheduleTimeController extends Crud $query->where('ts.teacher_id', $request->get('teacher_id')); } $summary = $query->select()->toArray(); - + $export_data = []; foreach ($summary as $item) { diff --git a/plugin/admin/app/view/student-schedule/index.html b/plugin/admin/app/view/student-schedule/index.html index 352c856..0a31010 100644 --- a/plugin/admin/app/view/student-schedule/index.html +++ b/plugin/admin/app/view/student-schedule/index.html @@ -11,7 +11,7 @@