35 lines
1.0 KiB
Python
35 lines
1.0 KiB
Python
"""客户工单查询仓储。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from sqlalchemy import select
|
|
|
|
from model.biz_work_order import BizWorkOrder
|
|
from repositories.base import BaseRepository
|
|
|
|
|
|
class WorkOrderRepo(BaseRepository):
|
|
"""按客户隔离查询工单状态。"""
|
|
|
|
model = BizWorkOrder
|
|
COMPLETED_STATUSES = ("已完成", "已驳回")
|
|
|
|
async def list_by_customer(
|
|
self, customer_id: int, *, active_only: bool = True, limit: int = 100
|
|
) -> list[BizWorkOrder]:
|
|
"""按更新时间倒序返回指定客户的工单。"""
|
|
conditions = [BizWorkOrder.customer_id == customer_id]
|
|
if active_only:
|
|
conditions.append(BizWorkOrder.status.not_in(self.COMPLETED_STATUSES))
|
|
statement = (
|
|
select(BizWorkOrder)
|
|
.where(*conditions)
|
|
.order_by(BizWorkOrder.update_time.desc(), BizWorkOrder.id.desc())
|
|
.limit(limit)
|
|
)
|
|
return list((await self.db.scalars(statement)).all())
|
|
|
|
|
|
__all__ = ["WorkOrderRepo"]
|
|
|