|
@@ -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),
|