|
@@ -7,20 +7,13 @@
|
|
|
@Software: PyCharm
|
|
|
"""
|
|
|
|
|
|
-import time
|
|
|
-
|
|
|
-import oss2
|
|
|
-from django.db import connection
|
|
|
-from django.db import transaction
|
|
|
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 Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
|
|
|
-from Controller.DeviceConfirmRegion import Device_Region
|
|
|
from Model.models import Order_Model, CountryModel, Device_Info, DeviceTypeModel
|
|
|
-from Object.ResponseObject import ResponseObject
|
|
|
-from Object.TokenObject import TokenObject
|
|
|
from Service.CommonService import CommonService
|
|
|
|
|
|
|
|
@@ -43,6 +36,20 @@ class ServiceDataView(View):
|
|
|
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)
|
|
|
|
|
@@ -79,13 +86,13 @@ class ServiceDataView(View):
|
|
|
order_list = []
|
|
|
for item in time_list:
|
|
|
order_temp_qs = order_qs.filter(addTime__range=item)
|
|
|
- order_dict = {
|
|
|
- 'orderId': order_temp_qs[0].orderID,
|
|
|
- 'count': order_temp_qs.count(),
|
|
|
- 'startTime': item[0],
|
|
|
- 'endTime': item[1]
|
|
|
- }
|
|
|
- order_list.append(order_dict)
|
|
|
+ if order_temp_qs.exists():
|
|
|
+ order_dict = {
|
|
|
+ 'count': order_temp_qs.count(),
|
|
|
+ 'startTime': item[0],
|
|
|
+ 'endTime': item[1]
|
|
|
+ }
|
|
|
+ order_list.append(order_dict)
|
|
|
|
|
|
# 区域订单统计
|
|
|
region_list = []
|
|
@@ -104,7 +111,7 @@ class ServiceDataView(View):
|
|
|
|
|
|
# 设备类型订单统计
|
|
|
device_type_list = []
|
|
|
- device_type_qs = order_qs.values('UID').annotate()
|
|
|
+ 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:
|
|
@@ -118,8 +125,8 @@ class ServiceDataView(View):
|
|
|
device_qs = Device_Info.objects.filter(UID__in=uid_list).values('Type').annotate(
|
|
|
count=Count('Type', distinct=True)).order_by('-count')
|
|
|
for item in device_qs:
|
|
|
- type_qs = DeviceTypeModel.objects.filter(id=item['Type'])
|
|
|
- type_name = type_qs[0]['name'] if type_qs.exists() else '未知类型'
|
|
|
+ type_name = DEVICE_TYPE.get(item['Type'], '未知类型')
|
|
|
+ type_name = type_name if type_name != 'UNKOWN' else '未知类型'
|
|
|
type_rate = round(item['count'] / device_count * 100, 2)
|
|
|
temp_total = order_qs.filter(UID__in=uid_type_dict[item['Type']]).aggregate(total=Sum('price'))['total']
|
|
|
total_rate = round(temp_total / total * 100, 2)
|
|
@@ -127,6 +134,7 @@ class ServiceDataView(View):
|
|
|
'typeName': type_name,
|
|
|
'count': item['count'],
|
|
|
'typeRate': type_rate,
|
|
|
+ 'totalMoney': temp_total,
|
|
|
'totalRate': total_rate
|
|
|
}
|
|
|
device_type_list.append(device_temp_qs)
|
|
@@ -153,3 +161,618 @@ class ServiceDataView(View):
|
|
|
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:
|
|
|
+ order_qs = Order_Model.objects.filter(order_type=store_meal_type, status=1,
|
|
|
+ addTime__range=(start_time, end_time)).filter(Q(price='0.00'))
|
|
|
+ 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)
|
|
|
+ if order_temp_qs.exists():
|
|
|
+ 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 = []
|
|
|
+ for item in device_type_qs:
|
|
|
+ uid_list.append(item['UID'])
|
|
|
+ device_count = len(set(uid_list))
|
|
|
+ device_qs = Device_Info.objects.filter(UID__in=uid_list).values('Type').annotate(
|
|
|
+ count=Count('Type', distinct=True)).order_by('-count')
|
|
|
+ for item in device_qs:
|
|
|
+ type_name = DEVICE_TYPE.get(item['Type'], '未知类型')
|
|
|
+ type_name = type_name if type_name != 'UNKOWN' else '未知类型'
|
|
|
+ type_rate = round(item['count'] / device_count * 100, 2)
|
|
|
+ device_temp_qs = {
|
|
|
+ 'typeName': type_name,
|
|
|
+ 'count': item['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_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'))
|
|
|
+ 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))
|
|
|
+ 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)
|
|
|
+ if order_temp_qs.exists():
|
|
|
+ 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 = []
|
|
|
+ for item in device_type_qs:
|
|
|
+ uid_list.append(item['UID'])
|
|
|
+ device_count = len(set(uid_list))
|
|
|
+ device_qs = Device_Info.objects.filter(UID__in=uid_list).values('Type').annotate(
|
|
|
+ count=Count('Type', distinct=True)).order_by('-count')
|
|
|
+ for item in device_qs:
|
|
|
+ type_name = DEVICE_TYPE.get(item['Type'], '未知类型')
|
|
|
+ type_name = type_name if type_name != 'UNKOWN' else '未知类型'
|
|
|
+ type_rate = round(item['count'] / device_count * 100, 2)
|
|
|
+ device_temp_qs = {
|
|
|
+ 'typeName': type_name,
|
|
|
+ 'count': item['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'))
|
|
|
+ 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'))
|
|
|
+ total = order_qs.count()
|
|
|
+
|
|
|
+ # 订单复购率
|
|
|
+ order_qs = order_qs.filter(Q(UID__in=uid_list))
|
|
|
+ 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)
|
|
|
+ if order_temp_qs.exists():
|
|
|
+ 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 = []
|
|
|
+ for item in device_type_qs:
|
|
|
+ uid_list.append(item['UID'])
|
|
|
+ device_count = len(set(uid_list))
|
|
|
+ device_qs = Device_Info.objects.filter(UID__in=uid_list).values('Type').annotate(
|
|
|
+ count=Count('Type', distinct=True)).order_by('-count')
|
|
|
+ for item in device_qs:
|
|
|
+ type_name = DEVICE_TYPE.get(item['Type'], '未知类型')
|
|
|
+ type_name = type_name if type_name != 'UNKOWN' else '未知类型'
|
|
|
+ type_rate = round(item['count'] / device_count * 100, 2)
|
|
|
+ device_temp_qs = {
|
|
|
+ 'typeName': type_name,
|
|
|
+ 'count': item['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:
|
|
|
+ """
|
|
|
+ ap_url = 'https://www.zositechc.cn/dataManagement/serviceData/payOrder'
|
|
|
+ as_url = 'https://www.zositecha.com/dataManagement/serviceData/payOrder'
|
|
|
+ na_url = 'https://www.dvema.com/dataManagement/serviceData/payOrder'
|
|
|
+ eu_url = 'https://www.zositeche.com/dataManagement/serviceData/payOrder'
|
|
|
+ local_url = 'http://127.0.0.1:8000/dataManagement/serviceData/payOrder'
|
|
|
+ url_list = [local_url]
|
|
|
+
|
|
|
+ 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:
|
|
|
+ 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': 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_global_free_order(cls, request, request_dict, response):
|
|
|
+ """
|
|
|
+ 查询全球免费订单数据
|
|
|
+ @param request:请求
|
|
|
+ @param request_dict:请求参数
|
|
|
+ @param response:响应对象
|
|
|
+ @return:
|
|
|
+ """
|
|
|
+ ap_url = 'https://www.zositechc.cn/dataManagement/serviceData/freeOrder'
|
|
|
+ as_url = 'https://www.zositecha.com/dataManagement/serviceData/freeOrder'
|
|
|
+ na_url = 'https://www.dvema.com/dataManagement/serviceData/freeOrder'
|
|
|
+ eu_url = 'https://www.zositeche.com/dataManagement/serviceData/freeOrder'
|
|
|
+ local_url = 'http://127.0.0.1:8000/dataManagement/serviceData/freeOrder'
|
|
|
+ url_list = [local_url]
|
|
|
+ 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:
|
|
|
+ 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': region_list,
|
|
|
+ 'deviceType': device_type_list,
|
|
|
+ }
|
|
|
+ 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:
|
|
|
+ """
|
|
|
+ ap_url = 'https://www.zositechc.cn/dataManagement/serviceData/firstPayOrder'
|
|
|
+ as_url = 'https://www.zositecha.com/dataManagement/serviceData/firstPayOrder'
|
|
|
+ na_url = 'https://www.dvema.com/dataManagement/serviceData/firstPayOrder'
|
|
|
+ eu_url = 'https://www.zositeche.com/dataManagement/serviceData/firstPayOrder'
|
|
|
+ local_url = 'http://127.0.0.1:8000/dataManagement/serviceData/firstPayOrder'
|
|
|
+ url_list = [local_url]
|
|
|
+ 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:
|
|
|
+ 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': region_list,
|
|
|
+ 'deviceType': 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:
|
|
|
+ """
|
|
|
+ ap_url = 'https://www.zositechc.cn/dataManagement/businessData/repeatPayOrder'
|
|
|
+ as_url = 'https://www.zositecha.com/dataManagement/businessData/repeatPayOrder'
|
|
|
+ na_url = 'https://www.dvema.com/dataManagement/businessData/repeatPayOrder'
|
|
|
+ eu_url = 'https://www.zositeche.com/dataManagement/businessData/repeatPayOrder'
|
|
|
+ local_url = 'http://127.0.0.1:8000/dataManagement/businessData/repeatPayOrder'
|
|
|
+ url_list = [local_url]
|
|
|
+ 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:
|
|
|
+ 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': region_list,
|
|
|
+ 'deviceType': 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))
|