GatewayFamilyMemberController.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : GatewayFamilyMemberController.py
  4. @Time : 2022/5/25 10:21
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import json
  10. import time
  11. from django.views.generic.base import View
  12. from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
  13. from Model.models import FamilyMemberJoin, UserFamily
  14. from Object.RedisObject import RedisObject
  15. from Object.ResponseObject import ResponseObject
  16. from Object.TokenObject import TokenObject
  17. from Service.CommonService import CommonService
  18. # 家庭房间管理
  19. class GatewayFamilyMemberView(View):
  20. def get(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. operation = kwargs.get('operation')
  23. return self.validation(request.GET, request, operation)
  24. def post(self, request, *args, **kwargs):
  25. request.encoding = 'utf-8'
  26. operation = kwargs.get('operation')
  27. return self.validation(request.POST, request, operation)
  28. def validation(self, request_dict, request, operation):
  29. token = request.META.get('HTTP_AUTHORIZATION')
  30. token = TokenObject(token)
  31. lang = request_dict.get('lang', None)
  32. response = ResponseObject(lang) if lang else ResponseObject(token.lang)
  33. if token.code != 0:
  34. return response.json(token.code)
  35. app_user_id = token.userID
  36. # 添加设备关联房间
  37. if operation == 'join':
  38. return self.member_join(app_user_id, request_dict, response)
  39. elif operation == 'join/page':
  40. return self.member_join_page(request_dict, response)
  41. elif operation == 'qrcode/generate':
  42. return self.generate_token_url(app_user_id, request_dict, response)
  43. elif operation == 'qrcode/check':
  44. return self.check_qrcode(app_user_id, request_dict, response)
  45. @classmethod
  46. def member_join(cls, app_user_id, request_dict, response):
  47. pass
  48. @classmethod
  49. def member_join_page(cls, request_dict, response):
  50. """
  51. 家庭成员邀请记录
  52. @param request_dict:
  53. @param response:
  54. @return:
  55. """
  56. page_no = request_dict.get('pageNo', None)
  57. page_size = request_dict.get('pageSize', None)
  58. family_id = request_dict.get('familyId', None)
  59. if not all([page_no, page_size, family_id]):
  60. return response.json(444)
  61. member_join = FamilyMemberJoin.objects.filter(family_id=family_id).values('status', 'user__username',
  62. 'user__userIconUrl', 'user__phone',
  63. 'user__userEmail', 'updated_time',
  64. 'created_time')
  65. page_no = int(page_no)
  66. page_size = int(page_size)
  67. member_join = member_join.order_by('-created_time')[(page_no - 1) * page_size: page_no * page_size]
  68. if not member_join.exists():
  69. return response.json(0, [])
  70. result = []
  71. for item in member_join:
  72. result.append({
  73. 'status': item['status'],
  74. 'userName': item['user__username'],
  75. 'userIconUrl': item['user__userIconUrl'],
  76. 'phone': item['user__phone'],
  77. 'userEmail': item['user__userEmail'],
  78. 'updatedTime': item['updated_time'],
  79. 'createdTime': item['created_time']
  80. })
  81. return response.json(0, result)
  82. @classmethod
  83. def family_qrcode(cls, user_id, request_dict, response):
  84. """
  85. 获取邀请码信息
  86. @param user_id:
  87. @param request_dict:
  88. @param response:
  89. @return:
  90. """
  91. family_id = request_dict.get('familyId', None)
  92. if not family_id:
  93. return response.json(444)
  94. is_owner = EquipmentFamilyView.get_family_owner(user_id, family_id)
  95. if not is_owner:
  96. return response.json(404)
  97. try:
  98. UserFamily.objects.get(id=family_id)
  99. except Exception as e:
  100. print(e)
  101. return response.json(173, repr(e))
  102. pass
  103. @classmethod
  104. def generate_token_url(cls, app_user_id, request_dict, response):
  105. family_id = request_dict.get('familyId', None)
  106. if not family_id:
  107. return response.json(444)
  108. family_id = int(family_id)
  109. family_qs = UserFamily.objects.filter(id=family_id, user_id=app_user_id) \
  110. .values('name', 'user__userEmail',
  111. 'user__userIconUrl',
  112. 'user__phone', 'user__NickName',
  113. 'user__username')
  114. if not family_qs.exists():
  115. return response.json(173)
  116. family_qs = family_qs.first()
  117. data = {'sharer': app_user_id, 'familyId': family_id}
  118. # -----------------
  119. # share_token = jwt.encode(data, '.#^^&', algorithm='HS256').decode('utf-8')
  120. # +++++++++++++++++
  121. redisObj = RedisObject()
  122. share_token = str(int(time.time())) + CommonService.RandomStr(8)
  123. if not redisObj.set_data(key=share_token, val=json.dumps(data), expire=300):
  124. return response.json(10, '生成失败')
  125. return response.json(0, {
  126. 'shareToken': share_token,
  127. 'userPhone': family_qs['user__phone'],
  128. 'nickName': family_qs['user__NickName'],
  129. 'userIconUrl': family_qs['user__userIconUrl'],
  130. 'userName': family_qs['user__username'],
  131. 'familyName': family_qs['name'],
  132. 'userEmail': family_qs['user__userEmail'],
  133. })
  134. @classmethod
  135. def check_qrcode(cls, app_user_id, request_dict, response):
  136. share_token = request_dict.get('shareToken', None)
  137. if not share_token:
  138. return response.json(444)
  139. redisObj = RedisObject()
  140. share_data = redisObj.get_data(key=share_token)
  141. if not share_data:
  142. return response.json(119)
  143. data = json.loads(share_data)
  144. sharer = data.get('sharer', None)
  145. family_id = data.get('familyId', None)
  146. if not all([sharer, family_id]):
  147. return response.json(137)
  148. print(app_user_id)
  149. return response.json(0)