فهرست منبع

定时删除AI标签关联云存记录、云存视频列表通过AI标签筛选

zhangdongming 2 سال پیش
والد
کامیت
06d0e2c4c4
3فایلهای تغییر یافته به همراه29 افزوده شده و 19 حذف شده
  1. 10 2
      Controller/CloudStorage.py
  2. 14 5
      Controller/Cron/CronTaskController.py
  3. 5 12
      Service/VodHlsService.py

+ 10 - 2
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
@@ -538,6 +538,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'])
@@ -546,6 +548,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,
@@ -553,7 +561,7 @@ class CloudStorageView(View):
                 'sec': vod['sec'],
                 'ts_num': ts_num,
                 'vod_id': vod['id'],
-                'types': split_vod_hls_obj.query_tag_type_list(vod['id'])
+                'types': types
             })
         vod_play_list = sorted(vod_play_list, key=lambda item: -item['start_time'])
         generate_presigned_over_time = int(time.time())

+ 14 - 5
Controller/Cron/CronTaskController.py

@@ -8,7 +8,6 @@
 # @File    : CronTaskController.py
 # @Software: PyCharm
 import datetime
-import logging
 import time
 
 import requests
@@ -21,7 +20,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
@@ -141,6 +140,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)
@@ -153,6 +153,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())
@@ -375,11 +384,11 @@ class CronUpdateDataView(View):
                     break
 
                 # 状态为未使用,重置美洲服的地区id
-                if status == 1:     # 美洲服直接更新
+                if status == 1:  # 美洲服直接更新
                     if CONFIG_INFO == CONFIG_US:
-                        DeviceDomainRegionModel.objects.filter(~Q(region_id=0), serial_number__in=serial_redis_list).\
+                        DeviceDomainRegionModel.objects.filter(~Q(region_id=0), serial_number__in=serial_redis_list). \
                             update(region_id=0)
-                    else:   # 其他服请求到美洲服更新
+                    else:  # 其他服请求到美洲服更新
                         req_url = 'https://www.dvema.com/cron/update/reset-region-id'
                         req_data = {
                             'serial_redis_list': str(serial_redis_list)

+ 5 - 12
Service/VodHlsService.py

@@ -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 []