diff --git a/apps/inm/services.py b/apps/inm/services.py index 8de7c4bf..6fb4203c 100644 --- a/apps/inm/services.py +++ b/apps/inm/services.py @@ -463,7 +463,8 @@ class InmService: @classmethod def revert_and_del(cls, mioitem: MIOItem): - mio = mioitem.mio + # 锁定 MIO 行,防止多人同时撤销不同明细时并发漏删 MIO + mio = MIO.objects.select_for_update().get(id=mioitem.mio_id) if mio.submit_time is None: raise ParseError("未提交的出入库明细不允许撤销") if mioitem.test_date is not None: @@ -484,4 +485,7 @@ class InmService: mioitem.delete() else: raise ParseError("不支持该出入库单明细撤销") + # 若该出入库记录已无明细,自动删除 + if not MIOItem.objects.filter(mio=mio).exists(): + mio.delete() \ No newline at end of file