# 优化model cache
This commit is contained in:
parent
a05b4b9cb1
commit
d9621d61c3
|
@ -26,23 +26,34 @@ def get_vol(device_id, cur_vol):
|
|||
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
|
||||
if latest:
|
||||
return latest
|
||||
latest = DeviceCount.objects.filter(device_id=device_id).order_by('-data_time')[0]
|
||||
s = DeviceCountBaseSerializer(latest)
|
||||
data = s.data
|
||||
cache.set(latest_key, data, 60 * 10)
|
||||
return data
|
||||
|
||||
|
||||
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
|
||||
if device:
|
||||
return device
|
||||
qs = DeviceCount.objects.filter(~Q(longitude=0), device_id=device_id).order_by('-data_time')
|
||||
if qs.count() == 0:
|
||||
return None
|
||||
device = qs.first()
|
||||
s = DeviceCountBaseSerializer(device)
|
||||
data = s.data
|
||||
cache.set(device_key, data, 60 * 10)
|
||||
return data
|
||||
|
||||
|
||||
class DeviceCountBaseSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = DeviceCount
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class DeviceCountSerializer(serializers.ModelSerializer):
|
||||
|
@ -160,19 +171,19 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
|
|||
except IndexError:
|
||||
self.latest = None
|
||||
if self.latest:
|
||||
return self.latest.count
|
||||
return self.latest['count']
|
||||
return 0
|
||||
|
||||
def get_signal(self, obj):
|
||||
if self.latest:
|
||||
return self.latest.csq
|
||||
return self.latest['csq']
|
||||
return 0
|
||||
|
||||
def get_energy(self, obj):
|
||||
if self.latest:
|
||||
if float(self.latest.vol) <= 100:
|
||||
return '{}{}'.format(round(float(self.latest.vol), 1), '%')
|
||||
return get_vol(obj.device_id, self.latest.vol)
|
||||
if float(self.latest['vol']) <= 100:
|
||||
return '{}{}'.format(round(float(self.latest['vol']), 1), '%')
|
||||
return get_vol(obj.device_id, self.latest['vol'])
|
||||
return 0
|
||||
|
||||
def get_coordinate(self, obj):
|
||||
|
@ -184,12 +195,12 @@ class DeviceInfoSerializer(serializers.ModelSerializer):
|
|||
# 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 [device['longitude'], device['latitude']]
|
||||
return None
|
||||
|
||||
def get_time(self, obj):
|
||||
if self.latest:
|
||||
return self.latest.data_time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
return self.latest['data_time'].replace('T', ' ').replace('Z', '')
|
||||
return None
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue