# -*- encoding: utf-8 -*- """ @File : GatewayFamilyMemberController.py @Time : 2022/5/25 10:21 @Author : stephen @Email : zhangdongming@asj6.wecom.work @Software: PyCharm """ import json import time from django.views.generic.base import View from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView from Model.models import FamilyMemberJoin, UserFamily from Object.RedisObject import RedisObject from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject from Service.CommonService import CommonService # 家庭房间管理 class GatewayFamilyMemberView(View): def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.GET, request, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.POST, request, operation) def validation(self, request_dict, request, operation): token = request.META.get('HTTP_AUTHORIZATION') token = TokenObject(token) lang = request_dict.get('lang', None) response = ResponseObject(lang) if lang else ResponseObject(token.lang) if token.code != 0: return response.json(token.code) app_user_id = token.userID # 添加设备关联房间 if operation == 'join': return self.member_join(app_user_id, request_dict, response) elif operation == 'join/page': return self.member_join_page(request_dict, response) @classmethod def member_join(cls, app_user_id, request_dict, response): pass @classmethod def member_join_page(cls, request_dict, response): """ 家庭成员邀请记录 @param request_dict: @param response: @return: """ page_no = request_dict.get('pageNo', None) page_size = request_dict.get('pageSize', None) family_id = request_dict.get('familyId', None) if not all([page_no, page_size, family_id]): return response.json(444) member_join = FamilyMemberJoin.objects.filter(family_id=family_id).values('status', 'user__username', 'user__userIconUrl', 'user__phone', 'user__userEmail', 'updated_time', 'created_time') page_no = int(page_no) page_size = int(page_size) member_join = member_join.order_by('-created_time')[(page_no - 1) * page_size: page_no * page_size] if not member_join.exists(): return response.json(0, []) result = [] for item in member_join: result.append({ 'status': item['status'], 'userName': item['user__username'], 'userIconUrl': item['user__userIconUrl'], 'phone': item['user__phone'], 'userEmail': item['user__userEmail'], 'updatedTime': item['updated_time'], 'createdTime': item['created_time'] }) return response.json(0, result) @classmethod def family_qrcode(cls, user_id, request_dict, response): """ 获取邀请码信息 @param user_id: @param request_dict: @param response: @return: """ family_id = request_dict.get('familyId', None) if not family_id: return response.json(444) is_owner = EquipmentFamilyView.get_family_owner(user_id, family_id) if not is_owner: return response.json(404) try: UserFamily.objects.get(id=family_id) except Exception as e: print(e) return response.json(173, repr(e)) pass @classmethod def generate_token_url(cls, app_user_id, request_dict, response): family_id = request_dict.get('familyId', None) if not family_id: return response.json(444) family_qs = UserFamily.objects.filter(id=family_id, user_id=app_user_id) \ .values('name', 'user__userEmail', 'user__userIconUrl', 'user__phone', 'user__NickName', 'user__username') if not family_qs.exists(): return response.json(173) family_qs = family_qs.first() data = {'sharer': app_user_id, 'familyId': family_id} # ----------------- # share_token = jwt.encode(data, '.#^^&', algorithm='HS256').decode('utf-8') # +++++++++++++++++ redisObj = RedisObject() share_token = str(int(time.time())) + CommonService.RandomStr(8) if not redisObj.set_data(key=share_token, val=json.dumps(data), expire=300): return response.json(10, '生成失败') return response.json(0, { 'shareToken': share_token, 'userPhone': family_qs['user__phone'], 'nickName': family_qs['user__NickName'], 'userIconUrl': family_qs['user__userIconUrl'], 'userName': family_qs['user__username'], 'familyName': family_qs['name'], 'userEmail': family_qs['user__userEmail'], })