feat: wpm 取消 transaction
This commit is contained in:
parent
90b7e2087b
commit
527e6c0fc2
|
@ -738,7 +738,6 @@ class BatchSt(BaseModel):
|
||||||
# return ins, True
|
# return ins, True
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@transaction.atomic
|
|
||||||
def init_dag(cls, batch:str):
|
def init_dag(cls, batch:str):
|
||||||
"""
|
"""
|
||||||
更新批次数据关系链(初步)
|
更新批次数据关系链(初步)
|
||||||
|
|
|
@ -885,7 +885,6 @@ class MlogbwCreateUpdateSerializer(CustomModelSerializer):
|
||||||
ftest_sr.update(instance=ftest, validated_data=ftest_data)
|
ftest_sr.update(instance=ftest, validated_data=ftest_data)
|
||||||
return mlogbw
|
return mlogbw
|
||||||
|
|
||||||
@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:
|
||||||
|
@ -898,7 +897,6 @@ class MlogbwCreateUpdateSerializer(CustomModelSerializer):
|
||||||
mlogbw = self.save_ftest(mlogbw, ftest_data)
|
mlogbw = self.save_ftest(mlogbw, ftest_data)
|
||||||
return mlogbw
|
return mlogbw
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
validated_data.pop("mlogb")
|
validated_data.pop("mlogb")
|
||||||
ftest_data = validated_data.pop("ftest", None)
|
ftest_data = validated_data.pop("ftest", None)
|
||||||
|
@ -1078,7 +1076,6 @@ class MlogbOutUpdateSerializer(CustomModelSerializer):
|
||||||
# else:
|
# else:
|
||||||
# raise ParseError("mlogbdefect仅支持批次件")
|
# raise ParseError("mlogbdefect仅支持批次件")
|
||||||
# return ins
|
# return ins
|
||||||
@transaction.atomic
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
mlogbdefect = validated_data.pop("mlogbdefect", None)
|
mlogbdefect = validated_data.pop("mlogbdefect", None)
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
|
|
|
@ -37,7 +37,6 @@ from django.db.models import Q
|
||||||
from apps.utils.tools import convert_ordereddict, update_dict
|
from apps.utils.tools import convert_ordereddict, update_dict
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from apps.utils.lock import lock_model_record_d_method
|
|
||||||
from apps.em.models import Equipment
|
from apps.em.models import Equipment
|
||||||
from django.db.models import Prefetch
|
from django.db.models import Prefetch
|
||||||
from drf_yasg.utils import swagger_auto_schema
|
from drf_yasg.utils import swagger_auto_schema
|
||||||
|
@ -155,7 +154,6 @@ class WMaterialViewSet(ListModelMixin, CustomGenericViewSet):
|
||||||
return queryset.exclude(state=WMaterial.WM_SCRAP)
|
return queryset.exclude(state=WMaterial.WM_SCRAP)
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=DeptBatchSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=DeptBatchSerializer)
|
||||||
@transaction.atomic
|
|
||||||
def batchs(self, request):
|
def batchs(self, request):
|
||||||
"""获取车间的批次号(废弃)
|
"""获取车间的批次号(废弃)
|
||||||
|
|
||||||
|
@ -282,7 +280,6 @@ class MlogViewSet(CustomModelViewSet):
|
||||||
item["mlogbw_number_list"] = wpr_dict.get(item["id"], None)
|
item["mlogbw_number_list"] = wpr_dict.get(item["id"], None)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@lock_model_record_d_method(Mlog)
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
if instance.submit_time is not None:
|
if instance.submit_time is not None:
|
||||||
raise ParseError('日志已提交不可变动')
|
raise ParseError('日志已提交不可变动')
|
||||||
|
@ -295,7 +292,6 @@ class MlogViewSet(CustomModelViewSet):
|
||||||
instance.delete()
|
instance.delete()
|
||||||
Ftest.objects.filter(id__in=ftestIds).delete()
|
Ftest.objects.filter(id__in=ftestIds).delete()
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_update(self, serializer):
|
def perform_update(self, serializer):
|
||||||
ins = serializer.instance
|
ins = serializer.instance
|
||||||
if ins.ticket and ins.ticket.state != State.STATE_TYPE_START:
|
if ins.ticket and ins.ticket.state != State.STATE_TYPE_START:
|
||||||
|
@ -318,7 +314,9 @@ class MlogViewSet(CustomModelViewSet):
|
||||||
ins = sr.save()
|
ins = sr.save()
|
||||||
return Response(MlogSerializer(ins).data)
|
return Response(MlogSerializer(ins).data)
|
||||||
|
|
||||||
@action(methods=['post'], detail=True, perms_map={'post': 'mlog.update'}, serializer_class=MlogChangeSerializer)
|
@action(methods=['post'], detail=True,
|
||||||
|
perms_map={'post': 'mlog.update'},
|
||||||
|
serializer_class=MlogChangeSerializer, requires_transaction=True)
|
||||||
def change(self, request, *args, **kwargs):
|
def change(self, request, *args, **kwargs):
|
||||||
"""修改日志
|
"""修改日志
|
||||||
|
|
||||||
|
@ -334,7 +332,8 @@ class MlogViewSet(CustomModelViewSet):
|
||||||
sr.save()
|
sr.save()
|
||||||
return Response(MlogSerializer(ins).data)
|
return Response(MlogSerializer(ins).data)
|
||||||
|
|
||||||
@action(methods=['post'], detail=True, perms_map={'post': 'mlog.submit'}, serializer_class=Serializer)
|
@action(methods=['post'], detail=True, perms_map={'post': 'mlog.submit'},
|
||||||
|
serializer_class=Serializer, requires_transaction=True)
|
||||||
def submit(self, request, *args, **kwargs):
|
def submit(self, request, *args, **kwargs):
|
||||||
"""日志提交(变动车间库存)
|
"""日志提交(变动车间库存)
|
||||||
|
|
||||||
|
@ -349,20 +348,11 @@ class MlogViewSet(CustomModelViewSet):
|
||||||
if p.mlog_need_ticket:
|
if p.mlog_need_ticket:
|
||||||
raise ParseError('该日志需要审批!')
|
raise ParseError('该日志需要审批!')
|
||||||
mlog_submit_validate(ins)
|
mlog_submit_validate(ins)
|
||||||
with transaction.atomic():
|
mlog_submit(ins, self.request.user, now)
|
||||||
updated_count = Mlog.objects.filter(id=ins.id, submit_time__isnull=True).update(
|
vdata_new = MlogSerializer(ins).data
|
||||||
submit_time=now, submit_user=request.user, update_by=request.user)
|
|
||||||
if updated_count == 1:
|
|
||||||
mlog_submit(ins, self.request.user, now)
|
|
||||||
else:
|
|
||||||
raise ParseError('记录正在处理中,请稍后再试')
|
|
||||||
|
|
||||||
vdata_new = MlogSerializer(ins).data
|
|
||||||
# create_auditlog('submit', ins, vdata_new,
|
|
||||||
# vdata_old, now, self.request.user)
|
|
||||||
return Response(vdata_new)
|
return Response(vdata_new)
|
||||||
|
|
||||||
@action(methods=['post'], detail=True, perms_map={'post': 'mlog.submit'}, serializer_class=MlogRevertSerializer)
|
@action(methods=['post'], detail=True, perms_map={'post': 'mlog.submit'}, serializer_class=MlogRevertSerializer, requires_transaction=True)
|
||||||
def revert(self, request, *args, **kwargs):
|
def revert(self, request, *args, **kwargs):
|
||||||
"""撤回日志提交
|
"""撤回日志提交
|
||||||
|
|
||||||
|
@ -377,20 +367,10 @@ class MlogViewSet(CustomModelViewSet):
|
||||||
if user != ins.submit_user:
|
if user != ins.submit_user:
|
||||||
raise ParseError('非提交人不可撤销!')
|
raise ParseError('非提交人不可撤销!')
|
||||||
now = timezone.now()
|
now = timezone.now()
|
||||||
with transaction.atomic():
|
mlog_revert(ins, user, now)
|
||||||
updated_count = Mlog.objects.filter(id=ins.id, submit_time__isnull=False).update(
|
|
||||||
submit_time=None, update_time=now, submit_user=None, update_by=request.user)
|
|
||||||
if updated_count == 1:
|
|
||||||
mlog_revert(ins, user, now)
|
|
||||||
else:
|
|
||||||
raise ParseError('记录正在处理中,请稍后再试')
|
|
||||||
|
|
||||||
# create_auditlog('revert', ins, {}, {}, now, user,
|
|
||||||
# request.data.get('change_reason', ''))
|
|
||||||
return Response(MlogSerializer(instance=ins).data)
|
return Response(MlogSerializer(instance=ins).data)
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MlogRelatedSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MlogRelatedSerializer)
|
||||||
@transaction.atomic
|
|
||||||
def related_first(self, request, *args, **kwargs):
|
def related_first(self, request, *args, **kwargs):
|
||||||
"""获取相关任务的第一道工序日志
|
"""获取相关任务的第一道工序日志
|
||||||
|
|
||||||
|
@ -453,8 +433,7 @@ class MlogViewSet(CustomModelViewSet):
|
||||||
res[i] = 0
|
res[i] = 0
|
||||||
return Response(res)
|
return Response(res)
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': 'mlog.create'}, serializer_class=MlogQuickSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post': 'mlog.create'}, serializer_class=MlogQuickSerializer, requires_transaction=True)
|
||||||
@transaction.atomic
|
|
||||||
def quick(self, request, *args, **kwargs):
|
def quick(self, request, *args, **kwargs):
|
||||||
"""快速创建日志
|
"""快速创建日志
|
||||||
|
|
||||||
|
@ -508,8 +487,7 @@ class HandoverViewSet(CustomModelViewSet):
|
||||||
'material__number', 'material__specification', 'batch', 'material__model', 'b_handover__batch', "new_batch", "wm__batch"]
|
'material__number', 'material__specification', 'batch', 'material__model', 'b_handover__batch', "new_batch", "wm__batch"]
|
||||||
prefetch_related_fields = ["b_handover"]
|
prefetch_related_fields = ["b_handover"]
|
||||||
|
|
||||||
@lock_model_record_d_method(Handover)
|
def perform_destroy(self, instance):
|
||||||
def perform_destroy(self, instance:Handover):
|
|
||||||
user = self.request.user
|
user = self.request.user
|
||||||
if instance.submit_time is not None:
|
if instance.submit_time is not None:
|
||||||
raise ParseError('该交接记录已提交不可删除')
|
raise ParseError('该交接记录已提交不可删除')
|
||||||
|
@ -520,9 +498,8 @@ class HandoverViewSet(CustomModelViewSet):
|
||||||
ticket.delete()
|
ticket.delete()
|
||||||
instance.delete()
|
instance.delete()
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_update(self, serializer):
|
def perform_update(self, serializer):
|
||||||
ins:Handover = self.get_object()
|
ins:Handover = serializer.instance
|
||||||
if ins.submit_time is not None:
|
if ins.submit_time is not None:
|
||||||
raise ParseError('该交接记录已提交!')
|
raise ParseError('该交接记录已提交!')
|
||||||
ticket:Ticket = ins.ticket
|
ticket:Ticket = ins.ticket
|
||||||
|
@ -530,8 +507,7 @@ class HandoverViewSet(CustomModelViewSet):
|
||||||
raise ParseError("该交接记录存在审批,不可修改")
|
raise ParseError("该交接记录存在审批,不可修改")
|
||||||
serializer.save()
|
serializer.save()
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': 'handover.create'}, serializer_class=HandoverSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post': 'handover.create'}, serializer_class=HandoverSerializer, requires_transaction=True)
|
||||||
@transaction.atomic
|
|
||||||
def create_and_submit(self, request, *args, **kwargs):
|
def create_and_submit(self, request, *args, **kwargs):
|
||||||
user = request.user
|
user = request.user
|
||||||
sr = HandoverSerializer(data=request.data, context={'request': request})
|
sr = HandoverSerializer(data=request.data, context={'request': request})
|
||||||
|
@ -546,8 +522,7 @@ class HandoverViewSet(CustomModelViewSet):
|
||||||
handover_submit(ins, user, None)
|
handover_submit(ins, user, None)
|
||||||
return Response({"id": ins.id})
|
return Response({"id": ins.id})
|
||||||
|
|
||||||
@action(methods=['post'], detail=True, perms_map={'post': 'handover.submit'}, serializer_class=Serializer)
|
@action(methods=['post'], detail=True, perms_map={'post': 'handover.submit'}, serializer_class=Serializer, requires_transaction=True)
|
||||||
@transaction.atomic
|
|
||||||
def submit(self, request, *args, **kwargs):
|
def submit(self, request, *args, **kwargs):
|
||||||
"""交接记录提交(变动车间库存)
|
"""交接记录提交(变动车间库存)
|
||||||
|
|
||||||
|
@ -567,8 +542,7 @@ class HandoverViewSet(CustomModelViewSet):
|
||||||
handover_submit(ins, user, None)
|
handover_submit(ins, user, None)
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
@action(methods=['post'], detail=True, perms_map={'post': 'handover.submit'}, serializer_class=Serializer)
|
@action(methods=['post'], detail=True, perms_map={'post': 'handover.submit'}, serializer_class=Serializer, requires_transaction=True)
|
||||||
@transaction.atomic
|
|
||||||
def revert(self, request, *args, **kwargs):
|
def revert(self, request, *args, **kwargs):
|
||||||
"""交接记录撤回(变动车间库存)
|
"""交接记录撤回(变动车间库存)
|
||||||
|
|
||||||
|
@ -580,7 +554,6 @@ class HandoverViewSet(CustomModelViewSet):
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=HandoverMgroupSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=HandoverMgroupSerializer)
|
||||||
@transaction.atomic
|
|
||||||
def mgroups(self, request, *args, **kwargs):
|
def mgroups(self, request, *args, **kwargs):
|
||||||
"""获取可交接到的工段
|
"""获取可交接到的工段
|
||||||
|
|
||||||
|
@ -602,8 +575,7 @@ class HandoverViewSet(CustomModelViewSet):
|
||||||
m_qs = m_qs.filter(process=None)
|
m_qs = m_qs.filter(process=None)
|
||||||
return Response(list(m_qs.values('id', 'name').distinct()))
|
return Response(list(m_qs.values('id', 'name').distinct()))
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': 'handover.create'}, serializer_class=GenHandoverWmSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post': 'handover.create'}, serializer_class=GenHandoverWmSerializer, requires_transaction=True)
|
||||||
@transaction.atomic
|
|
||||||
def gen_by_wm(self, request):
|
def gen_by_wm(self, request):
|
||||||
"""从车间库存生成交接记录(废弃)
|
"""从车间库存生成交接记录(废弃)
|
||||||
|
|
||||||
|
@ -632,8 +604,7 @@ class HandoverViewSet(CustomModelViewSet):
|
||||||
)
|
)
|
||||||
return Response({'handover': handover.id})
|
return Response({'handover': handover.id})
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': 'handover.create'}, serializer_class=GenHandoverSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post': 'handover.create'}, serializer_class=GenHandoverSerializer, requires_transaction=True)
|
||||||
@transaction.atomic
|
|
||||||
def gen_by_mlog(self, request):
|
def gen_by_mlog(self, request):
|
||||||
"""从生产日志生成交接记录(废弃)
|
"""从生产日志生成交接记录(废弃)
|
||||||
|
|
||||||
|
@ -708,7 +679,6 @@ class MlogbInViewSet(CreateModelMixin, UpdateModelMixin, DestroyModelMixin, Cust
|
||||||
serializer_class = MlogbInSerializer
|
serializer_class = MlogbInSerializer
|
||||||
update_serializer_class = MlogbInUpdateSerializer
|
update_serializer_class = MlogbInUpdateSerializer
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
ins: Mlogb = instance
|
ins: Mlogb = instance
|
||||||
if ins.mlog.submit_time is not None:
|
if ins.mlog.submit_time is not None:
|
||||||
|
@ -716,7 +686,6 @@ class MlogbInViewSet(CreateModelMixin, UpdateModelMixin, DestroyModelMixin, Cust
|
||||||
ins.delete()
|
ins.delete()
|
||||||
ins.mlog.cal_mlog_count_from_mlogb()
|
ins.mlog.cal_mlog_count_from_mlogb()
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_update(self, serializer):
|
def perform_update(self, serializer):
|
||||||
ins:Mlogb = serializer.save()
|
ins:Mlogb = serializer.save()
|
||||||
ins.mlog.cal_mlog_count_from_mlogb()
|
ins.mlog.cal_mlog_count_from_mlogb()
|
||||||
|
@ -883,7 +852,7 @@ class MlogbInViewSet(CreateModelMixin, UpdateModelMixin, DestroyModelMixin, Cust
|
||||||
raise ParseError("不支持生成产出物料!")
|
raise ParseError("不支持生成产出物料!")
|
||||||
mlog.cal_mlog_count_from_mlogb()
|
mlog.cal_mlog_count_from_mlogb()
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
mlogbin: Mlogb = serializer.save()
|
mlogbin: Mlogb = serializer.save()
|
||||||
MlogbInViewSet.p_create_after(mlogbin)
|
MlogbInViewSet.p_create_after(mlogbin)
|
||||||
|
@ -925,7 +894,6 @@ class MlogbOutViewSet(UpdateModelMixin, CustomGenericViewSet):
|
||||||
queryset = Mlogb.objects.filter(material_out__isnull=False)
|
queryset = Mlogb.objects.filter(material_out__isnull=False)
|
||||||
serializer_class = MlogbOutUpdateSerializer
|
serializer_class = MlogbOutUpdateSerializer
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_update(self, serializer):
|
def perform_update(self, serializer):
|
||||||
material_out = serializer.validated_data.get('material_out')
|
material_out = serializer.validated_data.get('material_out')
|
||||||
if material_out and material_out.tracking == Material.MA_TRACKING_SINGLE:
|
if material_out and material_out.tracking == Material.MA_TRACKING_SINGLE:
|
||||||
|
@ -985,7 +953,6 @@ class MlogbwViewSet(CustomModelViewSet):
|
||||||
# raise ParseError('请指定所属消耗/产出明细')
|
# raise ParseError('请指定所属消耗/产出明细')
|
||||||
# return super().filter_queryset(queryset)
|
# return super().filter_queryset(queryset)
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
ins:Mlogbw = serializer.save()
|
ins:Mlogbw = serializer.save()
|
||||||
mlog:Mlog = None
|
mlog:Mlog = None
|
||||||
|
@ -1061,7 +1028,6 @@ class MlogbwViewSet(CustomModelViewSet):
|
||||||
raise ParseError("该个号不可产生该批")
|
raise ParseError("该个号不可产生该批")
|
||||||
mlog.cal_mlog_count_from_mlogb()
|
mlog.cal_mlog_count_from_mlogb()
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_update(self, serializer):
|
def perform_update(self, serializer):
|
||||||
mlogbw = serializer.save()
|
mlogbw = serializer.save()
|
||||||
if isinstance(mlogbw, list):
|
if isinstance(mlogbw, list):
|
||||||
|
@ -1079,7 +1045,6 @@ class MlogbwViewSet(CustomModelViewSet):
|
||||||
mlog = mlogb.mlog
|
mlog = mlogb.mlog
|
||||||
mlog.cal_mlog_count_from_mlogb()
|
mlog.cal_mlog_count_from_mlogb()
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def perform_destroy(self, instance:Mlogbw):
|
def perform_destroy(self, instance:Mlogbw):
|
||||||
mlogb:Mlogb = instance.mlogb
|
mlogb:Mlogb = instance.mlogb
|
||||||
if mlogb.material_out is not None and instance.wpr is not None:
|
if mlogb.material_out is not None and instance.wpr is not None:
|
||||||
|
@ -1109,8 +1074,7 @@ class MlogbwViewSet(CustomModelViewSet):
|
||||||
mlog = mlogb.mlog
|
mlog = mlogb.mlog
|
||||||
mlog.cal_mlog_count_from_mlogb()
|
mlog.cal_mlog_count_from_mlogb()
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': 'mlog.update'}, serializer_class=MlogbwStartTestSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post': 'mlog.update'}, serializer_class=MlogbwStartTestSerializer, requires_transaction=True)
|
||||||
@transaction.atomic
|
|
||||||
def start_test(self, request, *args, **kwargs):
|
def start_test(self, request, *args, **kwargs):
|
||||||
sr = MlogbwStartTestSerializer(data=request.data)
|
sr = MlogbwStartTestSerializer(data=request.data)
|
||||||
sr.is_valid(raise_exception=True)
|
sr.is_valid(raise_exception=True)
|
||||||
|
@ -1143,8 +1107,7 @@ class BatchLogViewSet(ListModelMixin, CustomGenericViewSet):
|
||||||
serializer_class = BatchLogSerializer
|
serializer_class = BatchLogSerializer
|
||||||
select_related_fields = ["source", "target"]
|
select_related_fields = ["source", "target"]
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=Serializer)
|
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=Serializer, requires_transaction=True)
|
||||||
@transaction.atomic
|
|
||||||
def dag(self, request):
|
def dag(self, request):
|
||||||
"""
|
"""
|
||||||
获取该批次的DAG图数据
|
获取该批次的DAG图数据
|
||||||
|
|
|
@ -97,8 +97,7 @@ class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, Cu
|
||||||
return Response({"number_out_last": None})
|
return Response({"number_out_last": None})
|
||||||
|
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=WproutListSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=WproutListSerializer, requires_transaction=True)
|
||||||
@transaction.atomic
|
|
||||||
def assgin_number_out(self, request, *args, **kwargs):
|
def assgin_number_out(self, request, *args, **kwargs):
|
||||||
"""分配出库对外编号
|
"""分配出库对外编号
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue