from datetime import datetime from sqlalchemy import select from app.api.v1.module_system.auth.schema import AuthSchema from app.core.base_crud import CRUDBase from .enums import FacetofaceOrderStatus from .model import FacetofaceOrderModel from .schema import FacetofaceApplySchema class FacetofaceCRUD(CRUDBase[FacetofaceOrderModel, FacetofaceApplySchema, FacetofaceApplySchema]): """当面付申请单 CRUD""" def __init__(self, auth: AuthSchema) -> None: self.auth = auth super().__init__(model=FacetofaceOrderModel, auth=auth) async def get_by_batch_no(self, batch_no: str) -> FacetofaceOrderModel | None: return await self.get(batch_no=batch_no) async def get_by_enterprise_id(self, enterprise_id: str) -> FacetofaceOrderModel | None: return await self.get(enterprise_id=enterprise_id) async def get_pending_orders(self) -> list[FacetofaceOrderModel]: """获取需要轮询状态的申请单(next_query_time <= now 且状态为待查询)""" now = datetime.now() pending_statuses = [ FacetofaceOrderStatus.SUBMITTED.value, FacetofaceOrderStatus.MERCHANT_AUDITING.value, FacetofaceOrderStatus.MERCHANT_CONFIRM.value, ] stmt = ( select(FacetofaceOrderModel) .where( FacetofaceOrderModel.order_status.in_(pending_statuses), FacetofaceOrderModel.next_query_time <= now, ) .order_by(FacetofaceOrderModel.next_query_time.asc()) ) result = await self.auth.db.execute(stmt) return list(result.scalars().all())