From 84198f4d918565534896c92f3984a8f0fece2fda Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 30 Jul 2025 15:35:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20wpr=E5=88=86=E9=85=8D=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E5=AF=B9=E5=A4=96=E7=BC=96=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpmw/serializers.py | 7 ++++++- apps/wpmw/views.py | 28 ++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/apps/wpmw/serializers.py b/apps/wpmw/serializers.py index b5984710..0fd71ba5 100644 --- a/apps/wpmw/serializers.py +++ b/apps/wpmw/serializers.py @@ -29,4 +29,9 @@ class WprDetailSerializer(WprSerializer): class WprNewSerializer(serializers.Serializer): year = serializers.IntegerField() month = serializers.IntegerField() - material_start = serializers.CharField(label="物料ID") \ No newline at end of file + material_start = serializers.CharField(label="物料ID") + + +class WproutSerializer(serializers.ListSerializer): + id = serializers.CharField(label="wprId") + number_out = serializers.CharField(label="对外编号") \ No newline at end of file diff --git a/apps/wpmw/views.py b/apps/wpmw/views.py index 0a8c865a..a26db9e2 100644 --- a/apps/wpmw/views.py +++ b/apps/wpmw/views.py @@ -3,9 +3,11 @@ from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet from apps.utils.mixins import CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin from apps.wpmw.models import Wpr, WprDefect -from apps.wpmw.serializers import WprSerializer, WprNewSerializer, WprDetailSerializer +from apps.wpmw.serializers import WprSerializer, WprNewSerializer, WprDetailSerializer, WproutSerializer from rest_framework.response import Response from apps.mtm.models import Material +from rest_framework.exceptions import ParseError +from django.db import transaction class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, CustomGenericViewSet): @@ -66,4 +68,26 @@ class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, Cu number_int = number_out.lstrip(prefix).lstrip('0') return Response({"number_out_last": wpr_qs_last.number_out, "number_out_int_last": number_int}) else: - return Response({"number_out_last": None}) \ No newline at end of file + return Response({"number_out_last": None}) + + @action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=WproutSerializer) + @transaction.atomic + def assgin_number_out(self, request, *args, **kwargs): + """分配出库对外编号 + + 分配出库对外编号""" + sr = WproutSerializer(data=request.data) + sr.is_valid(raise_exception=True) + vdata = sr.validated_data + number_outs = [i["number_out"] for i in vdata] + existing_numbers = Wpr.objects.filter(number_out__in=number_outs).values_list('number_out', flat=True) + if existing_numbers.exists(): + used_numbers = list(existing_numbers) + raise ParseError(f"以下对外编号已被使用: {used_numbers[0]} 共{len(used_numbers)}个") + for i in vdata: + wpr = Wpr.objects.get(id=i["id"]) + if wpr.number_out: + raise ParseError(f"编号为{wpr.number}的产品已经分配了对外编号") + wpr.number_out = i["number_out"] + wpr.save() + return Response() \ No newline at end of file