From 77f7a454a19ab63140750e21f4507e67335dce40 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 28 Feb 2025 11:28:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20mlogbw=E5=8F=98=E6=9B=B4=E5=87=BA?= =?UTF-8?q?=E5=8F=91mlogbdefect?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/serializers.py | 7 ++++--- apps/wpm/views.py | 15 +++++++++++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index c5576b61..e4660110 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -729,16 +729,17 @@ class MlogbOutUpdateSerializer(CustomModelSerializer): with transaction.atomic(): ins:Mlogb = super().update(instance, validated_data) if mlogbdefect and material_out.tracking == Material.MA_TRACKING_BATCH: - defectIds = [item["defect"].id for item in mlogbdefect if item["count"] > 0] - Mlogb.objects.filter(mlogb=ins).exclude(defect_id__in=defectIds).delete() count_notok = 0 + md_ids = [] for item in mlogbdefect: defect = item["defect"] - insb = MlogbDefect.objects.get(mlogb=ins, defect=defect) + insb, _ = MlogbDefect.objects.get_or_create(mlogb=ins, defect=defect) insb.count = item["count"] insb.save(update_fields=["count"]) if defect.cate == Defect.DEFECT_NOTOK: count_notok +=1 + md_ids.append(insb.id) + Mlogbw.objects.filter(mlogb=ins).exclude(id__in=md_ids).delete() ins.count_notok = count_notok ins.count_ok = ins.count_real ins.save() diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 70ebafd8..f8da0bab 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -16,7 +16,7 @@ from apps.utils.mixins import CustomListModelMixin, BulkCreateModelMixin, BulkDe from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter, MlogbFilter, BatchStFilter from .models import (SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb, - Mlogbw, AttLog, OtherLog, Fmlog, BatchSt) + Mlogbw, AttLog, OtherLog, Fmlog, BatchSt, MlogbDefect) from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogRevertSerializer, MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer, @@ -34,6 +34,7 @@ from apps.qm.models import QctMat, Ftest from apps.enm.models import EnStat from django.db.models import Q from apps.utils.tools import convert_ordereddict +from django.db.models import Count # Create your views here. @@ -678,7 +679,17 @@ class MlogbwViewSet(CustomModelViewSet): mlogb.count_use = count elif mlogb.material_out: mlogb.count_real = count - mlogb.count_notok = Mlogbw.objects.filter(mlogb=mlogb, ftest__is_ok=False).count() + count_notok = 0 + tqs = Mlogbw.objects.filter(mlogb=mlogb, ftest__is_ok=False).values("defect_main").annotate(xcount=Count('id')) + md_ids = [] + for t in tqs: + md, _ = MlogbDefect.objects.get_or_create(mlogb=mlogb, defect=t["defect_main"]) + md.count = t["xcount"] + md.save() + md_ids.append(md.id) + count_notok += t["xcount"] + MlogbDefect.objects.filter(mlogb=mlogb).exclude(id__in=md_ids).delete() + mlogb.count_notok = count_notok mlogb.count_ok = count - mlogb.count_notok mlogb.save()