第四版_完整
This commit is contained in:
+5
-4
@@ -1,6 +1,6 @@
|
||||
# dao/cls_mgmt_dao.py
|
||||
# 本文件封装对 ClsMgmt 表的所有数据库操作(增、删、改、查)
|
||||
|
||||
from fastapi import HTTPException
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from model.cls_mgmt_model import ClsMgmt
|
||||
@@ -19,7 +19,7 @@ class ClsMgmtDAO:
|
||||
:param limit: 最大返回条数
|
||||
:return: 用户对象列表
|
||||
"""
|
||||
return db.query(ClsMgmt).offset(skip).limit(limit).all()
|
||||
return db.query(ClsMgmt).filter(ClsMgmt.is_deleted == 0).offset(skip).limit(limit).all()
|
||||
|
||||
# -> Optional[ClsMgmt]
|
||||
# @staticmethod
|
||||
@@ -36,7 +36,7 @@ class ClsMgmtDAO:
|
||||
根据主键 ID 获取单个班级
|
||||
:return: 班级对象或 None
|
||||
"""
|
||||
return db.query(ClsMgmt).filter(ClsMgmt.id == class_id).first()
|
||||
return db.query(ClsMgmt).filter(ClsMgmt.id == class_id,ClsMgmt.is_deleted == 0).first()
|
||||
|
||||
|
||||
|
||||
@@ -115,7 +115,8 @@ class ClsMgmtDAO:
|
||||
update_cls.lecturer_id=cls_data.lecturer_id
|
||||
db.commit()
|
||||
return update_cls
|
||||
return f"班级{class_id}不存在"
|
||||
|
||||
raise HTTPException(status_code=404, detail=f"班级{class_id}不存在")
|
||||
|
||||
|
||||
|
||||
|
||||
+5
-6
@@ -7,8 +7,7 @@ from sqlalchemy.orm import Session
|
||||
from model.employ_model import StudentEmployManage as ETable
|
||||
from scheme.employ_scheme import EmployStatusCreate as EModel, EmployStatusQuery as QModel,EmployStatusDelete as DModel
|
||||
from model.stu_model import StuInfo
|
||||
|
||||
from typing import Optional, List
|
||||
from typing import List
|
||||
class StudentEmployManageDAO:
|
||||
"""
|
||||
封装stu_emp_mgmt 表的所有数据库操作(增、删、改、查)
|
||||
@@ -197,13 +196,13 @@ class StudentEmployManageDAO:
|
||||
:return: 返回查询到的 所有 学生就业信息
|
||||
"""
|
||||
e_all = db.query(ETable)
|
||||
if emp_sta_query.stu_id: # 根据 学生编号 筛选出 学生就业信息
|
||||
if emp_sta_query.stu_id is not None: # 根据 学生编号 筛选出 学生就业信息
|
||||
e_all = e_all.filter(ETable.stu_id == emp_sta_query.stu_id)
|
||||
if emp_sta_query.emp_company: # 根据 就业公司名称 模糊筛选出 学生就业信息
|
||||
if emp_sta_query.emp_company is not None: # 根据 就业公司名称 模糊筛选出 学生就业信息
|
||||
e_all = e_all.filter(ETable.emp_company.like(f"%{emp_sta_query.emp_company}%"))
|
||||
if emp_sta_query.min_salary: # 根据 最小薪资范围 筛选出 大于 最小薪资范围的 学生就业信息
|
||||
if emp_sta_query.min_salary is not None: # 根据 最小薪资范围 筛选出 大于 最小薪资范围的 学生就业信息
|
||||
e_all = e_all.filter(ETable.salary >= emp_sta_query.min_salary)
|
||||
if emp_sta_query.max_salary: # 根据 最大薪资范围 筛选出 小于 最大薪资范围的 学生就业信息
|
||||
if emp_sta_query.max_salary is not None: # 根据 最大薪资范围 筛选出 小于 最大薪资范围的 学生就业信息
|
||||
e_all = e_all.filter(ETable.salary <= emp_sta_query.max_salary)
|
||||
|
||||
total = e_all.count()
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
# 本文件封装对 所有相关表的 所有数据库操作(统计查询)
|
||||
from collections import defaultdict
|
||||
|
||||
from fastapi.openapi.utils import status_code_ranges
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
from sqlalchemy.orm import Session, joinedload
|
||||
from sqlalchemy import func, case, and_, join, asc, desc
|
||||
|
||||
@@ -9,7 +11,7 @@ from model import StudentEmployManage
|
||||
from model.stu_model import StuInfo
|
||||
from model.stu_score_model import StuScore
|
||||
from typing import Optional, List, Dict
|
||||
from scheme.statistics_scheme import StatsResponse, ExamScoreItem, StuInfoAllExamAboveScore, FailingStudentItem, \
|
||||
from scheme.statistics_scheme import ClassGenderDistributionItem, ExamScoreItem, StuInfoAllExamAboveScore, FailingStudentItem, \
|
||||
ClassExamAvgScoreItem, TopSalaryStudentItem, StudentEmpDurationItem, ClassAvgEmpDurationItem, StudentAgeDetailItem
|
||||
|
||||
|
||||
@@ -17,7 +19,7 @@ class StatisticsDao:
|
||||
"""用户数据访问对象,所有方法均为静态方法,方便调用"""
|
||||
|
||||
@staticmethod
|
||||
def get_cls_stats(db: Session) -> List[StatsResponse]:
|
||||
def get_class_gender_distribution(db: Session) -> List[ClassGenderDistributionItem]:
|
||||
|
||||
all_cls_gender_stats = (
|
||||
db.query(
|
||||
@@ -31,7 +33,7 @@ class StatisticsDao:
|
||||
)
|
||||
|
||||
return [
|
||||
StatsResponse(
|
||||
ClassGenderDistributionItem(
|
||||
cls_id=i.cls_id,
|
||||
total_cnt=i.total_cnt,
|
||||
man_cnt=i.man_cnt,
|
||||
@@ -96,6 +98,10 @@ class StatisticsDao:
|
||||
|
||||
@staticmethod
|
||||
def find_students_fail_count(db: Session, fail_cnt: int) -> List[FailingStudentItem]:
|
||||
test_max_cnt = len(db.query(StuScore.exam_attempt).group_by(StuScore.exam_attempt).all())
|
||||
if fail_cnt > test_max_cnt:
|
||||
raise HTTPException(status_code = 400, detail = f'最大次数为{test_max_cnt}')
|
||||
|
||||
stu_fail_dict = StatisticsDao.get_stu_dict_who_fail(db)
|
||||
ans = []
|
||||
|
||||
|
||||
+2
-2
@@ -61,9 +61,9 @@ class TeacherDao:
|
||||
:return: 创建后的 teacher 对象(含id )
|
||||
"""
|
||||
|
||||
# 教师id自动生成 格式:T+随机四位数 并进行重复验证
|
||||
# 教师id自动生成 格式:t+随机三位数 并进行重复验证
|
||||
while True:
|
||||
new_id = f"T{random.randint(100, 999)}" # 确保是4位数,不会出现 0012 这种情况
|
||||
new_id = f"t{random.randint(100, 999)}" # 确保是3位数,不会出现 002 这种情况
|
||||
|
||||
# 查询数据库是否已存在这个 id
|
||||
exists = db.query(Teacher).filter(Teacher.id == new_id).first()
|
||||
|
||||
Reference in New Issue
Block a user