from django.shortcuts import render from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet, ListModelMixin from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin from .serializers import DrainSerializer, DrainEquipSerializer, DrainEquipEnvSerializer, VehicleAccessSerializer, EnvDataSerializer, EnvDataExportSerializer, CarWashSerializer, Drain2Serializer from .models import Drain, DrainEquip, VehicleAccess, EnvData, CarWash from rest_framework.decorators import action from apps.utils.sql import query_all_dict from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi from rest_framework.response import Response # Create your views here. class DrainViewSet(CustomModelViewSet): """ list: 排口/污染源 排口/污染源 """ queryset = Drain.objects.all() serializer_class = DrainSerializer filterset_fields = ['type', 'cate', 'mgroup'] def get_serializer_class(self): has_equipdata = self.request.query_params.get('has_equipdata', 'no') if self.request.method == 'GET' and has_equipdata == 'yes': return Drain2Serializer return super().get_serializer_class() @swagger_auto_schema(manual_parameters=[ openapi.Parameter(name="has_equipdata", in_=openapi.IN_QUERY, description="Include equip data in the response", type=openapi.TYPE_STRING, enum=["yes", "no"], required=False), ]) def list(self, request, *args, **kwargs): return super().list(request, *args, **kwargs) class DrainEquipViewSet(ListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin, CustomGenericViewSet): """ list: 排口/设备关系 排口/设备关系 """ perms_map = {'get': '*', 'post:': 'drain.update', 'delete': 'drain.update'} queryset = DrainEquip.objects.all() serializer_class = DrainEquipSerializer select_related_fields = ['equipment', 'drain'] filterset_fields = ['drain', 'equipment', 'drain__mgroup', 'equipment__mgroup', 'drain__type', 'equipment__type'] def get_serializer_class(self): has_envdata = self.request.query_params.get('has_envdata', 'no') if self.request.method == 'GET' and has_envdata == 'yes': return DrainEquipEnvSerializer return super().get_serializer_class() @swagger_auto_schema(manual_parameters=[ openapi.Parameter(name="has_envdata", in_=openapi.IN_QUERY, description="Include environmental data in the response", type=openapi.TYPE_STRING, enum=["yes", "no"], required=False), ]) def list(self, request, *args, **kwargs): return super().list(request, *args, **kwargs) class VehicleAccessViewSet(ListModelMixin, CustomGenericViewSet): """ list: 车辆出入记录 车辆出入记录 """ perms_map = {'get': '*'} queryset = VehicleAccess.objects.all() serializer_class = VehicleAccessSerializer filterset_fields = { "vehicle_number": ['icontains'], "emission_standard": ['exact', 'in'], "type": ['exact', 'in'], "access_time": ['gte', 'lte', 'year', 'month', 'day', 'quarter', 'week'] } class EnvDataViewSet(ListModelMixin, CustomGenericViewSet): """ list: 环保时序数据 环保时序数据 """ perms_map = {'get': '*'} queryset = EnvData.objects.all() serializer_class = EnvDataSerializer filterset_fields = { "time": ['exact', 'gte', 'lte', 'year', 'month', 'day'], "equipment": ['exact'], } @action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=EnvDataExportSerializer) def export_excel(self, request, *args, **kwargs): """导出Excel 导出Excel """ return Response() class CarWashViewSet(ListModelMixin, CustomGenericViewSet): """ list: 洗车记录 洗车记录 """ perms_map = {'get': '*'} queryset = CarWash.objects.all() serializer_class = CarWashSerializer filterset_fields = { "station": ['exact'], "start_time": ['exact', 'gte', 'lte', 'year', 'month', 'day'], } ordering = ['-start_time']