82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
# ===========================================
|
|
# 班级操行分管理系统 - 后端服务
|
|
#
|
|
# 开发者: Canglan
|
|
# 联系方式: admin@sea-studio.top
|
|
# 版权归属: Sea Network Technology Studio
|
|
# 许可证: MIT License
|
|
#
|
|
# 版权所有 © Sea Network Technology Studio
|
|
# ===========================================
|
|
|
|
from typing import Dict, Any, List, Optional
|
|
|
|
from models.subject import SubjectModel
|
|
from utils.logger import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
class SubjectService:
|
|
"""科目服务"""
|
|
|
|
@staticmethod
|
|
async def get_subjects(is_active: Optional[bool] = None) -> Dict[str, Any]:
|
|
"""获取科目列表"""
|
|
subjects = await SubjectModel.get_all(is_active=is_active)
|
|
|
|
return {
|
|
"subjects": subjects,
|
|
"total": len(subjects)
|
|
}
|
|
|
|
@staticmethod
|
|
async def create_subject(
|
|
subject_name: str,
|
|
subject_code: Optional[str],
|
|
sort_order: int = 0
|
|
) -> Dict[str, Any]:
|
|
"""创建科目"""
|
|
# 检查是否已存在
|
|
existing = await SubjectModel.get_by_name(subject_name)
|
|
if existing:
|
|
return {"success": False, "message": "科目名称已存在"}
|
|
|
|
subject_id = await SubjectModel.create(
|
|
subject_name=subject_name,
|
|
subject_code=subject_code,
|
|
sort_order=sort_order
|
|
)
|
|
|
|
if subject_id:
|
|
logger.info(f"创建科目: {subject_name}")
|
|
return {"success": True, "subject_id": subject_id}
|
|
else:
|
|
return {"success": False, "message": "创建科目失败"}
|
|
|
|
@staticmethod
|
|
async def update_subject(subject_id: int, **kwargs) -> Dict[str, Any]:
|
|
"""更新科目"""
|
|
result = await SubjectModel.update(subject_id, **kwargs)
|
|
|
|
if result:
|
|
logger.info(f"更新科目: {subject_id}")
|
|
return {"success": True}
|
|
else:
|
|
return {"success": False, "message": "更新科目失败"}
|
|
|
|
@staticmethod
|
|
async def delete_subject(subject_id: int) -> Dict[str, Any]:
|
|
"""删除科目(软删除)"""
|
|
# 检查科目是否有关联数据
|
|
has_data = await SubjectModel.has_related_data(subject_id)
|
|
if has_data:
|
|
return {"success": False, "message": "该科目下已有作业数据,无法删除"}
|
|
|
|
result = await SubjectModel.delete(subject_id)
|
|
|
|
if result:
|
|
logger.info(f"禁用科目: {subject_id}")
|
|
return {"success": True}
|
|
else:
|
|
return {"success": False, "message": "禁用科目失败"} |