chenjunkai 6 years ago
parent
commit
19f833bf7c
3 changed files with 114 additions and 109 deletions
  1. 70 102
      Controller/CloudVod.py
  2. 26 5
      Controller/EquipmentManager.py
  3. 18 2
      Model/models.py

+ 70 - 102
Controller/CloudVod.py

@@ -28,7 +28,7 @@ from django.views.generic.base import View
 import urllib
 
 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 Model.models import Device_Meal, Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.UidTokenObject import UidTokenObject
@@ -106,54 +106,36 @@ class CloudVodView(View):
                 return self.do_create_order(request_dict, userID, response)
             elif operation == 'status':
                 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)
 
-    def do_meal_details(self, request_dict, userID, response):
-        did = request_dict.get('did', None)
-        uidf = Device_Info.objects.filter(userID_id=userID)
-        if did:
-            uidf.filter(id=did)
-        uids = uidf.values_list("UID", flat=True)
-        uid_list = list(uids)
-        dmqs = Device_Meal.objects.filter(uid__in=uid_list).values('rank', 'status', 'channel', 'add_time',
-                                                                   'update_time',
-                                                                   'end_time', 'rank__title')
-        res = CommonService.qs_to_list(dmqs)
-        return response.json(0, res)
-
+    # next
     def do_create_order(self, request_dict, userID, response):
         did = request_dict.get('did', None)
         rank = request_dict.get('rank', None)
         channel = request_dict.get('channel', None)
         if not did or not channel or not rank:
             return response.json(444, 'did,channel,rank')
+        smqs = Store_Meal.objects.filter(id=rank).values("currency", "price", "content", "day", "bucket__storeDay")
+        currency = smqs[0]['currency']
+        price = smqs[0]['price']
+        content = smqs[0]['content']
+        day = smqs[0]['day']
+        if not smqs.exists():
+            return response.json(10, '套餐不存在')
         qs = Device_Info.objects.filter(userID_id=userID, id=did).values("UID")
         if not qs.exists():
             return response.json(13)
         uid = qs[0]['UID']
-        dmqs = Device_Meal.objects.filter(channel=channel, uid=uid).values("rank_id", "end_time")
-        # 续费模式
-        if dmqs.exists():
-            rankId = dmqs[0]['rank_id']
-            end_time = dmqs[0]['end_time']
-            now_time = timezone.localtime(timezone.now())
-            if now_time < end_time:
-                if int(rank) < int(rankId):
-                    return response.json(10, '不能降级套餐')
-        nowTime = int(time.time())
+        ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel).values("bucket__storeDay")
+        if ubqs.exists():
+            if ubqs[0]['bucket__storeDay'] > smqs[0]['bucket__storeDay']:
+                return response.json(10, '不可降级')
+            # 续费流程
+        # 新增流程
         orderID = CommonService.createOrderID()
-        smqs = Store_Meal.objects.filter(id=rank).values("currency", "price", "content", "day")
-        if not smqs.exists():
-            return response.json(10, '套餐不存在')
-        currency = smqs[0]['currency']
-        price = smqs[0]['price']
-        content = smqs[0]['content']
-        day = smqs[0]['day']
         call_sub_url = "{SERVER_DOMAIN}cloudVod/payExecute?orderID={orderID}". \
             format(SERVER_DOMAIN=SERVER_DOMAIN, orderID=orderID)
         # call_sub_url = "http://192.168.136.40:8077/cloudVod/payExecute?orderID={orderID}".format(
@@ -180,6 +162,7 @@ class CloudVodView(View):
             print(payment.error)
             return response.json(10, payment.error)
         print(payment)
+        nowTime = int(time.time())
         for link in payment.links:
             if link.rel == "approval_url":
                 approval_url = str(link.href)
@@ -188,8 +171,7 @@ class CloudVodView(View):
                                            price=price, currency=currency, addTime=nowTime, updTime=nowTime,
                                            endTime=nowTime + int(day) * 3600 * 24,
                                            rank_id=rank,
-                                           paypal=approval_url
-                                           )
+                                           paypal=approval_url)
                 return response.json(0, {"redirectUrl": approval_url})
         return response.json(10, 'generate_order_false')
 
@@ -206,19 +188,15 @@ 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",
-                                                                                   "rank__bucket__region")
-        if not qs.exists():
+        ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel, status=1).values('channel','bucket__bucket','bucket__endpoint','bucket__region','endTime')
+        if not ubqs.exists():
             res = {'code': 403}
             return JsonResponse(status=200, data=res)
             # return response.json(10, '设备未购买')
-        now_time = timezone.localtime(timezone.now())
-        if now_time > qs[0]['end_time']:
+        now_time = int(time.time())
+        if now_time > ubqs[0]['endTime']:
             res = {'code': 403}
             return JsonResponse(status=200, data=res)
-
         now_time_stamp = int(time.time())
         oc_qs = OssCrdModel.objects.filter(uid=UID, channel=channel).values("addTime", "data")
         if oc_qs.exists():
@@ -230,11 +208,11 @@ class CloudVodView(View):
                 return JsonResponse(status=200, data=res)
         # 套餐id
         storage = '{uid}/vod{channel}/'.format(uid=UID, channel=channel)
-        bucket_name = qs[0]['rank__bucket__bucket']
-        endpoint = qs[0]['rank__bucket__endpoint']
+        bucket_name = ubqs[0]['bucket__bucket']
+        endpoint = ubqs[0]['bucket__endpoint']
         access_key_id = OSS_STS_ACCESS_KEY
         access_key_secret = OSS_STS_ACCESS_SECRET
-        region_id = qs[0]['rank__bucket__region']
+        region_id = ubqs[0]['bucket__region']
         role_arn = OSS_ROLE_ARN
         clt = client.AcsClient(access_key_id, access_key_secret, region_id)
         req = AssumeRoleRequest.AssumeRoleRequest()
@@ -302,17 +280,17 @@ 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')
-        if not dm_qs.exists():
+        ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel) \
+            .values('endTime', 'bucket__bucket', 'bucket__endpoint')
+        if not ubqs.exists():
             return response.json(10, '未购买')
-        now_time = timezone.localtime(timezone.now())
-        if now_time > dm_qs[0]['end_time']:
+        now_time = time.time()
+        if now_time > ubqs[0]['endTime']:
             return response.json(10, '已过期')
-        if not dm_qs.exists():
+        if not ubqs.exists():
             return response.json(10, '未开通云存储')
-        bucket_name = dm_qs[0]["rank__bucket__bucket"]
-        endpoint = dm_qs[0]["rank__bucket__endpoint"]
+        bucket_name = ubqs[0]["bucket__bucket"]
+        endpoint = ubqs[0]["bucket__endpoint"]
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         bucket = oss2.Bucket(auth, endpoint, bucket_name)
         vod_play_list = []
@@ -364,47 +342,38 @@ class CloudVodView(View):
         rank_id = order_list[0]['rank_id']
         UID = order_list[0]['UID']
         channel = order_list[0]['channel']
-        smqs = Store_Meal.objects.filter(id=rank_id).values("day", "bucket__storeDay")
+        smqs = Store_Meal.objects.filter(id=rank_id).values("day", "bucket_id")
+        bucketId = smqs[0]['bucket_id']
         if not smqs.exists():
             return response.json(0, '套餐已删除')
-        add_days = smqs[0]["day"]
-        dmqs = Device_Meal.objects.filter(channel=channel, uid=UID).values("end_time", "rank_id",
-                                                                           "rank__bucket__storeDay")
-        # 续费模式
-        if dmqs.exists():
-            end_time = dmqs[0]["end_time"]
-            now_time = timezone.localtime(timezone.now())
-            if now_time > end_time:
-                end_time = now_time + datetime.timedelta(days=int(add_days))
-                dmqs.update(end_time=end_time, update_time=now_time)
+        addTime = int(smqs[0]["day"]) * 24 * 3600
+        ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel).values("bucket_id", "endTime", "bucket__storeDay")
+        nowTime = int(time.time())
+        if ubqs.exists():
+            # 判断是否过期了
+            if nowTime > ubqs[0]['endTime']:
+                ubqs.update(endTime=nowTime + addTime)
             else:
-                dmrankID = dmqs[0]['rank_id']
-                # 在同一个关联套餐下加
-                if rank_id == dmrankID:
-                    timedelta = datetime.timedelta(days=int(add_days))
-                    end_time = end_time + timedelta
+                # 同一个bucket续费
+                if bucketId == ubqs[0]['bucket_id']:
+                    ubqs.update(endTime=ubqs[0]['endTime'] + addTime)
                 else:
-                    origin_storeDay = int(dmqs[0]['rank__bucket__storeDay'])
-                    upgrade_storeDay = int(smqs[0]['bucket__storeDay'])
-                    nowTime = time.time()
-                    endTime = time.mktime(end_time.timetuple())
-                    print('nowTime:')
-                    print(now_time)
-                    print('endTime:')
-                    print(endTime)
-                    ctcTime = endTime - nowTime
-                    multiple = math.ceil(upgrade_storeDay / origin_storeDay)
-                    print(multiple)
-                    delsec = ctcTime / multiple
-                    print(delsec)
-                    timedelta = datetime.timedelta(seconds=delsec)
-                    end_time = end_time + timedelta
-                dmqs.update(end_time=end_time, update_time=now_time,rank_id=rank_id)
-            # return response.json(0)
+                    if ubqs[0]['bucket__storeDay'] > smqs[0]['bucket__storeDay']:
+                        return response.json(10, '不可降级')
+                    else:
+                        origin_storeDay = int(ubqs[0]['bucket__storeDay'])
+                        upgrade_storeDay = int(smqs[0]['bucket__storeDay'])
+                        ctcTime = ubqs[0]['endTime'] - nowTime
+                        multiple = math.ceil(upgrade_storeDay / origin_storeDay)
+                        ubqs.update(endTime=ctcTime / multiple + addTime)
         # 新增模式
         else:
-            end_time = datetime.timedelta(days=add_days) + datetime.datetime.now()
-            Device_Meal.objects.create(rank_id=rank_id, uid=UID, channel=channel, status=0, end_time=end_time)
+            UID_Bucket.objects.create(
+                uid=UID,
+                channel=channel,
+                bucket_id=bucketId,
+                endTime=nowTime + addTime
+            )
             # return response.json(0)
         from django.http import HttpResponse
         response = HttpResponse()
@@ -436,16 +405,15 @@ class CloudVodView(View):
         if not dvqs.exists():
             return response.json(10, '没有设备')
         UID = dvqs[0]["UID"]
-        dmqs = Device_Meal.objects.filter(channel=channel, uid=UID)
-        if not dmqs.exists():
+        ubqs = UID_Bucket.objects.filter(channel=channel, uid=UID)
+        if not ubqs.exists():
             return response.json(10, '未购买')
-        now_time = timezone.localtime(timezone.now())
-        if now_time > dmqs[0].end_time:
+        now_time = int(time.time())
+        if now_time > ubqs[0].endTime:
             return response.json(10, '已过期')
-        if not dmqs.exists():
+        if not ubqs.exists():
             return response.json(10, '未购买')
-        now_time = timezone.localtime(timezone.now())
-        dmqs.update(update_time=now_time, status=status)
+        ubqs.update(status=status)
         utko = UidTokenObject()
         utko.generate(data={'uid': UID, 'channel': channel})
         uidTkUrl = "{SERVER_DOMAIN}cloudVod/getSts?uidToken={uidToken}". \
@@ -465,13 +433,13 @@ class CloudVodView(View):
         channel = utko.channel
         print(channel)
         print(UID)
-        qs = Device_Meal.objects.filter(uid=UID, channel=channel, status=1).values("channel", "rank__bucket__storeDay",
-                                                                                   "rank__bucket_id")
+        qs = UID_Bucket.objects.filter(uid=UID, channel=channel, status=1).values("channel", "bucket__storeDay",
+                                                                                   "bucket_id")
         if not qs.exists():
             return response.json(10, '设备未购买')
         nowTime = int(time)
-        storeDay = qs[0]['rank__bucket__storeDay']
-        bucketID = qs[0]['rank__bucket_id']
+        storeDay = qs[0]['bucket__storeDay']
+        bucketID = qs[0]['bucket_id']
         endTime = nowTime + storeDay * 86400
         VodHlsModel.objects.create(uid=UID, channel=channel, time=nowTime, endTime=endTime, bucket_id=bucketID, sec=sec)
         return response.json(0)
@@ -491,8 +459,8 @@ class CloudVodView(View):
         if not dvqs.exists():
             return response.json(10, '无设备')
         UID = dvqs[0]["UID"]
-        qs = Device_Meal.objects.filter(uid=UID, channel=channel, status=1).values("rank", "channel")
-        if not qs.exists():
+        ubqs = UID_Bucket.objects.filter(uid=UID, channel=channel, status=1).values("rank", "channel")
+        if not ubqs.exists():
             return response.json(10, '设备未购买')
         nowTime = time.time()
         vodqs = VodHlsModel.objects.filter(uid=UID, channel=channel, time__range=(startTime, endTime),

+ 26 - 5
Controller/EquipmentManager.py

@@ -1,7 +1,7 @@
 from django.views.decorators.csrf import csrf_exempt
 import traceback
 from Service.ModelService import ModelService
-from Model.models import Device_User, Device_Info,Device_Meal
+from Model.models import Device_User, Device_Info,Device_Meal,UID_Bucket
 from Service.CommonService import CommonService
 import simplejson as json
 from Object.TokenObject import TokenObject
@@ -217,6 +217,27 @@ def queryUserEquipmentInterface(request, *callback_args,
     if tko.code != 0:
         return response.json(tko.code)
     userID = tko.userID
+    # if userID is not None:
+    #     deviceValid = Device_Info.objects.filter(userID_id=userID)
+    #     # print(deviceValid)
+    #     res = CommonService.qs_to_dict(deviceValid)
+    #     datas = res['datas']
+    #     uid_list = []
+    #     for q in datas:
+    #         uid_list.append(q['fields']['UID'])
+    #     dmqs = Device_Meal.objects.filter(uid__in=uid_list).\
+    #         values('rank', 'status', 'channel', 'end_time', 'rank__title','uid')
+    #     dmlt = CommonService.qs_to_list(dmqs)
+    #     # print(uid_list)
+    #     res = []
+    #     for p in datas:
+    #         p['fields']['vod'] = []
+    #         for dm in dmlt:
+    #             if p['fields']['UID'] == dm['uid']:
+    #                 p['fields']['vod'].append(dm)
+    #         res.append(p)
+    #     print(res)
+    #     return response.json(0, {'datas':res})
     if userID is not None:
         deviceValid = Device_Info.objects.filter(userID_id=userID)
         # print(deviceValid)
@@ -225,14 +246,14 @@ def queryUserEquipmentInterface(request, *callback_args,
         uid_list = []
         for q in datas:
             uid_list.append(q['fields']['UID'])
-        dmqs = Device_Meal.objects.filter(uid__in=uid_list).\
-            values('rank', 'status', 'channel', 'end_time', 'rank__title','uid')
-        dmlt = CommonService.qs_to_list(dmqs)
+        ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
+            values('bucket__content', 'status', 'channel', 'endTime', 'uid')
+        ubql = CommonService.qs_to_list(ubqs)
         # print(uid_list)
         res = []
         for p in datas:
             p['fields']['vod'] = []
-            for dm in dmlt:
+            for dm in ubql:
                 if p['fields']['UID'] == dm['uid']:
                     p['fields']['vod'].append(dm)
             res.append(p)

+ 18 - 2
Model/models.py

@@ -620,8 +620,8 @@ class OssCrdModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='主键')
     uid = models.CharField(max_length=20, verbose_name='设备UID')
     channel = models.SmallIntegerField(default=0, verbose_name='通道')
-    data = models.TextField(verbose_name='设备UID')
-    addTime = models.IntegerField(verbose_name='添加事件', default=0)
+    data = models.TextField(verbose_name='设备sts')
+    addTime = models.IntegerField(verbose_name='添加时间', default=0)
     bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id',on_delete=models.CASCADE, default=1, verbose_name='存储空间')
 
     def __str__(self):
@@ -634,3 +634,19 @@ class OssCrdModel(models.Model):
         ordering = ('-id',)
 
 
+class UID_Bucket(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+    uid = models.CharField(max_length=20, verbose_name='设备UID')
+    channel = models.SmallIntegerField(default=0, verbose_name='通道')
+    bucket = models.ForeignKey(VodBucketModel, blank=True, to_field='id',on_delete=models.CASCADE, verbose_name='存储空间')
+    status = models.SmallIntegerField(default=0, verbose_name='状态[0:开启,1:关闭]')
+    endTime = models.IntegerField(verbose_name='结束时间', default=0)
+
+    class Meta:
+        db_table = 'vod_uid_bucket'
+        verbose_name = u'设备关联套餐表'
+        verbose_name_plural = verbose_name
+        ordering = ('id',)
+
+    def __str__(self):
+        return self.id