CloudTest.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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.views.generic.base import View
  11. from Object.TokenObject import TokenObject
  12. from Service.ModelService import ModelService
  13. from Object.ResponseObject import ResponseObject
  14. from Model.models import Device_User, Device_Info, Order_Model, UID_Bucket, StsCrdModel, VodHlsModel, Unused_Uid_Meal
  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. username = 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).values('isShare','vodPrimaryUserID')
  50. if not old_deviceInfo_qs.exists():
  51. return response.json(10008)
  52. # 判断新用户的userID是否跟旧用户的一样
  53. newUserID = ModelService.get_userID_byname(username)
  54. if newUserID == oldUserID:
  55. return response.json(10009)
  56. # 分享的设备不能转移
  57. isShare = old_deviceInfo_qs[0]['isShare']
  58. if isShare:
  59. return response.json(10015)
  60. # 旧用户是设备主用户才能转移
  61. vodPrimaryUserID = old_deviceInfo_qs[0]['vodPrimaryUserID']
  62. if vodPrimaryUserID != '' and vodPrimaryUserID != oldUserID:
  63. return response.json(10037)
  64. # 判断新用户是否已有此设备UID
  65. new_deviceInfo_qs = Device_Info.objects.filter(userID_id=newUserID, UID=uid, isExist=1)
  66. if new_deviceInfo_qs:
  67. return response.json(10009)
  68. # 获取新设备的username
  69. newUserName = Device_User.objects.get(userID=newUserID).username
  70. vodPrimaryUserID = newUserID
  71. vodPrimaryMaster = newUserName
  72. with transaction.atomic():
  73. # 更新旧设备userID
  74. old_deviceInfo_qs.update(userID=newUserID)
  75. # 更新所有设备主用户信息
  76. Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster)
  77. VodHlsModel.objects.filter(uid=uid).delete()
  78. except Exception as e:
  79. # print(e)
  80. return response.json(500, repr(e))
  81. else:
  82. return response.json(0)
  83. def mealTransfer(self, request_dict, response, userID):
  84. # 云存套餐转移
  85. old_uid = request_dict.get("old_uid", None)
  86. new_uid = request_dict.get("new_uid", None)
  87. nowTime = int(time.time())
  88. try:
  89. # 查询两个UID是否在同一账号下
  90. old_deviceInfo_qs = Device_Info.objects.filter(userID_id=userID, UID=old_uid).values('isExist','vodPrimaryUserID')
  91. new_deviceInfo_qs = Device_Info.objects.filter(userID_id=userID, UID=new_uid).values('isExist')
  92. if not (old_deviceInfo_qs.exists() and new_deviceInfo_qs.exists()):
  93. return response.json(10010)
  94. # 不是主用户无法转移
  95. vodPrimaryUserID = old_deviceInfo_qs[0]['vodPrimaryUserID']
  96. if vodPrimaryUserID != '' and vodPrimaryUserID != userID:
  97. return response.json(10038)
  98. vodPrimaryUserID = userID
  99. vodPrimaryMaster = ModelService.get_user_name(userID)
  100. new_isExist = new_deviceInfo_qs[0]['isExist']
  101. if not new_isExist:
  102. return response.json(10011)
  103. # 查询转出设备正在使用的套餐
  104. old_using_uid_bucket = UID_Bucket.objects.filter(uid=old_uid, endTime__gte=nowTime).values('id').order_by('addTime')
  105. if not old_using_uid_bucket.exists():
  106. return response.json(10013)
  107. # 首次转移,根据订单判断是否为购买的套餐
  108. old_orderModel_qs = Order_Model.objects.filter(userID_id=userID, UID=old_uid)
  109. if old_orderModel_qs.exists():
  110. old_UIDbucket_id = old_using_uid_bucket[0]['id']
  111. # 只能转移购买的的套餐(支付类型为体验套餐和激活码不能转移,即pay_type不能为10,11)
  112. old_orderModel_qs = Order_Model.objects.filter(uid_bucket_id=old_UIDbucket_id).values('payType')
  113. payType = old_orderModel_qs[0]['payType']
  114. if payType == 10 or payType == 11:
  115. return response.json(10012)
  116. # 查询转入设备正在使用的套餐
  117. new_using_uid_bucket = UID_Bucket.objects.filter(uid=new_uid, endTime__gte=nowTime)
  118. new_unused_uid_bucket = Unused_Uid_Meal.objects.filter(uid=new_uid)
  119. new_unused_id_list = new_unused_uid_bucket.values_list("id", flat=True)
  120. if new_using_uid_bucket.exists() or new_unused_uid_bucket.exists():
  121. return response.json(10014)
  122. with transaction.atomic():
  123. # 更新所有设备主用户信息
  124. Device_Info.objects.filter(UID=new_uid).update(vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster)
  125. # vod_uid_bucket表更新uid
  126. old_using_uid_bucket_id = old_using_uid_bucket[0]['id']
  127. UID_Bucket.objects.filter(id=old_using_uid_bucket_id).update(uid=new_uid)
  128. Unused_Uid_Meal.objects.filter(id__in=list(new_unused_id_list)).update(uid=new_uid) # 更新过期云存关联套餐状态
  129. # 删除转出设备stscrd表关联数据
  130. StsCrdModel.objects.filter(uid=old_uid).delete()
  131. except Exception as e:
  132. # print(e)
  133. return response.json(500, repr(e))
  134. else:
  135. return response.json(0)
  136. def expireMeal(self, request_dict, response):
  137. UID_Bucket_id = request_dict.get("UID_Bucket_id", None)
  138. # 修改endTime让当前设备套餐过期
  139. if UID_Bucket_id:
  140. try:
  141. UID_Bucket.objects.filter(id=UID_Bucket_id).update(use_status=2)
  142. except Exception as e:
  143. # print(e)
  144. return response.json(500, repr(e))
  145. else:
  146. return response.json(0)
  147. response.json(404)