467 lines
18 KiB
PHP
467 lines
18 KiB
PHP
<?php
|
||
|
||
namespace app\common\service;
|
||
|
||
use app\common\model\CronJob;
|
||
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 SendMsgCronJobService
|
||
{
|
||
const TEACHER_SCHEDULE_TIME_PUBLISH_TEACHER = 'teacher_schedule_time_publish_to_teacher';
|
||
const TEACHER_SCHEDULE_TIME_PUBLISH_STUDENT = 'teacher_schedule_time_publish_to_teacher';
|
||
|
||
|
||
/**
|
||
* 排课成功通知
|
||
* @param $teacher_schedule_time_id
|
||
* @return void
|
||
* @throws \GuzzleHttp\Exception\GuzzleException
|
||
*/
|
||
public function teacherScheduleTimePublishMsg($teacher_schedule_time_id)
|
||
{
|
||
try {
|
||
$teacher_schedule_time = TeacherScheduleTime::where(['id' => $teacher_schedule_time_id])->with(['teacherAttr', 'subject', 'studentSchedule'])
|
||
->findOrEmpty();
|
||
|
||
if ($teacher_schedule_time->isEmpty()) {
|
||
throw new Exception('教师排课不存在');
|
||
}
|
||
$studentSchedule = $teacher_schedule_time->studentSchedule->toArray();
|
||
if (empty($studentSchedule)) {
|
||
throw new Exception('未找到课程分配的学生');
|
||
}
|
||
|
||
$student_info = [];
|
||
foreach ($studentSchedule as $student) {
|
||
if (!$student['is_publish']) {
|
||
// throw new Exception($student['student_name'] . '的排课未发布');
|
||
}
|
||
|
||
$student = Student::where(['id' => $student['student_id']])->findOrEmpty();
|
||
array_push($student_info, ['id' => $student['id'], 'student_name' => $student['student_name'], 'openid' => $student['openid']]);
|
||
}
|
||
|
||
|
||
//给教师发送消息
|
||
$msgInfo = $teacher_schedule_time->toArray();
|
||
$student_name = implode(',', array_column($student_info, 'student_name'));
|
||
$send_teacher_data = [
|
||
'touser' => 'olfLh6o4CG9xb6_tA3y29shOj_Bo',
|
||
'template_id' => 'gTtXWz35mjbtbOZdq6uNBIqy2_W-gu7F4H6s5N-vNAI',
|
||
'data' => [
|
||
'time2' => [//上课时间
|
||
'value' => $teacher_schedule_time->en_start_time,
|
||
'color' => '#000000'
|
||
],
|
||
'thing1' => [//课程名称
|
||
'value' => $teacher_schedule_time->english_name,
|
||
'color' => '#000000'
|
||
],
|
||
'thing5' => [//上课老师
|
||
'value' => $teacher_schedule_time->teacherAttr->teacher_name,
|
||
'color' => '#000000'
|
||
],
|
||
'thing4' => [//学员姓名
|
||
'value' => $student_name,
|
||
'color' => '#000000'
|
||
]
|
||
],
|
||
'miniprogram' => [
|
||
|
||
],
|
||
"lang" => "zh_CN",
|
||
];
|
||
$result = (new WechatSubscriptService())->sendMsg($send_teacher_data);
|
||
|
||
CronJob::create([
|
||
'msg_type' => self::TEACHER_SCHEDULE_TIME_PUBLISH_TEACHER,
|
||
'teacher_id' => $teacher_schedule_time->teacher_id,
|
||
'subject_id' => $teacher_schedule_time->subject_id,
|
||
'student_id' => '',
|
||
'teacher_schedule_time_id' => $teacher_schedule_time->id,
|
||
'time' => $teacher_schedule_time->time,
|
||
'en_time' => $teacher_schedule_time->en_time,
|
||
'start_time' => $teacher_schedule_time->start_time,
|
||
'end_time' => $teacher_schedule_time->end_time,
|
||
'en_start_time' => $teacher_schedule_time->en_start_time,
|
||
'en_end_time' => $teacher_schedule_time->en_end_time,
|
||
'send_role' => 'teacher',
|
||
'send_data' => json_encode($send_teacher_data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
|
||
'msg_info' => json_encode($msgInfo, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
|
||
'send_result' => $result['code'] == ResponseCode::SUCCESS ? 1 : 0,
|
||
'send_result_msg' => $result['msg'],
|
||
]);
|
||
|
||
foreach ($student_info as $student) {
|
||
|
||
$send_teacher_data = [
|
||
'touser' => 'olfLh6o4CG9xb6_tA3y29shOj_Bo',//@todo:发送人
|
||
'template_id' => 'gTtXWz35mjbtbOZdq6uNBIqy2_W-gu7F4H6s5N-vNAI',
|
||
'data' => [
|
||
'time2' => [//上课时间
|
||
'value' => $teacher_schedule_time->start_time,
|
||
'color' => '#000000'
|
||
],
|
||
'thing1' => [//课程名称
|
||
'value' => $teacher_schedule_time->subject_name,
|
||
'color' => '#000000'
|
||
],
|
||
'thing5' => [//上课老师
|
||
'value' => $teacher_schedule_time->teacherAttr->teacher_name,
|
||
'color' => '#000000'
|
||
],
|
||
'thing4' => [//学员姓名
|
||
'value' => $student_name,
|
||
'color' => '#000000'
|
||
]
|
||
],
|
||
'miniprogram' => [
|
||
|
||
],
|
||
"lang" => "zh_CN",
|
||
];
|
||
$result = (new WechatSubscriptService())->sendMsg($send_teacher_data);
|
||
|
||
CronJob::create([
|
||
'msg_type' => self::TEACHER_SCHEDULE_TIME_PUBLISH_TEACHER,
|
||
'teacher_id' => $teacher_schedule_time->teacher_id,
|
||
'subject_id' => $teacher_schedule_time->subject_id,
|
||
'student_id' => '',
|
||
'teacher_schedule_time_id' => $teacher_schedule_time->id,
|
||
'time' => $teacher_schedule_time->time,
|
||
'en_time' => $teacher_schedule_time->en_time,
|
||
'start_time' => $teacher_schedule_time->start_time,
|
||
'end_time' => $teacher_schedule_time->end_time,
|
||
'en_start_time' => $teacher_schedule_time->en_start_time,
|
||
'en_end_time' => $teacher_schedule_time->en_end_time,
|
||
'send_role' => 'student',
|
||
'send_data' => json_encode($send_teacher_data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
|
||
'msg_info' => json_encode($msgInfo, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
|
||
'send_result' => $result['code'] == ResponseCode::SUCCESS ? 1 : 0,
|
||
'send_result_msg' => $result['msg'],
|
||
]);
|
||
|
||
}
|
||
|
||
} catch (Exception $e) {
|
||
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 上课时间 提前一天通知老师
|
||
* @return void
|
||
*/
|
||
public function classBeginMsgToTeacher()
|
||
{
|
||
try {
|
||
$teacher_schedule_time = TeacherScheduleTime::where(['is_publish' => 1])
|
||
->whereTime('start_time', '>=', date('Y-m-d 00:00:00', strtotime('+21 day')))
|
||
->whereTime('start_time', '<=', date('Y-m-d 23:59:59', strtotime('+21 day')))
|
||
->with(['teacherAttr', 'subject', 'studentSchedule'])
|
||
->select();
|
||
|
||
foreach ($teacher_schedule_time as $item) {
|
||
|
||
$studentSchedule = $item->studentSchedule->toArray();
|
||
if (empty($studentSchedule)) {
|
||
throw new Exception('未找到课程分配的学生');
|
||
}
|
||
|
||
$student_info = [];
|
||
foreach ($studentSchedule as $student) {
|
||
if (!$student['is_publish']) {
|
||
// throw new Exception($student['student_name'] . '的排课未发布');
|
||
}
|
||
|
||
$student = Student::where(['id' => $student['student_id']])->findOrEmpty();
|
||
array_push($student_info, ['id' => $student['id'], 'student_name' => $student['student_name'], 'openid' => $student['openid']]);
|
||
}
|
||
$student_name = implode(',', array_column($student_info, 'student_name'));
|
||
$send_teacher_data = [
|
||
'touser' => 'olfLh6o4CG9xb6_tA3y29shOj_Bo',//@todo:发送人
|
||
'template_id' => 'yYw0jnlhjnq4AJ_CAlAghgGyV0bvbVHG-eV8TNC3REI',
|
||
'data' => [
|
||
'thing8' => [//课程名称
|
||
'value' => $item->english_name,
|
||
'color' => '#000000'
|
||
],
|
||
'time5' => [//上课时间
|
||
'value' => $item->end_time,
|
||
'color' => '#000000'
|
||
],
|
||
'thing4' => [//任课教师
|
||
'value' => $item->teacherAttr->teacher_name,
|
||
'color' => '#000000'
|
||
],
|
||
'thing7' => [//学员姓名
|
||
'value' => $student_name,
|
||
'color' => '#000000'
|
||
]
|
||
],
|
||
'miniprogram' => [
|
||
|
||
],
|
||
"lang" => "zh_CN",
|
||
];
|
||
|
||
$result = (new WechatSubscriptService())->sendMsg($send_teacher_data);
|
||
}
|
||
|
||
} catch (Exception $e) {
|
||
return [
|
||
'code' => ResponseCode::FAIL,
|
||
'msg' => $e->getMessage()
|
||
];
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* @desc 管理员人员作业审阅结果通知
|
||
* @param $subject_homework_id
|
||
* @return array|void
|
||
* @throws \GuzzleHttp\Exception\GuzzleException
|
||
*/
|
||
public function teacherPublishSubjectHomework($subject_homework_id)
|
||
{
|
||
try {
|
||
$subject_homework = SubjectHomework::where(['id' => $subject_homework_id])->with(['teacher', 'subject'])->findOrEmpty();
|
||
|
||
$send_teacher_data = [
|
||
'touser' => 'olfLh6o4CG9xb6_tA3y29shOj_Bo',//@todo:发送人
|
||
'template_id' => 'OKLtn1L12ZrKsJczk1IRn_8kcQ4aKBmMsYsnjgAkkfE',
|
||
'data' => [
|
||
'thing1' => [//作业名称
|
||
'value' => $subject_homework->english_name . '/' . date('m-d H:i', strtotime($subject_homework->start_time)),
|
||
'color' => '#000000'
|
||
],
|
||
'thing2' => [//教师姓名
|
||
'value' => $subject_homework->teacher_name,
|
||
'color' => '#000000'
|
||
]
|
||
],
|
||
'miniprogram' => [
|
||
|
||
],
|
||
"lang" => "zh_CN",
|
||
];
|
||
|
||
|
||
$result = (new WechatSubscriptService())->sendMsg($send_teacher_data);
|
||
|
||
|
||
} catch (Exception $e) {
|
||
return [
|
||
'code' => ResponseCode::FAIL,
|
||
'msg' => $e->getMessage()
|
||
];
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* @desc 老师上传作业后台管理员人员翻译过,重新上传通知学生,课程作业通知
|
||
* @param $subject_homework_id
|
||
* @return array|void
|
||
* @throws \GuzzleHttp\Exception\GuzzleException
|
||
*/
|
||
public function uploadVersionSubjectHomeworkNotifyStudent($subject_homework_id)
|
||
{
|
||
try {
|
||
$subject_homework = SubjectHomework::where(['id' => $subject_homework_id])->with(['teacher', 'subject'])->findOrEmpty();
|
||
|
||
|
||
//查找相同老师、相同课程、相同学生的下一节课
|
||
$teacher_schedule_time = TeacherScheduleTime::where(['id' => $subject_homework->teacher_schedule_time_id])->with(['studentSchedule'])->findOrEmpty();
|
||
|
||
//查找下次课程开始时间
|
||
$next_teacher_schedule_time = TeacherScheduleTime::where([
|
||
'teacher_id' => $teacher_schedule_time->teacher_id,
|
||
'subject_id' => $teacher_schedule_time->subject_id,
|
||
'is_publish' => 1
|
||
])
|
||
->whereTime('start_time', '>', $teacher_schedule_time->start_time)
|
||
->order('id asc')
|
||
->limit(1)
|
||
->findOrEmpty();
|
||
|
||
if (!$next_teacher_schedule_time->isEmpty()) {
|
||
$next_time = $next_teacher_schedule_time->start_time;
|
||
} else {
|
||
$next_time = '';//不能没有值
|
||
}
|
||
if (!empty($subject_homework->homework_version_file_url)) {
|
||
|
||
$send_teacher_data = [
|
||
'touser' => 'olfLh6o4CG9xb6_tA3y29shOj_Bo',//@todo:发送人
|
||
'template_id' => 'ng-vuuY_hHM3N2fR3VCGdjGldOrwmzVVQzebRgkW4uY',
|
||
'data' => [
|
||
'thing6' => [//课程名称
|
||
'value' => $subject_homework->english_name . '/' . date('m-d H:i', strtotime($subject_homework->start_time)),
|
||
'color' => '#000000'
|
||
],
|
||
'thing2' => [//作业名称
|
||
'value' => $subject_homework->english_name . '/' . date('m-d H:i', strtotime($subject_homework->start_time)),
|
||
'color' => '#000000'
|
||
],
|
||
'thing5' => [//批改老师
|
||
'value' => $subject_homework->teacher_name,
|
||
'color' => '#000000'
|
||
],
|
||
'time3' => [//作业截止时间
|
||
'value' => $next_time,
|
||
'color' => '#000000'
|
||
]
|
||
],
|
||
'miniprogram' => [
|
||
|
||
],
|
||
"lang" => "zh_CN",
|
||
];
|
||
|
||
|
||
$result = (new WechatSubscriptService())->sendMsg($send_teacher_data);
|
||
//@todo:写入日志中
|
||
|
||
}
|
||
|
||
|
||
} catch (Exception $e) {
|
||
return [
|
||
'code' => ResponseCode::FAIL,
|
||
'msg' => $e->getMessage()
|
||
];
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/**
|
||
* @desc 学生完成上传作业,通知老师
|
||
* @param $request
|
||
* @return array
|
||
*/
|
||
public function studentUploadSubjectHomeworkNotifyTeacher($student_homework_id)
|
||
{
|
||
try {
|
||
$student_homework = StudentHomework::where(['id' => $student_homework_id])->with(['teacher', 'subject', 'student'])->findOrEmpty();
|
||
|
||
//获取教师openid
|
||
|
||
$send_teacher_data = [
|
||
'touser' => 'olfLh6o4CG9xb6_tA3y29shOj_Bo',//@todo:发送人
|
||
'template_id' => 'IYIMurENbyxkQ_axIsrkjOnfoURe4jOVpHU6zcGyksU',
|
||
'data' => [
|
||
'thing1' => [//课程名称
|
||
'value' => substr($student_homework->english_name . '/' . date('m-d H:i', strtotime($student_homework->en_start_time)), 0, 18) . '..',
|
||
'color' => '#000000'
|
||
],
|
||
'thing2' => [//作业名称
|
||
'value' => substr($student_homework->english_name . '/' . date('m-d H:i', strtotime($student_homework->en_start_time)), 0, 18) . '..',
|
||
'color' => '#000000'
|
||
],
|
||
'thing3' => [//批改老师
|
||
'value' => $student_homework->teacher_name,
|
||
'color' => '#000000'
|
||
],
|
||
'thing5' => [//学生
|
||
'value' => $student_homework->student_name,
|
||
'color' => '#000000'
|
||
],
|
||
'time4' => [//提交时间
|
||
'value' => $student_homework->created_at,
|
||
'color' => '#000000'
|
||
]
|
||
],
|
||
'miniprogram' => [
|
||
|
||
],
|
||
"lang" => "zh_CN",
|
||
];
|
||
|
||
|
||
$result = (new WechatSubscriptService())->sendMsg($send_teacher_data);
|
||
|
||
|
||
return [
|
||
'code' => ResponseCode::SUCCESS,
|
||
'data' => [],
|
||
'msg' => 'success'
|
||
];
|
||
} catch (Exception $e) {
|
||
return [
|
||
'code' => ResponseCode::FAIL,
|
||
'msg' => $e->getMessage()
|
||
];
|
||
}
|
||
}
|
||
|
||
|
||
|
||
public function studentScheduleConfirmNotifyTeacher($student_schedule_id)
|
||
{
|
||
try {
|
||
$student_schedule = StudentSchedule::where(['id'=>$student_schedule_id, 'is_publish'=>1])->with(['teacher', 'student', 'subject'])->findOrEmpty();
|
||
|
||
if($student_schedule->isEmpty()){
|
||
throw new Exception('未找到');
|
||
}
|
||
|
||
|
||
//@todo:日志
|
||
|
||
$send_teacher_data = [
|
||
'touser' => 'olfLh6o4CG9xb6_tA3y29shOj_Bo',//@todo:发送人
|
||
'template_id' => '9zKhl4mYHNcz2jW8MGEtfZXU2M3slaIers9-NCpY4Xc',
|
||
'data' => [
|
||
'time3' => [//上课时间
|
||
'value' => $student_schedule->en_start_time,
|
||
'color' => '#000000'
|
||
],
|
||
'thing2' => [//课程名称
|
||
'value' => $student_schedule->english_name,
|
||
'color' => '#000000'
|
||
],
|
||
'thing4' => [//上课老师
|
||
'value' => $student_schedule->teacher_name,
|
||
'color' => '#000000'
|
||
],
|
||
'thing1' => [//学生名称
|
||
'value' => $student_schedule->student_name,
|
||
'color' => '#000000'
|
||
]
|
||
],
|
||
'miniprogram' => [
|
||
|
||
],
|
||
"lang" => "zh_CN",
|
||
];
|
||
|
||
|
||
$result = (new WechatSubscriptService())->sendMsg($send_teacher_data);
|
||
|
||
//@todo:添加日志
|
||
|
||
return [
|
||
'code' => ResponseCode::SUCCESS,
|
||
'data' => [],
|
||
'msg' => 'success'
|
||
];
|
||
}catch (Exception $e){
|
||
return [
|
||
'code' => ResponseCode::FAIL,
|
||
'msg' => $e->getMessage()
|
||
];
|
||
}
|
||
}
|
||
|
||
|
||
} |