feat: 过滤来料未完成的优化

This commit is contained in:
caoqianming 2025-08-20 17:39:43 +08:00
parent 01e7d73bee
commit 0cf04c50b3
2 changed files with 11 additions and 2 deletions

View File

@ -42,6 +42,12 @@ class Process(CommonBModel):
"""获取可产出的materialIds """获取可产出的materialIds
""" """
return list(Route.objects.filter(process=self).values_list("material_out__id", flat=True).distinct()) return list(Route.objects.filter(process=self).values_list("material_out__id", flat=True).distinct())
def get_canin_mat_ids(self):
"""获取可输入的materialIds
"""
return list(RouteMat.objects.filter(route__process=self).values_list("material__id", flat=True).distinct()) + \
list(Route.objects.filter(process=self).values_list("material_in__id", flat=True).distinct())
# Create your models here. # Create your models here.
class Material(CommonAModel): class Material(CommonAModel):

View File

@ -50,14 +50,17 @@ class WMaterialFilter(filters.FilterSet):
mgroupId = mgroupId if mgroupId else mgroupxId mgroupId = mgroupId if mgroupId else mgroupxId
if mgroupId: if mgroupId:
process = Mgroup.objects.get(id=mgroupId).process process = Mgroup.objects.get(id=mgroupId).process
matoutIds = process.get_canout_mat_ids()
queryset = queryset.filter(material__type__in=[Material.MA_TYPE_MAINSO, Material.MA_TYPE_HALFGOOD, Material.MA_TYPE_GOOD]) queryset = queryset.filter(material__type__in=[Material.MA_TYPE_MAINSO, Material.MA_TYPE_HALFGOOD, Material.MA_TYPE_GOOD])
if value == "todo": if value == "todo":
qs = queryset.exclude(material__id__in=matoutIds).exclude(state=WMaterial.WM_REPAIRED)|queryset.filter(state=WMaterial.WM_REPAIR, mgroup__id=mgroupId) matIds = process.get_canin_mat_ids()
qs = queryset.filter(material__id__in=matIds).exclude(state=WMaterial.WM_REPAIRED)|queryset.filter(state=WMaterial.WM_REPAIR, mgroup__id=mgroupId)
return qs return qs
elif value == "done": elif value == "done":
matoutIds = process.get_canout_mat_ids()
qs = queryset.filter(material__id__in=matoutIds).exclude(state=WMaterial.WM_REPAIR)|queryset.filter(state=WMaterial.WM_REPAIRED, mgroup__id=mgroupId) qs = queryset.filter(material__id__in=matoutIds).exclude(state=WMaterial.WM_REPAIR)|queryset.filter(state=WMaterial.WM_REPAIRED, mgroup__id=mgroupId)
elif value == "canfix": elif value == "canfix":
matoutIds = process.get_canout_mat_ids()
qs = queryset.filter(state=WMaterial.WM_REPAIR, mgroup__id=mgroupId)| queryset.filter(material__id__in=matoutIds, state=WMaterial.WM_NOTOK).exclude( qs = queryset.filter(state=WMaterial.WM_REPAIR, mgroup__id=mgroupId)| queryset.filter(material__id__in=matoutIds, state=WMaterial.WM_NOTOK).exclude(
state=WMaterial.WM_REPAIR).exclude(state=WMaterial.WM_REPAIRED) state=WMaterial.WM_REPAIR).exclude(state=WMaterial.WM_REPAIRED)
return qs return qs