|
@@ -8,7 +8,7 @@
|
|
"""
|
|
"""
|
|
import datetime
|
|
import datetime
|
|
import time
|
|
import time
|
|
-
|
|
|
|
|
|
+import itertools
|
|
from django.db.models import Value, CharField
|
|
from django.db.models import Value, CharField
|
|
|
|
|
|
from Model.models import EquipmentInfoMonday, EquipmentInfoTuesday, EquipmentInfoWednesday, EquipmentInfoThursday, \
|
|
from Model.models import EquipmentInfoMonday, EquipmentInfoTuesday, EquipmentInfoWednesday, EquipmentInfoThursday, \
|
|
@@ -165,10 +165,9 @@ class EquipmentInfoService:
|
|
if user_id:
|
|
if user_id:
|
|
qs = qs.filter(device_user_id=user_id)
|
|
qs = qs.filter(device_user_id=user_id)
|
|
if event_type:
|
|
if event_type:
|
|
- # 兼容AI查询
|
|
|
|
|
|
+ # 多类型查询
|
|
if ',' in event_type:
|
|
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)
|
|
qs = qs.filter(event_type__in=eventTypeList)
|
|
else:
|
|
else:
|
|
qs = qs.filter(event_type=event_type)
|
|
qs = qs.filter(event_type=event_type)
|
|
@@ -220,3 +219,40 @@ class EquipmentInfoService:
|
|
item.pop('border_coords')
|
|
item.pop('border_coords')
|
|
item.pop('tab_val')
|
|
item.pop('tab_val')
|
|
return qs_page
|
|
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
|