course/app/common/service/StudentHomeworkService.php

390 lines
15 KiB
PHP

<?php
namespace app\common\service;
use app\common\model\Student;
use app\common\model\StudentHomework;
use app\common\model\StudentSchedule;
use app\common\model\SubjectHomework;
use app\common\model\TeacherScheduleTime;
use app\constant\ResponseCode;
use think\Exception;
class StudentHomeworkService
{
/**
* @desc 添加学生家庭作业
* @param $request
* @return array
*/
public function addStudentHomework($request)
{
try {
if (empty((array)$request->student) && empty((array)$request->parent)) {
throw new Exception('请登陆后再查看');
}
if (!empty((array)$request->student)) {
$student = Student::where(['id' => $request->student->id])->findOrEmpty();
if ($student->isEmpty()) {
throw new Exception('未找到用户信息');
}
}
if (!empty((array)$request->parent)) {
$student = Student::where(['parent_id' => $request->parent->id])->findOrEmpty();
if ($student->isEmpty()) {
throw new Exception('未找到用户信息');
}
}
$data = $request->post();
$student_schedule = StudentSchedule::where(['id' => $data['subject_homework_id']])->findOrEmpty();
if ($student_schedule->isEmpty()) {
throw new Exception('未找到学生排课信息');
}
$subject_homework = SubjectHomework::where(['teacher_schedule_time_id' => $student_schedule->teacher_schedule_time_id, 'homework_file_is_publish' => 1])->findOrEmpty();
if ($subject_homework->isEmpty()) {
throw new Exception('老师还未布置课程作业');
}
$feedback_file_url = '';
if (isset($data['feedback_file_url'])) {
if (!empty(json_decode($data['feedback_file_url'], true))) {
$feedback_file_url = $data['feedback_file_url'];
}
}
$homework = StudentHomework::where(['student_id' => $student->id, 'subject_homework_id' => $subject_homework->id])->findOrEmpty();
if ($homework->isEmpty()) {
$homework = new StudentHomework();
}
$homework->save([
'student_id' => $student->id,
'subject_homework_id' => $subject_homework->id,
'teacher_id' => $subject_homework->teacher_id,
'teacher_schedule_time_id' => $subject_homework->teacher_schedule_time_id,
'subject_id' => $subject_homework->subject_id,
'date' => $subject_homework->date,
'en_date' => $subject_homework->en_date,
'time' => $subject_homework->time,
'en_time' => $subject_homework->en_time,
'hour' => $subject_homework->hour,
'start_time' => $subject_homework->start_time,
'end_time' => $subject_homework->end_time,
'en_start_time' => $subject_homework->start_time,
'en_end_time' => $subject_homework->end_time,
'month' => $subject_homework->month,
'en_month' => $subject_homework->en_month,
'time_zone_id' => $subject_homework->time_zone_id,
'time_zone_name' => $subject_homework->time_zone_name,
'time_zone_abbr' => $subject_homework->time_zone_abbr,
'time_zone_offset' => $subject_homework->time_zone_offset,
'feedback_file_url' => $feedback_file_url,
]);
return [
'code' => ResponseCode::SUCCESS,
'msg' => '操作成功'
];
} catch (Exception $e) {
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
/**
* @desc 获取学生家庭作业详情
* @param $request
* @return array
*/
public function getStudentHomeworkDetail($request)
{
try {
if (empty((array)$request->student) && empty((array)$request->parent)) {
throw new Exception('请登陆后再查看');
}
if (!empty((array)$request->student)) {
$student = Student::where(['id' => $request->student->id])->findOrEmpty();
if ($student->isEmpty()) {
throw new Exception('未找到用户信息');
}
}
if (!empty((array)$request->parent)) {
$student = Student::where(['parent_id' => $request->parent->id])->findOrEmpty();
if ($student->isEmpty()) {
throw new Exception('未找到用户信息');
}
}
$data = $request->post();
$studentHomework = StudentHomework::where(['student_id' => $student->id, 'teacher_schedule_time_id'=>$data['teacher_schedule_time_id']])
->withoutField('feedback_version_file_url')
->findOrEmpty();
if($studentHomework->feedback_file_url){
$studentHomework->feedback_file_url = json_decode($studentHomework->feedback_file_url, true);
}else{
$studentHomework->feedback_file_url = '';
}
return [
'code' => ResponseCode::SUCCESS,
'data'=>$studentHomework,
'msg' => 'success',
];
}catch (Exception $e) {
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
/**
* @desc 获取学生的课程作业
* @param $request
* @return array|void
*/
public function getStudentSubjectHomework($request)
{
try {
$data = $request->get();
$homework = StudentHomework::where(['teacher_schedule_time_id' => $data['teacher_schedule_time_id']])->order('id asc');
$page = isset($data['page']) ? $data['page'] : 1;
$limit = isset($data['limit']) ? $data['limit'] : 10;
$total = $homework->count();
$list = $homework->page($page, $limit)->bind(['student', 'subject'])->select();
return [
'code' => ResponseCode::SUCCESS,
'data' => [
'list' => $list,
'total' => $total,
'page' => $page,
],
'msg' => 'success'
];
} catch (Exception $e) {
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
/**
* @desc 获取学生作业
* @param $request
* @return array
*/
public function getStudentHomework($request)
{
try {
if (empty((array)$request->student) && empty((array)$request->parent)) {
throw new Exception('请登陆后再查看');
}
if (!empty((array)$request->student)) {
$student = Student::where(['id' => $request->student->id])->findOrEmpty();
if ($student->isEmpty()) {
throw new Exception('未找到用户信息');
}
}
if (!empty((array)$request->parent)) {
$student = Student::where(['parent_id' => $request->parent->id])->findOrEmpty();
if ($student->isEmpty()) {
throw new Exception('未找到用户信息');
}
}
$data = $request->all();
$page = isset($data['page']) ? $data['page'] : 1;
$limit = isset($data['limit']) ? $data['limit'] : 10;
if ($data['status'] == 0) {
//未提交作业的课程
//查找该学生已发布的排课
$publish_student_schedule = StudentSchedule::where(['student_id' => $student->id, 'is_publish' => 1])->column('teacher_schedule_time_id');
//查找排课中发布的课程作业
$publish_subject_homework = SubjectHomework::where(['teacher_schedule_time_id' => $publish_student_schedule, 'homework_file_is_publish' => 1])->column('teacher_schedule_time_id');
//查找课程作业中已提交的课程
$submit_student_homework = StudentHomework::where(['student_id' => $student->id, 'teacher_schedule_time_id' => $publish_subject_homework])->column('teacher_schedule_time_id');
//从已发布的课程中去除已提交的,就是未提交的
$unsubmit_student_homework = array_diff($publish_subject_homework, $submit_student_homework);
$model = StudentSchedule::where(['student_id' => $student->id, 'is_publish' => 1, 'teacher_schedule_time_id'=>$unsubmit_student_homework]);
$total = $model->count();
$list = $model->with(['student', 'subject', 'teacher'])
->page($page, $limit)
->order('start_time desc')
->select()->toArray();
} else {
$model = StudentSchedule::order('start_time desc,id desc')
->where(['student_id' => $student->id, 'is_publish' => 1])
->where('teacher_schedule_time_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)
->select()->toArray();
}
return [
'code' => ResponseCode::SUCCESS,
'data' => [
'list' => $list,
'total' => $total,
],
'msg' => 'success',
];
} catch (Exception $e) {
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
public function getStudentSubjectHomeworkDetail($request)
{
try {
if (empty((array)$request->student) && empty((array)$request->parent)) {
throw new Exception('请登陆后再查看');
}
if (!empty((array)$request->student)) {
$student = Student::where(['id' => $request->student->id])->findOrEmpty();
if ($student->isEmpty()) {
throw new Exception('未找到用户信息');
}
}
if (!empty((array)$request->parent)) {
$student = Student::where(['parent_id' => $request->parent->id])->findOrEmpty();
if ($student->isEmpty()) {
throw new Exception('未找到用户信息');
}
}
$homework = StudentHomework::where(['student_id' => $student->id, 'teacher_schedule_time_id' => $request->get('teacher_schedule_time_id')])
->with(['student', 'teacher', 'subject'])
->findOrEmpty();
if ($homework->feedback_file_url) {
$homework->feedback_file_url = json_decode($homework->feedback_file_url, true);
}
return [
'code' => ResponseCode::SUCCESS,
'data' => $homework,
'msg' => 'success',
];
} catch (Exception $e) {
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
/**
* @desc 获取课程的家庭作业
* @param $request
* @return array
*/
public function checkSubjectHomework($request)
{
try {
$data = $request->get();
$subject_homework = SubjectHomework::where(['teacher_schedule_time_id' => $data['teacher_schedule_time_id'], 'is_publish' => 1])
->with(['teacher', 'subject'])
->findOrEmpty();
if ($subject_homework->isEmpty()) {
throw new Exception('课程作业未布置');
}
if ($subject_homework->homework_file_url) {
$subject_homework->homework_file_url = json_decode($subject_homework->homework_file_url, true);
} else {
$subject_homework->homework_file_url = [];
}
if ($subject_homework->homework_version_file_url) {
$subject_homework->homework_version_file_url = json_decode($subject_homework->homework_version_file_url, true);
} else {
$subject_homework->homework_version_file_url = [];
}
if ($subject_homework->last_homework_feedback_url) {
$subject_homework->last_homework_feedback_url = json_decode($subject_homework->last_homework_feedback_url, true);
} else {
$subject_homework->last_homework_feedback_url = [];
}
if ($subject_homework->subject_report_url) {
$subject_homework->subject_report_url = json_decode($subject_homework->subject_report_url, true);
} else {
$subject_homework->subject_report_url = [];
}
if ($subject_homework->subject_file_url) {
$subject_homework->subject_file_url = json_decode($subject_homework->subject_file_url, true);
} else {
$subject_homework->subject_file_url = [];
}
$student_homework = StudentHomework::where(['teacher_schedule_time_id' => $data['teacher_schedule_time_id'], 'student_id' => $request->student->id])
->field('id,student_id,subject_homework_id,teacher_id,teacher_schedule_time_id,feedback_file_url')
->findOrEmpty()->toArray();
if (empty($student_homework)) {
$student_homework = [
'id' => '',
'student_id' => $request->student->id,
'subject_homework_id' => $subject_homework->id,
'teacher_id' => $subject_homework->teacher_id,
'teacher_schedule_time_id' => $subject_homework->teacher_schedule_time_id,
'feedback_file_url' => [],
];
}
return [
'code' => ResponseCode::SUCCESS,
'data' => [
'subject_homework' => $subject_homework,
'student_homework' => $student_homework,
],
'msg' => 'success'
];
} catch (Exception $e) {
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
}