增加气象台设备后台管理,以及对气象台接口进行权限控制
This commit is contained in:
parent
c6bedda01e
commit
14a0c60778
|
@ -1,5 +1,6 @@
|
|||
from django.core.cache import cache
|
||||
from counter.models import DeviceInfo
|
||||
from mosquito.models import WeatherStationInfo
|
||||
|
||||
|
||||
class RoleMixin(object):
|
||||
|
@ -20,3 +21,15 @@ class DeviceListMixin(object):
|
|||
cache.set('device_list', device_list, 60 * 60)
|
||||
|
||||
return device_list
|
||||
|
||||
|
||||
class WeatherStationDeviceListMixin(object):
|
||||
@staticmethod
|
||||
def get_device_list():
|
||||
if cache.get('device_list'):
|
||||
device_list = cache.get('device_list')
|
||||
else:
|
||||
device_list = WeatherStationInfo.objects.get_queryset().order_by('-device_id')
|
||||
cache.set('device_list', device_list, 60 * 60)
|
||||
|
||||
return device_list
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from django.contrib import admin
|
||||
from .models import Mosquito, MosqPost, Org, DeviceInfo
|
||||
from .models import Mosquito, MosqPost, Org, DeviceInfo, WeatherStationInfo
|
||||
|
||||
|
||||
class MosquitoAdmin(admin.ModelAdmin):
|
||||
|
@ -26,7 +26,14 @@ class OrgAdmin(admin.ModelAdmin):
|
|||
ordering = ['name']
|
||||
|
||||
|
||||
class WeatherStationAdmin(admin.ModelAdmin):
|
||||
list_display = ['device_id', 'device_name', 'org']
|
||||
list_filter = ['device_id', 'org']
|
||||
ordering = ['device_id']
|
||||
|
||||
|
||||
admin.site.register(Mosquito, MosquitoAdmin)
|
||||
admin.site.register(MosqPost, MosqPostAdmin)
|
||||
admin.site.register(DeviceInfo, DeviceAdmin)
|
||||
admin.site.register(Org, OrgAdmin)
|
||||
admin.site.register(WeatherStationInfo, WeatherStationAdmin)
|
||||
|
|
|
@ -37,6 +37,7 @@ class DeviceLogHistoryPagination(PageNumberPagination):
|
|||
page_query_param = 'page'
|
||||
max_page_size = 1000
|
||||
|
||||
|
||||
class WeatherlogHistoryPagination(PageNumberPagination):
|
||||
page_size = 10
|
||||
page_size_query_param = 'limit'
|
||||
|
|
|
@ -14,7 +14,7 @@ from django_filters.rest_framework import DjangoFilterBackend
|
|||
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
|
||||
from counter.mixins.role import RoleMixin, DeviceListMixin, WeatherStationDeviceListMixin
|
||||
from ..models import Mosquito, MosqPost, DeviceTempLog, WeatherLog
|
||||
from .pagination import PostLimitOffsetPagination, DeviceLogHistoryPagination, WeatherlogHistoryPagination
|
||||
from .serializers import (
|
||||
|
@ -106,7 +106,7 @@ class DeviceTempLogListAPIView(ListAPIView, RoleMixin, DeviceListMixin):
|
|||
return queryset
|
||||
|
||||
|
||||
class WeatherLogListAPIView(ListAPIView, RoleMixin, DeviceListMixin):
|
||||
class WeatherLogListAPIView(ListAPIView, RoleMixin, WeatherStationDeviceListMixin):
|
||||
serializer_class = WeatherLogSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)
|
||||
|
@ -122,6 +122,11 @@ class WeatherLogListAPIView(ListAPIView, RoleMixin, DeviceListMixin):
|
|||
end = self.request.GET.get('end')
|
||||
queryset = WeatherLog.objects.get_queryset().order_by('-data_time')
|
||||
|
||||
if 'staff' in user_roles or 'manager' in user_roles:
|
||||
device_list = self.get_device_list()
|
||||
device_ids = [query.device_id for query in device_list if query.org == self.request.user.org]
|
||||
queryset = queryset.filter(device_id__in=device_ids)
|
||||
|
||||
if device:
|
||||
# device_id or device_name
|
||||
qs = queryset.filter(device_id__icontains=device)
|
||||
|
|
|
@ -118,6 +118,23 @@ class DeviceTempLog(models.Model):
|
|||
return self.device_id
|
||||
|
||||
|
||||
class WeatherStationInfo(models.Model):
|
||||
device_id = models.CharField(unique=True, max_length=100, verbose_name='气象台ID')
|
||||
device_name = models.CharField(max_length=100, blank=True, null=True, verbose_name='气象台名称')
|
||||
longitude = models.FloatField(blank=True, null=True, verbose_name='经度')
|
||||
latitude = models.FloatField(blank=True, null=True, verbose_name='维度')
|
||||
org = models.ForeignKey(Org, verbose_name='所在组织', on_delete='PROTECT')
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
db_table = 'weather_station_info'
|
||||
verbose_name = '气象台设备'
|
||||
verbose_name_plural = verbose_name
|
||||
|
||||
def __str__(self):
|
||||
return self.device_id
|
||||
|
||||
|
||||
class WeatherLog(models.Model):
|
||||
data_time = models.DateTimeField(blank=True, null=True, verbose_name='时间')
|
||||
device_id = models.CharField(max_length=100, verbose_name='台站编号')
|
||||
|
|
|
@ -14,7 +14,7 @@ django.setup()
|
|||
|
||||
from counter.models import DeviceCount
|
||||
from counter.models import DeviceInfo as D1
|
||||
from mosquito.models import MosqPostStatistic, DevicePostStatistic, DeviceInfo, Org
|
||||
from mosquito.models import MosqPostStatistic, DevicePostStatistic, DeviceInfo, Org, WeatherStationDeviceInfo
|
||||
|
||||
def max_count(x, y):
|
||||
if x.count > y.count:
|
||||
|
|
Loading…
Reference in New Issue