manager_op.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. from config import set_config
  2. from log import Log
  3. from db_helper import RedisHelper
  4. config_ = set_config()
  5. log_ = Log()
  6. def get_video_list(ab_exp_code, search_time, data_list_type, region_code, page_num=1, page_size=100):
  7. """
  8. 管理后台算法视频列表可视化 - 获取视频列表
  9. :param ab_exp_code: 实验id,type-string
  10. :param search_time: 时间,type-string,格式: %y%m%d.%h,eg: '20220714.05'
  11. :param data_list_type: 视频数据表类型,type-int
  12. :param region_code: 地域(省份),type-string,eg: '110000
  13. :param page_num: 页码,type-int,默认: 1
  14. :param page_size: 每页请求数,type-int,默认: 100
  15. :return: result
  16. """
  17. redis_helper = RedisHelper()
  18. if ab_exp_code is None or search_time is None or data_list_type is None or region_code is None:
  19. data = []
  20. data_count = 0
  21. result = {'code': 200, 'message': 'success', 'dataCount': data_count, 'data': data}
  22. return result
  23. data = []
  24. key_params = config_.VIDEO_DATA_LIST_AB_EXP_CODE_MAPPING.get(ab_exp_code)
  25. app_type = key_params.get('app_type')
  26. data_key = key_params.get('data_key')
  27. rule_key = key_params.get('rule_key')
  28. if data_list_type == 0:
  29. # 视频数据表类型 选择为全部
  30. key_prefix_list = config_.VIDEO_DATA_LIST_MAPPING.get(data_list_type).get('keyPrefixList')
  31. for item in key_prefix_list:
  32. data_list_code = item.get('dataListCode')
  33. key_prefix = item.get('keyPrefix')
  34. key_name = f"{key_prefix}{region_code}.{app_type}.{data_key}.{rule_key}.{search_time}"
  35. key_data = redis_helper.get_all_data_from_zset(key_name=key_name, desc=True, with_scores=True)
  36. if key_data is None:
  37. continue
  38. videos = [
  39. {
  40. 'abExpCode': ab_exp_code,
  41. 'searchTime': search_time,
  42. 'dataListType': data_list_code,
  43. 'regionCode': region_code,
  44. 'videoId': int(video_id),
  45. 'score': float(score),
  46. }
  47. for video_id, score in key_data
  48. ]
  49. data.extend(videos)
  50. else:
  51. key_prefix = config_.VIDEO_DATA_LIST_MAPPING.get(data_list_type).get('keyPrefix')
  52. key_name = f"{key_prefix}{region_code}.{app_type}.{data_key}.{rule_key}.{search_time}"
  53. key_data = redis_helper.get_all_data_from_zset(key_name=key_name, desc=True, with_scores=True)
  54. if key_data is None:
  55. videos = []
  56. else:
  57. videos = [
  58. {
  59. 'abExpCode': ab_exp_code,
  60. 'searchTime': search_time,
  61. 'dataListType': data_list_type,
  62. 'regionCode': region_code,
  63. 'videoId': int(video_id),
  64. 'score': float(score),
  65. }
  66. for video_id, score in key_data
  67. ]
  68. data.extend(videos)
  69. # 添加"rank"
  70. final_data = []
  71. for i, item in enumerate(data):
  72. item['rank'] = i + 1
  73. final_data.append(item)
  74. result = {
  75. "code": 200,
  76. "message": "success",
  77. "dataCount": len(final_data),
  78. "data": final_data[(page_num-1)*page_size:page_num*page_size]
  79. }
  80. return result
  81. def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id, page_num=1, page_size=100):
  82. """
  83. 管理后台算法视频列表可视化 - 搜索视频id
  84. :param ab_exp_code: 实验id,type-string
  85. :param search_time: 时间,type-string,格式: %y%m%d.%h,eg: '20220714.05'
  86. :param data_list_type: 视频数据表类型,type-int
  87. :param region_code: 地域(省份),type-string,eg: '110000
  88. :param video_id: 视频id,type-int
  89. :param page_num: 页码,type-int,默认: 1
  90. :param page_size: 每页请求数,type-int,默认: 100
  91. :return: result
  92. """
  93. redis_helper = RedisHelper()
  94. if ab_exp_code is None or search_time is None or data_list_type is None or region_code is None or video_id is None:
  95. data = []
  96. data_count = 0
  97. result = {'code': 200, 'message': 'success', 'dataCount': data_count, 'data': data}
  98. return result
  99. data = []
  100. key_params = config_.VIDEO_DATA_LIST_AB_EXP_CODE_MAPPING.get(ab_exp_code)
  101. app_type = key_params.get('app_type')
  102. data_key = key_params.get('data_key')
  103. rule_key = key_params.get('rule_key')
  104. if data_list_type == 0:
  105. # 视频数据表类型 选择为全部
  106. key_prefix_list = config_.VIDEO_DATA_LIST_MAPPING.get(data_list_type).get('keyPrefixList')
  107. for item in key_prefix_list:
  108. data_list_code = item.get('dataListCode')
  109. key_prefix = item.get('keyPrefix')
  110. key_name = f"{key_prefix}{region_code}.{app_type}.{data_key}.{rule_key}.{search_time}"
  111. rank = redis_helper.get_rank_with_value(key_name=key_name, value=int(video_id), desc=True)
  112. score = redis_helper.get_score_with_value(key_name=key_name, value=int(video_id))
  113. if rank is None or score is None:
  114. continue
  115. videos = {
  116. 'abExpCode': ab_exp_code,
  117. 'searchTime': search_time,
  118. 'dataListType': data_list_code,
  119. 'regionCode': region_code,
  120. 'videoId': int(video_id),
  121. 'score': float(score),
  122. 'rank': int(rank) + 1,
  123. }
  124. data.append(videos)
  125. data.sort(key=lambda x: x['dataListType'], reverse=False)
  126. elif region_code == '0':
  127. # 地域 选择为全部
  128. code_list = [code for _, code in config_.REGION_CODE.items()]
  129. key_prefix = config_.VIDEO_DATA_LIST_MAPPING.get(data_list_type).get('keyPrefix')
  130. for code in code_list:
  131. key_name = f"{key_prefix}{code}.{app_type}.{data_key}.{rule_key}.{search_time}"
  132. rank = redis_helper.get_rank_with_value(key_name=key_name, value=int(video_id), desc=True)
  133. score = redis_helper.get_score_with_value(key_name=key_name, value=int(video_id))
  134. if rank is None or score is None:
  135. continue
  136. videos = {
  137. 'abExpCode': ab_exp_code,
  138. 'searchTime': search_time,
  139. 'dataListType': data_list_type,
  140. 'regionCode': code,
  141. 'videoId': int(video_id),
  142. 'score': float(score),
  143. 'rank': int(rank) + 1,
  144. }
  145. data.append(videos)
  146. data.sort(key=lambda x: x['regionCode'], reverse=False)
  147. else:
  148. key_prefix = config_.VIDEO_DATA_LIST_MAPPING.get(data_list_type).get('keyPrefix')
  149. key_name = f"{key_prefix}{region_code}.{app_type}.{data_key}.{rule_key}.{search_time}"
  150. rank = redis_helper.get_rank_with_value(key_name=key_name, value=int(video_id), desc=True)
  151. score = redis_helper.get_score_with_value(key_name=key_name, value=int(video_id))
  152. if rank is not None and score is not None:
  153. videos = {
  154. 'abExpCode': ab_exp_code,
  155. 'searchTime': search_time,
  156. 'dataListType': data_list_type,
  157. 'regionCode': region_code,
  158. 'videoId': int(video_id),
  159. 'score': float(score),
  160. 'rank': int(rank) + 1,
  161. }
  162. data.append(videos)
  163. result = {
  164. "code": 200,
  165. "message": "success",
  166. "dataCount": len(data),
  167. "data": data[(page_num - 1) * page_size:page_num * page_size]
  168. }
  169. return result