GatewayFamilyMemberController.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. @classmethod
  42. def member_join(cls, app_user_id, request_dict, response):
  43. pass
  44. @classmethod
  45. def member_join_page(cls, request_dict, response):
  46. """
  47. 家庭成员邀请记录
  48. @param request_dict:
  49. @param response:
  50. @return:
  51. """
  52. page_no = request_dict.get('pageNo', None)
  53. page_size = request_dict.get('pageSize', None)
  54. family_id = request_dict.get('familyId', None)
  55. if not all([page_no, page_size, family_id]):
  56. return response.json(444)
  57. member_join = FamilyMemberJoin.objects.filter(family_id=family_id).values('status', 'user__username',
  58. 'user__userIconUrl', 'user__phone',
  59. 'user__userEmail', 'updated_time',
  60. 'created_time')
  61. page_no = int(page_no)
  62. page_size = int(page_size)
  63. member_join = member_join.order_by('-created_time')[(page_no - 1) * page_size: page_no * page_size]
  64. if not member_join.exists():
  65. return response.json(0, [])
  66. result = []
  67. for item in member_join:
  68. result.append({
  69. 'status': item['status'],
  70. 'userName': item['user__username'],
  71. 'userIconUrl': item['user__userIconUrl'],
  72. 'phone': item['user__phone'],
  73. 'userEmail': item['user__userEmail'],
  74. 'updatedTime': item['updated_time'],
  75. 'createdTime': item['created_time']
  76. })
  77. return response.json(0, result)
  78. @classmethod
  79. def family_qrcode(cls, user_id, request_dict, response):
  80. """
  81. 获取邀请码信息
  82. @param user_id:
  83. @param request_dict:
  84. @param response:
  85. @return:
  86. """
  87. family_id = request_dict.get('familyId', None)
  88. if not family_id:
  89. return response.json(444)
  90. is_owner = EquipmentFamilyView.get_family_owner(user_id, family_id)
  91. if not is_owner:
  92. return response.json(404)
  93. try:
  94. UserFamily.objects.get(id=family_id)
  95. except Exception as e:
  96. print(e)
  97. return response.json(173, repr(e))
  98. pass
  99. @classmethod
  100. def generate_token_url(cls, app_user_id, request_dict, response):
  101. family_id = request_dict.get('familyId', None)
  102. if not family_id:
  103. return response.json(444)
  104. family_qs = UserFamily.objects.filter(id=family_id, user_id=app_user_id) \
  105. .values('name', 'user__userEmail',
  106. 'user__userIconUrl',
  107. 'user__phone', 'user__NickName',
  108. 'user__username')
  109. if not family_qs.exists():
  110. return response.json(173)
  111. family_qs = family_qs.first()
  112. data = {'sharer': app_user_id, 'familyId': family_id}
  113. # -----------------
  114. # share_token = jwt.encode(data, '.#^^&', algorithm='HS256').decode('utf-8')
  115. # +++++++++++++++++
  116. redisObj = RedisObject()
  117. share_token = str(int(time.time())) + CommonService.RandomStr(8)
  118. if not redisObj.set_data(key=share_token, val=json.dumps(data), expire=300):
  119. return response.json(10, '生成失败')
  120. return response.json(0, {
  121. 'shareToken': share_token,
  122. 'userPhone': family_qs['user__phone'],
  123. 'nickName': family_qs['user__NickName'],
  124. 'userIconUrl': family_qs['user__userIconUrl'],
  125. 'userName': family_qs['user__username'],
  126. 'familyName': family_qs['name'],
  127. 'userEmail': family_qs['user__userEmail'],
  128. })