优化处理逻辑
This commit is contained in:
+36
-82
@@ -22,9 +22,10 @@ def bootstrap_prefect_env() -> None:
|
||||
bootstrap_prefect_env()
|
||||
|
||||
from prefect import flow, task
|
||||
from prefect.logging import get_run_logger
|
||||
|
||||
from project_bitable_common import (
|
||||
DailySyncConfig,
|
||||
build_daily_sync_context,
|
||||
get_base_url,
|
||||
get_default_end_date,
|
||||
get_default_start_date,
|
||||
@@ -36,10 +37,8 @@ from project_bitable_common import (
|
||||
iter_dates,
|
||||
load_dotenv,
|
||||
log_step,
|
||||
run_gmv_sync,
|
||||
run_metric_sync,
|
||||
send_feishu_app_card,
|
||||
send_feishu_sync_card,
|
||||
run_daily_sync_for_date,
|
||||
send_sync_notification,
|
||||
validate_date,
|
||||
)
|
||||
|
||||
@@ -82,75 +81,22 @@ def load_sync_config(
|
||||
)
|
||||
|
||||
|
||||
@task(name="sync-sales")
|
||||
def sync_sales_for_day(stat_date_text: str, config: SyncConfig) -> None:
|
||||
stat_date = validate_date(stat_date_text)
|
||||
run_metric_sync(
|
||||
metric_name="sales",
|
||||
start_date=stat_date,
|
||||
end_date=stat_date,
|
||||
base_url=config.base_url,
|
||||
mapping_file=Path(config.mapping_file),
|
||||
store_field_name=config.store_field_name,
|
||||
table_map_file=config.table_map_file,
|
||||
dry_run=config.dry_run,
|
||||
skip_missing_tables=config.skip_missing_tables,
|
||||
)
|
||||
|
||||
|
||||
@task(name="sync-refund")
|
||||
def sync_refund_for_day(stat_date_text: str, config: SyncConfig) -> None:
|
||||
stat_date = validate_date(stat_date_text)
|
||||
run_metric_sync(
|
||||
metric_name="refund",
|
||||
start_date=stat_date,
|
||||
end_date=stat_date,
|
||||
base_url=config.base_url,
|
||||
mapping_file=Path(config.mapping_file),
|
||||
store_field_name=config.store_field_name,
|
||||
table_map_file=config.table_map_file,
|
||||
dry_run=config.dry_run,
|
||||
skip_missing_tables=config.skip_missing_tables,
|
||||
)
|
||||
|
||||
|
||||
@task(name="sync-gmv")
|
||||
def sync_gmv_for_day(stat_date_text: str, config: SyncConfig) -> None:
|
||||
stat_date = validate_date(stat_date_text)
|
||||
run_gmv_sync(
|
||||
start_date=stat_date,
|
||||
end_date=stat_date,
|
||||
base_url=config.base_url,
|
||||
store_field_name=config.store_field_name,
|
||||
dry_run=config.dry_run,
|
||||
skip_missing_tables=config.skip_missing_tables,
|
||||
)
|
||||
|
||||
|
||||
@task(name="notify-feishu")
|
||||
def notify_feishu(title: str, config: SyncConfig) -> None:
|
||||
if config.dry_run:
|
||||
log_step("dry-run 模式下跳过飞书群推送")
|
||||
return
|
||||
start_date = validate_date(config.start_date)
|
||||
end_date = validate_date(config.end_date)
|
||||
if config.chat_id:
|
||||
send_feishu_app_card(
|
||||
chat_id=config.chat_id,
|
||||
title=title,
|
||||
base_url=config.base_url,
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
image_path=config.report_image_path,
|
||||
def notify_feishu(context: SyncConfig, start_date_text: str, end_date_text: str) -> None:
|
||||
context_obj = build_daily_sync_context(
|
||||
DailySyncConfig(
|
||||
base_url=context.base_url,
|
||||
mapping_file=Path(context.mapping_file),
|
||||
store_field_name=context.store_field_name,
|
||||
table_map_file=context.table_map_file,
|
||||
dry_run=context.dry_run,
|
||||
skip_missing_tables=context.skip_missing_tables,
|
||||
chat_id=context.chat_id,
|
||||
report_image_path=context.report_image_path,
|
||||
group_webhook=context.group_webhook,
|
||||
)
|
||||
return
|
||||
send_feishu_sync_card(
|
||||
webhook_url=config.group_webhook,
|
||||
title=title,
|
||||
base_url=config.base_url,
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
)
|
||||
send_sync_notification(context_obj, validate_date(start_date_text), validate_date(end_date_text))
|
||||
|
||||
|
||||
@flow(name="gmv-daily-sync")
|
||||
@@ -161,7 +107,6 @@ def gmv_daily_sync_flow(
|
||||
skip_missing_tables: bool = False,
|
||||
table_map_file: str = "",
|
||||
) -> None:
|
||||
logger = get_run_logger()
|
||||
config = load_sync_config(
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
@@ -174,22 +119,31 @@ def gmv_daily_sync_flow(
|
||||
end_date_value = validate_date(config.end_date)
|
||||
if end_date_value < start_date_value:
|
||||
raise ValueError("end-date 不能早于 start-date")
|
||||
context = build_daily_sync_context(
|
||||
DailySyncConfig(
|
||||
base_url=config.base_url,
|
||||
mapping_file=Path(config.mapping_file),
|
||||
store_field_name=config.store_field_name,
|
||||
table_map_file=config.table_map_file,
|
||||
dry_run=config.dry_run,
|
||||
skip_missing_tables=config.skip_missing_tables,
|
||||
chat_id=config.chat_id,
|
||||
report_image_path=config.report_image_path,
|
||||
group_webhook=config.group_webhook,
|
||||
)
|
||||
)
|
||||
|
||||
logger.info("Prefect 调度开始: %s -> %s", config.start_date, config.end_date)
|
||||
log_step(f"Prefect 调度开始: {config.start_date} -> {config.end_date}")
|
||||
try:
|
||||
for stat_date in iter_dates(start_date_value, end_date_value):
|
||||
stat_date_text = stat_date.isoformat()
|
||||
logger.info("开始处理日期: %s", stat_date_text)
|
||||
sync_sales_for_day(stat_date_text, config)
|
||||
sync_refund_for_day(stat_date_text, config)
|
||||
sync_gmv_for_day(stat_date_text, config)
|
||||
logger.info("日期处理完成: %s", stat_date_text)
|
||||
log_step(f"Prefect 开始处理日期: {stat_date.isoformat()}")
|
||||
run_daily_sync_for_date(context, stat_date)
|
||||
except Exception:
|
||||
notify_feishu.with_options(name="notify-feishu-failed")("GMV数据同步失败", config)
|
||||
notify_feishu.with_options(name="notify-feishu-failed")(config, config.start_date, config.end_date)
|
||||
raise
|
||||
|
||||
notify_feishu("GMV数据同步", config)
|
||||
logger.info("Prefect 调度完成")
|
||||
notify_feishu(config, config.start_date, config.end_date)
|
||||
log_step("Prefect 调度完成")
|
||||
|
||||
|
||||
def parse_args() -> argparse.Namespace:
|
||||
|
||||
Reference in New Issue
Block a user