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)
|
||||
return mioitemw
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, validated_data):
|
||||
wpr: Wpr = validated_data.get("wpr", None)
|
||||
if wpr:
|
||||
|
@ -58,7 +57,6 @@ class MIOItemwCreateUpdateSerializer(CustomModelSerializer):
|
|||
mioitemw = self.save_ftest(mioitemw, ftest_data)
|
||||
return mioitemw
|
||||
|
||||
@transaction.atomic
|
||||
def update(self, instance, validated_data):
|
||||
validated_data.pop("mioitem")
|
||||
ftest_data = validated_data.pop("ftest", None)
|
||||
|
|
|
@ -246,7 +246,7 @@ class RouteSerializer(CustomModelSerializer):
|
|||
# material = validated_data.get('material', None)
|
||||
# if material and process and Route.objects.filter(material=material, process=process).exists():
|
||||
# raise ValidationError('已选择该工序!!')
|
||||
with transaction.atomic():
|
||||
|
||||
instance:Route = super().create(validated_data)
|
||||
material_out = instance.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)
|
||||
if material_out_tracking is None:
|
||||
material_out_tracking = Material.MA_TRACKING_BATCH
|
||||
with transaction.atomic():
|
||||
|
||||
instance = super().update(instance, validated_data)
|
||||
material_out = instance.material_out
|
||||
if material_out:
|
||||
|
|
|
@ -41,7 +41,6 @@ class MaterialViewSet(CustomModelViewSet):
|
|||
ordering_fields = ['name', 'model', 'specification',
|
||||
'type', 'process', 'process__sort', 'sort', 'id', 'number']
|
||||
|
||||
@transaction.atomic
|
||||
def perform_destroy(self, instance):
|
||||
from apps.inm.models import MaterialBatch
|
||||
if MaterialBatch.objects.filter(material=instance).exists():
|
||||
|
@ -368,9 +367,8 @@ class RouteViewSet(CustomModelViewSet):
|
|||
select_related_fields = ['material',
|
||||
'process', 'material_in', 'material_out', 'mgroup', 'routepack']
|
||||
|
||||
@transaction.atomic
|
||||
def perform_update(self, serializer):
|
||||
ins:Route = self.get_object()
|
||||
ins:Route = serializer.instance
|
||||
if ins.from_route is not None:
|
||||
raise ParseError('该工艺步骤引用其他步骤, 无法编辑')
|
||||
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},
|
||||
}
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, validated_data):
|
||||
if not validated_data.get('number', None):
|
||||
validated_data["number"] = Utask.get_a_number()
|
||||
|
|
|
@ -43,7 +43,6 @@ class PuPlanItemSerializer(CustomModelSerializer):
|
|||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS + ['pu_order']
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, validated_data):
|
||||
pu_plan = validated_data['pu_plan']
|
||||
if pu_plan.state != PuPlan.PUPLAN_CREATE:
|
||||
|
@ -65,7 +64,6 @@ class PuPlanItemSerializer(CustomModelSerializer):
|
|||
else:
|
||||
validated_data['belong_dept'] = belong_dept
|
||||
|
||||
@transaction.atomic
|
||||
def update(self, instance, validated_data):
|
||||
validated_data.pop('pu_plan')
|
||||
pu_plan = instance.pu_plan
|
||||
|
@ -114,7 +112,6 @@ class PuOrderItemSerializer(CustomModelSerializer):
|
|||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS_BASE + ['delivered_count']
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, validated_data):
|
||||
pu_order = validated_data['pu_order']
|
||||
material = validated_data['material']
|
||||
|
@ -126,7 +123,6 @@ class PuOrderItemSerializer(CustomModelSerializer):
|
|||
PumService.cal_pu_order_total_price(pu_order)
|
||||
return ins
|
||||
|
||||
@transaction.atomic
|
||||
def update(self, instance, validated_data):
|
||||
validated_data.pop('material')
|
||||
validated_data.pop('pu_order')
|
||||
|
|
|
@ -80,7 +80,6 @@ class PuPlanItemViewSet(CustomModelViewSet):
|
|||
ordering_fields = ['create_time', 'material', 'need_date', 'need_count']
|
||||
ordering = ['create_time']
|
||||
|
||||
@transaction.atomic
|
||||
def perform_destroy(self, instance):
|
||||
user = self.request.user
|
||||
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']
|
||||
select_related_fields = ['create_by', 'update_by', 'supplier']
|
||||
|
||||
@transaction.atomic
|
||||
def perform_destroy(self, instance):
|
||||
if instance.state != PuOrder.PUORDER_CREATE:
|
||||
raise ParseError('采购订单非创建中不可删除')
|
||||
|
@ -145,7 +143,6 @@ class PuOrderItemViewSet(CustomModelViewSet):
|
|||
filterset_fields = ['material', 'pu_order']
|
||||
ordering = ['create_time']
|
||||
|
||||
@transaction.atomic
|
||||
def perform_destroy(self, instance):
|
||||
pu_order = instance.pu_order
|
||||
if pu_order.state != PuOrder.PUORDER_CREATE:
|
||||
|
|
|
@ -353,7 +353,6 @@ class Ftest(CommonBDModel):
|
|||
|
||||
@classmethod
|
||||
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)
|
||||
for testitem in qct.testitems.all():
|
||||
FtestItem.objects.create(ftest=ftest, testitem=testitem)
|
||||
|
|
|
@ -215,7 +215,6 @@ class FtestWorkCreateUpdateSerializer(CustomModelSerializer):
|
|||
|
||||
def create(self, validated_data):
|
||||
ftestworkdefect = validated_data.pop("ftestworkdefect", [])
|
||||
with transaction.atomic():
|
||||
ins: FtestWork = super().create(validated_data)
|
||||
for ftestworkdefect in ftestworkdefect:
|
||||
if ftestworkdefect['count'] > 0:
|
||||
|
@ -227,7 +226,7 @@ class FtestWorkCreateUpdateSerializer(CustomModelSerializer):
|
|||
def update(self, instance, validated_data):
|
||||
ftestworkdefect = validated_data.pop("ftestworkdefect", [])
|
||||
ins:FtestWork = super().update(instance, validated_data)
|
||||
with transaction.atomic():
|
||||
|
||||
fd_ids = []
|
||||
for item in ftestworkdefect:
|
||||
if item["count"] > 0:
|
||||
|
@ -292,7 +291,7 @@ class FtestSerializer(CustomModelSerializer):
|
|||
|
||||
def create(self, validated_data):
|
||||
ftestitems = validated_data.pop('ftestitems', [])
|
||||
with transaction.atomic():
|
||||
|
||||
instance = super().create(validated_data)
|
||||
for item in ftestitems:
|
||||
FtestItem.objects.create(ftest=instance, **item)
|
||||
|
@ -301,7 +300,7 @@ class FtestSerializer(CustomModelSerializer):
|
|||
def update(self, instance, validated_data):
|
||||
validated_data.pop('ftest_work', None)
|
||||
ftestitems = validated_data.pop('ftestitems', [])
|
||||
with transaction.atomic():
|
||||
|
||||
instance = super().update(instance, validated_data)
|
||||
for item in ftestitems:
|
||||
id = item.get('id', None)
|
||||
|
@ -364,7 +363,7 @@ class FtestProcessSerializer(CustomModelSerializer):
|
|||
def create(self, validated_data):
|
||||
ftestitems = validated_data.pop('ftestitems', [])
|
||||
ftestdefects = validated_data.pop('ftestdefects', [])
|
||||
with transaction.atomic():
|
||||
|
||||
instance = super().create(validated_data)
|
||||
for item in ftestitems:
|
||||
FtestItem.objects.create(ftest=instance, **item)
|
||||
|
@ -393,7 +392,7 @@ class FtestProcessSerializer(CustomModelSerializer):
|
|||
def update(self, instance, validated_data):
|
||||
ftestitems = validated_data.pop('ftestitems', [])
|
||||
ftestdefects = validated_data.pop('ftestdefects', [])
|
||||
with transaction.atomic():
|
||||
|
||||
instance = super().update(instance, validated_data)
|
||||
for item in ftestitems:
|
||||
try:
|
||||
|
|
|
@ -33,7 +33,6 @@ class DefectViewSet(CustomModelViewSet):
|
|||
filterset_fields = ["cate", "okcate"]
|
||||
search_fields = ["name", "code"]
|
||||
|
||||
@transaction.atomic
|
||||
def perform_destroy(self, instance):
|
||||
QctDefect.objects.filter(defect=instance).delete()
|
||||
instance.delete()
|
||||
|
@ -93,7 +92,6 @@ class QctDefectViewSet(CustomModelViewSet):
|
|||
filterset_fields = ["qct", "defect"]
|
||||
ordering = ["qct", "sort"]
|
||||
|
||||
@transaction.atomic
|
||||
def perform_create(self, serializer):
|
||||
ins: QctDefect = serializer.save()
|
||||
if ins.is_default:
|
||||
|
@ -151,7 +149,6 @@ class TestItemViewSet(CustomModelViewSet):
|
|||
item["affects_name"] = ";".join([affects_dict.get(x, '未知') for x in affects])
|
||||
return data
|
||||
|
||||
@transaction.atomic
|
||||
def perform_destroy(self, instance):
|
||||
QctTestItem.objects.filter(testitem=instance).delete()
|
||||
instance.delete()
|
||||
|
@ -238,19 +235,16 @@ class FtestViewSet(CustomModelViewSet):
|
|||
ftest_work.count_notok = all_count - ok_count
|
||||
ftest_work.save()
|
||||
|
||||
@transaction.atomic
|
||||
def perform_create(self, serializer):
|
||||
ins: Ftest = serializer.save()
|
||||
if ins.ftest_work:
|
||||
self.count_sampling(ins.ftest_work)
|
||||
|
||||
@transaction.atomic
|
||||
def perform_update(self, serializer):
|
||||
ins: Ftest = serializer.save()
|
||||
if ins.ftest_work:
|
||||
self.count_sampling(ins.ftest_work)
|
||||
|
||||
@transaction.atomic
|
||||
def perform_destroy(self, instance):
|
||||
ftest_work = instance.ftest_work
|
||||
instance.delete()
|
||||
|
@ -284,27 +278,32 @@ class FtestWorkViewSet(CustomModelViewSet):
|
|||
select_related_fields = ['material', 'mb', 'mb__material']
|
||||
filterset_class = FtestWorkFilter
|
||||
|
||||
@transaction.atomic
|
||||
def update(self, request, *args, **kwargs):
|
||||
ins:FtestWork = self.get_object()
|
||||
partial = kwargs.pop('partial', False)
|
||||
if ins.submit_time is not None:
|
||||
raise ParseError('已提交无法修改')
|
||||
if ins.ticket and ins.ticket.state.type != State.STATE_TYPE_START:
|
||||
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])
|
||||
return x
|
||||
return Response(serializer.data)
|
||||
|
||||
@transaction.atomic
|
||||
def destroy(self, request, *args, **kwargs):
|
||||
ins:FtestWork = self.get_object()
|
||||
if ins.submit_time is not None:
|
||||
raise ParseError('已提交无法删除')
|
||||
if ins.ticket:
|
||||
raise ParseError('存在审批, 无法删除')
|
||||
x = super().destroy(request, *args, **kwargs)
|
||||
self.perform_destroy(ins)
|
||||
# 触发批次统计分析
|
||||
ana_batch_thread(xbatchs=[ins.batch])
|
||||
return x
|
||||
return Response(status=204)
|
||||
|
||||
def perform_create(self, serializer):
|
||||
ins = serializer.save()
|
||||
|
|
|
@ -65,7 +65,6 @@ class OrderViewSet(CustomModelViewSet):
|
|||
"state": ["exact", "in"],
|
||||
}
|
||||
|
||||
@transaction.atomic
|
||||
def perform_destroy(self, instance):
|
||||
if instance.state != Order.ORDER_CREATE:
|
||||
raise ParseError('订单非创建中不可删除')
|
||||
|
|
Loading…
Reference in New Issue