|
@@ -8,11 +8,13 @@ import uuid
|
|
import boto3
|
|
import boto3
|
|
import threading
|
|
import threading
|
|
import logging
|
|
import logging
|
|
|
|
+
|
|
|
|
+import xlwt
|
|
from boto3.session import Session
|
|
from boto3.session import Session
|
|
from django.http import JsonResponse, HttpResponseRedirect, HttpResponse, StreamingHttpResponse
|
|
from django.http import JsonResponse, HttpResponseRedirect, HttpResponse, StreamingHttpResponse
|
|
from django.views.generic.base import View
|
|
from django.views.generic.base import View
|
|
from Model.models import Device_Info, Role, MenuModel, VodBucketModel, CDKcontextModel, Store_Meal, Order_Model, \
|
|
from Model.models import Device_Info, Role, MenuModel, VodBucketModel, CDKcontextModel, Store_Meal, Order_Model, \
|
|
- UID_Bucket, ExperienceContextModel, Lang, Device_User, CloudLogModel
|
|
|
|
|
|
+ UID_Bucket, ExperienceContextModel, Lang, Device_User, CloudLogModel, UidSetModel
|
|
from Object.ResponseObject import ResponseObject
|
|
from Object.ResponseObject import ResponseObject
|
|
from Object.TokenObject import TokenObject
|
|
from Object.TokenObject import TokenObject
|
|
from Object.UidTokenObject import UidTokenObject
|
|
from Object.UidTokenObject import UidTokenObject
|
|
@@ -35,9 +37,10 @@ class serveManagement(View):
|
|
def validation(self, request_dict, request, operation):
|
|
def validation(self, request_dict, request, operation):
|
|
language = request_dict.get('language', 'en')
|
|
language = request_dict.get('language', 'en')
|
|
response = ResponseObject(language, 'pc')
|
|
response = ResponseObject(language, 'pc')
|
|
- if operation == 'getCloudUserList':
|
|
|
|
- return self.getCloudUserList(request_dict, response)
|
|
|
|
- return 0
|
|
|
|
|
|
+ if operation == 'exportCloudUserList': # 导出云存用户信息
|
|
|
|
+ return self.exportCloudUserList(request_dict, response)
|
|
|
|
+ elif operation == 'getCloudDataList':
|
|
|
|
+ return self.getCloudDataList(request_dict, response)
|
|
else:
|
|
else:
|
|
tko = TokenObject(
|
|
tko = TokenObject(
|
|
request.META.get('HTTP_AUTHORIZATION'),
|
|
request.META.get('HTTP_AUTHORIZATION'),
|
|
@@ -85,8 +88,8 @@ class serveManagement(View):
|
|
return self.deleteDevicePackage(userID, request_dict, response)
|
|
return self.deleteDevicePackage(userID, request_dict, response)
|
|
elif operation == 'experiencereset': # 重置设备云存体验
|
|
elif operation == 'experiencereset': # 重置设备云存体验
|
|
return self.do_experience_reset(request_dict, userID, response)
|
|
return self.do_experience_reset(request_dict, userID, response)
|
|
- elif operation == 'getCloudUserList': # 重置设备云存体验
|
|
|
|
- return self.getCloudUserList(request_dict, userID, response)
|
|
|
|
|
|
+ elif operation == 'getCloudUserList': # 获取云存用户信息
|
|
|
|
+ return self.getCloudUserList(request_dict, response)
|
|
else:
|
|
else:
|
|
return response.json(404)
|
|
return response.json(404)
|
|
|
|
|
|
@@ -746,6 +749,13 @@ class serveManagement(View):
|
|
userEmail = request_dict.get('userEmail', None)
|
|
userEmail = request_dict.get('userEmail', None)
|
|
payType = request_dict.get('payType', None)
|
|
payType = request_dict.get('payType', None)
|
|
|
|
|
|
|
|
+ # uid_set 表查询
|
|
|
|
+ ucode = request_dict.getlist('ucode', None)
|
|
|
|
+ version = request_dict.getlist('version', None)
|
|
|
|
+
|
|
|
|
+ # 日志表查询
|
|
|
|
+ logTimeRange = request_dict.getlist('logTimeRange[]', None)
|
|
|
|
+
|
|
pageNo = request_dict.get('pageNo', None)
|
|
pageNo = request_dict.get('pageNo', None)
|
|
pageSize = request_dict.get('pageSize', None)
|
|
pageSize = request_dict.get('pageSize', None)
|
|
if not all([pageNo, pageSize]):
|
|
if not all([pageNo, pageSize]):
|
|
@@ -795,8 +805,26 @@ class serveManagement(View):
|
|
id__in=order_qs.values_list(
|
|
id__in=order_qs.values_list(
|
|
'uid_bucket_id', flat=True))
|
|
'uid_bucket_id', flat=True))
|
|
|
|
|
|
|
|
+ uidset_qs = UidSetModel.objects.filter(
|
|
|
|
+ uid__in=uid_bucket_qs.values('uid'))
|
|
|
|
+ if ucode or version:
|
|
|
|
+ if ucode:
|
|
|
|
+ uidset_qs = uidset_qs.filter(ucode=ucode)
|
|
|
|
+ if version:
|
|
|
|
+ uidset_qs = uidset_qs.filter(version=version)
|
|
|
|
+
|
|
cg_qs = CloudLogModel.objects.filter(
|
|
cg_qs = CloudLogModel.objects.filter(
|
|
operation='cloudstorage/queryvodlist')
|
|
operation='cloudstorage/queryvodlist')
|
|
|
|
+ if logTimeRange:
|
|
|
|
+ logStartTime, logEndTime = int(
|
|
|
|
+ logTimeRange[0][:-3]), int(logTimeRange[1][:-3])
|
|
|
|
+ cg_qs = cg_qs.filter(
|
|
|
|
+ time__gte=logStartTime,
|
|
|
|
+ time__lte=logEndTime)
|
|
|
|
+ # 过滤套餐关联的UID_Bucket数据
|
|
|
|
+ uid_bucket_qs = uid_bucket_qs.filter(
|
|
|
|
+ uid__in=cg_qs.values('uid'))
|
|
|
|
+
|
|
list_data = []
|
|
list_data = []
|
|
count = uid_bucket_qs.count()
|
|
count = uid_bucket_qs.count()
|
|
uid_bucket_qs = uid_bucket_qs[(page - 1) * line:page * line]
|
|
uid_bucket_qs = uid_bucket_qs[(page - 1) * line:page * line]
|
|
@@ -841,9 +869,278 @@ class serveManagement(View):
|
|
data['playcount'] = cg_qs.filter(
|
|
data['playcount'] = cg_qs.filter(
|
|
operation='cloudstorage/queryvodlist', uid=order['UID']).count()
|
|
operation='cloudstorage/queryvodlist', uid=order['UID']).count()
|
|
|
|
|
|
|
|
+ for uidset in uidset_qs.filter(
|
|
|
|
+ uid=uid_bucket.uid).values(
|
|
|
|
+ 'ucode',
|
|
|
|
+ 'version'):
|
|
|
|
+ data['ucode'] = uidset['ucode']
|
|
|
|
+ data['version'] = uidset['version']
|
|
|
|
+
|
|
list_data.append(data)
|
|
list_data.append(data)
|
|
return response.json(
|
|
return response.json(
|
|
0, {'list': list_data, 'total': count})
|
|
0, {'list': list_data, 'total': count})
|
|
except Exception as e:
|
|
except Exception as e:
|
|
print(e)
|
|
print(e)
|
|
return response.json(500, repr(e))
|
|
return response.json(500, repr(e))
|
|
|
|
+
|
|
|
|
+ def exportCloudUserList(self, request_dict, response):
|
|
|
|
+ # UID_Bucket表查询数据
|
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
|
+ status = request_dict.get('status', None)
|
|
|
|
+ use_status = request_dict.get('use_status', None)
|
|
|
|
+ has_unused = request_dict.get('has_unused', None)
|
|
|
|
+ addTimeRange = request_dict.getlist('addTimeRange[]', None)
|
|
|
|
+ endTimeRange = request_dict.getlist('endTimeRange[]', None)
|
|
|
|
+
|
|
|
|
+ # Order_Model表查询数据
|
|
|
|
+ username = request_dict.get('username', None)
|
|
|
|
+ phone = request_dict.get('phone', None)
|
|
|
|
+ userEmail = request_dict.get('userEmail', None)
|
|
|
|
+ payType = request_dict.get('payType', None)
|
|
|
|
+
|
|
|
|
+ #uid_set 表查询
|
|
|
|
+ ucode = request_dict.getlist('ucode', None)
|
|
|
|
+ version = request_dict.getlist('version', None)
|
|
|
|
+
|
|
|
|
+ # 日志表查询
|
|
|
|
+ logTimeRange = request_dict.getlist('logTimeRange[]', None)
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ uid_bucket_qs = UID_Bucket.objects.all()
|
|
|
|
+ if uid:
|
|
|
|
+ uid_bucket_qs = uid_bucket_qs.filter(uid__contains=uid)
|
|
|
|
+ if status:
|
|
|
|
+ uid_bucket_qs = uid_bucket_qs.filter(status=status)
|
|
|
|
+ if use_status:
|
|
|
|
+ uid_bucket_qs = uid_bucket_qs.filter(use_status=use_status)
|
|
|
|
+ if has_unused:
|
|
|
|
+ uid_bucket_qs = uid_bucket_qs.filter(has_unused=has_unused)
|
|
|
|
+ if addTimeRange:
|
|
|
|
+ addStartTime, addEndTime = int(
|
|
|
|
+ addTimeRange[0][:-3]), int(addTimeRange[1][:-3])
|
|
|
|
+ uid_bucket_qs = uid_bucket_qs.filter(
|
|
|
|
+ addTime__gte=addStartTime,
|
|
|
|
+ addTime__lte=addEndTime)
|
|
|
|
+ if endTimeRange:
|
|
|
|
+ endStartTime, endEndTime = int(
|
|
|
|
+ endTimeRange[0][:-3]), int(endTimeRange[1][:-3])
|
|
|
|
+ uid_bucket_qs = uid_bucket_qs.filter(
|
|
|
|
+ addTime__gte=endStartTime,
|
|
|
|
+ addTime__lte=endEndTime)
|
|
|
|
+ if not uid_bucket_qs.exists():
|
|
|
|
+ return response.json(0, [])
|
|
|
|
+
|
|
|
|
+ order_qs = Order_Model.objects.filter(
|
|
|
|
+ uid_bucket_id__in=uid_bucket_qs.values('id'))
|
|
|
|
+ if username or phone or userEmail or payType:
|
|
|
|
+ if username:
|
|
|
|
+ order_qs = order_qs.filter(userID__username=username)
|
|
|
|
+ if phone:
|
|
|
|
+ order_qs = order_qs.filter(userID__phone__contains=phone)
|
|
|
|
+ if userEmail:
|
|
|
|
+ order_qs = order_qs.filter(
|
|
|
|
+ userID__userEmail__contains=userEmail)
|
|
|
|
+ if payType:
|
|
|
|
+ order_qs = order_qs.filter(payType=int(payType))
|
|
|
|
+ # 过滤套餐关联的UID_Bucket数据
|
|
|
|
+ uid_bucket_qs = uid_bucket_qs.filter(
|
|
|
|
+ id__in=order_qs.values_list(
|
|
|
|
+ 'uid_bucket_id', flat=True))
|
|
|
|
+
|
|
|
|
+ uidset_qs = UidSetModel.objects.filter(
|
|
|
|
+ uid__in=uid_bucket_qs.values('uid'))
|
|
|
|
+ if ucode or version:
|
|
|
|
+ if ucode:
|
|
|
|
+ uidset_qs = uidset_qs.filter(ucode=ucode)
|
|
|
|
+ if version:
|
|
|
|
+ uidset_qs = uidset_qs.filter(version=version)
|
|
|
|
+
|
|
|
|
+ cg_qs = CloudLogModel.objects.filter(
|
|
|
|
+ operation='cloudstorage/queryvodlist')
|
|
|
|
+ if logTimeRange:
|
|
|
|
+ logStartTime, logEndTime = int(
|
|
|
|
+ logTimeRange[0][:-3]), int(logTimeRange[1][:-3])
|
|
|
|
+ cg_qs = cg_qs.filter(
|
|
|
|
+ time__gte=logStartTime,
|
|
|
|
+ time__lte=logEndTime)
|
|
|
|
+ list_data = []
|
|
|
|
+ count = uid_bucket_qs.count()
|
|
|
|
+ for uid_bucket in uid_bucket_qs:
|
|
|
|
+ data = {
|
|
|
|
+ 'id': uid_bucket.id,
|
|
|
|
+ 'uid': uid_bucket.uid,
|
|
|
|
+ 'channel': uid_bucket.channel,
|
|
|
|
+ 'status': uid_bucket.status,
|
|
|
|
+ 'endTime': time.strftime(
|
|
|
|
+ "%Y--%m--%d %H:%M:%S",
|
|
|
|
+ time.localtime(
|
|
|
|
+ uid_bucket.endTime)),
|
|
|
|
+ 'addTime': time.strftime(
|
|
|
|
+ "%Y--%m--%d %H:%M:%S",
|
|
|
|
+ time.localtime(
|
|
|
|
+ uid_bucket.addTime)),
|
|
|
|
+ 'use_status': uid_bucket.use_status,
|
|
|
|
+ 'has_unused': uid_bucket.has_unused}
|
|
|
|
+
|
|
|
|
+ for order in order_qs.filter(
|
|
|
|
+ uid_bucket_id=uid_bucket.id).values(
|
|
|
|
+ 'uid_bucket_id',
|
|
|
|
+ 'desc',
|
|
|
|
+ 'userID__userID',
|
|
|
|
+ 'UID',
|
|
|
|
+ 'price',
|
|
|
|
+ 'payType',
|
|
|
|
+ 'userID__username',
|
|
|
|
+ 'userID__phone',
|
|
|
|
+ 'userID__userEmail',
|
|
|
|
+ 'userID__data_joined'):
|
|
|
|
+ data['desc'] = order['desc']
|
|
|
|
+ data['payType'] = order['payType']
|
|
|
|
+ data['price'] = order['price']
|
|
|
|
+ data['username'] = order['userID__username']
|
|
|
|
+ data['phone'] = order['userID__phone']
|
|
|
|
+ data['userEmail'] = order['userID__userEmail']
|
|
|
|
+ data['data_joined'] = order['userID__data_joined'].strftime(
|
|
|
|
+ "%Y-%m-%d %H:%M:%S")
|
|
|
|
+ data['playcount'] = cg_qs.filter(
|
|
|
|
+ operation='cloudstorage/queryvodlist', uid=order['UID']).count()
|
|
|
|
+
|
|
|
|
+ for uidset in uidset_qs.filter(
|
|
|
|
+ uid=uid_bucket.uid).values(
|
|
|
|
+ 'ucode',
|
|
|
|
+ 'version'):
|
|
|
|
+ data['ucode'] = uidset['ucode']
|
|
|
|
+ data['version'] = uidset['version']
|
|
|
|
+
|
|
|
|
+ list_data.append(data)
|
|
|
|
+
|
|
|
|
+ response = HttpResponse(content_type='application/vnd.ms-excel')
|
|
|
|
+ response['Content-Disposition'] = 'attachment; filename=userinfo.xls'
|
|
|
|
+ workbook = xlwt.Workbook(encoding='utf-8')
|
|
|
|
+ sheet1 = workbook.add_sheet('UID')
|
|
|
|
+
|
|
|
|
+ headtitle = [
|
|
|
|
+ 'id',
|
|
|
|
+ '用户账号',
|
|
|
|
+ '用户手机号',
|
|
|
|
+ '用户邮箱',
|
|
|
|
+ '注册时间',
|
|
|
|
+ '设备UID',
|
|
|
|
+ '设备通道',
|
|
|
|
+ '云存状态',
|
|
|
|
+ '添加时间',
|
|
|
|
+ '到期时间',
|
|
|
|
+ '使用状态',
|
|
|
|
+ '是否有未使用套餐',
|
|
|
|
+ '套餐描述',
|
|
|
|
+ '支付方式',
|
|
|
|
+ '价格',
|
|
|
|
+ '播放次数',
|
|
|
|
+ '产品编码',
|
|
|
|
+ '版本'
|
|
|
|
+ ]
|
|
|
|
+ headnum = 0
|
|
|
|
+ for title in headtitle:
|
|
|
|
+ sheet1.write(0, headnum, title)
|
|
|
|
+ headnum= headnum+1
|
|
|
|
+
|
|
|
|
+ fields = [
|
|
|
|
+ 'id',
|
|
|
|
+ 'username',
|
|
|
|
+ 'phone',
|
|
|
|
+ 'userEmail',
|
|
|
|
+ 'data_joined',
|
|
|
|
+ 'uid',
|
|
|
|
+ 'channel',
|
|
|
|
+ 'status',
|
|
|
|
+ 'addTime',
|
|
|
|
+ 'endTime',
|
|
|
|
+ 'use_status',
|
|
|
|
+ 'has_unused',
|
|
|
|
+ 'desc',
|
|
|
|
+ 'payType',
|
|
|
|
+ 'price',
|
|
|
|
+ 'playcount',
|
|
|
|
+ 'ucode',
|
|
|
|
+ 'version'
|
|
|
|
+ ]
|
|
|
|
+ num = 1
|
|
|
|
+ for item in list_data:
|
|
|
|
+ fieldnum = 0
|
|
|
|
+ for key in fields:
|
|
|
|
+ val = item[key]
|
|
|
|
+ if key == 'payType':
|
|
|
|
+ if val == 1:
|
|
|
|
+ val = 'PayPal'
|
|
|
|
+ if val == 2:
|
|
|
|
+ val = '支付宝'
|
|
|
|
+ if val == 3:
|
|
|
|
+ val = '微信支付'
|
|
|
|
+ if val == 10:
|
|
|
|
+ val = '免费体验'
|
|
|
|
+ if val == 11:
|
|
|
|
+ val = '激活码'
|
|
|
|
+
|
|
|
|
+ sheet1.write(num, fieldnum, val)
|
|
|
|
+ fieldnum = fieldnum+1
|
|
|
|
+ num =num+1
|
|
|
|
+ workbook.save(response)
|
|
|
|
+ return response
|
|
|
|
+ except Exception as e:
|
|
|
|
+ print(e)
|
|
|
|
+ return response.json(500, repr(e))
|
|
|
|
+
|
|
|
|
+ def getCloudDataList(self, request_dict, response):
|
|
|
|
+ year = request_dict.get('year', None)
|
|
|
|
+ Jan = int(time.mktime(time.strptime(year + '-1-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ Feb = int(time.mktime(time.strptime(year + '-2-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ Mar = int(time.mktime(time.strptime(year + '-3-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ Apr = int(time.mktime(time.strptime(year + '-4-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ May = int(time.mktime(time.strptime(year + '-5-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ Jun = int(time.mktime(time.strptime(year + '-6-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ Jul = int(time.mktime(time.strptime(year + '-7-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ Aug = int(time.mktime(time.strptime(year + '-8-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ Sep = int(time.mktime(time.strptime(year + '-9-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ Oct = int(time.mktime(time.strptime(year + '-10-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ Nov = int(time.mktime(time.strptime(year + '-11-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ Dec = int(time.mktime(time.strptime(year + '-12-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+ Jan_next = int(time.mktime(time.strptime(str(int(year)+1) + '-1-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
|
|
|
|
+
|
|
|
|
+ list_data = []
|
|
|
|
+ vod_bucket_qs = VodBucketModel.objects.filter()
|
|
|
|
+ if not vod_bucket_qs.exists():
|
|
|
|
+ return response.json(173)
|
|
|
|
+ try:
|
|
|
|
+ for vod_bucket in vod_bucket_qs:
|
|
|
|
+ vod_bucket_id = vod_bucket.id
|
|
|
|
+ store_meal = Store_Meal.objects.filter(bucket_id=vod_bucket_id, lang__lang='cn').values('lang__title', 'lang__content')
|
|
|
|
+ if not store_meal.exists():
|
|
|
|
+ continue
|
|
|
|
+ name = store_meal[0]['lang__title']+'-'+store_meal[0]['lang__content']
|
|
|
|
+ order = Order_Model.objects.filter(rank__bucket_id=vod_bucket_id)
|
|
|
|
+ Jan_count = order.filter(status=1, addTime__range=[Jan, Feb]).count()
|
|
|
|
+ Feb_count = order.filter(status=1, addTime__range=[Feb, Mar]).count()
|
|
|
|
+ Mar_count = order.filter(status=1, addTime__range=[Mar, Apr]).count()
|
|
|
|
+ Apr_count = order.filter(status=1, addTime__range=[Apr, May]).count()
|
|
|
|
+ May_count = order.filter(status=1, addTime__range=[May, Jun]).count()
|
|
|
|
+ Jun_count = order.filter(status=1, addTime__range=[Jun, Jul]).count()
|
|
|
|
+ Jul_count = order.filter(status=1, addTime__range=[Jul, Aug]).count()
|
|
|
|
+ Aug_count = order.filter(status=1, addTime__range=[Aug, Sep]).count()
|
|
|
|
+ Sep_count = order.filter(status=1, addTime__range=[Sep, Oct]).count()
|
|
|
|
+ Oct_count = order.filter(status=1, addTime__range=[Oct, Nov]).count()
|
|
|
|
+ Nov_count = order.filter(status=1, addTime__range=[Nov, Dec]).count()
|
|
|
|
+ Dec_count = order.filter(status=1, addTime__range=[Dec, Jan_next]).count()
|
|
|
|
+ data = [Jan_count, Feb_count, Mar_count, Apr_count, May_count, Jun_count, Jul_count, Aug_count, Sep_count,
|
|
|
|
+ Oct_count, Nov_count, Dec_count]
|
|
|
|
+
|
|
|
|
+ cloud_data = {
|
|
|
|
+ 'name': name,
|
|
|
|
+ 'type': 'line',
|
|
|
|
+ 'data': data,
|
|
|
|
+ }
|
|
|
|
+ list_data.append(cloud_data)
|
|
|
|
+
|
|
|
|
+ return response.json(0, {'list': list_data})
|
|
|
|
+ except Exception as e:
|
|
|
|
+ print(e)
|
|
|
|
+ return response.json(500, repr(e))
|