From d98445657f77b846ac4371b9b0cb8edc6c8b1709 Mon Sep 17 00:00:00 2001 From: xianfuxing Date: Mon, 8 Jun 2020 17:45:24 +0800 Subject: [PATCH] =?UTF-8?q?#=20=E4=BC=98=E5=8C=96=E7=BB=8F=E7=BA=AC?= =?UTF-8?q?=E5=BA=A6=E8=8E=B7=E5=8F=96=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/counter/api/serializers.py | 40 ++++++++++++++++--- .../migrations/0017_auto_20200608_1709.py | 23 +++++++++++ apps/mosquito/models.py | 2 + 3 files changed, 59 insertions(+), 6 deletions(-) create mode 100644 apps/mosquito/migrations/0017_auto_20200608_1709.py diff --git a/apps/counter/api/serializers.py b/apps/counter/api/serializers.py index 3ce2485..7ef106c 100644 --- a/apps/counter/api/serializers.py +++ b/apps/counter/api/serializers.py @@ -28,6 +28,8 @@ class DeviceCountSerializer(serializers.ModelSerializer): signal = serializers.SerializerMethodField() energy = serializers.SerializerMethodField() calc_time = serializers.SerializerMethodField() + longitude = serializers.SerializerMethodField() + latitude = serializers.SerializerMethodField() class Meta: model = DeviceCount @@ -43,6 +45,10 @@ class DeviceCountSerializer(serializers.ModelSerializer): 'latitude' ] + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.device = None + def get_mosq_count(self, obj): return obj.count @@ -57,17 +63,32 @@ class DeviceCountSerializer(serializers.ModelSerializer): def get_device_name(self, obj): device_id = obj.device_id - device_name = cache.get(device_id) - if device_name: - return device_name + device = cache.get(device_id) + if device: + self.device = device + return device.device_name qs = CelexDeviceInfo.objects.filter(device_id=device_id) if qs.count() > 0: device = qs[0] - device_name = device.device_name - cache.set(device_id, device_name, 60 * 60 * 24) - return device_name + self.device = device + cache.set(device_id, device, 60 * 60 * 24) + return device.device_name return None + def get_longitude(self, obj): + device = self.device + if device: + if device.longitude: + return device.longitude + return obj.longitude + + def get_latitude(self, obj): + device = self.device + if device: + if device.latitude: + return device.latitude + return obj.latitude + class DeviceInfoSerializer(serializers.ModelSerializer): device_name = serializers.SerializerMethodField() @@ -94,11 +115,13 @@ class DeviceInfoSerializer(serializers.ModelSerializer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.latest = None + self.cur_device = None def get_device_name(self, obj): qs = CelexDeviceInfo.objects.filter(device_id=obj.device_id) if qs.count() > 0: device = qs[0] + self.cur_device = device return device.device_name return None @@ -125,6 +148,11 @@ class DeviceInfoSerializer(serializers.ModelSerializer): return 0 def get_coordinate(self, obj): + if self.cur_device: + lon, lat = [self.cur_device.longitude, self.cur_device.latitude] + 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] diff --git a/apps/mosquito/migrations/0017_auto_20200608_1709.py b/apps/mosquito/migrations/0017_auto_20200608_1709.py new file mode 100644 index 0000000..72f3c1b --- /dev/null +++ b/apps/mosquito/migrations/0017_auto_20200608_1709.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.4 on 2020-06-08 09:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mosquito', '0016_auto_20200603_1741'), + ] + + operations = [ + migrations.AddField( + model_name='deviceinfo', + name='latitude', + field=models.FloatField(blank=True, null=True, verbose_name='维度'), + ), + migrations.AddField( + model_name='deviceinfo', + name='longitude', + field=models.FloatField(blank=True, null=True, verbose_name='经度'), + ), + ] diff --git a/apps/mosquito/models.py b/apps/mosquito/models.py index f3ca588..8fc5a8f 100644 --- a/apps/mosquito/models.py +++ b/apps/mosquito/models.py @@ -91,6 +91,8 @@ class Org(models.Model): class DeviceInfo(models.Model): device_id = models.CharField(max_length=100, unique=True, 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: