diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 8fc7720f..93db0bbb 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -20,6 +20,7 @@ from apps.wpm.services_2 import get_alldata_with_batch_and_store from datetime import timedelta from apps.wpmw.models import Wpr, WprDefect from ..qm.models import Defect, FtestDefect +from django.db.models import Count myLogger = logging.getLogger('log') @@ -237,12 +238,20 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): if Mlogbw.objects.filter(mlogb=item).exists(): # 获取所有主要的不合格项 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( - "defect").distinct() - for defect in defect_qs: - xcount = bw_qs.filter(ftest__defects_ftest__defect=defect).count() + defectIds= FtestDefect.objects.filter(ftest__mlogbw_ftest__in=bw_qs, is_main=True, has=True).values_list("defect__id", flat=True).distinct() + defects_map = {d.id: d for d in Defect.objects.filter(id__in=defectIds)} + # 过滤并统计相关数据 + filtered_bw_qs = bw_qs.filter( + ftest__defects_ftest__defect__id__in=defects_map.keys(), + ftest__defects_ftest__has=True, + ftest__defects_ftest__is_main=True + ).values('ftest__defects_ftest__defect__id').annotate(xcount=Count('id')) + # 整理结果 + for defect_data in filtered_bw_qs: + defect_id = defect_data['ftest__defects_ftest__defect__id'] + xcount = defect_data['xcount'] if xcount > 0: + defect = defects_map[defect_id] m_outs_list.append((item.material_out, item.batch, xcount, 0, defect, item)) else: