feat: wpr分配出库对外编号

This commit is contained in:
caoqianming 2025-07-30 15:35:06 +08:00
parent b5889374eb
commit 84198f4d91
2 changed files with 32 additions and 3 deletions

View File

@ -29,4 +29,9 @@ class WprDetailSerializer(WprSerializer):
class WprNewSerializer(serializers.Serializer):
year = serializers.IntegerField()
month = serializers.IntegerField()
material_start = serializers.CharField(label="物料ID")
material_start = serializers.CharField(label="物料ID")
class WproutSerializer(serializers.ListSerializer):
id = serializers.CharField(label="wprId")
number_out = serializers.CharField(label="对外编号")

View File

@ -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})
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()