feat: 批次关系链时创建新批次支持使用已有批次号
This commit is contained in:
parent
ea00a38406
commit
f22ba2752f
|
@ -12,6 +12,7 @@ from django.utils.translation import gettext_lazy as _
|
||||||
from rest_framework.exceptions import ParseError
|
from rest_framework.exceptions import ParseError
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
from django.db.models import Max
|
||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
class SfLog(CommonADModel):
|
class SfLog(CommonADModel):
|
||||||
|
@ -599,7 +600,8 @@ class BatchSt(BaseModel):
|
||||||
"""
|
"""
|
||||||
TN: 产品批次统计
|
TN: 产品批次统计
|
||||||
"""
|
"""
|
||||||
batch = models.TextField("批次号", unique=True, db_index=True)
|
batch = models.TextField("批次号", db_index=True)
|
||||||
|
version = models.IntegerField("版本号", default=1, db_index=True)
|
||||||
last_time = models.DateTimeField("最后操作时间", null=True, blank=True)
|
last_time = models.DateTimeField("最后操作时间", null=True, blank=True)
|
||||||
data = models.JSONField("数据", default=list, blank=True)
|
data = models.JSONField("数据", default=list, blank=True)
|
||||||
material_start = models.ForeignKey(Material, verbose_name="起始物料", on_delete=models.SET_NULL, null=True, blank=True)
|
material_start = models.ForeignKey(Material, verbose_name="起始物料", on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
|
@ -607,22 +609,26 @@ class BatchSt(BaseModel):
|
||||||
handover = models.ForeignKey(Handover, verbose_name='由何交接记录创建', on_delete=models.CASCADE, null=True, blank=True)
|
handover = models.ForeignKey(Handover, verbose_name='由何交接记录创建', on_delete=models.CASCADE, null=True, blank=True)
|
||||||
mlog = models.ForeignKey(Mlog, verbose_name='由何日志创建', on_delete=models.CASCADE, null=True, blank=True)
|
mlog = models.ForeignKey(Mlog, verbose_name='由何日志创建', on_delete=models.CASCADE, null=True, blank=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
unique_together = [("batch", "version")]
|
||||||
|
|
||||||
@classmethod
|
@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):
|
||||||
"""
|
"""
|
||||||
创建新的批次
|
创建新的批次
|
||||||
"""
|
"""
|
||||||
if mio is None and handover is None and mlog is None and material_start is None:
|
if mio is None and handover is None and mlog is None:
|
||||||
return cls.objects.get_or_create(batch=batch)
|
return cls.objects.get_or_create(batch=batch)
|
||||||
else:
|
else:
|
||||||
|
latest_version = 0
|
||||||
# 带有来源的批次获取,需检查批次号是否可用
|
# 带有来源的批次获取,需检查批次号是否可用
|
||||||
if cls.objects.filter(batch=batch).exists():
|
if cls.objects.filter(batch=batch, version=0).exists():
|
||||||
raise ParseError(f"{batch}-该批次号不可用")
|
latest_version = BatchSt.objects.filter(batch=batch).aggregate(Max("version"))["version__max"]
|
||||||
if mio is None and handover is None and mlog is None:
|
if mio is None and handover is None and mlog is None:
|
||||||
raise ParseError("mio or handover or mlog must be provided")
|
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)
|
ins = cls.objects.create(batch=batch, mio=mio, handover=handover, mlog=mlog, material_start=material_start, version=latest_version+1)
|
||||||
return ins, True
|
return ins, True
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def init_dag(cls, batch:str):
|
def init_dag(cls, batch:str):
|
||||||
|
|
Loading…
Reference in New Issue