|
@@ -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):
|