# -*- coding: utf-8 -*- """ @Time : 2020/12/16 8:44 @Auth : Locky @File :CloudTest.py @IDE :PyCharm """ import time from django.db import transaction from django.db.models import Q from django.views.generic.base import View from Model.models import Device_User, Device_Info, Order_Model, UID_Bucket, StsCrdModel, VodHlsModel from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject class cloudTestView(View): def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.GET, request, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.POST, request, operation) def validation(self, request_dict, request, operation): response = ResponseObject() if operation is None: return response.json(444, 'error path') else: token = request_dict.get('token', None) # 设备主键uid tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID if operation == 'deviceTransfer': return self.deviceTransfer(request_dict, response) elif operation == 'mealTransfer': return self.mealTransfer(request_dict, response, userID) elif operation == 'expireMeal': return self.expireMeal(request_dict, response) def deviceTransfer(self, request_dict, response): # 设备转移 oldUserID = request_dict.get("oldUserID", None) loginName = request_dict.get("username", None) uid = request_dict.get('uid', None) try: # 查询该userID下是否存在此设备 old_deviceInfo_qs = Device_Info.objects.filter(userID_id=oldUserID, UID=uid, isExist=1) if not old_deviceInfo_qs.exists(): return response.json(10008) # 登录方式可能为用户名,手机号或邮箱登录 deviceUser_qs = Device_User.objects.filter( Q(username=loginName) | Q(phone=loginName) | Q(userEmail=loginName)).values('userID') newUserID = deviceUser_qs[0]['userID'] # 判断新用户的userID是否跟旧用户的一样 if newUserID == oldUserID: return response.json(10009) # 判断新用户是否已有此设备UID new_deviceInfo_qs = Device_Info.objects.filter(userID_id=newUserID, UID=uid, isExist=1) if new_deviceInfo_qs: return response.json(10009) # 分享的设备不能转移 isShare = Device_Info.objects.get(userID_id=oldUserID, UID=uid).isShare if isShare: return response.json(10015) # 获取新设备的username newUserName = Device_User.objects.get(userID=newUserID).username main_exist = Device_Info.objects.filter(UID=uid, vodPrimaryUserID='', vodPrimaryMaster='') vodPrimaryUserID = '' vodPrimaryMaster = '' if not main_exist.exists(): vodPrimaryUserID = newUserID vodPrimaryMaster = newUserName else: ismain = Device_Info.objects.filter(UID=uid, vodPrimaryUserID=oldUserID) if not ismain.exists(): return response.json(10037) else: vodPrimaryUserID = newUserID vodPrimaryMaster = newUserName with transaction.atomic(): # 更新设备信息 old_deviceInfo_qs.update(userID=newUserID, vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster) VodHlsModel.objects.filter(uid=uid).delete() except Exception as e: # print(e) return response.json(500, repr(e)) else: return response.json(0) def mealTransfer(self, request_dict, response, userID): # 云存套餐转移 old_uid = request_dict.get("old_uid", None) new_uid = request_dict.get("new_uid", None) nowTime = int(time.time()) try: # 查询两个UID是否在同一账号下 old_deviceInfo_qs = Device_Info.objects.filter(userID_id=userID, UID=old_uid).values('isExist') new_deviceInfo_qs = Device_Info.objects.filter(userID_id=userID, UID=new_uid).values('isExist') if not (old_deviceInfo_qs.exists() and new_deviceInfo_qs.exists()): return response.json(10010) new_isExist = new_deviceInfo_qs[0]['isExist'] if not new_isExist: return response.json(10011) # 查询转出设备正在使用的套餐 old_using_uid_bucket = UID_Bucket.objects.filter(uid=old_uid, endTime__gte=nowTime).values('id').order_by('addTime') if not old_using_uid_bucket.exists(): return response.json(10013) # 首次转移,根据订单判断是否为购买的套餐 old_orderModel_qs = Order_Model.objects.filter(userID_id=userID, UID=old_uid) if old_orderModel_qs.exists(): old_UIDbucket_id = old_using_uid_bucket[0]['id'] # 只能转移购买的的套餐(支付类型为体验套餐和激活码不能转移,即pay_type不能为10,11) old_orderModel_qs = Order_Model.objects.filter(uid_bucket_id=old_UIDbucket_id).values('payType') payType = old_orderModel_qs[0]['payType'] if payType == 10 or payType == 11: return response.json(10012) # # 查询转入设备正在使用的套餐 new_using_uid_bucket = UID_Bucket.objects.filter(uid=new_uid, endTime__gte=nowTime) if new_using_uid_bucket.exists(): return response.json(10014) with transaction.atomic(): # vod_uid_bucket表更新uid old_using_uid_bucket_id = old_using_uid_bucket[0]['id'] UID_Bucket.objects.filter(id=old_using_uid_bucket_id).update(uid=new_uid) # 删除转出设备stscrd表关联数据 StsCrdModel.objects.filter(uid=old_uid).delete() except Exception as e: # print(e) return response.json(500, repr(e)) else: return response.json(0) def expireMeal(self, request_dict, response): UID_Bucket_id = request_dict.get("UID_Bucket_id", None) # 修改endTime让当前设备套餐过期 if UID_Bucket_id: nowTime = int(time.time()) try: UID_Bucket.objects.filter(id=UID_Bucket_id).update(endTime=nowTime-1) except Exception as e: # print(e) return response.json(500, repr(e)) else: return response.json(0) response.json(404)