feat: 更新设备任务,增加坐标更新

This commit is contained in:
xianfx 2024-02-18 22:49:39 +08:00
parent 1991f48757
commit d5d8bc1f33
1 changed files with 30 additions and 13 deletions

View File

@ -5,17 +5,18 @@ from datetime import datetime, time, timedelta
from django.db.models import Max from django.db.models import Max
from celery import task from celery import task
import os import os
import django import django
pwd = os.path.dirname(os.path.realpath(__file__)) pwd = os.path.dirname(os.path.realpath(__file__))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mosqkiller.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mosqkiller.settings")
django.setup() django.setup()
from counter.models import DeviceCount from counter.models import DeviceCount as DeviceCount
from counter.models import DeviceInfo as D1 from counter.models import DeviceInfo as CounterDeviceInfor
from mosquito.models import MosqPostStatistic, DevicePostStatistic, DeviceInfo, Org from mosquito.models import MosqPostStatistic, DevicePostStatistic, DeviceInfo, Org
def max_count(x, y): def max_count(x, y):
if x.count > y.count: if x.count > y.count:
return x return x
@ -55,7 +56,7 @@ def get_daily_statistic(enable_container=False):
for q in qs: for q in qs:
# 按照 device_id 分组查询最新时间 max_time然后通过id + max_time 获取实例用来得到count # 按照 device_id 分组查询最新时间 max_time然后通过id + max_time 获取实例用来得到count
midnight = tz.localize(datetime.combine(q.date, time(23, 59)), is_dst=None) 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')) 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] daily_queryset = [DeviceCount.objects.filter(device_id=x['device_id'], data_time=x['max_time']) for x in dc]
if daily_queryset: if daily_queryset:
@ -151,19 +152,35 @@ def update_latest_statistic():
@task() @task()
def update_mosq_device_info(): def update_mosq_device_info():
""" 更新mosquito的DeviceInfo表""" """ 更新mosquito的DeviceInfo表"""
d1 = D1.objects.values_list('device_id', flat=True) counter_devices = CounterDeviceInfor.objects.values_list('device_id', flat=True)
d2 = DeviceInfo.objects.values_list('device_id', flat=True) mosq_devices = DeviceInfo.objects.values_list('device_id', flat=True)
s1 = set(d1) s1 = set(counter_devices)
s2 = set(d2) s2 = set(mosq_devices)
x = s1 - s2 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() default_org = Org.objects.all().first()
for device_id in x: for device_id in delta:
DeviceInfo.objects.create(device_id=device_id, org=default_org) counter_device = DeviceCount.objects.filter(device_id=device_id).order_by('-data_time').first()
return list(x) DeviceInfo.objects.create(device_id=device_id,
org=default_org,
latitude=counter_device.latitude,
longitude=counter_device.longitude)
return list(delta)
if __name__ == '__main__': if __name__ == '__main__':
# a, b = get_daily_statistic() # a, b = get_daily_statistic()
# print(a, b) # print(a, b)
# update_mosq_device_info()
update_daily_statistic() update_daily_statistic()