feat: mlogbw变更出发mlogbdefect

This commit is contained in:
caoqianming 2025-02-28 11:28:40 +08:00
parent fac85d17d2
commit 77f7a454a1
2 changed files with 17 additions and 5 deletions

View File

@ -729,16 +729,17 @@ class MlogbOutUpdateSerializer(CustomModelSerializer):
with transaction.atomic(): with transaction.atomic():
ins:Mlogb = super().update(instance, validated_data) ins:Mlogb = super().update(instance, validated_data)
if mlogbdefect and material_out.tracking == Material.MA_TRACKING_BATCH: 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 count_notok = 0
md_ids = []
for item in mlogbdefect: for item in mlogbdefect:
defect = item["defect"] 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.count = item["count"]
insb.save(update_fields=["count"]) insb.save(update_fields=["count"])
if defect.cate == Defect.DEFECT_NOTOK: if defect.cate == Defect.DEFECT_NOTOK:
count_notok +=1 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_notok = count_notok
ins.count_ok = ins.count_real ins.count_ok = ins.count_real
ins.save() ins.save()

View File

@ -16,7 +16,7 @@ from apps.utils.mixins import CustomListModelMixin, BulkCreateModelMixin, BulkDe
from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter, MlogbFilter, BatchStFilter from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter, MlogbFilter, BatchStFilter
from .models import (SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb, 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, from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer,
MlogRevertSerializer, MlogRevertSerializer,
MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer, MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer,
@ -34,6 +34,7 @@ from apps.qm.models import QctMat, Ftest
from apps.enm.models import EnStat from apps.enm.models import EnStat
from django.db.models import Q from django.db.models import Q
from apps.utils.tools import convert_ordereddict from apps.utils.tools import convert_ordereddict
from django.db.models import Count
# Create your views here. # Create your views here.
@ -678,7 +679,17 @@ class MlogbwViewSet(CustomModelViewSet):
mlogb.count_use = count mlogb.count_use = count
elif mlogb.material_out: elif mlogb.material_out:
mlogb.count_real = count 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.count_ok = count - mlogb.count_notok
mlogb.save() mlogb.save()