Prechádzať zdrojové kódy

Merge branch 'test' of http://192.168.136.99:3000/servers/ASJServer

locky 3 rokov pred
rodič
commit
284b975a71

+ 23 - 21
Controller/DeviceConfirmRegion.py

@@ -19,27 +19,29 @@ class ConfirmRegion(TemplateView):
     def get(self, request, *args, **kwargs):
         response = ResponseObject()
         request.encoding = 'utf-8'
-        # number = request.POST.get('number', None)
-        # selectRegion = CountryModel.objects.filter(number=number).values('region__api_url')
-        # if not selectRegion.exists():
-        #     return response.json(0,{"api_url":"https://test.dvema.com"})
-        # else:
-        #     return response.json(0,{"api_url":selectRegion[0]['region__api_url']})
-
-        # serial_number = request.POST.get('serial_number', None)
-        ip = CommonService.get_ip_address(request)
-        # ip = '14.102.176.0'
-        ipInfo = CommonService.getIpIpInfo(ip, "CN")
-        logger = logging.getLogger('info')
-        logger.info('设备获取域名---ip:{},country_code:{}'.format(ip, ipInfo['country_code']))
-        if ipInfo['country_code']:
-            device_request_url = CountryModel.objects.filter(country_code=ipInfo['country_code']).values("region__api")
-            if device_request_url.exists():
-                return response.json(0, {"request_api_url": device_request_url[0]['region__api']})
-
-        # 不存在默认返回美洲地区api。
-        api = RegionModel.objects.filter(continent_code='NA').values("api")
-        return response.json(0,{"request_api_url": api[0]['api']})
+        try:
+            ip = CommonService.get_ip_address(request)
+            device_domain_data = {'ip': ip}
+            ipInfo = CommonService.getIpIpInfo(ip, 'CN')
+            logger = logging.getLogger('info')
+            logger.info('设备获取域名---ip:{},country_code:{}'.format(ip, ipInfo['country_code']))
+            if ipInfo['country_code']:
+                device_domain_data['country_name'] = ipInfo['country_code']
+                device_request_url = CountryModel.objects.filter(country_code=ipInfo['country_code']).values("region__api")
+                if device_request_url.exists():
+                    device_domain_data['api'] = device_request_url[0]['region__api']
+                    DeviceDomainModel.objects.create(**device_domain_data)
+                    return response.json(0, {'request_api_url': device_request_url[0]['region__api']})
+
+            # 不存在默认返回美洲地区api。
+            api = RegionModel.objects.filter(continent_code='NA').values("api")
+            device_domain_data['country_name'] = 'NA'
+            device_domain_data['api'] = api[0]['api']
+            DeviceDomainModel.objects.create(**device_domain_data)
+            return response.json(0, {'request_api_url': api[0]['api']})
+        except Exception as e:
+            print(e)
+            return response.json(0, {'request_api_url': 'https://www.dvema.com'})
 
 
 # 根据设备的ip返回域名和地区id

+ 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

+ 195 - 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,198 @@ 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)
+        elif operation == 'del/home':
+            return self.del_home(app_user_id, request_dict, response)
+
+    @classmethod
+    def del_home(cls, app_user_id, request_dict, response):
+        """
+        删除家庭
+        @param app_user_id:
+        @param request_dict:
+        @param response:
+        @return:
+        """
+        familyId = request_dict.get('familyId', None)
+        if not familyId:
+            return response.json(444)
+        is_owner = EquipmentFamilyView.get_family_owner(app_user_id, familyId)
+        if not is_owner:
+            return response.json(404)
+        familyId = int(familyId)
+        try:
+            with transaction.atomic():
+                user_family_qs = UserFamily.objects.filter(id=familyId)
+                if user_family_qs.exists():
+                    user_family_qs.delete()
+                    return response.json(0)
+            return response.json(176)
+        except Exception as e:
+            print(e)
+            return response.json(177, repr(e))
+
+    @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('lang', '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):

+ 15 - 11
Model/models.py

@@ -1679,13 +1679,23 @@ class DeviceTypeModel(models.Model):
         verbose_name_plural = verbose_name
 
 
+class AppBundle(models.Model):
+    id = models.AutoField(primary_key=True)
+    app_bundle_id = models.CharField(default='', max_length=32, verbose_name='app版本id')
+    app_device_type = models.ManyToManyField(to='AppDeviceType', db_table='app_bundle_device_type',
+                                             verbose_name='APP版本-设备类型')
+
+    class Meta:
+        db_table = 'app_bundle'
+        verbose_name = 'APP版本表'
+        verbose_name_plural = verbose_name
+
+
 class AppDeviceType(models.Model):
     id = models.AutoField(primary_key=True)
-    model = models.SmallIntegerField(default=0, verbose_name='设备类型')    # 1:DVR, 2:IPC
+    model = models.SmallIntegerField(default=0, verbose_name='设备类型')  # 1:DVR, 2:IPC
     type = models.IntegerField(default=0, verbose_name='设备型号')
     icon = models.CharField(default='', max_length=32, verbose_name='文件名')
-    add_time = models.IntegerField(default=0, verbose_name='添加时间')
-    update_time = models.IntegerField(default=0, verbose_name='更新时间')
 
     class Meta:
         db_table = 'app_device_type'
@@ -1699,8 +1709,7 @@ class DeviceNameLanguage(models.Model):
                                         verbose_name='关联APP设备类型表id')
     lang = models.CharField(default='', max_length=10, verbose_name='语言')
     name = models.CharField(default='', max_length=32, verbose_name='设备名称')
-    add_time = models.IntegerField(default=0, verbose_name='添加时间')
-    update_time = models.IntegerField(default=0, verbose_name='更新时间')
+    sort = models.SmallIntegerField(default=0, verbose_name=u'升序排序')
 
     class Meta:
         db_table = 'device_name_language'
@@ -2212,12 +2221,9 @@ class P2PIpModel(models.Model):
 
 class DeviceDomainModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    uid = models.CharField(max_length=20, default='', unique=True, db_index=True, verbose_name='uid')
-    serial_number = models.CharField(max_length=9, default='', unique=True, db_index=True, verbose_name='序列号')
     ip = models.CharField(default='', max_length=32, verbose_name='ip')
     country_name = models.CharField(max_length=20, default='', verbose_name='国家名')
     api = models.CharField(max_length=50, default='', verbose_name='使用的域名')
-    region_id = models.SmallIntegerField(default=0, verbose_name='地区id')
     add_time = models.DateTimeField(blank=True, auto_now_add=True, verbose_name=u'添加时间')
     update_time = models.DateTimeField(blank=True, auto_now=True, verbose_name=u'更新时间')
 
@@ -2528,8 +2534,7 @@ class FamilyRoomDevice(models.Model):
     family_id = models.IntegerField(default=0, blank=True, verbose_name=u'家庭id')
     device = models.ForeignKey(Device_Info, to_field='id', default='', on_delete=models.CASCADE,
                                verbose_name='关联设备信息id')
-    sub_device = models.ForeignKey(GatewaySubDevice, to_field='id', default='', on_delete=models.CASCADE,
-                                   verbose_name='关联子设备信息id')
+    sub_device = models.IntegerField(default=0, blank=True, verbose_name='关联子设备信息id')
     sort = models.IntegerField(default=0, blank=True, verbose_name=u'排序,越小越靠前')
     updated_time = models.IntegerField(default=0, verbose_name='更新时间')
     created_time = models.IntegerField(default=0, verbose_name='创建时间')
@@ -2556,4 +2561,3 @@ class FamilyMemberJoin(models.Model):
         db_table = 'family_member_join'
         verbose_name = '家庭成员加入'
         verbose_name_plural = verbose_name
-