fix 学生课程作业发布,同步发送给家长和教师

This commit is contained in:
Dai 2024-09-29 15:55:45 +08:00
parent 1f50016717
commit 2af0578094
4 changed files with 243 additions and 22 deletions

View File

@ -5,6 +5,7 @@ namespace app\common\service;
use app\common\model\CronJob; use app\common\model\CronJob;
use app\common\model\Student; use app\common\model\Student;
use app\common\model\StudentHomework; use app\common\model\StudentHomework;
use app\common\model\StudentParent;
use app\common\model\StudentSchedule; use app\common\model\StudentSchedule;
use app\common\model\SubjectHomework; use app\common\model\SubjectHomework;
use app\common\model\Teacher; use app\common\model\Teacher;
@ -17,6 +18,9 @@ class SendMsgCronJobService
const TEACHER_SCHEDULE_TIME_PUBLISH_TEACHER = 'teacher_schedule_time_publish_to_teacher'; const TEACHER_SCHEDULE_TIME_PUBLISH_TEACHER = 'teacher_schedule_time_publish_to_teacher';
const TEACHER_SCHEDULE_TIME_PUBLISH_STUDENT = 'teacher_schedule_time_publish_to_student'; const TEACHER_SCHEDULE_TIME_PUBLISH_STUDENT = 'teacher_schedule_time_publish_to_student';
const TEACHER_SCHEDULE_TIME_PUBLISH_PARENTS = 'teacher_schedule_time_publish_to_parent';
// const TEACHER_SCHEDULE_TIME_PUBLISH_TEACHER = 'teacher_schedule_time_publish_to_teacher';
/** /**
* 通知类型 * 通知类型
@ -208,6 +212,112 @@ class SendMsgCronJobService
'send_result_msg' => $result['msg'], 'send_result_msg' => $result['msg'],
]); ]);
//查找学生家长,同步发送消息给家长
$parents = StudentParent::where(['id' => $student['parent_id']])->findOrEmpty();
if (!$parents->isEmpty()) {
$send_teacher_data = [
'touser' => $parents['openid'],
'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' => SendMsgCronJobService::TEACHER_SCHEDULE_TIME_PUBLISH_PARENTS,
'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' => 'parent',
'send_data' => json_encode($send_teacher_data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
'msg_info' => json_encode($teacher_schedule_time->toArray(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
'send_result' => $result['code'] == ResponseCode::SUCCESS ? 1 : 0,
'send_result_msg' => $result['msg'],
]);
}
if (isset($teacher_schedule_time['teacherAttr']) && !empty($teacher_schedule_time['teacherAttr']['openid'])) {
//发送给教师
$send_teacher_data = [
'touser' => $teacher_schedule_time['teacherAttr']['openid'],
'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' => SendMsgCronJobService::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($teacher_schedule_time->toArray(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
'send_result' => $result['code'] == ResponseCode::SUCCESS ? 1 : 0,
'send_result_msg' => $result['msg'],
]);
}
} }
} catch (Exception $e) { } catch (Exception $e) {

View File

@ -157,6 +157,7 @@ class StudentScheduleController extends Crud
$data = $request->post(); $data = $request->post();
if (isset($data['is_publish']) && $data['is_publish']) { if (isset($data['is_publish']) && $data['is_publish']) {
//发送消息给学生
$student_schedule = \app\common\model\StudentSchedule::where(['id' => $data['id']])->find(); $student_schedule = \app\common\model\StudentSchedule::where(['id' => $data['id']])->find();
(new SendMsgCronJobService())->teacherScheduleTimePublishMsgToStudent($student_schedule->teacher_schedule_time_id); (new SendMsgCronJobService())->teacherScheduleTimePublishMsgToStudent($student_schedule->teacher_schedule_time_id);
} }

View File

@ -4,6 +4,7 @@ namespace plugin\admin\app\controller;
use app\common\model\CronJob; use app\common\model\CronJob;
use app\common\model\Student; use app\common\model\Student;
use app\common\model\StudentParent;
use app\common\model\TeacherScheduleTime; use app\common\model\TeacherScheduleTime;
use app\common\service\SendMsgCronJobService; use app\common\service\SendMsgCronJobService;
use app\common\service\WechatSubscriptService; use app\common\service\WechatSubscriptService;
@ -35,6 +36,7 @@ class sendMsgNotifyController extends Crud
throw new Exception('未找到课程分配的学生'); throw new Exception('未找到课程分配的学生');
} }
$student_info = []; $student_info = [];
foreach ($studentSchedule as $student) { foreach ($studentSchedule as $student) {
if (!$student['is_publish']) { if (!$student['is_publish']) {
@ -42,7 +44,7 @@ class sendMsgNotifyController extends Crud
} }
$student = Student::where(['id' => $student['student_id']])->findOrEmpty(); $student = Student::where(['id' => $student['student_id']])->findOrEmpty();
array_push($student_info, ['id' => $student['id'], 'student_name' => $student['student_name'], 'openid' => $student['openid']]); array_push($student_info, ['id' => $student['id'], 'student_name' => $student['student_name'], 'openid' => $student['openid'], 'parent_id' => $student['parent_id']]);
} }
$student_name = implode(',', array_column($student_info, 'student_name')); $student_name = implode(',', array_column($student_info, 'student_name'));
@ -97,6 +99,110 @@ class sendMsgNotifyController extends Crud
'send_result_msg' => $result['msg'], 'send_result_msg' => $result['msg'],
]); ]);
//查找学生家长,同步发送消息给家长
$parents = StudentParent::where(['id' => $student['parent_id']])->findOrEmpty();
if (!$parents->isEmpty()) {
$send_teacher_data = [
'touser' => $parents['openid'],
'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' => SendMsgCronJobService::TEACHER_SCHEDULE_TIME_PUBLISH_PARENTS,
'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' => 'parent',
'send_data' => json_encode($send_teacher_data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
'msg_info' => json_encode($teacher_schedule_time->toArray(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
'send_result' => $result['code'] == ResponseCode::SUCCESS ? 1 : 0,
'send_result_msg' => $result['msg'],
]);
}
if (isset($teacher_schedule_time['teacherAttr']) && !empty($teacher_schedule_time['teacherAttr']['openid'])) {
//发送给教师
$send_teacher_data = [
'touser' => $student['openid'],
'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' => SendMsgCronJobService::TEACHER_SCHEDULE_TIME_PUBLISH_STUDENT,
'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($teacher_schedule_time->toArray(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
'send_result' => $result['code'] == ResponseCode::SUCCESS ? 1 : 0,
'send_result_msg' => $result['msg'],
]);
}
} }
return json([ return json([
@ -112,4 +218,4 @@ class sendMsgNotifyController extends Crud
} }
} }
} }

View File

@ -8,68 +8,68 @@
<link rel="stylesheet" href="/app/admin/admin/css/reset.css" /> <link rel="stylesheet" href="/app/admin/admin/css/reset.css" />
</head> </head>
<body class="pear-container"> <body class="pear-container">
<!-- 顶部查询表单 --> <!-- 顶部查询表单 -->
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-body"> <div class="layui-card-body">
<form class="layui-form top-search-from"> <form class="layui-form top-search-from">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">消息类型</label> <label class="layui-form-label">消息类型</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="msg_type" value="" class="layui-input"> <input type="text" name="msg_type" value="" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">教师</label> <label class="layui-form-label">教师</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" name="teacher_id" value="" class="layui-input"> <input type="number" name="teacher_id" value="" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">课程</label> <label class="layui-form-label">课程</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" name="subject_id" value="" class="layui-input"> <input type="number" name="subject_id" value="" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">学生</label> <label class="layui-form-label">学生</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" name="student_id" value="" class="layui-input"> <input type="number" name="student_id" value="" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">教师排课id</label> <label class="layui-form-label">教师排课id</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" name="teacher_schedule_time_id" value="" class="layui-input"> <input type="number" name="teacher_schedule_time_id" value="" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">课程开始时间</label> <label class="layui-form-label">课程开始时间</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="start_time" id="start_time" autocomplete="off" class="layui-input"> <input type="text" name="start_time" id="start_time" autocomplete="off" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">发送角色</label> <label class="layui-form-label">发送角色</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="send_role" value="" class="layui-input"> <input type="text" name="send_role" value="" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">结果</label> <label class="layui-form-label">结果</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" name="send_result" value="" class="layui-input"> <input type="number" name="send_result" value="" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item layui-inline"> <div class="layui-form-item layui-inline">
<label class="layui-form-label"></label> <label class="layui-form-label"></label>
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="table-query"> <button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="table-query">
@ -86,7 +86,7 @@
</form> </form>
</div> </div>
</div> </div>
<!-- 数据表格 --> <!-- 数据表格 -->
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-body"> <div class="layui-card-body">
@ -112,6 +112,8 @@
<span class="layui-badge layui-bg-green">排课结果通知教师</span> <span class="layui-badge layui-bg-green">排课结果通知教师</span>
{{# }else if(d.msg_type == 'teacher_schedule_time_publish_to_student'){ }} {{# }else if(d.msg_type == 'teacher_schedule_time_publish_to_student'){ }}
<span class="layui-badge layui-bg-blue">排课结果通知学生</span> <span class="layui-badge layui-bg-blue">排课结果通知学生</span>
{{# }else if(d.msg_type == 'teacher_schedule_time_publish_to_parent'){ }}
<span class="layui-badge layui-bg-blue">排课结果通知家长</span>
{{# }else if(d.msg_type == 'class_begin_notify_teacher'){ }} {{# }else if(d.msg_type == 'class_begin_notify_teacher'){ }}
<span class="layui-badge layui-bg-green">课程开始提醒教师</span> <span class="layui-badge layui-bg-green">课程开始提醒教师</span>
{{# }else if(d.msg_type == 'subject_upload_notify_admin'){ }} {{# }else if(d.msg_type == 'subject_upload_notify_admin'){ }}
@ -137,6 +139,8 @@
<span class="layui-badge layui-bg-blue">学生</span> <span class="layui-badge layui-bg-blue">学生</span>
{{# }else if(d.send_role == 'admin'){ }} {{# }else if(d.send_role == 'admin'){ }}
<span class="layui-badge layui-bg-red">管理员</span> <span class="layui-badge layui-bg-red">管理员</span>
{{# }else if(d.send_role == 'parent'){ }}
<span class="layui-badge layui-bg-red">家长</span>
{{# }else{ }} {{# }else{ }}
<span class="layui-badge layui-bg-red">未知</span> <span class="layui-badge layui-bg-red">未知</span>
{{# } }} {{# } }}
@ -223,7 +227,7 @@
<script src="/app/admin/component/pear/pear.js"></script> <script src="/app/admin/component/pear/pear.js"></script>
<script src="/app/admin/admin/js/permission.js"></script> <script src="/app/admin/admin/js/permission.js"></script>
<script src="/app/admin/admin/js/common.js"></script> <script src="/app/admin/admin/js/common.js"></script>
<script> <script>
// 相关常量 // 相关常量
@ -233,7 +237,7 @@
const DELETE_API = "/app/admin/cron-job/delete"; const DELETE_API = "/app/admin/cron-job/delete";
const INSERT_URL = "/app/admin/cron-job/insert"; const INSERT_URL = "/app/admin/cron-job/insert";
const UPDATE_URL = "/app/admin/cron-job/update"; const UPDATE_URL = "/app/admin/cron-job/update";
// 字段 课程开始时间 start_time // 字段 课程开始时间 start_time
layui.use(["laydate"], function() { layui.use(["laydate"], function() {
layui.laydate.render({ layui.laydate.render({
@ -241,7 +245,7 @@
type: "datetime", type: "datetime",
}); });
}) })
// 表格渲染 // 表格渲染
layui.use(["table", "form", "common", "popup", "util"], function() { layui.use(["table", "form", "common", "popup", "util"], function() {
let table = layui.table; let table = layui.table;
@ -249,7 +253,7 @@
let $ = layui.$; let $ = layui.$;
let common = layui.common; let common = layui.common;
let util = layui.util; let util = layui.util;
// 表头参数 // 表头参数
let cols = [ let cols = [
{ {
@ -340,7 +344,7 @@
width: 120, width: 120,
} }
]; ];
// 渲染表格 // 渲染表格
table.render({ table.render({
elem: "#data-table", elem: "#data-table",
@ -360,8 +364,8 @@
layer.photos({photos: 'div[lay-id="data-table"]', anim: 5}); layer.photos({photos: 'div[lay-id="data-table"]', anim: 5});
} }
}); });
// 编辑或删除行事件 // 编辑或删除行事件
table.on("tool(data-table)", function(obj) { table.on("tool(data-table)", function(obj) {
if (obj.event === "remove") { if (obj.event === "remove") {
@ -392,14 +396,14 @@
}) })
return false; return false;
}); });
// 表格顶部搜索重置事件 // 表格顶部搜索重置事件
form.on("submit(table-reset)", function(data) { form.on("submit(table-reset)", function(data) {
table.reload("data-table", { table.reload("data-table", {
where: [] where: []
}) })
}); });
// 字段允许为空 // 字段允许为空
form.verify({ form.verify({
phone: [/(^$)|^1\d{10}$/, "请输入正确的手机号"], phone: [/(^$)|^1\d{10}$/, "请输入正确的手机号"],