fix: batchst恢复成batch单一校验

This commit is contained in:
caoqianming 2025-04-25 23:41:59 +08:00
parent c8d05bed68
commit cdb9083def
2 changed files with 23 additions and 13 deletions

View File

@ -247,10 +247,8 @@ class InmService:
BatchLog.clear(mio=instance)
else:
for item in MIOItem.objects.filter(mio=instance):
if item.mb: # 说明录入到已有批次
BatchSt.g_create(batch=item.batch)
else:
BatchSt.g_create(batch=item.batch, mio=instance, material_start=item.material)
BatchSt.g_create(
batch=item.batch, mio=instance, material_start=item.material, reuse_node=True)
from apps.pum.services import PumService
if is_reverse:
cls.update_mb(instance, -1)
@ -262,10 +260,8 @@ class InmService:
BatchLog.clear(mio=instance)
else:
for item in MIOItem.objects.filter(mio=instance):
if item.mb:
BatchSt.g_create(batch=item.batch)
else:
BatchSt.g_create(batch=item.batch, mio=instance, material_start=item.material)
BatchSt.g_create(
batch=item.batch, mio=instance, material_start=item.material, reuse_node=True)
if is_reverse:
cls.update_mb(instance, -1)
else:

View File

@ -616,18 +616,32 @@ class BatchSt(BaseModel):
unique_together = [("batch", "version")]
@classmethod
def g_create(cls, batch:str, mio=None, handover=None, mlog=None, material_start=None):
def g_create(cls, batch:str, mio=None, handover=None, mlog=None, material_start=None, reuse_node=False):
"""
创建新的批次
"""
if mio is None and handover is None and mlog is None:
return cls.objects.get_or_create(batch=batch, version=1)
try:
node = cls.objects.get(batch=batch)
except cls.DoesNotExist:
return cls.objects.create(batch=batch), True
except cls.MultipleObjectsReturned:
# 兼容性处理
node = cls.objects.filter(batch=batch).order_by('-version').first()
return node, False
else:
version = 1
# 带有来源的批次获取,需检查批次号是否可用
if cls.objects.filter(batch=batch, version=1).exists():
latest_version = BatchSt.objects.filter(batch=batch).aggregate(Max("version"))["version__max"]
version = latest_version + 1
if cls.objects.filter(batch=batch).exists():
if reuse_node:
node = cls.objects.filter(batch=batch).order_by('-version').first()
if node.material_start is not None and node.material_start != material_start:
raise ParseError(f"{batch}-该批次号因物料不同不可引用")
return node, False
else:
raise ParseError(f"{batch}-该批次号不可使用")
# latest_version = BatchSt.objects.filter(batch=batch).aggregate(Max("version"))["version__max"]
# version = latest_version + 1
if mio is None and handover is None and mlog is None:
raise ParseError("mio or handover or mlog must be provided")
ins = cls.objects.create(batch=batch, mio=mio, handover=handover, mlog=mlog, material_start=material_start, version=version)