From 4699b31f83c77085398c7d2fc52a130f471efd77 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 17 Jan 2025 16:52:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20ftest=E5=A2=9E=E5=8A=A0defect=5Fmain?= =?UTF-8?q?=E7=9A=84=E5=90=8E=E7=BB=AD=E9=80=BB=E8=BE=91=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/inm/services.py | 20 +++++++++----------- apps/wpm/services.py | 22 +++++++++------------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/apps/inm/services.py b/apps/inm/services.py index 0135fa02..4417b8d7 100644 --- a/apps/inm/services.py +++ b/apps/inm/services.py @@ -9,7 +9,7 @@ from apps.mtm.services import cal_material_count from apps.wpm.models import WMaterial from apps.wpm.services_2 import get_alldata_with_batch_and_store from apps.wpmw.models import Wpr -from apps.qm.models import FtestDefect, Defect +from apps.qm.models import Ftest, Defect from django.db.models import Count, Q def do_out(item: MIOItem): @@ -299,16 +299,14 @@ class InmService: if tracking == Material.MA_TRACKING_SINGLE: # 获取所有主要的不合格项 mw_qs = MIOItemw.objects.filter(mioitem=i) - defectIds= FtestDefect.objects.filter(ftest__mioitemw_ftest__in=mw_qs, is_main=True, has=True).values_list("defect__id", flat=True).distinct() + defectIds= Ftest.objects.filter(mioitemw_ftest__in=mw_qs).exclude(defect_main=None).values_list("defect_main__id", flat=True).distinct() defects_map = {d.id: d for d in Defect.objects.filter(id__in=defectIds)} # 过滤并统计相关数据 filtered_mw_qs = mw_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')) + ftest__defect_main__id__in=defects_map.keys(), + ).values('ftest__defect_main__id').annotate(xcount=Count('id')) for defect_data in filtered_mw_qs: - defect_id = defect_data['ftest__defects_ftest__defect__id'] + defect_id = defect_data['ftest__defect_main__id'] xcount = defect_data['xcount'] if xcount > 0: defect = defects_map[defect_id] @@ -333,9 +331,9 @@ class InmService: mb.save() if tracking == Material.MA_TRACKING_SINGLE: if defect: - mioitemws = MIOItemw.objects.filter(mioitem=i, ftest__is_ok=False, ftest__defects_ftest__defect=defect) + mioitemws = MIOItemw.objects.filter(mioitem=i, ftest__defect_main=defect) else: - mioitemws = MIOItemw.objects.filter(Q(ftest=None) | Q(ftest__is_ok=True), mioitem=i) + mioitemws = MIOItemw.objects.filter(Q(ftest=None) | Q(ftest__defect_main=True), mioitem=i) if mioitemws.count() != change_count: raise ParseError("出入库与明细数量不一致,操作失败") for mioitemw in mioitemws: @@ -354,9 +352,9 @@ class InmService: mb.save() if tracking == Material.MA_TRACKING_SINGLE: if defect: - mioitemws = MIOItemw.objects.filter(mioitem=i, ftest__is_ok=False, ftest__defects_ftest__defect=defect) + mioitemws = MIOItemw.objects.filter(mioitem=i, ftest__defect_main=defect) else: - mioitemws = MIOItemw.objects.filter(Q(ftest=None) | Q(ftest__is_ok=True), mioitem=i) + mioitemws = MIOItemw.objects.filter(Q(ftest=None) | Q(ftest__defect_main=True), mioitem=i) if mioitemws.count() != change_count: raise ParseError("出入库与明细数量不一致,操作失败") for mioitemw in mioitemws: diff --git a/apps/wpm/services.py b/apps/wpm/services.py index c17b85eb..006db3af 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -19,7 +19,7 @@ import logging 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 ..qm.models import Defect, Ftest from django.db.models import Count, Q myLogger = logging.getLogger('log') @@ -239,17 +239,15 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): if tracking == Material.MA_TRACKING_SINGLE: # 获取所有主要的不合格项 bw_qs = Mlogbw.objects.filter(mlogb=item) - defectIds= FtestDefect.objects.filter(ftest__mlogbw_ftest__in=bw_qs, is_main=True, has=True).values_list("defect__id", flat=True).distinct() + defectIds= Ftest.objects.filter(mlogbw_ftest__in=bw_qs).exclude(defect_main=None).values_list("defect_main__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')) + ftest__defect_main__id__in=defects_map.keys() + ).values('ftest__defect_main__id').annotate(xcount=Count('id')) # 整理结果 for defect_data in filtered_bw_qs: - defect_id = defect_data['ftest__defects_ftest__defect__id'] + defect_id = defect_data['ftest__defect_main__id'] xcount = defect_data['xcount'] if xcount > 0: defect = defects_map[defect_id] @@ -359,17 +357,15 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]): if material_out.tracking == Material.MA_TRACKING_SINGLE: # 获取所有主要的不合格项 bw_qs = Mlogbw.objects.filter(mlogb=item) - defectIds= FtestDefect.objects.filter(ftest__mlogbw_ftest__in=bw_qs, is_main=True, has=True).values_list("defect__id", flat=True).distinct() + defectIds= Ftest.objects.filter(mlogbw_ftest__in=bw_qs).exclude(defect_main=None).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')) + ftest__defect_main__id__in=defects_map.keys() + ).values('ftest__defect_main__id').annotate(xcount=Count('id')) # 整理结果 for defect_data in filtered_bw_qs: - defect_id = defect_data['ftest__defects_ftest__defect__id'] + defect_id = defect_data['ftest__defect_main__id'] xcount = defect_data['xcount'] if xcount > 0: defect = defects_map[defect_id]