feat: 编号生成后在提交时进行校验
This commit is contained in:
parent
4e817d9954
commit
dda876092e
|
|
@ -28,6 +28,11 @@ from apps.utils.lock import lock_model_record_d_func
|
|||
|
||||
myLogger = logging.getLogger('log')
|
||||
|
||||
def check_wpr_number(number: str):
|
||||
return (len(number) >= 5 and
|
||||
number[-4:].isdigit() and
|
||||
not any(char.islower() for char in number))
|
||||
|
||||
def generate_new_batch(old_batch: str, mlog: Mlog):
|
||||
new_batch = old_batch
|
||||
supplier = mlog.supplier
|
||||
|
|
@ -372,6 +377,8 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
|||
if item.wpr:
|
||||
Wpr.change_or_new(wpr=item.wpr, wm=wm, ftest=item.ftest)
|
||||
else:
|
||||
if not check_wpr_number(item.number):
|
||||
raise ParseError(f'{item.number} 该编号格式有误')
|
||||
wpr_from = None
|
||||
if item.mlogbw_from:
|
||||
wpr_from = item.mlogbw_from.wpr
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ from django.db.models import Prefetch
|
|||
from drf_yasg.utils import swagger_auto_schema
|
||||
from drf_yasg import openapi
|
||||
from django.db import connection
|
||||
from django.db.models.functions import Substr, Length
|
||||
|
||||
|
||||
# Create your views here.
|
||||
|
|
@ -962,7 +963,8 @@ class MlogbInViewSet(BulkCreateModelMixin, BulkUpdateModelMixin, BulkDestroyMode
|
|||
wpr_mlogbw__mlogb__mlog__handle_date__year=c_year,
|
||||
wpr_mlogbw__mlogb__mlog__handle_date__month=c_month,
|
||||
)
|
||||
.order_by("number")
|
||||
.annotate(last_four=Substr("number", Length("number")-3))
|
||||
.order_by("last_four")
|
||||
.last()
|
||||
)
|
||||
cq_w = 4
|
||||
|
|
|
|||
|
|
@ -51,3 +51,7 @@ class WproutSerializer(serializers.Serializer):
|
|||
class WproutListSerializer(serializers.Serializer):
|
||||
items = WproutSerializer(many=True)
|
||||
|
||||
|
||||
class WprChangeNumberSerializer(serializers.Serializer):
|
||||
old_number = serializers.CharField(label="原编号")
|
||||
new_number = serializers.CharField(label="新编号")
|
||||
|
|
@ -3,7 +3,7 @@ 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, WproutListSerializer
|
||||
from apps.wpmw.serializers import WprSerializer, WprNewSerializer, WprDetailSerializer, WproutListSerializer, WprChangeNumberSerializer
|
||||
from rest_framework.response import Response
|
||||
from apps.mtm.models import Material
|
||||
from rest_framework.exceptions import ParseError
|
||||
|
|
@ -42,6 +42,26 @@ class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, Cu
|
|||
qs.exclude(mb=None, wm=None)
|
||||
return qs
|
||||
|
||||
@action(methods=["post"], detail=False, perms_map={"post": "*"}, serializer_class=WprChangeNumberSerializer)
|
||||
@transaction.atomic
|
||||
def change_number(self, request, *args, **kwargs):
|
||||
"""修改编号"""
|
||||
sr = WprChangeNumberSerializer(data=request.data)
|
||||
sr.is_valid(raise_exception=True)
|
||||
vdata = sr.validated_data
|
||||
new_number = vdata["new_number"]
|
||||
old_number = vdata["old_number"]
|
||||
if Wpr.objects.filter(number=new_number).exists():
|
||||
raise ParseError("新编号已存在,不可使用")
|
||||
wpr = Wpr.objects.get(number=old_number)
|
||||
from apps.wpm.models import Mlogbw, Handoverbw
|
||||
from apps.inm.models import MIOItemw
|
||||
Wpr.objects.filter(id=wpr.id).update(number=new_number)
|
||||
Mlogbw.objects.filter(wpr=wpr).update(number=new_number)
|
||||
Handoverbw.objects.filter(wpr=wpr).update(number=new_number)
|
||||
MIOItemw.objects.filter(wpr=wpr).update(number=new_number)
|
||||
return Response()
|
||||
|
||||
@action(methods=["post"], detail=False, perms_map={"post": "*"}, serializer_class=WprNewSerializer)
|
||||
def new_number(self, request, *args, **kwargs):
|
||||
"""获取新的编号"""
|
||||
|
|
|
|||
Loading…
Reference in New Issue