CloudTest.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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 Model.models import Device_User, Device_Info, Order_Model, UID_Bucket, Store_Meal, StsCrdModel
  12. from Object.ResponseObject import ResponseObject
  13. from Object.TokenObject import TokenObject
  14. class cloudTestView(View):
  15. def get(self, request, *args, **kwargs):
  16. request.encoding = 'utf-8'
  17. operation = kwargs.get('operation')
  18. return self.validation(request.GET, request, operation)
  19. def post(self, request, *args, **kwargs):
  20. request.encoding = 'utf-8'
  21. operation = kwargs.get('operation')
  22. return self.validation(request.POST, request, operation)
  23. def validation(self, request_dict, request, operation):
  24. response = ResponseObject()
  25. if operation is None:
  26. return response.json(444, 'error path')
  27. else:
  28. token = request_dict.get('token', None)
  29. # 设备主键uid
  30. tko = TokenObject(token)
  31. response.lang = tko.lang
  32. if tko.code != 0:
  33. return response.json(tko.code)
  34. userID = tko.userID
  35. if operation == 'deviceTransfer':
  36. return self.deviceTransfer(request_dict, response)
  37. elif operation == 'mealTransfer':
  38. return self.mealTransfer(request_dict, response, userID)
  39. def deviceTransfer(self, request_dict, response):
  40. # 设备转移
  41. oldUserID = request_dict.get("oldUserID", None)
  42. username = request_dict.get("username", None)
  43. uid = request_dict.get('uid', None)
  44. try:
  45. # 查询设备是否存在
  46. deviceInfo_qs = Device_Info.objects.filter(userID_id=oldUserID, UID=uid, isExist=1)
  47. if deviceInfo_qs[0]:
  48. deviceUser_qs = Device_User.objects.filter(username=username).values('userID')
  49. userID = deviceUser_qs[0]['userID']
  50. # 判断该用户的userID是否跟转移的一样
  51. if userID == oldUserID:
  52. return response.json(10008)
  53. # 更新设备信息
  54. else:
  55. deviceInfo_qs.update(userID=userID)
  56. except Exception as e:
  57. # print(e)
  58. return response.json(500, repr(e))
  59. else:
  60. return response.json(0)
  61. def mealTransfer(self, request_dict, response, userID):
  62. # 云存套餐转移
  63. # username = request_dict.get("username", None)
  64. old_uid = request_dict.get("old_uid", None)
  65. new_uid = request_dict.get("new_uid", None)
  66. try:
  67. # 查询两个UID是否在同一账号下
  68. # deviceUser_qs = Device_User.objects.filter(username=username).values('userID')
  69. # userID = deviceUser_qs[0]['userID']
  70. old_deviceInfo_qs = Device_Info.objects.filter(userID_id=userID,UID=old_uid).values('isExist','Online')
  71. new_deviceInfo_qs = Device_Info.objects.filter(userID_id=userID, UID=new_uid).values('isExist')
  72. if not(old_deviceInfo_qs.exists() and new_deviceInfo_qs.exists()):
  73. return response.json(10009)
  74. # 转出设备已删除或不在线才能进行转移
  75. old_isExist = old_deviceInfo_qs[0]['isExist']
  76. old_Online = old_deviceInfo_qs[0]['Online']
  77. new_isExist = new_deviceInfo_qs[0]['isExist']
  78. if old_isExist or old_Online or not new_isExist:
  79. return response.json(10010)
  80. # 确认转入设备套餐是否过期,通过orders表的userID_id和UID确定uid_bucket_id
  81. new_orderModel_qs = Order_Model.objects.filter(userID_id=userID, UID=new_uid).values('uid_bucket_id')
  82. new_uid_bucket_id = new_orderModel_qs[0]['uid_bucket_id']
  83. # 转入设备开通过套餐且套餐已过期才能进行转移,通过vod_uid_bucket表关联的id(关联orders表的uid_bucket_id)确定过期时间endTime
  84. new_UIDbucket_qs = UID_Bucket.objects.filter(id=new_uid_bucket_id).values('endTime')
  85. if not new_UIDbucket_qs.exists():
  86. return response.json(10011)
  87. nowTime = int(time.time())
  88. new_endTime = new_UIDbucket_qs[0]['endTime']
  89. if new_endTime > nowTime:
  90. return response.json(10012)
  91. # 只能转移购买的的套餐(支付类型为体验套餐和激活码不能转移,即pay_type不能为10,11)
  92. old_orderModel_qs = Order_Model.objects.filter(userID_id=userID,UID=old_uid).values('payType','uid_bucket_id')
  93. payType = old_orderModel_qs[0]['payType']
  94. old_uid_bucket_id = old_orderModel_qs[0]['uid_bucket_id']
  95. if payType == 10 or payType == 11:
  96. return response.json(10013)
  97. # 套餐转移,转出设备服务显示过期,转入设备套餐类型和过期时间更新
  98. # 更新转出设备套餐过期时间
  99. old_uidBucket_qs = UID_Bucket.objects.filter(id=old_uid_bucket_id).values('bucket_id','endTime')
  100. old_bucket_id = old_uidBucket_qs[0]['bucket_id']
  101. old_endTime = old_uidBucket_qs[0]['endTime']
  102. with transaction.atomic():
  103. UID_Bucket.objects.filter(id=old_uid_bucket_id).update(endTime=0)
  104. # 更新转入设备套餐类型和过期时间
  105. new_UIDbucket_qs.update(bucket_id=old_bucket_id,endTime=old_endTime)
  106. # 删除转出设备stscrd表关联数据
  107. stscrdModel_qs = StsCrdModel.objects.filter(uid=old_uid)
  108. if stscrdModel_qs:
  109. stscrdModel_qs.delete()
  110. except Exception as e:
  111. # print(e)
  112. return response.json(500, repr(e))
  113. else:
  114. return response.json(0)