From c8c9cd45541e00e99bbfb20b0fe2b79ee09fe775 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 27 Dec 2021 14:23:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E8=B5=B7=E4=B8=8D=E5=90=88=E6=A0=BC?= =?UTF-8?q?=E5=AE=A1=E7=90=86=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/wpm/services.py | 9 +++++---- hb_server/apps/wpm/signals.py | 17 +++++++++-------- hb_server/apps/wpm/views.py | 10 +++++----- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/hb_server/apps/wpm/services.py b/hb_server/apps/wpm/services.py index 30ba1f2..8dcde40 100644 --- a/hb_server/apps/wpm/services.py +++ b/hb_server/apps/wpm/services.py @@ -1,4 +1,6 @@ from typing import List + +from django.db.models.expressions import F from apps.pm.models import SubProductionPlan, SubProductionProgress from apps.mtm.models import Material, Step, SubprodctionMaterial from apps.qm.models import TestRecord @@ -55,10 +57,9 @@ class WpmServies(object): wproduct.number = 'WP'+ranstr(7) # 更新子计划合格进度 - instance = SubProductionProgress.objects.get(subproduction_plan=wproduct.subproduction_plan, - is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT) - instance.count_ok = instance.count_ok + 1 - instance.save() + SubProductionProgress.objects.filter(subproduction_plan=wproduct.subproduction_plan, + is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT).update(count_ok=F('count_ok')+1) + else:# 如果不合格 wproduct.act_state = WProduct.WPR_ACT_STATE_NOTOK # 需要走不合格品审理的工单 diff --git a/hb_server/apps/wpm/signals.py b/hb_server/apps/wpm/signals.py index 3d27b38..e7e07e4 100644 --- a/hb_server/apps/wpm/signals.py +++ b/hb_server/apps/wpm/signals.py @@ -1,6 +1,7 @@ +from django.db.models.expressions import F from django.db.models.signals import post_save -from apps.mtm.models import SubprodctionMaterial -from apps.pm.models import SubProductionProgress +from apps.mtm.models import Step, SubprodctionMaterial +from apps.pm.models import SubProductionPlan, SubProductionProgress from apps.qm.models import TestRecord from apps.wf.models import Ticket from django.dispatch import receiver @@ -56,10 +57,11 @@ def handleTicket(sender, instance, created, **kwargs): wp.ng_sign = decision if decision in [WProduct.NG_BACK_WORK, WProduct.NG_BACK_FIX]: - step = ticket_data['back_step'] + step = Step.objects.get(id=ticket_data['back_step']) wp.step = step # 找到当时所属的计划 - sp = OperationWproduct.objects.filter(operation__is_submited=True, operation__step=step).first() + sp = SubProductionPlan.objects.filter(ow_subplan__wproduct=wp, + ow_subplan__operation__is_submited=True, ow_subplan__step=step).first() if sp: wp.subproduction_plan = sp wt.save() @@ -67,10 +69,9 @@ def handleTicket(sender, instance, created, **kwargs): wp.act_state = WProduct.WPR_ACT_STATE_DOWAIT wp.save() # 更新子计划合格进度 - instance = SubProductionProgress.objects.get(subproduction_plan=sp, - is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT) - instance.count_ok = instance.count_ok - 1 #进度计算这里该怎么处理呢 - instance.save() + if sp != wt.subproduction_plan: + SubProductionProgress.objects.filter(subproduction_plan=sp, + is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT).update(count_ok=F('count_ok')-1) else: raise exceptions.APIException('返回步骤点错误') diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index ff06c97..de6ca2c 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -1,3 +1,4 @@ +from django.db.models.expressions import F from django.shortcuts import render from rest_framework.generics import CreateAPIView, GenericAPIView from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin @@ -370,7 +371,8 @@ class WProductViewSet(ListModelMixin, GenericViewSet): 发起不合格审理单 """ obj = self.get_object() - if obj.act_state != WProduct.WPR_ACT_STATE_NOTOK or obj.ng_sign is not None: + if obj.act_state != WProduct.WPR_ACT_STATE_NOTOK or obj.ng_sign is not None\ + or obj.ticket is not None: raise exceptions.APIException('该产品不可发起不合格审理') workflow = Workflow.objects.filter(name='不合格品审理单', is_deleted=False).first() if workflow: @@ -542,10 +544,8 @@ class OperationViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, Upd # 更新子计划生产进度 # 如果产品有返工标记不做计算 if wp.ng_sign not in [WProduct.NG_BACK_FIX, WProduct.NG_BACK_WORK]: - instance = SubProductionProgress.objects.get(subproduction_plan=wsp, - is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT) - instance.count_real = instance.count_real + 1 # 这个地方可能会有问题,不够严谨 - instance.save() + SubProductionProgress.objects.filter(subproduction_plan=wsp, + is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT).update(count_real=F('count_real')+1) wp.operation = None wp.update_by = request.user wp.save()