feat: wmaterial根据current_merged查询

This commit is contained in:
caoqianming 2026-01-21 11:09:53 +08:00
parent dc26c7cc46
commit 4bbae8b7df
1 changed files with 20 additions and 2 deletions

View File

@ -1,8 +1,8 @@
from django_filters import rest_framework as filters from django_filters import rest_framework as filters
from apps.wpm.models import (SfLog, StLog, WMaterial, Mlog, Mlogbw, 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 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 rest_framework.exceptions import ParseError
from datetime import datetime 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) 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_start = filters.DateFilter(label="产出开始", method="filter_mlog_date_start")
mlog_date_end = filters.DateFilter(label="产出结束", method="filter_mlog_date_end") 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): def filter_mlog_date_start(self, queryset, name, value):
mgroupId = self.data.get("mgroup", None) mgroupId = self.data.get("mgroup", None)
@ -101,6 +102,23 @@ class WMaterialFilter(filters.FilterSet):
raise ParseError('生产路线不存在!') raise ParseError('生产路线不存在!')
return queryset.filter(material=route.material_in)|queryset.filter(material__in=route.materials.all()) 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: class Meta:
model = WMaterial model = WMaterial
fields = { fields = {