修复:收紧入库数据范围校验
This commit is contained in:
@@ -51,6 +51,15 @@ class OperationDao:
|
||||
conditions.append(column < end_at)
|
||||
return conditions
|
||||
|
||||
@staticmethod
|
||||
def _inbound_scope_conditions(
|
||||
warehouse_ids: list[int] | None,
|
||||
) -> list[ColumnElement[bool]]:
|
||||
if warehouse_ids is None:
|
||||
return []
|
||||
scoped_warehouse_ids = sorted(set(warehouse_ids))
|
||||
return [BizInboundOrder.warehouse_id.in_(scoped_warehouse_ids) if scoped_warehouse_ids else false()]
|
||||
|
||||
@staticmethod
|
||||
async def _paginate(
|
||||
db: AsyncSession,
|
||||
@@ -98,8 +107,9 @@ class OperationDao:
|
||||
model: type[Any],
|
||||
id_column: InstrumentedAttribute,
|
||||
record_id: int,
|
||||
*extra_conditions: ColumnElement[bool],
|
||||
) -> Any | None:
|
||||
result = await db.execute(select(model).where(id_column == record_id))
|
||||
result = await db.execute(select(model).where(id_column == record_id, *extra_conditions))
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
@classmethod
|
||||
@@ -112,8 +122,15 @@ class OperationDao:
|
||||
item_model: type[Any],
|
||||
item_order_id_column: InstrumentedAttribute,
|
||||
item_id_column: InstrumentedAttribute,
|
||||
*order_conditions: ColumnElement[bool],
|
||||
) -> Any | None:
|
||||
order = await cls._get_by_id(db, order_model, order_id_column, order_id)
|
||||
order = await cls._get_by_id(
|
||||
db,
|
||||
order_model,
|
||||
order_id_column,
|
||||
order_id,
|
||||
*order_conditions,
|
||||
)
|
||||
if order is None:
|
||||
return None
|
||||
|
||||
@@ -185,12 +202,14 @@ class OperationDao:
|
||||
cls,
|
||||
db: AsyncSession,
|
||||
inbound_id: int,
|
||||
warehouse_ids: list[int] | None = None,
|
||||
) -> BizInboundOrder | None:
|
||||
inbound = await cls._get_for_update(
|
||||
db,
|
||||
BizInboundOrder,
|
||||
BizInboundOrder.inbound_id,
|
||||
inbound_id,
|
||||
*cls._inbound_scope_conditions(warehouse_ids),
|
||||
)
|
||||
if inbound is None:
|
||||
return None
|
||||
@@ -336,12 +355,7 @@ class OperationDao:
|
||||
is_page: bool = True,
|
||||
warehouse_ids: list[int] | None = None,
|
||||
) -> PageModel | list[dict[str, Any]]:
|
||||
conditions = []
|
||||
if warehouse_ids is not None:
|
||||
scoped_warehouse_ids = sorted(set(warehouse_ids))
|
||||
conditions.append(
|
||||
BizInboundOrder.warehouse_id.in_(scoped_warehouse_ids) if scoped_warehouse_ids else false()
|
||||
)
|
||||
conditions = cls._inbound_scope_conditions(warehouse_ids)
|
||||
if query_object.inbound_no:
|
||||
conditions.append(BizInboundOrder.inbound_no.like(f'%{query_object.inbound_no}%'))
|
||||
if query_object.warehouse_id:
|
||||
@@ -363,6 +377,7 @@ class OperationDao:
|
||||
cls,
|
||||
db: AsyncSession,
|
||||
inbound_id: int,
|
||||
warehouse_ids: list[int] | None = None,
|
||||
) -> BizInboundOrder | None:
|
||||
return await cls._get_order_detail(
|
||||
db,
|
||||
@@ -372,6 +387,7 @@ class OperationDao:
|
||||
BizInboundItem,
|
||||
BizInboundItem.inbound_id,
|
||||
BizInboundItem.inbound_item_id,
|
||||
*cls._inbound_scope_conditions(warehouse_ids),
|
||||
)
|
||||
|
||||
@classmethod
|
||||
|
||||
Reference in New Issue
Block a user