|
@@ -21,19 +21,17 @@ from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
|
|
from django.views.generic.base import View
|
|
from django.views.generic.base import View
|
|
|
|
|
|
from Ansjer.config import SERVER_DOMAIN, PAYPAL_CRD, SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, \
|
|
from Ansjer.config import SERVER_DOMAIN, PAYPAL_CRD, SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, \
|
|
- AWS_ARN, OAUTH_ACCESS_TOKEN_SECRET, DETECT_PUSH_DOMAINS, CONFIG_INFO, CONFIG_CN
|
|
|
|
|
|
+ AWS_ARN, OAUTH_ACCESS_TOKEN_SECRET
|
|
from Controller.CheckUserData import DataValid
|
|
from Controller.CheckUserData import DataValid
|
|
from Controller.CloudPhoto.CloudServiceController import CloudServiceController
|
|
from Controller.CloudPhoto.CloudServiceController import CloudServiceController
|
|
from Controller.PaymentCycle import Paypal
|
|
from Controller.PaymentCycle import Paypal
|
|
from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, UID_Bucket, StsCrdModel, \
|
|
from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, UID_Bucket, StsCrdModel, \
|
|
ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMsgModel, Unused_Uid_Meal, PromotionRuleModel, \
|
|
ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMsgModel, Unused_Uid_Meal, PromotionRuleModel, \
|
|
- VideoPlaybackTimeModel, CouponModel, VodBucketModel, VodHlsSummary, AiService, UidSetModel, UidPushModel, \
|
|
|
|
- VodHlsTagType, ICloudStoreMeal, IcloudUseDetails, IcloudService
|
|
|
|
|
|
+ VideoPlaybackTimeModel, CouponModel, VodBucketModel, VodHlsSummary, VodHlsTagType
|
|
from Object.AWS.AmazonS3Util import AmazonS3Util
|
|
from Object.AWS.AmazonS3Util import AmazonS3Util
|
|
from Object.AWS.S3Email import S3Email
|
|
from Object.AWS.S3Email import S3Email
|
|
from Object.AliPayObject import AliPayObject
|
|
from Object.AliPayObject import AliPayObject
|
|
from Object.AliSmsObject import AliSmsObject
|
|
from Object.AliSmsObject import AliSmsObject
|
|
-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
|
|
@@ -47,7 +45,6 @@ from Service.VodHlsService import SplitVodHlsObject
|
|
ssl._create_default_https_context = ssl._create_unverified_context
|
|
ssl._create_default_https_context = ssl._create_unverified_context
|
|
LOGGER = logging.getLogger('info')
|
|
LOGGER = logging.getLogger('info')
|
|
|
|
|
|
-
|
|
|
|
# 设备信息添加
|
|
# 设备信息添加
|
|
class CloudStorageView(View):
|
|
class CloudStorageView(View):
|
|
|
|
|
|
@@ -98,8 +95,6 @@ class CloudStorageView(View):
|
|
return self.do_create_pay_order(request_dict, user_id, ip, response)
|
|
return self.do_create_pay_order(request_dict, user_id, ip, response)
|
|
elif operation == 'changevodstatus': # 修改云存状态,传送两个url,即getsignsts接口和storeplaylist接口
|
|
elif operation == 'changevodstatus': # 修改云存状态,传送两个url,即getsignsts接口和storeplaylist接口
|
|
return self.do_change_vod_status(request_dict, user_id, response)
|
|
return self.do_change_vod_status(request_dict, user_id, response)
|
|
- elif operation == 'changevodaistatus': # 修改云存AI状态
|
|
|
|
- return self.do_change_vod_ai_status(request_dict, user_id, response)
|
|
|
|
elif operation == 'queryvodlist': # 获取视频播放列表
|
|
elif operation == 'queryvodlist': # 获取视频播放列表
|
|
return self.do_query_vod_list(request_dict, user_id, response)
|
|
return self.do_query_vod_list(request_dict, user_id, response)
|
|
elif operation == 'commoditylist': # 查询套餐列表
|
|
elif operation == 'commoditylist': # 查询套餐列表
|
|
@@ -191,10 +186,7 @@ class CloudStorageView(View):
|
|
device_info_qs = Device_Info.objects.filter(Q(UID=uid), Q(Type__lte=4) | Q(Type=10001))
|
|
device_info_qs = Device_Info.objects.filter(Q(UID=uid), Q(Type__lte=4) | Q(Type=10001))
|
|
if device_info_qs.exists():
|
|
if device_info_qs.exists():
|
|
return response.json(0)
|
|
return response.json(0)
|
|
- uid_set_qs = UidSetModel.objects.filter(uid=uid).values('is_ai')
|
|
|
|
- if not uid_set_qs.exists():
|
|
|
|
- return response.json(173)
|
|
|
|
- is_ai = uid_set_qs[0]['is_ai']
|
|
|
|
|
|
+
|
|
store_qs = Store_Meal.objects.filter(Q(lang__lang=lang), Q(is_show=0), ~Q(pay_type='11')) # 过滤激活码、隐藏套餐
|
|
store_qs = Store_Meal.objects.filter(Q(lang__lang=lang), Q(is_show=0), ~Q(pay_type='11')) # 过滤激活码、隐藏套餐
|
|
experience_context_qs = ExperienceContextModel.objects.filter(uid=uid, experience_type=0)
|
|
experience_context_qs = ExperienceContextModel.objects.filter(uid=uid, experience_type=0)
|
|
|
|
|
|
@@ -206,15 +198,11 @@ class CloudStorageView(View):
|
|
store_qs = store_qs.filter(~Q(pay_type='10'))
|
|
store_qs = store_qs.filter(~Q(pay_type='10'))
|
|
else:
|
|
else:
|
|
store_qs = store_qs.filter(pay_type='10')
|
|
store_qs = store_qs.filter(pay_type='10')
|
|
- if CONFIG_INFO != CONFIG_CN and is_ai != 2: # 返回支持AI的套餐
|
|
|
|
- store_qs = store_qs.filter(is_ai=1)
|
|
|
|
- else: # 返回不支持AI的套餐
|
|
|
|
- store_qs = store_qs.filter(is_ai=0)
|
|
|
|
|
|
|
|
store_qs = store_qs.annotate(title=F('lang__title'), content=F('lang__content'),
|
|
store_qs = store_qs.annotate(title=F('lang__title'), content=F('lang__content'),
|
|
discount_content=F('lang__discount_content'))
|
|
discount_content=F('lang__discount_content'))
|
|
store_qs = store_qs.order_by('sort').values("id", "title", "content", "price", "day", "currency",
|
|
store_qs = store_qs.order_by('sort').values("id", "title", "content", "price", "day", "currency",
|
|
- "bucket__storeDay", 'is_beta', 'is_ai',
|
|
|
|
|
|
+ "bucket__storeDay",
|
|
"bucket__bucket", "bucket__area", "commodity_code",
|
|
"bucket__bucket", "bucket__area", "commodity_code",
|
|
"commodity_type", "is_discounts", "virtual_price", "expire",
|
|
"commodity_type", "is_discounts", "virtual_price", "expire",
|
|
"discount_price", "discount_content", "symbol", "cycle_config_id")
|
|
"discount_price", "discount_content", "symbol", "cycle_config_id")
|
|
@@ -307,12 +295,11 @@ class CloudStorageView(View):
|
|
now_time = int(time.time())
|
|
now_time = int(time.time())
|
|
|
|
|
|
split_vod_hls_obj = SplitVodHlsObject()
|
|
split_vod_hls_obj = SplitVodHlsObject()
|
|
- vod_hls_qs = split_vod_hls_obj.get_vod_hls_data(uid=uid, channel=channel, start_time__gte=start_time,
|
|
|
|
|
|
+ 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",
|
|
end_time__gte=now_time).values("sec", "fg", "bucket_id",
|
|
- 'start_time')[:10]
|
|
|
|
|
|
+ 'start_time')
|
|
if not vod_hls_qs.exists():
|
|
if not vod_hls_qs.exists():
|
|
return response.json(173)
|
|
return response.json(173)
|
|
- vod_hls_qs = sorted(vod_hls_qs, key=lambda item: item['start_time'])[:10]
|
|
|
|
bucket_id = vod_hls_qs[0]['bucket_id']
|
|
bucket_id = vod_hls_qs[0]['bucket_id']
|
|
vod_bucket_qs = VodBucketModel.objects.filter(id=bucket_id).values('bucket', 'region', 'mold')
|
|
vod_bucket_qs = VodBucketModel.objects.filter(id=bucket_id).values('bucket', 'region', 'mold')
|
|
if not vod_bucket_qs.exists():
|
|
if not vod_bucket_qs.exists():
|
|
@@ -320,6 +307,7 @@ class CloudStorageView(View):
|
|
bucket_region = vod_bucket_qs[0]['region']
|
|
bucket_region = vod_bucket_qs[0]['region']
|
|
bucket_name = vod_bucket_qs[0]['bucket']
|
|
bucket_name = vod_bucket_qs[0]['bucket']
|
|
mold = vod_bucket_qs[0]["mold"]
|
|
mold = vod_bucket_qs[0]["mold"]
|
|
|
|
+ fg = int(vod_hls_qs[0]['fg'])
|
|
s3_obj = AmazonS3Util(
|
|
s3_obj = AmazonS3Util(
|
|
AWS_ACCESS_KEY_ID[mold],
|
|
AWS_ACCESS_KEY_ID[mold],
|
|
AWS_SECRET_ACCESS_KEY[mold],
|
|
AWS_SECRET_ACCESS_KEY[mold],
|
|
@@ -329,20 +317,16 @@ class CloudStorageView(View):
|
|
playlist_entries = []
|
|
playlist_entries = []
|
|
# ts_count = fg & 0xf
|
|
# ts_count = fg & 0xf
|
|
# fg 64位整型,低四位代表ts文件总数,然后进行位运算,一次移四位,每四位转为十进制即为当前ts文件的秒数
|
|
# fg 64位整型,低四位代表ts文件总数,然后进行位运算,一次移四位,每四位转为十进制即为当前ts文件的秒数
|
|
- for item in vod_hls_qs:
|
|
|
|
- fg = int(item['fg'])
|
|
|
|
- temp_time = item['start_time']
|
|
|
|
- for i in range(15):
|
|
|
|
- shift = (i + 1) * 4
|
|
|
|
- duration = (fg >> shift) & 0xf
|
|
|
|
- if duration > 0:
|
|
|
|
- ts_file = '{uid}/vod{channel}/{time}/ts{i}.ts'.format(uid=uid, channel=channel, time=temp_time,
|
|
|
|
- i=i)
|
|
|
|
- response_url = s3_obj.generate_file_obj_url(bucket_name, ts_file)
|
|
|
|
- playlist_entries.append({
|
|
|
|
- 'name': response_url,
|
|
|
|
- 'duration': duration,
|
|
|
|
- })
|
|
|
|
|
|
+ for i in range(15):
|
|
|
|
+ shift = (i + 1) * 4
|
|
|
|
+ duration = (fg >> shift) & 0xf
|
|
|
|
+ if duration > 0:
|
|
|
|
+ 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)
|
|
|
|
+ playlist_entries.append({
|
|
|
|
+ 'name': response_url,
|
|
|
|
+ 'duration': duration,
|
|
|
|
+ })
|
|
|
|
|
|
playlist = PlaylistGenerator(playlist_entries).generate()
|
|
playlist = PlaylistGenerator(playlist_entries).generate()
|
|
response = HttpResponse(playlist)
|
|
response = HttpResponse(playlist)
|
|
@@ -413,7 +397,7 @@ class CloudStorageView(View):
|
|
"Effect": "Allow",
|
|
"Effect": "Allow",
|
|
"Action": "s3:*",
|
|
"Action": "s3:*",
|
|
"Resource": ["{aws_arn}:::{bucket_name}/{uid_channel}*".
|
|
"Resource": ["{aws_arn}:::{bucket_name}/{uid_channel}*".
|
|
- format(aws_arn=aws_arn, bucket_name=bucket_name, uid_channel=storage)]
|
|
|
|
|
|
+ format(aws_arn=aws_arn, bucket_name=bucket_name, uid_channel=storage)]
|
|
}
|
|
}
|
|
]
|
|
]
|
|
}
|
|
}
|
|
@@ -445,7 +429,7 @@ class CloudStorageView(View):
|
|
addTime=now_time, type=1)
|
|
addTime=now_time, type=1)
|
|
return JsonResponse(status=200, data=res)
|
|
return JsonResponse(status=200, data=res)
|
|
except Exception as e:
|
|
except Exception as e:
|
|
- return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
+ return response.json(500, repr(e))
|
|
|
|
|
|
@staticmethod
|
|
@staticmethod
|
|
def do_query_vod_list(request_dict, user_id, response): # 获取视频播放列表
|
|
def do_query_vod_list(request_dict, user_id, response): # 获取视频播放列表
|
|
@@ -477,10 +461,11 @@ class CloudStorageView(View):
|
|
})
|
|
})
|
|
|
|
|
|
device_info_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid, isShare=False).values(
|
|
device_info_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid, isShare=False).values(
|
|
- 'vodPrimaryUserID', 'Type', 'vodPrimaryMaster')
|
|
|
|
|
|
+ 'vodPrimaryUserID',
|
|
|
|
+ 'vodPrimaryMaster')
|
|
if not device_info_qs.exists():
|
|
if not device_info_qs.exists():
|
|
return response.json(12)
|
|
return response.json(12)
|
|
- device_type = device_info_qs[0]['Type']
|
|
|
|
|
|
+
|
|
device_info_qs_time_over = int(time.time())
|
|
device_info_qs_time_over = int(time.time())
|
|
if uid == 'UWE2ZJ52SE4FX75U111A':
|
|
if uid == 'UWE2ZJ52SE4FX75U111A':
|
|
logger.info({
|
|
logger.info({
|
|
@@ -491,10 +476,8 @@ class CloudStorageView(View):
|
|
if device_info_qs[0]['vodPrimaryUserID'] != user_id:
|
|
if device_info_qs[0]['vodPrimaryUserID'] != user_id:
|
|
return response.json(10034)
|
|
return response.json(10034)
|
|
now_time = int(time.time())
|
|
now_time = int(time.time())
|
|
- if device_type == 34: # 枪球设备开通云存不区分通道
|
|
|
|
- uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time)
|
|
|
|
- else:
|
|
|
|
- uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time, channel=channel)
|
|
|
|
|
|
+ uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, endTime__gte=now_time, channel=channel).values(
|
|
|
|
+ 'bucket_id').order_by('addTime')
|
|
if not uid_bucket_qs.exists():
|
|
if not uid_bucket_qs.exists():
|
|
return response.json(10030)
|
|
return response.json(10030)
|
|
|
|
|
|
@@ -662,7 +645,7 @@ class CloudStorageView(View):
|
|
res = {'code': 0, 'msg': '存储成功'}
|
|
res = {'code': 0, 'msg': '存储成功'}
|
|
return HttpResponse(json.dumps(res, ensure_ascii=False), content_type='application/json,charset=utf-8')
|
|
return HttpResponse(json.dumps(res, ensure_ascii=False), content_type='application/json,charset=utf-8')
|
|
except Exception as e:
|
|
except Exception as e:
|
|
- return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(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): # 修改云存状态
|
|
@@ -683,23 +666,18 @@ class CloudStorageView(View):
|
|
if not all([uid, status, channel]):
|
|
if not all([uid, status, channel]):
|
|
return response.json(444, 'uid,status,channel')
|
|
return response.json(444, 'uid,status,channel')
|
|
device_info_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid, isShare=False, isExist=1).values(
|
|
device_info_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid, isShare=False, isExist=1).values(
|
|
- 'vodPrimaryUserID', 'Type')
|
|
|
|
|
|
+ 'vodPrimaryUserID')
|
|
if not device_info_qs.exists() or device_info_qs[0]['vodPrimaryUserID'] != user_id:
|
|
if not device_info_qs.exists() or device_info_qs[0]['vodPrimaryUserID'] != user_id:
|
|
return response.json(12)
|
|
return response.json(12)
|
|
- device_type = device_info_qs[0]['Type']
|
|
|
|
- if device_type == 34: # 枪球设备开通云存不区分通道
|
|
|
|
- uid_bucket_qs = UID_Bucket.objects.filter(uid=uid)
|
|
|
|
- else:
|
|
|
|
- uid_bucket_qs = UID_Bucket.objects.filter(channel=channel, uid=uid)
|
|
|
|
|
|
+ uid_bucket_qs = UID_Bucket.objects.filter(channel=channel, uid=uid)
|
|
if not uid_bucket_qs.exists():
|
|
if not uid_bucket_qs.exists():
|
|
return response.json(10030)
|
|
return response.json(10030)
|
|
now_time = int(time.time())
|
|
now_time = int(time.time())
|
|
if now_time > uid_bucket_qs[0].endTime:
|
|
if now_time > uid_bucket_qs[0].endTime:
|
|
return response.json(10031)
|
|
return response.json(10031)
|
|
|
|
+ uid_bucket_qs.update(status=status)
|
|
if status == 0:
|
|
if status == 0:
|
|
- uid_bucket_qs.update(status=status)
|
|
|
|
return response.json(0)
|
|
return response.json(0)
|
|
- uid_bucket_qs.update(status=status, channel=channel)
|
|
|
|
uid_obj = UidTokenObject()
|
|
uid_obj = UidTokenObject()
|
|
uid_obj.generate(data={'uid': uid, 'channel': channel})
|
|
uid_obj.generate(data={'uid': uid, 'channel': channel})
|
|
|
|
|
|
@@ -711,157 +689,6 @@ class CloudStorageView(View):
|
|
store_hls_url = '{}cloudstorage/storeplaylist?uidToken={}'.format(urls, uid_obj.token)
|
|
store_hls_url = '{}cloudstorage/storeplaylist?uidToken={}'.format(urls, uid_obj.token)
|
|
return response.json(0, {'uidTkUrl': uid_tk_url, 'storeHlsUrl': store_hls_url})
|
|
return response.json(0, {'uidTkUrl': uid_tk_url, 'storeHlsUrl': store_hls_url})
|
|
|
|
|
|
- @staticmethod
|
|
|
|
- def do_change_vod_ai_status(request_dict, user_id, response): # 修改云存状态
|
|
|
|
- """
|
|
|
|
- 修改云存状态
|
|
|
|
- @param request_dict: 请求数据
|
|
|
|
- @param user_id: 用户id
|
|
|
|
- @request_dict uid: uid
|
|
|
|
- @request_dict status: 套餐状态
|
|
|
|
- @request_dict channel: 通道
|
|
|
|
- @param response: 响应
|
|
|
|
- @return: response
|
|
|
|
- """
|
|
|
|
- uid = request_dict.get('uid', None)
|
|
|
|
- vod_status = request_dict.get('vod_status', None)
|
|
|
|
- channel = request_dict.get('channel', None)
|
|
|
|
- domain_name = request_dict.get('domain_name', None)
|
|
|
|
- token_val = request_dict.get('token_val', None)
|
|
|
|
- appBundleId = request_dict.get('appBundleId', None)
|
|
|
|
- app_type = request_dict.get('app_type', None)
|
|
|
|
- push_type = request_dict.get('push_type', None)
|
|
|
|
- ai_status = request_dict.get('ai_status', None)
|
|
|
|
- m_code = request_dict.get('m_code', None)
|
|
|
|
- lang = request_dict.get('lang', 'en')
|
|
|
|
- tz = request_dict.get('tz', '0')
|
|
|
|
- detect_group = request_dict.get('detect_group', None)
|
|
|
|
- interval = request_dict.get('interval', None)
|
|
|
|
- if not all([uid, vod_status, channel]):
|
|
|
|
- return response.json(444, 'uid,vod_status,channel')
|
|
|
|
- vod_status = int(vod_status)
|
|
|
|
- device_info_qs = Device_Info.objects.filter(userID_id=user_id, UID=uid, isShare=False, isExist=1).values(
|
|
|
|
- 'vodPrimaryUserID', 'Type')
|
|
|
|
- if not device_info_qs.exists() or device_info_qs[0]['vodPrimaryUserID'] != user_id:
|
|
|
|
- return response.json(12)
|
|
|
|
- device_type = device_info_qs[0]['Type']
|
|
|
|
- uid_set_qs = UidSetModel.objects.filter(uid=uid)
|
|
|
|
- if not uid_set_qs.exists():
|
|
|
|
- return response.json(12)
|
|
|
|
- if device_type == 34: # 枪球设备开通云存不区分通道
|
|
|
|
- uid_bucket_qs = UID_Bucket.objects.filter(uid=uid)
|
|
|
|
- else:
|
|
|
|
- uid_bucket_qs = UID_Bucket.objects.filter(channel=channel, uid=uid)
|
|
|
|
- if not uid_bucket_qs.exists():
|
|
|
|
- return response.json(10030)
|
|
|
|
- now_time = int(time.time())
|
|
|
|
- end_time = uid_bucket_qs[0].endTime
|
|
|
|
- if now_time > end_time:
|
|
|
|
- return response.json(10031)
|
|
|
|
- try:
|
|
|
|
- with transaction.atomic():
|
|
|
|
- if vod_status == 0:
|
|
|
|
- uid_bucket_qs.update(status=vod_status)
|
|
|
|
- ai_status = '0'
|
|
|
|
- if uid_set_qs[0].is_ai == 2:
|
|
|
|
- return response.json(0)
|
|
|
|
- uid_bucket_qs.update(status=vod_status, channel=channel)
|
|
|
|
- uid_obj = UidTokenObject()
|
|
|
|
- uid_obj.generate(data={'uid': uid, 'channel': channel})
|
|
|
|
-
|
|
|
|
- # 欧洲域名固定返回欧洲域名
|
|
|
|
- urls = SERVER_DOMAIN_SSL
|
|
|
|
- if domain_name in ['api.zositeche.com', 'api.loocam3.com', 'common.neutral3.com']:
|
|
|
|
- urls = 'https://api.zositeche.com/'
|
|
|
|
- uid_tk_url = '{}cloudstorage/getsignsts?uidToken={}'.format(urls, uid_obj.token)
|
|
|
|
- store_hls_url = '{}cloudstorage/storeplaylist?uidToken={}'.format(urls, uid_obj.token)
|
|
|
|
- if uid_set_qs[0].is_ai != 2 and CONFIG_INFO != CONFIG_CN:
|
|
|
|
- if not all([appBundleId, app_type, token_val, uid, m_code, ai_status]):
|
|
|
|
- return response.json(444, 'appBundleId, app_type, token_val, uid,m_code, ai_status')
|
|
|
|
-
|
|
|
|
- # 如果传空上来,就默认为0
|
|
|
|
- tz = '0' if tz == '' else tz.replace('GMT', '')
|
|
|
|
- ai_status = int(ai_status)
|
|
|
|
- ai_service_qs = AiService.objects.filter(uid=uid, use_status=1)
|
|
|
|
- if not ai_service_qs.exists():
|
|
|
|
- return response.json(10053)
|
|
|
|
-
|
|
|
|
- uid_set_id = uid_set_qs[0].id
|
|
|
|
- interval = uid_set_qs[0].new_detect_interval if not interval else interval
|
|
|
|
- qs_data = {
|
|
|
|
- 'updTime': now_time,
|
|
|
|
- }
|
|
|
|
- if interval:
|
|
|
|
- qs_data['detect_interval'] = int(interval)
|
|
|
|
- qs_data['detect_group'] = detect_group if detect_group else ''
|
|
|
|
- uid_set_qs.update(**qs_data)
|
|
|
|
-
|
|
|
|
- qs_data['detect_status'] = ai_status # ai开关状态
|
|
|
|
- qs_data['endTime'] = end_time
|
|
|
|
- ai_service_qs.update(**qs_data)
|
|
|
|
- thing_name = CommonService.query_serial_with_uid(uid) # 存在序列号则为使用序列号作为物品名
|
|
|
|
- topic_name = 'ansjer/generic/{}'.format(thing_name)
|
|
|
|
-
|
|
|
|
- if ai_status == 0: # 关闭
|
|
|
|
- # mqtt通知设备关闭AI识别功能
|
|
|
|
- msg = {'commandType': 'AIDisable'}
|
|
|
|
- req_success = CommonService.req_publish_mqtt_msg(thing_name, topic_name, msg)
|
|
|
|
- if not req_success:
|
|
|
|
- return response.json(10044)
|
|
|
|
- if vod_status == 0:
|
|
|
|
- return response.json(0)
|
|
|
|
- return response.json(0, {'uidTkUrl': uid_tk_url, 'storeHlsUrl': store_hls_url})
|
|
|
|
- elif ai_status == 1: # 开启
|
|
|
|
- # 更新或创建uid_push数据
|
|
|
|
- uid_push_qs = UidPushModel.objects.filter(userID_id=user_id, m_code=m_code, uid_set__uid=uid)
|
|
|
|
- uid_push_data = {
|
|
|
|
- 'appBundleId': appBundleId,
|
|
|
|
- 'app_type': app_type,
|
|
|
|
- 'push_type': push_type,
|
|
|
|
- 'token_val': token_val,
|
|
|
|
- 'updTime': now_time,
|
|
|
|
- 'lang': lang,
|
|
|
|
- 'tz': tz
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if uid_push_qs.exists():
|
|
|
|
- uid_push_qs.update(**uid_push_data)
|
|
|
|
- else:
|
|
|
|
- uid_push_data['uid_set_id'] = uid_set_id
|
|
|
|
- uid_push_data['userID_id'] = user_id
|
|
|
|
- uid_push_data['m_code'] = m_code
|
|
|
|
- uid_push_data['addTime'] = now_time
|
|
|
|
- UidPushModel.objects.create(**uid_push_data)
|
|
|
|
- if appBundleId == 0 or appBundleId == '0':
|
|
|
|
- LOGGER.info('cloudstorage/changevodaistatus接口推送数据{}'.format(request_dict))
|
|
|
|
- etkObj = ETkObject(etk='')
|
|
|
|
- etk = etkObj.encrypt(uid)
|
|
|
|
-
|
|
|
|
- # mqtt通知设备开启AI识别功能
|
|
|
|
- push_url = DETECT_PUSH_DOMAINS
|
|
|
|
- # 欧洲域名固定返回欧洲域名
|
|
|
|
- if domain_name in ['api.zositeche.com', 'api.loocam3.com', 'common.neutral3.com']:
|
|
|
|
- push_url = 'https://push.zositeche.com/'
|
|
|
|
- aiIdentificationUrl = '{}AiService/identification'.format(push_url)
|
|
|
|
- msg = {
|
|
|
|
- 'commandType': 'AIEnable',
|
|
|
|
- 'payload': {
|
|
|
|
- 'etk': etk,
|
|
|
|
- 'endTime': end_time,
|
|
|
|
- 'aiIdentificationUrl': aiIdentificationUrl,
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- req_success = CommonService.req_publish_mqtt_msg(thing_name, topic_name, msg)
|
|
|
|
- if not req_success:
|
|
|
|
- return response.json(10044)
|
|
|
|
- return response.json(0, {'uidTkUrl': uid_tk_url, 'storeHlsUrl': store_hls_url,
|
|
|
|
- 'aiIdentificationUrl': aiIdentificationUrl, 'endTime': end_time,
|
|
|
|
- 'etk': etk})
|
|
|
|
-
|
|
|
|
- return response.json(0, {'uidTkUrl': uid_tk_url, 'storeHlsUrl': store_hls_url})
|
|
|
|
- except Exception as e:
|
|
|
|
- return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
-
|
|
|
|
@staticmethod
|
|
@staticmethod
|
|
def do_pay_error():
|
|
def do_pay_error():
|
|
response = HttpResponse()
|
|
response = HttpResponse()
|
|
@@ -928,19 +755,13 @@ class CloudStorageView(View):
|
|
channel = order_list[0]['channel']
|
|
channel = order_list[0]['channel']
|
|
rank = order_list[0]['rank']
|
|
rank = order_list[0]['rank']
|
|
|
|
|
|
- store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire",
|
|
|
|
- 'is_ai', 'icloud_store_meal_id')
|
|
|
|
|
|
+ store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire")
|
|
|
|
+ bucket_id = store_qs[0]['bucket_id']
|
|
if not store_qs.exists():
|
|
if not store_qs.exists():
|
|
return response.json(173)
|
|
return response.json(173)
|
|
- bucket_id = store_qs[0]['bucket_id']
|
|
|
|
- uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
|
|
|
|
|
|
+ uiu_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
|
|
"bucket__region", "endTime", "use_status")
|
|
"bucket__region", "endTime", "use_status")
|
|
expire = store_qs[0]['expire']
|
|
expire = store_qs[0]['expire']
|
|
- # icloud_store_meal_id = store_qs[0]['icloud_store_meal_id']
|
|
|
|
- # icloud_meal_qs = ICloudStoreMeal.objects.filter(id=icloud_store_meal_id).values('size')
|
|
|
|
- # if not icloud_meal_qs.exists():
|
|
|
|
- # return response.json(173)
|
|
|
|
- # size = icloud_meal_qs[0]['size']
|
|
|
|
if order_list[0]['isSelectDiscounts'] == 1:
|
|
if order_list[0]['isSelectDiscounts'] == 1:
|
|
expire = store_qs[0]['expire'] * 2
|
|
expire = store_qs[0]['expire'] * 2
|
|
# 是否有促销
|
|
# 是否有促销
|
|
@@ -950,17 +771,15 @@ class CloudStorageView(View):
|
|
if promotion.exists():
|
|
if promotion.exists():
|
|
promotion_rule_id = promotion[0]['id']
|
|
promotion_rule_id = promotion[0]['id']
|
|
expire = expire * 2
|
|
expire = expire * 2
|
|
- unuse_meal_flag = False # 是否关联未使用套餐
|
|
|
|
with transaction.atomic():
|
|
with transaction.atomic():
|
|
- if uid_bucket_qs.exists():
|
|
|
|
- uid_bucket = uid_bucket_qs.first()
|
|
|
|
|
|
+ if uiu_bucket_qs.exists():
|
|
|
|
+ uid_bucket = uiu_bucket_qs.first()
|
|
if uid_bucket['use_status'] == 1 and uid_bucket['bucket_id'] == bucket_id: # 套餐使用中并且相同套餐叠加过期时间
|
|
if uid_bucket['use_status'] == 1 and uid_bucket['bucket_id'] == bucket_id: # 套餐使用中并且相同套餐叠加过期时间
|
|
end_time = CommonService.calcMonthLater(expire, uid_bucket['endTime'])
|
|
end_time = CommonService.calcMonthLater(expire, uid_bucket['endTime'])
|
|
UID_Bucket.objects.filter(id=uid_bucket['id']).update(uid=uid, channel=channel,
|
|
UID_Bucket.objects.filter(id=uid_bucket['id']).update(uid=uid, channel=channel,
|
|
bucket_id=bucket_id, endTime=end_time,
|
|
bucket_id=bucket_id, endTime=end_time,
|
|
updateTime=now_time)
|
|
updateTime=now_time)
|
|
else: # 已过期或者不相同的套餐加入未使用的关联套餐表
|
|
else: # 已过期或者不相同的套餐加入未使用的关联套餐表
|
|
- unuse_meal_flag = True
|
|
|
|
unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
|
|
unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
|
|
nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
|
|
nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
|
|
if promotion.exists():
|
|
if promotion.exists():
|
|
@@ -995,36 +814,6 @@ class CloudStorageView(View):
|
|
order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
|
|
order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
|
|
promotion_rule_id=promotion_rule_id)
|
|
promotion_rule_id=promotion_rule_id)
|
|
date_time = time.strftime("%Y-%m-%d", time.localtime())
|
|
date_time = time.strftime("%Y-%m-%d", time.localtime())
|
|
- # 开通AI服务
|
|
|
|
- if store_qs[0]['is_ai'] and CONFIG_INFO != CONFIG_CN and not unuse_meal_flag:
|
|
|
|
- ai_service_qs = AiService.objects.filter(uid=uid, channel=channel)
|
|
|
|
- if ai_service_qs.exists(): # 有正在使用的套餐,套餐结束时间保存为套餐有效期
|
|
|
|
- ai_service_qs.update(endTime=end_time, use_status=1, updTime=now_time)
|
|
|
|
- else:
|
|
|
|
- ai_service_dict = {
|
|
|
|
- 'uid': uid,
|
|
|
|
- 'channel': channel,
|
|
|
|
- 'detect_status': 1,
|
|
|
|
- 'addTime': now_time,
|
|
|
|
- 'updTime': now_time,
|
|
|
|
- 'use_status': 1,
|
|
|
|
- 'endTime': end_time
|
|
|
|
- }
|
|
|
|
- AiService.objects.create(**ai_service_dict)
|
|
|
|
- # 开通云盘服务
|
|
|
|
- # icloud_use_qs = IcloudUseDetails.objects.filter(user_id=userid).values('id')
|
|
|
|
- # if not icloud_use_qs.exists():
|
|
|
|
- # bucket_qs = VodBucketModel.objects.filter(bucket='icloud').values('id')
|
|
|
|
- # icloud_use_qs = IcloudUseDetails.objects.create(add_time=now_time, upd_time=now_time,
|
|
|
|
- # detect_status=1, user_id=userid,
|
|
|
|
- # bucket_id=bucket_qs[0]['id'])
|
|
|
|
- # use_details_id = icloud_use_qs.id
|
|
|
|
- # IcloudService.objects.create(add_time=now_time, upd_time=now_time, type=0,
|
|
|
|
- # size=1, use_details_id=use_details_id)
|
|
|
|
- # else:
|
|
|
|
- # use_details_id = icloud_use_qs[0]['id']
|
|
|
|
- # IcloudService.objects.create(order_id=order_id, add_time=now_time, upd_time=now_time, type=1,
|
|
|
|
- # size=size, end_time=end_time, use_details_id=use_details_id)
|
|
|
|
# 如果存在序列号,消息提示用序列号
|
|
# 如果存在序列号,消息提示用序列号
|
|
device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
|
|
device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
|
|
serial_number = device_info_qs[0]['serial_number']
|
|
serial_number = device_info_qs[0]['serial_number']
|
|
@@ -1120,19 +909,14 @@ class CloudStorageView(View):
|
|
uid = order_list[0]['UID']
|
|
uid = order_list[0]['UID']
|
|
channel = order_list[0]['channel']
|
|
channel = order_list[0]['channel']
|
|
rank = order_list[0]['rank']
|
|
rank = order_list[0]['rank']
|
|
- store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire",
|
|
|
|
- 'is_ai', 'icloud_store_meal_id')
|
|
|
|
|
|
+ store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire")
|
|
|
|
+ bucket_id = store_qs[0]['bucket_id']
|
|
if not store_qs.exists():
|
|
if not store_qs.exists():
|
|
return response.json(173)
|
|
return response.json(173)
|
|
- bucket_id = store_qs[0]['bucket_id']
|
|
|
|
uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
|
|
uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
|
|
"bucket__region", "endTime", "use_status")
|
|
"bucket__region", "endTime", "use_status")
|
|
expire = store_qs[0]['expire']
|
|
expire = store_qs[0]['expire']
|
|
- # icloud_store_meal_id = store_qs[0]['icloud_store_meal_id']
|
|
|
|
- # icloud_meal_qs = ICloudStoreMeal.objects.filter(id=icloud_store_meal_id).values('size')
|
|
|
|
- # if not icloud_meal_qs.exists():
|
|
|
|
- # return response.json(173)
|
|
|
|
- # size = icloud_meal_qs[0]['size']
|
|
|
|
|
|
+
|
|
if order_list[0]['isSelectDiscounts'] == 1:
|
|
if order_list[0]['isSelectDiscounts'] == 1:
|
|
expire = store_qs[0]['expire'] * 2
|
|
expire = store_qs[0]['expire'] * 2
|
|
# 是否有促销
|
|
# 是否有促销
|
|
@@ -1142,7 +926,6 @@ class CloudStorageView(View):
|
|
if promotion_rule_qs.exists():
|
|
if promotion_rule_qs.exists():
|
|
promotion_rule_id = promotion_rule_qs[0]['id']
|
|
promotion_rule_id = promotion_rule_qs[0]['id']
|
|
expire = expire * 2
|
|
expire = expire * 2
|
|
- unuse_meal_flag = False # 是否关联未使用套餐
|
|
|
|
with transaction.atomic():
|
|
with transaction.atomic():
|
|
if uid_bucket_qs.exists():
|
|
if uid_bucket_qs.exists():
|
|
uid_bucket = uid_bucket_qs.first()
|
|
uid_bucket = uid_bucket_qs.first()
|
|
@@ -1152,7 +935,6 @@ class CloudStorageView(View):
|
|
endTime=end_time,
|
|
endTime=end_time,
|
|
bucket_id=bucket_id, updateTime=now_time)
|
|
bucket_id=bucket_id, updateTime=now_time)
|
|
else: # 已过期或者不相同的套餐加入未使用的关联套餐表
|
|
else: # 已过期或者不相同的套餐加入未使用的关联套餐表
|
|
- unuse_meal_flag = True
|
|
|
|
unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
|
|
unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
|
|
nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
|
|
nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
|
|
if promotion_rule_qs.exists():
|
|
if promotion_rule_qs.exists():
|
|
@@ -1186,36 +968,6 @@ class CloudStorageView(View):
|
|
order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
|
|
order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
|
|
promotion_rule_id=promotion_rule_id)
|
|
promotion_rule_id=promotion_rule_id)
|
|
date_time = time.strftime("%Y-%m-%d", time.localtime())
|
|
date_time = time.strftime("%Y-%m-%d", time.localtime())
|
|
- # 开通AI服务
|
|
|
|
- if store_qs[0]['is_ai'] and CONFIG_INFO != CONFIG_CN and not unuse_meal_flag:
|
|
|
|
- ai_service_qs = AiService.objects.filter(uid=uid, channel=channel)
|
|
|
|
- if ai_service_qs.exists(): # 有正在使用的套餐,套餐结束时间保存为套餐有效期
|
|
|
|
- ai_service_qs.update(endTime=end_time, use_status=1, updTime=now_time)
|
|
|
|
- else:
|
|
|
|
- ai_service_dict = {
|
|
|
|
- 'uid': uid,
|
|
|
|
- 'channel': channel,
|
|
|
|
- 'detect_status': 1,
|
|
|
|
- 'addTime': now_time,
|
|
|
|
- 'updTime': now_time,
|
|
|
|
- 'use_status': 1,
|
|
|
|
- 'endTime': end_time
|
|
|
|
- }
|
|
|
|
- AiService.objects.create(**ai_service_dict)
|
|
|
|
- # 开通云盘服务
|
|
|
|
- # icloud_use_qs = IcloudUseDetails.objects.filter(user_id=userid).values('id')
|
|
|
|
- # if not icloud_use_qs.exists():
|
|
|
|
- # bucket_qs = VodBucketModel.objects.filter(bucket='icloud').values('id')
|
|
|
|
- # icloud_use_qs = IcloudUseDetails.objects.create(add_time=now_time, upd_time=now_time,
|
|
|
|
- # detect_status=1, user_id=userid,
|
|
|
|
- # bucket_id=bucket_qs[0]['id'])
|
|
|
|
- # use_details_id = icloud_use_qs.id
|
|
|
|
- # IcloudService.objects.create(add_time=now_time, upd_time=now_time, type=0,
|
|
|
|
- # size=1, use_details_id=use_details_id)
|
|
|
|
- # else:
|
|
|
|
- # use_details_id = icloud_use_qs[0]['id']
|
|
|
|
- # IcloudService.objects.create(order_id=order_id, add_time=now_time, upd_time=now_time, type=1,
|
|
|
|
- # size=size, end_time=end_time, use_details_id=use_details_id)
|
|
|
|
# 如果存在序列号,消息提示用序列号
|
|
# 如果存在序列号,消息提示用序列号
|
|
device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
|
|
device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
|
|
serial_number = device_info_qs[0]['serial_number']
|
|
serial_number = device_info_qs[0]['serial_number']
|
|
@@ -1293,19 +1045,13 @@ class CloudStorageView(View):
|
|
uid = order_list[0]['UID']
|
|
uid = order_list[0]['UID']
|
|
channel = order_list[0]['channel']
|
|
channel = order_list[0]['channel']
|
|
rank = order_list[0]['rank']
|
|
rank = order_list[0]['rank']
|
|
- store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire",
|
|
|
|
- 'is_ai', 'icloud_store_meal_id')
|
|
|
|
|
|
+ store_qs = Store_Meal.objects.filter(id=rank).values("day", "bucket_id", "bucket__storeDay", "expire")
|
|
|
|
+ bucket_id = store_qs[0]['bucket_id']
|
|
if not store_qs.exists():
|
|
if not store_qs.exists():
|
|
return HttpResponse(pay.xml_to_dict({'return_code': 'FAIL', 'return_msg': '套餐不存在'}))
|
|
return HttpResponse(pay.xml_to_dict({'return_code': 'FAIL', 'return_msg': '套餐不存在'}))
|
|
- bucket_id = store_qs[0]['bucket_id']
|
|
|
|
uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
|
|
uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
|
|
"bucket__region", "endTime", "use_status")
|
|
"bucket__region", "endTime", "use_status")
|
|
expire = store_qs[0]['expire']
|
|
expire = store_qs[0]['expire']
|
|
- # icloud_store_meal_id = store_qs[0]['icloud_store_meal_id']
|
|
|
|
- # icloud_meal_qs = ICloudStoreMeal.objects.filter(id=icloud_store_meal_id).values('size')
|
|
|
|
- # if not icloud_meal_qs.exists():
|
|
|
|
- # return response.json(173)
|
|
|
|
- # size = icloud_meal_qs[0]['size']
|
|
|
|
if order_list[0]['isSelectDiscounts'] == 1:
|
|
if order_list[0]['isSelectDiscounts'] == 1:
|
|
expire = store_qs[0]['expire'] * 2
|
|
expire = store_qs[0]['expire'] * 2
|
|
# 是否有促销
|
|
# 是否有促销
|
|
@@ -1315,7 +1061,6 @@ class CloudStorageView(View):
|
|
if promotion_rule_qs.exists():
|
|
if promotion_rule_qs.exists():
|
|
promotion_rule_id = promotion_rule_qs[0]['id']
|
|
promotion_rule_id = promotion_rule_qs[0]['id']
|
|
expire = expire * 2
|
|
expire = expire * 2
|
|
- unuse_meal_flag = False # 是否关联未使用套餐
|
|
|
|
with transaction.atomic():
|
|
with transaction.atomic():
|
|
if uid_bucket_qs.exists():
|
|
if uid_bucket_qs.exists():
|
|
uid_bucket = uid_bucket_qs.first()
|
|
uid_bucket = uid_bucket_qs.first()
|
|
@@ -1325,7 +1070,6 @@ class CloudStorageView(View):
|
|
bucket_id=bucket_id,
|
|
bucket_id=bucket_id,
|
|
endTime=end_time, updateTime=now_time)
|
|
endTime=end_time, updateTime=now_time)
|
|
else: # 已过期或者不相同的套餐加入未使用的关联套餐表
|
|
else: # 已过期或者不相同的套餐加入未使用的关联套餐表
|
|
- unuse_meal_flag = True
|
|
|
|
unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
|
|
unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
|
|
nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
|
|
nums = 2 if order_list[0]['isSelectDiscounts'] == 1 else 1
|
|
if promotion_rule_qs.exists():
|
|
if promotion_rule_qs.exists():
|
|
@@ -1360,36 +1104,6 @@ class CloudStorageView(View):
|
|
order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
|
|
order_qs.update(status=1, updTime=now_time, uid_bucket_id=uid_bucket_id,
|
|
promotion_rule_id=promotion_rule_id)
|
|
promotion_rule_id=promotion_rule_id)
|
|
date_time = time.strftime("%Y-%m-%d", time.localtime())
|
|
date_time = time.strftime("%Y-%m-%d", time.localtime())
|
|
- # 开通AI服务
|
|
|
|
- if store_qs[0]['is_ai'] and CONFIG_INFO != CONFIG_CN and not unuse_meal_flag:
|
|
|
|
- ai_service_qs = AiService.objects.filter(uid=uid, channel=channel)
|
|
|
|
- if ai_service_qs.exists(): # 有正在使用的套餐,套餐结束时间保存为套餐有效期
|
|
|
|
- ai_service_qs.update(endTime=end_time, use_status=1, updTime=now_time)
|
|
|
|
- else:
|
|
|
|
- ai_service_dict = {
|
|
|
|
- 'uid': uid,
|
|
|
|
- 'channel': channel,
|
|
|
|
- 'detect_status': 1,
|
|
|
|
- 'addTime': now_time,
|
|
|
|
- 'updTime': now_time,
|
|
|
|
- 'use_status': 1,
|
|
|
|
- 'endTime': end_time
|
|
|
|
- }
|
|
|
|
- AiService.objects.create(**ai_service_dict)
|
|
|
|
- # 开通云盘服务
|
|
|
|
- # icloud_use_qs = IcloudUseDetails.objects.filter(user_id=userid).values('id')
|
|
|
|
- # if not icloud_use_qs.exists():
|
|
|
|
- # bucket_qs = VodBucketModel.objects.filter(bucket='icloud').values('id')
|
|
|
|
- # icloud_use_qs = IcloudUseDetails.objects.create(add_time=now_time, upd_time=now_time,
|
|
|
|
- # detect_status=1, user_id=userid,
|
|
|
|
- # bucket_id=bucket_qs[0]['id'])
|
|
|
|
- # use_details_id = icloud_use_qs.id
|
|
|
|
- # IcloudService.objects.create(add_time=now_time, upd_time=now_time, type=0,
|
|
|
|
- # size=1, use_details_id=use_details_id)
|
|
|
|
- # else:
|
|
|
|
- # use_details_id = icloud_use_qs[0]['id']
|
|
|
|
- # IcloudService.objects.create(order_id=order_id, add_time=now_time, upd_time=now_time, type=1,
|
|
|
|
- # size=size, end_time=end_time, use_details_id=use_details_id)
|
|
|
|
# 如果存在序列号,消息提示用序列号
|
|
# 如果存在序列号,消息提示用序列号
|
|
device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
|
|
device_info_qs = Device_Info.objects.filter(UID=uid).values('serial_number', 'Type')
|
|
serial_number = device_info_qs[0]['serial_number']
|
|
serial_number = device_info_qs[0]['serial_number']
|
|
@@ -1462,7 +1176,7 @@ class CloudStorageView(View):
|
|
now_time = int(time.time())
|
|
now_time = int(time.time())
|
|
store_qs = Store_Meal.objects.filter(id=rank, pay_type=pay_type, lang__lang=lang, is_show=0). \
|
|
store_qs = Store_Meal.objects.filter(id=rank, pay_type=pay_type, lang__lang=lang, is_show=0). \
|
|
values('currency', 'price', 'lang__content', 'day', 'commodity_type', 'lang__title', 'expire',
|
|
values('currency', 'price', 'lang__content', 'day', 'commodity_type', 'lang__title', 'expire',
|
|
- 'commodity_code', 'discount_price', 'bucket__mold', 'cycle_config_id', 'is_ai')
|
|
|
|
|
|
+ 'commodity_code', 'discount_price', 'bucket__mold', 'cycle_config_id')
|
|
if not store_qs.exists():
|
|
if not store_qs.exists():
|
|
return response.json(173)
|
|
return response.json(173)
|
|
store_meal_qs = Store_Meal.objects.filter(id=rank, lang__lang='cn', is_show=0).values('lang__title',
|
|
store_meal_qs = Store_Meal.objects.filter(id=rank, lang__lang='cn', is_show=0).values('lang__title',
|
|
@@ -1515,17 +1229,14 @@ class CloudStorageView(View):
|
|
sub_info = Paypal.subscriptions(store_info=store_qs[0], lang=lang, orderID=order_id, price=price)
|
|
sub_info = Paypal.subscriptions(store_info=store_qs[0], lang=lang, orderID=order_id, price=price)
|
|
if not sub_info:
|
|
if not sub_info:
|
|
return response.json(10048)
|
|
return response.json(10048)
|
|
- order_qs = Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
|
|
|
|
- desc=content, payType=pay_type, payTime=now_time,
|
|
|
|
- price=price, currency=currency, addTime=now_time,
|
|
|
|
- updTime=now_time,
|
|
|
|
- pay_url=sub_info['url'], isSelectDiscounts=is_select_discount,
|
|
|
|
- commodity_code=commodity_code, commodity_type=commodity_type,
|
|
|
|
- rank_id=rank, plan_id=sub_info['plan_id'], coupon_id=coupon_id,
|
|
|
|
- ai_rank_id=1,
|
|
|
|
- store_meal_name=store_meal_name)
|
|
|
|
- if store_qs[0]['is_ai'] == 1:
|
|
|
|
- order_qs.order_type = 1
|
|
|
|
|
|
+ Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
|
|
|
|
+ desc=content, payType=pay_type, payTime=now_time,
|
|
|
|
+ price=price, currency=currency, addTime=now_time, updTime=now_time,
|
|
|
|
+ pay_url=sub_info['url'], isSelectDiscounts=is_select_discount,
|
|
|
|
+ commodity_code=commodity_code, commodity_type=commodity_type,
|
|
|
|
+ rank_id=rank, plan_id=sub_info['plan_id'], coupon_id=coupon_id, ai_rank_id=1,
|
|
|
|
+ store_meal_name=store_meal_name)
|
|
|
|
+
|
|
return response.json(0, {"redirectUrl": sub_info['url'], "orderID": order_id})
|
|
return response.json(0, {"redirectUrl": sub_info['url'], "orderID": order_id})
|
|
# 正常扣款
|
|
# 正常扣款
|
|
call_clc_url = "{}web/paid2/fail.html".format(SERVER_DOMAIN_SSL)
|
|
call_clc_url = "{}web/paid2/fail.html".format(SERVER_DOMAIN_SSL)
|
|
@@ -1552,17 +1263,13 @@ class CloudStorageView(View):
|
|
for link in payment.links:
|
|
for link in payment.links:
|
|
if link.rel == "approval_url":
|
|
if link.rel == "approval_url":
|
|
approval_url = str(link.href)
|
|
approval_url = str(link.href)
|
|
- order_qs = Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
|
|
|
|
- desc=content, payType=pay_type, payTime=now_time,
|
|
|
|
- price=price, currency=currency, addTime=now_time,
|
|
|
|
- updTime=now_time,
|
|
|
|
- pay_url=approval_url, isSelectDiscounts=is_select_discount,
|
|
|
|
- commodity_code=commodity_code, commodity_type=commodity_type,
|
|
|
|
- rank_id=rank, paymentID=payment_id, coupon_id=coupon_id,
|
|
|
|
- ai_rank_id=1,
|
|
|
|
- store_meal_name=store_meal_name)
|
|
|
|
- if store_qs[0]['is_ai'] == 1:
|
|
|
|
- order_qs.order_type = 1
|
|
|
|
|
|
+ Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
|
|
|
|
+ desc=content, payType=pay_type, payTime=now_time,
|
|
|
|
+ price=price, currency=currency, addTime=now_time, updTime=now_time,
|
|
|
|
+ pay_url=approval_url, isSelectDiscounts=is_select_discount,
|
|
|
|
+ commodity_code=commodity_code, commodity_type=commodity_type,
|
|
|
|
+ rank_id=rank, paymentID=payment_id, coupon_id=coupon_id, ai_rank_id=1,
|
|
|
|
+ store_meal_name=store_meal_name)
|
|
return response.json(0, {"redirectUrl": approval_url, "orderID": order_id})
|
|
return response.json(0, {"redirectUrl": approval_url, "orderID": order_id})
|
|
return response.json(10, 'generate_order_false')
|
|
return response.json(10, 'generate_order_false')
|
|
elif pay_type == 2:
|
|
elif pay_type == 2:
|
|
@@ -1586,16 +1293,14 @@ class CloudStorageView(View):
|
|
else:
|
|
else:
|
|
if order_string:
|
|
if order_string:
|
|
redirect_url = ali_pay_obj.alipay_prefix + order_string
|
|
redirect_url = ali_pay_obj.alipay_prefix + order_string
|
|
- order_qs = Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
|
|
|
|
- desc=content, payType=pay_type, payTime=now_time,
|
|
|
|
- price=price, currency=currency, addTime=now_time,
|
|
|
|
- updTime=now_time,
|
|
|
|
- pay_url=redirect_url, isSelectDiscounts=is_select_discount,
|
|
|
|
- commodity_code=commodity_code, commodity_type=commodity_type,
|
|
|
|
- rank_id=rank, coupon_id=coupon_id, ai_rank_id=1,
|
|
|
|
- store_meal_name=store_meal_name)
|
|
|
|
- if store_qs[0]['is_ai'] == 1:
|
|
|
|
- order_qs.order_type = 1
|
|
|
|
|
|
+ Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
|
|
|
|
+ desc=content, payType=pay_type, payTime=now_time,
|
|
|
|
+ price=price, currency=currency, addTime=now_time, updTime=now_time,
|
|
|
|
+ pay_url=redirect_url, isSelectDiscounts=is_select_discount,
|
|
|
|
+ commodity_code=commodity_code, commodity_type=commodity_type,
|
|
|
|
+ rank_id=rank, coupon_id=coupon_id, ai_rank_id=1,
|
|
|
|
+ store_meal_name=store_meal_name)
|
|
|
|
+
|
|
return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
|
|
return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
|
|
'result': {"redirectUrl": redirect_url, "orderID": order_id},
|
|
'result': {"redirectUrl": redirect_url, "orderID": order_id},
|
|
'error_code': 0})
|
|
'error_code': 0})
|
|
@@ -1616,15 +1321,12 @@ class CloudStorageView(View):
|
|
if not response:
|
|
if not response:
|
|
return response.json(10, '生成订单错误.')
|
|
return response.json(10, '生成订单错误.')
|
|
# 回调函数
|
|
# 回调函数
|
|
- order_qs = Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
|
|
|
|
- desc=content, payType=pay_type, payTime=now_time,
|
|
|
|
- price=price, currency=currency, addTime=now_time, updTime=now_time,
|
|
|
|
- pay_url=notify_url, isSelectDiscounts=is_select_discount,
|
|
|
|
- commodity_code=commodity_code, commodity_type=commodity_type,
|
|
|
|
- rank_id=rank,
|
|
|
|
- ai_rank_id=1, store_meal_name=store_meal_name)
|
|
|
|
- if store_qs[0]['is_ai'] == 1:
|
|
|
|
- order_qs.order_type = 1
|
|
|
|
|
|
+ Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
|
|
|
|
+ desc=content, payType=pay_type, payTime=now_time,
|
|
|
|
+ price=price, currency=currency, addTime=now_time, updTime=now_time,
|
|
|
|
+ pay_url=notify_url, isSelectDiscounts=is_select_discount,
|
|
|
|
+ commodity_code=commodity_code, commodity_type=commodity_type, rank_id=rank,
|
|
|
|
+ ai_rank_id=1, store_meal_name=store_meal_name)
|
|
return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
|
|
return JsonResponse(status=200, data={'result_code': 0, 'reason': 'success',
|
|
'result': response,
|
|
'result': response,
|
|
'orderId': order_id,
|
|
'orderId': order_id,
|
|
@@ -1697,24 +1399,16 @@ class CloudStorageView(View):
|
|
return response.json(10064)
|
|
return response.json(10064)
|
|
order_id = CommonService.createOrderID()
|
|
order_id = CommonService.createOrderID()
|
|
now_time = int(time.time())
|
|
now_time = int(time.time())
|
|
- order_type = 0
|
|
|
|
- store_qs = Store_Meal.objects.filter(id=rank, lang__lang=lang, is_show=0).values("day", "bucket_id", 'is_ai',
|
|
|
|
|
|
+ store_qs = Store_Meal.objects.filter(id=rank, lang__lang=lang, is_show=0).values("day", "bucket_id",
|
|
"bucket__storeDay", "expire",
|
|
"bucket__storeDay", "expire",
|
|
'lang__content', 'price',
|
|
'lang__content', 'price',
|
|
- 'currency', 'commodity_type',
|
|
|
|
- 'icloud_store_meal_id')
|
|
|
|
|
|
+ 'currency', 'commodity_type')
|
|
if not store_qs.exists():
|
|
if not store_qs.exists():
|
|
return response.json(173)
|
|
return response.json(173)
|
|
bucket_id = store_qs[0]['bucket_id']
|
|
bucket_id = store_qs[0]['bucket_id']
|
|
uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
|
|
uid_bucket_qs = UID_Bucket.objects.filter(uid=uid).values("id", "bucket_id", "bucket__storeDay",
|
|
"bucket__region", "endTime", "use_status")
|
|
"bucket__region", "endTime", "use_status")
|
|
expire = store_qs[0]['expire']
|
|
expire = store_qs[0]['expire']
|
|
- unuse_meal_flag = False # 是否关联未使用套餐
|
|
|
|
- # icloud_store_meal_id = store_qs[0]['icloud_store_meal_id']
|
|
|
|
- # icloud_meal_qs = ICloudStoreMeal.objects.filter(id=icloud_store_meal_id).values('size')
|
|
|
|
- # if not icloud_meal_qs.exists():
|
|
|
|
- # return response.json(173)
|
|
|
|
- # size = icloud_meal_qs[0]['size']
|
|
|
|
try:
|
|
try:
|
|
with transaction.atomic():
|
|
with transaction.atomic():
|
|
if uid_bucket_qs.exists():
|
|
if uid_bucket_qs.exists():
|
|
@@ -1725,7 +1419,6 @@ class CloudStorageView(View):
|
|
bucket_id=bucket_id,
|
|
bucket_id=bucket_id,
|
|
endTime=end_time, updateTime=now_time)
|
|
endTime=end_time, updateTime=now_time)
|
|
else: # 已过期或者不相同的套餐加入未使用的关联套餐表
|
|
else: # 已过期或者不相同的套餐加入未使用的关联套餐表
|
|
- unuse_meal_flag = True
|
|
|
|
unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
|
|
unused_uid_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=bucket_id)
|
|
nums = 1
|
|
nums = 1
|
|
if unused_uid_qs.exists():
|
|
if unused_uid_qs.exists():
|
|
@@ -1741,30 +1434,6 @@ class CloudStorageView(View):
|
|
endTime=end_time, addTime=now_time, updateTime=now_time,
|
|
endTime=end_time, addTime=now_time, updateTime=now_time,
|
|
use_status=1)
|
|
use_status=1)
|
|
uid_bucket_id = uid_bucket.id
|
|
uid_bucket_id = uid_bucket.id
|
|
- # 开通AI体验
|
|
|
|
- if store_qs[0]['is_ai'] and CONFIG_INFO != CONFIG_CN and not unuse_meal_flag:
|
|
|
|
- order_type = 1
|
|
|
|
- ai_service_qs = AiService.objects.filter(uid=uid, channel=channel)
|
|
|
|
- if ai_service_qs.exists():
|
|
|
|
- ai_service_qs.update(endTime=end_time, use_status=1, updTime=now_time)
|
|
|
|
- else:
|
|
|
|
- AiService.objects.create(uid=uid, channel=channel, detect_status=1, endTime=end_time,
|
|
|
|
- addTime=now_time, updTime=now_time, use_status=1)
|
|
|
|
- # 开通云盘体验
|
|
|
|
- # icloud_use_qs = IcloudUseDetails.objects.filter(user_id=user_id).values('id')
|
|
|
|
- # if not icloud_use_qs.exists():
|
|
|
|
- # bucket_qs = VodBucketModel.objects.filter(bucket='icloud').values('id')
|
|
|
|
- # icloud_use_qs = IcloudUseDetails.objects.create(add_time=now_time, upd_time=now_time,
|
|
|
|
- # detect_status=1, user_id=user_id,
|
|
|
|
- # bucket_id=bucket_qs[0]['id'])
|
|
|
|
- # use_details_id = icloud_use_qs.id
|
|
|
|
- # IcloudService.objects.create(add_time=now_time, upd_time=now_time, type=0,
|
|
|
|
- # size=1, use_details_id=use_details_id)
|
|
|
|
- # else:
|
|
|
|
- # use_details_id = icloud_use_qs[0]['id']
|
|
|
|
- # IcloudService.objects.create(order_id=order_id, add_time=now_time, upd_time=now_time, type=1,
|
|
|
|
- # size=size, end_time=end_time, use_details_id=use_details_id)
|
|
|
|
-
|
|
|
|
store_meal_qs = Store_Meal.objects.filter(id=rank, lang__lang='cn', is_show=0).values('lang__title',
|
|
store_meal_qs = Store_Meal.objects.filter(id=rank, lang__lang='cn', is_show=0).values('lang__title',
|
|
'lang__content')
|
|
'lang__content')
|
|
if store_meal_qs.exists():
|
|
if store_meal_qs.exists():
|
|
@@ -1774,7 +1443,7 @@ class CloudStorageView(View):
|
|
Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
|
|
Order_Model.objects.create(orderID=order_id, UID=uid, channel=channel, userID_id=user_id,
|
|
desc=store_qs[0]['lang__content'], payType=pay_type, payTime=now_time,
|
|
desc=store_qs[0]['lang__content'], payType=pay_type, payTime=now_time,
|
|
price=store_qs[0]['price'], currency=store_qs[0]['currency'],
|
|
price=store_qs[0]['price'], currency=store_qs[0]['currency'],
|
|
- addTime=now_time, order_type=order_type,
|
|
|
|
|
|
+ addTime=now_time,
|
|
updTime=now_time,
|
|
updTime=now_time,
|
|
pay_url="体验版", store_meal_name=store_meal_name,
|
|
pay_url="体验版", store_meal_name=store_meal_name,
|
|
commodity_code=commodity_code, commodity_type=store_qs[0]['commodity_type'],
|
|
commodity_code=commodity_code, commodity_type=store_qs[0]['commodity_type'],
|
|
@@ -1857,7 +1526,6 @@ class CloudStorageView(View):
|
|
experience_context_qs.delete()
|
|
experience_context_qs.delete()
|
|
Order_Model.objects.filter(uid_bucket_id=bucket_id).delete()
|
|
Order_Model.objects.filter(uid_bucket_id=bucket_id).delete()
|
|
uid_bucket_qs.delete()
|
|
uid_bucket_qs.delete()
|
|
- AiService.objects.filter(uid=uid_bucket_qs[0].uid).delete()
|
|
|
|
else:
|
|
else:
|
|
return response.json(10007)
|
|
return response.json(10007)
|
|
else:
|
|
else:
|
|
@@ -2018,9 +1686,6 @@ class CloudStorageView(View):
|
|
Unused_Uid_Meal.objects.filter(id=unused_id).delete()
|
|
Unused_Uid_Meal.objects.filter(id=unused_id).delete()
|
|
StsCrdModel.objects.filter(uid=uid).delete() # 删除sts记录
|
|
StsCrdModel.objects.filter(uid=uid).delete() # 删除sts记录
|
|
# VodHlsModel.objects.filter(uid=uid).delete() # 删除播放列表,后期数据量多时应该考虑延后删除
|
|
# VodHlsModel.objects.filter(uid=uid).delete() # 删除播放列表,后期数据量多时应该考虑延后删除
|
|
- AiService.objects.filter(uid=uid, channel=unused_uid_bucket['channel']).update(endTime=end_time,
|
|
|
|
- updTime=now_time,
|
|
|
|
- use_status=1)
|
|
|
|
return response.json(0)
|
|
return response.json(0)
|
|
except Exception:
|
|
except Exception:
|
|
return response.json(474)
|
|
return response.json(474)
|
|
@@ -2101,7 +1766,7 @@ class CloudStorageView(View):
|
|
return response.json(0)
|
|
return response.json(0)
|
|
except Exception as e:
|
|
except Exception as e:
|
|
print(e)
|
|
print(e)
|
|
- return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
+ return response.json(500, repr(e))
|
|
|
|
|
|
def do_vod_msg_notice(self, uid, channel, user_id, lang, sys_msg_text_list, sms): # 云存操作系统消息
|
|
def do_vod_msg_notice(self, uid, channel, user_id, lang, sys_msg_text_list, sms): # 云存操作系统消息
|
|
"""
|
|
"""
|
|
@@ -2339,4 +2004,4 @@ class CloudStorageView(View):
|
|
except Exception as e:
|
|
except Exception as e:
|
|
logger = logging.getLogger('info')
|
|
logger = logging.getLogger('info')
|
|
logger.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
logger.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
- return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
+ return response.json(500, repr(e))
|