Răsfoiți Sursa

新增云存标签筛选,新增设备、订单、消息类型枚举类

zhangdongming 2 ani în urmă
părinte
comite
62c569947a

+ 15 - 7
Controller/CloudStorage.py

@@ -456,6 +456,7 @@ class CloudStorageView(View):
         end_time = request_dict.get('endTime', None)
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
+        event_types = request_dict.get('eventTypes', None)
 
         if not all([uid, channel, start_time, end_time]):
             return response.json(444)
@@ -491,13 +492,19 @@ class CloudStorageView(View):
             "dvQsModelOverTime": device_info_qs_time_over,
             "UidBucketModelOverTime": uid_bucket_qs_time_over,
         })
-
+        type_list = []
+        if event_types:
+            if ',' in event_types:
+                type_list = event_types.split(',')
+                type_list = [int(i.strip()) for i in type_list]
+            else:
+                type_list = [int(event_types)]
         split_vod_hls_obj = SplitVodHlsObject()
-        vod_hls_qs = split_vod_hls_obj.get_vod_hls_data(uid=uid, channel=channel, end_time__gte=now_time,
-                                                        start_time__range=(start_time, end_time)).values("id",
-                                                                                                         "start_time",
-                                                                                                         "sec", "fg",
-                                                                                                         "bucket_id")
+        vod_hls_qs = split_vod_hls_obj.get_vod_hls_data(uid=uid, channel=channel,
+                                                        end_time__gte=now_time,
+                                                        start_time__range=(start_time, end_time),
+                                                        type_list=type_list) \
+            .values("id", "start_time", "sec", "fg", "bucket_id")
 
         vod_play_list = []
         if not vod_hls_qs.exists():
@@ -546,7 +553,8 @@ class CloudStorageView(View):
                 'thumb': response_url,
                 'sec': vod['sec'],
                 'ts_num': ts_num,
-                'vod_id': vod['id']
+                'vod_id': vod['id'],
+                'types': split_vod_hls_obj.query_tag_type_list(vod['id'])
             })
         vod_play_list = sorted(vod_play_list, key=lambda item: -item['start_time'])
         generate_presigned_over_time = int(time.time())

+ 45 - 0
Object/Enums/DeviceTypeEnum.py

@@ -0,0 +1,45 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : MessageTypeEnum.py
+@Time    : 2023/2/13 15:50
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+from enum import IntEnum, unique
+
+
+@unique
+class DeviceTypeEnum(IntEnum):
+
+    ASJ_DEVICE_TYPE_DVR = 1  # DVR
+    ASJ_DEVICE_TYPE_NVR = 2  # NVR
+    ASJ_DEVICE_TYPE_POE_NVR = 3  # POE NVR
+    ASJ_DEVICE_TYPE_WIRELESS_NVR = 4  # 无线 NVR
+    ASJ_DEVICE_TYPE_POE_IPC = 5  # POE IPC
+    ASJ_DEVICE_TYPE_BOLT_IPC = 6  # bolt ipc
+    ASJ_DEVICE_TYPE_IPC = 7  # IPC
+    ASJ_DEVICE_TYPE_KAPIANJI = 8  # 客户使用
+    ASJ_DEVICE_TYPE_FISHEYE = 9  # 客户使用
+    ASJ_DEVICE_TYPE_PTZ_IPC = 10  # PTZ IPC
+    ASJ_DEVICE_TYPE_C611 = 11  # 智能摄像机 C611
+    ASJ_DEVICE_TYPE_C612 = 12  # 智能摄像机 C612
+    ASJ_DEVICE_TYPE_C199 = 13  # 智能摄像机 C199
+    ASJ_DEVICE_TYPE_C190 = 14  # 智能摄像机 C190
+    ASJ_DEVICE_TYPE_C199PRO = 15  # 智能摄像机 C199Pro
+    ASJ_DEVICE_TYPE_C115 = 16  # 智能摄像机 C115
+    ASJ_DEVICE_TYPE_C289 = 17  # 智能摄像机 C289
+    ASJ_DEVICE_TYPE_C308 = 18  # 智能摄像机 C308
+    ASJ_DEVICE_TYPE_C513 = 20  # 智能摄像机 C513
+    ASJ_DEVICE_TYPE_C308_5M = 21  # 智能摄像机 C308_5M
+    ASJ_DEVICE_TYPE_C190Pro = 22  # 智能摄像机 C190Pro
+    ASJ_DEVICE_TYPE_C287 = 23  # 智能摄像机 C287
+    ASJ_DEVICE_TYPE_C516 = 24  # 智能摄像机 C516
+    ASJ_DEVICE_TYPE_C188 = 25  # 智能摄像机 C188
+    ASJ_DEVICE_TYPE_C2894G = 26  # 智能摄像机 C289 带4G网络
+    ASJ_DEVICE_TYPE_C296 = 27  # 智能摄像机 C296
+    ASJ_DEVICE_TYPE_C183 = 28  # 智能摄像机 C183
+    ASJ_DEVICE_TYPE_C518 = 29  # 智能摄像机 C518
+    ASJ_DEVICE_TYPE_C290 = 30  # 智能摄像机 C290
+    ASJ_DEVICE_TYPE_C182 = 31  # 智能摄像机 C182
+    ASJ_DEVICE_TYPE_C225 = 32  # 智能摄像机 C225

+ 31 - 0
Object/Enums/MessageTypeEnum.py

@@ -0,0 +1,31 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : MessageTypeEnum.py
+@Time    : 2023/2/13 15:50
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+from enum import IntEnum, unique
+
+
+@unique
+class MessageTypeEnum(IntEnum):
+    AI_HUMAN_SHAPE = 1  # ai人形
+    AI_CAT = 2  # ai车型
+    AI_PET = 3  # ai宠物
+    AI_PARCEL = 4  # ai包裹
+    MOTION_DETECTION = 51  # 移动侦测
+    SENSOR_ALARM = 52  # 传感器报警
+    IMAGE_LOSS = 53  # 影像遗失
+    PIR = 54  # PIR
+    DOOR_MAGNETIC_ALARM = 55  # 门磁报警
+    EXTERNAL_TRANSMISSION = 56  # 外部发报
+    HUMAN_SHAPE = 57  # 人形报警
+    CAT = 58  # 车型
+    PET = 59  # 宠物
+    FACE = 60  # 人脸
+    ABNORMAL_SOUND = 61  # 异响
+    CAMERA_SLEEP = 702  # 摄像头休眠
+    CAMERA_WAKE_UP = 703  # 摄像头唤醒
+    LOW_BATTERY = 704  # 电量过低

+ 24 - 0
Object/Enums/OrderEnum.py

@@ -0,0 +1,24 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : OrderEnum.py
+@Time    : 2023/2/7 9:09
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+from enum import IntEnum, unique
+
+
+@unique
+class OrderTypeEnum(IntEnum):
+    WAIT = 0  # 待支付
+    SUCCESS = 1  # 支付成功
+    CANCEL = 2  # 取消支付
+    REFUND_FAIL = 4  # 退款失败
+    REFUND = 5  # 全额退款
+    REBATES = 6  # 部分退款
+    PAYPAL_REFUND = 7  # PayPal已退款
+    BEING_PROCESSED = 9  # 处理中
+    FAIL = 10  # 支付失败
+
+

+ 72 - 1
Service/VodHlsService.py

@@ -3,10 +3,11 @@
 # @Time      : 2023/2/1 15:57
 import datetime
 
+from django.db import connection
 from django.db.models import Count
 
 from Model.models import VodHlsMon, VodHlsTues, VodHlsWed, VodHlsThur, VodHlsFri, VodHlsSat, VodHlsSun, VodHlsTag, \
-    AiService
+    AiService, VodHlsTagType
 from Service.CommonService import CommonService
 
 
@@ -97,18 +98,25 @@ class SplitVodHlsObject:
                     day_list.append(week)
             for week in day_list:
                 if week == 1:
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_mon = VodHlsMon.objects.filter(**kwargs)
                 elif week == 2:
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_tus = VodHlsTues.objects.filter(**kwargs)
                 elif week == 3:
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_wed = VodHlsWed.objects.filter(**kwargs)
                 elif week == 4:
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_thur = VodHlsThur.objects.filter(**kwargs)
                 elif week == 5:
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_fri = VodHlsFri.objects.filter(**kwargs)
                 elif week == 6:
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_sat = VodHlsSat.objects.filter(**kwargs)
                 elif week == 7:
+                    kwargs = self.vod_query_param(week, **kwargs)
                     vod_hls_sun = VodHlsSun.objects.filter(**kwargs)
             vod_hls = vod_hls.union(vod_hls_mon, vod_hls_tus, vod_hls_wed, vod_hls_thur, vod_hls_fri, vod_hls_sat,
                                     vod_hls_sun)
@@ -176,3 +184,66 @@ class SplitVodHlsObject:
         except Exception as e:
             print('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return False
+
+    @classmethod
+    def vod_query_param(cls, week, **kwargs):
+        vod_ids = cls.query_tag_by_types(kwargs.get('uid'),
+                                         kwargs.get('start_time__range'),
+                                         kwargs.get('type_list'), week)
+        if vod_ids:
+            kwargs['id__in'] = vod_ids
+        kwargs.pop('type_list')
+        return kwargs
+
+    @classmethod
+    def query_tag_by_types(cls, uid, time, types, num):
+        """
+        根据类型查询云存标签关联ID
+        @return:
+        """
+        try:
+            if not types or len(types) == 0:
+                return []
+            cursor = connection.cursor()
+            param_list = [int(time[0]), int(time[1]), uid, num]
+            sql = 'SELECT vod_hls_id FROM '
+            sql += 'vod_hls_tag vht INNER JOIN vod_hls_tag_type vhtt ON vht.id = vhtt.tag_id '
+            sql += 'WHERE vht.ai_event_time >= %s AND vht.ai_event_time <= %s '
+            sql += 'AND vht.uid = %s '
+            sql += 'AND tab_num = %s '
+            if types:
+                sql += 'AND vhtt.type IN %s '
+                param_list.append(types)
+            sql += 'GROUP BY vht.vod_hls_id '
+
+            cursor.execute(sql, param_list)
+            data_list = cursor.fetchall()
+            cursor.close()  # 执行完,关闭
+            connection.close()
+            data_list = [val[0] for val in data_list]
+            return data_list
+        except Exception as e:
+            print('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return False
+
+    @classmethod
+    def query_tag_type_list(cls, vod_id):
+        """
+        根据云存ID获取AI类型
+        @return:
+        """
+        try:
+            cursor = connection.cursor()
+            sql = 'SELECT vhtt.type FROM '
+            sql += 'vod_hls_tag vht INNER JOIN vod_hls_tag_type vhtt ON vht.id = vhtt.tag_id '
+            sql += 'WHERE vht.vod_hls_id = %s  '
+
+            cursor.execute(sql, [vod_id])
+            data_list = cursor.fetchall()
+            cursor.close()  # 执行完,关闭
+            connection.close()
+            data_list = [val[0] for val in data_list]
+            return data_list
+        except Exception as e:
+            print('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return []