|
@@ -100,7 +100,10 @@ class ServiceDataView(View):
|
|
|
country_id = item['userID__region_country']
|
|
|
country_qs = CountryModel.objects.filter(id=country_id).values('country_name')
|
|
|
country_name = country_qs[0]['country_name'] if country_qs.exists() else '未知区域'
|
|
|
- rate = round(item['count'] / count * 100, 2)
|
|
|
+ if count:
|
|
|
+ rate = round(item['count'] / count * 100, 2)
|
|
|
+ else:
|
|
|
+ rate = 0
|
|
|
region_dict = {
|
|
|
'countryName': country_name,
|
|
|
'count': item['count'],
|
|
@@ -126,9 +129,15 @@ class ServiceDataView(View):
|
|
|
type_name = DEVICE_TYPE.get(k, '未知类型')
|
|
|
type_name = type_name if type_name != 'UNKOWN' else '未知类型'
|
|
|
device_count = order_qs.filter(UID__in=v).count()
|
|
|
- type_rate = round(device_count / count * 100, 2)
|
|
|
+ if count:
|
|
|
+ type_rate = round(device_count / count * 100, 2)
|
|
|
+ else:
|
|
|
+ type_rate = 0
|
|
|
temp_total = order_qs.filter(UID__in=v).aggregate(total=Sum('price'))['total']
|
|
|
- total_rate = round(temp_total / total * 100, 2)
|
|
|
+ if total:
|
|
|
+ total_rate = round(temp_total / total * 100, 2)
|
|
|
+ else:
|
|
|
+ total_rate = 0
|
|
|
device_temp_qs = {
|
|
|
'typeName': type_name,
|
|
|
'count': device_count,
|
|
@@ -167,7 +176,10 @@ class ServiceDataView(View):
|
|
|
'combo_name')
|
|
|
store_meal_name = store_meal_content_qs[0][
|
|
|
'combo_name'] if store_meal_content_qs.exists() else '未知套餐'
|
|
|
- rate = round(item['count'] / count * 100, 2)
|
|
|
+ if count:
|
|
|
+ rate = round(item['count'] / count * 100, 2)
|
|
|
+ else:
|
|
|
+ rate = 0
|
|
|
store_meal_dict = {
|
|
|
'storeMealId': store_meal_id,
|
|
|
'count': item['count'],
|
|
@@ -221,7 +233,10 @@ class ServiceDataView(View):
|
|
|
else:
|
|
|
uidset_count = uidset_qs.filter(mobile_4g=1).count()
|
|
|
order_device_count = order_qs.values('UID').distinct().order_by('UID').count()
|
|
|
- inversion_rate = round(order_device_count / uidset_count * 100, 2)
|
|
|
+ if uidset_count:
|
|
|
+ inversion_rate = round(order_device_count / uidset_count * 100, 2)
|
|
|
+ else:
|
|
|
+ inversion_rate = 0
|
|
|
# 订单数量统计
|
|
|
order_list = []
|
|
|
for item in time_list:
|
|
@@ -240,7 +255,10 @@ class ServiceDataView(View):
|
|
|
country_id = item['userID__region_country']
|
|
|
country_qs = CountryModel.objects.filter(id=country_id).values('country_name')
|
|
|
country_name = country_qs[0]['country_name'] if country_qs.exists() else '未知区域'
|
|
|
- rate = round(item['count'] / count * 100, 2)
|
|
|
+ if count:
|
|
|
+ rate = round(item['count'] / count * 100, 2)
|
|
|
+ else:
|
|
|
+ rate = 0
|
|
|
region_dict = {
|
|
|
'countryName': country_name,
|
|
|
'count': item['count'],
|
|
@@ -263,7 +281,10 @@ class ServiceDataView(View):
|
|
|
type_name = DEVICE_TYPE.get(k, '未知类型')
|
|
|
type_name = type_name if type_name != 'UNKOWN' else '未知类型'
|
|
|
device_count = order_qs.filter(UID__in=v).count()
|
|
|
- type_rate = round(device_count / count * 100, 2)
|
|
|
+ if count:
|
|
|
+ type_rate = round(device_count / count * 100, 2)
|
|
|
+ else:
|
|
|
+ type_rate = 0
|
|
|
device_temp_qs = {
|
|
|
'typeName': type_name,
|
|
|
'count': device_count,
|
|
@@ -335,7 +356,10 @@ class ServiceDataView(View):
|
|
|
country_id = item['userID__region_country']
|
|
|
country_qs = CountryModel.objects.filter(id=country_id).values('country_name')
|
|
|
country_name = country_qs[0]['country_name'] if country_qs.exists() else '未知区域'
|
|
|
- rate = round(item['count'] / count * 100, 2)
|
|
|
+ if count:
|
|
|
+ rate = round(item['count'] / count * 100, 2)
|
|
|
+ else:
|
|
|
+ rate = 0
|
|
|
region_dict = {
|
|
|
'countryName': country_name,
|
|
|
'count': item['count'],
|
|
@@ -357,7 +381,10 @@ class ServiceDataView(View):
|
|
|
type_name = DEVICE_TYPE.get(k, '未知类型')
|
|
|
type_name = type_name if type_name != 'UNKOWN' else '未知类型'
|
|
|
device_count = order_qs.filter(UID__in=v).count()
|
|
|
- type_rate = round(device_count / count * 100, 2)
|
|
|
+ if count:
|
|
|
+ type_rate = round(device_count / count * 100, 2)
|
|
|
+ else:
|
|
|
+ type_rate = 0
|
|
|
device_temp_qs = {
|
|
|
'typeName': type_name,
|
|
|
'count': device_count,
|
|
@@ -402,11 +429,14 @@ class ServiceDataView(View):
|
|
|
order_qs = Order_Model.objects.filter(order_type=store_meal_type, status=1,
|
|
|
addTime__range=(start_time, end_time)).filter(
|
|
|
~Q(price='0.00'), ~Q(price='0'), Q(UID__in=uid_list))
|
|
|
- total = order_qs.count()
|
|
|
+ total = order_gte_start_time_qs.count()
|
|
|
|
|
|
# 订单复购率
|
|
|
count = order_qs.count()
|
|
|
- repeat_rate = round(count / total * 100, 2)
|
|
|
+ if total:
|
|
|
+ repeat_rate = round(count / total * 100, 2)
|
|
|
+ else:
|
|
|
+ repeat_rate = 0
|
|
|
|
|
|
start_time = datetime.datetime.fromtimestamp(int(start_time))
|
|
|
end_time = datetime.datetime.fromtimestamp(int(end_time))
|
|
@@ -429,7 +459,10 @@ class ServiceDataView(View):
|
|
|
country_id = item['userID__region_country']
|
|
|
country_qs = CountryModel.objects.filter(id=country_id).values('country_name')
|
|
|
country_name = country_qs[0]['country_name'] if country_qs.exists() else '未知区域'
|
|
|
- rate = round(item['count'] / count * 100, 2)
|
|
|
+ if count:
|
|
|
+ rate = round(item['count'] / count * 100, 2)
|
|
|
+ else:
|
|
|
+ rate = 0
|
|
|
region_dict = {
|
|
|
'countryName': country_name,
|
|
|
'count': item['count'],
|
|
@@ -451,7 +484,13 @@ class ServiceDataView(View):
|
|
|
type_name = DEVICE_TYPE.get(k, '未知类型')
|
|
|
type_name = type_name if type_name != 'UNKOWN' else '未知类型'
|
|
|
device_count = order_qs.filter(UID__in=v).count()
|
|
|
- type_rate = round(device_count / count * 100, 2)
|
|
|
+ if count:
|
|
|
+ if count:
|
|
|
+ type_rate = round(device_count / count * 100, 2)
|
|
|
+ else:
|
|
|
+ type_rate = 0
|
|
|
+ else:
|
|
|
+ type_rate = 0
|
|
|
device_temp_qs = {
|
|
|
'typeName': type_name,
|
|
|
'count': device_count,
|
|
@@ -521,7 +560,10 @@ class ServiceDataView(View):
|
|
|
region_list.append(item)
|
|
|
region_count += int(item['count'])
|
|
|
for item in region_list:
|
|
|
- rate = round(item['count'] / region_count * 100, 2)
|
|
|
+ if region_count:
|
|
|
+ rate = round(item['count'] / region_count * 100, 2)
|
|
|
+ else:
|
|
|
+ rate = 0
|
|
|
item['rate'] = rate
|
|
|
# 处理设备类型
|
|
|
for item in result['result']['deviceType']:
|
|
@@ -539,8 +581,14 @@ class ServiceDataView(View):
|
|
|
device_type_count += int(item['count'])
|
|
|
device_type_total += item['totalMoney']
|
|
|
for item in device_type_list:
|
|
|
- type_rate = round(item['count'] / device_type_count * 100, 2)
|
|
|
- total_rate = round(item['totalMoney'] / device_type_total * 100, 2)
|
|
|
+ if device_type_count:
|
|
|
+ type_rate = round(item['count'] / device_type_count * 100, 2)
|
|
|
+ else:
|
|
|
+ type_rate = 0
|
|
|
+ if device_type_total:
|
|
|
+ total_rate = round(item['totalMoney'] / device_type_total * 100, 2)
|
|
|
+ else:
|
|
|
+ total_rate = 0
|
|
|
item['typeRate'] = type_rate
|
|
|
item['totalRate'] = total_rate
|
|
|
# 处理套餐
|
|
@@ -556,7 +604,10 @@ class ServiceDataView(View):
|
|
|
store_meal_list.append(item)
|
|
|
store_meal_count += int(item['count'])
|
|
|
for item in store_meal_list:
|
|
|
- rate = round(item['count'] / store_meal_count * 100, 2)
|
|
|
+ if store_meal_count:
|
|
|
+ rate = round(item['count'] / store_meal_count * 100, 2)
|
|
|
+ else:
|
|
|
+ rate = 0
|
|
|
item['rate'] = rate
|
|
|
else:
|
|
|
return response.json(result['result_code'])
|
|
@@ -619,7 +670,10 @@ class ServiceDataView(View):
|
|
|
region_list.append(item)
|
|
|
region_count += int(item['count'])
|
|
|
for item in region_list:
|
|
|
- rate = round(item['count'] / region_count * 100, 2)
|
|
|
+ if region_count:
|
|
|
+ rate = round(item['count'] / region_count * 100, 2)
|
|
|
+ else:
|
|
|
+ rate = 0
|
|
|
item['rate'] = rate
|
|
|
# 处理设备类型
|
|
|
for item in result['result']['deviceType']:
|
|
@@ -634,14 +688,20 @@ class ServiceDataView(View):
|
|
|
device_type_list.append(item)
|
|
|
device_type_count += int(item['count'])
|
|
|
for item in device_type_list:
|
|
|
- type_rate = round(item['count'] / device_type_count * 100, 2)
|
|
|
+ if device_type_count:
|
|
|
+ type_rate = round(item['count'] / device_type_count * 100, 2)
|
|
|
+ else:
|
|
|
+ type_rate = 0
|
|
|
item['typeRate'] = type_rate
|
|
|
# 处理转化率
|
|
|
new_device_count += int(result['result']['newDeviceCount'])
|
|
|
order_device_count += int(result['result']['orderDeviceCount'])
|
|
|
else:
|
|
|
return response.json(result['result_code'])
|
|
|
- inversion_rate = round(order_device_count / new_device_count * 100, 2)
|
|
|
+ if new_device_count:
|
|
|
+ inversion_rate = round(order_device_count / new_device_count * 100, 2)
|
|
|
+ else:
|
|
|
+ inversion_rate = 0
|
|
|
res = {
|
|
|
'orders': order_list,
|
|
|
'regions': CommonService.list_sort(region_list),
|
|
@@ -701,7 +761,10 @@ class ServiceDataView(View):
|
|
|
region_list.append(item)
|
|
|
region_count += int(item['count'])
|
|
|
for item in region_list:
|
|
|
- rate = round(item['count'] / region_count * 100, 2)
|
|
|
+ if region_count:
|
|
|
+ rate = round(item['count'] / region_count * 100, 2)
|
|
|
+ else:
|
|
|
+ rate = 0
|
|
|
item['rate'] = rate
|
|
|
# 处理设备类型
|
|
|
for item in result['result']['deviceType']:
|
|
@@ -716,7 +779,10 @@ class ServiceDataView(View):
|
|
|
device_type_list.append(item)
|
|
|
device_type_count += int(item['count'])
|
|
|
for item in device_type_list:
|
|
|
- type_rate = round(item['count'] / device_type_count * 100, 2)
|
|
|
+ if device_type_count:
|
|
|
+ type_rate = round(item['count'] / device_type_count * 100, 2)
|
|
|
+ else:
|
|
|
+ type_rate = 0
|
|
|
item['typeRate'] = type_rate
|
|
|
else:
|
|
|
return response.json(result['result_code'])
|
|
@@ -778,7 +844,10 @@ class ServiceDataView(View):
|
|
|
region_list.append(item)
|
|
|
region_count += int(item['count'])
|
|
|
for item in region_list:
|
|
|
- rate = round(item['count'] / region_count * 100, 2)
|
|
|
+ if region_count:
|
|
|
+ rate = round(item['count'] / region_count * 100, 2)
|
|
|
+ else:
|
|
|
+ rate = 0
|
|
|
item['rate'] = rate
|
|
|
# 处理设备类型
|
|
|
for item in result['result']['deviceType']:
|
|
@@ -793,14 +862,20 @@ class ServiceDataView(View):
|
|
|
device_type_list.append(item)
|
|
|
device_type_count += int(item['count'])
|
|
|
for item in device_type_list:
|
|
|
- type_rate = round(item['count'] / device_type_count * 100, 2)
|
|
|
+ if device_type_count:
|
|
|
+ type_rate = round(item['count'] / device_type_count * 100, 2)
|
|
|
+ else:
|
|
|
+ type_rate = 0
|
|
|
item['typeRate'] = type_rate
|
|
|
# 处理订单复购率
|
|
|
repeat_count += result['result']['repeatCount']
|
|
|
order_count += result['result']['orderCount']
|
|
|
else:
|
|
|
return response.json(result['result_code'])
|
|
|
- repeat_rate = round(repeat_count / order_count * 100, 2)
|
|
|
+ if order_count:
|
|
|
+ repeat_rate = round(repeat_count / order_count * 100, 2)
|
|
|
+ else:
|
|
|
+ repeat_rate = 0
|
|
|
res = {
|
|
|
'orders': order_list,
|
|
|
'regions': CommonService.list_sort(region_list),
|