# imporved tasks

This commit is contained in:
xianfuxing 2018-09-17 21:45:25 +08:00
parent 626cac02e7
commit 683bca5688
1 changed files with 14 additions and 14 deletions

View File

@ -33,15 +33,15 @@ def fill_date(ret=None, tz=None):
return ret
def get_daily_statistic(SPLIT_BY_DEVICE=False):
def get_daily_statistic(enable_container=False):
device_container = {}
daily_ret = {}
queryset = DeviceCount.objects.raw('select id, date(data_time) as date from device_count group by date')
if queryset:
calc_result = {}
tz = pytz.timezone("UTC")
device_list = {item.device_id for item in DeviceCount.objects.distinct()}
for item in device_list:
calc_result[item] = []
ret = {}
device_container[item] = set()
for q in queryset:
# 按照 device_id 分组查询最新时间 max_time然后通过id + max_time 获取实例用来得到count
midnight = tz.localize(datetime.combine(q.date, time(23, 59)), is_dst=None)
@ -50,22 +50,22 @@ def get_daily_statistic(SPLIT_BY_DEVICE=False):
'device_id').annotate(max_time=Max('data_time'))]
if daily_queryset:
daily_queryset = [reduce(max_count, entry) if len(entry) > 1 else entry[0] for entry in daily_queryset]
if SPLIT_BY_DEVICE:
if enable_container:
for device_id in device_list:
calc_result[device_id] += [entry for entry in daily_queryset if entry.device_id == device_id]
else:
device_container[device_id] = device_container[device_id] | \
{(entry.count, entry.data_time)
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
ret[date] = calc_result
daily_ret[date] = calc_result
return daily_ret, device_container
return ret
return None
@task()
def update_daily_statistic():
full_ret = None
# 计算每天聚合值
daily_ret = get_daily_statistic()
daily_ret, device_container = get_daily_statistic(enable_container=True)
for k in device_container: print(k, device_container[k])
# 计算没有记录的日期,值
if daily_ret:
@ -88,7 +88,7 @@ def update_daily_statistic():
else:
MosqPostStatistic.objects.create(date=d, total=full_ret[d], increment=full_ret[d])
else:
increment = full_ret[d] - full_ret[d-timedelta(days=1)]
increment = full_ret[d] - full_ret[d - timedelta(days=1)]
if obj:
obj.total, obj.increment = full_ret[d], increment
obj.save()