query_db.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import os
  2. import time
  3. import numpy as np
  4. from typing import Literal
  5. from datetime import datetime, date, timedelta
  6. from utils.logger_config import setup_logger
  7. from utils.tools import load_sql_file, query_clickhouse
  8. logger = setup_logger(__name__)
  9. def get_sku_info(goods_id: str, color_id: str) -> list:
  10. """根据商品ID和颜色ID获取商品信息"""
  11. sql_query = load_sql_file("get_sku_info.sql")
  12. sql_query = sql_query.replace("goods_id_holder", goods_id).replace("color_id_holder", color_id)
  13. result = query_clickhouse(sql_query)
  14. logger.info(f"查询商品信息成功!")
  15. return result
  16. def get_sku_id(goods_code: str, color_code: str) -> list:
  17. """根据商品CODE和颜色CODE获取商品ID和颜色ID"""
  18. sql_query = load_sql_file("get_sku_id.sql")
  19. sql_query = sql_query.replace("g_code_holder", goods_code).replace("cl_code_holder", color_code)
  20. result = query_clickhouse(sql_query)
  21. logger.info(f"查询商品ID,颜色ID成功!")
  22. return result
  23. def get_core_sku_freq(
  24. goods_code: str,
  25. color_code: str,
  26. goods_id: str,
  27. color_id: str,
  28. query_type: Literal["22", "33"],
  29. start_date: str = None,
  30. end_date: str = None
  31. ) -> list:
  32. """获取主推款近一个月的销售频次"""
  33. sql_query = load_sql_file(f"core_sku_freq{query_type}.sql")
  34. if not start_date:
  35. start_date = str(date.today() - timedelta(days=30))
  36. if not end_date:
  37. end_date = str(date.today())
  38. sql_query = sql_query.replace("g_code_holder", goods_code).replace("cl_code_holder", color_code)
  39. sql_query = sql_query.replace("goods_id_holder", goods_id).replace("color_id_holder", color_id)
  40. sql_query = sql_query.replace("date_start_holder", start_date).replace("date_end_holder", end_date)
  41. result = query_clickhouse(sql_query)
  42. logger.info(f"查询主推款销售频次成功!")
  43. return result
  44. def get_fusion_order(
  45. goods_code: str,
  46. color_code: str,
  47. goods_id: str,
  48. color_id: str,
  49. query_type: Literal["22", "33"],
  50. start_date: str = None,
  51. end_date: str = None
  52. ) -> list:
  53. """获取组合订单"""
  54. sql_query = load_sql_file(f"get_fusion{query_type}.sql")
  55. if not start_date:
  56. start_date = str(date.today() - timedelta(days=30))
  57. if not end_date:
  58. end_date = str(date.today())
  59. sql_query = sql_query.replace("g_code_holder", goods_code).replace("cl_code_holder", color_code)
  60. sql_query = sql_query.replace("goods_id_holder", goods_id).replace("color_id_holder", color_id)
  61. sql_query = sql_query.replace("date_start_holder", start_date).replace("date_end_holder", end_date)
  62. result = query_clickhouse(sql_query)
  63. if query_type == "22":
  64. flat_list = '\n'.join(result).split('\n')
  65. result_list = [flat_list[i:i+2] for i in range(0, len(flat_list), 2)]
  66. elif query_type == "33":
  67. flat_list = '\n'.join(result).split('\n')
  68. result_list = [flat_list[i:i+3] for i in range(0, len(flat_list), 3)]
  69. else:
  70. logger.warning(f"请输入正确的查询类型(22或33)!")
  71. logger.info(f"查询组合订单成功!")
  72. return result_list
  73. def get_sales(
  74. goods_code: str,
  75. color_code: str,
  76. goods_id: str,
  77. color_id: str,
  78. query_type: Literal['22', '33'],
  79. sub_goods_id: str = None,
  80. sub_color_id: str = None,
  81. start_date: str = None,
  82. end_date: str = None,
  83. ) -> list:
  84. sql_query = load_sql_file(f"count_sale{query_type}.sql")
  85. if not start_date:
  86. start_date = str(date.today() - timedelta(days=30))
  87. if not end_date:
  88. end_date = str(date.today())
  89. sql_query = sql_query.replace('g_code_holder', goods_code).replace('cl_code_holder', color_code)
  90. sql_query = sql_query.replace('goods_id_holder', goods_id).replace('color_id_holder', color_id)
  91. sql_query = sql_query.replace('date_start_holder', start_date).replace('date_end_holder', end_date)
  92. if query_type == '22':
  93. result = query_clickhouse(sql_query)
  94. logger.info(f"查询连带销售金额成功!")
  95. return result
  96. if query_type == '33':
  97. sql_query = sql_query.replace('goods_third_id_holder', sub_goods_id).replace('color_third_id_holder', sub_color_id)
  98. result = query_clickhouse(sql_query)
  99. logger.info(f"查询连带销售金额成功!")
  100. return result
  101. if __name__ == '__main__':
  102. good_code = "1E5C6M200"
  103. color_code = "91Y"
  104. # 商品ID & 颜色ID
  105. result_id = get_sku_id(good_code, color_code)
  106. good_id = result_id[0]
  107. color_id = result_id[1]
  108. # 主商品频次
  109. result_freq = get_core_sku_freq(
  110. good_code,
  111. color_code,
  112. good_id,
  113. color_id,
  114. "22"
  115. )
  116. # 主商品信息
  117. result_primary_good = get_sku_info(good_id, color_id)
  118. print(result_primary_good)
  119. # # 查询连带款
  120. # result_combine = get_fusion_order(
  121. # good_code,
  122. # color_code,
  123. # good_id,
  124. # color_id,
  125. # "33"
  126. # )
  127. # print(result_combine)
  128. # print(int("11")*2)
  129. # # combine_dict = {}
  130. # # for combine in result_combine:
  131. # # good_color = combine[0]
  132. # # count = combine[1]
  133. # # good_id = good_color.split("-")[0]
  134. # # color_id = good_color.split("-")[1]
  135. # # result_code = get_sku_info(good_id, color_id)
  136. # # good_code = result_code[0]
  137. # # good_name = result_code[1]
  138. # # color_code = result_code[2]
  139. # # color_name = result_code[3]
  140. # # good_season = result_code[4]
  141. # # good_type = result_code[5]
  142. # # logger.info(f"result_code: {result_code}")
  143. # # logger.info(f"good_id: {good_id}, color_id: {color_id}")
  144. # # print(result_combine)
  145. # # print(len(result_combine))
  146. # result = get_sales(
  147. # goods_code="1E5C6M200",
  148. # color_code="91Y",
  149. # goods_id="2586599925281280",
  150. # color_id="2055025368795724",
  151. # query_type="22",
  152. # start_date="2025-09-06",
  153. # end_date="2025-09-09"
  154. # )
  155. # print(result)