# 优化性能
This commit is contained in:
parent
1a681a3c67
commit
f8945b4d78
|
@ -1,3 +1,4 @@
|
|||
import time
|
||||
from django.db.models import Q, Min, Max
|
||||
from django.core.cache import cache
|
||||
from rest_framework import serializers
|
||||
|
@ -22,6 +23,28 @@ def get_vol(device_id, cur_vol):
|
|||
return '{}{}'.format(round(vol, 1), '%')
|
||||
|
||||
|
||||
def get_latest(device_id):
|
||||
latest_key = 'device_latest_{}'.format(device_id)
|
||||
latest = cache.get(latest_key)
|
||||
if not latest:
|
||||
latest = DeviceCount.objects.filter(device_id=device_id).order_by('-data_time')[0]
|
||||
cache.set(latest_key, latest, 60 * 10)
|
||||
return latest
|
||||
|
||||
|
||||
def get_device(device_id):
|
||||
device_key = 'device_lon_{}'.format(device_id)
|
||||
device = cache.get(device_key)
|
||||
if not device:
|
||||
qs = DeviceCount.objects.filter(~Q(longitude=0), device_id=device_id).order_by('-data_time')
|
||||
if qs.count() > 0:
|
||||
device = qs.first()
|
||||
cache.set(device_key, device, 60 * 10)
|
||||
else:
|
||||
return None
|
||||
return device
|
||||
|
||||
|
||||
class DeviceCountSerializer(serializers.ModelSerializer):
|
||||
device_name = serializers.SerializerMethodField()
|
||||
mosq_count = serializers.SerializerMethodField()
|
||||
|
@ -132,7 +155,8 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
|
|||
|
||||
def get_count(self, obj):
|
||||
try:
|
||||
self.latest = DeviceCount.objects.filter(device_id=obj.device_id).order_by('-data_time')[0]
|
||||
# self.latest = DeviceCount.objects.filter(device_id=obj.device_id).order_by('-data_time')[0]
|
||||
self.latest = get_latest(obj.device_id)
|
||||
except IndexError:
|
||||
self.latest = None
|
||||
if self.latest:
|
||||
|
@ -157,10 +181,10 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
|
|||
if lon and lat:
|
||||
return [lon, lat]
|
||||
|
||||
query = DeviceCount.objects.filter(~Q(longitude=0), device_id=obj.device_id).order_by('-data_time')
|
||||
if query:
|
||||
q = query[0]
|
||||
return [q.longitude, q.latitude]
|
||||
# query = DeviceCount.objects.filter(~Q(longitude=0), device_id=obj.device_id).order_by('-data_time')
|
||||
device = get_device(obj.device_id)
|
||||
if device:
|
||||
return [device.longitude, device.latitude]
|
||||
return None
|
||||
|
||||
def get_time(self, obj):
|
||||
|
|
Loading…
Reference in New Issue