2026-09-21 17:01:33 +08:00
|
|
|
|
from models.consultant import Consultant
|
|
|
|
|
|
from schemas.consultant import ConsultantCreate, ConsultantUpdate
|
|
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
|
def create_consultant(db:Session, obj_in: ConsultantCreate):
|
|
|
|
|
|
try:
|
|
|
|
|
|
db_obj = Consultant(**obj_in.model_dump())
|
|
|
|
|
|
db.add(db_obj)
|
|
|
|
|
|
except:
|
|
|
|
|
|
db.rollback()
|
|
|
|
|
|
return False
|
|
|
|
|
|
else:
|
|
|
|
|
|
db.commit()
|
|
|
|
|
|
return db_obj
|
|
|
|
|
|
# 查询全部可分页(过滤已删除)
|
|
|
|
|
|
def get_consultant_list(
|
|
|
|
|
|
db: Session,
|
|
|
|
|
|
page: int = 1,
|
|
|
|
|
|
page_size: int = 20,
|
|
|
|
|
|
name: str | None = None,
|
|
|
|
|
|
phone: str | None = None
|
|
|
|
|
|
):
|
|
|
|
|
|
page_size = max(1, min(page_size, 100))
|
|
|
|
|
|
skip = (page - 1) * page_size
|
|
|
|
|
|
|
|
|
|
|
|
query = db.query(Consultant).filter(Consultant.is_deleted == 0)
|
|
|
|
|
|
# 有传参数才追加过滤条件
|
|
|
|
|
|
if name:
|
|
|
|
|
|
query = query.filter(Consultant.consultant_name.like(f"%{name}%"))
|
|
|
|
|
|
if phone:
|
|
|
|
|
|
query = query.filter(Consultant.phone.like(f"%{phone}%"))
|
|
|
|
|
|
|
|
|
|
|
|
total = query.count()
|
|
|
|
|
|
items = query.offset(skip).limit(page_size).all()
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
"items": items,
|
|
|
|
|
|
"total": total,
|
|
|
|
|
|
"page": page,
|
|
|
|
|
|
"page_size": page_size
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 根据id查单条
|
|
|
|
|
|
def get_consultant_by_id(db:Session, cid: int):
|
|
|
|
|
|
return db.query(Consultant).filter(Consultant.id == cid, Consultant.is_deleted == 0 ).first()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 修改
|
|
|
|
|
|
def update_consultant(db: Session, cid: int, update_data: dict):
|
|
|
|
|
|
try:
|
|
|
|
|
|
db_obj = db.query(Consultant).filter(
|
|
|
|
|
|
Consultant.id == cid,
|
|
|
|
|
|
Consultant.is_deleted == 0
|
|
|
|
|
|
).first()
|
|
|
|
|
|
if not db_obj:
|
|
|
|
|
|
return None
|
|
|
|
|
|
# 循环赋值
|
|
|
|
|
|
for k, v in update_data.items():
|
|
|
|
|
|
setattr(db_obj, k, v)
|
|
|
|
|
|
db.commit()
|
|
|
|
|
|
db.refresh(db_obj) # 刷新从数据库拿最新数据(updated_at)
|
|
|
|
|
|
return db_obj
|
|
|
|
|
|
except Exception:
|
|
|
|
|
|
db.rollback()
|
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 逻辑删除(只改is_deleted=1)
|
|
|
|
|
|
def delete_consultant(db:Session, cid: int):
|
|
|
|
|
|
try:
|
|
|
|
|
|
db_obj = get_consultant_by_id(db, cid)
|
|
|
|
|
|
if not db_obj:
|
|
|
|
|
|
return None
|
|
|
|
|
|
db_obj.is_deleted = 1
|
|
|
|
|
|
except:
|
|
|
|
|
|
db.rollback()
|
|
|
|
|
|
return None
|
|
|
|
|
|
else:
|
|
|
|
|
|
db.commit()
|
|
|
|
|
|
return db_obj
|