Parcourir la source

完成加入家庭消息确认接口,新增删除家庭成员接口。

zhangdongming il y a 3 ans
Parent
commit
875e67444e

+ 3 - 1
Controller/SensorGateway/EquipmentFamilyController.py

@@ -565,7 +565,8 @@ class EquipmentFamilyView(View):
                                                    'user__userIconUrl',
                                                    'user__NickName',
                                                    'user__phone',
-                                                   'user__userEmail')
+                                                   'user__userEmail',
+                                                   'id')
         family_member_qs = family_member_qs.order_by('-identity').order_by('sort')
         items = []
         data = {}
@@ -579,6 +580,7 @@ class EquipmentFamilyView(View):
             data['nickName'] = item['user__NickName']
             data['phone'] = item['user__phone']
             data['userEmail'] = item['user__userEmail']
+            data['memberId'] = item['id']
             items.append(data)
             data = {}
         family_dict['members'] = items

+ 166 - 1
Controller/SensorGateway/GatewayFamilyMemberController.py

@@ -13,7 +13,9 @@ import time
 from django.db import transaction
 from django.views.generic.base import View
 
-from Model.models import UserFamily, FamilyMemberJoin, FamilyMember, Device_User, SysMsgModel
+from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
+from Model.models import UserFamily, FamilyMemberJoin, FamilyMember, SysMsgModel, FamilyMemberPermission, \
+    Device_User
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -52,6 +54,169 @@ class GatewayFamilyMemberView(View):
             return self.check_qrcode(request_dict, response)
         elif operation == 'join/info':
             return self.member_join_info(request_dict, response)
+        elif operation == 'join/update':
+            return self.user_join_confirm(request_dict, response)
+        elif operation == 'del':
+            return self.member_del(app_user_id, request_dict, response)
+        elif operation == 'created':
+            return self.family_created(app_user_id, request_dict, response)
+
+    @classmethod
+    def family_created(cls, app_user_id, request_dict, response):
+        """
+        创建家庭
+        @param app_user_id:
+        @param request_dict:
+        @param response:
+        @return:
+        """
+        family_name = request_dict.get('familyName', None)
+        if not family_name:
+            return response.json(444)
+        n_time = int(time.time())
+        location = request_dict.get('location', '')
+        try:
+            with transaction.atomic():
+                member_permission_qs = FamilyMemberPermission.objects.filter(no='001').values('id')
+                user_family = UserFamily.objects.create(user_id=app_user_id, name=family_name,
+                                                        location=location,
+                                                        updated_time=n_time,
+                                                        created_time=n_time)
+                if user_family.id:
+                    device_user = Device_User.objects.get(userID=app_user_id)
+                    permission_id = member_permission_qs.first()['id']
+                    FamilyMember.objects.create(family_id=user_family.id, user_id=app_user_id,
+                                                user_name=device_user.username, identity=1,
+                                                permission_id=int(permission_id), sort=1, updated_time=n_time,
+                                                created_time=n_time)
+                return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(177, repr(e))
+
+    @classmethod
+    def member_del(cls, app_user_id, request_dict, response):
+        """
+        成员删除或退出
+        @param app_user_id:
+        @param request_dict:
+        @param response:
+        @return:
+        """
+        member_id = request_dict.get('memberId', None)
+        family_id = request_dict.get('familyId', None)
+        if not family_id:
+            return response.json(444)
+        try:
+            family_id = int(family_id)
+            with transaction.atomic():
+                # 家庭所有者删除成员
+                if member_id:
+                    is_owner = EquipmentFamilyView.get_family_owner(app_user_id, family_id)
+                    if not is_owner:
+                        return response.json(404)
+                    member_id = int(member_id)
+                    family_member_qs = FamilyMember.objects.filter(id=member_id)
+                    if not family_member_qs.exists():
+                        return response.json(173)
+                    family_member_qs.delete()
+                    return response.json(0)
+                else:
+                    # 成员退出当前家庭
+                    family_member = FamilyMember.objects.filter(user_id=app_user_id, identity=1)
+                    if family_member.exists():
+                        return response.json(173)
+                    family_member_qs = FamilyMember.objects.filter(family_id=family_id, user_id=app_user_id)
+                    if not family_member_qs.exists():
+                        return response.json(173)
+                    family_member_qs.delete()
+                    return response.json(0)
+        except Exception as e:
+            return response.json(177, repr(e))
+
+    @classmethod
+    def user_join_confirm(cls, request_dict, response):
+        """
+        用户加入家庭确认
+        @param request_dict:
+        @param response:
+        @return:
+        """
+        join_id = request_dict.get('joinId', None)
+        confirm = request_dict.get('confirm', None)
+        lang = request_dict.get('joinId', 'en')
+        if not all([join_id, confirm]):
+            return response.json(444)
+        join_id = int(join_id)
+        family_join = FamilyMemberJoin.objects.filter(id=join_id, status=0)
+        if not family_join.exists():
+            return response.json(173)
+        try:
+            now_time = int(time.time())
+            with transaction.atomic():
+                family_join.update(status=2 if confirm == 'confirm' else 1)
+                family_join = FamilyMemberJoin.objects.filter(id=join_id)
+                family_join = family_join.values('id', 'user_id', 'user__username', 'user__NickName', 'family__name',
+                                                 'family_id', 'family__user_id', 'status', 'type', 'updated_time')
+                family_join = family_join.first()
+                nick_name = family_join['user__NickName']
+                family_name = family_join['family__name']
+                join_type = family_join['type']
+                data = {
+                    'addTime': now_time,
+                    'updTime': now_time,
+                    'userID_id': family_join['family__user_id'] if join_type == 1 else family_join['user_id'],
+                    'eventType': 705
+                }
+                if confirm == 'confirm':
+                    msg_text = cls.get_confirm_text(nick_name, family_name, join_type, True, lang)
+                    p_id = FamilyMemberPermission.objects.filter(no='002').values('id').first()
+                    p_id = p_id['id']
+                    FamilyMember.objects.create(family_id=family_join['family_id'], updated_time=now_time,
+                                                user_id=family_join['user_id'],
+                                                created_time=now_time,
+                                                permission_id=p_id,
+                                                user_name=family_join['user__username'])
+                elif confirm == 'refusal':
+                    msg_text = cls.get_confirm_text(nick_name, family_name, join_type, False, lang)
+                else:
+                    ex = Exception("data is null")
+                    raise ex
+                data['msg'] = msg_text
+                data['uid'] = family_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_confirm_text(cls, nick_name, family_name, join_type, is_confirm, lang='en'):
+        # join_type == 1等于扫码请求加u人
+        if is_confirm:
+            if join_type == 1:
+                if lang == 'cn':
+                    msg_text = '{} 同意你的请求'.format(family_name)
+                else:
+                    msg_text = '{} confirm to your request'.format(family_name)
+            else:
+                if lang == 'cn':
+                    msg_text = '{}同意加入{}'.format(nick_name, family_name)
+                else:
+                    msg_text = '{} confirm to join {}'.format(nick_name, family_name)
+        else:
+            if join_type == 1:
+                if lang == 'cn':
+                    msg_text = '{}拒绝你的请求'.format(family_name)
+                else:
+                    msg_text = '{} refused your request'.format(family_name)
+
+            else:
+                if lang == 'cn':
+                    msg_text = '{}拒绝加入{}'.format(nick_name, family_name)
+                else:
+                    msg_text = '{} refused to join '.format(family_name)
+        return msg_text
 
     @classmethod
     def member_join_info(cls, request_dict, response):