diff --git a/apps/mosquito/tasks.py b/apps/mosquito/tasks.py index f20c9ba..80b765c 100644 --- a/apps/mosquito/tasks.py +++ b/apps/mosquito/tasks.py @@ -5,7 +5,7 @@ from datetime import datetime, time, timedelta from django.db.models import Max from celery import task from counter.models import DeviceCount -from mosquito.models import MosqPostStatistic +from mosquito.models import MosqPostStatistic, DevicePostStatistic def max_count(x, y): @@ -53,7 +53,7 @@ def get_daily_statistic(enable_container=False): if enable_container: for device_id in device_list: device_container[device_id] = device_container[device_id] | \ - {(entry.data_time, entry.count) + {(entry.data_time.date(), entry.count) for entry in daily_queryset if entry.device_id == device_id} calc_result = sum(map(lambda x: int(x.count), daily_queryset)) date = q.date @@ -61,6 +61,7 @@ def get_daily_statistic(enable_container=False): return daily_ret, device_container +@task() def update_daily_statistic(): full_ret = None # 计算每天聚合值 @@ -75,6 +76,19 @@ def update_daily_statistic(): container = dict(device_container[device_id]) full_daily_ret = fill_date(container, tz=pytz.timezone("UTC")) + _date_list = [k for k in full_daily_ret] + _date_list.sort() + for d in _date_list: + try: + obj = DevicePostStatistic.objects.get(device_id=device_id, date=d) + except DevicePostStatistic.DoesNotExist: + obj = None + if obj: + obj.total = full_daily_ret[d] + obj.save() + else: + DevicePostStatistic.objects.create(device_id=device_id, total=full_daily_ret[d], date=d) + # 写入数据库 if full_ret: _date_list = [k for k in full_ret]