2024-07-18 00:25:58 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace app\common\service;
|
|
|
|
|
|
|
|
use app\common\model\Teacher;
|
|
|
|
use app\common\model\TeacherFreeTime;
|
|
|
|
use app\constant\ResponseCode;
|
|
|
|
use think\Exception;
|
|
|
|
use DateTime;
|
|
|
|
|
|
|
|
class TeacherFreeTimeService
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @desc 添加空闲时间
|
|
|
|
* @param $request
|
|
|
|
* @return array
|
|
|
|
* @throws \Exception
|
|
|
|
*/
|
|
|
|
public function addFreeTime($request)
|
|
|
|
{
|
|
|
|
try {
|
2024-10-13 22:00:24 +08:00
|
|
|
if (empty((array)$request->teacher)) {
|
2024-07-18 00:25:58 +08:00
|
|
|
throw new Exception('请教师登陆后再设置');
|
|
|
|
}
|
|
|
|
$teacher = Teacher::where(['id' => $request->teacher->id])->findOrEmpty();
|
|
|
|
|
|
|
|
if ($teacher->isEmpty()) {
|
|
|
|
throw new Exception('未找到教师信息,设置失败');
|
|
|
|
}
|
|
|
|
$data = $request->post();
|
|
|
|
|
2024-07-28 22:48:34 +08:00
|
|
|
if (empty($data['free_time'])) {
|
2024-07-23 23:29:56 +08:00
|
|
|
throw new Exception('请选择时间后提交');
|
|
|
|
}
|
2024-07-18 00:25:58 +08:00
|
|
|
|
2024-07-23 23:29:56 +08:00
|
|
|
$free_time = json_decode($data['free_time'], true);
|
2024-07-23 07:38:53 +08:00
|
|
|
|
2024-07-25 22:43:43 +08:00
|
|
|
|
2024-07-18 00:25:58 +08:00
|
|
|
$total_count = 0;
|
|
|
|
$exit_count = 0;
|
|
|
|
$err_free_count = 0;
|
|
|
|
|
2024-07-25 22:43:43 +08:00
|
|
|
$has_msg = false;
|
2024-07-23 23:29:56 +08:00
|
|
|
foreach ($free_time as $item) {
|
|
|
|
$free_date = $item['day'];
|
2024-07-28 22:48:34 +08:00
|
|
|
foreach ($item['times'] as $val) {
|
2024-07-23 23:29:56 +08:00
|
|
|
$time = $val['zh'];
|
|
|
|
$en_time = $val['en'];
|
|
|
|
$time_period = explode('-', $time);
|
|
|
|
$en_time_period = explode('-', $en_time);
|
|
|
|
$firstDate = new DateTime($free_date . ' ' . trim($time_period[0]));
|
|
|
|
$secondDate = new DateTime($free_date . ' ' . trim($time_period[1]));
|
2024-08-04 19:20:59 +08:00
|
|
|
$enFirstDate = new DateTime($free_date . ' ' . trim($en_time_period[0]));
|
|
|
|
$enSecondDate = new DateTime($free_date . ' ' . trim($en_time_period[1]));
|
2024-07-23 23:29:56 +08:00
|
|
|
$diff = $secondDate->diff($firstDate);
|
|
|
|
$h = $diff->h;
|
|
|
|
$m = round($diff->i / 60, 2);
|
|
|
|
$hour = round($h + $m, 2);
|
|
|
|
$time = $time_period[0] . ' - ' . $time_period[1];
|
|
|
|
$free_data = [
|
|
|
|
'teacher_id' => $request->teacher->id,
|
|
|
|
'date' => $free_date,
|
|
|
|
'time' => $time,
|
|
|
|
'en_time' => implode(' - ', $en_time_period),
|
|
|
|
'hour' => $hour,
|
|
|
|
'start_time' => date('Y-m-d H:i:s', $firstDate->getTimestamp()),
|
|
|
|
'end_time' => date('Y-m-d H:i:s', $secondDate->getTimestamp()),
|
2024-08-04 19:20:59 +08:00
|
|
|
'en_start_time' => date('Y-m-d H:i:s', $enFirstDate->getTimestamp()),
|
|
|
|
'en_end_time' => date('Y-m-d H:i:s', $enSecondDate->getTimestamp()),
|
2024-07-23 23:29:56 +08:00
|
|
|
'month' => date('Y-m', strtotime($free_date)),
|
2025-05-07 10:56:00 +08:00
|
|
|
'time_zone_id' => $teacher['time_zone_id'],
|
|
|
|
'time_zone_name' => $teacher['time_zone_name'],
|
|
|
|
'time_zone_offset' => $teacher['time_zone_offset'],
|
2024-07-23 23:29:56 +08:00
|
|
|
];
|
|
|
|
|
|
|
|
//判断是否已经存在
|
|
|
|
$exit = TeacherFreeTime::where($free_data)->findOrEmpty();
|
2024-07-25 22:43:43 +08:00
|
|
|
|
2024-07-28 22:48:34 +08:00
|
|
|
if (!$exit->isEmpty()) {
|
2024-07-25 22:43:43 +08:00
|
|
|
$msg .= '【' + $free_data['en_time'] + '】';
|
|
|
|
$has_msg = true;
|
2024-07-23 23:29:56 +08:00
|
|
|
continue;
|
2024-07-18 00:25:58 +08:00
|
|
|
}
|
2024-07-25 22:43:43 +08:00
|
|
|
|
2024-07-23 23:29:56 +08:00
|
|
|
$res = TeacherFreeTime::create($free_data);
|
2024-07-28 22:48:34 +08:00
|
|
|
if (!$res) {
|
2024-07-23 23:29:56 +08:00
|
|
|
throw new Exception('保存失败');
|
|
|
|
}
|
2024-07-28 22:48:34 +08:00
|
|
|
if ($has_msg) {
|
2024-07-25 22:43:43 +08:00
|
|
|
$msg = $msg + '已存在添加';
|
|
|
|
}
|
2024-07-23 23:29:56 +08:00
|
|
|
|
2024-07-18 00:25:58 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-07-23 23:29:56 +08:00
|
|
|
|
|
|
|
// foreach ($free_time as $free_date => $times) {
|
|
|
|
// if ($times) {
|
|
|
|
// foreach ($times as $time) {
|
|
|
|
// $time_period = explode(' - ', $time);
|
|
|
|
// $firstDate = new DateTime($free_date . ' ' . trim($time_period[0]));
|
|
|
|
// $secondDate = new DateTime($free_date . ' ' . trim($time_period[1]));
|
|
|
|
// $diff = $secondDate->diff($firstDate);
|
|
|
|
// $h = $diff->h;
|
|
|
|
// $m = round($diff->i / 60, 2);
|
|
|
|
// $hour = round($h + $m, 2);
|
|
|
|
// $time = $time_period[0] . ' - ' . $time_period[1];
|
|
|
|
// $free_data = [
|
|
|
|
// 'teacher_id' => $request->teacher->id,
|
|
|
|
// 'date' => $free_date,
|
|
|
|
// 'time' => $time,
|
|
|
|
// 'hour' => $hour,
|
|
|
|
// 'start_time' => date('Y-m-d H:i:s', $firstDate->getTimestamp()),
|
|
|
|
// 'end_time' => date('Y-m-d H:i:s', $secondDate->getTimestamp()),
|
|
|
|
// 'month' => date('Y-m', strtotime($free_date)),
|
|
|
|
// ];
|
|
|
|
//
|
|
|
|
// //判断是否已经存在
|
|
|
|
// $exit = TeacherFreeTime::where($free_data)->findOrEmpty();
|
|
|
|
// if(!$exit->isEmpty()){
|
|
|
|
// continue;
|
|
|
|
// }
|
|
|
|
// $res = TeacherFreeTime::create($free_data);
|
|
|
|
// if(!$res){
|
|
|
|
// throw new Exception('保存失败');
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
2024-07-18 00:25:58 +08:00
|
|
|
return [
|
|
|
|
'code' => ResponseCode::SUCCESS,
|
|
|
|
'msg' => '保存成功'
|
|
|
|
];
|
|
|
|
|
2024-07-28 22:48:34 +08:00
|
|
|
} catch (Exception $e) {
|
2024-07-18 00:25:58 +08:00
|
|
|
return [
|
|
|
|
'code' => ResponseCode::FAIL,
|
|
|
|
'msg' => $e->getMessage()
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2024-07-28 22:48:34 +08:00
|
|
|
/**
|
|
|
|
* @desc 获取教师空闲时间
|
|
|
|
* @param $request
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function getFreeTime($request)
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
$free_time = TeacherFreeTime::where(['date' => $request->get('date'), 'teacher_id' => $request->teacher->id])->findOrEmpty();
|
|
|
|
|
|
|
|
if ($free_time->isEmpty()) {
|
|
|
|
throw new Exception('未找到数据');
|
|
|
|
}
|
|
|
|
|
|
|
|
return [
|
|
|
|
'code' => ResponseCode::SUCCESS,
|
|
|
|
'data' => $free_time,
|
|
|
|
'msg' => 'success'
|
|
|
|
];
|
|
|
|
} catch (Exception $e) {
|
|
|
|
return [
|
|
|
|
'code' => ResponseCode::FAIL,
|
|
|
|
'msg' => $e->getMessage()
|
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-10-13 22:00:24 +08:00
|
|
|
/**
|
|
|
|
* @desc 获取教师一个月的空闲时间
|
|
|
|
* @param $request
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function getTeacherFreeTimeOfMonth($request)
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
if (empty((array)$request->teacher)) {
|
|
|
|
throw new Exception('请教师登陆后再设置');
|
|
|
|
}
|
2024-10-13 22:28:34 +08:00
|
|
|
|
2024-10-13 22:00:24 +08:00
|
|
|
$free_time = TeacherFreeTime::where(['month' => $request->get('month'), 'teacher_id' => $request->teacher->id])->select();
|
|
|
|
|
|
|
|
return [
|
|
|
|
'code' => ResponseCode::SUCCESS,
|
|
|
|
'data' => $free_time,
|
|
|
|
];
|
|
|
|
}catch (Exception $e){
|
|
|
|
return [
|
|
|
|
'code' => ResponseCode::FAIL,
|
|
|
|
'msg' => $e->getMessage()
|
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-07-28 23:05:42 +08:00
|
|
|
public function updateFreeTime($request)
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
$teacher_free_time = TeacherFreeTime::where(['id' => $request->post('free_time_id')])->findOrEmpty();
|
|
|
|
if ($teacher_free_time->isEmpty()) {
|
|
|
|
throw new Exception('未找到数据');
|
|
|
|
}
|
|
|
|
|
|
|
|
$data = $request->post();
|
|
|
|
|
|
|
|
if (empty($data['free_time'])) {
|
|
|
|
throw new Exception('请选择时间后提交');
|
|
|
|
}
|
|
|
|
|
|
|
|
$free_time = json_decode($data['free_time'], true);
|
|
|
|
|
|
|
|
$free_time = json_decode($free_time['free_time'], true)[0];
|
|
|
|
|
|
|
|
|
|
|
|
$free_date = $free_time['day'];
|
|
|
|
$time = $free_time['times'][0]['zh'];
|
|
|
|
$en_time = $free_time['times'][0]['en'];
|
|
|
|
$time_period = explode('-', $time);
|
|
|
|
$en_time_period = explode('-', $en_time);
|
|
|
|
$firstDate = new DateTime($free_date . ' ' . trim($time_period[0]));
|
|
|
|
$secondDate = new DateTime($free_date . ' ' . trim($time_period[1]));
|
|
|
|
$diff = $secondDate->diff($firstDate);
|
|
|
|
$h = $diff->h;
|
|
|
|
$m = round($diff->i / 60, 2);
|
|
|
|
$hour = round($h + $m, 2);
|
|
|
|
$time = $time_period[0] . ' - ' . $time_period[1];
|
|
|
|
|
|
|
|
$teacher_free_time->save([
|
|
|
|
'date' => $free_date,
|
|
|
|
'time' => $time,
|
|
|
|
'hour' => $hour,
|
|
|
|
'en_time' => implode(' - ', $en_time_period),
|
|
|
|
]);
|
|
|
|
|
|
|
|
return [
|
|
|
|
'code' => ResponseCode::SUCCESS,
|
|
|
|
'msg' => '操作成功'
|
|
|
|
];
|
|
|
|
|
|
|
|
}catch (Exception $e){
|
|
|
|
return [
|
|
|
|
'code' => ResponseCode::FAIL,
|
|
|
|
'msg' => $e->getMessage()
|
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-07-28 22:48:34 +08:00
|
|
|
/**
|
|
|
|
* @desc 删除空闲时间
|
|
|
|
* @param $request
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function delete($request)
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
$free_time = TeacherFreeTime::where(['id' => $request->post('free_time_id')])->findOrEmpty();
|
|
|
|
if ($free_time->isEmpty()) {
|
|
|
|
throw new Exception('未找到数据');
|
|
|
|
}
|
|
|
|
$free_time->delete();
|
|
|
|
|
|
|
|
return [
|
|
|
|
'code' => ResponseCode::SUCCESS,
|
|
|
|
'msg' => '操作成功'
|
|
|
|
];
|
|
|
|
} catch (Exception $e) {
|
|
|
|
return [
|
|
|
|
'code' => ResponseCode::FAIL,
|
|
|
|
'msg' => $e->getMessage()
|
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-07-18 00:25:58 +08:00
|
|
|
}
|