feat: 多个app优化事务处理
This commit is contained in:
parent
694dca27cc
commit
94f87df707
|
@ -45,7 +45,6 @@ class MIOItemwCreateUpdateSerializer(CustomModelSerializer):
|
||||||
ftest_sr.update(instance=ftest, validated_data=ftest_data)
|
ftest_sr.update(instance=ftest, validated_data=ftest_data)
|
||||||
return mioitemw
|
return mioitemw
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
wpr: Wpr = validated_data.get("wpr", None)
|
wpr: Wpr = validated_data.get("wpr", None)
|
||||||
if wpr:
|
if wpr:
|
||||||
|
@ -58,7 +57,6 @@ class MIOItemwCreateUpdateSerializer(CustomModelSerializer):
|
||||||
mioitemw = self.save_ftest(mioitemw, ftest_data)
|
mioitemw = self.save_ftest(mioitemw, ftest_data)
|
||||||
return mioitemw
|
return mioitemw
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
validated_data.pop("mioitem")
|
validated_data.pop("mioitem")
|
||||||
ftest_data = validated_data.pop("ftest", None)
|
ftest_data = validated_data.pop("ftest", None)
|
||||||
|
|
|
@ -246,34 +246,34 @@ class RouteSerializer(CustomModelSerializer):
|
||||||
# material = validated_data.get('material', None)
|
# material = validated_data.get('material', None)
|
||||||
# if material and process and Route.objects.filter(material=material, process=process).exists():
|
# if material and process and Route.objects.filter(material=material, process=process).exists():
|
||||||
# raise ValidationError('已选择该工序!!')
|
# raise ValidationError('已选择该工序!!')
|
||||||
with transaction.atomic():
|
|
||||||
instance:Route = super().create(validated_data)
|
instance:Route = super().create(validated_data)
|
||||||
material_out = instance.material_out
|
material_out = instance.material_out
|
||||||
if material_out:
|
if material_out:
|
||||||
if material_out.process is None:
|
if material_out.process is None:
|
||||||
material_out.process = process
|
material_out.process = process
|
||||||
if material_out_tracking != material_out.tracking:
|
if material_out_tracking != material_out.tracking:
|
||||||
raise ParseError("物料跟踪类型不一致!请前往物料处修改")
|
raise ParseError("物料跟踪类型不一致!请前往物料处修改")
|
||||||
if material_out.parent is None and instance.material:
|
if material_out.parent is None and instance.material:
|
||||||
material_out.parent = instance.material
|
material_out.parent = instance.material
|
||||||
material_out.save()
|
material_out.save()
|
||||||
# elif material_out.process != process:
|
# elif material_out.process != process:
|
||||||
# raise ParseError('物料工序错误!请重新选择')
|
# raise ParseError('物料工序错误!请重新选择')
|
||||||
else:
|
else:
|
||||||
if instance.material:
|
if instance.material:
|
||||||
instance.material_out = RouteSerializer.gen_material_out(instance, material_out_tracking, user=self.request.user)
|
instance.material_out = RouteSerializer.gen_material_out(instance, material_out_tracking, user=self.request.user)
|
||||||
instance.save()
|
|
||||||
rx = Route.objects.filter(
|
|
||||||
material_in=instance.material_in, material_out=instance.material_out,
|
|
||||||
process=process).exclude(id=instance.id).order_by("create_time").first()
|
|
||||||
if rx:
|
|
||||||
instance.from_route = rx
|
|
||||||
instance.save()
|
instance.save()
|
||||||
# msg = ""
|
rx = Route.objects.filter(
|
||||||
# if rx.routepack:
|
material_in=instance.material_in, material_out=instance.material_out,
|
||||||
# msg = rx.routepack.name
|
process=process).exclude(id=instance.id).order_by("create_time").first()
|
||||||
# raise ParseError(f"该工艺步骤已存在-{msg}")
|
if rx:
|
||||||
return instance
|
instance.from_route = rx
|
||||||
|
instance.save()
|
||||||
|
# msg = ""
|
||||||
|
# if rx.routepack:
|
||||||
|
# msg = rx.routepack.name
|
||||||
|
# raise ParseError(f"该工艺步骤已存在-{msg}")
|
||||||
|
return instance
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
validated_data.pop('material', None)
|
validated_data.pop('material', None)
|
||||||
|
@ -281,34 +281,34 @@ class RouteSerializer(CustomModelSerializer):
|
||||||
material_out_tracking = validated_data.pop("material_out_tracking", Material.MA_TRACKING_BATCH)
|
material_out_tracking = validated_data.pop("material_out_tracking", Material.MA_TRACKING_BATCH)
|
||||||
if material_out_tracking is None:
|
if material_out_tracking is None:
|
||||||
material_out_tracking = Material.MA_TRACKING_BATCH
|
material_out_tracking = Material.MA_TRACKING_BATCH
|
||||||
with transaction.atomic():
|
|
||||||
instance = super().update(instance, validated_data)
|
instance = super().update(instance, validated_data)
|
||||||
material_out = instance.material_out
|
material_out = instance.material_out
|
||||||
if material_out:
|
if material_out:
|
||||||
if material_out.process is None:
|
if material_out.process is None:
|
||||||
material_out.process = process
|
material_out.process = process
|
||||||
if material_out_tracking != material_out.tracking:
|
if material_out_tracking != material_out.tracking:
|
||||||
raise ParseError("物料跟踪类型不一致!请前往物料处修改")
|
raise ParseError("物料跟踪类型不一致!请前往物料处修改")
|
||||||
if material_out.parent is None and instance.material:
|
if material_out.parent is None and instance.material:
|
||||||
material_out.parent = instance.material
|
material_out.parent = instance.material
|
||||||
material_out.save()
|
material_out.save()
|
||||||
# elif material_out.process != process:
|
# elif material_out.process != process:
|
||||||
# raise ParseError('物料工序错误!请重新选择')
|
# raise ParseError('物料工序错误!请重新选择')
|
||||||
else:
|
else:
|
||||||
if instance.material:
|
if instance.material:
|
||||||
instance.material_out = RouteSerializer.gen_material_out(instance, material_out_tracking, user=self.request.user)
|
instance.material_out = RouteSerializer.gen_material_out(instance, material_out_tracking, user=self.request.user)
|
||||||
instance.save()
|
|
||||||
rx = Route.objects.filter(
|
|
||||||
material_in=instance.material_in, material_out=instance.material_out,
|
|
||||||
process=process).exclude(id=instance.id).order_by("create_time").first()
|
|
||||||
if rx:
|
|
||||||
instance.from_route = rx
|
|
||||||
instance.save()
|
instance.save()
|
||||||
# msg = ""
|
rx = Route.objects.filter(
|
||||||
# if rx.routepack:
|
material_in=instance.material_in, material_out=instance.material_out,
|
||||||
# msg = rx.routepack.name
|
process=process).exclude(id=instance.id).order_by("create_time").first()
|
||||||
# raise ParseError(f"该工艺步骤已存在-{msg}")
|
if rx:
|
||||||
return instance
|
instance.from_route = rx
|
||||||
|
instance.save()
|
||||||
|
# msg = ""
|
||||||
|
# if rx.routepack:
|
||||||
|
# msg = rx.routepack.name
|
||||||
|
# raise ParseError(f"该工艺步骤已存在-{msg}")
|
||||||
|
return instance
|
||||||
|
|
||||||
def to_representation(self, instance):
|
def to_representation(self, instance):
|
||||||
res = super().to_representation(instance)
|
res = super().to_representation(instance)
|
||||||
|
|
|
@ -41,7 +41,6 @@ class MaterialViewSet(CustomModelViewSet):
|
||||||
ordering_fields = ['name', 'model', 'specification',
|
ordering_fields = ['name', 'model', 'specification',
|
||||||
'type', 'process', 'process__sort', 'sort', 'id', 'number']
|
'type', 'process', 'process__sort', 'sort', 'id', 'number']
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
from apps.inm.models import MaterialBatch
|
from apps.inm.models import MaterialBatch
|
||||||
if MaterialBatch.objects.filter(material=instance).exists():
|
if MaterialBatch.objects.filter(material=instance).exists():
|
||||||
|
@ -368,9 +367,8 @@ class RouteViewSet(CustomModelViewSet):
|
||||||
select_related_fields = ['material',
|
select_related_fields = ['material',
|
||||||
'process', 'material_in', 'material_out', 'mgroup', 'routepack']
|
'process', 'material_in', 'material_out', 'mgroup', 'routepack']
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_update(self, serializer):
|
def perform_update(self, serializer):
|
||||||
ins:Route = self.get_object()
|
ins:Route = serializer.instance
|
||||||
if ins.from_route is not None:
|
if ins.from_route is not None:
|
||||||
raise ParseError('该工艺步骤引用其他步骤, 无法编辑')
|
raise ParseError('该工艺步骤引用其他步骤, 无法编辑')
|
||||||
old_m_in, old_m_out, process = ins.material_in, ins.material_out, ins.process
|
old_m_in, old_m_out, process = ins.material_in, ins.material_out, ins.process
|
||||||
|
|
|
@ -31,7 +31,6 @@ class UtaskSerializer(CustomModelSerializer):
|
||||||
"priority": {"required": False, "allow_null": True},
|
"priority": {"required": False, "allow_null": True},
|
||||||
}
|
}
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
if not validated_data.get('number', None):
|
if not validated_data.get('number', None):
|
||||||
validated_data["number"] = Utask.get_a_number()
|
validated_data["number"] = Utask.get_a_number()
|
||||||
|
|
|
@ -43,7 +43,6 @@ class PuPlanItemSerializer(CustomModelSerializer):
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
read_only_fields = EXCLUDE_FIELDS + ['pu_order']
|
read_only_fields = EXCLUDE_FIELDS + ['pu_order']
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
pu_plan = validated_data['pu_plan']
|
pu_plan = validated_data['pu_plan']
|
||||||
if pu_plan.state != PuPlan.PUPLAN_CREATE:
|
if pu_plan.state != PuPlan.PUPLAN_CREATE:
|
||||||
|
@ -65,7 +64,6 @@ class PuPlanItemSerializer(CustomModelSerializer):
|
||||||
else:
|
else:
|
||||||
validated_data['belong_dept'] = belong_dept
|
validated_data['belong_dept'] = belong_dept
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
validated_data.pop('pu_plan')
|
validated_data.pop('pu_plan')
|
||||||
pu_plan = instance.pu_plan
|
pu_plan = instance.pu_plan
|
||||||
|
@ -114,7 +112,6 @@ class PuOrderItemSerializer(CustomModelSerializer):
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
read_only_fields = EXCLUDE_FIELDS_BASE + ['delivered_count']
|
read_only_fields = EXCLUDE_FIELDS_BASE + ['delivered_count']
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
pu_order = validated_data['pu_order']
|
pu_order = validated_data['pu_order']
|
||||||
material = validated_data['material']
|
material = validated_data['material']
|
||||||
|
@ -126,7 +123,6 @@ class PuOrderItemSerializer(CustomModelSerializer):
|
||||||
PumService.cal_pu_order_total_price(pu_order)
|
PumService.cal_pu_order_total_price(pu_order)
|
||||||
return ins
|
return ins
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
validated_data.pop('material')
|
validated_data.pop('material')
|
||||||
validated_data.pop('pu_order')
|
validated_data.pop('pu_order')
|
||||||
|
|
|
@ -80,7 +80,6 @@ class PuPlanItemViewSet(CustomModelViewSet):
|
||||||
ordering_fields = ['create_time', 'material', 'need_date', 'need_count']
|
ordering_fields = ['create_time', 'material', 'need_date', 'need_count']
|
||||||
ordering = ['create_time']
|
ordering = ['create_time']
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
user = self.request.user
|
user = self.request.user
|
||||||
pu_plan = instance.pu_plan
|
pu_plan = instance.pu_plan
|
||||||
|
@ -104,7 +103,6 @@ class PuOrderViewSet(CustomModelViewSet):
|
||||||
search_fields = ['number', 'supplier__name', 'item_puorder__material__name', 'item_puorder__material__specification', 'item_puorder__material__model']
|
search_fields = ['number', 'supplier__name', 'item_puorder__material__name', 'item_puorder__material__specification', 'item_puorder__material__model']
|
||||||
select_related_fields = ['create_by', 'update_by', 'supplier']
|
select_related_fields = ['create_by', 'update_by', 'supplier']
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
if instance.state != PuOrder.PUORDER_CREATE:
|
if instance.state != PuOrder.PUORDER_CREATE:
|
||||||
raise ParseError('采购订单非创建中不可删除')
|
raise ParseError('采购订单非创建中不可删除')
|
||||||
|
@ -145,7 +143,6 @@ class PuOrderItemViewSet(CustomModelViewSet):
|
||||||
filterset_fields = ['material', 'pu_order']
|
filterset_fields = ['material', 'pu_order']
|
||||||
ordering = ['create_time']
|
ordering = ['create_time']
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
pu_order = instance.pu_order
|
pu_order = instance.pu_order
|
||||||
if pu_order.state != PuOrder.PUORDER_CREATE:
|
if pu_order.state != PuOrder.PUORDER_CREATE:
|
||||||
|
|
|
@ -353,13 +353,12 @@ class Ftest(CommonBDModel):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def init_by_qct(cls, qct, test_user, test_date):
|
def init_by_qct(cls, qct, test_user, test_date):
|
||||||
with transaction.atomic():
|
ftest = Ftest.objects.create(qct=qct, test_user=test_user, test_date=test_date)
|
||||||
ftest = Ftest.objects.create(qct=qct, test_user=test_user, test_date=test_date)
|
for testitem in qct.testitems.all():
|
||||||
for testitem in qct.testitems.all():
|
FtestItem.objects.create(ftest=ftest, testitem=testitem)
|
||||||
FtestItem.objects.create(ftest=ftest, testitem=testitem)
|
for defect in qct.defects.all():
|
||||||
for defect in qct.defects.all():
|
FtestDefect.objects.create(ftest=ftest, defect=defect)
|
||||||
FtestDefect.objects.create(ftest=ftest, defect=defect)
|
return ftest
|
||||||
return ftest
|
|
||||||
|
|
||||||
# @classmethod
|
# @classmethod
|
||||||
# def cal_count_notok(cls, ftestwork: FtestWork):
|
# def cal_count_notok(cls, ftestwork: FtestWork):
|
||||||
|
|
|
@ -215,34 +215,33 @@ class FtestWorkCreateUpdateSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
ftestworkdefect = validated_data.pop("ftestworkdefect", [])
|
ftestworkdefect = validated_data.pop("ftestworkdefect", [])
|
||||||
with transaction.atomic():
|
ins: FtestWork = super().create(validated_data)
|
||||||
ins: FtestWork = super().create(validated_data)
|
for ftestworkdefect in ftestworkdefect:
|
||||||
for ftestworkdefect in ftestworkdefect:
|
if ftestworkdefect['count'] > 0:
|
||||||
if ftestworkdefect['count'] > 0:
|
FtestworkDefect.objects.create(ftestwork=ins, **ftestworkdefect)
|
||||||
FtestworkDefect.objects.create(ftestwork=ins, **ftestworkdefect)
|
if ins.qct or ftestworkdefect:
|
||||||
if ins.qct or ftestworkdefect:
|
ins.cal_count()
|
||||||
ins.cal_count()
|
|
||||||
return ins
|
return ins
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
ftestworkdefect = validated_data.pop("ftestworkdefect", [])
|
ftestworkdefect = validated_data.pop("ftestworkdefect", [])
|
||||||
ins:FtestWork = super().update(instance, validated_data)
|
ins:FtestWork = super().update(instance, validated_data)
|
||||||
with transaction.atomic():
|
|
||||||
fd_ids = []
|
fd_ids = []
|
||||||
for item in ftestworkdefect:
|
for item in ftestworkdefect:
|
||||||
if item["count"] > 0:
|
if item["count"] > 0:
|
||||||
try:
|
try:
|
||||||
ins = FtestworkDefect.objects.get(ftestwork=ins, defect=item["defect"])
|
ins = FtestworkDefect.objects.get(ftestwork=ins, defect=item["defect"])
|
||||||
except FtestworkDefect.DoesNotExist:
|
except FtestworkDefect.DoesNotExist:
|
||||||
raise ParseError("新的缺陷项!")
|
raise ParseError("新的缺陷项!")
|
||||||
except FtestworkDefect.MultipleObjectsReturned:
|
except FtestworkDefect.MultipleObjectsReturned:
|
||||||
raise ParseError("缺陷项重复!")
|
raise ParseError("缺陷项重复!")
|
||||||
ins.count = item["count"]
|
ins.count = item["count"]
|
||||||
ins.save()
|
ins.save()
|
||||||
fd_ids.append(ins.id)
|
fd_ids.append(ins.id)
|
||||||
FtestworkDefect.objects.filter(ftestwork=ins).exclude(id__in=fd_ids).delete()
|
FtestworkDefect.objects.filter(ftestwork=ins).exclude(id__in=fd_ids).delete()
|
||||||
if ins.qct or ftestworkdefect:
|
if ins.qct or ftestworkdefect:
|
||||||
ins.cal_count()
|
ins.cal_count()
|
||||||
return ins
|
return ins
|
||||||
|
|
||||||
class FtestWorkSerializer(CustomModelSerializer):
|
class FtestWorkSerializer(CustomModelSerializer):
|
||||||
|
@ -292,24 +291,24 @@ class FtestSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
ftestitems = validated_data.pop('ftestitems', [])
|
ftestitems = validated_data.pop('ftestitems', [])
|
||||||
with transaction.atomic():
|
|
||||||
instance = super().create(validated_data)
|
instance = super().create(validated_data)
|
||||||
for item in ftestitems:
|
for item in ftestitems:
|
||||||
FtestItem.objects.create(ftest=instance, **item)
|
FtestItem.objects.create(ftest=instance, **item)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
validated_data.pop('ftest_work', None)
|
validated_data.pop('ftest_work', None)
|
||||||
ftestitems = validated_data.pop('ftestitems', [])
|
ftestitems = validated_data.pop('ftestitems', [])
|
||||||
with transaction.atomic():
|
|
||||||
instance = super().update(instance, validated_data)
|
instance = super().update(instance, validated_data)
|
||||||
for item in ftestitems:
|
for item in ftestitems:
|
||||||
id = item.get('id', None)
|
id = item.get('id', None)
|
||||||
if id:
|
if id:
|
||||||
ftestitem = FtestItem.objects.get(id=id)
|
ftestitem = FtestItem.objects.get(id=id)
|
||||||
ftestitem.test_val = item['test_val']
|
ftestitem.test_val = item['test_val']
|
||||||
ftestitem.check_val = item['check_val']
|
ftestitem.check_val = item['check_val']
|
||||||
ftestitem.save()
|
ftestitem.save()
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
@ -364,75 +363,75 @@ class FtestProcessSerializer(CustomModelSerializer):
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
ftestitems = validated_data.pop('ftestitems', [])
|
ftestitems = validated_data.pop('ftestitems', [])
|
||||||
ftestdefects = validated_data.pop('ftestdefects', [])
|
ftestdefects = validated_data.pop('ftestdefects', [])
|
||||||
with transaction.atomic():
|
|
||||||
instance = super().create(validated_data)
|
instance = super().create(validated_data)
|
||||||
for item in ftestitems:
|
for item in ftestitems:
|
||||||
FtestItem.objects.create(ftest=instance, **item)
|
FtestItem.objects.create(ftest=instance, **item)
|
||||||
is_ok = True
|
is_ok = True
|
||||||
defect_main = None
|
defect_main = None
|
||||||
has_is_main = False
|
has_is_main = False
|
||||||
for item2 in ftestdefects:
|
for item2 in ftestdefects:
|
||||||
defect:Defect = item2["defect"]
|
defect:Defect = item2["defect"]
|
||||||
if defect.okcate in [Defect.DEFECT_NOTOK] and item2["has"]:
|
if defect.okcate in [Defect.DEFECT_NOTOK] and item2["has"]:
|
||||||
is_ok = False
|
is_ok = False
|
||||||
if not has_is_main:
|
if not has_is_main:
|
||||||
item2["is_main"] = True
|
item2["is_main"] = True
|
||||||
has_is_main = True
|
has_is_main = True
|
||||||
defect_main = defect
|
defect_main = defect
|
||||||
else:
|
else:
|
||||||
item2["is_main"] = False
|
item2["is_main"] = False
|
||||||
FtestDefect.objects.create(ftest=instance, **item2)
|
FtestDefect.objects.create(ftest=instance, **item2)
|
||||||
if not is_ok:
|
if not is_ok:
|
||||||
instance.defect_main = defect_main
|
instance.defect_main = defect_main
|
||||||
else:
|
else:
|
||||||
instance.defect_main = None
|
instance.defect_main = None
|
||||||
instance.is_ok = is_ok
|
instance.is_ok = is_ok
|
||||||
instance.save()
|
instance.save()
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
ftestitems = validated_data.pop('ftestitems', [])
|
ftestitems = validated_data.pop('ftestitems', [])
|
||||||
ftestdefects = validated_data.pop('ftestdefects', [])
|
ftestdefects = validated_data.pop('ftestdefects', [])
|
||||||
with transaction.atomic():
|
|
||||||
instance = super().update(instance, validated_data)
|
instance = super().update(instance, validated_data)
|
||||||
for item in ftestitems:
|
for item in ftestitems:
|
||||||
try:
|
try:
|
||||||
ins = FtestItem.objects.get(testitem = item["testitem"], ftest=instance)
|
ins = FtestItem.objects.get(testitem = item["testitem"], ftest=instance)
|
||||||
except FtestItem.DoesNotExist:
|
except FtestItem.DoesNotExist:
|
||||||
ins = FtestItem.objects.create(ftest=instance, **item)
|
ins = FtestItem.objects.create(ftest=instance, **item)
|
||||||
for k, v in item.items():
|
for k, v in item.items():
|
||||||
setattr(ins, k, v)
|
setattr(ins, k, v)
|
||||||
ins.save()
|
ins.save()
|
||||||
is_ok = True
|
is_ok = True
|
||||||
defect_main = None
|
defect_main = None
|
||||||
has_is_main = False
|
has_is_main = False
|
||||||
for item2 in ftestdefects:
|
for item2 in ftestdefects:
|
||||||
try:
|
try:
|
||||||
ins:FtestDefect = FtestDefect.objects.get(ftest=instance, defect=item2["defect"])
|
ins:FtestDefect = FtestDefect.objects.get(ftest=instance, defect=item2["defect"])
|
||||||
except FtestDefect.MultipleObjectsReturned:
|
except FtestDefect.MultipleObjectsReturned:
|
||||||
myLogger.error(f"缺陷项重复!-ftestid:{instance.id}-defectid:{item2['defect'].id}")
|
myLogger.error(f"缺陷项重复!-ftestid:{instance.id}-defectid:{item2['defect'].id}")
|
||||||
raise ParseError("获取到重复的缺陷项!")
|
raise ParseError("获取到重复的缺陷项!")
|
||||||
except FtestDefect.DoesNotExist:
|
except FtestDefect.DoesNotExist:
|
||||||
ins = FtestDefect.objects.create(ftest=instance, **item2)
|
ins = FtestDefect.objects.create(ftest=instance, **item2)
|
||||||
for k, v in item2.items():
|
for k, v in item2.items():
|
||||||
setattr(ins, k, v)
|
setattr(ins, k, v)
|
||||||
ins.save()
|
ins.save()
|
||||||
if ins.is_main:
|
if ins.is_main:
|
||||||
|
has_is_main = True
|
||||||
|
defect_main = ins.defect
|
||||||
|
if ins.has and ins.defect.okcate in [Defect.DEFECT_NOTOK]:
|
||||||
|
is_ok = False
|
||||||
|
if not has_is_main:
|
||||||
|
ins.is_main = True
|
||||||
has_is_main = True
|
has_is_main = True
|
||||||
defect_main = ins.defect
|
defect_main = ins.defect
|
||||||
if ins.has and ins.defect.okcate in [Defect.DEFECT_NOTOK]:
|
else:
|
||||||
is_ok = False
|
ins.is_main = False
|
||||||
if not has_is_main:
|
ins.save()
|
||||||
ins.is_main = True
|
if not is_ok:
|
||||||
has_is_main = True
|
instance.defect_main = defect_main
|
||||||
defect_main = ins.defect
|
else:
|
||||||
else:
|
instance.defect_main = None
|
||||||
ins.is_main = False
|
instance.is_ok = is_ok
|
||||||
ins.save()
|
instance.save()
|
||||||
if not is_ok:
|
|
||||||
instance.defect_main = defect_main
|
|
||||||
else:
|
|
||||||
instance.defect_main = None
|
|
||||||
instance.is_ok = is_ok
|
|
||||||
instance.save()
|
|
||||||
return instance
|
return instance
|
|
@ -33,7 +33,6 @@ class DefectViewSet(CustomModelViewSet):
|
||||||
filterset_fields = ["cate", "okcate"]
|
filterset_fields = ["cate", "okcate"]
|
||||||
search_fields = ["name", "code"]
|
search_fields = ["name", "code"]
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
QctDefect.objects.filter(defect=instance).delete()
|
QctDefect.objects.filter(defect=instance).delete()
|
||||||
instance.delete()
|
instance.delete()
|
||||||
|
@ -93,7 +92,6 @@ class QctDefectViewSet(CustomModelViewSet):
|
||||||
filterset_fields = ["qct", "defect"]
|
filterset_fields = ["qct", "defect"]
|
||||||
ordering = ["qct", "sort"]
|
ordering = ["qct", "sort"]
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
ins: QctDefect = serializer.save()
|
ins: QctDefect = serializer.save()
|
||||||
if ins.is_default:
|
if ins.is_default:
|
||||||
|
@ -151,7 +149,6 @@ class TestItemViewSet(CustomModelViewSet):
|
||||||
item["affects_name"] = ";".join([affects_dict.get(x, '未知') for x in affects])
|
item["affects_name"] = ";".join([affects_dict.get(x, '未知') for x in affects])
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
QctTestItem.objects.filter(testitem=instance).delete()
|
QctTestItem.objects.filter(testitem=instance).delete()
|
||||||
instance.delete()
|
instance.delete()
|
||||||
|
@ -238,19 +235,16 @@ class FtestViewSet(CustomModelViewSet):
|
||||||
ftest_work.count_notok = all_count - ok_count
|
ftest_work.count_notok = all_count - ok_count
|
||||||
ftest_work.save()
|
ftest_work.save()
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
ins: Ftest = serializer.save()
|
ins: Ftest = serializer.save()
|
||||||
if ins.ftest_work:
|
if ins.ftest_work:
|
||||||
self.count_sampling(ins.ftest_work)
|
self.count_sampling(ins.ftest_work)
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_update(self, serializer):
|
def perform_update(self, serializer):
|
||||||
ins: Ftest = serializer.save()
|
ins: Ftest = serializer.save()
|
||||||
if ins.ftest_work:
|
if ins.ftest_work:
|
||||||
self.count_sampling(ins.ftest_work)
|
self.count_sampling(ins.ftest_work)
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
ftest_work = instance.ftest_work
|
ftest_work = instance.ftest_work
|
||||||
instance.delete()
|
instance.delete()
|
||||||
|
@ -284,27 +278,32 @@ class FtestWorkViewSet(CustomModelViewSet):
|
||||||
select_related_fields = ['material', 'mb', 'mb__material']
|
select_related_fields = ['material', 'mb', 'mb__material']
|
||||||
filterset_class = FtestWorkFilter
|
filterset_class = FtestWorkFilter
|
||||||
|
|
||||||
|
@transaction.atomic
|
||||||
def update(self, request, *args, **kwargs):
|
def update(self, request, *args, **kwargs):
|
||||||
ins:FtestWork = self.get_object()
|
ins:FtestWork = self.get_object()
|
||||||
|
partial = kwargs.pop('partial', False)
|
||||||
if ins.submit_time is not None:
|
if ins.submit_time is not None:
|
||||||
raise ParseError('已提交无法修改')
|
raise ParseError('已提交无法修改')
|
||||||
if ins.ticket and ins.ticket.state.type != State.STATE_TYPE_START:
|
if ins.ticket and ins.ticket.state.type != State.STATE_TYPE_START:
|
||||||
raise ParseError('审批单已进行,无法修改')
|
raise ParseError('审批单已进行,无法修改')
|
||||||
x = super().update(request, *args, **kwargs)
|
serializer = self.get_serializer(ins, data=request.data, partial=partial)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
self.perform_update(serializer)
|
||||||
# 触发批次统计分析
|
# 触发批次统计分析
|
||||||
ana_batch_thread(xbatchs=[ins.batch])
|
ana_batch_thread(xbatchs=[ins.batch])
|
||||||
return x
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
@transaction.atomic
|
||||||
def destroy(self, request, *args, **kwargs):
|
def destroy(self, request, *args, **kwargs):
|
||||||
ins:FtestWork = self.get_object()
|
ins:FtestWork = self.get_object()
|
||||||
if ins.submit_time is not None:
|
if ins.submit_time is not None:
|
||||||
raise ParseError('已提交无法删除')
|
raise ParseError('已提交无法删除')
|
||||||
if ins.ticket:
|
if ins.ticket:
|
||||||
raise ParseError('存在审批, 无法删除')
|
raise ParseError('存在审批, 无法删除')
|
||||||
x = super().destroy(request, *args, **kwargs)
|
self.perform_destroy(ins)
|
||||||
# 触发批次统计分析
|
# 触发批次统计分析
|
||||||
ana_batch_thread(xbatchs=[ins.batch])
|
ana_batch_thread(xbatchs=[ins.batch])
|
||||||
return x
|
return Response(status=204)
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
ins = serializer.save()
|
ins = serializer.save()
|
||||||
|
|
|
@ -65,7 +65,6 @@ class OrderViewSet(CustomModelViewSet):
|
||||||
"state": ["exact", "in"],
|
"state": ["exact", "in"],
|
||||||
}
|
}
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
if instance.state != Order.ORDER_CREATE:
|
if instance.state != Order.ORDER_CREATE:
|
||||||
raise ParseError('订单非创建中不可删除')
|
raise ParseError('订单非创建中不可删除')
|
||||||
|
|
Loading…
Reference in New Issue