64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
# ===========================================
|
||
# 班级操行分管理系统 - 管理端路由
|
||
#
|
||
# 开发者: Canglan
|
||
# 联系方式: admin@sea-studio.top
|
||
# 版权归属: Sea Network Technology Studio
|
||
# 许可证: MIT License
|
||
#
|
||
# 版权所有 © Sea Network Technology Studio
|
||
# ===========================================
|
||
|
||
# 在 admin.py 中修改导入接口
|
||
|
||
@router.post("/students/import")
|
||
async def import_students(
|
||
request: Request,
|
||
file: UploadFile = File(...)
|
||
):
|
||
"""
|
||
批量导入学生(JSON格式)
|
||
初始操行分默认为60分
|
||
"""
|
||
user = await get_current_user(request)
|
||
|
||
# 检查权限(仅班主任)
|
||
is_teacher = await PermissionChecker.check_is_teacher(user["user_id"])
|
||
if not is_teacher:
|
||
return error_response(message="仅班主任可导入学生", code=403)
|
||
|
||
# 检查文件大小
|
||
file_size = 0
|
||
content = await file.read()
|
||
file_size = len(content)
|
||
|
||
if file_size > settings.MAX_UPLOAD_SIZE:
|
||
return error_response(message=f"文件大小不能超过{settings.MAX_UPLOAD_SIZE // 1024 // 1024}MB")
|
||
|
||
# 检查文件扩展名
|
||
filename = file.filename or ""
|
||
extension = filename.split('.')[-1].lower() if '.' in filename else ''
|
||
if extension not in settings.ALLOWED_EXTENSIONS:
|
||
return error_response(message=f"不支持的文件类型,仅支持 {', '.join(settings.ALLOWED_EXTENSIONS)}")
|
||
|
||
# 解析JSON
|
||
try:
|
||
import json
|
||
data = json.loads(content.decode('utf-8'))
|
||
students = data.get("students", [])
|
||
except json.JSONDecodeError as e:
|
||
return error_response(message=f"JSON格式错误: {str(e)}")
|
||
except UnicodeDecodeError:
|
||
return error_response(message="文件编码错误,请使用UTF-8编码")
|
||
|
||
if not students:
|
||
return error_response(message="文件中没有学生数据")
|
||
|
||
# 导入学生(初始操行分60分)
|
||
result = await AdminService.import_students(
|
||
students=students,
|
||
operator_id=user["user_id"],
|
||
initial_points=60
|
||
)
|
||
|
||
return success_response(data=result, message=f"导入完成: 成功{result['success_count']}人,失败{result['failed_count']}人") |