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