更新学期功能
This commit is contained in:
@@ -127,9 +127,110 @@ class SemesterService:
|
||||
return {"success": False, "message": f"激活学期失败: {str(e)}"}
|
||||
|
||||
@staticmethod
|
||||
async def archive_semester(
|
||||
async def update_semester(
|
||||
semester_id: int,
|
||||
semester_name: str = None,
|
||||
start_date: str = None,
|
||||
end_date: str = None,
|
||||
operator_id: int = None
|
||||
) -> Dict[str, Any]:
|
||||
"""编辑学期信息"""
|
||||
try:
|
||||
semester = await SemesterModel.get_by_id(semester_id)
|
||||
if not semester:
|
||||
return {"success": False, "message": "学期不存在"}
|
||||
|
||||
if semester['is_archived']:
|
||||
return {"success": False, "message": "已归档的学期不能编辑"}
|
||||
|
||||
result = await SemesterModel.update(
|
||||
semester_id=semester_id,
|
||||
semester_name=semester_name,
|
||||
start_date=start_date,
|
||||
end_date=end_date
|
||||
)
|
||||
|
||||
if result:
|
||||
logger.info(f"用户[{operator_id}] 编辑了学期: {semester['semester_name']}")
|
||||
return {"success": True, "message": "学期信息已更新"}
|
||||
else:
|
||||
return {"success": False, "message": "更新失败,请检查参数"}
|
||||
except Exception as e:
|
||||
logger.error(f"编辑学期失败: {e}")
|
||||
return {"success": False, "message": f"编辑学期失败: {str(e)}"}
|
||||
|
||||
@staticmethod
|
||||
async def delete_semester(
|
||||
semester_id: int,
|
||||
operator_id: int = None
|
||||
) -> Dict[str, Any]:
|
||||
"""删除学期"""
|
||||
try:
|
||||
semester = await SemesterModel.get_by_id(semester_id)
|
||||
if not semester:
|
||||
return {"success": False, "message": "学期不存在"}
|
||||
|
||||
# 检查是否有关联归档数据
|
||||
archive_count = await SemesterModel.count_archives(semester_id)
|
||||
if archive_count > 0:
|
||||
return {"success": False, "message": f"该学期有 {archive_count} 条归档数据,无法删除"}
|
||||
|
||||
result = await SemesterModel.delete(semester_id)
|
||||
|
||||
if result:
|
||||
logger.info(f"用户[{operator_id}] 删除了学期: {semester['semester_name']}")
|
||||
return {"success": True, "message": "学期已删除"}
|
||||
else:
|
||||
return {"success": False, "message": "删除失败"}
|
||||
except Exception as e:
|
||||
logger.error(f"删除学期失败: {e}")
|
||||
return {"success": False, "message": f"删除学期失败: {str(e)}"}
|
||||
|
||||
@staticmethod
|
||||
async def associate_records(
|
||||
semester_id: int,
|
||||
operator_id: int = None
|
||||
) -> Dict[str, Any]:
|
||||
"""关联记录到学期"""
|
||||
try:
|
||||
semester = await SemesterModel.get_by_id(semester_id)
|
||||
if not semester:
|
||||
return {"success": False, "message": "学期不存在"}
|
||||
|
||||
if semester['is_archived']:
|
||||
return {"success": False, "message": "已归档的学期不能关联数据"}
|
||||
|
||||
start_date = semester.get('start_date')
|
||||
if not start_date:
|
||||
return {"success": False, "message": "学期未设置开始日期,无法关联数据"}
|
||||
|
||||
end_date = semester.get('end_date') or datetime.date.today().isoformat()
|
||||
|
||||
counts = await SemesterModel.associate_records_by_date_range(
|
||||
semester_id=semester_id,
|
||||
start_date=start_date,
|
||||
end_date=end_date
|
||||
)
|
||||
|
||||
logger.info(
|
||||
f"用户[{operator_id}] 关联数据到学期: {semester['semester_name']}, "
|
||||
f"操行分 {counts['conduct']} 条, 考勤 {counts['attendance']} 条"
|
||||
)
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"关联完成:操行分 {counts['conduct']} 条,考勤 {counts['attendance']} 条",
|
||||
"data": counts
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"关联记录失败: {e}")
|
||||
return {"success": False, "message": f"关联记录失败: {str(e)}"}
|
||||
|
||||
@staticmethod
|
||||
async def archive_semester(
|
||||
semester_id: int,
|
||||
operator_id: int = None,
|
||||
reset_scores: bool = False
|
||||
) -> Dict[str, Any]:
|
||||
"""归档学期"""
|
||||
try:
|
||||
@@ -231,6 +332,18 @@ class SemesterService:
|
||||
# 标记学期为已归档
|
||||
await SemesterModel.archive(semester_id)
|
||||
|
||||
# 归档成功后按需重置学生操行分
|
||||
if reset_scores:
|
||||
reset_result = await SemesterService.reset_student_points()
|
||||
logger.info(
|
||||
f"用户[{operator_id}] 归档学期: {semester['semester_name']} 并重置学生操行分, "
|
||||
f"共 {total_students} 名学生"
|
||||
)
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"学期归档成功,共归档 {total_students} 名学生数据,已重置学生操行分"
|
||||
}
|
||||
|
||||
logger.info(
|
||||
f"用户[{operator_id}] 归档了学期: {semester['semester_name']}, "
|
||||
f"共 {total_students} 名学生"
|
||||
|
||||
Reference in New Issue
Block a user