# imporved tasks
This commit is contained in:
parent
626cac02e7
commit
683bca5688
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue