Prechádzať zdrojové kódy

Merge branch 'lang' into test

lang 3 rokov pred
rodič
commit
3ce6d2a659
1 zmenil súbory, kde vykonal 40 pridanie a 4 odobranie
  1. 40 4
      Service/EquipmentInfoService.py

+ 40 - 4
Service/EquipmentInfoService.py

@@ -8,7 +8,7 @@
 """
 import datetime
 import time
-
+import itertools
 from django.db.models import Value, CharField
 
 from Model.models import EquipmentInfoMonday, EquipmentInfoTuesday, EquipmentInfoWednesday, EquipmentInfoThursday, \
@@ -165,10 +165,9 @@ class EquipmentInfoService:
         if user_id:
             qs = qs.filter(device_user_id=user_id)
         if event_type:
-            # 兼容AI查询
+            # 多类型查询
             if ',' in event_type:
-                eventTypeList = event_type.split(',')
-                eventTypeList = [int(i.strip()) for i in eventTypeList]
+                eventTypeList = cls.get_comb_event_type(event_type)
                 qs = qs.filter(event_type__in=eventTypeList)
             else:
                 qs = qs.filter(event_type=event_type)
@@ -220,3 +219,40 @@ class EquipmentInfoService:
             item.pop('border_coords')
             item.pop('tab_val')
         return qs_page
+
+    @classmethod
+    def get_comb_event_type(cls, event_type):
+        """
+        重新组合ai消息类型查询,使其支持ai多标签查询
+        @param event_type: 消息类型
+        @return: event_type_list 消息类型数组
+        """
+        event_type_list = event_type.split(',')
+        event_type_list = [int(i.strip()) for i in event_type_list]
+        ai_event_type_list = []
+        for key, val in enumerate(event_type_list):
+            if val <= 4:  # 分离出ai类型,以便后续组合ai标签,目前只存在4个ai类型1,2,3,4
+                ai_event_type_list.append(val)
+                del (event_type_list[key])
+        if len(ai_event_type_list) < 1:
+            return event_type_list
+        ai_event_type_list.sort()
+        type = [1, 2, 3, 4]  # AI目前所有的标签,1人,2车,3宠物,4包裹,后续有新类型需要这里加
+        comb_ai_event_type = []
+        seen = set()
+        for i in range(1, len(type) + 1):  # 计算所有组合,如[1, 2, 3, 4], 4取1,4取2,4取3,4取4
+            for s in itertools.combinations(type, i):
+                if s not in seen:  # 去除重复项, 如a=[1,2,3,4,4],会有两个[1,2,3,4,4],[1,2,3,4,4]的组合
+                    seen.add(s)
+                    s_list = list(s)
+                    for ai_event_type in ai_event_type_list:
+                        if ai_event_type in s_list:  # 排除没有选择的标签组合
+                            if s_list not in comb_ai_event_type:
+                                s_list = [str(v) for v in s_list]
+                                comb_ai_event_type.append(s_list)
+        regroup_list = []
+        for val in comb_ai_event_type:  # 组合ai类型组合,如[[2,3],[1,3]] -> [23, 13]
+            val = ''.join(val)
+            regroup_list.append(int(val))
+        event_type_list = regroup_list + event_type_list  # 加上普通移动消息类型
+        return event_type_list