feat: ftest增加defect_main的后续逻辑变更

This commit is contained in:
caoqianming 2025-01-17 16:52:14 +08:00
parent 6737d3f0f4
commit 4699b31f83
2 changed files with 18 additions and 24 deletions

View File

@ -9,7 +9,7 @@ from apps.mtm.services import cal_material_count
from apps.wpm.models import WMaterial from apps.wpm.models import WMaterial
from apps.wpm.services_2 import get_alldata_with_batch_and_store from apps.wpm.services_2 import get_alldata_with_batch_and_store
from apps.wpmw.models import Wpr 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 from django.db.models import Count, Q
def do_out(item: MIOItem): def do_out(item: MIOItem):
@ -299,16 +299,14 @@ class InmService:
if tracking == Material.MA_TRACKING_SINGLE: if tracking == Material.MA_TRACKING_SINGLE:
# 获取所有主要的不合格项 # 获取所有主要的不合格项
mw_qs = MIOItemw.objects.filter(mioitem=i) 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)} defects_map = {d.id: d for d in Defect.objects.filter(id__in=defectIds)}
# 过滤并统计相关数据 # 过滤并统计相关数据
filtered_mw_qs = mw_qs.filter( filtered_mw_qs = mw_qs.filter(
ftest__defects_ftest__defect__id__in=defects_map.keys(), ftest__defect_main__id__in=defects_map.keys(),
ftest__defects_ftest__has=True, ).values('ftest__defect_main__id').annotate(xcount=Count('id'))
ftest__defects_ftest__is_main=True
).values('ftest__defects_ftest__defect__id').annotate(xcount=Count('id'))
for defect_data in filtered_mw_qs: 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'] xcount = defect_data['xcount']
if xcount > 0: if xcount > 0:
defect = defects_map[defect_id] defect = defects_map[defect_id]
@ -333,9 +331,9 @@ class InmService:
mb.save() mb.save()
if tracking == Material.MA_TRACKING_SINGLE: if tracking == Material.MA_TRACKING_SINGLE:
if defect: 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: 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: if mioitemws.count() != change_count:
raise ParseError("出入库与明细数量不一致,操作失败") raise ParseError("出入库与明细数量不一致,操作失败")
for mioitemw in mioitemws: for mioitemw in mioitemws:
@ -354,9 +352,9 @@ class InmService:
mb.save() mb.save()
if tracking == Material.MA_TRACKING_SINGLE: if tracking == Material.MA_TRACKING_SINGLE:
if defect: 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: 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: if mioitemws.count() != change_count:
raise ParseError("出入库与明细数量不一致,操作失败") raise ParseError("出入库与明细数量不一致,操作失败")
for mioitemw in mioitemws: for mioitemw in mioitemws:

View File

@ -19,7 +19,7 @@ import logging
from apps.wpm.services_2 import get_alldata_with_batch_and_store from apps.wpm.services_2 import get_alldata_with_batch_and_store
from datetime import timedelta from datetime import timedelta
from apps.wpmw.models import Wpr, WprDefect 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 from django.db.models import Count, Q
myLogger = logging.getLogger('log') 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: if tracking == Material.MA_TRACKING_SINGLE:
# 获取所有主要的不合格项 # 获取所有主要的不合格项
bw_qs = Mlogbw.objects.filter(mlogb=item) 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)} defects_map = {d.id: d for d in Defect.objects.filter(id__in=defectIds)}
# 过滤并统计相关数据 # 过滤并统计相关数据
filtered_bw_qs = bw_qs.filter( filtered_bw_qs = bw_qs.filter(
ftest__defects_ftest__defect__id__in=defects_map.keys(), ftest__defect_main__id__in=defects_map.keys()
ftest__defects_ftest__has=True, ).values('ftest__defect_main__id').annotate(xcount=Count('id'))
ftest__defects_ftest__is_main=True
).values('ftest__defects_ftest__defect__id').annotate(xcount=Count('id'))
# 整理结果 # 整理结果
for defect_data in filtered_bw_qs: 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'] xcount = defect_data['xcount']
if xcount > 0: if xcount > 0:
defect = defects_map[defect_id] 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: if material_out.tracking == Material.MA_TRACKING_SINGLE:
# 获取所有主要的不合格项 # 获取所有主要的不合格项
bw_qs = Mlogbw.objects.filter(mlogb=item) 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)} defects_map = {d.id: d for d in Defect.objects.filter(id__in=defectIds)}
# 过滤并统计相关数据 # 过滤并统计相关数据
filtered_bw_qs = bw_qs.filter( filtered_bw_qs = bw_qs.filter(
ftest__defects_ftest__defect__id__in=defects_map.keys(), ftest__defect_main__id__in=defects_map.keys()
ftest__defects_ftest__has=True, ).values('ftest__defect_main__id').annotate(xcount=Count('id'))
ftest__defects_ftest__is_main=True
).values('ftest__defects_ftest__defect__id').annotate(xcount=Count('id'))
# 整理结果 # 整理结果
for defect_data in filtered_bw_qs: 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'] xcount = defect_data['xcount']
if xcount > 0: if xcount > 0:
defect = defects_map[defect_id] defect = defects_map[defect_id]