invoice_repo.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # @description:
  2. # @author: licanglong
  3. # @date: 2025/12/22 20:16
  4. from sqlalchemy import select
  5. from sqlalchemy.orm import Session
  6. from app.models.dto import InvoicePurchaseDetailDTO, InvoicePurchaseDetailList
  7. from app.models.entity import InvoicePurchaseDetail
  8. class InvoiceRepository:
  9. def __init__(self, session: Session):
  10. self.session = session
  11. async def list_by_taxid(self, tax_id: str) -> InvoicePurchaseDetailList:
  12. stmt = select(InvoicePurchaseDetail).where(InvoicePurchaseDetail.tax_id == tax_id).limit(10)
  13. stmt_result = self.session.scalars(stmt).all()
  14. return InvoicePurchaseDetailList(
  15. invoice_purchase_details=[
  16. InvoicePurchaseDetailDTO.model_validate(record)
  17. for record in stmt_result
  18. ]
  19. )
  20. async def list_by_params(self, tax_id: str = None, hwmc: str = None, page_number: int = 1,
  21. page_size: int = 10) -> InvoicePurchaseDetailList:
  22. conditions = []
  23. if tax_id:
  24. conditions.append(InvoicePurchaseDetail.tax_id == tax_id)
  25. if hwmc:
  26. conditions.append(InvoicePurchaseDetail.hwmc.like(f"%{hwmc}%"))
  27. stmt = select(InvoicePurchaseDetail)
  28. if conditions:
  29. stmt = stmt.where(*conditions)
  30. stmt = stmt.offset((page_number - 1) * page_size).limit(page_size)
  31. stmt_result = self.session.scalars(stmt).all()
  32. return InvoicePurchaseDetailList(
  33. invoice_purchase_details=[
  34. InvoicePurchaseDetailDTO.model_validate(record)
  35. for record in stmt_result
  36. ]
  37. )