瀏覽代碼

后台订单新增交易号查询,云存列表增加ai标签查询,定时删除AI标签

zhangdongming 2 年之前
父節點
當前提交
d91179300d
共有 4 個文件被更改,包括 57 次插入49 次删除
  1. 13 14
      AdminController/ServeManagementController.py
  2. 19 13
      Controller/CloudStorage.py
  3. 11 1
      Controller/Cron/CronTaskController.py
  4. 14 21
      Service/VodHlsService.py

+ 13 - 14
AdminController/ServeManagementController.py

@@ -103,7 +103,7 @@ class serveManagement(View):
             elif operation == 'getCloudUserList':  # 获取云存用户信息
                 return self.getCloudUserList(request_dict, response)
             elif operation == 'deviceAttritionAlert':  # 流失预警
-                return self.deviceAttritionAlert(request_dict, response, request)
+                return self.deviceAttritionAlert(request_dict, response)
             elif operation == 'deactivationPackage':  # 停用套餐
                 return self.deactivationPackage(request_dict, response)
             elif operation == 'paypal-cycle-cancel':  # 取消循环扣款
@@ -682,6 +682,7 @@ class serveManagement(View):
         timeRange = request_dict.getlist('timeRange[]', None)
         orderType = request_dict.get('orderType', None)
         serialNumber = request_dict.get('serialNumber', None)
+        trade_no = request_dict.get('tradeNo', None)
 
         if not all([pageNo, pageSize]):
             return response.json(444)
@@ -707,10 +708,11 @@ class serveManagement(View):
                 omqs = omqs.filter(status=status)
             if orderType:
                 omqs = omqs.filter(order_type=int(orderType))
+            if trade_no:
+                omqs = omqs.filter(trade_no=trade_no)
             if serialNumber:
-                device_info_qs = Device_Info.objects.filter(serial_number=serialNumber).values('UID')
-                uid = device_info_qs[0]['UID'] if device_info_qs.exists() else 'N/A'
-                omqs = omqs.filter(UID=uid)
+                device_uid = CommonService.query_uid_with_serial(serialNumber)
+                omqs = omqs.filter(UID=device_uid)
             if timeRange:
                 startTime, endTime = int(
                     timeRange[0][:-3]), int(timeRange[1][:-3])
@@ -725,7 +727,8 @@ class serveManagement(View):
 
             order_ql = omqs.values("orderID", "UID", "userID__username", "userID__NickName", "channel", "desc", "price",
                                    "refunded_amount", "currency", "addTime", "updTime", "paypal", "payType",
-                                   "rank__day", "rank__price", "status", "order_type", "paymentID", "trade_no")
+                                   "rank__day", "rank__price", "status", "order_type", "paymentID", "trade_no",
+                                   "payTime")
             order_ql = order_ql.order_by('-addTime')  # 根据CDK创建时间降序排序
             order_ql = order_ql[(page - 1) * line:page * line]
             for order in order_ql:
@@ -747,6 +750,7 @@ class serveManagement(View):
                     'rank__price': order['rank__price'],
                     'status': order['status'],
                     'order_type': order['order_type'],
+                    'payTime': order['payTime'] if order['payTime'] else 'N/A'
                 }
                 #  订单显示(或不显示)停用/退款功能
                 if order['order_type'] == 0:  # 云存
@@ -1425,7 +1429,7 @@ class serveManagement(View):
             return response.json(500, repr(e))
 
     @classmethod
-    def deviceAttritionAlert(cls, request_dict, response, request):
+    def deviceAttritionAlert(cls, request_dict, response):
         """
         流失预警界面
         @param request_dict:
@@ -1519,16 +1523,11 @@ class serveManagement(View):
                         uid_set_qs = UidSetModel.objects.filter(uid=uid).values('ucode', 'device_type')
                         ucode = uid_set_qs[0]['ucode'] if uid_set_qs.exists() else ''
                         device_type = uid_set_qs[0]['device_type'] if uid_set_qs.exists() else ''
-                        if len(ucode) > 4:
-                            number = ucode[-4]
-                        else:
-                            continue
-                        device_type_qs = DeviceTypeModel.objects.filter(type=device_type).values('model')
-                        model = device_type_qs[0]['model'] if device_type_qs.exists() else ''
+                        cloud_vod = CommonService.is_cloud_device(ucode, device_type)
                         #  判断设备是否为ipc设备和是否支持云存
-                        if model == 2 and number in ['4', '5']:
+                        if cloud_vod:
                             device_number += 1
-                            item['device_number'] = device_number
+                    item['device_number'] = device_number
                 item['other_device'] = 0
                 not_upload_list.append(item)
             return response.json(0, {'result_list': not_upload_list, 'total': total})

+ 19 - 13
Controller/CloudStorage.py

@@ -27,7 +27,7 @@ from Controller.CloudPhoto.CloudServiceController import CloudServiceController
 from Controller.PaymentCycle import Paypal
 from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, UID_Bucket, StsCrdModel, \
     ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMsgModel, Unused_Uid_Meal, PromotionRuleModel, \
-    VideoPlaybackTimeModel, CouponModel, VodBucketModel, VodHlsSummary
+    VideoPlaybackTimeModel, CouponModel, VodBucketModel, VodHlsSummary, VodHlsTagType
 from Object.AWS.AmazonS3Util import AmazonS3Util
 from Object.AWS.S3Email import S3Email
 from Object.AliPayObject import AliPayObject
@@ -451,6 +451,7 @@ class CloudStorageView(View):
         end_time = request_dict.get('endTime', None)
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
+        event_types = request_dict.get('eventTypes', None)
 
         if not all([uid, channel, start_time, end_time]):
             return response.json(444)
@@ -486,12 +487,18 @@ class CloudStorageView(View):
             "dvQsModelOverTime": device_info_qs_time_over,
             "UidBucketModelOverTime": uid_bucket_qs_time_over,
         })
-
+        type_list = []
+        if event_types:
+            if ',' in event_types:
+                type_list = event_types.split(',')
+                type_list = [int(i.strip()) for i in type_list]
+            else:
+                type_list = [int(event_types)]
         split_vod_hls_obj = SplitVodHlsObject()
         vod_hls_qs = split_vod_hls_obj.get_vod_hls_data(uid=uid, channel=channel,
                                                         end_time__gte=now_time,
                                                         start_time__range=(start_time, end_time),
-                                                        ) \
+                                                        type_list=type_list) \
             .values("id", "start_time", "sec", "fg", "bucket_id")
 
         vod_play_list = []
@@ -527,6 +534,8 @@ class CloudStorageView(View):
             "awsObjectOverTime": aws_object_over_time,
         })
 
+        ids = [val['id'] for val in vod_hls_qs]
+        tag_type_list = SplitVodHlsObject.query_tag_type_list(ids)
         for vod in vod_hls_qs:
             bucket_name = regroup_bucket_qs[vod['bucket_id']]['bucket']
             thumbs_png = '{uid}/vod{channel}/{time}/Thumb.jpeg'.format(uid=uid, channel=channel, time=vod['start_time'])
@@ -535,6 +544,12 @@ class CloudStorageView(View):
                       'uid={uid}&channel={channel}&time={time}&sign=tktktktk'. \
                 format(server_domain=SERVER_DOMAIN_SSL, uid=uid_token, channel=channel, time=vod['start_time'])
             ts_num = int(vod['fg']) & 0xf
+            dict_item = [item for item in tag_type_list if item['vod_hls_id'] == vod['id']]
+            types = []
+            if dict_item:
+                tag_qs = VodHlsTagType.objects.filter(tag_id=dict_item[0]['id']).values('type')
+                types = [val['type'] for val in tag_qs]
+
             vod_play_list.append({
                 'start_time': vod['start_time'],
                 'sign_url': vod_url,
@@ -542,6 +557,7 @@ class CloudStorageView(View):
                 'sec': vod['sec'],
                 'ts_num': ts_num,
                 'vod_id': vod['id'],
+                'types': types
             })
         vod_play_list = sorted(vod_play_list, key=lambda item: -item['start_time'])
         generate_presigned_over_time = int(time.time())
@@ -606,16 +622,6 @@ class CloudStorageView(View):
                 return response.json(10, {'msg': '设备未开启云存'})
 
             # 保存云存信息数据
-            # 创建旧表数据
-            VodHlsModel.objects.create(
-                uid=uid,
-                channel=channel,
-                time=start_time,
-                endTime=end_time,
-                bucket_id=bucket_id,
-                fg=fg,
-                sec=sec,
-            )
             # 创建分表数据
             split_vod_hls_obj = SplitVodHlsObject()
             vod_vo, week = split_vod_hls_obj.creat_vod_hls_data(uid=uid, channel=channel, start_time=start_time,

+ 11 - 1
Controller/Cron/CronTaskController.py

@@ -21,7 +21,7 @@ from Ansjer.config import USED_SERIAL_REDIS_LIST, UNUSED_SERIAL_REDIS_LIST, CONF
 from Model.models import Device_User, Device_Info, UidSetModel, UID_Bucket, Unused_Uid_Meal, Order_Model, StsCrdModel, \
     VodHlsModel, ExperienceContextModel, AiService, VodHlsSummary, VideoPlaybackTimeModel, DeviceUserSummary, \
     CountryModel, DeviceTypeModel, OrdersSummary, DeviceInfoSummary, CompanySerialModel, \
-    CloudLogModel, UidCloudStorageCount, UserExModel, DeviceDomainRegionModel
+    CloudLogModel, UidCloudStorageCount, UserExModel, DeviceDomainRegionModel, VodHlsTag, VodHlsTagType
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.utils import LocalDateTimeUtil
@@ -143,6 +143,7 @@ class CronDelDataView(View):
     def delVodHls(response):
         nowTime = int(time.time())
         try:
+            CronDelDataView.del_vod_hls_tag()
             cursor = connection.cursor()
             month_ago_time = nowTime - 3 * 30 * 24 * 60 * 60  # 删除3个月前的数据
             sql = 'DELETE FROM `vod_hls` WHERE endTime<{} LIMIT 50000'.format(month_ago_time)
@@ -155,6 +156,15 @@ class CronDelDataView(View):
         except Exception as e:
             return response.json(500, repr(e))
 
+    @staticmethod
+    def del_vod_hls_tag():
+        """
+        删除AI标签记录
+        """
+        e_time = LocalDateTimeUtil.get_before_days_timestamp(int(time.time()), 30)
+        VodHlsTagType.objects.filter(created_time__lt=e_time).delete()
+        VodHlsTag.objects.filter(created_time__lt=e_time).delete()
+
     @staticmethod
     def delCloudLog(response):
         nowTime = int(time.time())

+ 14 - 21
Service/VodHlsService.py

@@ -92,33 +92,33 @@ class SplitVodHlsObject:
             end_time = datetime.datetime.fromtimestamp(int(end_time))
             time_list = CommonService.cutting_time_stamp(start_time, end_time)
             day_list = []
-            # type_list = kwargs.get('type_list')
+            type_list = kwargs.get('type_list')
             for time_item in time_list:
                 week = datetime.datetime.fromtimestamp(int(time_item[0])).isoweekday()
                 if week not in day_list:
                     day_list.append(week)
             for week in day_list:
-                # kwargs['type_list'] = type_list
+                kwargs['type_list'] = type_list
                 if week == 1:
-                    # kwargs = self.vod_query_param(week, **kwargs)
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_mon = VodHlsMon.objects.filter(**kwargs)
                 elif week == 2:
-                    # kwargs = self.vod_query_param(week, **kwargs)
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_tus = VodHlsTues.objects.filter(**kwargs)
                 elif week == 3:
-                    # kwargs = self.vod_query_param(week, **kwargs)
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_wed = VodHlsWed.objects.filter(**kwargs)
                 elif week == 4:
-                    # kwargs = self.vod_query_param(week, **kwargs)
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_thur = VodHlsThur.objects.filter(**kwargs)
                 elif week == 5:
-                    # kwargs = self.vod_query_param(week, **kwargs)
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_fri = VodHlsFri.objects.filter(**kwargs)
                 elif week == 6:
-                    # kwargs = self.vod_query_param(week, **kwargs)
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_sat = VodHlsSat.objects.filter(**kwargs)
                 elif week == 7:
-                    # kwargs = self.vod_query_param(week, **kwargs)
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_sun = VodHlsSun.objects.filter(**kwargs)
             vod_hls = vod_hls.union(vod_hls_mon, vod_hls_tus, vod_hls_wed, vod_hls_thur, vod_hls_fri, vod_hls_sat,
                                     vod_hls_sun)
@@ -229,23 +229,16 @@ class SplitVodHlsObject:
             return False
 
     @classmethod
-    def query_tag_type_list(cls, vod_id):
+    def query_tag_type_list(cls, vod_ids):
         """
         根据云存ID获取AI类型
         @return:
         """
         try:
-            cursor = connection.cursor()
-            sql = 'SELECT vhtt.type FROM '
-            sql += 'vod_hls_tag vht INNER JOIN vod_hls_tag_type vhtt ON vht.id = vhtt.tag_id '
-            sql += 'WHERE vht.vod_hls_id = %s  '
-
-            cursor.execute(sql, [vod_id])
-            data_list = cursor.fetchall()
-            cursor.close()  # 执行完,关闭
-            connection.close()
-            data_list = [val[0] for val in data_list]
-            return data_list
+            qs = VodHlsTag.objects.filter(vod_hls_id__in=vod_ids).values('id', 'vod_hls_id')
+            if not qs:
+                return []
+            return list(qs)
         except Exception as e:
             print('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return []