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')
|
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):
|
def generate_new_batch(old_batch: str, mlog: Mlog):
|
||||||
new_batch = old_batch
|
new_batch = old_batch
|
||||||
supplier = mlog.supplier
|
supplier = mlog.supplier
|
||||||
|
|
@ -372,6 +377,8 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
|
||||||
if item.wpr:
|
if item.wpr:
|
||||||
Wpr.change_or_new(wpr=item.wpr, wm=wm, ftest=item.ftest)
|
Wpr.change_or_new(wpr=item.wpr, wm=wm, ftest=item.ftest)
|
||||||
else:
|
else:
|
||||||
|
if not check_wpr_number(item.number):
|
||||||
|
raise ParseError(f'{item.number} 该编号格式有误')
|
||||||
wpr_from = None
|
wpr_from = None
|
||||||
if item.mlogbw_from:
|
if item.mlogbw_from:
|
||||||
wpr_from = item.mlogbw_from.wpr
|
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.utils import swagger_auto_schema
|
||||||
from drf_yasg import openapi
|
from drf_yasg import openapi
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
|
from django.db.models.functions import Substr, Length
|
||||||
|
|
||||||
|
|
||||||
# Create your views here.
|
# 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__year=c_year,
|
||||||
wpr_mlogbw__mlogb__mlog__handle_date__month=c_month,
|
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()
|
.last()
|
||||||
)
|
)
|
||||||
cq_w = 4
|
cq_w = 4
|
||||||
|
|
|
||||||
|
|
@ -51,3 +51,7 @@ class WproutSerializer(serializers.Serializer):
|
||||||
class WproutListSerializer(serializers.Serializer):
|
class WproutListSerializer(serializers.Serializer):
|
||||||
items = WproutSerializer(many=True)
|
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.utils.mixins import CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin
|
||||||
|
|
||||||
from apps.wpmw.models import Wpr, WprDefect
|
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 rest_framework.response import Response
|
||||||
from apps.mtm.models import Material
|
from apps.mtm.models import Material
|
||||||
from rest_framework.exceptions import ParseError
|
from rest_framework.exceptions import ParseError
|
||||||
|
|
@ -42,6 +42,26 @@ class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, Cu
|
||||||
qs.exclude(mb=None, wm=None)
|
qs.exclude(mb=None, wm=None)
|
||||||
return qs
|
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)
|
@action(methods=["post"], detail=False, perms_map={"post": "*"}, serializer_class=WprNewSerializer)
|
||||||
def new_number(self, request, *args, **kwargs):
|
def new_number(self, request, *args, **kwargs):
|
||||||
"""获取新的编号"""
|
"""获取新的编号"""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue