Эх сурвалжийг харах

后台界面云存用户新增导出按钮

chenshibin 3 жил өмнө
parent
commit
76c6fb64f9

+ 192 - 6
AdminController/ServeManagementController.py

@@ -8,11 +8,13 @@ import uuid
 import boto3
 import threading
 import logging
+
+import xlwt
 from boto3.session import Session
 from django.http import JsonResponse, HttpResponseRedirect, HttpResponse, StreamingHttpResponse
 from django.views.generic.base import View
 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.TokenObject import TokenObject
 from Object.UidTokenObject import UidTokenObject
@@ -35,9 +37,8 @@ class serveManagement(View):
     def validation(self, request_dict, request, operation):
         language = request_dict.get('language', 'en')
         response = ResponseObject(language, 'pc')
-        if operation == 'getCloudUserList':
-            return self.getCloudUserList(request_dict, response)
-            return 0
+        if operation == 'exportCloudUserList':  # 导出云存用户信息
+            return self.exportCloudUserList(request_dict, response)
         else:
             tko = TokenObject(
                 request.META.get('HTTP_AUTHORIZATION'),
@@ -85,8 +86,8 @@ class serveManagement(View):
                 return self.deleteDevicePackage(userID, request_dict, response)
             elif operation == 'experiencereset':  # 重置设备云存体验
                 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:
                 return response.json(404)
 
@@ -746,6 +747,10 @@ class serveManagement(View):
         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)
+
         pageNo = request_dict.get('pageNo', None)
         pageSize = request_dict.get('pageSize', None)
         if not all([pageNo, pageSize]):
@@ -795,6 +800,14 @@ class serveManagement(View):
                     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')
             list_data = []
@@ -841,9 +854,182 @@ class serveManagement(View):
                     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)
             return response.json(
                 0, {'list': list_data, 'total': count})
         except Exception as e:
             print(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)
+
+
+        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')
+            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
+
+            num = 1
+            for item in list_data:
+                fieldnum = 0
+                for key in item:
+                    sheet1.write(num, fieldnum, item[key])
+                    fieldnum = fieldnum+1
+                num =num+1
+            workbook.save(response)
+            return response
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))