# imporved tasks
This commit is contained in:
parent
626cac02e7
commit
683bca5688
|
@ -33,15 +33,15 @@ def fill_date(ret=None, tz=None):
|
||||||
return ret
|
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')
|
queryset = DeviceCount.objects.raw('select id, date(data_time) as date from device_count group by date')
|
||||||
if queryset:
|
if queryset:
|
||||||
calc_result = {}
|
|
||||||
tz = pytz.timezone("UTC")
|
tz = pytz.timezone("UTC")
|
||||||
device_list = {item.device_id for item in DeviceCount.objects.distinct()}
|
device_list = {item.device_id for item in DeviceCount.objects.distinct()}
|
||||||
for item in device_list:
|
for item in device_list:
|
||||||
calc_result[item] = []
|
device_container[item] = set()
|
||||||
ret = {}
|
|
||||||
for q in queryset:
|
for q in queryset:
|
||||||
# 按照 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)
|
||||||
|
@ -50,22 +50,22 @@ def get_daily_statistic(SPLIT_BY_DEVICE=False):
|
||||||
'device_id').annotate(max_time=Max('data_time'))]
|
'device_id').annotate(max_time=Max('data_time'))]
|
||||||
if daily_queryset:
|
if daily_queryset:
|
||||||
daily_queryset = [reduce(max_count, entry) if len(entry) > 1 else entry[0] for entry in 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:
|
for device_id in device_list:
|
||||||
calc_result[device_id] += [entry for entry in daily_queryset if entry.device_id == device_id]
|
device_container[device_id] = device_container[device_id] | \
|
||||||
else:
|
{(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))
|
calc_result = sum(map(lambda x: int(x.count), daily_queryset))
|
||||||
date = q.date
|
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():
|
def update_daily_statistic():
|
||||||
full_ret = None
|
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:
|
if daily_ret:
|
||||||
|
@ -88,7 +88,7 @@ def update_daily_statistic():
|
||||||
else:
|
else:
|
||||||
MosqPostStatistic.objects.create(date=d, total=full_ret[d], increment=full_ret[d])
|
MosqPostStatistic.objects.create(date=d, total=full_ret[d], increment=full_ret[d])
|
||||||
else:
|
else:
|
||||||
increment = full_ret[d] - full_ret[d-timedelta(days=1)]
|
increment = full_ret[d] - full_ret[d - timedelta(days=1)]
|
||||||
if obj:
|
if obj:
|
||||||
obj.total, obj.increment = full_ret[d], increment
|
obj.total, obj.increment = full_ret[d], increment
|
||||||
obj.save()
|
obj.save()
|
||||||
|
|
Loading…
Reference in New Issue