# -*- encoding: utf-8 -*- """ @File : UserDataController.py @Time : 2022/8/16 10:44 @Author : peng @Email : zhangdongming@asj6.wecom.work @Software: PyCharm """ from django.db.models import Q, Count, Sum from django.views.generic.base import View from Ansjer.config import DEVICE_TYPE import datetime import requests from Model.models import Order_Model, CountryModel, Device_Info, DeviceTypeModel, UidSetModel, UnicomCombo from Service.CommonService import CommonService # 服务数据 class ServiceDataView(View): def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.GET, request, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.POST, request, operation) def validation(self, request_dict, request, operation): token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request) if token_code != 0: return response.json(token_code) if operation == 'payOrder': # 查询付费订单数据 return self.query_pay_order(request_dict, response) elif operation == 'freeOrder': # 查询免费订单数据 return self.query_free_order(request_dict, response) elif operation == 'firstPayOrder': # 查询首次付费订单数据 return self.query_first_pay_order(request_dict, response) elif operation == 'repeatPayOrder': # 查询复购订单数据 return self.query_repeat_pay_order(request_dict, response) elif operation == 'global/payOrder': # 查询全球付费订单数据 return self.query_global_pay_order(request, request_dict, response) elif operation == 'global/freeOrder': # 查询全球免费订单数据 return self.query_global_free_order(request, request_dict, response) elif operation == 'global/firstPayOrder': # 查询全球首次付费订单数据 return self.query_global_first_pay_order(request, request_dict, response) elif operation == 'global/repeatPayOrder': # 查询全球复购订单数据 return self.query_global_repeat_pay_order(request, request_dict, response) else: return response.json(414) @classmethod def query_pay_order(cls, request_dict, response): """ 查询付费订单数据 @param request_dict:请求参数 @request_dict startTime:开始时间 @request_dict endTime:结束时间 @request_dict timeUnit:时间单位 @request_dict storeMealType:套餐类型 @param response:响应对象 @return: """ start_time = request_dict.get('startTime', None) end_time = request_dict.get('endTime', None) time_unit = request_dict.get('timeUnit', None) store_meal_type = request_dict.get('storeMealType', None) if not all([start_time, end_time, time_unit, store_meal_type]): return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'}) try: store_meal_type = int(store_meal_type) 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')) count = order_qs.count() total = order_qs.aggregate(total=Sum('price'))['total'] start_time = datetime.datetime.fromtimestamp(int(start_time)) end_time = datetime.datetime.fromtimestamp(int(end_time)) time_list = CommonService.cutting_time(start_time, end_time, time_unit) # 订单数量统计 order_list = [] for item in time_list: order_temp_qs = order_qs.filter(addTime__range=item) order_dict = { 'count': order_temp_qs.count(), 'startTime': item[0], 'endTime': item[1] } order_list.append(order_dict) # 区域订单统计 region_list = [] region_qs = order_qs.values('userID__region_country').annotate(count=Count('UID')).order_by('-count') for item in region_qs: 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) region_dict = { 'countryName': country_name, 'count': item['count'], 'rate': rate } region_list.append(region_dict) # 设备类型订单统计 device_type_list = [] device_type_qs = order_qs.values('UID').annotate(count=Count('UID')).order_by('count') uid_list = [] uid_type_dict = {} for item in device_type_qs: uid_list.append(item['UID']) device_temp_qs = Device_Info.objects.filter(UID=item['UID']).values('Type') if device_temp_qs.exists(): if device_temp_qs[0]['Type'] not in uid_type_dict: uid_type_dict[device_temp_qs[0]['Type']] = [] uid_type_dict[device_temp_qs[0]['Type']].append(item['UID']) # device_qs = Device_Info.objects.filter(UID__in=uid_list).values('Type').annotate( # count=Count('Type', distinct=True)).order_by('-count') for k, v in uid_type_dict.items(): 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) temp_total = order_qs.filter(UID__in=v).aggregate(total=Sum('price'))['total'] total_rate = round(temp_total / total * 100, 2) device_temp_qs = { 'typeName': type_name, 'count': device_count, 'typeRate': type_rate, 'totalMoney': temp_total, 'totalRate': total_rate } device_type_list.append(device_temp_qs) # 套餐订单统计 store_meal_list = [] if store_meal_type == 0: store_meal_qs = order_qs.values('rank').annotate(count=Count('rank')).order_by('-count') elif store_meal_type == 1: store_meal_qs = order_qs.values('ai_rank').annotate(count=Count('ai_rank')).order_by('-count') else: store_meal_qs = order_qs.values('unify_combo_id').annotate(count=Count('unify_combo_id')).order_by( '-count') for item in store_meal_qs: if store_meal_type == 0: store_meal_id = item['rank'] store_meal_content_qs = store_meal_qs.filter(rank=store_meal_id, rank__lang__lang='cn').values( 'rank__lang__content') store_meal_name = store_meal_content_qs[0][ 'rank__lang__content'] if store_meal_content_qs.exists() else '未知套餐' elif store_meal_type == 1: store_meal_id = item['ai_rank'] store_meal_content_qs = store_meal_qs.filter(ai_rank=store_meal_id, ai_rank__lang__lang='cn').values( 'ai_rank__lang__content') store_meal_name = store_meal_content_qs[0][ 'ai_rank__lang__content'] if store_meal_content_qs.exists() else '未知套餐' else: store_meal_id = item['unify_combo_id'] store_meal_content_qs = UnicomCombo.objects.filter(id=store_meal_id).values( '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) store_meal_dict = { 'storeMealId': store_meal_id, 'count': item['count'], 'storeMealName': store_meal_name, 'rate': rate } store_meal_list.append(store_meal_dict) res = { 'orders': order_list, 'regions': region_list, 'deviceType': device_type_list, 'storeMeal': store_meal_list, } return response.json(0, res) except Exception as e: return response.json(500, repr(e)) @classmethod def query_free_order(cls, request_dict, response): """ 查询免费订单数据 @param request_dict:请求参数 @request_dict startTime:开始时间 @request_dict endTime:结束时间 @request_dict timeUnit:时间单位 @request_dict storeMealType:套餐类型 @param response:响应对象 @return: """ start_time = request_dict.get('startTime', None) end_time = request_dict.get('endTime', None) time_unit = request_dict.get('timeUnit', None) store_meal_type = request_dict.get('storeMealType', None) if not all([start_time, end_time, time_unit, store_meal_type]): return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'}) try: store_meal_type = int(store_meal_type) 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')) count = order_qs.count() uidset_qs = UidSetModel.objects.filter(addTime__range=(start_time, end_time)) start_time = datetime.datetime.fromtimestamp(int(start_time)) end_time = datetime.datetime.fromtimestamp(int(end_time)) time_list = CommonService.cutting_time(start_time, end_time, time_unit) # 转化率 if store_meal_type == 0: uidset_count = uidset_qs.filter(is_vod=1).count() elif store_meal_type == 1: uidset_count = uidset_qs.filter(is_ai=1).count() 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) # 订单数量统计 order_list = [] for item in time_list: order_temp_qs = order_qs.filter(addTime__range=item) order_dict = { 'count': order_temp_qs.count(), 'startTime': item[0], 'endTime': item[1] } order_list.append(order_dict) # 区域订单统计 region_list = [] region_qs = order_qs.values('userID__region_country').annotate(count=Count('UID')).order_by('-count') for item in region_qs: 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) region_dict = { 'countryName': country_name, 'count': item['count'], 'rate': rate } region_list.append(region_dict) # 设备类型订单统计 device_type_list = [] device_type_qs = order_qs.values('UID').annotate(count=Count('UID')).order_by('count') uid_dict = {} for item in device_type_qs: device_qs = Device_Info.objects.filter(UID=item['UID']).values('Type') device_type = device_qs[0]['Type'] if device_qs.exists() else 0 if device_type not in uid_dict: uid_dict[device_type] = [] uid_dict[device_type].append(item['UID']) for k, v in uid_dict.items(): 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) device_temp_qs = { 'typeName': type_name, 'count': device_count, 'typeRate': type_rate, } device_type_list.append(device_temp_qs) res = { 'orders': order_list, 'regions': region_list, 'deviceType': device_type_list, 'inversionRate': inversion_rate, 'newDeviceCount': uidset_count, 'orderDeviceCount': order_device_count } return response.json(0, res) except Exception as e: return response.json(500, repr(e)) @classmethod def query_first_pay_order(cls, request_dict, response): """ 查询首次付费订单数据 @param request_dict:请求参数 @request_dict startTime:开始时间 @request_dict endTime:结束时间 @request_dict timeUnit:时间单位 @request_dict storeMealType:套餐类型 @param response:响应对象 @return: """ start_time = request_dict.get('startTime', None) end_time = request_dict.get('endTime', None) time_unit = request_dict.get('timeUnit', None) store_meal_type = request_dict.get('storeMealType', None) if not all([start_time, end_time, time_unit, store_meal_type]): return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'}) try: order_gte_start_time_qs = Order_Model.objects.filter(order_type=store_meal_type, status=1, addTime__lte=start_time).filter( ~Q(price='0.00') & ~Q(price='0')) uid_list = [] for item in order_gte_start_time_qs: uid_list.append(item.UID) 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(UID__in=uid_list), ~Q(price='0')) count = order_qs.count() start_time = datetime.datetime.fromtimestamp(int(start_time)) end_time = datetime.datetime.fromtimestamp(int(end_time)) time_list = CommonService.cutting_time(start_time, end_time, time_unit) # 订单数量统计 order_list = [] for item in time_list: order_temp_qs = order_qs.filter(addTime__range=item) order_dict = { 'count': order_temp_qs.count(), 'startTime': item[0], 'endTime': item[1] } order_list.append(order_dict) # 区域订单统计 region_list = [] region_qs = order_qs.values('userID__region_country').annotate(count=Count('UID')).order_by('-count') for item in region_qs: 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) region_dict = { 'countryName': country_name, 'count': item['count'], 'rate': rate } region_list.append(region_dict) # 设备类型订单统计 device_type_list = [] device_type_qs = order_qs.values('UID').annotate(count=Count('UID')).order_by('count') uid_dict = {} for item in device_type_qs: device_qs = Device_Info.objects.filter(UID=item['UID']).values('Type') device_type = device_qs[0]['Type'] if device_qs.exists() else 0 if device_type not in uid_dict: uid_dict[device_type] = [] uid_dict[device_type].append(item['UID']) for k, v in uid_dict.items(): 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) device_temp_qs = { 'typeName': type_name, 'count': device_count, 'typeRate': type_rate, } device_type_list.append(device_temp_qs) res = { 'orders': order_list, 'regions': region_list, 'deviceType': device_type_list, } return response.json(0, res) except Exception as e: return response.json(500, repr(e)) @classmethod def query_repeat_pay_order(cls, request_dict, response): """ 查询复购订单数据 @param request_dict:请求参数 @request_dict startTime:开始时间 @request_dict endTime:结束时间 @request_dict timeUnit:时间单位 @request_dict storeMealType:套餐类型 @param response:响应对象 @return: """ start_time = request_dict.get('startTime', None) end_time = request_dict.get('endTime', None) time_unit = request_dict.get('timeUnit', None) store_meal_type = request_dict.get('storeMealType', None) if not all([start_time, end_time, time_unit, store_meal_type]): return response.json(444, {'error param': 'startTime or endTime or timeUnit or storeMealType'}) try: order_gte_start_time_qs = Order_Model.objects.filter(order_type=store_meal_type, status=1, addTime__lte=start_time).filter( ~Q(price='0.00') & ~Q(price='0')) uid_list = [] for item in order_gte_start_time_qs: uid_list.append(item.UID) 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() # 订单复购率 count = order_qs.count() repeat_rate = round(count / total * 100, 2) start_time = datetime.datetime.fromtimestamp(int(start_time)) end_time = datetime.datetime.fromtimestamp(int(end_time)) time_list = CommonService.cutting_time(start_time, end_time, time_unit) # 订单数量统计 order_list = [] for item in time_list: order_temp_qs = order_qs.filter(addTime__range=item) order_dict = { 'count': order_temp_qs.count(), 'startTime': item[0], 'endTime': item[1] } order_list.append(order_dict) # 区域订单统计 region_list = [] region_qs = order_qs.values('userID__region_country').annotate(count=Count('UID')).order_by('-count') for item in region_qs: 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) region_dict = { 'countryName': country_name, 'count': item['count'], 'rate': rate } region_list.append(region_dict) # 设备类型订单统计 device_type_list = [] device_type_qs = order_qs.values('UID').annotate(count=Count('UID')).order_by('count') uid_dict = {} for item in device_type_qs: device_qs = Device_Info.objects.filter(UID=item['UID']).values('Type') device_type = device_qs[0]['Type'] if device_qs.exists() else 0 if device_type not in uid_dict: uid_dict[device_type] = [] uid_dict[device_type].append(item['UID']) for k, v in uid_dict.items(): 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) device_temp_qs = { 'typeName': type_name, 'count': device_count, 'typeRate': type_rate, } device_type_list.append(device_temp_qs) res = { 'orders': order_list, 'regions': region_list, 'deviceType': device_type_list, 'repeatRate': repeat_rate, 'repeatCount': count, 'orderCount': total } return response.json(0, res) except Exception as e: return response.json(500, repr(e)) @classmethod def query_global_pay_order(cls, request, request_dict, response): """ 查询全球付费订单数据 @param request:请求 @param request_dict:请求参数 @param response:响应对象 @return: """ url_list = CommonService.get_domain_name() try: headers = { 'Authorization': request.META.get('HTTP_AUTHORIZATION') } order_list = [] region_list = [] region_count = 0 device_type_list = [] device_type_count = 0 device_type_total = 0 store_meal_list = [] store_meal_count = 0 for url in url_list: url = url + request.path.replace('global/', '') res = requests.get(url=url, params=request_dict, headers=headers) result = res.json() if result['result_code'] == 0: # 处理订单 for item in result['result']['orders']: flag = 0 for each in order_list: if each['startTime'] == item['startTime'] and each['endTime'] == item['endTime']: each['count'] += int(item['count']) flag = 1 break if flag == 0: order_list.append(item) # 处理地区 for item in result['result']['regions']: flag = 0 for each in region_list: if each['countryName'] == item['countryName']: each['count'] += int(item['count']) region_count += int(item['count']) flag = 1 break if flag == 0: region_list.append(item) region_count += int(item['count']) for item in region_list: rate = round(item['count'] / region_count * 100, 2) item['rate'] = rate # 处理设备类型 for item in result['result']['deviceType']: flag = 0 for each in device_type_list: if each['typeName'] == item['typeName']: each['count'] += int(item['count']) item['totalMoney'] += item['totalMoney'] device_type_count += int(item['count']) device_type_total += item['totalMoney'] flag = 1 break if flag == 0: device_type_list.append(item) 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) item['typeRate'] = type_rate item['totalRate'] = total_rate # 处理套餐 for item in result['result']['storeMeal']: flag = 0 for each in store_meal_list: if each['storeMealId'] == item['storeMealId']: each['count'] += int(item['count']) store_meal_count += int(item['count']) flag = 1 break if flag == 0: 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) item['rate'] = rate else: return response.json(result['result_code']) res = { 'orders': order_list, 'regions': CommonService.list_sort(region_list), 'deviceType': CommonService.list_sort(device_type_list), 'storeMeal': CommonService.list_sort(store_meal_list) } return response.json(0, res) except Exception as e: return response.json(500, repr(e)) @classmethod def query_global_free_order(cls, request, request_dict, response): """ 查询全球免费订单数据 @param request:请求 @param request_dict:请求参数 @param response:响应对象 @return: """ url_list = CommonService.get_domain_name() try: headers = { 'Authorization': request.META.get('HTTP_AUTHORIZATION') } order_list = [] region_list = [] region_count = 0 device_type_list = [] device_type_count = 0 new_device_count = 0 order_device_count = 0 for url in url_list: url = url + request.path.replace('global/', '') res = requests.get(url=url, params=request_dict, headers=headers) result = res.json() if result['result_code'] == 0: # 处理订单 for item in result['result']['orders']: flag = 0 for each in order_list: if each['startTime'] == item['startTime'] and each['endTime'] == item['endTime']: each['count'] += int(item['count']) flag = 1 break if flag == 0: order_list.append(item) # 处理地区 for item in result['result']['regions']: flag = 0 for each in region_list: if each['countryName'] == item['countryName']: each['count'] += int(item['count']) region_count += int(item['count']) flag = 1 break if flag == 0: region_list.append(item) region_count += int(item['count']) for item in region_list: rate = round(item['count'] / region_count * 100, 2) item['rate'] = rate # 处理设备类型 for item in result['result']['deviceType']: flag = 0 for each in device_type_list: if each['typeName'] == item['typeName']: each['count'] += int(item['count']) device_type_count += int(item['count']) flag = 1 break if flag == 0: 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) 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) res = { 'orders': order_list, 'regions': CommonService.list_sort(region_list), 'deviceType': CommonService.list_sort(device_type_list), 'newDeviceCount': new_device_count, 'orderDeviceCount': order_device_count, 'inversionRate': inversion_rate } return response.json(0, res) except Exception as e: return response.json(500, repr(e)) @classmethod def query_global_first_pay_order(cls, request, request_dict, response): """ 查询全球首次付费订单数据 @param request:请求 @param request_dict:请求参数 @param response:响应对象 @return: """ url_list = CommonService.get_domain_name() try: headers = { 'Authorization': request.META.get('HTTP_AUTHORIZATION') } order_list = [] region_list = [] region_count = 0 device_type_list = [] device_type_count = 0 for url in url_list: url = url + request.path.replace('global/', '') res = requests.get(url=url, params=request_dict, headers=headers) result = res.json() if result['result_code'] == 0: # 处理订单 for item in result['result']['orders']: flag = 0 for each in order_list: if each['startTime'] == item['startTime'] and each['endTime'] == item['endTime']: each['count'] += int(item['count']) flag = 1 break if flag == 0: order_list.append(item) # 处理地区 for item in result['result']['regions']: flag = 0 for each in region_list: if each['countryName'] == item['countryName']: each['count'] += int(item['count']) region_count += int(item['count']) flag = 1 break if flag == 0: region_list.append(item) region_count += int(item['count']) for item in region_list: rate = round(item['count'] / region_count * 100, 2) item['rate'] = rate # 处理设备类型 for item in result['result']['deviceType']: flag = 0 for each in device_type_list: if each['typeName'] == item['typeName']: each['count'] += int(item['count']) device_type_count += int(item['count']) flag = 1 break if flag == 0: 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) item['typeRate'] = type_rate else: return response.json(result['result_code']) res = { 'orders': order_list, 'regions': CommonService.list_sort(region_list), 'deviceType': CommonService.list_sort(device_type_list), } return response.json(0, res) except Exception as e: return response.json(500, repr(e)) @classmethod def query_global_repeat_pay_order(cls, request, request_dict, response): """ 查询全球复购订单数据 @param request:请求 @param request_dict:请求参数 @param response:响应对象 @return: """ url_list = CommonService.get_domain_name() try: headers = { 'Authorization': request.META.get('HTTP_AUTHORIZATION') } order_list = [] region_list = [] region_count = 0 device_type_list = [] device_type_count = 0 repeat_count = 0 order_count = 0 for url in url_list: url = url + request.path.replace('global/', '') res = requests.get(url=url, params=request_dict, headers=headers) result = res.json() if result['result_code'] == 0: # 处理订单 for item in result['result']['orders']: flag = 0 for each in order_list: if each['startTime'] == item['startTime'] and each['endTime'] == item['endTime']: each['count'] += int(item['count']) flag = 1 break if flag == 0: order_list.append(item) # 处理地区 for item in result['result']['regions']: flag = 0 for each in region_list: if each['countryName'] == item['countryName']: each['count'] += int(item['count']) region_count += int(item['count']) flag = 1 break if flag == 0: region_list.append(item) region_count += int(item['count']) for item in region_list: rate = round(item['count'] / region_count * 100, 2) item['rate'] = rate # 处理设备类型 for item in result['result']['deviceType']: flag = 0 for each in device_type_list: if each['typeName'] == item['typeName']: each['count'] += int(item['count']) device_type_count += int(item['count']) flag = 1 break if flag == 0: 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) 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) res = { 'orders': order_list, 'regions': CommonService.list_sort(region_list), 'deviceType': CommonService.list_sort(device_type_list), 'repeatRate': repeat_rate, 'repeatCount': repeat_count, 'orderCount': order_count } return response.json(0, res) except Exception as e: return response.json(500, repr(e))