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)
|
||||
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_has = models.DecimalField('含有该缺陷的数量', default=0, max_digits=11, decimal_places=1)
|
||||
|
||||
@classmethod
|
||||
def get_defect_qs(cls, ftype="all"):
|
||||
|
@ -512,7 +513,7 @@ class Mlogbw(BaseModel):
|
|||
|
||||
@classmethod
|
||||
def cal_count_notok(cls, mlogb: Mlogb):
|
||||
from apps.qm.models import Defect
|
||||
from apps.qm.models import Defect, FtestDefect
|
||||
# 锁定mlogb以防止并发修改
|
||||
# mlogb:Mlogb = Mlogb.objects.select_for_update().get(pk=mlogb.pk)
|
||||
count = Mlogbw.objects.filter(mlogb=mlogb).count()
|
||||
|
@ -523,9 +524,13 @@ class Mlogbw(BaseModel):
|
|||
mlogb.count_real = count
|
||||
count_notok = 0
|
||||
count_notok_full = 0
|
||||
tqs = Mlogbw.objects.filter(mlogb=mlogb, ftest__is_ok=False)
|
||||
tqs_a = Mlogbw.objects.filter(mlogb=mlogb, ftest__is_ok=False).values("ftest__defect_main").annotate(xcount=Count('id'))
|
||||
defects = {defect.id: defect for defect in Defect.objects.filter(id__in=tqs.values_list("ftest__defect_main", flat=True))}
|
||||
# 个追踪的合格b类不分批
|
||||
tqs = Mlogbw.objects.filter(mlogb=mlogb, ftest__defect_main__isnull=False)
|
||||
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 = []
|
||||
for t in tqs_a:
|
||||
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"]
|
||||
if defects[t["ftest__defect_main"]].okcate != 10:
|
||||
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()
|
||||
mlogb.count_notok = count_notok
|
||||
mlogb.count_ok = count - mlogb.count_notok
|
||||
|
|
Loading…
Reference in New Issue