diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 43d946ff..279e76a1 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -238,8 +238,8 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): # 获取所有主要的不合格项 bw_qs = Mlogbw.objects.filter(mlogb=item) defect_qs = FtestDefect.objects.filter(ftest__is_ok=False, - ftest__mlogbw_ftest__mlogb=item, is_main=True).values_list( - "defect", flat=True).distinct() + ftest__mlogbw_ftest__mlogb=item, is_main=True).values( + "defect").distinct() for defect in defect_qs: xcount = bw_qs.filter(ftest__defects_ftest__defect=defect).count() if xcount > 0: @@ -259,6 +259,8 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): for mo in m_outs_list: mo_ma, mo_batch, mo_count, mo_count_eweight, notok_sign_or_defect, mlog_or_b = mo + if mo_count <= 0: + continue wm_state = WMaterial.WM_OK if notok_sign_or_defect is None else WMaterial.WM_NOTOK lookup = {'batch': mo_batch, 'material': mo_ma, 'mgroup': None, 'notok_sign': None, 'defect': None, 'state': wm_state} @@ -271,33 +273,33 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): stored_mgroup = True else: lookup['belong_dept'] = belong_dept - if mo_count > 0: - wm, is_create2 = WMaterial.objects.get_or_create(**lookup, defaults={**lookup, "belong_dept": belong_dept}) - wm.count = wm.count + mo_count - wm.count_eweight = mo_count_eweight - wm.update_by = user - if supplier is not None: - wm.supplier = supplier - if is_create2: - wm.create_by = user - if isinstance(mlog_or_b, Mlog) and mlog_or_b.wm_in: - wm.batch_ofrom = mlog_or_b.wm_in.batch_ofrom - wm.material_ofrom = mlog_or_b.wm_in.material_ofrom - elif isinstance(mlog_or_b, Mlogb): - wm.batch_ofrom = mlog_or_b.batch_ofrom - wm.material_ofrom = mlog_or_b.material_ofrom - wm.save() - if material_out.tracking == Material.MA_TRACKING_SINGLE: - mlogbws = Mlogbw.objects.filter(mlogb=mlog_or_b) - if mlogbws.count() != mo_count: - raise ParseError("日志与明细数量不一致,操作失败") - for item in mlogbws: - if item.wpr: - Wpr.change_or_new(wpr=item.wpr, wm=wm, ftest=item.ftest) - else: - wpr = Wpr.change_or_new(number=item.number, wm=wm, ftest=item.ftest) - item.wpr = wpr - item.save() + + wm, is_create2 = WMaterial.objects.get_or_create(**lookup, defaults={**lookup, "belong_dept": belong_dept}) + wm.count = wm.count + mo_count + wm.count_eweight = mo_count_eweight + wm.update_by = user + if supplier is not None: + wm.supplier = supplier + if is_create2: + wm.create_by = user + if isinstance(mlog_or_b, Mlog) and mlog_or_b.wm_in: + wm.batch_ofrom = mlog_or_b.wm_in.batch_ofrom + wm.material_ofrom = mlog_or_b.wm_in.material_ofrom + elif isinstance(mlog_or_b, Mlogb): + wm.batch_ofrom = mlog_or_b.batch_ofrom + wm.material_ofrom = mlog_or_b.material_ofrom + wm.save() + if material_out.tracking == Material.MA_TRACKING_SINGLE: + mlogbws = Mlogbw.objects.filter(mlogb=mlog_or_b) + if mlogbws.count() != mo_count: + raise ParseError("日志与明细数量不一致,操作失败") + for item in mlogbws: + if item.wpr: + Wpr.change_or_new(wpr=item.wpr, wm=wm, ftest=item.ftest) + else: + wpr = Wpr.change_or_new(number=item.number, wm=wm, ftest=item.ftest) + item.wpr = wpr + item.save() mlog.submit_time = now mlog.submit_user = user