diff --git a/apps/mosquito/api/serializers.py b/apps/mosquito/api/serializers.py index 881c8f0..ee6435f 100644 --- a/apps/mosquito/api/serializers.py +++ b/apps/mosquito/api/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers from django.core.cache import cache -from mosquito.models import Mosquito, MosqPost, DeviceTempLog, WeatherLog, WeatherStationInfo +from mosquito.models import Mosquito, MosqPost, DeviceTempLog, WeatherLog, WeatherStationInfo, DeviceInfo from smart.api.serializers import SmartPushListSerializer @@ -90,3 +90,35 @@ class WeatherLogSerializer(serializers.ModelSerializer): def get_create_time(self, obj): return obj.data_time.strftime('%Y-%m-%d %H:%M:%S') + + +class WeatherStationInfoSerializer(serializers.ModelSerializer): + + class Meta: + model = WeatherStationInfo + fields = [ + 'device_id', + 'device_name', + 'longitude', + 'latitude', + 'location_id', + 'point_x', + 'point_y', + ] + + +class DeviceInfoSerializer(serializers.ModelSerializer): + + class Meta: + model = DeviceInfo + fields = [ + 'device_id', + 'device_name', + 'longitude', + 'latitude', + 'weather_device_id', + 'location_id', + 'point_x', + 'point_y', + ] + diff --git a/apps/mosquito/api/urls.py b/apps/mosquito/api/urls.py index f0595b2..52828d3 100644 --- a/apps/mosquito/api/urls.py +++ b/apps/mosquito/api/urls.py @@ -4,6 +4,8 @@ from .views import ( MosquitoPostListAPIView, DeviceTempLogListAPIView, WeatherLogListAPIView, + DeviceInfoAPIView, + WeatherStationInfoAPIView, ) @@ -13,5 +15,7 @@ urlpatterns = [ path('post/', MosquitoPostListAPIView.as_view(), name='post'), path('temp/', DeviceTempLogListAPIView.as_view(), name='temp-hum'), path('weather/', WeatherLogListAPIView.as_view(), name='weather-log'), + path('deviceinfo/', DeviceInfoAPIView.as_view(), name='device-info'), + path('weatherstationinfo/', WeatherStationInfoAPIView.as_view(), name='weather-station-info'), ] \ No newline at end of file diff --git a/apps/mosquito/api/views.py b/apps/mosquito/api/views.py index beda437..a684157 100644 --- a/apps/mosquito/api/views.py +++ b/apps/mosquito/api/views.py @@ -15,13 +15,15 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.filters import SearchFilter, OrderingFilter from django.db.models import Q from counter.mixins.role import RoleMixin, DeviceListMixin, WeatherStationListMixin -from ..models import Mosquito, MosqPost, DeviceTempLog, WeatherLog, WeatherStationInfo +from ..models import Mosquito, MosqPost, DeviceTempLog, WeatherLog, WeatherStationInfo, DeviceInfo from .pagination import PostLimitOffsetPagination, DeviceLogHistoryPagination, WeatherlogHistoryPagination from .serializers import ( MosqListSerializer, MosqPostListSerializer, DeviceTempLogSerializer, WeatherLogSerializer, + DeviceInfoSerializer, + WeatherStationInfoSerializer, ) @@ -153,3 +155,43 @@ class WeatherLogListAPIView(ListAPIView, RoleMixin, WeatherStationListMixin): queryset = queryset.filter(data_time__gte=start, data_time__lt=end + timedelta(days=1)) return queryset + + +class WeatherStationInfoAPIView(ListAPIView, RoleMixin, WeatherStationListMixin): + serializer_class = WeatherStationInfoSerializer + permission_classes = [IsAuthenticated] + filter_backends = [SearchFilter, OrderingFilter] + pagination_class = PostLimitOffsetPagination + search_fields = ['name', 'device_id'] + + def get_queryset(self, *args, **kwargs): + user_roles = self.get_role() + queryset_list = WeatherStationInfo.objects.get_queryset().order_by('device_id') + + if 'staff' in user_roles or 'manager' in user_roles: + child = self.request.user.get_child() + device_ids = [query.device_id for query in queryset_list + if query.org == self.request.user.org or query.org.id in child] + queryset_list = queryset_list.filter(device_id__in=device_ids) + + return queryset_list + + +class DeviceInfoAPIView(ListAPIView, RoleMixin, WeatherStationListMixin): + serializer_class = DeviceInfoSerializer + permission_classes = [IsAuthenticated] + filter_backends = [SearchFilter, OrderingFilter] + pagination_class = PostLimitOffsetPagination + search_fields = ['name', 'device_id'] + + def get_queryset(self, *args, **kwargs): + user_roles = self.get_role() + queryset_list = DeviceInfo.objects.get_queryset().order_by('device_id') + + if 'staff' in user_roles or 'manager' in user_roles: + child = self.request.user.get_child() + device_ids = [query.device_id for query in queryset_list + if query.org == self.request.user.org or query.org.id in child] + queryset_list = queryset_list.filter(device_id__in=device_ids) + + return queryset_list \ No newline at end of file