瀏覽代碼

云存分表处理

peng 2 年之前
父節點
當前提交
d150f407c0

+ 7 - 0
AdminController/DeviceManagementController.py

@@ -21,6 +21,7 @@ from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.EquipmentInfoService import EquipmentInfoService
 from Service.EquipmentInfoService import EquipmentInfoService
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
+from Service.VodHlsService import SplitVodHlsObject
 
 
 
 
 class DeviceManagement(View):
 class DeviceManagement(View):
@@ -328,6 +329,9 @@ class DeviceManagement(View):
                 Order_Model.objects.filter(UID=uid, order_type=0).delete()
                 Order_Model.objects.filter(UID=uid, order_type=0).delete()
                 StsCrdModel.objects.filter(uid=uid).delete()
                 StsCrdModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
+                # 删除vod_hls分表数据
+                split_vod_hls_obj = SplitVodHlsObject()
+                split_vod_hls_obj.del_vod_hls_data(uid=uid)
                 ExperienceContextModel.objects.filter(uid=uid).delete()
                 ExperienceContextModel.objects.filter(uid=uid).delete()
                 Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
                 Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
             return response.json(0)
             return response.json(0)
@@ -463,6 +467,9 @@ class DeviceManagement(View):
                     UID_Bucket.objects.filter(uid__in=uidList).delete()
                     UID_Bucket.objects.filter(uid__in=uidList).delete()
                     StsCrdModel.objects.filter(uid__in=uidList).delete()
                     StsCrdModel.objects.filter(uid__in=uidList).delete()
                     VodHlsModel.objects.filter(uid__in=uidList).delete()
                     VodHlsModel.objects.filter(uid__in=uidList).delete()
+                    # 删除vod_hls分表数据
+                    split_vod_hls_obj = SplitVodHlsObject()
+                    split_vod_hls_obj.del_vod_hls_data(uid__in=uidList)
                     Unused_Uid_Meal.objects.filter(uid__in=uidList).delete()
                     Unused_Uid_Meal.objects.filter(uid__in=uidList).delete()
                     ExperienceContextModel.objects.filter(uid__in=uidList).delete()
                     ExperienceContextModel.objects.filter(uid__in=uidList).delete()
                     Order_Model.objects.filter(UID__in=uidList, order_type=0).delete()
                     Order_Model.objects.filter(UID__in=uidList, order_type=0).delete()

+ 1 - 2
AdminController/dataSystemManagement/BusinessDataController.py

@@ -8,10 +8,9 @@
 """
 """
 
 
 import requests
 import requests
-from django.db.models import Count, Sum
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
-from Model.models import VodHlsModel, VodHlsSummary
+from Model.models import VodHlsSummary
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 
 
 
 

+ 101 - 78
Controller/CloudStorage.py

@@ -39,6 +39,7 @@ from Object.WechatPayObject import WechatPayObject
 from Object.m3u8generate import PlaylistGenerator
 from Object.m3u8generate import PlaylistGenerator
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.PayService import PaymentService
 from Service.PayService import PaymentService
+from Service.VodHlsService import SplitVodHlsObject
 
 
 
 
 # 设备信息添加
 # 设备信息添加
@@ -284,25 +285,29 @@ class CloudStorageView(View):
         """
         """
         uid_token = request_dict.get('uid', None)
         uid_token = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
         channel = request_dict.get('channel', None)
-        store_time = request_dict.get('time', None)
-        if not all([uid_token, channel, store_time]):
+        start_time = request_dict.get('time', None)
+        if not all([uid_token, channel, start_time]):
             return response.json(444)
             return response.json(444)
         uid = jwt.decode(uid_token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256').get('uid', '')
         uid = jwt.decode(uid_token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256').get('uid', '')
         now_time = int(time.time())
         now_time = int(time.time())
-        vod_hls_qs = VodHlsModel.objects.filter(uid=uid, channel=channel, time=store_time,
-                                                endTime__gte=now_time).values("sec", "fg", "bucket__bucket",
-                                                                              "bucket__endpoint", "bucket__region",
-                                                                              "bucket__mold")
+
+        split_vod_hls_obj = SplitVodHlsObject()
+        vod_hls_qs = split_vod_hls_obj.get_vod_hls_data(uid=uid, channel=channel, start_time=start_time,
+                                                        end_time__gte=now_time).values("sec", "fg", "bucket_id")
         if not vod_hls_qs.exists():
         if not vod_hls_qs.exists():
             return response.json(173)
             return response.json(173)
         fg = int(vod_hls_qs[0]['fg'])
         fg = int(vod_hls_qs[0]['fg'])
-        bucket__region = vod_hls_qs[0]['bucket__region']
-        bucket_name = vod_hls_qs[0]['bucket__bucket']
-
+        bucket_id = vod_hls_qs[0]['bucket_id']
+        vod_bucket_qs = VodBucketModel.objects.filter(id=bucket_id).values('bucket', 'region', 'mold')
+        if not vod_bucket_qs.exists():
+            return response.json(173)
+        bucket_region = vod_bucket_qs[0]['region']
+        bucket_name = vod_bucket_qs[0]['bucket']
+        mold = vod_bucket_qs[0]["mold"]
         s3_obj = AmazonS3Util(
         s3_obj = AmazonS3Util(
-            AWS_ACCESS_KEY_ID[vod_hls_qs[0]["bucket__mold"]],
-            AWS_SECRET_ACCESS_KEY[vod_hls_qs[0]["bucket__mold"]],
-            bucket__region
+            AWS_ACCESS_KEY_ID[mold],
+            AWS_SECRET_ACCESS_KEY[mold],
+            bucket_region
         )
         )
 
 
         playlist_entries = []
         playlist_entries = []
@@ -312,7 +317,7 @@ class CloudStorageView(View):
             shift = (i + 1) * 4
             shift = (i + 1) * 4
             duration = (fg >> shift) & 0xf
             duration = (fg >> shift) & 0xf
             if duration > 0:
             if duration > 0:
-                ts_file = '{uid}/vod{channel}/{time}/ts{i}.ts'.format(uid=uid, channel=channel, time=store_time, i=i)
+                ts_file = '{uid}/vod{channel}/{time}/ts{i}.ts'.format(uid=uid, channel=channel, time=start_time, i=i)
                 response_url = s3_obj.generate_file_obj_url(bucket_name, ts_file)
                 response_url = s3_obj.generate_file_obj_url(bucket_name, ts_file)
                 playlist_entries.append({
                 playlist_entries.append({
                     'name': response_url,
                     'name': response_url,
@@ -478,9 +483,12 @@ class CloudStorageView(View):
             "UidBucketModelOverTime": uid_bucket_qs_time_over,
             "UidBucketModelOverTime": uid_bucket_qs_time_over,
         })
         })
 
 
-        vod_hls_qs = VodHlsModel.objects.filter(uid=uid, channel=channel, endTime__gte=now_time,
-                                                time__range=(start_time, end_time)).values("id", "time", "sec", "fg",
-                                                                                           "bucket_id")
+        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)).values("id",
+                                                                                                         "start_time",
+                                                                                                         "sec", "fg",
+                                                                                                         "bucket_id")
 
 
         vod_play_list = []
         vod_play_list = []
         if not vod_hls_qs.exists():
         if not vod_hls_qs.exists():
@@ -517,14 +525,14 @@ class CloudStorageView(View):
 
 
         for vod in vod_hls_qs:
         for vod in vod_hls_qs:
             bucket_name = regroup_bucket_qs[vod['bucket_id']]['bucket']
             bucket_name = regroup_bucket_qs[vod['bucket_id']]['bucket']
-            thumbs_png = '{uid}/vod{channel}/{time}/Thumb.jpeg'.format(uid=uid, channel=channel, time=vod['time'])
+            thumbs_png = '{uid}/vod{channel}/{time}/Thumb.jpeg'.format(uid=uid, channel=channel, time=vod['start_time'])
             response_url = s3_obj.generate_file_obj_url(bucket_name, thumbs_png)
             response_url = s3_obj.generate_file_obj_url(bucket_name, thumbs_png)
             vod_url = '{server_domain}/cloudstorage/signplaym3u8?' \
             vod_url = '{server_domain}/cloudstorage/signplaym3u8?' \
                       'uid={uid}&channel={channel}&time={time}&sign=tktktktk'. \
                       'uid={uid}&channel={channel}&time={time}&sign=tktktktk'. \
-                format(server_domain=SERVER_DOMAIN_SSL, uid=uid_token, channel=channel, time=vod['time'])
+                format(server_domain=SERVER_DOMAIN_SSL, uid=uid_token, channel=channel, time=vod['start_time'])
             ts_num = int(vod['fg']) & 0xf
             ts_num = int(vod['fg']) & 0xf
             vod_play_list.append({
             vod_play_list.append({
-                'start_time': vod['time'],
+                'start_time': vod['start_time'],
                 'sign_url': vod_url,
                 'sign_url': vod_url,
                 'thumb': response_url,
                 'thumb': response_url,
                 'sec': vod['sec'],
                 'sec': vod['sec'],
@@ -546,9 +554,9 @@ class CloudStorageView(View):
         return response.json(0, vod_play_list)
         return response.json(0, vod_play_list)
 
 
     @staticmethod
     @staticmethod
-    def do_store_playlist(request_dict, response):  # 设备调用,上传视频到s3,同时把视频数据信息传给服务器,服务器存储播放内容
+    def do_store_playlist(request_dict, response):
         """
         """
-        存储设备上传数据
+        存储设备上传云存信息数据
         @param request_dict: 请求数据
         @param request_dict: 请求数据
         @request_dict uidToken: uid_token
         @request_dict uidToken: uid_token
         @request_dict time: 播放列表名字时间戳
         @request_dict time: 播放列表名字时间戳
@@ -558,68 +566,75 @@ class CloudStorageView(View):
         @return: response
         @return: response
         """
         """
         uid_token = request_dict.get('uidToken', None)
         uid_token = request_dict.get('uidToken', None)
-        store_time = request_dict.get('time', None)
+        start_time = request_dict.get('time', None)
         sec = request_dict.get('sec', None)
         sec = request_dict.get('sec', None)
         fg = request_dict.get('fg', None)
         fg = request_dict.get('fg', None)
 
 
-        if not all([uid_token, store_time, sec]):
+        if not all([uid_token, start_time, sec]):
             return response.json(0)
             return response.json(0)
         uid_obj = UidTokenObject(uid_token)
         uid_obj = UidTokenObject(uid_token)
         if uid_obj.flag is False:
         if uid_obj.flag is False:
             return response.json(444, 'uidToken')
             return response.json(444, 'uidToken')
 
 
-        sec = int(sec)
-        uid = uid_obj.UID
-        channel = uid_obj.channel
-        now_time = int(time.time())
-        uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time, channel=channel).values(
-            "bucket__mold",
-            "bucket__bucket",
-            "bucket__endpoint",
-            "bucket__region",
-            "status",
-            "bucket__storeDay",
-            "bucket__id").order_by(
-            'addTime')
-        if uid_bucket_qs.exists():
+        try:
+            sec = int(sec)
+            uid = uid_obj.UID
+            channel = uid_obj.channel
+            now_time = int(time.time())
+            uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time, channel=channel).values(
+                "bucket__mold",
+                "bucket__bucket",
+                "bucket__endpoint",
+                "bucket__region",
+                "status",
+                "bucket__storeDay",
+                "bucket__id").order_by(
+                'addTime')
+            if not uid_bucket_qs.exists():
+                return response.json(10030)
+
+            # 判断设备是否开启云存
             uid_bucket = uid_bucket_qs.first()
             uid_bucket = uid_bucket_qs.first()
             store_day = uid_bucket['bucket__storeDay']
             store_day = uid_bucket['bucket__storeDay']
             bucket_id = uid_bucket['bucket__id']
             bucket_id = uid_bucket['bucket__id']
-            end_time = int(store_time) + store_day * 86400
-            if uid_bucket['status'] == 1:
-                VodHlsModel.objects.create(
-                    uid=uid,
-                    channel=channel,
-                    time=store_time,
-                    endTime=end_time,
-                    bucket_id=bucket_id,
-                    fg=fg,
-                    sec=sec,
-                )
-                end_time_stamp = datetime.datetime.fromtimestamp(int(store_time))
-                end_time_str = datetime.datetime(end_time_stamp.year, end_time_stamp.month, 1)
-                end_time_stamp = CommonService.str_to_timestamp(end_time_str.strftime('%Y-%m-%d %H:%M:%S'))
-                vod_hls_qs = VodHlsSummary.objects.filter(uid=uid, time=end_time_stamp)
-                if vod_hls_qs.exists():
-                    vod_hls = vod_hls_qs.first()
-                    vod_hls.upload_frequency += 1
-                    vod_hls.upload_duration += sec
-                    vod_hls.updated_time = now_time
-                    vod_hls.save()
-                else:
-                    VodHlsSummary.objects.create(uid=uid, time=end_time_stamp, created_time=now_time,
-                                                 updated_time=now_time,
-                                                 upload_duration=sec, upload_frequency=1)
-
-                res = {'code': 0, 'msg': '存储成功'}
-                return HttpResponse(json.dumps(res, ensure_ascii=False),
-                                    content_type="application/json,charset=utf-8")
+            end_time = int(start_time) + store_day * 86400
+            if uid_bucket['status'] != 1:
+                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()
+            split_vod_hls_obj.creat_vod_hls_data(uid=uid, channel=channel, start_time=start_time, end_time=end_time,
+                                                 bucket_id=bucket_id, fg=fg, sec=sec)
+
+            end_time_stamp = datetime.datetime.fromtimestamp(int(start_time))
+            end_time_str = datetime.datetime(end_time_stamp.year, end_time_stamp.month, 1)
+            end_time_stamp = CommonService.str_to_timestamp(end_time_str.strftime('%Y-%m-%d %H:%M:%S'))
+            vod_hls_sum_qs = VodHlsSummary.objects.filter(uid=uid, time=end_time_stamp)
+            if vod_hls_sum_qs.exists():
+                vod_hls_sum = vod_hls_sum_qs.first()
+                vod_hls_sum.upload_frequency += 1
+                vod_hls_sum.upload_duration += sec
+                vod_hls_sum.updated_time = now_time
+                vod_hls_sum.save()
             else:
             else:
-                res = {'code': 404, 'msg': '设备未开启'}
-                return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
-        else:
-            res = {'code': 404, 'msg': '设备未购买'}
-            return HttpResponse(json.dumps(res, ensure_ascii=False), content_type="application/json,charset=utf-8")
+                VodHlsSummary.objects.create(uid=uid, time=end_time_stamp, created_time=now_time, updated_time=now_time,
+                                             upload_duration=sec, upload_frequency=1)
+
+            res = {'code': 0, 'msg': '存储成功'}
+            return HttpResponse(json.dumps(res, ensure_ascii=False), content_type='application/json,charset=utf-8')
+        except Exception as e:
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def do_change_vod_status(request_dict, user_id, response):  # 修改云存状态
     def do_change_vod_status(request_dict, user_id, response):  # 修改云存状态
@@ -1520,10 +1535,16 @@ class CloudStorageView(View):
         try:
         try:
             if is_del_all == 1:
             if is_del_all == 1:
                 VodHlsModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
+                # 删除vod_hls分表数据
+                split_vod_hls_obj = SplitVodHlsObject()
+                split_vod_hls_obj.del_vod_hls_data(uid=uid)
             else:
             else:
                 if type(vod_id_list).__name__ != 'list':
                 if type(vod_id_list).__name__ != 'list':
                     return response.json(444)
                     return response.json(444)
                 VodHlsModel.objects.filter(id__in=vod_id_list).delete()
                 VodHlsModel.objects.filter(id__in=vod_id_list).delete()
+                # 删除vod_hls分表数据
+                split_vod_hls_obj = SplitVodHlsObject()
+                split_vod_hls_obj.del_vod_hls_data(id__in=vod_id_list)
         except Exception as e:
         except Exception as e:
             return response.json(424, repr(e))
             return response.json(424, repr(e))
         else:
         else:
@@ -1677,9 +1698,11 @@ class CloudStorageView(View):
         if not uid_bucket_qs.exists():
         if not uid_bucket_qs.exists():
             return response.json(10030)
             return response.json(10030)
 
 
-        vod_hls_qs = VodHlsModel.objects.extra(select={'date': "FROM_UNIXTIME(time,'%%Y-%%m-%%d')"}).values(
-            'date').filter(uid=uid, endTime__gte=now_time, channel=channel).annotate(count=Count('time')).order_by(
-            '-date')[:31]
+        # vod_hls_qs = VodHlsModel.objects.extra(select={'date': "FROM_UNIXTIME(time,'%%Y-%%m-%%d')"}).values(
+        #     'date').filter(uid=uid, endTime__gte=now_time, channel=channel).annotate(count=Count('time')).order_by(
+        #     '-date')[:31]
+        split_vod_hls_obj = SplitVodHlsObject()
+        vod_hls_qs = split_vod_hls_obj.get_vod_hls_date(uid=uid, end_time__gte=now_time, channel=channel)
 
 
         had_vod_list = []
         had_vod_list = []
         for vod in vod_hls_qs:
         for vod in vod_hls_qs:
@@ -1688,7 +1711,7 @@ class CloudStorageView(View):
                 'vod_count': vod['count'],
                 'vod_count': vod['count'],
                 'date_format': vod['date'],
                 'date_format': vod['date'],
             })
             })
-
+        had_vod_list = sorted(had_vod_list, key=lambda item: -item['timestamp'])
         return response.json(0, had_vod_list)
         return response.json(0, had_vod_list)
 
 
     @staticmethod
     @staticmethod
@@ -1877,9 +1900,9 @@ class CloudStorageView(View):
         if not all([order_id, refund_amount]):
         if not all([order_id, refund_amount]):
             return response.json(444)
             return response.json(444)
         try:
         try:
-            order_qs = Order_Model.objects.filter(orderID=order_id)\
-                .values('status', 'payType', 'price','refunded_amount',
-                        'currency', 'paymentID','trade_no')
+            order_qs = Order_Model.objects.filter(orderID=order_id) \
+                .values('status', 'payType', 'price', 'refunded_amount',
+                        'currency', 'paymentID', 'trade_no')
             if not order_qs.exists():
             if not order_qs.exists():
                 return response.json(173)
                 return response.json(173)
 
 

+ 4 - 1
Controller/CloudTransfer.py

@@ -18,6 +18,7 @@ from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
+from Service.VodHlsService import SplitVodHlsObject
 
 
 
 
 class cloudTestView(View):
 class cloudTestView(View):
@@ -112,7 +113,9 @@ class cloudTestView(View):
                 Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID=vodPrimaryUserID,
                 Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID=vodPrimaryUserID,
                                                            vodPrimaryMaster=vodPrimaryMaster)
                                                            vodPrimaryMaster=vodPrimaryMaster)
                 VodHlsModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
-
+                # 删除vod_hls分表数据
+                split_vod_hls_obj = SplitVodHlsObject()
+                split_vod_hls_obj.del_vod_hls_data(uid=uid)
                 if not serial_number:
                 if not serial_number:
                     serial_number = CommonService.query_serial_with_uid(uid)
                     serial_number = CommonService.query_serial_with_uid(uid)
                 u_dev_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number)
                 u_dev_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number)

+ 30 - 31
Controller/CloudVod.py

@@ -14,13 +14,15 @@ from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD
-from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel
+from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
+    VodBucketModel
 from Object.AliPayObject import AliPayObject
 from Object.AliPayObject import AliPayObject
 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
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
+from Service.VodHlsService import SplitVodHlsObject
 
 
 
 
 # 设备信息添加
 # 设备信息添加
@@ -492,20 +494,25 @@ class CloudVodView(View):
         if not ubqs.exists():
         if not ubqs.exists():
             return response.json(10, '设备未购买')
             return response.json(10, '设备未购买')
         nowTime = int(time.time())
         nowTime = int(time.time())
-        vodqs = VodHlsModel.objects.filter(uid=uid, channel=channel, time__range=(startTime, endTime),
-                                           endTime__gte=nowTime) \
-            .values("time", "sec", "bucket__bucket", "bucket__endpoint", "bucket__region")
+        split_vod_hls_obj = SplitVodHlsObject()
+        vodqs = split_vod_hls_obj.render(uid=uid, channel=channel, start_time=(startTime, endTime),
+                                                   end_time__gte=nowTime).values("start_time", "sec", "bucket_id")
+        if not vodqs.exists():
+            return response.json(173)
+        vod_bucket_qs = VodBucketModel.objects.filter(id=vodqs[0]['bucket_id']).values('bucket', 'endpoint')
+        if not vod_bucket_qs.exists():
+            return response.json(173)
+        bucket_name = vod_bucket_qs[0]["bucket"]
+        endpoint = vod_bucket_qs[0]["endpoint"]
         vod_play_list = []
         vod_play_list = []
         print(vodqs)
         print(vodqs)
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         for vod in vodqs:
         for vod in vodqs:
-            bucket_name = vod["bucket__bucket"]
-            endpoint = vod["bucket__endpoint"]
             bucket = oss2.Bucket(auth, endpoint, bucket_name)
             bucket = oss2.Bucket(auth, endpoint, bucket_name)
             m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
             m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
-                format(uid=uid, channel=channel, time=vod['time'])
+                format(uid=uid, channel=channel, time=vod['start_time'])
             ts = '{uid}/vod{channel}/{time}/ts0.ts'. \
             ts = '{uid}/vod{channel}/{time}/ts0.ts'. \
-                format(uid=uid, channel=channel, time=vod['time'])
+                format(uid=uid, channel=channel, time=vod['start_time'])
             url = bucket.sign_url('GET', m3u8, 3600, params={'x-oss-process': 'hls/sign'})
             url = bucket.sign_url('GET', m3u8, 3600, params={'x-oss-process': 'hls/sign'})
             urllst = url.split('?')
             urllst = url.split('?')
             url_start = urllib.parse.unquote(urllst[0])
             url_start = urllib.parse.unquote(urllst[0])
@@ -514,7 +521,8 @@ class CloudVodView(View):
                 format(url_start=url_start, url_end=url_end)
                 format(url_start=url_start, url_end=url_end)
             thumb = bucket.sign_url('GET', ts, 3600,
             thumb = bucket.sign_url('GET', ts, 3600,
                                     params={'x-oss-process': 'video/snapshot,t_10000,m_fast,w_300'})
                                     params={'x-oss-process': 'video/snapshot,t_10000,m_fast,w_300'})
-            vod_play_list.append({'name': vod['time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec']})
+            vod_play_list.append(
+                {'name': vod['start_time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec']})
         return response.json(0, vod_play_list)
         return response.json(0, vod_play_list)
 
 
     # backend find play list0
     # backend find play list0
@@ -527,20 +535,25 @@ class CloudVodView(View):
         if own_perm is False:
         if own_perm is False:
             return response.json(404)
             return response.json(404)
         nowTime = int(time.time())
         nowTime = int(time.time())
-        vodqs = VodHlsModel.objects.filter(uid=UID, channel=channel, time__range=(startTime, endTime),
-                                           endTime__gte=nowTime) \
-            .values("time", "sec", "bucket__bucket", "bucket__endpoint", "bucket__region", "id")
+        split_vod_hls_obj = SplitVodHlsObject()
+        vodqs = split_vod_hls_obj.get_vod_hls_data(uid=UID, channel=channel, start_time__range=(startTime, endTime),
+                                                   end_time__gte=nowTime).values("start_time", "sec", "bucket_id", "id")
+        if not vodqs.exists():
+            return response.json(173)
+        vod_bucket_qs = VodBucketModel.objects.filter(id=vodqs[0]['bucket_id']).values('bucket', 'endpoint')
+        if not vod_bucket_qs.exists():
+            return response.json(173)
+        bucket_name = vod_bucket_qs[0]["bucket"]
+        endpoint = vod_bucket_qs[0]["endpoint"]
         vod_play_list = []
         vod_play_list = []
         print(vodqs)
         print(vodqs)
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         for vod in vodqs:
         for vod in vodqs:
-            bucket_name = vod["bucket__bucket"]
-            endpoint = vod["bucket__endpoint"]
             bucket = oss2.Bucket(auth, endpoint, bucket_name)
             bucket = oss2.Bucket(auth, endpoint, bucket_name)
             m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
             m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
-                format(uid=UID, channel=channel, time=vod['time'])
+                format(uid=UID, channel=channel, time=vod['start_time'])
             ts = '{uid}/vod{channel}/{time}/ts0.ts'. \
             ts = '{uid}/vod{channel}/{time}/ts0.ts'. \
-                format(uid=UID, channel=channel, time=vod['time'])
+                format(uid=UID, channel=channel, time=vod['start_time'])
             url = bucket.sign_url('GET', m3u8, 3600, params={'x-oss-process': 'hls/sign'})
             url = bucket.sign_url('GET', m3u8, 3600, params={'x-oss-process': 'hls/sign'})
             urllst = url.split('?')
             urllst = url.split('?')
             url_start = urllib.parse.unquote(urllst[0])
             url_start = urllib.parse.unquote(urllst[0])
@@ -550,7 +563,7 @@ class CloudVodView(View):
             thumb = bucket.sign_url('GET', ts, 3600,
             thumb = bucket.sign_url('GET', ts, 3600,
                                     params={'x-oss-process': 'video/snapshot,t_1000,m_fast,w_300'})
                                     params={'x-oss-process': 'video/snapshot,t_1000,m_fast,w_300'})
             vod_play_list.append(
             vod_play_list.append(
-                {'name': vod['time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec'], 'id': vod['id']})
+                {'name': vod['start_time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec'], 'id': vod['id']})
         return response.json(0, vod_play_list)
         return response.json(0, vod_play_list)
 
 
     def do_pay_status(self, request_dict, userID, response):
     def do_pay_status(self, request_dict, userID, response):
@@ -731,17 +744,3 @@ class CloudVodView(View):
                 return response.json(804)
                 return response.json(804)
         else:
         else:
             return response.json(804)
             return response.json(804)
-
-
-def deleteVodHls(request):
-    response = ResponseObject()
-    i = int(request.GET.get('i', 5))
-
-    import time
-    nowTime = int(time.time())
-    for i in range(i):
-        vh_qs = VodHlsModel.objects.filter(time__lte=str(nowTime - 3600 * 24 * 35))[0:10000]
-        id_list = vh_qs.values_list("id", flat=True)
-        print(id_list)
-        VodHlsModel.objects.filter(id__in=list(id_list)).delete()
-    return response.json(0)

+ 8 - 2
Controller/Cron/CronTaskController.py

@@ -26,6 +26,7 @@ from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.utils import LocalDateTimeUtil
 from Object.utils import LocalDateTimeUtil
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
+from Service.VodHlsService import SplitVodHlsObject
 
 
 LOGGER = logging.getLogger('info')
 LOGGER = logging.getLogger('info')
 
 
@@ -147,6 +148,9 @@ class CronDelDataView(View):
             sql = 'DELETE FROM `vod_hls` WHERE endTime<{} LIMIT 50000'.format(month_ago_time)
             sql = 'DELETE FROM `vod_hls` WHERE endTime<{} LIMIT 50000'.format(month_ago_time)
             cursor.execute(sql)
             cursor.execute(sql)
             cursor.close()
             cursor.close()
+            # 删除vod_hls分表数据
+            split_vod_hls_obj = SplitVodHlsObject()
+            split_vod_hls_obj.del_vod_hls_data(end_time__lt=month_ago_time)
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
             return response.json(500, repr(e))
             return response.json(500, repr(e))
@@ -199,8 +203,10 @@ class CronDelDataView(View):
                 Order_Model.objects.filter(UID__in=uid_list).delete()
                 Order_Model.objects.filter(UID__in=uid_list).delete()
                 StsCrdModel.objects.filter(uid__in=uid_list).delete()
                 StsCrdModel.objects.filter(uid__in=uid_list).delete()
                 VodHlsModel.objects.filter(uid__in=uid_list).delete()
                 VodHlsModel.objects.filter(uid__in=uid_list).delete()
-                ExperienceContextModel.objects.filter(
-                    uid__in=uid_list).delete()
+                # 删除vod_hls分表数据
+                split_vod_hls_obj = SplitVodHlsObject()
+                split_vod_hls_obj.del_vod_hls_data(uid__in=uid_list)
+                ExperienceContextModel.objects.filter(uid__in=uid_list).delete()
                 Device_Info.objects.filter(userID__in=device_user).delete()
                 Device_Info.objects.filter(userID__in=device_user).delete()
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:

+ 24 - 14
Controller/DetectController.py

@@ -26,7 +26,8 @@ from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, DETECT_PUSH
     JPUSH_CONFIG, FCM_CONFIG, APNS_CONFIG, \
     JPUSH_CONFIG, FCM_CONFIG, APNS_CONFIG, \
     BASE_DIR, APNS_MODE, SERVER_TYPE
     BASE_DIR, APNS_MODE, SERVER_TYPE
 from Ansjer.config import PUSH_REDIS_ADDRESS
 from Ansjer.config import PUSH_REDIS_ADDRESS
-from Model.models import Device_Info, VodHlsModel, Equipment_Info, UidSetModel, UidPushModel, SysMsgModel
+from Model.models import Device_Info, VodHlsModel, Equipment_Info, UidSetModel, UidPushModel, SysMsgModel, \
+    VodBucketModel
 from Object.ETkObject import ETkObject
 from Object.ETkObject import ETkObject
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
@@ -34,6 +35,7 @@ from Object.TokenObject import TokenObject
 from Object.UidTokenObject import UidTokenObject
 from Object.UidTokenObject import UidTokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.EquipmentInfoService import EquipmentInfoService
 from Service.EquipmentInfoService import EquipmentInfoService
+from Service.VodHlsService import SplitVodHlsObject
 
 
 
 
 class DetectControllerView(View):
 class DetectControllerView(View):
@@ -139,19 +141,27 @@ class DetectControllerView(View):
                                                          format(uid=devUid, channel=channel, time=eventTime), 300)]
                                                          format(uid=devUid, channel=channel, time=eventTime), 300)]
                 elif p['is_st'] == 2:
                 elif p['is_st'] == 2:
                     # 列表装载回放时间戳标记
                     # 列表装载回放时间戳标记
-                    vodqs = VodHlsModel.objects.filter(uid=devUid, channel=channel, time=int(eventTime)) \
-                        .values("bucket__bucket", "bucket__endpoint")
-                    # print(vodqs)
-                    if vodqs.exists():
-                        bucket_name = vodqs[0]['bucket__bucket']
-                        endpoint = vodqs[0]['bucket__endpoint']
-                        bucket = oss2.Bucket(auth, endpoint, bucket_name)
-                        ts = '{uid}/vod{channel}/{etime}/ts0.ts'.format(uid=devUid, channel=p['Channel'], etime=eventTime)
-                        thumb0 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_0000,w_700'})
-                        thumb1 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_1000,w_700'})
-                        thumb2 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_2000,w_700'})
-                        # thumb3 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_3000,w_700'})
-                        p['img_list'] = [thumb0, thumb1, thumb2]
+                    split_vod_hls_obj = SplitVodHlsObject()
+                    vodqs = split_vod_hls_obj.get_vod_hls_data(uid=devUid, channel=channel, start_time=int(eventTime)).values(
+                        "bucket_id")
+                    if not vodqs.exists():
+                        return response.json(173)
+                    vod_bucket_qs = VodBucketModel.objects.filter(id=vodqs[0]['bucket_id']).values('bucket', 'endpoint')
+                    if not vod_bucket_qs.exists():
+                        return response.json(173)
+                    bucket_name = vod_bucket_qs[0]['bucket']
+                    endpoint = vod_bucket_qs[0]['endpoint']
+                    bucket = oss2.Bucket(auth, endpoint, bucket_name)
+                    ts = '{uid}/vod{channel}/{etime}/ts0.ts'.format(uid=devUid, channel=p['Channel'],
+                                                                    etime=eventTime)
+                    thumb0 = bucket.sign_url('GET', ts, 3600,
+                                             params={'x-oss-process': 'video/snapshot,t_0000,w_700'})
+                    thumb1 = bucket.sign_url('GET', ts, 3600,
+                                             params={'x-oss-process': 'video/snapshot,t_1000,w_700'})
+                    thumb2 = bucket.sign_url('GET', ts, 3600,
+                                             params={'x-oss-process': 'video/snapshot,t_2000,w_700'})
+                    # thumb3 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_3000,w_700'})
+                    p['img_list'] = [thumb0, thumb1, thumb2]
                 elif p['is_st'] == 3:
                 elif p['is_st'] == 3:
                     # 列表装载回放时间戳标记
                     # 列表装载回放时间戳标记
                     p['img_list'] = []
                     p['img_list'] = []

+ 34 - 29
Controller/DetectControllerV2.py

@@ -12,13 +12,14 @@ from Ansjer.config import DETECT_PUSH_DOMAIN, DETECT_PUSH_DOMAINS, DETECT_PUSH_D
     OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
     OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
 from Ansjer.config import PUSH_REDIS_ADDRESS
 from Ansjer.config import PUSH_REDIS_ADDRESS
 from Model.models import Device_Info, VodHlsModel, Equipment_Info, UidSetModel, UidPushModel, CompanyModel, SysMsgModel, \
 from Model.models import Device_Info, VodHlsModel, Equipment_Info, UidSetModel, UidPushModel, CompanyModel, SysMsgModel, \
-    AiService
+    AiService, VodBucketModel
 from Object.ETkObject import ETkObject
 from Object.ETkObject import ETkObject
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.EquipmentInfoService import EquipmentInfoService
 from Service.EquipmentInfoService import EquipmentInfoService
+from Service.VodHlsService import SplitVodHlsObject
 
 
 
 
 class DetectControllerViewV2(View):
 class DetectControllerViewV2(View):
@@ -333,34 +334,38 @@ class DetectControllerViewV2(View):
 
 
                 elif p['is_st'] == 2:
                 elif p['is_st'] == 2:
                     # 列表装载回放时间戳标记
                     # 列表装载回放时间戳标记
-                    vodqs = VodHlsModel.objects.filter(uid=devUid, channel=channel, time=int(eventTime)) \
-                        .values("bucket__bucket", "bucket__endpoint")
-                    # print(vodqs)
-                    if vodqs.exists():
-                        bucket_name = vodqs[0]['bucket__bucket']
-                        endpoint = vodqs[0]['bucket__endpoint']
-                        bucket = oss2.Bucket(auth, endpoint, bucket_name)
-                        ts = '{uid}/vod{channel}/{etime}/ts0.ts'.format(uid=devUid, channel=p['Channel'],
-                                                                        etime=eventTime)
-                        if storage_location == 1:  # oss
-                            thumb0 = bucket.sign_url('GET', ts, 3600,
-                                                     params={'x-oss-process': 'video/snapshot,t_0000,w_700'})
-                            thumb1 = bucket.sign_url('GET', ts, 3600,
-                                                     params={'x-oss-process': 'video/snapshot,t_1000,w_700'})
-                            thumb2 = bucket.sign_url('GET', ts, 3600,
-                                                     params={'x-oss-process': 'video/snapshot,t_2000,w_700'})
-                            # thumb3 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_3000,w_700'})
-                            p['img_list'] = [thumb0, thumb1, thumb2]
-                        elif region == 2 and storage_location == 2:  # 2:国内,aws
-                            thumb = aws_s3_guonei.generate_presigned_url('get_object',
-                                                                         Params={'Bucket': 'push', 'Key': ts},
-                                                                         ExpiresIn=3600)
-                            p['img_list'] = [thumb]
-                        elif region == 1 and storage_location == 2:  # 1:国外,aws
-                            thumb = aws_s3_guowai.generate_presigned_url('get_object',
-                                                                         Params={'Bucket': 'foreignpush', 'Key': ts},
-                                                                         ExpiresIn=3600)
-                            p['img_list'] = [thumb]
+                    split_vod_hls_obj = SplitVodHlsObject()
+                    vodqs = split_vod_hls_obj.get_vod_hls_data(uid=devUid, channel=channel,
+                                                               start_time=int(eventTime)).values("bucket_id")
+                    if not vodqs.exists():
+                        return response.json(173)
+                    vod_bucket_qs = VodBucketModel.objects.filter(id=vodqs[0]['bucket_id']).values('bucket', 'endpoint')
+                    if not vod_bucket_qs.exists():
+                        return response.json(173)
+                    bucket_name = vod_bucket_qs[0]['bucket']
+                    endpoint = vod_bucket_qs[0]['endpoint']
+                    bucket = oss2.Bucket(auth, endpoint, bucket_name)
+                    ts = '{uid}/vod{channel}/{etime}/ts0.ts'.format(uid=devUid, channel=p['Channel'],
+                                                                    etime=eventTime)
+                    if storage_location == 1:  # oss
+                        thumb0 = bucket.sign_url('GET', ts, 3600,
+                                                 params={'x-oss-process': 'video/snapshot,t_0000,w_700'})
+                        thumb1 = bucket.sign_url('GET', ts, 3600,
+                                                 params={'x-oss-process': 'video/snapshot,t_1000,w_700'})
+                        thumb2 = bucket.sign_url('GET', ts, 3600,
+                                                 params={'x-oss-process': 'video/snapshot,t_2000,w_700'})
+                        # thumb3 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_3000,w_700'})
+                        p['img_list'] = [thumb0, thumb1, thumb2]
+                    elif region == 2 and storage_location == 2:  # 2:国内,aws
+                        thumb = aws_s3_guonei.generate_presigned_url('get_object',
+                                                                     Params={'Bucket': 'push', 'Key': ts},
+                                                                     ExpiresIn=3600)
+                        p['img_list'] = [thumb]
+                    elif region == 1 and storage_location == 2:  # 1:国外,aws
+                        thumb = aws_s3_guowai.generate_presigned_url('get_object',
+                                                                     Params={'Bucket': 'foreignpush', 'Key': ts},
+                                                                     ExpiresIn=3600)
+                        p['img_list'] = [thumb]
                 elif p['is_st'] == 3 or p['is_st'] == 4:
                 elif p['is_st'] == 3 or p['is_st'] == 4:
                     # 列表装载回放时间戳标记
                     # 列表装载回放时间戳标记
                     p['img_list'] = []
                     p['img_list'] = []

+ 4 - 0
Controller/SerialNumberController.py

@@ -18,6 +18,7 @@ from Object.uidManageResponseObject import uidManageResponseObject
 from Service.AlgorithmService import AlgorithmBaseOn35
 from Service.AlgorithmService import AlgorithmBaseOn35
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.EquipmentInfoService import EquipmentInfoService
 from Service.EquipmentInfoService import EquipmentInfoService
+from Service.VodHlsService import SplitVodHlsObject
 
 
 
 
 class SerialNumberView(View):
 class SerialNumberView(View):
@@ -305,6 +306,9 @@ class SerialNumberView(View):
                 Order_Model.objects.filter(UID=uid).delete()
                 Order_Model.objects.filter(UID=uid).delete()
                 StsCrdModel.objects.filter(uid=uid).delete()
                 StsCrdModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
+                # 删除vod_hls分表数据
+                split_vod_hls_obj = SplitVodHlsObject()
+                split_vod_hls_obj.del_vod_hls_data(uid=uid)
                 ExperienceContextModel.objects.filter(uid=uid).delete()
                 ExperienceContextModel.objects.filter(uid=uid).delete()
 
 
                 # 重置AI
                 # 重置AI

+ 31 - 24
Controller/TestApi.py

@@ -21,6 +21,7 @@ from botocore import client
 from Controller.DeviceConfirmRegion import Device_Region
 from Controller.DeviceConfirmRegion import Device_Region
 from Object.AWS.AmazonS3Util import AmazonS3Util
 from Object.AWS.AmazonS3Util import AmazonS3Util
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
+from Service.VodHlsService import SplitVodHlsObject
 
 
 '''
 '''
 http://192.168.136.40:8077/Test
 http://192.168.136.40:8077/Test
@@ -42,7 +43,7 @@ from django.views.generic.base import View
 from django.contrib.auth.hashers import make_password  # 对密码加密模块
 from django.contrib.auth.hashers import make_password  # 对密码加密模块
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, AWS_ACCESS_KEY_ID, \
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, AWS_ACCESS_KEY_ID, \
     AWS_SECRET_ACCESS_KEY, SERVER_TYPE, AWS_SES_ACCESS_REGION
     AWS_SECRET_ACCESS_KEY, SERVER_TYPE, AWS_SES_ACCESS_REGION
-from Model.models import Order_Model, Store_Meal, VodHlsModel, OssCrdModel, StsCrdModel, DeviceLogModel
+from Model.models import Order_Model, Store_Meal, OssCrdModel, StsCrdModel, DeviceLogModel, VodBucketModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
@@ -610,23 +611,24 @@ class testView(View):
         ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel).values('status')
         ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel).values('status')
         if not ubqs.exists():
         if not ubqs.exists():
             return response.json(10, '设备未购买')
             return response.json(10, '设备未购买')
-        nowTime = int(time.time())
-        # vodqs = VodHlsModel.objects.filter(uid=uid, channel=channel, time__range=(startTime, endTime),
-        #                                    endTime__gte=nowTime) \
-        #     .values("time", "sec", "bucket__bucket", "bucket__endpoint", "bucket__region")
-        vodqs = VodHlsModel.objects.filter(uid=uid, channel=channel) \
-            .values("time", "sec", "bucket__bucket", "bucket__endpoint", "bucket__region")
+        split_vod_hls_obj = SplitVodHlsObject()
+        vodqs = split_vod_hls_obj.get_vod_hls_data(uid=uid, channel=channel).values("start_time", "sec", "bucket_id")
+        if not vodqs.exists():
+            return response.json(173)
         vod_play_list = []
         vod_play_list = []
-        print(vodqs)
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+        bucket_id = vodqs[0]['bucket_id']
+        vod_bucket_qs = VodBucketModel.objects.filter(id=bucket_id).values('bucket', 'endpoint')
+        if not vod_bucket_qs.exists():
+            return response.json(173)
+        bucket_name = vod_bucket_qs[0]["bucket"]
+        endpoint = vod_bucket_qs[0]["endpoint"]
         for vod in vodqs:
         for vod in vodqs:
-            bucket_name = vod["bucket__bucket"]
-            endpoint = vod["bucket__endpoint"]
             bucket = oss2.Bucket(auth, endpoint, bucket_name)
             bucket = oss2.Bucket(auth, endpoint, bucket_name)
             m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
             m3u8 = '{uid}/vod{channel}/{time}/{time}.m3u8'. \
-                format(uid=uid, channel=channel, time=vod['time'])
+                format(uid=uid, channel=channel, time=vod['start_time'])
             ts = '{uid}/vod{channel}/{time}/ts0.ts'. \
             ts = '{uid}/vod{channel}/{time}/ts0.ts'. \
-                format(uid=uid, channel=channel, time=vod['time'])
+                format(uid=uid, channel=channel, time=vod['start_time'])
             url = bucket.sign_url('GET', m3u8, 3600, params={'x-oss-process': 'hls/sign'})
             url = bucket.sign_url('GET', m3u8, 3600, params={'x-oss-process': 'hls/sign'})
             urllst = url.split('?')
             urllst = url.split('?')
             url_start = urllib.parse.unquote(urllst[0])
             url_start = urllib.parse.unquote(urllst[0])
@@ -635,7 +637,8 @@ class testView(View):
                 format(url_start=url_start, url_end=url_end)
                 format(url_start=url_start, url_end=url_end)
             thumb = bucket.sign_url('GET', ts, 3600,
             thumb = bucket.sign_url('GET', ts, 3600,
                                     params={'x-oss-process': 'video/snapshot,t_10000,m_fast,w_300'})
                                     params={'x-oss-process': 'video/snapshot,t_10000,m_fast,w_300'})
-            vod_play_list.append({'name': vod['time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec']})
+            vod_play_list.append(
+                {'name': vod['start_time'], 'sign_url': vod_play_url, 'thumb': thumb, 'sec': vod['sec']})
         return response.json(0, vod_play_list)
         return response.json(0, vod_play_list)
 
 
     def generate_token(self, request_dict, userID):
     def generate_token(self, request_dict, userID):
@@ -732,7 +735,8 @@ class testView(View):
         month = int(month)
         month = int(month)
         startTime = CommonService.str_to_timestamp('{year}-{month}'.format(year=year, month=month), '%Y-%m')
         startTime = CommonService.str_to_timestamp('{year}-{month}'.format(year=year, month=month), '%Y-%m')
         endTime = CommonService.str_to_timestamp('{year}-{month}'.format(year=year, month=month + 1), '%Y-%m') - 1
         endTime = CommonService.str_to_timestamp('{year}-{month}'.format(year=year, month=month + 1), '%Y-%m') - 1
-        qsTs = VodHlsModel.objects.filter(time__gte=startTime, time__lte=endTime).values('fg')
+        split_vod_hls_obj = SplitVodHlsObject()
+        qsTs = split_vod_hls_obj.get_vod_hls_data(time__gte=startTime, time__lte=endTime).values('fg')
         if not qsTs.exists():
         if not qsTs.exists():
             return HttpResponse('查无数据')
             return HttpResponse('查无数据')
         sumTs = 0  # 总ts个数
         sumTs = 0  # 总ts个数
@@ -775,22 +779,25 @@ class testView(View):
         storeTime = request_dict.get('time', None)
         storeTime = request_dict.get('time', None)
         now_time = int(time.time())
         now_time = int(time.time())
         try:
         try:
-            vh_qs = VodHlsModel.objects.filter(uid=uid, channel=channel, time=storeTime, endTime__gte=now_time). \
-                values("sec", "fg", "bucket__bucket", "bucket__endpoint", "bucket__region", "bucket__mold")
+            split_vod_hls_obj = SplitVodHlsObject()
+            vh_qs = split_vod_hls_obj.get_vod_hls_data(uid=uid, channel=channel, start_time=storeTime,
+                                                       end_time__gte=now_time).values("sec", "fg", "bucket_id")
             if not vh_qs.exists():
             if not vh_qs.exists():
                 return response.json(173)
                 return response.json(173)
-            fg = vh_qs[0]['fg']
-            bucket__region = vh_qs[0]['bucket__region']
-            bucket_name = vh_qs[0]['bucket__bucket']
-
+            vod_bucket_qs = VodBucketModel.objects.filter(id=vh_qs[0]['bucket_id']).values('bucket', 'region', 'mold')
+            if not vod_bucket_qs.exists():
+                return response.json(173)
+            fg = int(vh_qs[0]['fg'])
+            bucket_region = vod_bucket_qs[0]['region']
+            bucket_name = vod_bucket_qs[0]['bucket']
+            mold = vod_bucket_qs[0]['mold']
             session = Session(
             session = Session(
-                aws_access_key_id=AWS_ACCESS_KEY_ID[vh_qs[0]["bucket__mold"]],
-                aws_secret_access_key=AWS_SECRET_ACCESS_KEY[vh_qs[0]["bucket__mold"]],
-                region_name=bucket__region
+                aws_access_key_id=AWS_ACCESS_KEY_ID[mold],
+                aws_secret_access_key=AWS_SECRET_ACCESS_KEY[mold],
+                region_name=bucket_region
             )
             )
             conn = session.client('s3')
             conn = session.client('s3')
             playlist_entries = []
             playlist_entries = []
-            fg = int(fg)
             # ts_count = fg & 0xf
             # ts_count = fg & 0xf
             # fg 64位整型,低四位代表ts文件总数,然后进行位运算,一次移四位,每四位转为十进制即为当前ts文件的秒数
             # fg 64位整型,低四位代表ts文件总数,然后进行位运算,一次移四位,每四位转为十进制即为当前ts文件的秒数
             for i in range(15):
             for i in range(15):

+ 7 - 0
Controller/UidSetController.py

@@ -32,6 +32,7 @@ from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
 from django.db import transaction
 from django.db import transaction
+from Service.VodHlsService import SplitVodHlsObject
 
 
 '''
 '''
 # 管理员获取信息
 # 管理员获取信息
@@ -166,6 +167,9 @@ class UidSetView(View):
                     Order_Model.objects.filter(UID__in=uid).delete()
                     Order_Model.objects.filter(UID__in=uid).delete()
                     StsCrdModel.objects.filter(uid__in=uid).delete()
                     StsCrdModel.objects.filter(uid__in=uid).delete()
                     VodHlsModel.objects.filter(uid__in=uid).delete()
                     VodHlsModel.objects.filter(uid__in=uid).delete()
+                    # 删除vod_hls分表数据
+                    split_vod_hls_obj = SplitVodHlsObject()
+                    split_vod_hls_obj.del_vod_hls_data(uid__in=uid)
                     ExperienceContextModel.objects.filter(uid__in=uid).delete()
                     ExperienceContextModel.objects.filter(uid__in=uid).delete()
                     Device_Info.objects.filter(UID__in=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
                     Device_Info.objects.filter(UID__in=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
                 if 'Device_Info' in id_list:
                 if 'Device_Info' in id_list:
@@ -511,6 +515,9 @@ class UidSetView(View):
                     Order_Model.objects.filter(UID=uid).delete()
                     Order_Model.objects.filter(UID=uid).delete()
                     StsCrdModel.objects.filter(uid=uid).delete()
                     StsCrdModel.objects.filter(uid=uid).delete()
                     VodHlsModel.objects.filter(uid=uid).delete()
                     VodHlsModel.objects.filter(uid=uid).delete()
+                    # 删除vod_hls分表数据
+                    split_vod_hls_obj = SplitVodHlsObject()
+                    split_vod_hls_obj.del_vod_hls_data(uid=uid)
                     ExperienceContextModel.objects.filter(uid=uid).delete()
                     ExperienceContextModel.objects.filter(uid=uid).delete()
                     # UIDMainUser.objects.filter(UID=uid).delete()
                     # UIDMainUser.objects.filter(UID=uid).delete()
                     Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
                     Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')

+ 4 - 0
Controller/VodBucket.py

@@ -25,6 +25,7 @@ from Object.TokenObject import TokenObject
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
 from django.db import transaction
 from django.db import transaction
 import time
 import time
+from Service.VodHlsService import SplitVodHlsObject
 
 
 
 
 class VodBucketView(View):
 class VodBucketView(View):
@@ -249,6 +250,9 @@ class UidBucketView(View):
                 uid_bucket_qs.delete()
                 uid_bucket_qs.delete()
                 # OssCrdModel.objects.filter(uid=uid, channel=channel).delete()
                 # OssCrdModel.objects.filter(uid=uid, channel=channel).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
+                # 删除vod_hls分表数据
+                split_vod_hls_obj = SplitVodHlsObject()
+                split_vod_hls_obj.del_vod_hls_data(uid=uid)
                 StsCrdModel.objects.filter(uid=uid).delete()
                 StsCrdModel.objects.filter(uid=uid).delete()
                 Unused_Uid_Meal.objects.filter(uid=uid).delete()
                 Unused_Uid_Meal.objects.filter(uid=uid).delete()
         except Exception as e:
         except Exception as e:

+ 73 - 7
Service/VodHlsService.py

@@ -4,7 +4,7 @@
 from Model.models import VodHlsMon, VodHlsTues, VodHlsWed, VodHlsThur, VodHlsFri, VodHlsSat, VodHlsSun
 from Model.models import VodHlsMon, VodHlsTues, VodHlsWed, VodHlsThur, VodHlsFri, VodHlsSat, VodHlsSun
 from Object.utils import LocalDateTimeUtil
 from Object.utils import LocalDateTimeUtil
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
-
+from django.db.models import Count
 
 
 class SplitVodHlsObject:
 class SplitVodHlsObject:
     # VodHls分表功能类
     # VodHls分表功能类
@@ -12,13 +12,7 @@ class SplitVodHlsObject:
     def creat_vod_hls_data(self, **kwargs):
     def creat_vod_hls_data(self, **kwargs):
         """
         """
         分表保存云存信息数据
         分表保存云存信息数据
-        @return: None
         """
         """
-        vod_hls_obj = self.get_vod_hls_obj(**kwargs)
-        vod_hls_obj.save()
-
-    @staticmethod
-    def get_vod_hls_obj(**kwargs):
         start_time = kwargs.get('start_time')
         start_time = kwargs.get('start_time')
         str_date = CommonService.get_now_time_str(n_time=start_time, tz='0', lang='cn')[:10]
         str_date = CommonService.get_now_time_str(n_time=start_time, tz='0', lang='cn')[:10]
         week = LocalDateTimeUtil.date_to_week(str_date)
         week = LocalDateTimeUtil.date_to_week(str_date)
@@ -37,4 +31,76 @@ class SplitVodHlsObject:
             vod_hls = VodHlsSat(**kwargs)
             vod_hls = VodHlsSat(**kwargs)
         elif week == 7:
         elif week == 7:
             vod_hls = VodHlsSun(**kwargs)
             vod_hls = VodHlsSun(**kwargs)
+        vod_hls.save()
+
+    def del_vod_hls_data(self, **kwargs):
+        """
+        分表删除云存信息数据
+        """
+        VodHlsMon.objects.filter(**kwargs).delete()
+        VodHlsTues.objects.filter(**kwargs).delete()
+        VodHlsWed.objects.filter(**kwargs).delete()
+        VodHlsThur.objects.filter(**kwargs).delete()
+        VodHlsFri.objects.filter(**kwargs).delete()
+        VodHlsSat.objects.filter(**kwargs).delete()
+        VodHlsSun.objects.filter(**kwargs).delete()
+
+    def get_vod_hls_data(self, **kwargs):
+        """
+        分表获取云存信息数据
+        @return: vod_hls
+        """
+        if 'start_time' in kwargs:
+            start_time = kwargs.get('start_time')
+            str_date = CommonService.get_now_time_str(n_time=start_time, tz='0', lang='cn')[:10]
+            week = LocalDateTimeUtil.date_to_week(str_date)
+            vod_hls = None
+            if week == 1:
+                vod_hls = VodHlsMon.objects.filter(**kwargs)
+            elif week == 2:
+                vod_hls = VodHlsTues.objects.filter(**kwargs)
+            elif week == 3:
+                vod_hls = VodHlsWed.objects.filter(**kwargs)
+            elif week == 4:
+                vod_hls = VodHlsThur.objects.filter(**kwargs)
+            elif week == 5:
+                vod_hls = VodHlsFri.objects.filter(**kwargs)
+            elif week == 6:
+                vod_hls = VodHlsSat.objects.filter(**kwargs)
+            elif week == 7:
+                vod_hls = VodHlsSun.objects.filter(**kwargs)
+            return vod_hls
+        vod_hls_mon = VodHlsMon.objects.filter(**kwargs)
+        vod_hls_tus = VodHlsTues.objects.filter(**kwargs)
+        vod_hls_wed = VodHlsWed.objects.filter(**kwargs)
+        vod_hls_thur = VodHlsThur.objects.filter(**kwargs)
+        vod_hls_fri = VodHlsFri.objects.filter(**kwargs)
+        vod_hls_sat = VodHlsSat.objects.filter(**kwargs)
+        vod_hls_sun = VodHlsSun.objects.filter(**kwargs)
+
+        vod_hls = vod_hls_mon.union(vod_hls_tus, vod_hls_wed, vod_hls_thur, vod_hls_fri, vod_hls_sat, vod_hls_sun)
         return vod_hls
         return vod_hls
+
+    def get_vod_hls_date(self, **kwargs):
+        """
+        分表获取云存日期信息数据
+        @return: vod_hls
+        """
+
+        vod_hls_mon = VodHlsMon.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
+             'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
+        vod_hls_tus = VodHlsTues.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
+             'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
+        vod_hls_wed = VodHlsWed.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
+             'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
+        vod_hls_thur = VodHlsThur.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
+             'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
+        vod_hls_fri = VodHlsFri.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
+             'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
+        vod_hls_sat = VodHlsSat.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
+             'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
+        vod_hls_sun = VodHlsSun.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
+             'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
+
+        vod_hls = vod_hls_mon.union(vod_hls_tus, vod_hls_wed, vod_hls_thur, vod_hls_fri, vod_hls_sat, vod_hls_sun)[:31]
+        return vod_hls