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)