From 4bbae8b7df3c129c367deb4e40dac6f3dd587cea Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 21 Jan 2026 11:09:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20wmaterial=E6=A0=B9=E6=8D=AEcurrent=5Fme?= =?UTF-8?q?rged=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/filters.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/apps/wpm/filters.py b/apps/wpm/filters.py index 4c400285..801282ce 100644 --- a/apps/wpm/filters.py +++ b/apps/wpm/filters.py @@ -1,8 +1,8 @@ from django_filters import rest_framework as filters from apps.wpm.models import (SfLog, StLog, WMaterial, Mlog, Mlogbw, - Handover, Mgroup, Mlogb, Mtask, BatchSt) + Handover, Mgroup, Mlogb, Mtask, BatchSt, Handoverb) from apps.mtm.models import Route, Material -from django.db.models import Q +from django.db.models import Q, Exists, OuterRef from rest_framework.exceptions import ParseError from datetime import datetime @@ -43,6 +43,7 @@ class WMaterialFilter(filters.FilterSet): material__process__exclude = filters.CharFilter(field_name="material__process", lookup_expr="exact", exclude=True) mlog_date_start = filters.DateFilter(label="产出开始", method="filter_mlog_date_start") mlog_date_end = filters.DateFilter(label="产出结束", method="filter_mlog_date_end") + current_merged = filters.BooleanFilter(label="是否在本工段合批", method="filter_current_merged") def filter_mlog_date_start(self, queryset, name, value): mgroupId = self.data.get("mgroup", None) @@ -101,6 +102,23 @@ class WMaterialFilter(filters.FilterSet): raise ParseError('生产路线不存在!') return queryset.filter(material=route.material_in)|queryset.filter(material__in=route.materials.all()) + def filter_current_merged(self, queryset, name, value): + mgroupxId = self.data.get("mgroupx", None) + if mgroupxId: + pass + else: + raise ParseError("请提供工段查询条件") + sub_qs = Handoverb.objects.filter( + wm=OuterRef("pk"), + handover__mtype=Handover.H_MERGE, + handover__recive_mgroup__id=mgroupxId, + ) + if value is True: + return queryset.annotate(_has_merge=Exists(sub_qs)).filter(_has_merge=True) + elif value is False: + return queryset.annotate(_has_merge=Exists(sub_qs)).filter(_has_merge=False) + return queryset + class Meta: model = WMaterial fields = {