dingdanquanliucheng/backend/app/repositories/supplier_repository.py
taiyi 9b32afdbb4 为后端全部 86 个 Python 文件添加中文注释
覆盖所有模块:
- api 层:17 个路由文件,每个接口标注用途、参数、返回值、权限
- services 层:18 个服务文件,每个方法标注作用、参数、返回值、调用方
- repositories 层:13 个仓储文件,每个方法标注查询逻辑和被调用方
- schemas 层:11 个请求/响应体文件,每个字段标注业务含义
- core 层:config、security、exceptions、responses、error_codes
- models 层:19 个 ORM 模型类,每个表标注业务含义和关联关系
- scripts:bootstrap_data、smoke_check
- migrations:env.py 和版本迁移文件

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 07:23:33 +08:00

101 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
供应商数据访问层。
负责封装供应商Supplier模型的数据库查询操作
提供供应商的条件筛选、创建、更新、唯一性校验等方法。
被 SupplierService 调用。
"""
from sqlalchemy import select
from sqlalchemy.orm import Session
from backend.app.models.business import Supplier
class SupplierRepository:
"""供应商数据访问层,封装供应商表的数据库操作。
被 SupplierService 调用。
"""
def list_suppliers(self, session: Session, filters: dict) -> list[Supplier]:
"""根据筛选条件查询供应商列表,支持供应商名模糊匹配、类型和状态精确匹配。
:param session: 数据库会话
:param filters: 筛选条件字典,可包含 supplier_name、supplier_type、status 等键
:return: 符合条件的供应商列表,按 id 降序排列
被 SupplierService.list_suppliers 调用。
"""
stmt = select(Supplier).where(Supplier.deleted == 0)
if filters.get("supplier_name"):
stmt = stmt.where(Supplier.supplier_name.contains(filters["supplier_name"]))
if filters.get("supplier_type"):
stmt = stmt.where(Supplier.supplier_type == filters["supplier_type"])
if filters.get("status") is not None:
stmt = stmt.where(Supplier.status == filters["status"])
stmt = stmt.order_by(Supplier.id.desc())
return list(session.execute(stmt).scalars())
def get_supplier_by_name_and_type(
self,
session: Session,
supplier_name: str,
supplier_type: str,
) -> Supplier | None:
"""根据供应商名称和类型精确查找供应商(用于创建时的唯一性校验)。
:param session: 数据库会话
:param supplier_name: 供应商名称
:param supplier_type: 供应商类型
:return: 匹配的供应商对象,不存在则返回 None
被 SupplierService.create_supplier 调用,用于校验同名同类型供应商是否已存在。
"""
stmt = select(Supplier).where(
Supplier.supplier_name == supplier_name,
Supplier.supplier_type == supplier_type,
Supplier.deleted == 0,
)
return session.execute(stmt).scalar_one_or_none()
def create_supplier(self, session: Session, payload: dict) -> Supplier:
"""创建新的供应商记录。
:param session: 数据库会话
:param payload: 供应商字段字典
:return: 新创建的供应商对象(含自增 ID
被 SupplierService.create_supplier 调用。
"""
supplier = Supplier(**payload)
session.add(supplier)
session.flush()
return supplier
def get_supplier(self, session: Session, supplier_id: int) -> Supplier | None:
"""根据 ID 获取单个供应商详情。
:param session: 数据库会话
:param supplier_id: 供应商主键 ID
:return: 供应商对象,不存在则返回 None
被 SupplierService.get_supplier 调用。
"""
stmt = select(Supplier).where(Supplier.id == supplier_id, Supplier.deleted == 0)
return session.execute(stmt).scalar_one_or_none()
def update_supplier(self, session: Session, supplier: Supplier, payload: dict) -> Supplier:
"""更新已有供应商的字段信息(动态赋值,跳过值为 None 的字段)。
:param session: 数据库会话
:param supplier: 待更新的供应商对象
:param payload: 更新字段字典
:return: 更新后的供应商对象
被 SupplierService.update_supplier 调用。
"""
for key, value in payload.items():
if hasattr(supplier, key) and value is not None:
setattr(supplier, key, value)
session.add(supplier)
session.flush()
return supplier