feat: 更新设备任务,增加坐标更新
This commit is contained in:
parent
1991f48757
commit
d5d8bc1f33
|
@ -5,17 +5,18 @@ from datetime import datetime, time, timedelta
|
|||
from django.db.models import Max
|
||||
from celery import task
|
||||
|
||||
|
||||
import os
|
||||
import django
|
||||
|
||||
pwd = os.path.dirname(os.path.realpath(__file__))
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mosqkiller.settings")
|
||||
django.setup()
|
||||
|
||||
from counter.models import DeviceCount
|
||||
from counter.models import DeviceInfo as D1
|
||||
from counter.models import DeviceCount as DeviceCount
|
||||
from counter.models import DeviceInfo as CounterDeviceInfor
|
||||
from mosquito.models import MosqPostStatistic, DevicePostStatistic, DeviceInfo, Org
|
||||
|
||||
|
||||
def max_count(x, y):
|
||||
if x.count > y.count:
|
||||
return x
|
||||
|
@ -55,7 +56,7 @@ def get_daily_statistic(enable_container=False):
|
|||
for q in qs:
|
||||
# 按照 device_id 分组查询最新时间 max_time,然后通过id + max_time 获取实例,用来得到count
|
||||
midnight = tz.localize(datetime.combine(q.date, time(23, 59)), is_dst=None)
|
||||
dc = DeviceCount.objects.filter(data_time__lte=midnight).values('device_id').\
|
||||
dc = DeviceCount.objects.filter(data_time__lte=midnight).values('device_id'). \
|
||||
annotate(max_time=Max('data_time'))
|
||||
daily_queryset = [DeviceCount.objects.filter(device_id=x['device_id'], data_time=x['max_time']) for x in dc]
|
||||
if daily_queryset:
|
||||
|
@ -151,19 +152,35 @@ def update_latest_statistic():
|
|||
@task()
|
||||
def update_mosq_device_info():
|
||||
""" 更新mosquito的DeviceInfo表"""
|
||||
d1 = D1.objects.values_list('device_id', flat=True)
|
||||
d2 = DeviceInfo.objects.values_list('device_id', flat=True)
|
||||
s1 = set(d1)
|
||||
s2 = set(d2)
|
||||
x = s1 - s2
|
||||
counter_devices = CounterDeviceInfor.objects.values_list('device_id', flat=True)
|
||||
mosq_devices = DeviceInfo.objects.values_list('device_id', flat=True)
|
||||
s1 = set(counter_devices)
|
||||
s2 = set(mosq_devices)
|
||||
delta = s1 - s2
|
||||
|
||||
# update existing device
|
||||
for device_id in mosq_devices:
|
||||
counter_device = DeviceCount.objects.filter(device_id=device_id).order_by('-data_time').first()
|
||||
if counter_device is None:
|
||||
continue
|
||||
ds = DeviceInfo.objects.get(device_id=device_id)
|
||||
ds.longitude = counter_device.longitude
|
||||
ds.latitude = counter_device.latitude
|
||||
ds.save()
|
||||
|
||||
# create new device
|
||||
default_org = Org.objects.all().first()
|
||||
for device_id in x:
|
||||
DeviceInfo.objects.create(device_id=device_id, org=default_org)
|
||||
return list(x)
|
||||
for device_id in delta:
|
||||
counter_device = DeviceCount.objects.filter(device_id=device_id).order_by('-data_time').first()
|
||||
DeviceInfo.objects.create(device_id=device_id,
|
||||
org=default_org,
|
||||
latitude=counter_device.latitude,
|
||||
longitude=counter_device.longitude)
|
||||
return list(delta)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# a, b = get_daily_statistic()
|
||||
# print(a, b)
|
||||
update_daily_statistic()
|
||||
# update_mosq_device_info()
|
||||
update_daily_statistic()
|
||||
|
|
Loading…
Reference in New Issue