增加领大需要的灭蚊灯设备信息和气象台设备信息接口

This commit is contained in:
VijayHuang 2022-11-30 18:47:47 +08:00
parent a477d1cc64
commit 7f617c8f17
3 changed files with 80 additions and 2 deletions

View File

@ -1,6 +1,6 @@
from rest_framework import serializers from rest_framework import serializers
from django.core.cache import cache 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 from smart.api.serializers import SmartPushListSerializer
@ -90,3 +90,35 @@ class WeatherLogSerializer(serializers.ModelSerializer):
def get_create_time(self, obj): def get_create_time(self, obj):
return obj.data_time.strftime('%Y-%m-%d %H:%M:%S') 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',
]

View File

@ -4,6 +4,8 @@ from .views import (
MosquitoPostListAPIView, MosquitoPostListAPIView,
DeviceTempLogListAPIView, DeviceTempLogListAPIView,
WeatherLogListAPIView, WeatherLogListAPIView,
DeviceInfoAPIView,
WeatherStationInfoAPIView,
) )
@ -13,5 +15,7 @@ urlpatterns = [
path('post/', MosquitoPostListAPIView.as_view(), name='post'), path('post/', MosquitoPostListAPIView.as_view(), name='post'),
path('temp/', DeviceTempLogListAPIView.as_view(), name='temp-hum'), path('temp/', DeviceTempLogListAPIView.as_view(), name='temp-hum'),
path('weather/', WeatherLogListAPIView.as_view(), name='weather-log'), 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'),
] ]

View File

@ -15,13 +15,15 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework.filters import SearchFilter, OrderingFilter from rest_framework.filters import SearchFilter, OrderingFilter
from django.db.models import Q from django.db.models import Q
from counter.mixins.role import RoleMixin, DeviceListMixin, WeatherStationListMixin 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 .pagination import PostLimitOffsetPagination, DeviceLogHistoryPagination, WeatherlogHistoryPagination
from .serializers import ( from .serializers import (
MosqListSerializer, MosqListSerializer,
MosqPostListSerializer, MosqPostListSerializer,
DeviceTempLogSerializer, DeviceTempLogSerializer,
WeatherLogSerializer, 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)) queryset = queryset.filter(data_time__gte=start, data_time__lt=end + timedelta(days=1))
return queryset 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