修复:统一退回锁序并避免提交后访问

This commit is contained in:
焦龙言
2026-07-27 00:49:29 +08:00
parent 80c2288122
commit c9180b3832
2 changed files with 121 additions and 13 deletions
@@ -533,6 +533,16 @@ class ReturnService:
page_object: ReturnRequestModel,
current_user: CurrentUserModel,
) -> None:
warehouse = await MasterDao.get_warehouse(
query_db,
page_object.target_warehouse_id,
for_update=True,
)
if warehouse is None:
raise ServiceException(message='目标仓库不存在')
if warehouse.status != '0':
raise ServiceException(message='目标仓库已停用')
site = await MasterDao.get_site(query_db, page_object.source_site_id, for_update=True)
await AccessService.assert_site_access(
query_db,
@@ -545,16 +555,6 @@ class ReturnService:
if site.status != '0':
raise ServiceException(message='来源客户现场已停用')
warehouse = await MasterDao.get_warehouse(
query_db,
page_object.target_warehouse_id,
for_update=True,
)
if warehouse is None:
raise ServiceException(message='目标仓库不存在')
if warehouse.status != '0':
raise ServiceException(message='目标仓库已停用')
@classmethod
async def _lock_and_reauthorize_request_site(
cls,
@@ -733,9 +733,10 @@ class ReturnService:
update_time=current_time,
)
return_order = await OperationDao.add_return_order(query_db, return_order)
return_id = int(return_order.return_id)
await OperationDao.add_return_items(
query_db,
cls._build_return_items(return_order.return_id, inventories, user_name, current_time),
cls._build_return_items(return_id, inventories, user_name, current_time),
)
for inventory in inventories:
@@ -751,7 +752,7 @@ class ReturnService:
pallet_id=inventory.pallet_id,
event_type=PalletEventType.RETURN_REQUESTED.value,
source_type='RETURN',
source_id=return_order.return_id,
source_id=return_id,
before_state=before_state,
after_state=PalletFlowState.RETURNING.value,
before_warehouse_id=before_warehouse_id,
@@ -770,7 +771,7 @@ class ReturnService:
await InventoryDao.add_event(query_db, inventory, event)
await query_db.commit()
return cls._success('申请成功', return_order.return_id)
return cls._success('申请成功', return_id)
except IntegrityError:
await query_db.rollback()
return await cls._recover_request_integrity_error(