""" 查询需求分级相关三张表各自的最新业务日,供未指定 biz_dt 时先探测可用日期。 """ from __future__ import annotations import logging from supply_agent.tools import tool from supply_infra.db.repositories.category_tree_weight_repo import CategoryTreeWeightRepository from supply_infra.db.repositories.demand_popularity_stats_repo import ( DemandPopularityStatsRepository, ) from supply_infra.db.repositories.multi_demand_pool_di_repo import MultiDemandPoolDiRepository from supply_infra.db.session import get_session logger = logging.getLogger(__name__) @tool def query_latest_biz_dt() -> str: """ 查询需求池、类目树权重、需求词热度统计三张表各自的最新业务日。 三张表由不同 job 产出,可能不完全同步(权重/热度统计可能滞后于需求池)。 未指定 biz_dt 时应先调用本工具,再根据返回结果决定分级使用哪个业务日 (通常以需求池的最新日为准;若权重/热度统计当日还没跑出来,可退到它们各自的最新日)。 Returns: 三张表各自的最新业务日,例如: multi_demand_pool_di=20260716 category_tree_weight=20260716 demand_popularity_stats=20260715 (某表暂无数据时显示为 无数据) """ try: with get_session() as session: pool_dt = MultiDemandPoolDiRepository(session).get_latest_biz_dt() weight_dt = CategoryTreeWeightRepository(session).get_latest_biz_dt() stats_dt = DemandPopularityStatsRepository(session).get_latest_biz_dt() lines = [ f"multi_demand_pool_di={pool_dt or '无数据'}", f"category_tree_weight={weight_dt or '无数据'}", f"demand_popularity_stats={stats_dt or '无数据'}", ] message = "\n".join(lines) logger.info("query_latest_biz_dt completed: %s", message.replace("\n", " ")) return message except Exception as e: logger.error("query_latest_biz_dt failed: %s", e, exc_info=True) return f"查询最新业务日失败: {e}" def main() -> None: print(query_latest_biz_dt()) if __name__ == "__main__": main()