37 lines
1.8 KiB
Python
37 lines
1.8 KiB
Python
from sqlalchemy import select
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from common.vo import PageModel
|
|
from module_business.dao.operation_dao import OperationDao
|
|
from module_business.domain.test_batch_scope import TestBatchScope
|
|
from module_business.entity.do.operation_do import BizShipmentOrder
|
|
from module_business.entity.vo.shipment_receipt_vo import ShipmentReceiptQueryModel
|
|
from utils.page_util import PageUtil
|
|
|
|
|
|
class ShipmentReceiptDao:
|
|
@staticmethod
|
|
async def list_orders(
|
|
db: AsyncSession, query: ShipmentReceiptQueryModel, scope: TestBatchScope, site_ids: list[int] | None
|
|
) -> PageModel:
|
|
# 接收方只需要目标现场范围,不扩大原发货操作的双范围权限。
|
|
conditions = OperationDao._shipment_scope_conditions(None, site_ids, scope)
|
|
conditions.append(BizShipmentOrder.status == 'CONFIRMED')
|
|
if query.shipment_no:
|
|
conditions.append(BizShipmentOrder.shipment_no.like(f'%{query.shipment_no}%'))
|
|
if query.target_site_id:
|
|
conditions.append(BizShipmentOrder.target_site_id == query.target_site_id)
|
|
if query.source_warehouse_id:
|
|
conditions.append(BizShipmentOrder.source_warehouse_id == query.source_warehouse_id)
|
|
if query.receipt_state:
|
|
conditions.append(BizShipmentOrder.receipt_state == query.receipt_state)
|
|
conditions.extend(
|
|
OperationDao._time_conditions(BizShipmentOrder.confirmed_at, query.begin_time, query.end_time)
|
|
)
|
|
statement = (
|
|
select(BizShipmentOrder)
|
|
.where(*conditions)
|
|
.order_by(BizShipmentOrder.confirmed_at, BizShipmentOrder.shipment_id)
|
|
)
|
|
return await PageUtil.paginate(db, statement, query.page_num, query.page_size, is_page=True)
|