Browse Source

新增查询推送返回算法组合类型

zhangdongming 2 years ago
parent
commit
d2d91f5d37
2 changed files with 79 additions and 22 deletions
  1. 8 22
      Controller/DetectControllerV2.py
  2. 71 0
      Service/EquipmentInfoService.py

+ 8 - 22
Controller/DetectControllerV2.py

@@ -298,10 +298,6 @@ class DetectControllerViewV2(View):
         if not region:
             return response.json(444, 'region')
         region = int(region)
-        # now_time = int(time.time())
-
-        # qs = Equipment_Info.objects.filter(userID_id=userID).order_by('-eventTime')
-        # qs = qs.filter(eventTime__gt=now_time - 3600 * 168)
         try:
             # 根据时间筛选消息推送
             if startTime and endTime:
@@ -314,19 +310,9 @@ class DetectControllerViewV2(View):
                 qs, count = EquipmentInfoService.get_equipment_info_week_all(page, line, userID, startTime, endTime,
                                                                              eventType,
                                                                              request_dict.get('uids', None))
-            # if startTime and endTime:
-            #     qs = qs.filter(eventTime__range=(startTime, endTime))
-            # if eventType:
-            #     if ',' in eventType:  # 兼容AI查询
-            #         eventTypeList = eventType.split(',')
-            #         eventTypeList = [int(i.strip()) for i in eventTypeList]
-            #         qs = qs.filter(eventType__in=eventTypeList)
-            #     else:
-            #         qs = qs.filter(eventType=eventType)
             uids = request_dict.get('uids', None)
             if uids:
                 uid_list = uids.split(',')
-                # qs = qs.filter(devUid__in=uid_list)
                 dvqs = Device_Info.objects.filter(UID__in=uid_list, userID_id=userID).values('UID', 'Type', 'NickName')
                 uid_type_dict = {}
                 for dv in dvqs:
@@ -336,14 +322,8 @@ class DetectControllerViewV2(View):
                 uid_type_dict = {}
                 for dv in dvqs:
                     uid_type_dict[dv['UID']] = {'type': dv['Type'], 'NickName': dv['NickName']}
-            # print(uid_type_dict)
             if not qs or count == 0 or not qs.exists():
                 return response.json(0, {'datas': [], 'count': 0})
-            # qs = qs.values('id', 'devUid', 'devNickName', 'Channel', 'eventType', 'status', 'alarm', 'eventTime',
-            #                'receiveTime', 'is_st', 'addTime', 'storage_location', 'borderCoords')
-
-            # count = qs.count()
-            # qr = qs[(page - 1) * line:page * line]
             qr = qs
             res = []
             auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
@@ -399,7 +379,8 @@ class DetectControllerViewV2(View):
                         bucket_name = vodqs[0]['bucket__bucket']
                         endpoint = vodqs[0]['bucket__endpoint']
                         bucket = oss2.Bucket(auth, endpoint, bucket_name)
-                        ts = '{uid}/vod{channel}/{etime}/ts0.ts'.format(uid=devUid, channel=p['Channel'], etime=eventTime)
+                        ts = '{uid}/vod{channel}/{etime}/ts0.ts'.format(uid=devUid, channel=p['Channel'],
+                                                                        etime=eventTime)
                         if storage_location == 1:  # oss
                             thumb0 = bucket.sign_url('GET', ts, 3600,
                                                      params={'x-oss-process': 'video/snapshot,t_0000,w_700'})
@@ -430,7 +411,8 @@ class DetectControllerViewV2(View):
                             p['img_list'].append(img)
                         elif region == 2 and storage_location == 2:  # 2:国内,aws
                             response_url = aws_s3_guonei.generate_presigned_url('get_object',
-                                                                                Params={'Bucket': 'push', 'Key': thumbspng},
+                                                                                Params={'Bucket': 'push',
+                                                                                        'Key': thumbspng},
                                                                                 ExpiresIn=300)
                             img = response_url
                             p['img_list'].append(img)
@@ -451,11 +433,15 @@ class DetectControllerViewV2(View):
                 p['ai_event_type_list'] = []
                 if p['eventType'] in ai_all_event_type:  # 如果是ai消息类型,则分解eventType, 如:123 -> [1,2,3]
                     p['ai_event_type_list'] = list(map(int, str(p['eventType'])))
+                p['combo_event_types'] = EquipmentInfoService.get_combo_types(p['eventType'])
                 res.append(p)
             return response.json(0, {'datas': res, 'count': count})
         except Exception as e:
+            print(repr(e))
             return response.json(474)
 
+
+
     def do_update_interval(self, userID, request_dict, response):
         uid = request_dict.get('uid', None)
         interval = request_dict.get('interval', None)

+ 71 - 0
Service/EquipmentInfoService.py

@@ -309,3 +309,74 @@ class EquipmentInfoService:
         logger.info(type(equipment_info))
         logger.info(equipment_info)
         return equipment_info
+
+    @classmethod
+    def get_combo_types(cls, event_type):
+        """
+        获取设备算法组合类型
+        @param event_type:
+        @return:
+        """
+        try:
+            types = []
+            res_type = cls.is_type_exist(event_type)
+            if res_type == 0:
+                return types
+            combo_types = [51, 57, 58, 60]
+            event_type = str(event_type)
+            len_type = len(event_type)
+            for i in range(0, len_type):
+                e_type = int(event_type[len_type - 1 - i])
+                if e_type == 1:
+                    types.append(combo_types[i])
+            return types
+
+        except Exception as e:
+            print('推送错误异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return event_type
+
+    @classmethod
+    def is_type_exist(cls, event_type):
+        """
+        判断类型是否存在列表
+        @param event_type:
+        @return: 0 or event_type
+        """
+        combo_types = cls.combo_type_all()
+        if not combo_types:
+            return 0
+        if event_type in combo_types:
+            return event_type
+        return 0
+
+    @staticmethod
+    def combo_type_all():
+        """
+        获取所有组合类型
+        @return:
+        """
+        arr_list = []
+        event_arr = []
+        resource_list = [1, 2, 4, 8]
+        for i in range(2, len(resource_list) + 1):
+            arr_list += list(itertools.combinations(resource_list, i))  # 表示从 [1,2,3,4] 中选出 3个元素的组合情况
+        for i in arr_list:
+            val = 0
+            for item in i:
+                val += item
+            event_arr.append(int(EquipmentInfoService.dec_to_bin(val)))
+        return event_arr
+
+    @staticmethod
+    def dec_to_bin(num):
+        """
+        十进制转二进制
+        @param num:
+        @return:
+        """
+        result = ""
+        while num != 0:
+            ret = num % 2
+            num //= 2
+            result = str(ret) + result
+        return result