diff --git a/app/api/controller/TeacherScheduleTimeController.php b/app/api/controller/TeacherScheduleTimeController.php
index fa8b7dc..dab1814 100644
--- a/app/api/controller/TeacherScheduleTimeController.php
+++ b/app/api/controller/TeacherScheduleTimeController.php
@@ -7,6 +7,7 @@ use app\common\model\TeacherScheduleTime;
use app\common\service\TeacherScheduleTimeService;
use app\constant\ResponseCode;
use support\Request;
+use think\Exception;
class TeacherScheduleTimeController extends BaseController
{
@@ -47,132 +48,146 @@ class TeacherScheduleTimeController extends BaseController
public function downloadSchedule(Request $request)
{
- $request_data = $request->post();
- $month = date('Y-m', strtotime($request_data['date']));
- $student_schedule = TeacherScheduleTime::where(['teacher_id' => $request->teacher->id, 'is_publish' => 1])
- ->where(['month' => $month])
- ->with(['teacher', 'subject', 'studentSchedule'])
- ->order('start_time asc')
- ->select()->toArray();
+ try {
+ if (empty((array)$request->teacher)) {
+ throw new Exception('请教师登陆后再试');
+ }
- $array = [];
- $stu_nmae = '';
- foreach ($student_schedule as $k => &$v) {
+ $request_data = $request->post();
+ $month = date('Y-m', strtotime($request_data['date']));
+ $student_schedule = TeacherScheduleTime::where(['teacher_id' => $request->teacher->id, 'is_publish' => 1])
+ ->where(['month' => $month])
+ ->with(['teacher', 'subject', 'studentSchedule'])
+ ->order('start_time asc')
+ ->select()->toArray();
- if($v['studentSchedule']){
- $student = [];
- foreach ($v['studentSchedule'] as $k1 => $v1) {
- if($v1['is_publish']){
- $student[] = $v1['student_name'];
+ $array = [];
+ $stu_nmae = '';
+
+ foreach ($student_schedule as $k => &$v) {
+
+ if($v['studentSchedule']){
+ $student = [];
+ foreach ($v['studentSchedule'] as $k1 => $v1) {
+ if($v1['is_publish']){
+ $student[] = $v1['student_name'];
+ }
}
}
+
+ $array[] = [
+ 'week' => $this->getWeek(strtotime($v['date'])),
+ 'date' => $v['date'],
+ 'time_on' => $v['time'],
+ 'subject' => $v['english_name'],
+ 'teacher_name' => $v['teacher_name'],
+ 'student_name' => implode(',', $student),
+ 'time_num' => $v['hour'] . '/h',
+ ];
+ $stu_nmae = $v['teacher_name'];
}
- $array[] = [
- 'week' => $this->getWeek(strtotime($v['date'])),
- 'date' => $v['date'],
- 'time_on' => $v['time'],
- 'subject' => $v['english_name'],
- 'teacher_name' => $v['teacher_name'],
- 'student_name' => implode(',', $student),
- 'time_num' => $v['hour'] . '/h',
+ $params = [
+ 'row' => count($student_schedule) + 1,//数据的行数
+ 'file_name' => time() . '.png',
+ 'title' => $stu_nmae,
+ 'table_time' => $month,
+ 'data' => $array,
];
- $stu_nmae = $v['teacher_name'];
- }
-
- $params = [
- 'row' => count($student_schedule) + 1,//数据的行数
- 'file_name' => time() . '.png',
- 'title' => $stu_nmae,
- 'table_time' => $month,
- 'data' => $array,
- ];
- $file_path = '/files/images/teacher_schedule/' . $month . "/{$request->teacher->id}/";
- $base = [
- 'border' => 10,//图片外边框
- 'file_path' => public_path($file_path),//图片保存路径
- 'title_height' => 30,//报表名称高度
- 'title_font_size' => 16,//报表名称字体大小
- 'font_ulr' => public_path('/111.ttf'),//字体文件路径
- 'text_size' => 12,//正文字体大小
- 'row_hight' => 30,//每行数据行高
- 'filed_id_width' => 60,//序号列的宽度
- 'filed_name_width' => 120,//玩家名称的宽度
- 'filed_data_width' => 120,//数据列的宽度
- 'table_header' => ['', 'Week', 'Date', 'Time', 'Subject', 'Teacher', 'Student','Duration'],//表头文字
- 'column_text_offset_arr' => [45, 70, 70, 90, 55, 65, 65, 65],//表头文字左偏移量
- 'row_text_offset_arr' => [50, 110, 90, 110, 90, 90, 90, 90],//数据列文字左偏移量
- ];
- $base['img_width'] = $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 5 + $base['border'] * 2;//图片宽度
- $base['img_height'] = $params['row'] * $base['row_hight'] + $base['border'] * 2 + $base['title_height'];//图片高度
- $border_top = $base['border'] + $base['title_height'];//表格顶部高度
- $border_bottom = $base['img_height'] - $base['border'];//表格底部高度
- $base['column_x_arr'] = [
- $base['border'] + $base['filed_id_width'],//第一列边框线x轴像素 70/2+10
- $base['border'] + $base['filed_id_width'] + $base['filed_name_width'],//第二列边框线x轴像素 190
- $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 1,//第三列边框线x轴像素
- $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 2,//第四列边框线x轴像素
- $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 3,//第五列边框线x轴像素
- $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 4,//第五列边框线x轴像素
- $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 5,//第五列边框线x轴像素
- $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 6,//第五列边框线x轴像素
- ];
- $img = imagecreatetruecolor($base['img_width'], $base['img_height']);//创建指定尺寸图片
- $bg_color = imagecolorallocate($img, 255, 255, 255);//设定图片背景色
- $text_coler = imagecolorallocate($img, 0, 0, 0);//设定文字颜色
- $border_coler = imagecolorallocate($img, 0, 0, 0);//设定边框颜色
+ $file_path = '/files/images/teacher_schedule/' . $month . "/{$request->teacher->id}/";
+ $base = [
+ 'border' => 10,//图片外边框
+ 'file_path' => public_path($file_path),//图片保存路径
+ 'title_height' => 30,//报表名称高度
+ 'title_font_size' => 16,//报表名称字体大小
+ 'font_ulr' => public_path('/111.ttf'),//字体文件路径
+ 'text_size' => 12,//正文字体大小
+ 'row_hight' => 30,//每行数据行高
+ 'filed_id_width' => 60,//序号列的宽度
+ 'filed_name_width' => 120,//玩家名称的宽度
+ 'filed_data_width' => 120,//数据列的宽度
+ 'table_header' => ['', 'Week', 'Date', 'Time', 'Subject', 'Teacher', 'Student','Duration'],//表头文字
+ 'column_text_offset_arr' => [45, 70, 70, 90, 55, 65, 65, 65],//表头文字左偏移量
+ 'row_text_offset_arr' => [50, 110, 90, 110, 90, 90, 90, 90],//数据列文字左偏移量
+ ];
+ $base['img_width'] = $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 5 + $base['border'] * 2;//图片宽度
+ $base['img_height'] = $params['row'] * $base['row_hight'] + $base['border'] * 2 + $base['title_height'];//图片高度
+ $border_top = $base['border'] + $base['title_height'];//表格顶部高度
+ $border_bottom = $base['img_height'] - $base['border'];//表格底部高度
+ $base['column_x_arr'] = [
+ $base['border'] + $base['filed_id_width'],//第一列边框线x轴像素 70/2+10
+ $base['border'] + $base['filed_id_width'] + $base['filed_name_width'],//第二列边框线x轴像素 190
+ $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 1,//第三列边框线x轴像素
+ $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 2,//第四列边框线x轴像素
+ $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 3,//第五列边框线x轴像素
+ $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 4,//第五列边框线x轴像素
+ $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 5,//第五列边框线x轴像素
+ $base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 6,//第五列边框线x轴像素
+ ];
+ $img = imagecreatetruecolor($base['img_width'], $base['img_height']);//创建指定尺寸图片
+ $bg_color = imagecolorallocate($img, 255, 255, 255);//设定图片背景色
+ $text_coler = imagecolorallocate($img, 0, 0, 0);//设定文字颜色
+ $border_coler = imagecolorallocate($img, 0, 0, 0);//设定边框颜色
// $white_coler = imagecolorallocate($img, 255, 255, 255);//设定边框颜色
- imagefill($img, 0, 0, $bg_color);//填充图片背景色
- //先填充一个黑色的大块背景
- imagefilledrectangle($img, $base['border'], $base['border'] + $base['title_height'], $base['img_width'] - $base['border'], $base['img_height'] - $base['border'], $border_coler);//画矩形
- //再填充一个小两个像素的 背景色区域,形成一个两个像素的外边框
- imagefilledrectangle($img, $base['border'] + 2, $base['border'] + $base['title_height'] + 2, $base['img_width'] - $base['border'] - 2, $base['img_height'] - $base['border'] - 2, $bg_color);//画矩形
- //画表格纵线 及 写入表头文字
- foreach ($base['column_x_arr'] as $key => $x) {
- imageline($img, $x, $border_top, $x, $border_bottom, $border_coler);//画纵线
- $x = $x - $base['column_text_offset_arr'][$key] + 1;
- // echo $x;echo "
";
- $y = $border_top + $base['row_hight'] - 8;
- $text = $base['table_header'][$key];
- imagettftext($img, $base['text_size'], 0, $x, $y, $text_coler, $base['font_ulr'], $text);//写入表头文字
- }
- //画表格横线
- foreach ($params['data'] as $key => $item) {
- $border_top += $base['row_hight'];
- imageline($img, $base['border'], $border_top, $base['img_width'] - $base['border'], $border_top, $border_coler);
- $x = $base['column_x_arr'][0] - $base['row_text_offset_arr'][0];
- $y = $border_top + $base['row_hight'] - 10;
- $text = $key + 1;
- imagettftext($img, $base['text_size'], 0, $x, $y, $text_coler, $base['font_ulr'], $text);//写入序号
- $sub = 0;
- foreach ($item as $value) {
- $sub++;
- imagettftext($img, $base['text_size'], 0, $base['column_x_arr'][$sub] - $base['row_text_offset_arr'][$sub], $border_top + $base['row_hight'] - 10, $text_coler, $base['font_ulr'], $value);//写入data数据
+ imagefill($img, 0, 0, $bg_color);//填充图片背景色
+ //先填充一个黑色的大块背景
+ imagefilledrectangle($img, $base['border'], $base['border'] + $base['title_height'], $base['img_width'] - $base['border'], $base['img_height'] - $base['border'], $border_coler);//画矩形
+ //再填充一个小两个像素的 背景色区域,形成一个两个像素的外边框
+ imagefilledrectangle($img, $base['border'] + 2, $base['border'] + $base['title_height'] + 2, $base['img_width'] - $base['border'] - 2, $base['img_height'] - $base['border'] - 2, $bg_color);//画矩形
+ //画表格纵线 及 写入表头文字
+ foreach ($base['column_x_arr'] as $key => $x) {
+ imageline($img, $x, $border_top, $x, $border_bottom, $border_coler);//画纵线
+ $x = $x - $base['column_text_offset_arr'][$key] + 1;
+ // echo $x;echo "
";
+ $y = $border_top + $base['row_hight'] - 8;
+ $text = $base['table_header'][$key];
+ imagettftext($img, $base['text_size'], 0, $x, $y, $text_coler, $base['font_ulr'], $text);//写入表头文字
}
+ //画表格横线
+ foreach ($params['data'] as $key => $item) {
+ $border_top += $base['row_hight'];
+ imageline($img, $base['border'], $border_top, $base['img_width'] - $base['border'], $border_top, $border_coler);
+ $x = $base['column_x_arr'][0] - $base['row_text_offset_arr'][0];
+ $y = $border_top + $base['row_hight'] - 10;
+ $text = $key + 1;
+ imagettftext($img, $base['text_size'], 0, $x, $y, $text_coler, $base['font_ulr'], $text);//写入序号
+ $sub = 0;
+ foreach ($item as $value) {
+ $sub++;
+ imagettftext($img, $base['text_size'], 0, $base['column_x_arr'][$sub] - $base['row_text_offset_arr'][$sub], $border_top + $base['row_hight'] - 10, $text_coler, $base['font_ulr'], $value);//写入data数据
+ }
+ }
+ //计算标题写入起始位置
+ $title_fout_box = imagettfbbox($base['title_font_size'], 0, $base['font_ulr'], $params['title']);//imagettfbbox() 返回一个含有 8 个单元的数组表示了文本外框的四个角:
+
+ $title_fout_width = $title_fout_box[2] - $title_fout_box[0];//右下角 X 位置 - 左下角 X 位置 为文字宽度
+ $title_fout_height = $title_fout_box[1] - $title_fout_box[7];//左下角 Y 位置- 左上角 Y 位置 为文字高度
+ //居中写入标题
+ imagettftext($img, $base['title_font_size'], 0, ($base['img_width'] - $title_fout_width) / 2, $base['title_height'], $text_coler, $base['font_ulr'], $params['title']);
+ //写入制表时间
+ imagettftext($img, $base['text_size'], 0, $base['border'], $base['title_height'], $text_coler, $base['font_ulr'], 'Date:' . $params['table_time']);
+ $save_path = $base['file_path'] . $params['file_name'];
+ if (!is_dir($base['file_path']))//判断存储路径是否存在,不存在则创建
+ {
+ mkdir($base['file_path'], 0777, true);//可创建多级目录
+ }
+ imagepng($img, $save_path);//输出图片,输出png使用imagepng方法,输出gif使用imagegif方法
+
+ $url = getenv('SERVER_DOMAIN') . $file_path . $params['file_name'];
+
+ return $this->json([
+ 'code'=>ResponseCode::SUCCESS,
+ 'data' => $url,
+ ]);
+
+ }catch (Exception $e){
+ return $this->json([
+ 'code' => ResponseCode::FAIL,
+ 'msg' => $e->getMessage()
+ ]);
}
- //计算标题写入起始位置
- $title_fout_box = imagettfbbox($base['title_font_size'], 0, $base['font_ulr'], $params['title']);//imagettfbbox() 返回一个含有 8 个单元的数组表示了文本外框的四个角:
- $title_fout_width = $title_fout_box[2] - $title_fout_box[0];//右下角 X 位置 - 左下角 X 位置 为文字宽度
- $title_fout_height = $title_fout_box[1] - $title_fout_box[7];//左下角 Y 位置- 左上角 Y 位置 为文字高度
- //居中写入标题
- imagettftext($img, $base['title_font_size'], 0, ($base['img_width'] - $title_fout_width) / 2, $base['title_height'], $text_coler, $base['font_ulr'], $params['title']);
- //写入制表时间
- imagettftext($img, $base['text_size'], 0, $base['border'], $base['title_height'], $text_coler, $base['font_ulr'], 'Date:' . $params['table_time']);
- $save_path = $base['file_path'] . $params['file_name'];
- if (!is_dir($base['file_path']))//判断存储路径是否存在,不存在则创建
- {
- mkdir($base['file_path'], 0777, true);//可创建多级目录
- }
- imagepng($img, $save_path);//输出图片,输出png使用imagepng方法,输出gif使用imagegif方法
-
- $url = getenv('SERVER_DOMAIN') . $file_path . $params['file_name'];
-
- return $this->json([
- 'code'=>ResponseCode::SUCCESS,
- 'data' => $url,
- ]);
}