fix: mlog 的cal_count_notok_full的bug 4
This commit is contained in:
parent
519672ef3f
commit
53c9afbca9
|
@ -311,6 +311,40 @@ class Mlog(CommonADModel):
|
|||
mlog_count_fields.remove("count_ok_full")
|
||||
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):
|
||||
"""TN: 子级生产/检验日志操作人"""
|
||||
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"])
|
||||
mlog = self.mlog
|
||||
if mlog:
|
||||
mqs2 = MlogbDefect.get_defect_qs_from_mlog(mlog, "out")
|
||||
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"])
|
||||
mlog.cal_mlog_count_from_mlogb()
|
||||
|
||||
class MlogbDefect(BaseModel):
|
||||
"""TN: 生成记录的缺陷记录"""
|
||||
|
|
|
@ -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))
|
||||
ana_batch_thread(xbatches)
|
||||
|
||||
def cal_mtask_progress_from_mlog(mlog):
|
||||
def cal_mtask_progress_from_mlog(mlog:Mlog):
|
||||
"""
|
||||
更新mlog关联的任务进度(可线程中执行)
|
||||
"""
|
||||
if mlog.fill_way in [Mlog.MLOG_2, Mlog.MLOG_12] and mlog.mtask:
|
||||
update_mtask(mlog.mtask, fill_way=mlog.fill_way)
|
||||
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)
|
||||
caled_mtask = []
|
||||
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)
|
||||
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):
|
||||
"""
|
||||
更新mlog关联的物料数量(可单独执行)
|
||||
|
|
Loading…
Reference in New Issue