修复:统一发货路由错误隐藏

This commit is contained in:
焦龙言
2026-07-26 20:26:59 +08:00
parent dc28cf6df0
commit 3076194328
2 changed files with 229 additions and 22 deletions
@@ -663,16 +663,15 @@ class ShipmentService:
hidden_site_ids: set[int],
require_active: bool,
) -> None:
warehouses: dict[int, Any] = {}
warehouse_permission_errors: dict[int, PermissionException] = {}
for warehouse_id in sorted(warehouse_ids):
warehouse = await MasterDao.get_warehouse(
query_db,
warehouse_id,
for_update=True,
)
if warehouse is None:
raise ServiceException(message='来源仓库不存在')
if require_active and warehouse.status != '0':
raise ServiceException(message='来源仓库已停用')
warehouses[warehouse_id] = warehouse
try:
await AccessService.assert_warehouse_access(
query_db,
@@ -680,21 +679,18 @@ class ShipmentService:
warehouse_id,
for_update=True,
)
except PermissionException:
if warehouse_id in hidden_warehouse_ids:
cls._raise_shipment_not_accessible(current_user)
raise
except PermissionException as exc:
warehouse_permission_errors[warehouse_id] = exc
sites: dict[int, Any] = {}
site_permission_errors: dict[int, PermissionException] = {}
for site_id in sorted(site_ids):
site = await MasterDao.get_site(
query_db,
site_id,
for_update=True,
)
if site is None:
raise ServiceException(message='目标现场不存在')
if require_active and site.status != '0':
raise ServiceException(message='目标现场已停用')
sites[site_id] = site
try:
await AccessService.assert_site_access(
query_db,
@@ -702,10 +698,33 @@ class ShipmentService:
site_id,
for_update=True,
)
except PermissionException:
if site_id in hidden_site_ids:
cls._raise_shipment_not_accessible(current_user)
raise
except PermissionException as exc:
site_permission_errors[site_id] = exc
if hidden_warehouse_ids & warehouse_permission_errors.keys() or (
hidden_site_ids & site_permission_errors.keys()
):
cls._raise_shipment_not_accessible(current_user)
explicit_permission_errors = [
warehouse_permission_errors[warehouse_id] for warehouse_id in sorted(warehouse_permission_errors)
]
explicit_permission_errors.extend(site_permission_errors[site_id] for site_id in sorted(site_permission_errors))
if explicit_permission_errors:
raise explicit_permission_errors[0]
for warehouse_id in sorted(warehouses):
warehouse = warehouses[warehouse_id]
if warehouse is None:
raise ServiceException(message='来源仓库不存在')
if require_active and warehouse.status != '0':
raise ServiceException(message='来源仓库已停用')
for site_id in sorted(sites):
site = sites[site_id]
if site is None:
raise ServiceException(message='目标现场不存在')
if require_active and site.status != '0':
raise ServiceException(message='目标现场已停用')
@classmethod
async def _lock_and_reauthorize_route(