Przeglądaj źródła

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

chenshibin 3 lat temu
rodzic
commit
76c6fb64f9
1 zmienionych plików z 192 dodań i 6 usunięć
  1. 192 6
      AdminController/ServeManagementController.py

+ 192 - 6
AdminController/ServeManagementController.py

@@ -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,8 @@ 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)
         else:
         else:
             tko = TokenObject(
             tko = TokenObject(
                 request.META.get('HTTP_AUTHORIZATION'),
                 request.META.get('HTTP_AUTHORIZATION'),
@@ -85,8 +86,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 +747,10 @@ 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)
+
         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,6 +800,14 @@ 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')
             list_data = []
             list_data = []
@@ -841,9 +854,182 @@ 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)
+
+
+        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))