274 lines
7.5 KiB
PHP

<?php
namespace App\Http\Controllers\Admin\Students;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Admin\Students\StudentRequest;
use App\Services\Students\StudentService;
use Illuminate\Http\Request;
/**
* 学生管理控制器
*/
class StudentController extends BaseController
{
protected $studentService;
public function __construct(StudentService $studentService)
{
$this->studentService = $studentService;
}
/**
* 获取学生列表
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function index(Request $request)
{
$params = $request->all();
$result = $this->studentService->getStudentList($params);
return $this->success($result, '获取学生列表成功');
}
/**
* 创建学生
* @param StudentRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function store(StudentRequest $request)
{
$data = $request->validated();
$result = $this->studentService->createStudent($data);
return $this->success($result, '创建学生成功');
}
/**
* 获取学生详情
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function show(int $id)
{
$result = $this->studentService->getStudentDetail($id);
return $this->success($result, '获取学生详情成功');
}
/**
* 更新学生
* @param StudentRequest $request
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function update(StudentRequest $request, int $id)
{
$data = $request->validated();
$result = $this->studentService->updateStudent($id, $data);
return $this->success($result, '更新学生成功');
}
/**
* 删除学生
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function destroy(int $id)
{
$this->studentService->deleteStudent($id);
return $this->success([], '删除学生成功');
}
/**
* 重置学生密码
* @param Request $request
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function resetPassword(Request $request, int $id)
{
$request->validate([
'password' => 'required|string|min:6|max:20'
], [
'password.required' => '密码不能为空',
'password.min' => '密码长度至少6位',
'password.max' => '密码长度最多20位'
]);
$this->studentService->resetPassword($id, $request->password);
return $this->success([], '重置密码成功');
}
/**
* 更新学生状态
* @param Request $request
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function updateStatus(Request $request, int $id)
{
$request->validate([
'status' => 'required|integer|in:0,1,2,3'
], [
'status.required' => '状态不能为空',
'status.in' => '状态值无效'
]);
$result = $this->studentService->updateStatus($id, $request->status);
return $this->success($result, '更新状态成功');
}
/**
* 获取学生班级历史
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function classHistory(int $id)
{
$result = $this->studentService->getStudentClassHistory($id);
return $this->success($result, '获取班级历史成功');
}
/**
* 分配学生到班级
* @param Request $request
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function assignToClass(Request $request, int $id)
{
$request->validate([
'class_id' => 'required|integer|exists:school_class,id',
'join_time' => 'nullable|date',
'remark' => 'nullable|string|max:500'
], [
'class_id.required' => '班级ID不能为空',
'class_id.exists' => '班级不存在',
'join_time.date' => '入班时间格式错误',
'remark.max' => '备注最多500字符'
]);
$result = $this->studentService->assignToClass($id, $request->class_id, $request->only(['join_time', 'remark']));
return $this->success($result, '分配班级成功');
}
/**
* 从班级移除学生
* @param Request $request
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function removeFromClass(Request $request, int $id)
{
$request->validate([
'class_id' => 'required|integer|exists:school_class,id',
'status' => 'nullable|integer|in:2,3,4',
'leave_time' => 'nullable|date',
'remark' => 'nullable|string|max:500'
], [
'class_id.required' => '班级ID不能为空',
'class_id.exists' => '班级不存在',
'status.in' => '状态值无效',
'leave_time.date' => '离班时间格式错误',
'remark.max' => '备注最多500字符'
]);
$this->studentService->removeFromClass($id, $request->class_id, $request->only(['status', 'leave_time', 'remark']));
return $this->success([], '移除班级成功');
}
/**
* 获取家长的子女列表
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function getChildren(int $id)
{
$result = $this->studentService->getParentChildren($id);
return $this->success($result, '获取子女列表成功');
}
/**
* 绑定家长和子女关系
* @param Request $request
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function bindChild(Request $request, int $id)
{
$request->validate([
'child_id' => 'required|integer|exists:student,id'
], [
'child_id.required' => '子女ID不能为空',
'child_id.exists' => '子女不存在'
]);
$this->studentService->bindParentChild($id, $request->child_id);
return $this->success([], '绑定子女成功');
}
/**
* 解除家长和子女关系
* @param int $id
* @return \Illuminate\Http\JsonResponse
*/
public function unbindChild(int $id)
{
$this->studentService->unbindParentChild($id);
return $this->success([], '解除绑定成功');
}
/**
* 获取学生统计信息
* @return \Illuminate\Http\JsonResponse
*/
public function statistics()
{
$result = $this->studentService->getStudentStatistics();
return $this->success($result, '获取统计信息成功');
}
/**
* 批量导入学生
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function batchImport(Request $request)
{
$request->validate([
'file' => 'required|file|mimes:xlsx,xls,csv|max:10240'
], [
'file.required' => '请选择文件',
'file.mimes' => '文件格式不正确',
'file.max' => '文件大小不能超过10M'
]);
// TODO: 实现批量导入逻辑
return $this->success([], '批量导入功能待实现');
}
/**
* 导出学生数据
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function export(Request $request)
{
// TODO: 实现导出逻辑
return $this->success([], '导出功能待实现');
}
}