You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
4.1 KiB

2 years ago
from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema
from rest_framework import status, views
from rest_framework.decorators import action
from rest_framework.response import Response
from ERP_5.utils.cont import NumberPrefix
from ERP_5.utils.generate_code import generate_code
class MultipleDestroyMixin:
"""
自定义批量删除的视图函数
"""
del_ids = openapi.Schema(type=openapi.TYPE_OBJECT, required=['ids'], properties={
'ids': openapi.Schema(type=openapi.TYPE_ARRAY, items=openapi.Schema(type=openapi.TYPE_INTEGER),
description="选择哪些需要删除的ID主键列表")
})
@swagger_auto_schema(method='delete', request_body=del_ids, operation_description="批量删除")
@action(methods=['delete'], detail=False)
def multiple_delete(self, request, *args, **kwargs):
delete_ids = request.data.get('ids')
if not delete_ids:
return Response(data={'detail': '参数错误,ids为必传参数'}, status=status.HTTP_400_BAD_REQUEST)
if not isinstance(delete_ids, list):
return Response(data={'detail': 'ids格式错误,必须为List'}, status=status.HTTP_400_BAD_REQUEST)
queryset = self.get_queryset()
del_queryset = queryset.filter(id__in=delete_ids)
if len(delete_ids) != del_queryset.count():
return Response(data={'detail': '删除数据不存在'}, status=status.HTTP_400_BAD_REQUEST)
del_queryset.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
class MultipleOpenMixin:
"""
自定义批量启用或者禁用的视图函数
"""
del_ids = openapi.Schema(type=openapi.TYPE_OBJECT, required=['ids'], properties={
'ids': openapi.Schema(type=openapi.TYPE_ARRAY, items=openapi.Schema(type=openapi.TYPE_INTEGER),
description="选择哪些批量处理的ID主键列表"),
'is_open': openapi.Schema(type=openapi.TYPE_STRING, description="是否启用启用0禁用1")
})
@swagger_auto_schema(method='delete', request_body=del_ids, operation_description="批量启用或者禁用")
@action(methods=['delete'], detail=False)
def multiple_open(self, request, *args, **kwargs):
delete_ids = request.data.get('ids')
is_open = request.data.get('is_open') # 是否启用启用表示0禁用表示:1。
if not delete_ids:
return Response(data={'detail': '参数错误,ids为必传参数'}, status=status.HTTP_400_BAD_REQUEST)
if not isinstance(delete_ids, list):
return Response(data={'detail': 'ids格式错误,必须为List'}, status=status.HTTP_400_BAD_REQUEST)
queryset = self.get_queryset()
del_queryset = queryset.filter(id__in=delete_ids)
if len(delete_ids) != del_queryset.count():
return Response(data={'detail': '传入数据不存在'}, status=status.HTTP_400_BAD_REQUEST)
del_queryset.update(delete_flag=is_open)
return Response(status=status.HTTP_204_NO_CONTENT)
# 生成各种编号的接口
class GenerateCode(views.APIView):
query_param = openapi.Parameter(name='prefix', in_=openapi.IN_QUERY,
description="批号的前缀参考cont.py", type=openapi.TYPE_STRING)
@swagger_auto_schema(manual_parameters=[query_param])
def get(self, request, *args, **kwargs):
"""
生成各种编号的接口必须传一个前缀: /api/generate_code/prefix=ord可以参考cont.py
返回一个28位的编号字符串, return code就是生成的编号
"""
prefix = request.query_params.get('prefix', None)
if prefix:
if prefix in NumberPrefix.__members__:
code = generate_code(NumberPrefix[prefix].value)
return Response(data={'code': code}, status=status.HTTP_200_OK)
else:
return Response(data={'detail': 'prefix没有配置参考cont.py'}, status=status.HTTP_400_BAD_REQUEST)
else:
return Response(data={'detail': 'prefix没有该参数必须传'}, status=status.HTTP_400_BAD_REQUEST)