|
@@ -7,6 +7,7 @@
|
|
|
@Software: PyCharm
|
|
|
"""
|
|
|
import itertools
|
|
|
+from Ansjer.config import LOGGER
|
|
|
from django.db.models import Value, CharField, Q
|
|
|
|
|
|
from Model.models import EquipmentInfo1, EquipmentInfo2, EquipmentInfo3, EquipmentInfo4, EquipmentInfo5, \
|
|
@@ -575,3 +576,79 @@ class EquipmentInfoService:
|
|
|
equipment_info_union = cls.get_equipment_info_union_page(equipment_info_union, 1, 10)
|
|
|
count = equipment_info_union.count()
|
|
|
return equipment_info_union, count
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def union_equipment_info_v2(cls, user_id, uid_list, event_type, start_time, end_time, page, line, event_time=None):
|
|
|
+ """
|
|
|
+ 联表查询推送数据V2
|
|
|
+ @param user_id: 用户id
|
|
|
+ @param uid_list: uid列表
|
|
|
+ @param event_type: 事件类型
|
|
|
+ @param start_time:
|
|
|
+ @param end_time:
|
|
|
+ @param page: 页数
|
|
|
+ @param line: 条数
|
|
|
+ @param event_time: 设备触发时间
|
|
|
+ @return: 响应结果
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ kwargs = {
|
|
|
+ 'device_user_id': user_id,
|
|
|
+ 'event_time__range': (start_time, end_time),
|
|
|
+ }
|
|
|
+ event_type_kwargs = {
|
|
|
+ 'device_user_id': user_id,
|
|
|
+ 'event_time__range': (start_time, end_time),
|
|
|
+ }
|
|
|
+ if uid_list:
|
|
|
+ kwargs['device_uid__in'] = uid_list
|
|
|
+ event_type_kwargs['device_uid__in'] = uid_list
|
|
|
+ event_type_list = []
|
|
|
+ if event_type:
|
|
|
+ event_type_list = cls.get_comb_event_type(event_type)
|
|
|
+ event_type_list = list(set(event_type_list))
|
|
|
+ tags = cls.get_event_tag(event_type)
|
|
|
+ if event_type_list:
|
|
|
+ event_type_kwargs['event_type__in'] = event_type_list
|
|
|
+ event_type_kwargs['event_tag'] = ''
|
|
|
+ kwargs['event_tag__regex'] = tags
|
|
|
+ elif tags:
|
|
|
+ kwargs['event_tag__regex'] = tags
|
|
|
+ if event_time:
|
|
|
+ kwargs['event_time'] = event_time
|
|
|
+ event_type_kwargs['event_time'] = event_time
|
|
|
+ kwargs.pop('event_tag__regex', None)
|
|
|
+ event_type_kwargs.pop('event_tag', None)
|
|
|
+
|
|
|
+ equipment_info_list = []
|
|
|
+ total_count = 0
|
|
|
+
|
|
|
+ for i in range(1, 41):
|
|
|
+ model_class = globals()[f'EquipmentInfo{i}']
|
|
|
+ if event_type_list:
|
|
|
+ queryset = model_class.objects.filter(Q(**kwargs) | Q(**event_type_kwargs))
|
|
|
+ else:
|
|
|
+ queryset = model_class.objects.filter(**kwargs)
|
|
|
+
|
|
|
+ count = queryset.count() # 单独对每个表计算记录数
|
|
|
+ total_count += count
|
|
|
+
|
|
|
+ if count > 0: # 只有在有数据的情况下才加入到 union 查询
|
|
|
+ equipment_info_list.append(
|
|
|
+ queryset.annotate(
|
|
|
+ tab_val=Value(str(i + 10), output_field=CharField())
|
|
|
+ )
|
|
|
+ )
|
|
|
+
|
|
|
+ if total_count == 0:
|
|
|
+ return None, 0
|
|
|
+
|
|
|
+ equipment_info_union = equipment_info_list[0]
|
|
|
+ for equipment_info in equipment_info_list[1:]:
|
|
|
+ equipment_info_union = equipment_info_union.union(equipment_info, all=True)
|
|
|
+
|
|
|
+ equipment_info_union = cls.get_equipment_info_union_page(equipment_info_union, page, line)
|
|
|
+ return equipment_info_union, total_count
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.error(f'user:{user_id},error_line:{e.__traceback__.tb_lineno},error_msg:{repr(e)}')
|