feat: 优化一下mlogbdefect的代码结构

This commit is contained in:
caoqianming 2025-03-07 10:09:49 +08:00
parent fd26a65966
commit 330d44e2a3
2 changed files with 29 additions and 11 deletions

View File

@ -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: 单个产品生产/检验日志
"""

View File

@ -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))