crud.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from datetime import datetime
  2. from sqlalchemy import select
  3. from app.api.v1.module_system.auth.schema import AuthSchema
  4. from app.core.base_crud import CRUDBase
  5. from .enums import FacetofaceOrderStatus
  6. from .model import FacetofaceOrderModel
  7. from .schema import FacetofaceApplySchema
  8. class FacetofaceCRUD(CRUDBase[FacetofaceOrderModel, FacetofaceApplySchema, FacetofaceApplySchema]):
  9. """当面付申请单 CRUD"""
  10. def __init__(self, auth: AuthSchema) -> None:
  11. self.auth = auth
  12. super().__init__(model=FacetofaceOrderModel, auth=auth)
  13. async def get_by_batch_no(self, batch_no: str) -> FacetofaceOrderModel | None:
  14. return await self.get(batch_no=batch_no)
  15. async def get_by_enterprise_id(self, enterprise_id: str) -> FacetofaceOrderModel | None:
  16. return await self.get(enterprise_id=enterprise_id)
  17. async def get_pending_orders(self) -> list[FacetofaceOrderModel]:
  18. """获取需要轮询状态的申请单(next_query_time <= now 且状态为待查询)"""
  19. now = datetime.now()
  20. pending_statuses = [
  21. FacetofaceOrderStatus.SUBMITTED.value,
  22. FacetofaceOrderStatus.MERCHANT_AUDITING.value,
  23. FacetofaceOrderStatus.MERCHANT_CONFIRM.value,
  24. ]
  25. stmt = (
  26. select(FacetofaceOrderModel)
  27. .where(
  28. FacetofaceOrderModel.order_status.in_(pending_statuses),
  29. FacetofaceOrderModel.next_query_time <= now,
  30. )
  31. .order_by(FacetofaceOrderModel.next_query_time.asc())
  32. )
  33. result = await self.auth.db.execute(stmt)
  34. return list(result.scalars().all())