feat: 优化一下mlogbdefect的代码结构
This commit is contained in:
parent
fd26a65966
commit
330d44e2a3
|
@ -377,20 +377,20 @@ class Mlogb(BaseModel):
|
|||
|
||||
@property
|
||||
def cal_count_pn_jgqbl(self):
|
||||
mqs = MlogbDefect.objects.filter(mlogb=self, material_in___isnull=False)
|
||||
mqs = MlogbDefect.get_defect_qs_from_mlogb(self, ftype="in")
|
||||
count_pn_jgqbl = mqs.aggregate(total=Sum("count"))["total"] or 0
|
||||
self.count_pn_jgqbl = count_pn_jgqbl
|
||||
self.count_real = self.count_use - self.count_pn_jgqbl
|
||||
self.save(update_fields=["count_pn_jgqbl", "count_real"])
|
||||
mlog = self.mlog
|
||||
if mlog:
|
||||
count_pn_jgqbl = MlogbDefect.objects.filter(mlogb__mlog=mlog, material_in___isnull=False).aggregate(total=Sum("count"))["total"] or 0
|
||||
count_pn_jgqbl = MlogbDefect.get_defect_qs_from_mlog(mlog, ftype="in").aggregate(total=Sum("count"))["total"] or 0
|
||||
mlog.count_pn_jgqbl = count_pn_jgqbl
|
||||
mlog.count_real = self.count_use - count_pn_jgqbl
|
||||
mlog.save(update_fields=["count_pn_jgqbl", "count_real"])
|
||||
|
||||
def cal_count_notok(self):
|
||||
mqs = MlogbDefect.objects.filter(mlogb=self, material_out___isnull=False)
|
||||
mqs = MlogbDefect.get_defect_qs_from_mlogb(self, ftype="out")
|
||||
count_notok = mqs.filter(defect__okcate=30).aggregate(total=Sum("count"))["total"] or 0
|
||||
count_notok_full = mqs.exclude(defect__okcate=10).aggregate(total=Sum("count"))["total"] or 0
|
||||
self.count_notok = count_notok
|
||||
|
@ -399,8 +399,9 @@ class Mlogb(BaseModel):
|
|||
self.save(update_fields=["count_ok", "count_notok", "count_ok_full"])
|
||||
mlog = self.mlog
|
||||
if mlog:
|
||||
count_notok = MlogbDefect.objects.filter(defect__okcate=30, mlogb__mlog=mlog, material_out___isnull=False).aggregate(total=Sum("count"))["total"] or 0
|
||||
count_notok_full = MlogbDefect.objects.filter(mlogb__mlog=mlog, material_out___isnull=False).exclude(defect__okcate=10).aggregate(total=Sum("count"))["total"] or 0
|
||||
mqs2 = MlogbDefect.get_defect_qs_from_mlog(mlog, "out")
|
||||
count_notok = mqs2.aggregate(total=Sum("count"))["total"] or 0
|
||||
count_notok_full = mqs2.exclude(defect__okcate=10).aggregate(total=Sum("count"))["total"] or 0
|
||||
mlog.count_ok_full = self.count_real - count_notok_full
|
||||
mlog.count_notok = count_notok
|
||||
mlog.count_ok = self.count_real - count_notok
|
||||
|
@ -413,6 +414,23 @@ class MlogbDefect(BaseModel):
|
|||
floor = models.IntegerField("层数", null=True, blank=True)
|
||||
count = models.PositiveIntegerField('数量', default=0)
|
||||
|
||||
@classmethod
|
||||
def get_defect_qs(cls, ftype="all"):
|
||||
qs = MlogbDefect.objects.filter(defect__isnull=False)
|
||||
if ftype == "in":
|
||||
qs = qs.filter(mlogb__material_in__isnull=False)
|
||||
elif ftype == "out":
|
||||
qs = qs.filter(mlogb__material_out__isnull=False)
|
||||
return qs
|
||||
|
||||
@classmethod
|
||||
def get_defect_qs_from_mlogb(cls, mlogb:Mlogb, ftype="all"):
|
||||
return cls.get_defect_qs(ftype).filter(mlogb=mlogb)
|
||||
|
||||
@classmethod
|
||||
def get_defect_qs_from_mlog(cls, mlog:Mlog, ftype="all"):
|
||||
return cls.get_defect_qs(ftype).filter(mlogb__mlog=mlog)
|
||||
|
||||
class Mlogbw(BaseModel):
|
||||
"""TN: 单个产品生产/检验日志
|
||||
"""
|
||||
|
|
|
@ -169,7 +169,7 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
|||
if m_ins.exists():
|
||||
m_ins_list = [(mi.material_in, mi.batch if mi.batch else mi.batch, mi.count_use-mi.count_pn_jgqbl, None, mi) for mi in m_ins.all()]
|
||||
for item in m_ins:
|
||||
mbd_qs = MlogbDefect.objects.filter(mlogb=item, defect__isnull=False)
|
||||
mbd_qs = MlogbDefect.get_defect_qs_from_mlogb(item)
|
||||
for itemx in mbd_qs:
|
||||
if itemx.defect:
|
||||
m_ins_bl_list.append((item.material_in, item.batch, itemx.count, itemx.defect, item))
|
||||
|
@ -240,11 +240,11 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
|||
m_outs_list = [(mo.material_out, mo.batch if mo.batch else mlog.batch, mo.count_ok_full if mo.count_ok_full is not None else mo.count_ok, mlog.count_real_eweight, None, mo) for mo in mlogb_out_qs.all()]
|
||||
if need_store_notok:
|
||||
for item in mlogb_out_qs:
|
||||
mbd_qs = MlogbDefect.objects.filter(mlogb=item)
|
||||
mbd_qs = MlogbDefect.get_defect_qs_from_mlogb(item)
|
||||
if item.qct is not None or mbd_qs.exists():
|
||||
# if item.material_out.tracking == Material.MA_TRACKING_SINGLE:
|
||||
# Mlogbw.cal_count_notok(item)
|
||||
for itemx in MlogbDefect.objects.filter(mlogb=item, defect__isnull=False):
|
||||
for itemx in mbd_qs:
|
||||
m_outs_list.append((item.material_out, item.batch, itemx.count, 0, itemx.defect, item))
|
||||
# # 获取所有主要的不合格项/先暂时保留
|
||||
# bw_qs = Mlogbw.objects.filter(mlogb=item)
|
||||
|
@ -374,11 +374,11 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
|||
for mo in mlogb_out_qs.all()]
|
||||
if stored_notok:
|
||||
for item in mlogb_out_qs:
|
||||
mbd_qs = MlogbDefect.objects.filter(mlogb=item)
|
||||
mbd_qs = MlogbDefect.get_defect_qs_from_mlogb(item)
|
||||
if item.qct is not None or mbd_qs.exists():
|
||||
# if item.material_out.tracking == Material.MA_TRACKING_SINGLE:
|
||||
# Mlogbw.cal_count_notok(item)
|
||||
for itemx in MlogbDefect.objects.filter(mlogb=item):
|
||||
for itemx in mbd_qs:
|
||||
m_outs_list.append((item.material_out, item.batch, itemx.count, 0, itemx.defect, item))
|
||||
# if item.material_out.tracking == Material.MA_TRACKING_SINGLE:
|
||||
# # 获取所有主要的不合格项
|
||||
|
@ -466,7 +466,7 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
|||
for mi in m_ins.all():
|
||||
m_ins_list.append((mi.material_in, mi.batch, mi.count_use-mi.count_pn_jgqbl, None, mi))
|
||||
for item in m_ins:
|
||||
mbd_qs = MlogbDefect.objects.filter(mlogb=item, defect__isnull=False)
|
||||
mbd_qs = MlogbDefect.get_defect_qs_from_mlogb(item)
|
||||
for itemx in mbd_qs:
|
||||
if itemx.defect:
|
||||
m_ins_bl_list.append((item.material_in, item.batch, itemx.count, itemx.defect, item))
|
||||
|
|
Loading…
Reference in New Issue