CloudTest.py 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. # -*- coding: utf-8 -*-
  2. """
  3. @Time : 2020/12/16 8:44
  4. @Auth : Locky
  5. @File :CloudTest.py
  6. @IDE :PyCharm
  7. """
  8. import time
  9. from django.db import transaction
  10. from django.db.models import Q
  11. from django.views.generic.base import View
  12. from Model.models import Device_User, Device_Info, Order_Model, UID_Bucket, StsCrdModel, VodHlsModel
  13. from Object.ResponseObject import ResponseObject
  14. from Object.TokenObject import TokenObject
  15. class cloudTestView(View):
  16. def get(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation')
  19. return self.validation(request.GET, request, operation)
  20. def post(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. operation = kwargs.get('operation')
  23. return self.validation(request.POST, request, operation)
  24. def validation(self, request_dict, request, operation):
  25. response = ResponseObject()
  26. if operation is None:
  27. return response.json(444, 'error path')
  28. else:
  29. token = request_dict.get('token', None)
  30. # 设备主键uid
  31. tko = TokenObject(token)
  32. response.lang = tko.lang
  33. if tko.code != 0:
  34. return response.json(tko.code)
  35. userID = tko.userID
  36. if operation == 'deviceTransfer':
  37. return self.deviceTransfer(request_dict, response)
  38. elif operation == 'mealTransfer':
  39. return self.mealTransfer(request_dict, response, userID)
  40. elif operation == 'expireMeal':
  41. return self.expireMeal(request_dict, response)
  42. def deviceTransfer(self, request_dict, response):
  43. # 设备转移
  44. oldUserID = request_dict.get("oldUserID", None)
  45. loginName = request_dict.get("username", None)
  46. uid = request_dict.get('uid', None)
  47. try:
  48. # 查询该userID下是否存在此设备
  49. old_deviceInfo_qs = Device_Info.objects.filter(userID_id=oldUserID, UID=uid, isExist=1)
  50. if not old_deviceInfo_qs.exists():
  51. return response.json(10008)
  52. # 登录方式可能为用户名,手机号或邮箱登录
  53. deviceUser_qs = Device_User.objects.filter(
  54. Q(username=loginName) | Q(phone=loginName) | Q(userEmail=loginName)).values('userID')
  55. newUserID = deviceUser_qs[0]['userID']
  56. # 判断新用户的userID是否跟旧用户的一样
  57. if newUserID == oldUserID:
  58. return response.json(10009)
  59. # 判断新用户是否已有此设备UID
  60. new_deviceInfo_qs = Device_Info.objects.filter(userID_id=newUserID, UID=uid, isExist=1)
  61. if new_deviceInfo_qs:
  62. return response.json(10009)
  63. # 分享的设备不能转移
  64. isShare = Device_Info.objects.get(userID_id=oldUserID, UID=uid).isShare
  65. if isShare:
  66. return response.json(10015)
  67. # 获取新设备的username
  68. newUserName = Device_User.objects.get(userID=newUserID).username
  69. main_exist = Device_Info.objects.filter(UID=uid, vodPrimaryUserID='', vodPrimaryMaster='')
  70. vodPrimaryUserID = ''
  71. vodPrimaryMaster = ''
  72. if not main_exist.exists():
  73. vodPrimaryUserID = newUserID
  74. vodPrimaryMaster = newUserName
  75. else:
  76. ismain = Device_Info.objects.filter(UID=uid, vodPrimaryUserID=oldUserID)
  77. if not ismain.exists():
  78. return response.json(10037)
  79. else:
  80. vodPrimaryUserID = newUserID
  81. vodPrimaryMaster = newUserName
  82. with transaction.atomic():
  83. # 更新设备信息
  84. old_deviceInfo_qs.update(userID=newUserID, vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster)
  85. VodHlsModel.objects.filter(uid=uid).delete()
  86. except Exception as e:
  87. # print(e)
  88. return response.json(500, repr(e))
  89. else:
  90. return response.json(0)
  91. def mealTransfer(self, request_dict, response, userID):
  92. # 云存套餐转移
  93. old_uid = request_dict.get("old_uid", None)
  94. new_uid = request_dict.get("new_uid", None)
  95. nowTime = int(time.time())
  96. try:
  97. # 查询两个UID是否在同一账号下
  98. old_deviceInfo_qs = Device_Info.objects.filter(userID_id=userID, UID=old_uid).values('isExist')
  99. new_deviceInfo_qs = Device_Info.objects.filter(userID_id=userID, UID=new_uid).values('isExist')
  100. if not (old_deviceInfo_qs.exists() and new_deviceInfo_qs.exists()):
  101. return response.json(10010)
  102. new_isExist = new_deviceInfo_qs[0]['isExist']
  103. if not new_isExist:
  104. return response.json(10011)
  105. # 查询转出设备正在使用的套餐
  106. old_using_uid_bucket = UID_Bucket.objects.filter(uid=old_uid, endTime__gte=nowTime).values('id').order_by('addTime')
  107. if not old_using_uid_bucket.exists():
  108. return response.json(10013)
  109. # 首次转移,根据订单判断是否为购买的套餐
  110. old_orderModel_qs = Order_Model.objects.filter(userID_id=userID, UID=old_uid)
  111. if old_orderModel_qs.exists():
  112. old_UIDbucket_id = old_using_uid_bucket[0]['id']
  113. # 只能转移购买的的套餐(支付类型为体验套餐和激活码不能转移,即pay_type不能为10,11)
  114. old_orderModel_qs = Order_Model.objects.filter(uid_bucket_id=old_UIDbucket_id).values('payType')
  115. payType = old_orderModel_qs[0]['payType']
  116. if payType == 10 or payType == 11:
  117. return response.json(10012)
  118. # # 查询转入设备正在使用的套餐
  119. new_using_uid_bucket = UID_Bucket.objects.filter(uid=new_uid, endTime__gte=nowTime)
  120. if new_using_uid_bucket.exists():
  121. return response.json(10014)
  122. with transaction.atomic():
  123. # vod_uid_bucket表更新uid
  124. old_using_uid_bucket_id = old_using_uid_bucket[0]['id']
  125. UID_Bucket.objects.filter(id=old_using_uid_bucket_id).update(uid=new_uid)
  126. # 删除转出设备stscrd表关联数据
  127. StsCrdModel.objects.filter(uid=old_uid).delete()
  128. except Exception as e:
  129. # print(e)
  130. return response.json(500, repr(e))
  131. else:
  132. return response.json(0)
  133. def expireMeal(self, request_dict, response):
  134. UID_Bucket_id = request_dict.get("UID_Bucket_id", None)
  135. # 修改endTime让当前设备套餐过期
  136. if UID_Bucket_id:
  137. nowTime = int(time.time())
  138. try:
  139. UID_Bucket.objects.filter(id=UID_Bucket_id).update(endTime=nowTime-1)
  140. except Exception as e:
  141. # print(e)
  142. return response.json(500, repr(e))
  143. else:
  144. return response.json(0)
  145. response.json(404)