浏览代码

邀请成员加入与搜索成员加入家庭接口

zhangdongming 3 年之前
父节点
当前提交
cea00d2aea
共有 1 个文件被更改,包括 119 次插入27 次删除
  1. 119 27
      Controller/SensorGateway/GatewayFamilyMemberController.py

+ 119 - 27
Controller/SensorGateway/GatewayFamilyMemberController.py

@@ -10,10 +10,10 @@
 import json
 import time
 
+from django.db import transaction
 from django.views.generic.base import View
 
-from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
-from Model.models import FamilyMemberJoin, UserFamily
+from Model.models import UserFamily, FamilyMemberJoin, FamilyMember, Device_User, SysMsgModel
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -47,13 +47,99 @@ class GatewayFamilyMemberView(View):
         elif operation == 'join/page':
             return self.member_join_page(request_dict, response)
         elif operation == 'qrcode/generate':
-            return self.generate_token_url(app_user_id, request_dict, response)
+            return self.family_generate_token(app_user_id, request_dict, response)
         elif operation == 'qrcode/check':
-            return self.check_qrcode(app_user_id, request_dict, response)
+            return self.check_qrcode(request_dict, response)
 
     @classmethod
     def member_join(cls, app_user_id, request_dict, response):
-        pass
+        """
+        家庭成员加入
+        @param app_user_id:
+        @param request_dict:
+        @param response:
+        @return:
+        """
+        family_id = request_dict.get('familyId', None)
+        invite = request_dict.get('QRCodeInvite', None)
+        user_id = request_dict.get('app_user_id', None)
+        lang = request_dict.get('lang', 'en')
+        if not all([family_id, invite]):
+            return response.json(444)
+        invite = int(invite)
+        family_id = int(family_id)
+        now_time = int(time.time())
+        # 判断当前家庭是否已有该成员
+        if invite == 1:
+            family_qs = FamilyMember.objects.filter(family_id=family_id, user_id=app_user_id)
+        elif user_id:
+            family_qs = FamilyMember.objects.filter(family_id=family_id, user_id=user_id)
+        else:
+            return response.json(173)
+        if family_qs.exists():
+            return response.json(174)
+        try:
+            user_family_qs = UserFamily.objects.filter(id=family_id)
+            if not user_family_qs:
+                return response.json(173)
+            user_family = user_family_qs.first()
+            family_name = user_family.name
+            data = {
+                'addTime': now_time,
+                'updTime': now_time,
+                'eventType': 705
+            }
+            # 请求加入家庭,用户信息
+            user_qs = Device_User.objects.filter(userID=app_user_id)
+            nick_name = user_qs.first().NickName
+
+            if invite == 1:
+                msg_text = cls.get_msg_text(nick_name, family_name, lang, True)
+                # 通知对象 家庭所有者
+                join_user_id = app_user_id
+                data['userID_id'] = user_family.user_id
+            elif app_user_id:
+                msg_text = cls.get_msg_text(nick_name, family_name, lang, False)
+                # 通知对象 被邀请人
+                join_user_id = user_id
+                data['userID_id'] = user_id
+            else:
+                return response.json(173)
+            data['msg'] = msg_text
+            with transaction.atomic():
+                family_user_join = FamilyMemberJoin.objects.create(family_id=family_id, user_id=join_user_id,
+                                                                   status=0,
+                                                                   updated_time=now_time,
+                                                                   created_time=now_time)
+                data['uid'] = family_user_join.id
+                SysMsgModel.objects.create(**data)
+                return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(177, repr(e))
+
+    @classmethod
+    def get_msg_text(cls, nick_name, family_name, lang, is_invite=False):
+        """
+        系统消息通知内容,中英文判断
+        @param nick_name:
+        @param family_name:
+        @param lang:
+        @param is_invite:
+        @return:
+        """
+        if lang and lang == 'cn':
+            if is_invite:
+                msg_text = '{}请求加入你的{}'.format(nick_name, family_name)
+            else:
+                msg_text = '{}邀请你加入{}'.format(nick_name, family_name)
+        else:
+            if is_invite:
+                msg_text = '{} Request to join your Homegroup {}'.format(nick_name, family_name)
+            else:
+                msg_text = '{} invite you to join the Homegroup {}'.format(nick_name, family_name)
+
+        return msg_text
 
     @classmethod
     def member_join_page(cls, request_dict, response):
@@ -85,6 +171,7 @@ class GatewayFamilyMemberView(View):
                 'userName': item['user__username'],
                 'userIconUrl': item['user__userIconUrl'],
                 'phone': item['user__phone'],
+                'nickName': item['user__NickName'],
                 'userEmail': item['user__userEmail'],
                 'updatedTime': item['updated_time'],
                 'createdTime': item['created_time']
@@ -92,29 +179,14 @@ class GatewayFamilyMemberView(View):
         return response.json(0, result)
 
     @classmethod
-    def family_qrcode(cls, user_id, request_dict, response):
+    def family_generate_token(cls, app_user_id, request_dict, response):
         """
-        获取邀请码信息
-        @param user_id:
+        获取家庭令牌信息
+        @param app_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)
@@ -146,7 +218,13 @@ class GatewayFamilyMemberView(View):
         })
 
     @classmethod
-    def check_qrcode(cls, app_user_id, request_dict, response):
+    def check_qrcode(cls, request_dict, response):
+        """
+        检查二维码是否过期
+        @param request_dict:
+        @param response:
+        @return:
+        """
         share_token = request_dict.get('shareToken', None)
         if not share_token:
             return response.json(444)
@@ -158,6 +236,20 @@ class GatewayFamilyMemberView(View):
         sharer = data.get('sharer', None)
         family_id = data.get('familyId', None)
         if not all([sharer, family_id]):
-            return response.json(137)
-        print(app_user_id)
-        return response.json(0)
+            return response.json(173)
+        family_id = int(family_id)
+        user_family_qs = UserFamily.objects.filter(id=family_id)
+        if not user_family_qs.exists():
+            return response.json(173)
+        user_family_qs = user_family_qs.values('name', 'user__userEmail',
+                                               'user__userIconUrl',
+                                               'user__phone', 'user__NickName',
+                                               'user__username')
+        return response.json(0, {
+            'userPhone': user_family_qs['user__phone'],
+            'nickName': user_family_qs['user__NickName'],
+            'userIconUrl': user_family_qs['user__userIconUrl'],
+            'userName': user_family_qs['user__username'],
+            'familyName': user_family_qs['name'],
+            'userEmail': user_family_qs['user__userEmail'],
+        })