EquipmentInfoService.py 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : EquipmentInfoService.py
  4. @Time : 2022/4/14 17:28
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import itertools
  10. from Ansjer.config import CONFIG_INFO, CONFIG_EUR
  11. from django.db.models import Value, CharField, Q
  12. from Model.models import EquipmentInfo1, EquipmentInfo2, EquipmentInfo3, EquipmentInfo4, EquipmentInfo5, \
  13. EquipmentInfo6, EquipmentInfo7, EquipmentInfo8, EquipmentInfo9, EquipmentInfo10, \
  14. EquipmentInfo11, EquipmentInfo12, EquipmentInfo13, EquipmentInfo14, EquipmentInfo15, EquipmentInfo16, \
  15. EquipmentInfo17, EquipmentInfo18, EquipmentInfo19, EquipmentInfo20, \
  16. EquipmentInfo21, EquipmentInfo22, EquipmentInfo23, EquipmentInfo24, EquipmentInfo25, EquipmentInfo26, \
  17. EquipmentInfo27, EquipmentInfo28, EquipmentInfo29, EquipmentInfo30, \
  18. EquipmentInfo31, EquipmentInfo32, EquipmentInfo33, EquipmentInfo34, EquipmentInfo35, EquipmentInfo36, \
  19. EquipmentInfo37, EquipmentInfo38, EquipmentInfo39, EquipmentInfo40
  20. from Object.RedisObject import RedisObject
  21. EQUIPMENT_INFO_MODEL_LIST = [
  22. EquipmentInfo1, EquipmentInfo2, EquipmentInfo3, EquipmentInfo4, EquipmentInfo5, EquipmentInfo6,
  23. EquipmentInfo7, EquipmentInfo8, EquipmentInfo9, EquipmentInfo10,
  24. EquipmentInfo11, EquipmentInfo12, EquipmentInfo13, EquipmentInfo14, EquipmentInfo15, EquipmentInfo16,
  25. EquipmentInfo17, EquipmentInfo18, EquipmentInfo19, EquipmentInfo20,
  26. EquipmentInfo21, EquipmentInfo22, EquipmentInfo23, EquipmentInfo24, EquipmentInfo25, EquipmentInfo26,
  27. EquipmentInfo27, EquipmentInfo28, EquipmentInfo29, EquipmentInfo30,
  28. EquipmentInfo31, EquipmentInfo32, EquipmentInfo33, EquipmentInfo34, EquipmentInfo35, EquipmentInfo36,
  29. EquipmentInfo37, EquipmentInfo38, EquipmentInfo39, EquipmentInfo40
  30. ]
  31. class EquipmentInfoService:
  32. """
  33. 推送数据分表,封装常用函数
  34. """
  35. @classmethod
  36. def get_comb_event_type(cls, event_type):
  37. """
  38. 重新组合ai消息类型查询,使其支持ai多标签查询
  39. @param event_type: 消息类型
  40. @return: event_type_list 消息类型数组
  41. """
  42. if ',' in event_type:
  43. event_type_list = event_type.split(',')
  44. event_type_list = [int(i.strip()) for i in event_type_list]
  45. else:
  46. event_type_list = [int(event_type)]
  47. ai_event_type_list = []
  48. normal_event_type_list = []
  49. a_type = [60, 61, 62, 63, 64, 65, 66]
  50. for val in event_type_list:
  51. if val <= 4: # 分离出ai类型,以便后续组合ai标签,目前只存在4个ai类型1,2,3,4
  52. ai_event_type_list.append(val)
  53. else:
  54. if val not in a_type:
  55. normal_event_type_list.append(val)
  56. if len(ai_event_type_list) < 1:
  57. return normal_event_type_list
  58. ai_event_type_list.sort()
  59. ai_type = [1, 2, 3, 4] # AI目前所有的标签,1人,2车,3宠物,4包裹,后续有新类型需要这里加, 后续会优化,存在表里,包裹存对应的aws标签
  60. comb_ai_event_type = []
  61. seen = set()
  62. for i in range(1, len(ai_type) + 1): # 计算所有组合,如[1, 2, 3, 4], 4取1,4取2,4取3,4取4
  63. for s in itertools.combinations(ai_type, i):
  64. if s not in seen: # 去除重复项, 如a=[1,2,3,4,4],会有两个[1,2,3,4,4],[1,2,3,4,4]的组合
  65. seen.add(s)
  66. s_list = list(s)
  67. for ai_event_type in ai_event_type_list:
  68. if ai_event_type in s_list: # 排除没有选择的标签组合
  69. if s_list not in comb_ai_event_type:
  70. s_list = [str(v) for v in s_list]
  71. comb_ai_event_type.append(s_list)
  72. regroup_list = []
  73. for val in comb_ai_event_type: # 组合ai类型组合,如[[2,3],[1,3]] -> [23, 13]
  74. val = ''.join(val)
  75. regroup_list.append(int(val))
  76. group_list = regroup_list + normal_event_type_list # 加上普通移动消息类型
  77. return group_list
  78. @classmethod
  79. def get_all_comb_event_type(cls):
  80. """
  81. 计算ai消息类型全组合
  82. @return: event_type_list ai所有消息类型数组
  83. """
  84. ai_type = [1, 2, 3, 4] # AI目前所有的标签,1人,2车,3宠物,4包裹,后续有新类型需要这里加, 后续会优化,存在表里,包裹存对应的aws标签
  85. comb_ai_event_type = []
  86. for i in range(1, len(ai_type) + 1): # 计算所有组合,如[1, 2, 3, 4], 4取1,4取2,4取3,4取4
  87. for s in itertools.combinations(ai_type, i):
  88. s_list = list(s)
  89. s_list = [str(v) for v in s_list]
  90. comb_ai_event_type.append(s_list)
  91. regroup_list = []
  92. for val in comb_ai_event_type: # 组合ai类型组合,如[[2,3],[1,3]] -> [23, 13]
  93. val = ''.join(val)
  94. regroup_list.append(int(val))
  95. return regroup_list
  96. @classmethod
  97. def get_combo_types(cls, event_type, event_tag):
  98. """
  99. 获取设备算法组合类型
  100. 51:移动侦测,52:传感器报警,53:影像遗失,54:PIR,55:门磁报警,56:外部发报,57:人型报警(提示:有人出现),58:车型,59:宠物,60:人脸,61:异响,
  101. 62:区域闯入,63:区域闯出,64:长时间无人检测,65:长时间无人检测
  102. 0:代表空字符,702:摄像头休眠,703:摄像头唤醒,704:电量过低
  103. AWS AI识别 1:人形,2:车型,3:宠物,4:包裹。云端AI类型
  104. @param event_tag:
  105. @param event_type:
  106. @return:
  107. """
  108. try:
  109. types = []
  110. if event_tag:
  111. res = event_tag.split(',')
  112. types = [int(var) for var in res if var]
  113. return types
  114. res_type = cls.is_type_exist(event_type)
  115. if res_type == 0:
  116. return types
  117. combo_types = [51, 57, 58, 60, 59, 61, 62, 63, 64, 65]
  118. event_type = str(event_type)
  119. len_type = len(event_type)
  120. for i in range(0, len_type):
  121. e_type = int(event_type[len_type - 1 - i])
  122. if e_type == 1:
  123. types.append(combo_types[i])
  124. return types
  125. except Exception as e:
  126. print('推送错误异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  127. return event_type
  128. @staticmethod
  129. def is_combo_tag(event_type, event_tag):
  130. """
  131. 是否为多标签
  132. """
  133. if not event_tag:
  134. return False
  135. res = event_tag.split(',')
  136. types = [int(var) for var in res if var]
  137. if event_type in types and len(types) == 1:
  138. return False
  139. return True
  140. @classmethod
  141. def is_type_exist(cls, event_type):
  142. """
  143. 判断类型是否存在列表
  144. @param event_type:
  145. @return: 0 or event_type
  146. """
  147. combo_types = cls.combo_type_all()
  148. if not combo_types:
  149. return 0
  150. if event_type in combo_types:
  151. return event_type
  152. return 0
  153. @staticmethod
  154. def combo_type_all():
  155. """
  156. 获取所有组合类型
  157. @return:
  158. """
  159. arr_list = []
  160. event_arr = []
  161. resource_list = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
  162. for i in range(2, len(resource_list) + 1):
  163. arr_list += list(itertools.combinations(resource_list, i)) # 表示从 [1,2,3,4] 中选出 3个元素的组合情况
  164. for i in arr_list:
  165. val = 0
  166. for item in i:
  167. val += item
  168. event_arr.append(int(EquipmentInfoService.dec_to_bin(val)))
  169. return event_arr
  170. @staticmethod
  171. def dec_to_bin(num):
  172. """
  173. 十进制转二进制
  174. @param num:
  175. @return:
  176. """
  177. result = ""
  178. while num != 0:
  179. ret = num % 2
  180. num //= 2
  181. result = str(ret) + result
  182. return result
  183. @staticmethod
  184. def get_combo_type_bins(event_type):
  185. """
  186. 获取组合类型二进制列表
  187. @param event_type: 标签类型
  188. @return:
  189. """
  190. res_list = []
  191. try:
  192. if ',' in event_type:
  193. res_list = event_type.split(',')
  194. res_list = [int(i.strip()) for i in res_list]
  195. else:
  196. res_list = [int(event_type)]
  197. combo_types = [51, 57, 58, 60, 59, 61]
  198. for e_item in res_list:
  199. bins = EquipmentInfoService.combo_type_all()
  200. if e_item in combo_types:
  201. event_label = combo_types.index(e_item) + 1
  202. for item in bins:
  203. val = str(item)
  204. val_len = len(val)
  205. if val_len >= event_label and int(val[val_len - event_label]) == 1:
  206. res_list.append(int(item))
  207. return res_list
  208. except Exception as e:
  209. print('推送错误异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  210. return res_list
  211. @staticmethod
  212. def get_event_tag(event_type):
  213. """
  214. 获取标签用于筛选推送消息
  215. """
  216. if ',' in event_type:
  217. tags = ''
  218. res_list = event_type.split(',')
  219. tag_size = len(res_list)
  220. for i, item in enumerate(res_list):
  221. tags += ',' + str(item) + ','
  222. if i < (tag_size - 1):
  223. tags += '|'
  224. return tags
  225. else:
  226. return ',' + str(event_type) + ','
  227. @classmethod
  228. def union_equipment_info(cls, user_id, uid_list, event_type, start_time, end_time, page, line, event_time=None, channel=None):
  229. """
  230. 联表查询推送数据
  231. @param user_id:
  232. @param uid_list:
  233. @param event_type:
  234. @param start_time:
  235. @param end_time:
  236. @param page:
  237. @param line:
  238. @param event_time:
  239. @return:
  240. """
  241. try:
  242. kwargs = {
  243. 'device_user_id': user_id,
  244. 'event_time__range': (start_time, end_time),
  245. }
  246. event_type_kwargs = {
  247. 'device_user_id': user_id,
  248. 'event_time__range': (start_time, end_time),
  249. }
  250. if uid_list:
  251. kwargs['device_uid__in'] = uid_list
  252. event_type_kwargs['device_uid__in'] = uid_list
  253. event_type_list = []
  254. if event_type:
  255. # 多类型查询
  256. event_type_list = cls.get_comb_event_type(event_type)
  257. event_type_list = list(set(event_type_list))
  258. tags = cls.get_event_tag(event_type)
  259. if event_type_list:
  260. event_type_kwargs['event_type__in'] = event_type_list
  261. event_type_kwargs['event_tag'] = ''
  262. kwargs['event_tag__regex'] = tags
  263. elif tags:
  264. kwargs['event_tag__regex'] = tags
  265. if event_time:
  266. kwargs['event_time'] = event_time
  267. event_type_kwargs['event_time'] = event_time
  268. del kwargs['event_tag__regex']
  269. del event_type_kwargs['event_tag']
  270. if channel:
  271. kwargs['channel'] = channel
  272. event_type_kwargs['channel'] = channel
  273. if not event_type_list:
  274. # 新增tab_val字段记录表的标识:表编号+10
  275. equipment_info_1 = EquipmentInfo1.objects.filter(**kwargs).annotate(
  276. tab_val=Value('11', output_field=CharField()))
  277. equipment_info_2 = EquipmentInfo2.objects.filter(**kwargs).annotate(
  278. tab_val=Value('12', output_field=CharField()))
  279. equipment_info_3 = EquipmentInfo3.objects.filter(**kwargs).annotate(
  280. tab_val=Value('13', output_field=CharField()))
  281. equipment_info_4 = EquipmentInfo4.objects.filter(**kwargs).annotate(
  282. tab_val=Value('14', output_field=CharField()))
  283. equipment_info_5 = EquipmentInfo5.objects.filter(**kwargs).annotate(
  284. tab_val=Value('15', output_field=CharField()))
  285. equipment_info_6 = EquipmentInfo6.objects.filter(**kwargs).annotate(
  286. tab_val=Value('16', output_field=CharField()))
  287. equipment_info_7 = EquipmentInfo7.objects.filter(**kwargs).annotate(
  288. tab_val=Value('17', output_field=CharField()))
  289. equipment_info_8 = EquipmentInfo8.objects.filter(**kwargs).annotate(
  290. tab_val=Value('18', output_field=CharField()))
  291. equipment_info_9 = EquipmentInfo9.objects.filter(**kwargs).annotate(
  292. tab_val=Value('19', output_field=CharField()))
  293. equipment_info_10 = EquipmentInfo10.objects.filter(**kwargs).annotate(
  294. tab_val=Value('20', output_field=CharField()))
  295. equipment_info_11 = EquipmentInfo11.objects.filter(**kwargs).annotate(
  296. tab_val=Value('21', output_field=CharField()))
  297. equipment_info_12 = EquipmentInfo12.objects.filter(**kwargs).annotate(
  298. tab_val=Value('22', output_field=CharField()))
  299. equipment_info_13 = EquipmentInfo13.objects.filter(**kwargs).annotate(
  300. tab_val=Value('23', output_field=CharField()))
  301. equipment_info_14 = EquipmentInfo14.objects.filter(**kwargs).annotate(
  302. tab_val=Value('24', output_field=CharField()))
  303. equipment_info_15 = EquipmentInfo15.objects.filter(**kwargs).annotate(
  304. tab_val=Value('25', output_field=CharField()))
  305. equipment_info_16 = EquipmentInfo16.objects.filter(**kwargs).annotate(
  306. tab_val=Value('26', output_field=CharField()))
  307. equipment_info_17 = EquipmentInfo17.objects.filter(**kwargs).annotate(
  308. tab_val=Value('27', output_field=CharField()))
  309. equipment_info_18 = EquipmentInfo18.objects.filter(**kwargs).annotate(
  310. tab_val=Value('28', output_field=CharField()))
  311. equipment_info_19 = EquipmentInfo19.objects.filter(**kwargs).annotate(
  312. tab_val=Value('29', output_field=CharField()))
  313. equipment_info_20 = EquipmentInfo20.objects.filter(**kwargs).annotate(
  314. tab_val=Value('30', output_field=CharField()))
  315. equipment_info_21 = EquipmentInfo21.objects.filter(**kwargs).annotate(
  316. tab_val=Value('31', output_field=CharField()))
  317. equipment_info_22 = EquipmentInfo22.objects.filter(**kwargs).annotate(
  318. tab_val=Value('32', output_field=CharField()))
  319. equipment_info_23 = EquipmentInfo23.objects.filter(**kwargs).annotate(
  320. tab_val=Value('33', output_field=CharField()))
  321. equipment_info_24 = EquipmentInfo24.objects.filter(**kwargs).annotate(
  322. tab_val=Value('34', output_field=CharField()))
  323. equipment_info_25 = EquipmentInfo25.objects.filter(**kwargs).annotate(
  324. tab_val=Value('35', output_field=CharField()))
  325. equipment_info_26 = EquipmentInfo26.objects.filter(**kwargs).annotate(
  326. tab_val=Value('36', output_field=CharField()))
  327. equipment_info_27 = EquipmentInfo27.objects.filter(**kwargs).annotate(
  328. tab_val=Value('37', output_field=CharField()))
  329. equipment_info_28 = EquipmentInfo28.objects.filter(**kwargs).annotate(
  330. tab_val=Value('38', output_field=CharField()))
  331. equipment_info_29 = EquipmentInfo29.objects.filter(**kwargs).annotate(
  332. tab_val=Value('39', output_field=CharField()))
  333. equipment_info_30 = EquipmentInfo30.objects.filter(**kwargs).annotate(
  334. tab_val=Value('40', output_field=CharField()))
  335. equipment_info_31 = EquipmentInfo31.objects.filter(**kwargs).annotate(
  336. tab_val=Value('41', output_field=CharField()))
  337. equipment_info_32 = EquipmentInfo32.objects.filter(**kwargs).annotate(
  338. tab_val=Value('42', output_field=CharField()))
  339. equipment_info_33 = EquipmentInfo33.objects.filter(**kwargs).annotate(
  340. tab_val=Value('43', output_field=CharField()))
  341. equipment_info_34 = EquipmentInfo34.objects.filter(**kwargs).annotate(
  342. tab_val=Value('44', output_field=CharField()))
  343. equipment_info_35 = EquipmentInfo35.objects.filter(**kwargs).annotate(
  344. tab_val=Value('45', output_field=CharField()))
  345. equipment_info_36 = EquipmentInfo36.objects.filter(**kwargs).annotate(
  346. tab_val=Value('46', output_field=CharField()))
  347. equipment_info_37 = EquipmentInfo37.objects.filter(**kwargs).annotate(
  348. tab_val=Value('47', output_field=CharField()))
  349. equipment_info_38 = EquipmentInfo38.objects.filter(**kwargs).annotate(
  350. tab_val=Value('48', output_field=CharField()))
  351. equipment_info_39 = EquipmentInfo39.objects.filter(**kwargs).annotate(
  352. tab_val=Value('49', output_field=CharField()))
  353. equipment_info_40 = EquipmentInfo40.objects.filter(**kwargs).annotate(
  354. tab_val=Value('50', output_field=CharField()))
  355. else:
  356. equipment_info_1 = EquipmentInfo1.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  357. tab_val=Value('11', output_field=CharField()))
  358. equipment_info_2 = EquipmentInfo2.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  359. tab_val=Value('12', output_field=CharField()))
  360. equipment_info_3 = EquipmentInfo3.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  361. tab_val=Value('13', output_field=CharField()))
  362. equipment_info_4 = EquipmentInfo4.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  363. tab_val=Value('14', output_field=CharField()))
  364. equipment_info_5 = EquipmentInfo5.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  365. tab_val=Value('15', output_field=CharField()))
  366. equipment_info_6 = EquipmentInfo6.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  367. tab_val=Value('16', output_field=CharField()))
  368. equipment_info_7 = EquipmentInfo7.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  369. tab_val=Value('17', output_field=CharField()))
  370. equipment_info_8 = EquipmentInfo8.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  371. tab_val=Value('18', output_field=CharField()))
  372. equipment_info_9 = EquipmentInfo9.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  373. tab_val=Value('19', output_field=CharField()))
  374. equipment_info_10 = EquipmentInfo10.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  375. tab_val=Value('20', output_field=CharField()))
  376. equipment_info_11 = EquipmentInfo11.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  377. tab_val=Value('21', output_field=CharField()))
  378. equipment_info_12 = EquipmentInfo12.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  379. tab_val=Value('22', output_field=CharField()))
  380. equipment_info_13 = EquipmentInfo13.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  381. tab_val=Value('23', output_field=CharField()))
  382. equipment_info_14 = EquipmentInfo14.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  383. tab_val=Value('24', output_field=CharField()))
  384. equipment_info_15 = EquipmentInfo15.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  385. tab_val=Value('25', output_field=CharField()))
  386. equipment_info_16 = EquipmentInfo16.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  387. tab_val=Value('26', output_field=CharField()))
  388. equipment_info_17 = EquipmentInfo17.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  389. tab_val=Value('27', output_field=CharField()))
  390. equipment_info_18 = EquipmentInfo18.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  391. tab_val=Value('28', output_field=CharField()))
  392. equipment_info_19 = EquipmentInfo19.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  393. tab_val=Value('29', output_field=CharField()))
  394. equipment_info_20 = EquipmentInfo20.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  395. tab_val=Value('30', output_field=CharField()))
  396. equipment_info_21 = EquipmentInfo21.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  397. tab_val=Value('31', output_field=CharField()))
  398. equipment_info_22 = EquipmentInfo22.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  399. tab_val=Value('32', output_field=CharField()))
  400. equipment_info_23 = EquipmentInfo23.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  401. tab_val=Value('33', output_field=CharField()))
  402. equipment_info_24 = EquipmentInfo24.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  403. tab_val=Value('34', output_field=CharField()))
  404. equipment_info_25 = EquipmentInfo25.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  405. tab_val=Value('35', output_field=CharField()))
  406. equipment_info_26 = EquipmentInfo26.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  407. tab_val=Value('36', output_field=CharField()))
  408. equipment_info_27 = EquipmentInfo27.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  409. tab_val=Value('37', output_field=CharField()))
  410. equipment_info_28 = EquipmentInfo28.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  411. tab_val=Value('38', output_field=CharField()))
  412. equipment_info_29 = EquipmentInfo29.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  413. tab_val=Value('39', output_field=CharField()))
  414. equipment_info_30 = EquipmentInfo30.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  415. tab_val=Value('40', output_field=CharField()))
  416. equipment_info_31 = EquipmentInfo31.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  417. tab_val=Value('41', output_field=CharField()))
  418. equipment_info_32 = EquipmentInfo32.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  419. tab_val=Value('42', output_field=CharField()))
  420. equipment_info_33 = EquipmentInfo33.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  421. tab_val=Value('43', output_field=CharField()))
  422. equipment_info_34 = EquipmentInfo34.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  423. tab_val=Value('44', output_field=CharField()))
  424. equipment_info_35 = EquipmentInfo35.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  425. tab_val=Value('45', output_field=CharField()))
  426. equipment_info_36 = EquipmentInfo36.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  427. tab_val=Value('46', output_field=CharField()))
  428. equipment_info_37 = EquipmentInfo37.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  429. tab_val=Value('47', output_field=CharField()))
  430. equipment_info_38 = EquipmentInfo38.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  431. tab_val=Value('48', output_field=CharField()))
  432. equipment_info_39 = EquipmentInfo39.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  433. tab_val=Value('49', output_field=CharField()))
  434. equipment_info_40 = EquipmentInfo40.objects.filter(Q(**kwargs) | Q(**event_type_kwargs)).annotate(
  435. tab_val=Value('50', output_field=CharField()))
  436. equipment_info_union = equipment_info_1.union(
  437. equipment_info_2, equipment_info_3, equipment_info_4, equipment_info_5, equipment_info_6,
  438. equipment_info_7, equipment_info_8, equipment_info_9, equipment_info_10,
  439. equipment_info_11, equipment_info_12, equipment_info_13, equipment_info_14, equipment_info_15,
  440. equipment_info_16, equipment_info_17, equipment_info_18, equipment_info_19, equipment_info_20,
  441. equipment_info_21, equipment_info_22, equipment_info_23, equipment_info_24, equipment_info_25,
  442. equipment_info_26, equipment_info_27, equipment_info_28, equipment_info_29, equipment_info_30,
  443. equipment_info_31, equipment_info_32, equipment_info_33, equipment_info_34, equipment_info_35,
  444. equipment_info_36, equipment_info_37, equipment_info_38, equipment_info_39, equipment_info_40,
  445. all=True
  446. )
  447. if not equipment_info_union.exists():
  448. return None, 0
  449. if CONFIG_EUR == CONFIG_INFO:
  450. line = 10
  451. count = 21
  452. equipment_info_union = cls.get_equipment_info_union_page(equipment_info_union, page, line)
  453. return equipment_info_union, count
  454. except Exception as e:
  455. print('error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  456. @staticmethod
  457. def get_equipment_info_union_page(equipment_info_union, page, line):
  458. """
  459. 获取查询结果集进行排序、分页,遍历重命名字典key(主要针对原函数返回结果集)
  460. @param equipment_info_union: 设备信息结果集
  461. @param page: 页数
  462. @param line: 分页大小
  463. @return: qs_page 遍历后的设备信息结果集
  464. """
  465. equipment_info_qs = equipment_info_union.values('id', 'device_uid', 'device_nick_name', 'channel', 'event_type',
  466. 'status', 'answer_status', 'alarm', 'event_time', 'is_st',
  467. 'add_time', 'storage_location', 'border_coords', 'tab_val',
  468. 'event_tag')
  469. equipment_info_qs = equipment_info_qs.order_by('-event_time')
  470. equipment_info_qs = equipment_info_qs[(page - 1) * line:page * line]
  471. for equipment_info in equipment_info_qs:
  472. # id: 表标识+id
  473. equipment_info['id'] = equipment_info['tab_val'] + str(equipment_info['id'])
  474. equipment_info['devUid'] = equipment_info['device_uid']
  475. equipment_info['devNickName'] = equipment_info['device_nick_name']
  476. equipment_info['Channel'] = equipment_info['channel']
  477. equipment_info['eventType'] = equipment_info['event_type']
  478. equipment_info['eventTime'] = equipment_info['event_time']
  479. equipment_info['receiveTime'] = equipment_info['event_time']
  480. equipment_info['addTime'] = equipment_info['add_time']
  481. equipment_info['borderCoords'] = equipment_info['border_coords']
  482. equipment_info['eventTag'] = equipment_info['event_tag']
  483. if equipment_info['alarm'] == '':
  484. equipment_info['alarm'] = 'Motion \tChannel:{}'.format(equipment_info['channel'])
  485. equipment_info.pop('device_uid')
  486. equipment_info.pop('device_nick_name')
  487. equipment_info.pop('channel')
  488. equipment_info.pop('event_type')
  489. equipment_info.pop('event_time')
  490. equipment_info.pop('add_time')
  491. equipment_info.pop('border_coords')
  492. equipment_info.pop('tab_val')
  493. equipment_info.pop('event_tag')
  494. return equipment_info_qs
  495. @staticmethod
  496. def all_read_equipment_info(**kwargs):
  497. """
  498. 全部已读推送消息
  499. @param kwargs:
  500. @return:
  501. """
  502. for equipment_info_model in EQUIPMENT_INFO_MODEL_LIST:
  503. equipment_info_model.objects.filter(**kwargs).update(status=1)
  504. @staticmethod
  505. def update_equipment_info_answer_status(**kwargs):
  506. """
  507. 已接听一键通话消息
  508. @param kwargs:
  509. @return:
  510. """
  511. for equipment_info_model in EQUIPMENT_INFO_MODEL_LIST:
  512. equipment_info_model.objects.filter(**kwargs).update(answer_status=1)
  513. @staticmethod
  514. def delete_all_equipment_info(**kwargs):
  515. """
  516. 删除全部推送消息
  517. @param kwargs:
  518. @return:
  519. """
  520. for equipment_info_model in EQUIPMENT_INFO_MODEL_LIST:
  521. equipment_info_model.objects.filter(**kwargs).delete()
  522. @staticmethod
  523. def get_equipment_info_model_with_full_id(full_id):
  524. """
  525. 根据拼接id获取推送表
  526. @param full_id: 拼接id,表标识+id
  527. @return:
  528. """
  529. tab_val = int(full_id[:2]) - 10
  530. if tab_val > len(EQUIPMENT_INFO_MODEL_LIST):
  531. return None
  532. tab_index = tab_val - 1
  533. return EQUIPMENT_INFO_MODEL_LIST[tab_index]
  534. @staticmethod
  535. def count_equipment_info(**kwargs):
  536. """
  537. 查询推送数据数量
  538. @param kwargs:
  539. @return: count
  540. """
  541. redis_obj = RedisObject()
  542. key = 'PUSH:MESSAGE:USER:{}'.format(kwargs['device_user_id'])
  543. push_data = redis_obj.get_data(key)
  544. if push_data:
  545. return int(push_data)
  546. count = 0
  547. for equipment_info_model in EQUIPMENT_INFO_MODEL_LIST:
  548. count += equipment_info_model.objects.filter(**kwargs).count()
  549. if count == 0:
  550. return count
  551. if CONFIG_EUR == CONFIG_INFO and count > 99:
  552. redis_obj.set_data(key, count, 300)
  553. else:
  554. redis_obj.set_data(key, count, 60)
  555. return count
  556. @classmethod
  557. def get_equipment_info(cls, **kwargs):
  558. """
  559. 查询推送数据
  560. @param kwargs:
  561. @return: qs
  562. """
  563. equipment_info_union = EQUIPMENT_INFO_MODEL_LIST[0].objects.filter(**kwargs).annotate(
  564. tab_val=Value('11', output_field=CharField()))
  565. for index, equipment_info_model in enumerate(EQUIPMENT_INFO_MODEL_LIST[1:]):
  566. tab_val = str(index + 2)
  567. equipment_info_union = equipment_info_union.union(equipment_info_model.objects.filter(**kwargs).annotate(
  568. tab_val=Value(tab_val, output_field=CharField())))
  569. equipment_info_union = cls.get_equipment_info_union_page(equipment_info_union, 1, 10)
  570. count = equipment_info_union.count()
  571. return equipment_info_union, count