forked from erp-dev/erp
58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
from django.db import transaction
|
|
from django.db.models import F
|
|
from rest_framework import permissions, status
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
|
|
from api_v1.serializers import PrintCountDeltaSerializer
|
|
from api_v1.enums import PrintCountObjectType
|
|
from printing import models as printing_models
|
|
|
|
|
|
class PrintCountDeltaView(APIView):
|
|
"""通用打印次数递增接口"""
|
|
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
OBJECT_MODEL_MAP = {
|
|
PrintCountObjectType.PRINTING_ORDER: printing_models.PrintingOrder,
|
|
PrintCountObjectType.PLATE_ORDER: printing_models.PlateOrder,
|
|
}
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
serializer = PrintCountDeltaSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
data = serializer.validated_data
|
|
|
|
model = self.OBJECT_MODEL_MAP.get(data['object_type'])
|
|
if model is None:
|
|
return Response(
|
|
{'detail': '不支持的对象类型'},
|
|
status=status.HTTP_400_BAD_REQUEST,
|
|
)
|
|
|
|
with transaction.atomic():
|
|
updated = model.objects.filter(id=data['object_id']).update(
|
|
print_count=F('print_count') + data['delta']
|
|
)
|
|
if not updated:
|
|
return Response(
|
|
{'detail': '指定对象不存在'},
|
|
status=status.HTTP_404_NOT_FOUND,
|
|
)
|
|
fresh_value = model.objects.only('print_count').get(id=data['object_id']).print_count
|
|
|
|
return Response(
|
|
{
|
|
'object_type': data['object_type'],
|
|
'object_id': data['object_id'],
|
|
'delta': data['delta'],
|
|
'print_count': fresh_value,
|
|
},
|
|
status=status.HTTP_200_OK,
|
|
)
|
|
|
|
|
|
adjust_print_count = PrintCountDeltaView.as_view()
|
|
|