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,7 +246,7 @@ 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:
|
||||||
|
@ -281,7 +281,7 @@ 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:
|
||||||
|
|
|
@ -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,7 +353,6 @@ 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)
|
||||||
|
|
|
@ -215,7 +215,6 @@ 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:
|
||||||
|
@ -227,7 +226,7 @@ class FtestWorkCreateUpdateSerializer(CustomModelSerializer):
|
||||||
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:
|
||||||
|
@ -292,7 +291,7 @@ 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)
|
||||||
|
@ -301,7 +300,7 @@ class FtestSerializer(CustomModelSerializer):
|
||||||
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)
|
||||||
|
@ -364,7 +363,7 @@ 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)
|
||||||
|
@ -393,7 +392,7 @@ class FtestProcessSerializer(CustomModelSerializer):
|
||||||
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:
|
||||||
|
|
|
@ -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