feat: 物料清单的导出

This commit is contained in:
caoqianming 2025-08-25 15:37:05 +08:00
parent 3810860f13
commit 5496058226
2 changed files with 28 additions and 3 deletions

View File

@ -329,4 +329,10 @@ class RouteMatSerializer(CustomModelSerializer):
class Meta: class Meta:
model = RouteMat model = RouteMat
fields = "__all__" fields = "__all__"
read_only_fields = EXCLUDE_FIELDS_BASE read_only_fields = EXCLUDE_FIELDS_BASE
class MaterialExportSerializer(CustomModelSerializer):
class Meta:
model = Material
fields = ["id", "number", "name", "specfication", "unit", "bin_number_main", "cate", "count_safe", "unit_price"]

View File

@ -11,7 +11,7 @@ from apps.mtm.serializers import (GoalSerializer, MaterialSerializer,
MgroupGoalYearSerializer, MgroupSerializer, MgroupDaysSerializer, MgroupGoalYearSerializer, MgroupSerializer, MgroupDaysSerializer,
ShiftSerializer, TeamSerializer, ProcessSerializer, ShiftSerializer, TeamSerializer, ProcessSerializer,
RouteSerializer, TeamMemberSerializer, RoutePackSerializer, RouteSerializer, TeamMemberSerializer, RoutePackSerializer,
SruleSerializer, RouteMatSerializer, RoutePackCopySerializer) SruleSerializer, RouteMatSerializer, RoutePackCopySerializer, MaterialExportSerializer)
from apps.mtm.services import get_mgroup_goals, daoru_material, get_mgroup_days from apps.mtm.services import get_mgroup_goals, daoru_material, get_mgroup_days
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, CustomListModelMixin from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, CustomListModelMixin
@ -21,6 +21,8 @@ from django.db.models import Q
from apps.wf.models import Ticket from apps.wf.models import Ticket
from django.utils import timezone from django.utils import timezone
from rest_framework.permissions import IsAdminUser from rest_framework.permissions import IsAdminUser
from apps.utils.export import export_excel
from operator import itemgetter
# Create your views here. # Create your views here.
class MaterialViewSet(CustomModelViewSet): class MaterialViewSet(CustomModelViewSet):
@ -32,7 +34,7 @@ class MaterialViewSet(CustomModelViewSet):
queryset = Material.objects.all() queryset = Material.objects.all()
serializer_class = MaterialSerializer serializer_class = MaterialSerializer
filterset_class = MaterialFilter filterset_class = MaterialFilter
search_fields = ['name', 'code', 'number', 'specification', 'model'] search_fields = ['name', 'code', 'number', 'specification', 'model', 'bin_number_main']
select_related_fields = ['process'] select_related_fields = ['process']
ordering = ['name', 'model', 'specification', ordering = ['name', 'model', 'specification',
'type', 'process', 'process__sort', 'sort', 'id', 'number'] 'type', 'process', 'process__sort', 'sort', 'id', 'number']
@ -88,6 +90,23 @@ class MaterialViewSet(CustomModelViewSet):
def cates(self, request, *args, **kwargs): def cates(self, request, *args, **kwargs):
res = Material.objects.exclude(cate='').exclude(cate=None).values_list('cate', flat=True).distinct() res = Material.objects.exclude(cate='').exclude(cate=None).values_list('cate', flat=True).distinct()
return Response(set(res)) return Response(set(res))
@action(methods=['get'], detail=False, perms_map={'get': '*'})
def export_excel(self, request, pk=None):
"""导出excel
导出excel
"""
field_data = ['大类', '物料编号', '名称', '规格', '型号', '计量单位', '仓库位号', "安全库存", "单价"]
queryset = self.filter_queryset(self.get_queryset())
if queryset.count() > 1000:
raise ParseError('数据量超过1000,请筛选后导出')
odata = MaterialExportSerializer(queryset, many=True).data
# 处理数据
field_keys = ['cate', 'number', 'name', 'specification', 'model', 'unit',
'bin_number_main', 'count_safe', 'unit_price']
getter = itemgetter(*field_keys)
data = [list(getter(item)) for item in odata]
return Response({'path': export_excel(field_data, data, '物料清单')})
class ShiftViewSet(ListModelMixin, CustomGenericViewSet): class ShiftViewSet(ListModelMixin, CustomGenericViewSet):
""" """