|
@@ -12,11 +12,12 @@ from django.utils.encoding import escape_uri_path
|
|
|
from django.http import HttpResponse, StreamingHttpResponse
|
|
|
from django.views.generic.base import View
|
|
|
from Model.models import VodBucketModel, CDKcontextModel, Store_Meal, Order_Model, \
|
|
|
- UID_Bucket, ExperienceContextModel, Lang, CloudLogModel, UidSetModel, Unused_Uid_Meal
|
|
|
+ UID_Bucket, ExperienceContextModel, Lang, CloudLogModel, UidSetModel, Unused_Uid_Meal, \
|
|
|
+ Device_Info, VodHlsModel
|
|
|
from Object.ResponseObject import ResponseObject
|
|
|
from Object.TokenObject import TokenObject
|
|
|
from Service.CommonService import CommonService
|
|
|
-from django.db.models import F, Sum, Count, Q
|
|
|
+from django.db.models import F, Sum, Count
|
|
|
|
|
|
|
|
|
class serveManagement(View):
|
|
@@ -80,7 +81,7 @@ class serveManagement(View):
|
|
|
return self.getDeviceOrderList(request_dict, response)
|
|
|
elif operation == 'deleteDeviceOrder':
|
|
|
return self.deleteDeviceOrder(userID, request_dict, response)
|
|
|
- elif operation == 'getDevicePackageList':
|
|
|
+ elif operation == 'getDevicePackageList': # 云存设备套餐
|
|
|
return self.getDevicePackageList(request_dict, response)
|
|
|
elif operation == 'deleteDevicePackage':
|
|
|
return self.deleteDevicePackage(userID, request_dict, response)
|
|
@@ -88,6 +89,8 @@ class serveManagement(View):
|
|
|
return self.do_experience_reset(request_dict, userID, response)
|
|
|
elif operation == 'getCloudUserList': # 获取云存用户信息
|
|
|
return self.getCloudUserList(request_dict, response)
|
|
|
+ elif operation == 'deviceAttritionAlert': # 流失预警
|
|
|
+ return self.deviceAttritionAlert(request_dict, response)
|
|
|
else:
|
|
|
return response.json(404)
|
|
|
|
|
@@ -857,7 +860,8 @@ class serveManagement(View):
|
|
|
else:
|
|
|
return response.json(0, '重置云存体验失败')
|
|
|
|
|
|
- def getCloudUserList(self, request_dict, response):
|
|
|
+ @classmethod
|
|
|
+ def getCloudUserList(cls, request_dict, response):
|
|
|
print('request_dict: ', request_dict)
|
|
|
|
|
|
# UID_Bucket表查询数据
|
|
@@ -989,6 +993,17 @@ class serveManagement(View):
|
|
|
endTime = time.strftime("%Y--%m--%d %H:%M:%S", time.localtime(endTime))
|
|
|
else:
|
|
|
endTime = time.strftime("%Y--%m--%d %H:%M:%S", time.localtime(uid_bucket.endTime))
|
|
|
+ nowTime = int(time.time())
|
|
|
+ Time = time.strptime(endTime, "%Y--%m--%d %H:%M:%S")
|
|
|
+ Time = time.mktime(Time)
|
|
|
+ nowTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(nowTime))
|
|
|
+ if nowTime < endTime:
|
|
|
+ Time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(Time))
|
|
|
+ nowTime = datetime.datetime.strptime(nowTime, '%Y-%m-%d %H:%M:%S')
|
|
|
+ Time = datetime.datetime.strptime(Time, '%Y-%m-%d %H:%M:%S')
|
|
|
+ expirationDate = (Time - nowTime).days
|
|
|
+ else:
|
|
|
+ expirationDate = 0
|
|
|
|
|
|
uid = uid_bucket.uid.upper()
|
|
|
data = {
|
|
@@ -997,6 +1012,7 @@ class serveManagement(View):
|
|
|
'channel': uid_bucket.channel,
|
|
|
'status': uid_bucket.status,
|
|
|
'endTime': endTime,
|
|
|
+ 'ExpirationDate': expirationDate,
|
|
|
'addTime': time.strftime("%Y--%m--%d %H:%M:%S", time.localtime(uid_bucket.addTime)),
|
|
|
'use_status': uid_bucket.use_status,
|
|
|
'has_unused': uid_bucket.has_unused,
|
|
@@ -1292,3 +1308,85 @@ class serveManagement(View):
|
|
|
except Exception as e:
|
|
|
print(e)
|
|
|
return response.json(500, repr(e))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def deviceAttritionAlert(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 流失预警界面
|
|
|
+ @param request_dict:
|
|
|
+ @param response:
|
|
|
+ """
|
|
|
+ pageNo = request_dict.get('pageNo', None)
|
|
|
+ pageSize = request_dict.get('pageSize', None)
|
|
|
+ use_status = request_dict.get('use_status', None)
|
|
|
+ if not all([pageNo, pageSize]):
|
|
|
+ return response.json(444)
|
|
|
+ page = int(pageNo)
|
|
|
+ line = int(pageSize)
|
|
|
+ nowTime = int(time.time())
|
|
|
+ test_list = []
|
|
|
+ r = 0
|
|
|
+ uid_buncket_qs = UID_Bucket.objects.filter(status=0).values('use_status', 'uid', 'endTime', 'addTime',
|
|
|
+ 'use_status').annotate(count=Count('uid'))
|
|
|
+ if use_status:
|
|
|
+ uid_buncket_qs = uid_buncket_qs.filter(use_status=use_status)
|
|
|
+ uid_buncket_qs = uid_buncket_qs[(page - 1) * line:page * line]
|
|
|
+ try:
|
|
|
+ for uid_buncket in uid_buncket_qs:
|
|
|
+ data = {
|
|
|
+ 'uid': uid_buncket['uid'],
|
|
|
+ 'endTime': uid_buncket['endTime'],
|
|
|
+ 'addTime': uid_buncket['addTime'],
|
|
|
+ 'status': uid_buncket['use_status'],
|
|
|
+ }
|
|
|
+ day = 0
|
|
|
+ device_info = Device_Info.objects.filter(UID=uid_buncket['uid']).values('userID__username')
|
|
|
+ data['username'] = device_info[0]['userID__username'] if device_info.exists() else ''
|
|
|
+ start_time = uid_buncket['addTime']
|
|
|
+ start_time = datetime.datetime.fromtimestamp(int(start_time))
|
|
|
+ r += 1
|
|
|
+ if r > 1:
|
|
|
+ nowTime = str(nowTime)
|
|
|
+ time_tuple = time.strptime(nowTime, ('%Y-%m-%d %H:%M:%S'))
|
|
|
+ nowTime = time.mktime(time_tuple) # 把格式化好的时间转换成时间戳
|
|
|
+ nowTime = datetime.datetime.fromtimestamp(int(nowTime))
|
|
|
+ time_list = CommonService.cutting_time(start_time, nowTime, 'day')
|
|
|
+ vod_hls_qs = VodHlsModel.objects.filter(uid=uid_buncket['uid']).values('uid')
|
|
|
+ # 获取自云存开通起没有上传数据天数
|
|
|
+ for date in time_list:
|
|
|
+ vod_hls_qs = vod_hls_qs.filter(time__gte=date[0], time__lt=date[1])
|
|
|
+ if not vod_hls_qs.exists():
|
|
|
+ day += 1
|
|
|
+ if day > 25:
|
|
|
+ break
|
|
|
+ data['day'] = day
|
|
|
+ use_status = uid_buncket['use_status']
|
|
|
+ if use_status == 1:
|
|
|
+ vod_hls_qs = VodHlsModel.objects.filter(uid=uid_buncket['uid']).values('uid')
|
|
|
+ if 15<day<25:
|
|
|
+ if vod_hls_qs.exists():
|
|
|
+ data['level'] = '取消预警'
|
|
|
+ else:
|
|
|
+ data['level'] = '1号预警'
|
|
|
+ else:
|
|
|
+ data['level'] = '无预警'
|
|
|
+ if day >25:
|
|
|
+ if vod_hls_qs.exists():
|
|
|
+ data['level'] = '取消预警'
|
|
|
+ else:
|
|
|
+ startTime = uid_buncket['addTime'] # 开始时间
|
|
|
+ nowTime = str(nowTime)
|
|
|
+ time_tuple = time.strptime(nowTime, ('%Y-%m-%d %H:%M:%S'))
|
|
|
+ nowTime = time.mktime(time_tuple) # 把格式化好的时间转换成时间戳
|
|
|
+ startTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(startTime)) # 开始时间
|
|
|
+ nowTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(nowTime)) # 结束时间
|
|
|
+ startTime = datetime.datetime.strptime(startTime, '%Y-%m-%d %H:%M:%S') # 开始时间
|
|
|
+ nowTime = datetime.datetime.strptime(nowTime, '%Y-%m-%d %H:%M:%S') # 结束时间
|
|
|
+ data['day'] = (nowTime - startTime).days
|
|
|
+ data['level'] = '2号预警'
|
|
|
+ else:
|
|
|
+ data['level'] = '过期'
|
|
|
+ test_list.append(data)
|
|
|
+ return response.json(0, {'test_list': test_list})
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500)
|