feat: mlogbdefect添加count_has 字段
This commit is contained in:
parent
65726e967f
commit
65d47008a4
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.12 on 2025-09-04 08:47
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('wpm', '0122_auto_20250827_1522'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='mlogbdefect',
|
||||||
|
name='count_has',
|
||||||
|
field=models.DecimalField(decimal_places=1, default=0, max_digits=11, verbose_name='含有该缺陷的数量'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -477,6 +477,7 @@ class MlogbDefect(BaseModel):
|
||||||
mlogb = models.ForeignKey(Mlogb, verbose_name='生产记录', on_delete=models.CASCADE)
|
mlogb = models.ForeignKey(Mlogb, verbose_name='生产记录', on_delete=models.CASCADE)
|
||||||
defect = models.ForeignKey("qm.Defect", verbose_name='缺陷', on_delete=models.CASCADE, null=True, blank=True)
|
defect = models.ForeignKey("qm.Defect", verbose_name='缺陷', on_delete=models.CASCADE, null=True, blank=True)
|
||||||
count = models.DecimalField('数量', default=0, max_digits=11, decimal_places=1)
|
count = models.DecimalField('数量', default=0, max_digits=11, decimal_places=1)
|
||||||
|
count_has = models.DecimalField('含有该缺陷的数量', default=0, max_digits=11, decimal_places=1)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_defect_qs(cls, ftype="all"):
|
def get_defect_qs(cls, ftype="all"):
|
||||||
|
@ -512,7 +513,7 @@ class Mlogbw(BaseModel):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def cal_count_notok(cls, mlogb: Mlogb):
|
def cal_count_notok(cls, mlogb: Mlogb):
|
||||||
from apps.qm.models import Defect
|
from apps.qm.models import Defect, FtestDefect
|
||||||
# 锁定mlogb以防止并发修改
|
# 锁定mlogb以防止并发修改
|
||||||
# mlogb:Mlogb = Mlogb.objects.select_for_update().get(pk=mlogb.pk)
|
# mlogb:Mlogb = Mlogb.objects.select_for_update().get(pk=mlogb.pk)
|
||||||
count = Mlogbw.objects.filter(mlogb=mlogb).count()
|
count = Mlogbw.objects.filter(mlogb=mlogb).count()
|
||||||
|
@ -523,9 +524,13 @@ class Mlogbw(BaseModel):
|
||||||
mlogb.count_real = count
|
mlogb.count_real = count
|
||||||
count_notok = 0
|
count_notok = 0
|
||||||
count_notok_full = 0
|
count_notok_full = 0
|
||||||
tqs = Mlogbw.objects.filter(mlogb=mlogb, ftest__is_ok=False)
|
# 个追踪的合格b类不分批
|
||||||
tqs_a = Mlogbw.objects.filter(mlogb=mlogb, ftest__is_ok=False).values("ftest__defect_main").annotate(xcount=Count('id'))
|
tqs = Mlogbw.objects.filter(mlogb=mlogb, ftest__defect_main__isnull=False)
|
||||||
defects = {defect.id: defect for defect in Defect.objects.filter(id__in=tqs.values_list("ftest__defect_main", flat=True))}
|
tqs_a = Mlogbw.objects.filter(mlogb=mlogb, ftest__defect_main__isnull=False).values("ftest__defect_main").annotate(xcount=Count('id'))
|
||||||
|
defect_ids = tqs.values_list("ftest__defect_main", flat=True)
|
||||||
|
tqs_has_a = FtestDefect.objects.filter(ftest__mlogbw_ftest__mlogb=mlogb, has=True).values("defect").annotate(xcount=Count('id'))
|
||||||
|
defect_ids = defect_ids.union(tqs_has_a.values_list("defect", flat=True))
|
||||||
|
defects = {defect.id: defect for defect in Defect.objects.filter(id__in=defect_ids)}
|
||||||
md_ids = []
|
md_ids = []
|
||||||
for t in tqs_a:
|
for t in tqs_a:
|
||||||
md, _ = MlogbDefect.objects.get_or_create(mlogb=mlogb, defect=defects[t["ftest__defect_main"]])
|
md, _ = MlogbDefect.objects.get_or_create(mlogb=mlogb, defect=defects[t["ftest__defect_main"]])
|
||||||
|
@ -535,6 +540,13 @@ class Mlogbw(BaseModel):
|
||||||
count_notok += t["xcount"]
|
count_notok += t["xcount"]
|
||||||
if defects[t["ftest__defect_main"]].okcate != 10:
|
if defects[t["ftest__defect_main"]].okcate != 10:
|
||||||
count_notok_full += t["xcount"]
|
count_notok_full += t["xcount"]
|
||||||
|
|
||||||
|
for t2 in tqs_has_a:
|
||||||
|
md, _ = MlogbDefect.objects.get_or_create(mlogb=mlogb, defect=defects[t2["defect"]], defaults={"count": 0})
|
||||||
|
md.count_has = t2["xcount"]
|
||||||
|
md.save()
|
||||||
|
md_ids.append(md.id)
|
||||||
|
|
||||||
MlogbDefect.objects.filter(mlogb=mlogb).exclude(id__in=md_ids).delete()
|
MlogbDefect.objects.filter(mlogb=mlogb).exclude(id__in=md_ids).delete()
|
||||||
mlogb.count_notok = count_notok
|
mlogb.count_notok = count_notok
|
||||||
mlogb.count_ok = count - mlogb.count_notok
|
mlogb.count_ok = count - mlogb.count_notok
|
||||||
|
|
Loading…
Reference in New Issue