274 lines
7.5 KiB
PHP
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([], '导出功能待实现');
|
|
}
|
|
}
|