|
@@ -30,13 +30,13 @@ from aliyunsdkcore import client
|
|
|
from aliyunsdksts.request.v20150401 import AssumeRoleRequest
|
|
|
from boto3.session import Session
|
|
|
from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
|
|
|
+from django.db import transaction
|
|
|
from django.views.generic.base import View
|
|
|
from pyfcm import FCMNotification
|
|
|
-
|
|
|
from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
|
|
|
SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_ARN, APNS_MODE, APNS_CONFIG, BASE_DIR, JPUSH_CONFIG, FCM_CONFIG
|
|
|
from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
|
|
|
- ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMassModel, SysMsgModel, UidPushModel
|
|
|
+ ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMassModel, SysMsgModel, UidPushModel, Unused_Uid_Meal
|
|
|
from Object.AliPayObject import AliPayObject
|
|
|
from Object.ResponseObject import ResponseObject
|
|
|
from Object.TokenObject import TokenObject
|
|
@@ -45,6 +45,7 @@ from Service.CommonService import CommonService
|
|
|
from Object.m3u8generate import PlaylistGenerator
|
|
|
from Object.WechatPayObject import WechatPayObject
|
|
|
from django.db.models import Q
|
|
|
+from django.db.models import F
|
|
|
|
|
|
from Service.ModelService import ModelService
|
|
|
|
|
@@ -539,7 +540,7 @@ class CloudStorageView(View):
|
|
|
.values('vodPrimaryUserID')
|
|
|
if not dv_qs.exists() or dv_qs[0]['vodPrimaryUserID'] != userID:
|
|
|
return response.json(12)
|
|
|
- ubqs = UID_Bucket.objects.filter(channel=channel, uid=uid).order_by('addTime')
|
|
|
+ ubqs = UID_Bucket.objects.filter(channel=channel, uid=uid)
|
|
|
if not ubqs.exists():
|
|
|
return response.json(10030)
|
|
|
now_time = int(time.time())
|
|
@@ -735,11 +736,9 @@ class CloudStorageView(View):
|
|
|
return response
|
|
|
|
|
|
def do_pay_by_ali_callback(self, request):
|
|
|
-
|
|
|
response = ResponseObject()
|
|
|
data = request.POST.dict()
|
|
|
- logger = logging.getLogger('log')
|
|
|
-
|
|
|
+ # logger = logging.getLogger('log')
|
|
|
try:
|
|
|
passback_params = data["passback_params"]
|
|
|
parmap = dict([(k, v[0]) for k, v in parse_qs(unquote(passback_params)).items()])
|
|
@@ -765,56 +764,60 @@ class CloudStorageView(View):
|
|
|
UID = order_list[0]['UID']
|
|
|
channel = order_list[0]['channel']
|
|
|
rank = order_list[0]['rank']
|
|
|
+
|
|
|
smqs = Store_Meal.objects.filter(id=rank). \
|
|
|
values("day", "bucket_id", "bucket__storeDay", "expire")
|
|
|
bucketId = smqs[0]['bucket_id']
|
|
|
-
|
|
|
if not smqs.exists():
|
|
|
return response.json(173)
|
|
|
- ubqs = UID_Bucket.objects.filter(bucket__id=bucketId, uid=UID, channel=channel, endTime__gte=nowTime). \
|
|
|
- values("id", "bucket__storeDay", "bucket__region", "endTime").order_by('addTime')[:1]
|
|
|
+ ubqs = UID_Bucket.objects.filter(uid=UID).values("id", "bucket_id", "bucket__storeDay", "bucket__region",
|
|
|
+ "endTime", "use_status")
|
|
|
expire = smqs[0]['expire']
|
|
|
-
|
|
|
if order_list[0]['isSelectDiscounts'] == 1:
|
|
|
expire = smqs[0]['expire'] * 2
|
|
|
- if ubqs.exists():
|
|
|
- ubq = ubqs[0]
|
|
|
- endTime = CommonService.calcMonthLater(expire, ubq['endTime'])
|
|
|
-
|
|
|
- ub_cqs = UID_Bucket.objects.filter(id=ubq['id']).update \
|
|
|
- (uid=UID, channel=channel, bucket_id=bucketId,
|
|
|
- endTime=endTime, updateTime=nowTime)
|
|
|
- logger.info('5')
|
|
|
- uid_bucket_id = ubq['id']
|
|
|
- else:
|
|
|
- endTime = CommonService.calcMonthLater(expire)
|
|
|
- ub_cqs = UID_Bucket.objects.create \
|
|
|
- (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
|
|
|
- updateTime=nowTime)
|
|
|
- uid_bucket_id = ub_cqs.id
|
|
|
-
|
|
|
- dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
|
|
|
- if dvq.exists():
|
|
|
- dvq_set_update_dict = {
|
|
|
- 'vodPrimaryUserID': userid,
|
|
|
- 'vodPrimaryMaster': username
|
|
|
- }
|
|
|
- dvq.update(**dvq_set_update_dict)
|
|
|
-
|
|
|
- order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
|
|
|
- sys_msg_text_list = ['成功购买云存', 'Successful purchase of cloud storage']
|
|
|
- self.do_vod_msg_Notice(UID, channel, userid, lang, sys_msg_text_list)
|
|
|
- red_url = "{SERVER_DOMAIN}web/paid2/success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
- if lang != 'cn':
|
|
|
- red_url = "{SERVER_DOMAIN}web/paid2/en_success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
- return HttpResponseRedirect(red_url)
|
|
|
+ with transaction.atomic():
|
|
|
+ if ubqs.exists():
|
|
|
+ ubq = ubqs[0]
|
|
|
+ if ubq['use_status'] == 1 and ubq['bucket_id'] == bucketId: #套餐使用中并且相同套餐叠加过期时间
|
|
|
+ endTime = CommonService.calcMonthLater(expire, ubq['endTime'])
|
|
|
+ UID_Bucket.objects.filter(id=ubq['id']).update \
|
|
|
+ (uid=UID, channel=channel, bucket_id=bucketId,
|
|
|
+ endTime=endTime, updateTime=nowTime)
|
|
|
+ else: #已过期或者不相同的套餐加入未使用的关联套餐表
|
|
|
+ has_unused = Unused_Uid_Meal.objects.filter(uid=UID, bucket_id=bucketId).values("id")
|
|
|
+ nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
|
|
|
+ if has_unused.exists():
|
|
|
+ Unused_Uid_Meal.objects.filter(id=has_unused[0]['id']).update(num=F('num') + nums)
|
|
|
+ else:
|
|
|
+ Unused_Uid_Meal.objects.create(uid=UID,channel=channel,addTime=nowTime,num=nums,
|
|
|
+ expire=smqs[0]['expire'],bucket_id=bucketId)
|
|
|
+ UID_Bucket.objects.filter(id=ubq['id']).update(has_unused=1)
|
|
|
+ uid_bucket_id = ubq['id']
|
|
|
+ else:
|
|
|
+ endTime = CommonService.calcMonthLater(expire)
|
|
|
+ ub_cqs = UID_Bucket.objects.create \
|
|
|
+ (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
|
|
|
+ updateTime=nowTime,use_status=1)
|
|
|
+ uid_bucket_id = ub_cqs.id
|
|
|
+
|
|
|
+ dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
|
|
|
+ if dvq.exists():
|
|
|
+ dvq_set_update_dict = {
|
|
|
+ 'vodPrimaryUserID': userid,
|
|
|
+ 'vodPrimaryMaster': username
|
|
|
+ }
|
|
|
+ dvq.update(**dvq_set_update_dict)
|
|
|
+
|
|
|
+ order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
|
|
|
+ sys_msg_text_list = ['成功购买云存', 'Successful purchase of cloud storage']
|
|
|
+ self.do_vod_msg_Notice(UID, channel, userid, lang, sys_msg_text_list)
|
|
|
+ red_url = "{SERVER_DOMAIN}web/paid2/success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
+ return HttpResponseRedirect(red_url)
|
|
|
return response.json(0, signature)
|
|
|
except Exception as e:
|
|
|
if order_qs:
|
|
|
order_qs.update(status=10)
|
|
|
red_url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
- if lang != 'cn':
|
|
|
- red_url = "{SERVER_DOMAIN}web/paid2/en_fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
return HttpResponseRedirect(red_url)
|
|
|
|
|
|
def do_pay_by_paypal_callback(self, request_dict, response):
|
|
@@ -822,7 +825,6 @@ class CloudStorageView(View):
|
|
|
PayerID = request_dict.get('PayerID', None)
|
|
|
orderID = request_dict.get('orderID', None)
|
|
|
lang = request_dict.get('lang', None)
|
|
|
-
|
|
|
try:
|
|
|
order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
|
|
|
|
|
@@ -856,45 +858,58 @@ class CloudStorageView(View):
|
|
|
if not smqs.exists():
|
|
|
return response.json(173)
|
|
|
# ##
|
|
|
- ubqs = UID_Bucket.objects.filter(bucket__id=bucketId, uid=UID, channel=channel, endTime__gte=nowTime). \
|
|
|
- values("id", "bucket__storeDay", "bucket__region", "endTime").order_by('addTime')[:1]
|
|
|
+ ubqs = UID_Bucket.objects.filter(uid=UID).values("id", "bucket_id", "bucket__storeDay", "bucket__region",
|
|
|
+ "endTime", "use_status")
|
|
|
expire = smqs[0]['expire']
|
|
|
+
|
|
|
if order_list[0]['isSelectDiscounts'] == 1:
|
|
|
expire = smqs[0]['expire'] * 2
|
|
|
- if ubqs.exists():
|
|
|
- ubq = ubqs[0]
|
|
|
- endTime = CommonService.calcMonthLater(expire, ubq['endTime'])
|
|
|
- ub_cqs = UID_Bucket.objects.filter(id=ubq['id']).update \
|
|
|
- (uid=UID, channel=channel, bucket_id=bucketId,
|
|
|
- endTime=endTime, updateTime=nowTime)
|
|
|
- uid_bucket_id = ubq['id']
|
|
|
- else:
|
|
|
- endTime = CommonService.calcMonthLater(expire)
|
|
|
- ub_cqs = UID_Bucket.objects.create \
|
|
|
- (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime, updateTime=nowTime)
|
|
|
- uid_bucket_id = ub_cqs.id
|
|
|
+ with transaction.atomic():
|
|
|
+ if ubqs.exists():
|
|
|
+ ubq = ubqs[0]
|
|
|
+ if ubq['use_status'] == 1 and ubq['bucket_id'] == bucketId: #套餐使用中并且相同套餐叠加过期时间
|
|
|
+ endTime = CommonService.calcMonthLater(expire, ubq['endTime'])
|
|
|
+ UID_Bucket.objects.filter(id=ubq['id']).update \
|
|
|
+ (uid=UID, channel=channel, bucket_id=bucketId,
|
|
|
+ endTime=endTime, updateTime=nowTime)
|
|
|
+ else: #已过期或者不相同的套餐加入未使用的关联套餐表
|
|
|
+ has_unused = Unused_Uid_Meal.objects.filter(uid=UID, bucket_id=bucketId).values("id")
|
|
|
+ nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
|
|
|
+ if has_unused.exists():
|
|
|
+ Unused_Uid_Meal.objects.filter(id=has_unused[0]['id']).update(num=F('num') + nums)
|
|
|
+ else:
|
|
|
+ Unused_Uid_Meal.objects.create(uid=UID,channel=channel,addTime=nowTime,num=nums,
|
|
|
+ expire=smqs[0]['expire'],bucket_id=bucketId)
|
|
|
+ UID_Bucket.objects.filter(id=ubq['id']).update(has_unused=1)
|
|
|
+ uid_bucket_id = ubq['id']
|
|
|
+ else:
|
|
|
+ endTime = CommonService.calcMonthLater(expire)
|
|
|
+ ub_cqs = UID_Bucket.objects.create \
|
|
|
+ (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
|
|
|
+ updateTime=nowTime,use_status=1)
|
|
|
+ uid_bucket_id = ub_cqs.id
|
|
|
|
|
|
- dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
|
|
|
- if dvq.exists():
|
|
|
- dvq_set_update_dict = {
|
|
|
- 'vodPrimaryUserID': userid,
|
|
|
- 'vodPrimaryMaster': username
|
|
|
- }
|
|
|
- dvq.update(**dvq_set_update_dict)
|
|
|
- order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
|
|
|
- sys_msg_text_list = ['成功购买云存','Successful purchase of cloud storage']
|
|
|
- self.do_vod_msg_Notice(UID, channel, userid, lang, sys_msg_text_list)
|
|
|
-
|
|
|
- # return response.json(0)
|
|
|
- red_url = "{SERVER_DOMAIN}web/paid2/success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
- if lang != 'cn':
|
|
|
- red_url = "{SERVER_DOMAIN}web/paid2/en_success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
- return HttpResponseRedirect(red_url)
|
|
|
+ dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
|
|
|
+ if dvq.exists():
|
|
|
+ dvq_set_update_dict = {
|
|
|
+ 'vodPrimaryUserID': userid,
|
|
|
+ 'vodPrimaryMaster': username
|
|
|
+ }
|
|
|
+ dvq.update(**dvq_set_update_dict)
|
|
|
+ order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
|
|
|
+ sys_msg_text_list = ['成功购买云存','Successful purchase of cloud storage']
|
|
|
+ self.do_vod_msg_Notice(UID, channel, userid, lang, sys_msg_text_list)
|
|
|
+
|
|
|
+ # return response.json(0)
|
|
|
+ red_url = "{SERVER_DOMAIN}web/paid2/success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
+ if lang != 'cn':
|
|
|
+ red_url = "{SERVER_DOMAIN}web/paid2/en_success.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
+
|
|
|
+ return HttpResponseRedirect(red_url)
|
|
|
except Exception as e:
|
|
|
print(repr(e))
|
|
|
if order_qs:
|
|
|
order_qs.update(status=10)
|
|
|
-
|
|
|
red_url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
|
if lang != 'cn':
|
|
|
red_url = "{SERVER_DOMAIN}web/paid2/en_fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
|
|
@@ -903,11 +918,9 @@ class CloudStorageView(View):
|
|
|
def do_pay_by_wechat_callback(self, request, response):
|
|
|
|
|
|
logger = logging.getLogger('log')
|
|
|
-
|
|
|
try:
|
|
|
pay = WechatPayObject()
|
|
|
data = pay.weixinpay_call_back(request.body)
|
|
|
-
|
|
|
attach = data["attach"]
|
|
|
parmap = dict([(k, v[0]) for k, v in parse_qs(unquote(attach)).items()])
|
|
|
lang = parmap["lang"]
|
|
@@ -937,45 +950,53 @@ class CloudStorageView(View):
|
|
|
if not smqs.exists():
|
|
|
return HttpResponse(pay.xml_to_dict({'return_code': 'FAIL', 'return_msg': '套餐不存在'}))
|
|
|
# ##
|
|
|
- ubqs = UID_Bucket.objects.filter(bucket__id=bucketId, uid=UID, channel=channel, endTime__gte=nowTime). \
|
|
|
- values("id", "bucket__storeDay", "bucket__region", "endTime").order_by('addTime')[:1]
|
|
|
+ ubqs = UID_Bucket.objects.filter(uid=UID).values("id", "bucket_id", "bucket__storeDay",
|
|
|
+ "bucket__region", "endTime", "use_status")
|
|
|
expire = smqs[0]['expire']
|
|
|
if order_list[0]['isSelectDiscounts'] == 1:
|
|
|
expire = smqs[0]['expire'] * 2
|
|
|
- if ubqs.exists():
|
|
|
- ubq = ubqs[0]
|
|
|
- endTime = CommonService.calcMonthLater(expire, ubq['endTime'])
|
|
|
- ub_cqs = UID_Bucket.objects.filter(id=ubq['id']).update \
|
|
|
- (uid=UID, channel=channel, bucket_id=bucketId,
|
|
|
- endTime=endTime, updateTime=nowTime)
|
|
|
- uid_bucket_id = ubq['id']
|
|
|
- else:
|
|
|
- endTime = CommonService.calcMonthLater(expire)
|
|
|
- ub_cqs = UID_Bucket.objects.create \
|
|
|
- (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
|
|
|
- updateTime=nowTime)
|
|
|
- uid_bucket_id = ub_cqs.id
|
|
|
-
|
|
|
- dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
|
|
|
- if dvq.exists():
|
|
|
- dvq_set_update_dict = {
|
|
|
- 'vodPrimaryUserID': userid,
|
|
|
- 'vodPrimaryMaster': username
|
|
|
- }
|
|
|
- dvq.update(**dvq_set_update_dict)
|
|
|
- order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
|
|
|
- sys_msg_text_list = ['成功购买云存', 'Successful purchase of cloud storage']
|
|
|
- self.do_vod_msg_Notice(UID, channel, userid, lang, sys_msg_text_list)
|
|
|
- return HttpResponse(pay.xml_to_dict({'return_code': 'SUCCESS', 'return_msg': 'OK'}))
|
|
|
-
|
|
|
+ with transaction.atomic():
|
|
|
+ if ubqs.exists():
|
|
|
+ ubq = ubqs[0]
|
|
|
+ if ubq['use_status'] == 1 and ubq['bucket_id'] == bucketId: #套餐使用中并且相同套餐叠加过期时间
|
|
|
+ endTime = CommonService.calcMonthLater(expire, ubq['endTime'])
|
|
|
+ UID_Bucket.objects.filter(id=ubq['id']).update \
|
|
|
+ (uid=UID, channel=channel, bucket_id=bucketId,
|
|
|
+ endTime=endTime, updateTime=nowTime)
|
|
|
+ else: #已过期或者不相同的套餐加入未使用的关联套餐表
|
|
|
+ has_unused = Unused_Uid_Meal.objects.filter(uid=UID, bucket_id=bucketId).values("id")
|
|
|
+ nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
|
|
|
+ if has_unused.exists():
|
|
|
+ Unused_Uid_Meal.objects.filter(id=has_unused[0]['id']).update(num=F('num') + nums)
|
|
|
+ else:
|
|
|
+ Unused_Uid_Meal.objects.create(uid=UID,channel=channel,addTime=nowTime,num=nums,
|
|
|
+ expire=smqs[0]['expire'],bucket_id=bucketId)
|
|
|
+ UID_Bucket.objects.filter(id=ubq['id']).update(has_unused=1)
|
|
|
+ uid_bucket_id = ubq['id']
|
|
|
+ else:
|
|
|
+ endTime = CommonService.calcMonthLater(expire)
|
|
|
+ ub_cqs = UID_Bucket.objects.create \
|
|
|
+ (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
|
|
|
+ updateTime=nowTime,use_status=1)
|
|
|
+ uid_bucket_id = ub_cqs.id
|
|
|
+
|
|
|
+ dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
|
|
|
+ if dvq.exists():
|
|
|
+ dvq_set_update_dict = {
|
|
|
+ 'vodPrimaryUserID': userid,
|
|
|
+ 'vodPrimaryMaster': username
|
|
|
+ }
|
|
|
+ dvq.update(**dvq_set_update_dict)
|
|
|
+ order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id)
|
|
|
+ sys_msg_text_list = ['成功购买云存', 'Successful purchase of cloud storage']
|
|
|
+ self.do_vod_msg_Notice(UID, channel, userid, lang, sys_msg_text_list)
|
|
|
+ return HttpResponse(pay.xml_to_dict({'return_code': 'SUCCESS', 'return_msg': 'OK'}))
|
|
|
else:
|
|
|
order_qs.update(status=10)
|
|
|
return HttpResponse(pay.xml_to_dict({'return_code': 'FAIL', 'return_msg': '参数格式校验错误'}))
|
|
|
-
|
|
|
except Exception as e:
|
|
|
if order_qs:
|
|
|
order_qs.update(status=10)
|
|
|
-
|
|
|
return HttpResponse(pay.xml_to_dict({'return_code': 'FAIL', 'return_msg': repr(e)}))
|
|
|
|
|
|
def do_create_pay_order(self, request_dict, userID, ip, response):
|
|
@@ -1179,21 +1200,33 @@ class CloudStorageView(View):
|
|
|
return response.json(173)
|
|
|
bucketId = smqs[0]['bucket_id']
|
|
|
# ##
|
|
|
- ubqs = UID_Bucket.objects.filter(bucket__id=bucketId, uid=uid, channel=channel, endTime__gte=nowTime). \
|
|
|
- values("id", "bucket__storeDay", "bucket__region", "endTime").order_by('addTime')[:1]
|
|
|
+ ubqs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay", "bucket__region",
|
|
|
+ "endTime", "use_status")
|
|
|
expire = smqs[0]['expire']
|
|
|
- if ubqs.exists():
|
|
|
- ubq = ubqs[0]
|
|
|
- endTime = CommonService.calcMonthLater(expire, ubq['endTime'])
|
|
|
- ub_cqs = UID_Bucket.objects.filter(id=ubq['id']).update \
|
|
|
- (uid=uid, channel=channel, bucket_id=bucketId,
|
|
|
- endTime=endTime, updateTime=nowTime)
|
|
|
- uid_bucket_id = ubq['id']
|
|
|
- else:
|
|
|
- endTime = CommonService.calcMonthLater(expire)
|
|
|
- ub_cqs = UID_Bucket.objects.create \
|
|
|
- (uid=uid, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime, updateTime=nowTime)
|
|
|
- uid_bucket_id = ub_cqs.id
|
|
|
+ with transaction.atomic():
|
|
|
+ if ubqs.exists():
|
|
|
+ ubq = ubqs[0]
|
|
|
+ if ubq['use_status'] == 1 and ubq['bucket_id'] == bucketId: #套餐使用中并且相同套餐叠加过期时间
|
|
|
+ endTime = CommonService.calcMonthLater(expire, ubq['endTime'])
|
|
|
+ UID_Bucket.objects.filter(id=ubq['id']).update \
|
|
|
+ (uid=uid, channel=channel, bucket_id=bucketId,
|
|
|
+ endTime=endTime, updateTime=nowTime)
|
|
|
+ else: #已过期或者不相同的套餐加入未使用的关联套餐表
|
|
|
+ has_unused = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucketId).values("id")
|
|
|
+ nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
|
|
|
+ if has_unused.exists():
|
|
|
+ Unused_Uid_Meal.objects.filter(id=has_unused[0]['id']).update(num=F('num') + nums)
|
|
|
+ else:
|
|
|
+ Unused_Uid_Meal.objects.create(uid=uid,channel=channel,addTime=nowTime,num=nums,
|
|
|
+ expire=smqs[0]['expire'],bucket_id=bucketId)
|
|
|
+ UID_Bucket.objects.filter(id=ubq['id']).update(has_unused=1)
|
|
|
+ uid_bucket_id = ubq['id']
|
|
|
+ else:
|
|
|
+ endTime = CommonService.calcMonthLater(expire)
|
|
|
+ ub_cqs = UID_Bucket.objects.create \
|
|
|
+ (uid=uid, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
|
|
|
+ updateTime=nowTime,use_status=1)
|
|
|
+ uid_bucket_id = ub_cqs.id
|
|
|
Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID,
|
|
|
desc=smqs[0]['content'], payType=pay_type, payTime=nowTime,
|
|
|
price=smqs[0]['price'], currency=smqs[0]['currency'], addTime=nowTime,
|
|
@@ -1289,16 +1322,19 @@ class CloudStorageView(View):
|
|
|
if not dv_qs.exists() or dv_qs[0]['vodPrimaryUserID'] != userID:
|
|
|
return response.json(12)
|
|
|
now_time = int(time.time())
|
|
|
- uid_bucket = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time).values("id", "uid", "endTime",
|
|
|
- "bucket__content").order_by(
|
|
|
- 'addTime')
|
|
|
- if not uid_bucket.exists():
|
|
|
+ uid_bucket = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time).values("id", "uid","bucket__content",
|
|
|
+ "use_status","endTime","has_unused")
|
|
|
+ if not uid_bucket:
|
|
|
return response.json(10030)
|
|
|
- for index, value in enumerate(uid_bucket):
|
|
|
- value['is_use'] = 0
|
|
|
- if index == 0:
|
|
|
- value['is_use'] = 1
|
|
|
- return response.json(0, list(uid_bucket))
|
|
|
+ commodity_dict = {}
|
|
|
+ if uid_bucket[0]['has_unused'] == 1:
|
|
|
+ unused = Unused_Uid_Meal.objects.filter(uid=uid).annotate(unused_id=F('id'))\
|
|
|
+ .values("unused_id","uid","bucket__content","num")
|
|
|
+ commodity_dict['using'] = list(uid_bucket)
|
|
|
+ commodity_dict['unused'] = list(unused)
|
|
|
+ else:
|
|
|
+ commodity_dict['using'] = [uid_bucket]
|
|
|
+ return response.json(0, commodity_dict)
|
|
|
|
|
|
# 提前使用设备关联套餐
|
|
|
def switch_device_commodity(self, request_dict, userID, response):
|
|
@@ -1307,22 +1343,30 @@ class CloudStorageView(View):
|
|
|
.values('vodPrimaryUserID')
|
|
|
if not dv_qs.exists() or dv_qs[0]['vodPrimaryUserID'] != userID:
|
|
|
return response.json(12)
|
|
|
- switch_commodity_id = request_dict.get('switch_commodity_id', None)
|
|
|
- if switch_commodity_id:
|
|
|
+ unused_id = request_dict.get('switch_commodity_id', None)
|
|
|
+ if unused_id:
|
|
|
# 切换设备套餐关联
|
|
|
- using_uid_bucket = UID_Bucket.objects.filter(uid=uid, endTime__gte=int(time.time())).values("id", "uid",
|
|
|
- "endTime","bucket__content","addTime").order_by('addTime')
|
|
|
- if not using_uid_bucket.exists():
|
|
|
+ using_uid_bucket = UID_Bucket.objects.filter(uid=uid,has_unused=1).values("id", "uid", "endTime",
|
|
|
+ "bucket__content","addTime")
|
|
|
+ unuseds = Unused_Uid_Meal.objects.filter(id=unused_id).values("id","uid","channel","addTime","expire",
|
|
|
+ "num","bucket_id","userID_id")
|
|
|
+ if not unuseds.exists() or not using_uid_bucket.exists():
|
|
|
return response.json(10030)
|
|
|
- useing_uid_bucket_id = using_uid_bucket[0]['id']
|
|
|
- useing_uid_bucket_addTime = using_uid_bucket[0]['addTime']
|
|
|
- if int(useing_uid_bucket_id) == int(switch_commodity_id):
|
|
|
- return response.json(10032)
|
|
|
-
|
|
|
- UID_Bucket.objects.filter(id=switch_commodity_id).update(addTime=useing_uid_bucket_addTime)#更新转移的云存套餐为使用中
|
|
|
- UID_Bucket.objects.filter(id=useing_uid_bucket_id).delete() # 删除原来使用中的云存套餐
|
|
|
- VodHlsModel.objects.filter(uid=uid).delete() # 删除播放列表
|
|
|
- StsCrdModel.objects.filter(uid=uid).delete() # 删除sts记录
|
|
|
+ unused = unuseds[0]
|
|
|
+ nowTime = int(time.time())
|
|
|
+ try:
|
|
|
+ with transaction.atomic():
|
|
|
+ count_unused = Unused_Uid_Meal.objects.filter(uid=uid).count()
|
|
|
+ has_unused = 1 if count_unused>1 else 0
|
|
|
+ endTime = CommonService.calcMonthLater(unused['expire'] * unused['num'])
|
|
|
+ UID_Bucket.objects.filter(uid=uid).update(channel=unused['channel'],endTime=endTime,bucket_id=unused['bucket_id']
|
|
|
+ ,updateTime=nowTime,use_status=1,userID_id=unused['userID_id'],
|
|
|
+ has_unused=has_unused)
|
|
|
+ Unused_Uid_Meal.objects.filter(id=unused_id).delete()
|
|
|
+ StsCrdModel.objects.filter(uid=uid).delete() # 删除sts记录
|
|
|
+ VodHlsModel.objects.filter(uid=uid).delete() # 删除播放列表,后期数据量多时应该考虑延后删除
|
|
|
+ except Exception:
|
|
|
+ return response.json(474)
|
|
|
return response.json(0)
|
|
|
return response.json(444)
|
|
|
|
|
@@ -1534,11 +1578,38 @@ def deleteVodHls(request):
|
|
|
return response.json(0)
|
|
|
|
|
|
|
|
|
-# 删除过期云存关联套餐
|
|
|
-def deleteExpiredUidBucket(request):
|
|
|
+# 更新过期云存关联套餐
|
|
|
+def updateExpiredUidBucket(request):
|
|
|
response = ResponseObject()
|
|
|
now_time = int(time.time())
|
|
|
expired_uid_bucket = UID_Bucket.objects.filter(endTime__lte=now_time)
|
|
|
id_list = expired_uid_bucket.values_list("id", flat=True)
|
|
|
- UID_Bucket.objects.filter(id__in=list(id_list)).delete() # 删除过期云存关联套餐, 后续是否考虑用软删除
|
|
|
+ UID_Bucket.objects.filter(id__in=list(id_list)).update(use_status=2) # 更新过期云存关联套餐状态
|
|
|
+ return response.json(0)
|
|
|
+
|
|
|
+# 如果云存关联套餐过期,更新未使用的关联套餐
|
|
|
+def updateUnusedUidBucket(request):
|
|
|
+ response = ResponseObject()
|
|
|
+ now_time = int(time.time())
|
|
|
+ expired_uid_buckets = UID_Bucket.objects.filter(endTime__lte=now_time,has_unused=1).values("id","uid")[0:1000]
|
|
|
+ for expired_uid_bucket in expired_uid_buckets:
|
|
|
+ unuseds = Unused_Uid_Meal.objects.filter(uid=expired_uid_bucket['uid']).values("id","uid","channel","addTime","expire",
|
|
|
+ "num","bucket_id","userID_id").order_by('addTime')[0:1]
|
|
|
+ if not unuseds.exists():
|
|
|
+ continue
|
|
|
+ unused = unuseds[0]
|
|
|
+ try:
|
|
|
+ with transaction.atomic():
|
|
|
+ count_unused = Unused_Uid_Meal.objects.filter(uid=expired_uid_bucket['uid']).count()
|
|
|
+ has_unused = 1 if count_unused>1 else 0
|
|
|
+ endTime = CommonService.calcMonthLater(unused['expire'] * unused['num'])
|
|
|
+ UID_Bucket.objects.filter(uid=expired_uid_bucket['uid']).update(channel=unused['channel'],endTime=endTime,bucket_id=unused['bucket_id']
|
|
|
+ ,updateTime=now_time,use_status=1,userID_id=unused['userID_id'],
|
|
|
+ has_unused=has_unused)
|
|
|
+ Unused_Uid_Meal.objects.filter(id=unused['id']).delete()
|
|
|
+ StsCrdModel.objects.filter(uid=expired_uid_bucket['uid']).delete() # 删除sts记录
|
|
|
+ VodHlsModel.objects.filter(uid=expired_uid_bucket['uid']).delete() # 删除播放列表,后期数据量多时应该考虑延后删除
|
|
|
+ except Exception:
|
|
|
+ continue
|
|
|
+ # UID_Bucket.objects.filter(id__in=list(id_list)).update(use_status=2) # 更新过期云存关联套餐状态
|
|
|
return response.json(0)
|