Merge branch 'master' of http://gitea.enheng.asia/risin9/course
This commit is contained in:
commit
44d59ecc8a
@ -345,7 +345,7 @@ class SendMsgCronJobService
|
||||
|
||||
foreach ($teacher_schedule_time as $item) {
|
||||
$studentSchedule = $item->studentSchedule->toArray();
|
||||
if (empty($studentSchedule)) {
|
||||
if (!empty($studentSchedule)) {
|
||||
CronJob::create([
|
||||
'msg_type' => self::CLASS_BEGIN_NOTIFY_TEACHER,
|
||||
'teacher_id' => $item->teacher_id,
|
||||
@ -364,7 +364,7 @@ class SendMsgCronJobService
|
||||
'send_result' => 0,
|
||||
'send_result_msg' => '未找到课程分配的学生',
|
||||
]);
|
||||
throw new Exception('未找到课程分配的学生');
|
||||
// throw new Exception('未找到课程分配的学生');
|
||||
}
|
||||
|
||||
$student_info = [];
|
||||
@ -378,7 +378,7 @@ class SendMsgCronJobService
|
||||
}
|
||||
$student_name = implode(',', array_column($student_info, 'student_name'));
|
||||
|
||||
if (empty($student_name)) {
|
||||
if (!empty($student_name)) {
|
||||
CronJob::create([
|
||||
'msg_type' => self::CLASS_BEGIN_NOTIFY_TEACHER,
|
||||
'teacher_id' => $item->teacher_id,
|
||||
@ -397,7 +397,7 @@ class SendMsgCronJobService
|
||||
'send_result' => 0,
|
||||
'send_result_msg' => '未找到课程分配的学生',
|
||||
]);
|
||||
throw new Exception('未找到课程分配的学生');
|
||||
// throw new Exception('未找到课程分配的学生');
|
||||
}
|
||||
|
||||
$send_teacher_data = [
|
||||
@ -575,16 +575,13 @@ class SendMsgCronJobService
|
||||
{
|
||||
try {
|
||||
$teacher_schedule_time = TeacherScheduleTime::where(['is_publish' => 1])
|
||||
->whereTime('start_time', '>=', date('Y-m-d H:i:s', strtotime('+10 minute')))
|
||||
->whereTime('start_time', '<=', date('Y-m-d H:i:s', strtotime('+11 minute')))
|
||||
->whereTime('start_time', '>=', date('Y-m-d 00:00:00', strtotime('+10 minute')))
|
||||
->whereTime('start_time', '<=', date('Y-m-d 00:00:00', strtotime('+11 minute')))
|
||||
->with(['teacherAttr', 'subject', 'studentSchedule'])
|
||||
->select();
|
||||
|
||||
foreach ($teacher_schedule_time as $item) {
|
||||
|
||||
if (strtotime($item['start_time']) - time() > 60) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$studentSchedule = $item->studentSchedule->toArray();
|
||||
if (empty($studentSchedule)) {
|
||||
@ -824,7 +821,7 @@ class SendMsgCronJobService
|
||||
->findOrEmpty();
|
||||
|
||||
$studentSchedule = $teacher_schedule_time->studentSchedule->toArray();
|
||||
if (empty($studentSchedule)) {
|
||||
if (!empty($studentSchedule)) {
|
||||
CronJob::create([
|
||||
'msg_type' => self::CLASS_BEGIN_NOTIFY_TEACHER,
|
||||
'teacher_id' => $teacher_schedule_time->teacher_id,
|
||||
@ -843,7 +840,7 @@ class SendMsgCronJobService
|
||||
'send_result' => 0,
|
||||
'send_result_msg' => '未找到课程分配的学生',
|
||||
]);
|
||||
throw new Exception('未找到课程分配的学生');
|
||||
// throw new Exception('未找到课程分配的学生');
|
||||
}
|
||||
|
||||
$student_info = [];
|
||||
@ -857,7 +854,7 @@ class SendMsgCronJobService
|
||||
}
|
||||
$student_name = implode(',', array_column($student_info, 'student_name'));
|
||||
|
||||
if (empty($student_name)) {
|
||||
if (!empty($student_name)) {
|
||||
CronJob::create([
|
||||
'msg_type' => self::CLASS_BEGIN_NOTIFY_TEACHER,
|
||||
'teacher_id' => $teacher_schedule_time->teacher_id,
|
||||
@ -876,7 +873,7 @@ class SendMsgCronJobService
|
||||
'send_result' => 0,
|
||||
'send_result_msg' => '未找到课程分配的学生',
|
||||
]);
|
||||
throw new Exception('未找到课程分配的学生');
|
||||
// throw new Exception('未找到课程分配的学生');
|
||||
}
|
||||
|
||||
$send_teacher_data = [
|
||||
@ -930,6 +927,7 @@ class SendMsgCronJobService
|
||||
|
||||
|
||||
} catch (Exception $e) {
|
||||
raw_log('cron_job/send_to_teacher_before_day_field', ['msg'=>$e->getMessage()]);
|
||||
|
||||
return [
|
||||
'code' => ResponseCode::FAIL,
|
||||
|
@ -159,16 +159,18 @@ class StudentHomeworkService
|
||||
//未提交作业的课程
|
||||
$model = StudentSchedule::order('id desc')->where('id', 'not in', function ($query) use ($student) {
|
||||
$query->table('wa_student_homework')->where('student_id', $student->id)->field('teacher_schedule_time_id');
|
||||
});
|
||||
})->where('student_id', $student->id);
|
||||
$total = $model->count();
|
||||
$list = $model->with(['student', 'subject', 'teacher'])->page($page, $limit)
|
||||
->select();
|
||||
|
||||
|
||||
} else {
|
||||
$model = StudentSchedule::order('ss.id desc')->alias('ss')
|
||||
->leftJoin('student_homework sh', 'ss.teacher_schedule_time_id = sh.teacher_schedule_time_id')
|
||||
->where(['ss.student_id' => $student->id]);
|
||||
$model = StudentSchedule::order('id desc')
|
||||
->where(['student_id' => $student->id])
|
||||
->where('id', 'in', function ($query) use ($student) {
|
||||
$query->table('wa_student_homework')->where('student_id', $student->id)->field('teacher_schedule_time_id');
|
||||
});
|
||||
$total = $model->count();
|
||||
$list = $model->with(['student', 'subject', 'teacher'])
|
||||
->page($page, $limit)
|
||||
|
@ -143,7 +143,7 @@ class StudentService
|
||||
throw new Exception('请登陆后再查看');
|
||||
}
|
||||
if (!empty((array)$request->student)) {
|
||||
$student = Student::where(['id' => $request->student->id])->with(['parentArr'])->field('id,student_name,account,openid,avatar,nickname,parent_id')->findOrEmpty();
|
||||
$student = Student::where(['id' => $request->student->id])->with(['parentArr'])->field('id,student_name,account,openid,avatar,nickname,parent_id,show_schedule,show_homework,show_feedback')->findOrEmpty();
|
||||
if ($student->isEmpty()) {
|
||||
throw new Exception('未找到学生信息');
|
||||
}
|
||||
|
@ -122,6 +122,7 @@ class SubjectHomeworkService
|
||||
try {
|
||||
$data = $request->get();
|
||||
$subject_homework = SubjectHomework::where(['teacher_schedule_time_id' => $data['teacher_schedule_time_id']])
|
||||
->where(['homework_file_is_publish' => 1])
|
||||
->with(['teacher', 'subject'])
|
||||
->findOrEmpty();
|
||||
|
||||
|
@ -81,3 +81,41 @@ if (!function_exists('get_dates_in_month')) {
|
||||
return $dates;
|
||||
}
|
||||
}
|
||||
|
||||
if(!function_exists('is_time_cross')){
|
||||
/**
|
||||
* PHP计算多个时间段是否有交集(边界重叠不算)
|
||||
* @param ...$timePeriods
|
||||
* @return bool|mixed
|
||||
*/
|
||||
function is_time_cross(array $timePeriods) {
|
||||
|
||||
$timePeriods = array_values($timePeriods);
|
||||
// 将时间字符串转换为时间戳
|
||||
$timePeriods = array_map(function ($period) {
|
||||
extract($period);
|
||||
|
||||
return [
|
||||
'begin' => strtotime($beginTime),
|
||||
'end' => strtotime($endTime)
|
||||
];
|
||||
}, $timePeriods);
|
||||
|
||||
// 递归函数来检查时间段是否有交集
|
||||
$checkCross = function ($index, $timePeriods) use (&$checkCross) {
|
||||
if ($index === count($timePeriods) - 1) {
|
||||
return true; // 最后一个时间段,没有交集
|
||||
}
|
||||
|
||||
for ($i = $index + 1; $i < count($timePeriods); $i++) {
|
||||
if ($timePeriods[$index]['end'] > $timePeriods[$i]['begin'] && $timePeriods[$i]['end'] > $timePeriods[$index]['begin']) {
|
||||
return false; // 有交集
|
||||
}
|
||||
}
|
||||
|
||||
return $checkCross($index + 1, $timePeriods); // 递归检查下一个时间段
|
||||
};
|
||||
|
||||
return $checkCross(0, $timePeriods); // 从第一个时间段开始检查
|
||||
}
|
||||
}
|
||||
|
@ -147,6 +147,9 @@ class StudentController extends Crud
|
||||
'account' => $request_data['account'],
|
||||
'avatar' => $request_data['avatar'],
|
||||
'parent_id' => $request_data['parent_id'],
|
||||
'show_schedule' => isset($request_data['show_schedule']) ? $request_data['show_schedule'] : 0,
|
||||
'show_homework' => isset($request_data['show_homework']) ? $request_data['show_homework'] : 0,
|
||||
'show_feedback' => isset($request_data['show_feedback']) ? $request_data['show_feedback'] : 0,
|
||||
];
|
||||
} else {
|
||||
$salt = random_str(16);
|
||||
@ -158,6 +161,9 @@ class StudentController extends Crud
|
||||
'salt' => $salt,
|
||||
'avatar' => $request_data['avatar'],
|
||||
'parent_id' => $request_data['parent_id'],
|
||||
'show_schedule' => isset($request_data['show_schedule']) ? $request_data['show_schedule'] : 0,
|
||||
'show_homework' => isset($request_data['show_homework']) ? $request_data['show_homework'] : 0,
|
||||
'show_feedback' => isset($request_data['show_feedback']) ? $request_data['show_feedback'] : 0,
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -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,166 @@ class StudentScheduleController extends Crud
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @desc 导出学生课表
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
*/
|
||||
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()
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -139,10 +139,10 @@ class TeacherScheduleTimeController extends Crud
|
||||
$student_schedule->delete();
|
||||
}
|
||||
|
||||
if(!$subject_homework->isEmpty()){
|
||||
if (!$subject_homework->isEmpty()) {
|
||||
$subject_homework->delete();
|
||||
//删除学生家庭作业
|
||||
StudentHomework::where(['teacher_schedule_time_id'=>$ids])->select()->delete();
|
||||
StudentHomework::where(['teacher_schedule_time_id' => $ids])->select()->delete();
|
||||
}
|
||||
|
||||
return $this->json(0);
|
||||
@ -175,16 +175,31 @@ class TeacherScheduleTimeController extends Crud
|
||||
}
|
||||
}
|
||||
|
||||
//检测时间是否有相交的
|
||||
$cross_data_time = [];
|
||||
foreach ($data['schedule_time'] as $index => $item) {
|
||||
$time_period = explode(' - ', $item);
|
||||
$cross_data_time[$index] = [
|
||||
'beginTime' => $data['date'] . ' ' . $time_period[0],
|
||||
'endTime' => $data['date'] . ' ' . $time_period[1],
|
||||
];
|
||||
}
|
||||
|
||||
if (!is_time_cross($cross_data_time)) {
|
||||
throw new Exception('请确认时间是否有重叠');
|
||||
}
|
||||
|
||||
|
||||
if (isset($data['teacher_schedule_id'])) {
|
||||
$teacher_schedule_id = array_filter($data['teacher_schedule_id']);
|
||||
|
||||
if ($teacher_schedule_id) {
|
||||
//查找在空闲时间中却不在已存在提交的排课时间的已被删除的排课时间
|
||||
$removed_teacher_schedule_time = \app\common\model\TeacherScheduleTime::where(['free_time_id' => $free_time->id])->whereNotIn('id', $teacher_schedule_id)->select();
|
||||
if(!$removed_teacher_schedule_time->isEmpty()){
|
||||
if (!$removed_teacher_schedule_time->isEmpty()) {
|
||||
//删除对用的学生排课时间
|
||||
$removed_teacher_schedule_time_ids = array_column($removed_teacher_schedule_time->toArray(), 'id');
|
||||
StudentSchedule::where(['teacher_schedule_time_id'=>$removed_teacher_schedule_time_ids])->select()->delete();
|
||||
StudentSchedule::where(['teacher_schedule_time_id' => $removed_teacher_schedule_time_ids])->select()->delete();
|
||||
//删除教师被删除的排课时间
|
||||
$removed_teacher_schedule_time->delete();
|
||||
}
|
||||
@ -208,7 +223,7 @@ class TeacherScheduleTimeController extends Crud
|
||||
$m = round($diff->i / 60, 2);
|
||||
$hour = round($h + $m, 2);
|
||||
$time = trim($time_period[0]) . ' - ' . trim($time_period[1]);
|
||||
|
||||
|
||||
if (isset($data['teacher_schedule_id']) && $data['teacher_schedule_id'][$index]) {
|
||||
$teacher_schedule_time = \app\common\model\TeacherScheduleTime::where(['id' => $data['teacher_schedule_id'][$index]])->findOrEmpty();
|
||||
$teacher_schedule_time->save([
|
||||
@ -222,6 +237,7 @@ class TeacherScheduleTimeController extends Crud
|
||||
'en_start_time' => $en_start_time,
|
||||
'en_end_time' => $en_end_time,
|
||||
'month' => $free_time->month,
|
||||
'subject_id' => $data['subject_id'][$index],
|
||||
'free_time_id' => $free_time->id,
|
||||
]);
|
||||
} else {
|
||||
@ -236,6 +252,7 @@ class TeacherScheduleTimeController extends Crud
|
||||
'en_start_time' => $en_start_time,
|
||||
'en_end_time' => $en_end_time,
|
||||
'month' => $free_time->month,
|
||||
'subject_id' => $data['subject_id'][$index],
|
||||
'free_time_id' => $free_time->id,
|
||||
]);
|
||||
}
|
||||
@ -243,9 +260,9 @@ class TeacherScheduleTimeController extends Crud
|
||||
//更新学生排课
|
||||
$student_schedule = StudentSchedule::where(['teacher_schedule_time_id' => $teacher_schedule_time->id])->findOrEmpty();
|
||||
$student_name = '';
|
||||
if($data['student_id'][$index]){
|
||||
if ($data['student_id'][$index]) {
|
||||
$student = Student::where(['id' => $data['student_id'][$index]])->findOrEmpty();
|
||||
if(!$student->isEmpty()){
|
||||
if (!$student->isEmpty()) {
|
||||
$student_name = $student->student_name;
|
||||
}
|
||||
}
|
||||
@ -309,15 +326,15 @@ class TeacherScheduleTimeController extends Crud
|
||||
if ($request->method() === 'POST') {
|
||||
if ($request->post('is_publish')) {
|
||||
//发布检测是否排课和安排学生
|
||||
$teacher_schedule_time = \app\common\model\TeacherScheduleTime::where(['id'=> $request->post('id')])->findOrEmpty();
|
||||
if(empty($teacher_schedule_time->subject_id)){
|
||||
$teacher_schedule_time = \app\common\model\TeacherScheduleTime::where(['id' => $request->post('id')])->findOrEmpty();
|
||||
if (empty($teacher_schedule_time->subject_id)) {
|
||||
return json([
|
||||
'code' => ResponseCode::WEB_API_FAIL,
|
||||
'msg' => '请先选择课程再发布'
|
||||
]);
|
||||
}
|
||||
$student_schedule = StudentSchedule::where(['teacher_schedule_time_id' => $teacher_schedule_time->id])->select();
|
||||
if($student_schedule->isEmpty()){
|
||||
if ($student_schedule->isEmpty()) {
|
||||
return json([
|
||||
'code' => ResponseCode::WEB_API_FAIL,
|
||||
'msg' => '请先安排学生后再发布'
|
||||
@ -452,7 +469,7 @@ class TeacherScheduleTimeController extends Crud
|
||||
if (isset($data['is_publish'])) {
|
||||
$teacher_schedule_time->is_publish = $data['is_publish'];
|
||||
|
||||
if(empty($teacher_schedule_time->subject_id)){
|
||||
if (empty($teacher_schedule_time->subject_id)) {
|
||||
return json([
|
||||
'code' => ResponseCode::WEB_API_FAIL,
|
||||
'msg' => '请先选择课程再发布'
|
||||
@ -460,7 +477,7 @@ class TeacherScheduleTimeController extends Crud
|
||||
}
|
||||
|
||||
$student_schedule = StudentSchedule::where(['teacher_schedule_time_id' => $teacher_schedule_time->id])->select();
|
||||
if($student_schedule->isEmpty()){
|
||||
if ($student_schedule->isEmpty()) {
|
||||
return json([
|
||||
'code' => ResponseCode::WEB_API_FAIL,
|
||||
'msg' => '请先安排学生后再发布'
|
||||
@ -499,7 +516,7 @@ class TeacherScheduleTimeController extends Crud
|
||||
//获取所有老师
|
||||
$teacher = Teacher::order('id asc')->field('id,teacher_name,account')->select()->toArray();
|
||||
|
||||
return view('teacher-schedule-time/export_schedule_index', [ 'teacher' => $teacher]);
|
||||
return view('teacher-schedule-time/export_schedule_index', ['teacher' => $teacher]);
|
||||
}
|
||||
|
||||
|
||||
@ -515,7 +532,7 @@ class TeacherScheduleTimeController extends Crud
|
||||
->leftJoin('teacher t', 'ts.teacher_id = t.id')
|
||||
->leftJoin('student_schedule ss', 'ts.id = ss.teacher_schedule_time_id and t.id = ss.teacher_id');
|
||||
|
||||
if($request->get('teacher_id')){
|
||||
if ($request->get('teacher_id')) {
|
||||
$summary->where('ts.teacher_id', $request->get('teacher_id'));
|
||||
}
|
||||
// ->where(['ts.is_publish' => 1])
|
||||
@ -591,11 +608,11 @@ class TeacherScheduleTimeController extends Crud
|
||||
ss.student_name
|
||||
')
|
||||
->group('ts.id');
|
||||
if($request->get('teacher_id')){
|
||||
if ($request->get('teacher_id')) {
|
||||
$query->where('ts.teacher_id', $request->get('teacher_id'));
|
||||
}
|
||||
$summary = $query->select()->toArray();
|
||||
|
||||
|
||||
|
||||
$export_data = [];
|
||||
foreach ($summary as $item) {
|
||||
|
@ -11,7 +11,7 @@
|
||||
<!-- 顶部查询表单 -->
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form top-search-from">
|
||||
<form class="layui-form top-search-from" lay-filter="search-val-filter">
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">学生</label>
|
||||
@ -117,6 +117,10 @@
|
||||
permission="app.admin.studentschedule.insert">
|
||||
<i class="layui-icon layui-icon-down"></i>取消发布
|
||||
</button>
|
||||
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="export-student-schedule"
|
||||
permission="app.admin.studentschedule.insert">
|
||||
<i class="layui-icon layui-icon-down"></i>导出学生课表
|
||||
</button>
|
||||
<button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove"
|
||||
permission="app.admin.studentschedule.delete">
|
||||
<i class="layui-icon layui-icon-delete"></i>删除
|
||||
@ -195,6 +199,28 @@
|
||||
title: "id", align: "center",
|
||||
field: "id",
|
||||
}, {
|
||||
title: "星期", align: "center",
|
||||
field: "week",
|
||||
width: 80
|
||||
}, {
|
||||
title: "日期", align: "center",
|
||||
field: "date",
|
||||
width: 150
|
||||
}, {
|
||||
title: "中国时间", align: "center",
|
||||
field: "time",
|
||||
width: 120
|
||||
}, {
|
||||
title: "本地时间", align: "center",
|
||||
field: "en_time",
|
||||
width: 120
|
||||
}, {
|
||||
title: "学科", align: "center",
|
||||
field: "subject_name",
|
||||
}, {
|
||||
title: "教师", align: "center",
|
||||
field: "teacher_name",
|
||||
},{
|
||||
title: "学生", align: "center",
|
||||
field: "student_name",
|
||||
width: 150
|
||||
@ -206,24 +232,6 @@
|
||||
title: "排课详情", align: "center",
|
||||
field: "teacher_schedule_time_detail",
|
||||
hide: true
|
||||
}, {
|
||||
title: "教师", align: "center",
|
||||
field: "teacher_name",
|
||||
}, {
|
||||
title: "学科", align: "center",
|
||||
field: "subject_name",
|
||||
}, {
|
||||
title: "日期", align: "center",
|
||||
field: "date",
|
||||
width: 150
|
||||
}, {
|
||||
title: "本地时间", align: "center",
|
||||
field: "en_time",
|
||||
width: 120
|
||||
}, {
|
||||
title: "中国时间", align: "center",
|
||||
field: "time",
|
||||
width: 120
|
||||
}, {
|
||||
title: "课时", align: "center",
|
||||
field: "hour",
|
||||
@ -323,6 +331,8 @@
|
||||
publish(obj, 1);
|
||||
} else if (obj.event === "unpublished") {
|
||||
publish(obj, 0);
|
||||
} else if (obj.event === "export-student-schedule") {
|
||||
exportStudentSchedule(obj, 0);
|
||||
} else if (obj.event === "refresh") {
|
||||
refreshTable();
|
||||
} else if (obj.event === "batchRemove") {
|
||||
@ -458,6 +468,38 @@
|
||||
});
|
||||
}
|
||||
|
||||
let exportStudentSchedule = function (obj, status) {
|
||||
var data = form.val('search-val-filter');
|
||||
|
||||
// let loading = layer.load();
|
||||
$.ajax({
|
||||
url: '/app/admin/studentSchedule/exportStudentSchedule',
|
||||
data: data,
|
||||
dataType: "json",
|
||||
type: "post",
|
||||
success: function (res) {
|
||||
// layer.close(loading);
|
||||
if (res.code) {
|
||||
return layui.popup.failure(res.msg);
|
||||
}
|
||||
const link = document.createElement('a');
|
||||
link.style.display = 'none';
|
||||
// 设置下载地址
|
||||
link.setAttribute('href', res.data.file_url);
|
||||
// 设置文件名
|
||||
link.setAttribute('download', res.data.file_name);
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
return layui.popup.success("操作成功", function () {
|
||||
parent.refreshTable();
|
||||
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
// 删除一行
|
||||
let remove = function (obj) {
|
||||
return doRemove(obj.data[PRIMARY_KEY]);
|
||||
|
@ -221,6 +221,8 @@
|
||||
edit(obj);
|
||||
}else if (obj.event === "check_schedule") {
|
||||
check_schedule(obj);
|
||||
}else if (obj.event === "set_auth") {
|
||||
set_auth(obj);
|
||||
} else if (obj.event === "reset_openid") {
|
||||
reset_openid(obj);
|
||||
} else if (obj.event === "rest_password") {
|
||||
@ -321,6 +323,19 @@
|
||||
content: UPDATE_URL + "?" + PRIMARY_KEY + "=" + value
|
||||
});
|
||||
}
|
||||
// 查看课表
|
||||
let set_auth = function (obj) {
|
||||
let value = obj.data[PRIMARY_KEY];
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: "权限设置",
|
||||
shade: 0.1,
|
||||
maxmin: true,
|
||||
area: [common.isModile() ? "100%" : "1000px", common.isModile() ? "100%" : "750px"],
|
||||
content: "/app/admin/student/checkSchedule?student_id=" + value
|
||||
});
|
||||
}
|
||||
|
||||
// 查看课表
|
||||
let check_schedule = function (obj) {
|
||||
let value = obj.data[PRIMARY_KEY];
|
||||
|
@ -36,19 +36,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <div class="layui-form-item">-->
|
||||
<!-- <label class="layui-form-label">密码盐</label>-->
|
||||
<!-- <div class="layui-input-block">-->
|
||||
<!-- <input type="text" name="salt" value="" class="layui-input">-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<!-- <div class="layui-form-item">-->
|
||||
<!-- <label class="layui-form-label">昵称</label>-->
|
||||
<!-- <div class="layui-input-block">-->
|
||||
<!-- <input type="text" name="nickname" value="" class="layui-input">-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">头像</label>
|
||||
@ -79,6 +66,27 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">查看课表</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="show_schedule" value="1" title="开启|关闭" lay-filter="show_schedule" lay-skin="switch">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">作业列表</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="show_homework" value="1" title="开启|关闭" lay-filter="show_homework" lay-skin="switch">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">课程反馈</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="show_feedback" value="1" title="开启|关闭" lay-filter="show_feedback" lay-skin="switch">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -125,7 +133,13 @@
|
||||
if (typeof obj[0] === "undefined" || !obj[0].nodeName) return;
|
||||
if (obj[0].nodeName.toLowerCase() === "textarea") {
|
||||
obj.val(value);
|
||||
} else {
|
||||
} else if (obj[0].type.toLowerCase() === "checkbox"){
|
||||
console.log(11111111111, value)
|
||||
if(value){
|
||||
obj.attr("checked", true);
|
||||
// obj[0].value = value;
|
||||
}
|
||||
}else {
|
||||
obj.attr("value", value);
|
||||
obj[0].value = value;
|
||||
}
|
||||
@ -165,13 +179,44 @@
|
||||
if (res.code) {
|
||||
layui.popup.failure(res.msg);
|
||||
}
|
||||
|
||||
layui.form.render()
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//提交事件
|
||||
layui.use(["form", "popup"], function () {
|
||||
|
||||
layui.form.on('switch(show_schedule)', function (data) {
|
||||
var elem = data.elem; // 获得 checkbox 原始 DOM 对象
|
||||
var checked = elem.checked; // 获得 checkbox 选中状态
|
||||
var value = elem.value; // 获得 checkbox 值
|
||||
var othis = data.othis; // 获得 checkbox 元素被替换后的 jQuery 对象
|
||||
if(!checked){
|
||||
layui.form.val('show_schedule', 0);
|
||||
}
|
||||
});
|
||||
|
||||
layui.form.on('switch(show_homework)', function (data) {
|
||||
var elem = data.elem; // 获得 checkbox 原始 DOM 对象
|
||||
var checked = elem.checked; // 获得 checkbox 选中状态
|
||||
var value = elem.value; // 获得 checkbox 值
|
||||
var othis = data.othis; // 获得 checkbox 元素被替换后的 jQuery 对象
|
||||
if(!checked){
|
||||
layui.form.val('show_homework', 0);
|
||||
}
|
||||
});
|
||||
|
||||
layui.form.on('switch(show_feedback)', function (data) {
|
||||
var elem = data.elem; // 获得 checkbox 原始 DOM 对象
|
||||
var checked = elem.checked; // 获得 checkbox 选中状态
|
||||
var value = elem.value; // 获得 checkbox 值
|
||||
var othis = data.othis; // 获得 checkbox 元素被替换后的 jQuery 对象
|
||||
if(!checked){
|
||||
layui.form.val('show_feedback', 0);
|
||||
}
|
||||
});
|
||||
|
||||
// 字段验证允许为空
|
||||
layui.form.verify({
|
||||
phone: [/(^$)|^1\d{10}$/, "请输入正确的手机号"],
|
||||
|
@ -13,7 +13,7 @@ class Task
|
||||
// 每天的7点50执行,注意这里省略了秒位
|
||||
new Crontab('0 10 * * *', function(){
|
||||
//上课前一天提醒教师、学生、家长
|
||||
(new SendMsgCronJobService())->classBeginSingleMsgToTeacher();
|
||||
(new SendMsgCronJobService())->classBeginMsgToTeacherBeforeDay();
|
||||
});
|
||||
|
||||
// 每分钟执行一次
|
||||
|
Loading…
x
Reference in New Issue
Block a user