瀏覽代碼

逻辑修复

chenjunkai 6 年之前
父節點
當前提交
a668272c3e
共有 5 個文件被更改,包括 92 次插入63 次删除
  1. 0 1
      Ansjer/config.py
  2. 1 2
      Ansjer/test/oss_sts.py
  3. 16 5
      Ansjer/test/util/var_dump.py
  4. 32 18
      Controller/CloudVod.py
  5. 43 37
      Controller/DeviceMeal.py

+ 0 - 1
Ansjer/config.py

@@ -69,6 +69,5 @@ elif SERVER_TYPE == 'Ansjer.formal_settings':
 # oss param
 OSS_STS_ACCESS_KEY = 'LTAIyMkGfEdogyL9'
 OSS_STS_ACCESS_SECRET = '71uIjpsqVOmF7DAITRyRuc259jHOjO'
-OSS_REGION_ID = 'cn-shenzhen'
 OSS_ROLE_ARN = 'acs:ram::1901342792446414:role/stsoss'
 

+ 1 - 2
Ansjer/test/oss_sts.py

@@ -45,8 +45,7 @@ body = clt.do_action(req)
 # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
 token = json.loads(body)
 print(token)
-# exit()
-# tokens = {'RequestId': '2D83A43D-8D6B-44C5-83A4-3530BFB032EC', 'AssumedRoleUser': {'AssumedRoleId': '394329055954717182:chanjunkai', 'Arn': 'acs:ram::1901342792446414:role/stsoss/chanjunkai'}, 'Credentials': {'AccessKeySecret': 'FtPRvMDBRitAX8X7ZGoQ2DohrMWvMjP2EXVVSVqhmdyv', 'AccessKeyId': 'STS.NJHBY1uKvmvy2rRunerymDq7y', 'Expiration': '2018-11-30T07:23:54Z', 'SecurityToken': 'CAIS0wJ1q6Ft5B2yfSjIr4n9CeOFmJRX2rSSMFTjkW4wfvZBq7Scmzz2IHFIf3NhAe0bv/kzm2lX7/YYlqN4S5ZDR1HCbsJxtgf5G/c/J9ivgde8yJBZoljMewHKedGSvqL7Z+H+U6mMGJOEYEzFkSle2KbzcS7YMXWuLZyOj+wuDLEQRRLqVSdaI91UKwB+yrcdLmCDGfupPwLnpWDSAUF0wFce71ly8qOi2MaRxwPDhVnhsI8vqp/2P4KvYrsdXuh2WMzn2/dtJOiTknxb7x9X+LlxgPUDu02D3LC8G3Bd7w+LKPGultRkN11CYbUgEKNltIqF95oh4LSVzd+ojU8QYqcMA3j9PNnxmJKfRLn2Z4xlKeinYij3v4rRZsWvgWQNemkGMQ5GQd0lJ0JrBAYkIjOgcf77owqbOlr+GvXZj/hpiMov1Tvz4cGNPEOf5T4EVOPY4vQagAGFFahWtPsgkWPPJhSOu/bsFZGJFeQvb/Ij5nT5dPNiuEfvECu+ns2GmUB5sAQO9xeMmIBr9y2yteTIwoG8FQx5S4ybj051MK+K53GeRZOSd05iZRU8hpU3+O2mTlQI4FicDjG6C6my1IJpNPYjO+8Y9cWecm+aodAeBJLJS1WP6w=='}}
+
 
 # 使用临时token中的认证信息初始化StsAuth实例。
 auth = oss2.StsAuth(token['Credentials']['AccessKeyId'],

+ 16 - 5
Ansjer/test/util/var_dump.py

@@ -1,5 +1,16 @@
-sss = None
-if sss:
-    print(1)
-else:
-    print(2)
+import time
+
+tmstm = '2018121810'
+timeArray = time.strptime(tmstm,"%Y%m%d%H")
+print(timeArray)
+print(int(time.mktime(timeArray)))
+
+
+import datetime
+
+# utc时间
+nowutc = (datetime.datetime.utcnow())
+print(nowutc)
+# utc转换时间
+timenow = (datetime.datetime.utcnow() + datetime.timedelta(hours=8))
+print(timenow)

+ 32 - 18
Controller/CloudVod.py

@@ -26,8 +26,7 @@ from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 import urllib
 
-from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, \
-    OSS_REGION_ID, OSS_ROLE_ARN, SERVER_DOMAIN
+from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN
 from Model.models import Device_Meal, Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -107,6 +106,8 @@ class CloudVodView(View):
                 return self.do_change_status(request_dict, userID, response)
             elif operation == 'details':
                 return self.do_meal_details(request_dict, userID, response)
+            elif operation == 'playlist':
+                return self.do_get_playlist(request_dict,userID,response)
             else:
                 return response.json(414)
 
@@ -132,6 +133,8 @@ class CloudVodView(View):
         nowTime = int(time.time())
         orderID = CommonService.createID()
         smqs = Store_Meal.objects.filter(id=rank).values("currency", "price", "content")
+        if not smqs.exists():
+            return response.json(10,'套餐不存在')
         currency = smqs[0]['currency']
         price = smqs[0]['price']
         content = smqs[0]['content']
@@ -153,7 +156,7 @@ class CloudVodView(View):
                 "item_list": {
                     "items": [{"name": "Cloud video", "sku": "1", "price": price, "currency": "USD", "quantity": 1}]},
                 "amount": {"total": price, "currency": currency},
-                "description":content
+                "description": content
             }]})
 
         if payment.create():
@@ -195,7 +198,10 @@ class CloudVodView(View):
         channel = utko.channel
         print(channel)
         print(UID)
-        qs = Device_Meal.objects.filter(uid=UID, channel=channel, status=1).values("channel", "end_time","rank__bucket__bucket","rank__bucket__endpoint")
+        qs = Device_Meal.objects.filter(uid=UID, channel=channel, status=1).values("channel", "end_time",
+                                                                                   "rank__bucket__bucket",
+                                                                                   "rank__bucket__endpoint",
+                                                                                   "rank__bucket__region")
         if not qs.exists():
             res = {'code': 403}
             return JsonResponse(status=200, data=res)
@@ -220,7 +226,7 @@ class CloudVodView(View):
         endpoint = qs[0]['rank__bucket__endpoint']
         access_key_id = OSS_STS_ACCESS_KEY
         access_key_secret = OSS_STS_ACCESS_SECRET
-        region_id = OSS_REGION_ID
+        region_id = qs[0]['rank__bucket__region']
         role_arn = OSS_ROLE_ARN
         clt = client.AcsClient(access_key_id, access_key_secret, region_id)
         req = AssumeRoleRequest.AssumeRoleRequest()
@@ -288,7 +294,10 @@ class CloudVodView(View):
         if not qs.exists():
             return response.json(13)
         uid = qs[0]['UID']
-        dm_qs = Device_Meal.objects.filter(uid=uid, channel=channel).values('rank__bucket__bucket','end_time','rank__bucket__endpoint')
+        dm_qs = Device_Meal.objects.filter(uid=uid, channel=channel).values('rank__bucket__bucket', 'end_time',
+                                                                            'rank__bucket__endpoint')
+        if not dm_qs.exists():
+            return response.json(10,'未购买')
         now_time = timezone.localtime(timezone.now())
         if now_time > dm_qs[0]['end_time']:
             return response.json(10, '已过期')
@@ -306,17 +315,20 @@ class CloudVodView(View):
             if obj.is_prefix():  # 文件夹
                 print('directory: ' + obj.key)
                 ptime = obj.key.split('/')[3]
-                url = bucket.sign_url('GET', '{prefix}{name}.m3u8'.format(prefix=obj.key, name=ptime), 60 * 60,
+                url = bucket.sign_url('GET', '{prefix}{name}.m3u8'.format(prefix=obj.key, name=ptime), 3600,
                                       params={'x-oss-process': 'hls/sign'})
-                # url = bucket.sign_url('GET', obj.key, 60 * 60,params={'x-oss-process': 'hls/sign'})
                 urllst = url.split('?')
                 url_start = urllib.parse.unquote(urllst[0])
                 url_end = urllst[1]
                 vod_play_url = '{url_start}?{url_end}'.format(url_start=url_start, url_end=url_end)
-                vod_play_list.append({'name': ptime, 'sign_url': vod_play_url})
+                thumb_key = '{prefix}ts0.ts'.format(prefix=obj.key)
+                print(thumb_key)
+                thumb = bucket.sign_url('GET',thumb_key , 3600,
+                                            params={'x-oss-process': 'video/snapshot,t_10000,m_fast,w_300'})
+                vod_play_list.append({'name': ptime, 'sign_url': vod_play_url,'thumb':thumb})
             else:  # 文件
                 pass
-                print('file: ' + obj.key)
+                # print('file: ' + obj.key)
         return response.json(0, vod_play_list)
 
     def do_paypal_execute(self, request_dict, response):
@@ -376,6 +388,8 @@ class CloudVodView(View):
             return response.json(10, '没有设备')
         UID = dvqs[0]["UID"]
         dmqs = Device_Meal.objects.filter(channel=channel, uid=UID)
+        if not dmqs.exists():
+            return response.json(10, '未购买')
         now_time = timezone.localtime(timezone.now())
         if now_time > dmqs[0].end_time:
             return response.json(10, '已过期')
@@ -387,14 +401,12 @@ class CloudVodView(View):
         utko.generate(data={'uid': UID, 'channel': channel})
         uidTkUrl = "{SERVER_DOMAIN}cloudVod/getSts?uidToken={uidToken}".format(uidToken=utko.token,
                                                                                SERVER_DOMAIN=SERVER_DOMAIN)
-        return response.json(0, {
-            'uidTkUrl': uidTkUrl
-        })
+        return response.json(0, {'uidTkUrl': uidTkUrl})
 
     def do_store_palylist(self, request_dict, response):
         uidToken = request_dict.get('uidToken', None)
         time = request_dict.get('time', None)
-        sec = request_dict.get('sec',None)
+        sec = request_dict.get('sec', None)
         utko = UidTokenObject(uidToken)
         if utko.flag is False:
             return response.json(444, 'uidToken')
@@ -410,19 +422,21 @@ class CloudVodView(View):
         storeDay = qs[0]['rank__bucket__storeDay']
         bucketID = qs[0]['rank__bucket_id']
         endTime = nowTime + storeDay * 86400
-        VodHlsModel.objects.create(uid=UID, channel=channel, time=nowTime, endTime=endTime, bucket_id=bucketID,sec=sec)
+        VodHlsModel.objects.create(uid=UID, channel=channel, time=nowTime, endTime=endTime, bucket_id=bucketID, sec=sec)
         return response.json(0)
 
     def do_get_playlist(self, request_dict, userID, response):
-        stime = request_dict.get('stime', None)
-        etime = request_dict.get('etime', None)
+        # stime = request_dict.get('stime', None)
+        # etime = request_dict.get('etime', None)
+        daytime = request_dict.get('daytime', None)
+        daytime = int(daytime)
+
         did = request_dict.get('did', None)
         channel = request_dict.get('channel', None)
         dvqs = Device_Info.objects.filter(id=did, userID_id=userID).values("UID")
         if not dvqs.exists():
             return response.json(10, '无设备')
         UID = dvqs[0]["UID"]
-        time.time()
         qs = Device_Meal.objects.filter(uid=UID, channel=channel, status=1).values("rank", "channel")
         if not qs.exists():
             return response.json(10, '设备未购买')

+ 43 - 37
Controller/DeviceMeal.py

@@ -26,7 +26,7 @@ from Object.ResponseObject import ResponseObject
 http://192.168.136.40:8077/device/meal?operation=add&token=test&uid=UKPAH63V23U4ZHEB111A&channel=1&rank=2&days=1
 http://192.168.136.40:8077/device/meal?operation=query&token=test&page=1&line=10
 http://192.168.136.40:8077/device/meal?operation=delete&token=test&id=1&id=2&id=3&id=4&id=5
-http://192.168.136.45:8077/device/meal?operation=update&token=test&status=1&uid=UKPAH63V23U4ZHEB111A&channel=2&rank=2&days=1&id=6
+http://192.168.136.45:8077/device/meal?operation=update&token=local&status=1&uid=UKPAH63V23U4ZHEB111A&channel=2&rank=2&days=1&id=6
 用户:
 http://13.56.215.252:82/device/meal?operation=querybyuser&token=test&uid=L59KVYDAEPHR1T6M111A&channel=0
 http://13.56.215.252:82/device/meal?operation=addbyuser&token=test&uid=L59KVYDAEPHR1T6M111A&channel=11&rank=2
@@ -86,8 +86,15 @@ class DeviceMeal(View):
             rank = request_dict.get('rank', None)
             param_flag = CommonService.get_param_flag(data=[uid, channel, rank])
             if param_flag is True:
-                is_exist = Device_Meal.objects.filter(uid=uid, channel=channel)
-                if is_exist.exists():
+                dmqs = Device_Meal.objects.filter(uid=uid, channel=channel)
+                if dmqs[0].exists():
+                    days = dmqs[0].day
+                    now_time = timezone.localtime(timezone.now())
+                    if now_time > dmqs[0].end_time:
+                        end_time = now_time + datetime.timedelta(days=int(days))
+                    else:
+                        end_time = dmqs[0].end_time + datetime.timedelta(days=int(days))
+                    dmqs.update(end_time=end_time,update_time=now_time)
                     return response.json(0)
                 else:
                     try:
@@ -146,42 +153,41 @@ class DeviceMeal(View):
 
     def update(self, request_dict, userID,response):
         own_perm = ModelService.check_permission(userID=userID, permID=30)
-        if own_perm is True:
-            id = request_dict.get('id', None)
-            status = request_dict.get('status', None)
-            uid = request_dict.get('uid', None)
-            channel = request_dict.get('channel', None)
-            rank = request_dict.get('rank', None)
-            param_flag = CommonService.get_param_flag(data=[status, uid, channel, rank, id])
-            if param_flag is True:
-                try:
-                    store_meal = Store_Meal.objects.get(id=rank)
-                    device_meal = Device_Meal.objects.get(id=id)
-                    days = store_meal.day
-                    now_time = timezone.localtime(timezone.now())
-                    if now_time > device_meal.end_time:
-                        end_time = now_time + datetime.timedelta(days=int(days))
-                    else:
-                        end_time = device_meal.end_time + datetime.timedelta(days=int(days))
-                except Exception as e:
-                    errorInfo = traceback.format_exc()
-                    print(errorInfo)
-                    return response.json(424, {'details': repr(e)})
-                else:
-                    if device_meal.id:
-                        device_meal.status = status
-                        device_meal.uid = uid
-                        device_meal.channel = channel
-                        device_meal.end_time = end_time
-                        device_meal.rank = store_meal
-                        device_meal.save()
-                        return response.json(0, {'update_id': device_meal.id,
-                                                'update_time': str(now_time),
-                                                'end_time': str(end_time)})
+        if not own_perm:
+            return response.json(404)
+        id = request_dict.get('id', None)
+        status = request_dict.get('status', None)
+        uid = request_dict.get('uid', None)
+        channel = request_dict.get('channel', None)
+        rank = request_dict.get('rank', None)
+        param_flag = CommonService.get_param_flag(data=[status, uid, channel, rank, id])
+        if param_flag is True:
+            try:
+                store_meal = Store_Meal.objects.get(id=rank)
+                device_meal = Device_Meal.objects.get(id=id)
+                # days = store_meal.day
+                # now_time = timezone.localtime(timezone.now())
+                # if now_time > device_meal.end_time:
+                #     end_time = now_time + datetime.timedelta(days=int(days))
+                # else:
+                #     end_time = device_meal.end_time + datetime.timedelta(days=int(days))
+            except Exception as e:
+                errorInfo = traceback.format_exc()
+                print(errorInfo)
+                return response.json(424, {'details': repr(e)})
             else:
-                return response.json(444)
+                if device_meal.id:
+                    device_meal.status = status
+                    device_meal.uid = uid
+                    device_meal.channel = channel
+                    # device_meal.end_time = end_time
+                    device_meal.rank = store_meal
+                    device_meal.save()
+                    return response.json(0, {'update_id': device_meal.id,
+                                             'update_time': str(device_meal.now_time),
+                                             'end_time': str(device_meal.end_time)})
         else:
-            return response.json(404)
+            return response.json(444)
 
     def delete(self, request_dict, userID,response):
         own_perm = ModelService.check_permission(userID=userID, permID=10)