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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)