query_latest_biz_dt.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. """
  2. 查询需求分级相关三张表各自的最新业务日,供未指定 biz_dt 时先探测可用日期。
  3. """
  4. from __future__ import annotations
  5. import logging
  6. from supply_agent.tools import tool
  7. from supply_infra.db.repositories.category_tree_weight_repo import CategoryTreeWeightRepository
  8. from supply_infra.db.repositories.demand_popularity_stats_repo import (
  9. DemandPopularityStatsRepository,
  10. )
  11. from supply_infra.db.repositories.multi_demand_pool_di_repo import MultiDemandPoolDiRepository
  12. from supply_infra.db.session import get_session
  13. logger = logging.getLogger(__name__)
  14. @tool
  15. def query_latest_biz_dt() -> str:
  16. """
  17. 查询需求池、类目树权重、需求词热度统计三张表各自的最新业务日。
  18. 三张表由不同 job 产出,可能不完全同步(权重/热度统计可能滞后于需求池)。
  19. 未指定 biz_dt 时应先调用本工具,再根据返回结果决定分级使用哪个业务日
  20. (通常以需求池的最新日为准;若权重/热度统计当日还没跑出来,可退到它们各自的最新日)。
  21. Returns:
  22. 三张表各自的最新业务日,例如:
  23. multi_demand_pool_di=20260716
  24. category_tree_weight=20260716
  25. demand_popularity_stats=20260715
  26. (某表暂无数据时显示为 无数据)
  27. """
  28. try:
  29. with get_session() as session:
  30. pool_dt = MultiDemandPoolDiRepository(session).get_latest_biz_dt()
  31. weight_dt = CategoryTreeWeightRepository(session).get_latest_biz_dt()
  32. stats_dt = DemandPopularityStatsRepository(session).get_latest_biz_dt()
  33. lines = [
  34. f"multi_demand_pool_di={pool_dt or '无数据'}",
  35. f"category_tree_weight={weight_dt or '无数据'}",
  36. f"demand_popularity_stats={stats_dt or '无数据'}",
  37. ]
  38. message = "\n".join(lines)
  39. logger.info("query_latest_biz_dt completed: %s", message.replace("\n", " "))
  40. return message
  41. except Exception as e:
  42. logger.error("query_latest_biz_dt failed: %s", e, exc_info=True)
  43. return f"查询最新业务日失败: {e}"
  44. def main() -> None:
  45. print(query_latest_biz_dt())
  46. if __name__ == "__main__":
  47. main()