瀏覽代碼

修复除数为零问题

peng 3 年之前
父節點
當前提交
aac5577547

+ 14 - 6
AdminController/dataSystemManagement/HomeDataController.py

@@ -177,10 +177,10 @@ class HomeDataView(View):
             unicom_order_all_total = 0
             user_increase_temp_list = []
             user_increase_list = []
-            user_increase_other_dict = {'count': 0, 'countryName': '其他', 'rate': ''}
+            user_increase_other_dict = {'count': 0, 'countryName': '其他', 'rate': 0}
             user_all_temp_list = []
             user_all_list = []
-            user_all_other_dict = {'count': 0, 'countryName': '其他', 'rate': ''}
+            user_all_other_dict = {'count': 0, 'countryName': '其他', 'rate': 0}
             for url in url_list:
                 url = url + request.path.replace('global/', '')
                 res = requests.get(url=url, params=request_dict, headers=headers)
@@ -220,23 +220,31 @@ class HomeDataView(View):
                         user_all_temp_list.append(item)
             if user_increase_temp_list:
                 for item in user_increase_temp_list:
-                    rate = round(item['count'] / user_increase_count * 100, 2)
+                    if user_increase_count:
+                        rate = round(item['count'] / user_increase_count * 100, 2)
+                    else:
+                        rate = 0
                     if rate >= 10:
                         item['rate'] = rate
                         user_increase_list.append(item)
                     else:
                         user_increase_other_dict['count'] += item['count']
-                user_increase_other_dict['rate'] = round(user_increase_other_dict['count'] / user_increase_count * 100, 2)
+                if user_increase_count:
+                    user_increase_other_dict['rate'] = round(user_increase_other_dict['count'] / user_increase_count * 100, 2)
                 user_increase_list.append(user_increase_other_dict)
             if user_all_temp_list:
                 for item in user_all_temp_list:
-                    rate = round(item['count'] / user_all_count * 100, 2)
+                    if user_all_count:
+                        rate = round(item['count'] / user_all_count * 100, 2)
+                    else:
+                        rate = 0
                     if rate >= 10:
                         item['rate'] = rate
                         user_all_list.append(item)
                     else:
                         user_all_other_dict['count'] += item['count']
-                user_all_other_dict['rate'] = round(user_all_other_dict['count'] / user_all_count * 100, 2)
+                if user_all_count:
+                    user_all_other_dict['rate'] = round(user_all_other_dict['count'] / user_all_count * 100, 2)
                 user_all_list.append(user_all_other_dict)
             res = {
                 'userIncreaseCount': user_increase_count,

+ 100 - 25
AdminController/dataSystemManagement/ServiceDataController.py

@@ -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),

+ 48 - 13
AdminController/dataSystemManagement/UserDataController.py

@@ -75,7 +75,10 @@ class UserDataView(View):
                 s_time = datetime.datetime.fromtimestamp(int(item[0]))
                 e_time = datetime.datetime.fromtimestamp(int(item[1]))
                 user_date_qs = user_qs.filter(last_login__range=(s_time, e_time))
-                rate = round(user_date_qs.count() / count * 100, 2)
+                if count:
+                    rate = round(user_date_qs.count() / count * 100, 2)
+                else:
+                    rate = 0
                 user_dict = {
                     'count': user_date_qs.count(),
                     'rate': rate,
@@ -90,7 +93,10 @@ class UserDataView(View):
                 country_id = item['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
                 country_dict = {
                     'countryName': country_name,
                     'count': item['count'],
@@ -132,7 +138,10 @@ class UserDataView(View):
                 s_time = datetime.datetime.fromtimestamp(int(item[0]))
                 e_time = datetime.datetime.fromtimestamp(int(item[1]))
                 user_date_qs = user_qs.filter(last_login__range=(s_time, e_time))
-                rate = round(user_date_qs.count() / count * 100, 2)
+                if count:
+                    rate = round(user_date_qs.count() / count * 100, 2)
+                else:
+                    rate = 0
                 user_dict = {
                     'count': user_date_qs.count(),
                     'rate': rate,
@@ -147,7 +156,10 @@ class UserDataView(View):
                 country_id = item['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
                 country_dict = {
                     'countryName': country_name,
                     'count': item['count'],
@@ -181,7 +193,10 @@ class UserDataView(View):
                 country_id = item['region_country']
                 country_qs = CountryModel.objects.filter(id=country_id).values('country_name', 'region__name')
                 item['countryName'] = country_qs[0]['country_name'] if country_qs.exists() else '未知区域'
-                item['rate'] = round(item['count'] / count * 100, 2)
+                if count:
+                    item['rate'] = round(item['count'] / count * 100, 2)
+                else:
+                    item['rate'] = 0
                 if country_qs.exists():
                     flag = 0
                     for each in continent_list:
@@ -195,7 +210,10 @@ class UserDataView(View):
                             'count': item['count']
                         })
             for item in continent_list:
-                item['rate'] = round(item['count'] / count * 100, 2)
+                if count:
+                    item['rate'] = round(item['count'] / count * 100, 2)
+                else:
+                    item['rate'] = 0
             res['countries'] = list(user_qs)
             res['continent'] = continent_list
             return response.json(0, res)
@@ -237,7 +255,10 @@ class UserDataView(View):
                             user_list.append(item)
                             user_count += item['count']
                     for item in user_list:
-                        item['rate'] = round(item['count'] / user_count * 100, 2)
+                        if user_count:
+                            item['rate'] = round(item['count'] / user_count * 100, 2)
+                        else:
+                            item['rate'] = 0
                     for item in result['result']['region']:
                         flag = 0
                         for each in region_list:
@@ -250,7 +271,10 @@ class UserDataView(View):
                             region_list.append(item)
                             region_count += item['count']
                     for item in region_list:
-                        item['rate'] = round(item['count'] / region_count * 100, 2)
+                        if region_count:
+                            item['rate'] = round(item['count'] / region_count * 100, 2)
+                        else:
+                            item['rate'] = 0
                 else:
                     return response.json(result['result_code'])
             res = {
@@ -296,7 +320,10 @@ class UserDataView(View):
                             user_list.append(item)
                             user_count += item['count']
                     for item in user_list:
-                        item['rate'] = round(item['count'] / user_count * 100, 2)
+                        if user_count:
+                            item['rate'] = round(item['count'] / user_count * 100, 2)
+                        else:
+                            item['rate'] = 0
                     for item in result['result']['region']:
                         flag = 0
                         for each in region_list:
@@ -309,7 +336,10 @@ class UserDataView(View):
                             region_list.append(item)
                             region_count += item['count']
                     for item in region_list:
-                        item['rate'] = round(item['count'] / region_count * 100, 2)
+                        if region_count:
+                            item['rate'] = round(item['count'] / region_count * 100, 2)
+                        else:
+                            item['rate'] = 0
                 else:
                     return response.json(result['result_code'])
             res = {
@@ -354,8 +384,10 @@ class UserDataView(View):
                             user_list.append(item)
                             user_count += int(item['count'])
                     for item in user_list:
-                        rate = round(item['count'] / user_count * 100, 2)
-                        item['rate'] = rate
+                        if user_count:
+                            item['rate'] = round(item['count'] / user_count * 100, 2)
+                        else:
+                            item['rate'] = 0
                     for item in result['result']['continent']:
                         flag = 0
                         for each in region_list:
@@ -366,7 +398,10 @@ class UserDataView(View):
                         if flag == 0:
                             region_list.append(item)
                     for item in region_list:
-                        item['rate'] = round(item['count'] / user_count * 100, 2)
+                        if user_count:
+                            item['rate'] = round(item['count'] / user_count * 100, 2)
+                        else:
+                            item['rate'] = 0
                 else:
                     return response.json(result['result_code'])
             res = {