From d42bc29d2c1951af8f09c4c36bcfe807e899f741 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 10 Sep 2025 11:26:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=87=BA=E5=85=A5=E5=BA=93=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=92=8C=E4=BA=A4=E6=8E=A5=E8=AE=B0=E5=BD=95=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E5=A4=84=E7=90=86=E6=97=B6=E9=83=BD=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E5=8D=95=E4=B8=AA=E7=9A=84=E5=BC=BA=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/inm/serializers.py | 9 ++++++++- apps/inm/services.py | 12 ++++++++++++ apps/wpm/serializers.py | 2 +- apps/wpm/services.py | 8 +++++++- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/apps/inm/serializers.py b/apps/inm/serializers.py index 19c92e8b..6a183640 100644 --- a/apps/inm/serializers.py +++ b/apps/inm/serializers.py @@ -175,7 +175,7 @@ class MIOItemCreateSerializer(CustomModelSerializer): count = validated_data["count"] batch = validated_data["batch"] mioitemw = validated_data.pop('mioitemw', []) - instance = super().create(validated_data) + instance:MIOItem = super().create(validated_data) assemb_dict = {} for i in assemb: assemb_dict[i['material'].id] = i @@ -210,6 +210,13 @@ class MIOItemCreateSerializer(CustomModelSerializer): raise ParseError('不支持自动生成请提供产品明细') elif len(mioitemw) >= 1: mio_type = mio.type + if mio_type != "pur_in" and mio_type != "other_in": + wprIds = [i["wpr"].id for i in mioitemw] + mb_ids = list(Wpr.objects.filter(id__in=wprIds).values_list("mb__id", flat=True).distinct()) + if len(mb_ids) == 1 and mb_ids[0] == instance.mb.id: + pass + else: + raise ParseError(f'{batch}物料明细中存在{len(mb_ids)}个不同物料批次') for item in mioitemw: if item.get("wpr", None) is None and mio_type != "pur_in" and mio_type != "other_in": raise ParseError(f'{item["number"]}_请提供产品明细ID') diff --git a/apps/inm/services.py b/apps/inm/services.py index 67d47bc4..fa30767f 100644 --- a/apps/inm/services.py +++ b/apps/inm/services.py @@ -117,6 +117,12 @@ def do_out(item: MIOItem): mioitemws = MIOItemw.objects.filter(mioitem=item) if mioitemws.count() != item.count: raise ParseError("出入库与明细数量不一致,操作失败") + wprIds = [i["wpr"].id for i in mioitemws] + mb_ids = list(Wpr.objects.filter(id__in=wprIds).values_list("mb__id", flat=True).distinct()) + if len(mb_ids) == 1 and mb_ids[0] == mb.id: + pass + else: + raise ParseError(f'{xbatch}物料明细中存在{len(mb_ids)}个不同物料批次') for mioitemw in mioitemws: Wpr.change_or_new(wpr=mioitemw.wpr, wm=wm, old_mb=mb) @@ -229,6 +235,12 @@ def do_in(item: MIOItem): mioitemws = MIOItemw.objects.filter(mioitem=item) if mioitemws.count() != item.count: raise ParseError("出入库与明细数量不一致,操作失败") + wprIds = [i["wpr"].id for i in mioitemws] + wm_ids = list(Wpr.objects.filter(id__in=wprIds).values_list("wm__id", flat=True).distinct()) + if len(wm_ids) == 1 and wm_ids[0] == wm.id: + pass + else: + raise ParseError(f'{xbatch}物料明细中存在{len(wm_ids)}个不同物料批次') for mioitemw in mioitemws: Wpr.change_or_new(wpr=mioitemw.wpr, mb=mb, old_wm=wm) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index f6db5ec0..09e4c6f1 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -1280,7 +1280,7 @@ class HandoverSerializer(CustomModelSerializer): if len(wm_ids) == 1 and wm_ids[0] == wm.id: pass else: - raise ParseError(f'第{ind+1}行-物料明细与批次不匹配') + raise ParseError(f'{wm.batch}物料明细中存在{len(wm_ids)}个不同物料批次') elif wm.count == item["count"]: t_count += item["count"] diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 1d437ae8..bfda3756 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -756,7 +756,7 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime, raise ParseError('拆批请选择车间库存') batches_to_limit = BatchLog.batches_to(batch=handover.wm.batch)["batches"] source_b, _ = BatchSt.g_create(batch=handover.wm.batch) - for item in handoverb_list: + for indx, item in enumerate(handoverb_list): wmId, xcount, handover_or_b = item if xcount <= 0: raise ParseError("存在非正数!") @@ -926,6 +926,12 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime, handoverbws = Handoverbw.objects.filter(handoverb=handover_or_b) if handoverbws.count() != xcount: raise ParseError("交接与明细数量不一致,操作失败") + wprIds = [i["wpr"].id for i in handoverbws] + wm_ids = list(Wpr.objects.filter(id__in=wprIds).values_list("wm_id", flat=True).distinct()) + if len(wm_ids) == 1 and wm_ids[0] == wm_from.id: + pass + else: + raise ParseError(f'{batch}物料明细中存在{len(wm_ids)}个不同物料批次') for item in handoverbws: wpr:Wpr = item.wpr Wpr.change_or_new(wpr=wpr, wm=wm_to, old_wm=wpr.wm, old_mb=wpr.mb)