fix: mlog 的cal_count_notok_full的bug 4

This commit is contained in:
caoqianming 2025-06-06 17:11:00 +08:00
parent 519672ef3f
commit 53c9afbca9
2 changed files with 37 additions and 44 deletions

View File

@ -311,6 +311,40 @@ class Mlog(CommonADModel):
mlog_count_fields.remove("count_ok_full") mlog_count_fields.remove("count_ok_full")
return mlog_count_fields return mlog_count_fields
def cal_mlog_count_from_mlogb(self):
"""
通过mlogb计算mlog count 合计
"""
mlog = self
if mlog.fill_way == Mlog.MLOG_23:
a_dict = {
"total_count_use": Sum('count_use'),
"total_count_break": Sum('count_break'),
"total_count_break_t": Sum('count_break_t'),
"total_count_real": Sum('count_real'),
"total_count_ok": Sum('count_ok'),
"total_count_ok_full": Sum('count_ok_full'),
"total_count_notok": Sum('count_notok'),
}
f_names = [f.name for f in Mlogb._meta.fields if 'count_n_' in f.name]
for f in f_names:
a_dict[f'total_{f}'] = Sum(f)
mlogb_summary = Mlogb.objects.filter(mlog=mlog, need_inout=True).aggregate(
**a_dict
)
# 更新Mlog对象的相应字段
mlog.count_use = mlogb_summary['total_count_use'] or 0
mlog.count_break = mlogb_summary['total_count_break'] or 0
mlog.count_break_t = mlogb_summary['total_count_break_t'] or 0
mlog.count_real = mlogb_summary['total_count_real'] or 0
mlog.count_ok = mlogb_summary['total_count_ok'] or 0
mlog.count_ok_full = mlogb_summary['total_count_ok_full'] or 0
mlog.count_notok = mlogb_summary['total_count_notok'] or 0
for f in f_names:
setattr(mlog, f, mlogb_summary[f'total_{f}'] or 0)
# 保存更新后的Mlog对象
mlog.save()
class MlogUser(BaseModel): class MlogUser(BaseModel):
"""TN: 子级生产/检验日志操作人""" """TN: 子级生产/检验日志操作人"""
mlog = models.ForeignKey(Mlog, verbose_name='关联日志', on_delete=models.CASCADE) mlog = models.ForeignKey(Mlog, verbose_name='关联日志', on_delete=models.CASCADE)
@ -422,15 +456,7 @@ class Mlogb(BaseModel):
self.save(update_fields=["count_ok", "count_notok", "count_ok_full"]) self.save(update_fields=["count_ok", "count_notok", "count_ok_full"])
mlog = self.mlog mlog = self.mlog
if mlog: if mlog:
mqs2 = MlogbDefect.get_defect_qs_from_mlog(mlog, "out") mlog.cal_mlog_count_from_mlogb()
count_notok = mqs2.filter(defect__okcate=30).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
if mlog.count_ok_full < 0:
raise ParseError("完全合格数不能小于0")
mlog.count_notok = count_notok
mlog.count_ok = self.count_real - count_notok
mlog.save(update_fields=["count_ok", "count_notok", "count_ok_full"])
class MlogbDefect(BaseModel): class MlogbDefect(BaseModel):
"""TN: 生成记录的缺陷记录""" """TN: 生成记录的缺陷记录"""

View File

@ -595,14 +595,14 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
xbatches = list(Mlogb.objects.filter(mlog=mlog).values_list('batch', flat=True)) xbatches = list(Mlogb.objects.filter(mlog=mlog).values_list('batch', flat=True))
ana_batch_thread(xbatches) ana_batch_thread(xbatches)
def cal_mtask_progress_from_mlog(mlog): def cal_mtask_progress_from_mlog(mlog:Mlog):
""" """
更新mlog关联的任务进度(可线程中执行) 更新mlog关联的任务进度(可线程中执行)
""" """
if mlog.fill_way in [Mlog.MLOG_2, Mlog.MLOG_12] and mlog.mtask: if mlog.fill_way in [Mlog.MLOG_2, Mlog.MLOG_12] and mlog.mtask:
update_mtask(mlog.mtask, fill_way=mlog.fill_way) update_mtask(mlog.mtask, fill_way=mlog.fill_way)
elif mlog.fill_way == Mlog.MLOG_23: elif mlog.fill_way == Mlog.MLOG_23:
cal_mlog_count_from_mlogb(mlog) mlog.cal_mlog_count_from_mlogb()
m_outs_qs = Mlogb.objects.filter(mlog=mlog, material_out__isnull=False) m_outs_qs = Mlogb.objects.filter(mlog=mlog, material_out__isnull=False)
caled_mtask = [] caled_mtask = []
for item in m_outs_qs.all(): for item in m_outs_qs.all():
@ -613,39 +613,6 @@ def cal_mtask_progress_from_mlog(mlog):
update_mtask(mtask, fill_way=mlog.fill_way) update_mtask(mtask, fill_way=mlog.fill_way)
caled_mtask.append(mtask) caled_mtask.append(mtask)
def cal_mlog_count_from_mlogb(mlog: Mlog):
"""
通过mlogb计算mlog count 合计
"""
if mlog.fill_way == Mlog.MLOG_23:
a_dict = {
"total_count_use": Sum('count_use'),
"total_count_break": Sum('count_break'),
"total_count_break_t": Sum('count_break_t'),
"total_count_real": Sum('count_real'),
"total_count_ok": Sum('count_ok'),
"total_count_ok_full": Sum('count_ok_full'),
"total_count_notok": Sum('count_notok'),
}
f_names = [f.name for f in Mlogb._meta.fields if 'count_n_' in f.name]
for f in f_names:
a_dict[f'total_{f}'] = Sum(f)
mlogb_summary = Mlogb.objects.filter(mlog=mlog, need_inout=True).aggregate(
**a_dict
)
# 更新Mlog对象的相应字段
mlog.count_use = mlogb_summary['total_count_use'] or 0
mlog.count_break = mlogb_summary['total_count_break'] or 0
mlog.count_break_t = mlogb_summary['total_count_break_t'] or 0
mlog.count_real = mlogb_summary['total_count_real'] or 0
mlog.count_ok = mlogb_summary['total_count_ok'] or 0
mlog.count_ok_full = mlogb_summary['total_count_ok_full'] or 0
mlog.count_notok = mlogb_summary['total_count_notok'] or 0
for f in f_names:
setattr(mlog, f, mlogb_summary[f'total_{f}'] or 0)
# 保存更新后的Mlog对象
mlog.save()
def cal_material_count_from_mlog(mlog: Mlog): def cal_material_count_from_mlog(mlog: Mlog):
""" """
更新mlog关联的物料数量(可单独执行) 更新mlog关联的物料数量(可单独执行)