Browse Source

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

guanhailong 2 năm trước cách đây
mục cha
commit
7219e2b08e

+ 6 - 3
Controller/AlgorithmShop/AlgorithmShopController.py

@@ -93,7 +93,8 @@ class AlgorithmShopView(View):
                 .values('algorithm_type__icon_url', 'algorithm_type__id',
                         'title', 'subtitle', 'algorithm_type__image_url',
                         'algorithm_type__basic_function', 'concerning',
-                        'price', 'algorithm_type__tag', 'algorithm_type__status')
+                        'price', 'algorithm_type__tag', 'algorithm_type__status',
+                        'algorithm_type__type')
             if not algorithm_qs.exists():
                 return {}
             setting = ''  # 当前支持设置的算法功能json
@@ -112,7 +113,8 @@ class AlgorithmShopView(View):
                 'price': algorithm_qs[0]['price'],
                 'tag': algorithm_qs[0]['algorithm_type__tag'],
                 'status': algorithm_qs[0]['algorithm_type__status'],
-                'setting': setting
+                'setting': setting,
+                'type': algorithm_qs[0]['algorithm_type__type']
             }
             return data
         except Exception as e:
@@ -129,12 +131,13 @@ class AlgorithmShopView(View):
         algorithm_qs = DeviceAlgorithmExplain.objects.filter(lang=lang).order_by('algorithm_type__sort') \
             .annotate(iconUrl=F('algorithm_type__icon_url'),
                       typeId=F('algorithm_type__id'),
+                      type=F('algorithm_type__type'),
                       imageUrl=F('algorithm_type__image_url'),
                       basicFunction=F('algorithm_type__basic_function'),
                       tag=F('algorithm_type__tag'), status=F('algorithm_type__status'),
                       setting=Value('', output_field=CharField())) \
             .values('iconUrl', 'imageUrl', 'title', 'subtitle', 'concerning', 'basicFunction', 'price', 'tag', 'status',
-                    'setting', 'typeId')
+                    'setting', 'typeId', 'type')
         if not algorithm_qs.exists():
             return []
         return list(algorithm_qs)

+ 4 - 2
Controller/DetectControllerV2.py

@@ -419,9 +419,10 @@ class DetectControllerViewV2(View):
 
                 p['borderCoords'] = '' if p['borderCoords'] == '' else json.loads(p['borderCoords'])  # ai消息坐标信息
                 p['ai_event_type_list'] = []
-                if p['eventType'] in ai_all_event_type:  # 如果是ai消息类型,则分解eventType, 如:123 -> [1,2,3]
+                # 如果是ai消息类型,则分解eventType, 如:123 -> [1,2,3]
+                if p['borderCoords'] and p['eventType'] in ai_all_event_type:
                     p['ai_event_type_list'] = list(map(int, str(p['eventType'])))
-                p['ai_event_type_list'] += EquipmentInfoService.get_combo_types(p['eventType'])
+                p['ai_event_type_list'] += EquipmentInfoService.get_combo_types(p['eventType'], p['eventTag'])
                 res.append(p)
             return response.json(0, {'datas': res, 'count': count})
         except Exception as e:
@@ -463,6 +464,7 @@ class DetectControllerViewV2(View):
             return response.json(10044)
         return response.json(0)
 
+
 # 这个接口没有调用过,不敢动
 # http://test.dvema.com/detect/add?uidToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJQMldOR0pSRDJFSEE1RVU5MTExQSJ9.xOCI5lerk8JOs5OcAzunrKCfCrtuPIZ3AnkMmnd-bPY&n_time=1526845794&channel=1&event_type=51&is_st=0
 # 移动侦测接口

+ 94 - 0
Controller/InitController.py

@@ -1,9 +1,16 @@
 # @Author    : Rocky
 # @File      : InitController.py
 # @Time      : 2023/4/11 17:26
+import logging
+
+from django.contrib.auth.hashers import check_password
+from django.db import transaction
 from django.http import HttpResponse
 from django.views import View
 
+from Model.models import Device_User, Device_Info, Order_Model, UID_Bucket, Unused_Uid_Meal, GatewaySubDevice, \
+    FamilyRoomDevice, UidPushModel, UserExModel, UserOauth2Model, UidUserModel, GrantCodeModel, UserAppFrequencyModel, \
+    AppLogModel, UserFamily, FamilyMember, FamilyMemberJoin, SmartScene, DeviceSuperPassword
 from Object.ResponseObject import ResponseObject
 
 
@@ -22,8 +29,95 @@ class InitView(View):
     def validation(self, request_dict, operation):
         if operation == 'health-check':  # 负载均衡器健康检测接口
             return self.health_check(request_dict)
+        elif operation == 'delete-account':  # 网页删除账号
+            return self.delete_account(request_dict)
 
     @staticmethod
     def health_check(request_dict):
         response = ResponseObject()
         return response.json(0)
+
+    @staticmethod
+    def delete_account(request_dict):
+        """
+        网页删除账号
+        @param request_dict:输入
+        @request_dict username:用户名
+        @request_dict password:用户密码
+        @return 输出
+        """
+        LOGGER = logging.getLogger('info')
+        username = request_dict.get('username', None)
+        password = request_dict.get('password', None)
+        response = ResponseObject()
+        device_user_qs = Device_User.objects.filter(username=username).values('password', 'userID')
+        if not device_user_qs.exists():
+            return response.json(104)
+
+        cipher_password, user_id = device_user_qs[0]['password'], device_user_qs[0]['userID']
+        if not check_password(password, cipher_password):
+            return response.json(111)
+        try:
+            with transaction.atomic():
+                #  解绑用户与设备
+                uid_push_qs = UidPushModel.objects.filter(userID=user_id)
+                if uid_push_qs.exists():
+                    uid_push_qs.delete()
+                #  删除用户扩展信息
+                user_ex_qs = UserExModel.objects.filter(userID=user_id)
+                if user_ex_qs.exists():
+                    user_ex_qs.delete()
+                #  用户oauth2信息
+                user_oauth2_qs = UserOauth2Model.objects.filter(userID=user_id)
+                if user_oauth2_qs.exists():
+                    user_oauth2_qs.delete()
+                # 删除用户设备ap
+                uid_user_qs = UidUserModel.objects.filter(userID=user_id)
+                if uid_user_qs.exists():
+                    uid_user_qs.delete()
+                # 删除用户授权码
+                grant_code_qs = GrantCodeModel.objects.filter(userID=user_id)
+                if grant_code_qs.exists():
+                    grant_code_qs.delete()
+                #  删除用户使用APP频率
+                user_app_Frequency_qs = UserAppFrequencyModel.objects.filter(user_id=user_id)
+                if user_app_Frequency_qs.exists():
+                    user_app_Frequency_qs.delete()
+                #  删除APP(设备)日志表
+                app_log_qs = AppLogModel.objects.filter(user_id=user_id)
+                if app_log_qs.exists():
+                    app_log_qs.delete()
+                # 删除家庭成员
+                family_qs = FamilyMember.objects.filter(user_id=user_id)
+                if family_qs.exists():
+                    family_qs.delete()
+                # 删除家庭成员加入
+                family_join_qs = FamilyMemberJoin.objects.filter(user_id=user_id)
+                if family_join_qs.exists():
+                    family_join_qs.delete()
+                # 删除用户家庭
+                user_family_qs = UserFamily.objects.filter(user_id=user_id)
+                if user_family_qs.exists():
+                    user_family_qs.delete()
+                # 删除智能场景
+                smart_scene_qs = SmartScene.objects.filter(user_id=user_id)
+                if smart_scene_qs.exists():
+                    smart_scene_qs.delete()
+                # 删除超级密码请求信息
+                device_super_qs = DeviceSuperPassword.objects.filter(userID=user_id)
+                if device_super_qs.exists():
+                    device_super_qs.delete()
+                #  删除设备信息
+                device_info_qs = Device_Info.objects.filter(userID=user_id)
+                if device_info_qs.exists():
+                    device_info_qs.delete()
+                # 删除用户订单信息
+                order_uid_qs = Order_Model.objects.filter(userID=user_id)
+                if order_uid_qs.exists():
+                    order_uid_qs.delete()
+                Device_User.objects.filter(userID=user_id).delete()
+                LOGGER.info('{}已注销'.format(username))
+                return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500)

+ 3 - 0
Controller/SensorGateway/GatewayDeviceController.py

@@ -178,6 +178,9 @@ class GatewayDeviceView(View):
                             socket_schedule_qs = SocketSchedule.objects.filter(device_id=device_id)
                             if socket_schedule_qs.exists():
                                 socket_schedule_qs.delete()
+                            scene_log_qs = SceneLog.objects.filter(device_id=serial_number)
+                            if scene_log_qs.exists():
+                                scene_log_qs.delete()
 
                         # 如果有子设备,删除子设备和关联的场景数据
                         gateway_qs = GatewaySubDevice.objects.filter(device_id=device_id)

+ 0 - 1
Controller/UserController.py

@@ -4308,7 +4308,6 @@ def deleteAccount(request):
         hadUnUseSevice = Unused_Uid_Meal.objects.filter(uid__in=orderUserIds)
         if hadUnUseSevice.exists():
             return response.json(10046)
-        # return HttpResponse(list(hadUseSevice.values()))
         delUser.delete()
         return response.json(0)
 

+ 14 - 0
Model/models.py

@@ -354,6 +354,8 @@ class EquipmentInfoMonday(models.Model):
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
     storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
     border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    # (51,)表示一个事件标签。(51,57,)两个事件标签
+    event_tag = models.CharField(blank=True, default='', db_index=True, max_length=128, verbose_name=u'事件标签')
     add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
 
     def __str__(self):
@@ -386,6 +388,8 @@ class EquipmentInfoTuesday(models.Model):
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
     storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
     border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    # (51,)表示一个事件标签。(51,57,)两个事件标签
+    event_tag = models.CharField(blank=True, default='', db_index=True, max_length=128, verbose_name=u'事件标签')
     add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
 
     def __str__(self):
@@ -418,6 +422,8 @@ class EquipmentInfoWednesday(models.Model):
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
     storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
     border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    # (51,)表示一个事件标签。(51,57,)两个事件标签
+    event_tag = models.CharField(blank=True, default='', db_index=True, max_length=128, verbose_name=u'事件标签')
     add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
 
     def __str__(self):
@@ -450,6 +456,8 @@ class EquipmentInfoThursday(models.Model):
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
     storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
     border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    # (51,)表示一个事件标签。(51,57,)两个事件标签
+    event_tag = models.CharField(blank=True, default='', db_index=True, max_length=128, verbose_name=u'事件标签')
     add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
 
     def __str__(self):
@@ -482,6 +490,8 @@ class EquipmentInfoFriday(models.Model):
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
     storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
     border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    # (51,)表示一个事件标签。(51,57,)两个事件标签
+    event_tag = models.CharField(blank=True, default='', db_index=True, max_length=128, verbose_name=u'事件标签')
     add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
 
     def __str__(self):
@@ -514,6 +524,8 @@ class EquipmentInfoSaturday(models.Model):
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
     storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
     border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    # (51,)表示一个事件标签。(51,57,)两个事件标签
+    event_tag = models.CharField(blank=True, default='', db_index=True, max_length=128, verbose_name=u'事件标签')
     add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
 
     def __str__(self):
@@ -546,6 +558,8 @@ class EquipmentInfoSunday(models.Model):
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
     storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
     border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    # (51,)表示一个事件标签。(51,57,)两个事件标签
+    event_tag = models.CharField(blank=True, default='', db_index=True, max_length=128, verbose_name=u'事件标签')
     add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
 
     def __str__(self):

+ 9 - 2
Service/EquipmentInfoService.py

@@ -193,7 +193,7 @@ class EquipmentInfoService:
         equipment_info_qs = equipment_info_qs.values('id', 'device_uid', 'device_nick_name', 'channel', 'event_type',
                                                      'status', 'answer_status', 'alarm',
                                                      'event_time', 'receive_time', 'is_st', 'add_time',
-                                                     'storage_location', 'border_coords', 'tab_val')
+                                                     'storage_location', 'border_coords', 'tab_val', 'event_tag')
 
         equipment_info_qs = equipment_info_qs.order_by('-event_time')
         qs_page = equipment_info_qs[(page - 1) * size:page * size]
@@ -212,6 +212,7 @@ class EquipmentInfoService:
             item['receiveTime'] = item['receive_time']
             item['addTime'] = item['add_time']
             item['borderCoords'] = item['border_coords']
+            item['eventTag'] = item['event_tag']
             item.pop('device_uid')
             item.pop('device_nick_name')
             item.pop('channel')
@@ -221,6 +222,7 @@ class EquipmentInfoService:
             item.pop('add_time')
             item.pop('border_coords')
             item.pop('tab_val')
+            item.pop('event_tag')
         return qs_page
 
     @classmethod
@@ -315,18 +317,23 @@ class EquipmentInfoService:
         return equipment_info
 
     @classmethod
-    def get_combo_types(cls, event_type):
+    def get_combo_types(cls, event_type, event_tag):
         """
         获取设备算法组合类型
         51:移动侦测,52:传感器报警,53:影像遗失,54:PIR,55:门磁报警,56:外部发报,57:人型报警(提示:有人出现),58:车型,59:宠物,60:人脸,61:异响,
         62:区域闯入,63:区域闯出,64:长时间无人检测,65:长时间无人检测
         0:代表空字符,702:摄像头休眠,703:摄像头唤醒,704:电量过低
         AWS AI识别 1:人形,2:车型,3:宠物,4:包裹。云端AI类型
+        @param event_tag:
         @param event_type:
         @return:
         """
         try:
             types = []
+            if event_tag:
+                res = event_tag.split(',')
+                types = [int(var) for var in res if var]
+                return types
             res_type = cls.is_type_exist(event_type)
             if res_type == 0:
                 return types