From cafa1c9c8734e5660eedc6e77ca362a8e8fd19b7 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 15 Apr 2025 17:44:43 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20mio=5Fsaleout=E6=97=B6=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E8=AE=A1=E7=AE=97delivered=5Fcount?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sam/services.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/apps/sam/services.py b/apps/sam/services.py index 488a07f8..65ce2b01 100644 --- a/apps/sam/services.py +++ b/apps/sam/services.py @@ -13,21 +13,25 @@ class SamService: order = mio.order if order is None: return - for i in MIOItem.objects.filter(mio=mio): - orderitem = OrderItem.objects.get(order=order, material=i.material) - if is_reverse: - delivered_count = orderitem.delivered_count - i.count - else: - delivered_count = orderitem.delivered_count + i.count + orderitem_qs = OrderItem.objects.filter(order=order) + matIds = list(MIOItem.objects.filter(mio=mio).values_list('material__id', flat=True).distinct()) + matIds2 = list(orderitem_qs.values_list('material__id', flat=True).distinct()) + if set(matIds) != set(matIds2): + raise ValidationError('订单与发货单物料不一致') + for orderitem in orderitem_qs: + material = orderitem.material + delivered_count = MIOItem.objects.filter( + mio__order=order, material=material, mio__type='sale_out', mio__submit_time__isnull=False).values('count').aggregate(Sum('count'))['count__sum'] + delivered_count = delivered_count if delivered_count else 0 if delivered_count > orderitem.count: - raise ValidationError((f'{i.material.name}-超出订单所需数量')) + raise ValidationError((f'{str(material)}-超出订单所需数量')) elif delivered_count < 0: - raise ValidationError((f'{i.material.name}-数量小于0')) + raise ValidationError((f'{str(material)}-数量小于0')) orderitem.delivered_count = delivered_count - orderitem.save() + orderitem.save(update_fields=['delivered_count']) # 更新order的状态 qs = OrderItem.objects.filter( - order=order, count__gte=F('delivered_count')) + order=order, count__gt=F('delivered_count')) order_state = Order.ORDER_DOING if qs.exists(): pass