# 项目流程树报告 - 生成时间: 2026-02-12T14:33:39Z - 仓库路径: `C:\ZQYY\FQ-ETL` ## 流程图(Mermaid) ```mermaid graph TD N0["`cli.main`"] N0 --> N1 N1["`config.settings`"] N0 --> N2 N2["`orchestration.scheduler`"] N2 --> N3 N3["`api.client`"] N3 --> N4 N4["`api.endpoint_routing`"] N2 --> N5 N5["`database.connection`"] N2 --> N6 N6["`database.operations`"] N2 --> N7 N7["`orchestration.cursor_manager`"] N2 --> N8 N8["`orchestration.run_tracker`"] N2 --> N9 N9["`orchestration.task_registry`"] N9 --> N10 N10["`tasks.ods.orders_task [任务]`"] N10 --> N11 N11["`tasks.base_task [任务]`"] N11 --> N12 N12["`utils.windowing`"] N10 --> N13 N13["`loaders.facts.order [事实表加载器]`"] N10 --> N14 N14["`models.parsers`"] N9 --> N15 N15["`tasks.ods.payments_task [任务]`"] N15 --> N16 N16["`loaders.facts.payment [事实表加载器]`"] N9 --> N17 N17["`tasks.ods.members_task [任务]`"] N17 --> N18 N18["`loaders.dimensions.member [维度加载器 (SCD2)]`"] N9 --> N19 N19["`tasks.ods.products_task [任务]`"] N19 --> N20 N20["`loaders.dimensions.product [维度加载器 (SCD2)]`"] N20 --> N21 N21["`scd.scd2_handler`"] N9 --> N22 N22["`tasks.ods.tables_task [任务]`"] N22 --> N23 N23["`loaders.dimensions.table [维度加载器 (SCD2)]`"] N9 --> N24 N24["`tasks.ods.assistants_task [任务]`"] N24 --> N25 N25["`loaders.dimensions.assistant [维度加载器 (SCD2)]`"] N9 --> N26 N26["`tasks.ods.packages_task [任务]`"] N26 --> N27 N27["`loaders.dimensions.package [维度加载器 (SCD2)]`"] N9 --> N28 N28["`tasks.ods.refunds_task [任务]`"] N28 --> N29 N29["`loaders.facts.refund [事实表加载器]`"] N9 --> N30 N30["`tasks.ods.coupon_usage_task [任务]`"] N30 --> N31 N31["`loaders.facts.coupon_usage [事实表加载器]`"] N9 --> N32 N32["`tasks.ods.inventory_change_task [任务]`"] N32 --> N33 N33["`loaders.facts.inventory_change [事实表加载器]`"] N9 --> N34 N34["`tasks.ods.topups_task [任务]`"] N34 --> N35 N35["`loaders.facts.topup [事实表加载器]`"] N9 --> N36 N36["`tasks.ods.table_discount_task [任务]`"] N36 --> N37 N37["`loaders.facts.table_discount [事实表加载器]`"] N9 --> N38 N38["`tasks.ods.assistant_abolish_task [任务]`"] N38 --> N39 N39["`loaders.facts.assistant_abolish [事实表加载器]`"] N9 --> N40 N40["`tasks.ods.ledger_task [任务]`"] N40 --> N41 N41["`loaders.facts.assistant_ledger [事实表加载器]`"] N9 --> N42 N42["`tasks.ods.ods_tasks [ODS 抓取任务]`"] N9 --> N43 N43["`tasks.ods.ods_json_archive_task [ODS 抓取任务]`"] N43 --> N44 N44["`utils.json_store`"] N9 --> N45 N45["`tasks.dwd.payments_dwd_task [任务]`"] N9 --> N46 N46["`tasks.dwd.members_dwd_task [任务]`"] N9 --> N47 N47["`tasks.dwd.dwd_load_task [DWD 加载任务]`"] N9 --> N48 N48["`tasks.dwd.ticket_dwd_task [任务]`"] N48 --> N49 N49["`loaders.facts.ticket [事实表加载器]`"] N9 --> N50 N50["`tasks.dwd.dwd_quality_task [DWD 加载任务]`"] N9 --> N51 N51["`tasks.utility.manual_ingest_task [任务]`"] N9 --> N52 N52["`tasks.utility.init_schema_task [Schema 初始化任务]`"] N9 --> N53 N53["`tasks.utility.init_dwd_schema_task [Schema 初始化任务]`"] N9 --> N54 N54["`tasks.utility.init_dws_schema_task [Schema 初始化任务]`"] N9 --> N55 N55["`tasks.utility.check_cutoff_task [任务]`"] N9 --> N56 N56["`tasks.utility.dws_build_order_summary_task [DWS 汇总任务]`"] N9 --> N57 N57["`tasks.utility.data_integrity_task [任务]`"] N57 --> N58 N58["`quality.integrity_service`"] N58 --> N59 N59["`quality.integrity_checker`"] N59 --> N60 N60["`scripts.check.check_ods_gaps`"] N60 --> N61 N61["`api.recording_client`"] N60 --> N62 N62["`utils.logging_utils`"] N60 --> N63 N63["`utils.ods_record_utils`"] N58 --> N64 N64["`scripts.repair.backfill_missing_data`"] N9 --> N65 N65["`tasks.utility.seed_dws_config_task [任务]`"] N9 --> N66 N66["`tasks.dws [DWS 汇总任务]`"] N2 --> N67 N67["`orchestration.task_executor`"] N67 --> N68 N68["`api.local_json_client`"] N2 --> N69 N69["`orchestration.pipeline_runner`"] N69 --> N70 N70["`tasks.verification [校验任务]`"] N69 --> N71 N71["`utils.task_logger`"] N72["`gui.main`"] N72 --> N73 N73["`gui.main_window`"] N74["`scripts.run_update`"] N74 --> N3 N3["`api.client`"] N4["`api.endpoint_routing`"] N74 --> N1 N1["`config.settings`"] N74 --> N5 N5["`database.connection`"] N74 --> N6 N6["`database.operations`"] N74 --> N2 N2["`orchestration.scheduler`"] N7["`orchestration.cursor_manager`"] N8["`orchestration.run_tracker`"] N9["`orchestration.task_registry`"] N10["`tasks.ods.orders_task [任务]`"] N11["`tasks.base_task [任务]`"] N12["`utils.windowing`"] N13["`loaders.facts.order [事实表加载器]`"] N14["`models.parsers`"] N15["`tasks.ods.payments_task [任务]`"] N16["`loaders.facts.payment [事实表加载器]`"] N17["`tasks.ods.members_task [任务]`"] N18["`loaders.dimensions.member [维度加载器 (SCD2)]`"] N19["`tasks.ods.products_task [任务]`"] N20["`loaders.dimensions.product [维度加载器 (SCD2)]`"] N21["`scd.scd2_handler`"] N22["`tasks.ods.tables_task [任务]`"] N23["`loaders.dimensions.table [维度加载器 (SCD2)]`"] N24["`tasks.ods.assistants_task [任务]`"] N25["`loaders.dimensions.assistant [维度加载器 (SCD2)]`"] N26["`tasks.ods.packages_task [任务]`"] N27["`loaders.dimensions.package [维度加载器 (SCD2)]`"] N28["`tasks.ods.refunds_task [任务]`"] N29["`loaders.facts.refund [事实表加载器]`"] N30["`tasks.ods.coupon_usage_task [任务]`"] N31["`loaders.facts.coupon_usage [事实表加载器]`"] N32["`tasks.ods.inventory_change_task [任务]`"] N33["`loaders.facts.inventory_change [事实表加载器]`"] N34["`tasks.ods.topups_task [任务]`"] N35["`loaders.facts.topup [事实表加载器]`"] N36["`tasks.ods.table_discount_task [任务]`"] N37["`loaders.facts.table_discount [事实表加载器]`"] N38["`tasks.ods.assistant_abolish_task [任务]`"] N39["`loaders.facts.assistant_abolish [事实表加载器]`"] N40["`tasks.ods.ledger_task [任务]`"] N41["`loaders.facts.assistant_ledger [事实表加载器]`"] N42["`tasks.ods.ods_tasks [ODS 抓取任务]`"] N43["`tasks.ods.ods_json_archive_task [ODS 抓取任务]`"] N44["`utils.json_store`"] N45["`tasks.dwd.payments_dwd_task [任务]`"] N46["`tasks.dwd.members_dwd_task [任务]`"] N47["`tasks.dwd.dwd_load_task [DWD 加载任务]`"] N48["`tasks.dwd.ticket_dwd_task [任务]`"] N49["`loaders.facts.ticket [事实表加载器]`"] N50["`tasks.dwd.dwd_quality_task [DWD 加载任务]`"] N51["`tasks.utility.manual_ingest_task [任务]`"] N52["`tasks.utility.init_schema_task [Schema 初始化任务]`"] N53["`tasks.utility.init_dwd_schema_task [Schema 初始化任务]`"] N54["`tasks.utility.init_dws_schema_task [Schema 初始化任务]`"] N55["`tasks.utility.check_cutoff_task [任务]`"] N56["`tasks.utility.dws_build_order_summary_task [DWS 汇总任务]`"] N57["`tasks.utility.data_integrity_task [任务]`"] N58["`quality.integrity_service`"] N59["`quality.integrity_checker`"] N60["`scripts.check.check_ods_gaps`"] N61["`api.recording_client`"] N62["`utils.logging_utils`"] N63["`utils.ods_record_utils`"] N64["`scripts.repair.backfill_missing_data`"] N65["`tasks.utility.seed_dws_config_task [任务]`"] N66["`tasks.dws [DWS 汇总任务]`"] N67["`orchestration.task_executor`"] N68["`api.local_json_client`"] N69["`orchestration.pipeline_runner`"] N70["`tasks.verification [校验任务]`"] N71["`utils.task_logger`"] ``` ## 流程树(缩进文本) - `cli.main` (`cli/main.py`) - `config.settings` (`config/settings.py`) - `orchestration.scheduler` (`orchestration/scheduler.py`) - `api.client` (`api/client.py`) - `api.endpoint_routing` (`api/endpoint_routing.py`) - `database.connection` (`database/connection.py`) - `database.operations` (`database/operations.py`) - `orchestration.cursor_manager` (`orchestration/cursor_manager.py`) - `orchestration.run_tracker` (`orchestration/run_tracker.py`) - `orchestration.task_registry` (`orchestration/task_registry.py`) - `tasks.ods.orders_task` (`tasks/ods/orders_task.py`) [任务] - `tasks.base_task` (`tasks/base_task.py`) [任务] - `utils.windowing` (`utils/windowing.py`) - `loaders.facts.order` (`loaders/facts/order.py`) [事实表加载器] - `models.parsers` (`models/parsers.py`) - `tasks.ods.payments_task` (`tasks/ods/payments_task.py`) [任务] - `loaders.facts.payment` (`loaders/facts/payment.py`) [事实表加载器] - `tasks.ods.members_task` (`tasks/ods/members_task.py`) [任务] - `loaders.dimensions.member` (`loaders/dimensions/member.py`) [维度加载器 (SCD2)] - `tasks.ods.products_task` (`tasks/ods/products_task.py`) [任务] - `loaders.dimensions.product` (`loaders/dimensions/product.py`) [维度加载器 (SCD2)] - `scd.scd2_handler` (`scd/scd2_handler.py`) - `tasks.ods.tables_task` (`tasks/ods/tables_task.py`) [任务] - `loaders.dimensions.table` (`loaders/dimensions/table.py`) [维度加载器 (SCD2)] - `tasks.ods.assistants_task` (`tasks/ods/assistants_task.py`) [任务] - `loaders.dimensions.assistant` (`loaders/dimensions/assistant.py`) [维度加载器 (SCD2)] - `tasks.ods.packages_task` (`tasks/ods/packages_task.py`) [任务] - `loaders.dimensions.package` (`loaders/dimensions/package.py`) [维度加载器 (SCD2)] - `tasks.ods.refunds_task` (`tasks/ods/refunds_task.py`) [任务] - `loaders.facts.refund` (`loaders/facts/refund.py`) [事实表加载器] - `tasks.ods.coupon_usage_task` (`tasks/ods/coupon_usage_task.py`) [任务] - `loaders.facts.coupon_usage` (`loaders/facts/coupon_usage.py`) [事实表加载器] - `tasks.ods.inventory_change_task` (`tasks/ods/inventory_change_task.py`) [任务] - `loaders.facts.inventory_change` (`loaders/facts/inventory_change.py`) [事实表加载器] - `tasks.ods.topups_task` (`tasks/ods/topups_task.py`) [任务] - `loaders.facts.topup` (`loaders/facts/topup.py`) [事实表加载器] - `tasks.ods.table_discount_task` (`tasks/ods/table_discount_task.py`) [任务] - `loaders.facts.table_discount` (`loaders/facts/table_discount.py`) [事实表加载器] - `tasks.ods.assistant_abolish_task` (`tasks/ods/assistant_abolish_task.py`) [任务] - `loaders.facts.assistant_abolish` (`loaders/facts/assistant_abolish.py`) [事实表加载器] - `tasks.ods.ledger_task` (`tasks/ods/ledger_task.py`) [任务] - `loaders.facts.assistant_ledger` (`loaders/facts/assistant_ledger.py`) [事实表加载器] - `tasks.ods.ods_tasks` (`tasks/ods/ods_tasks.py`) [ODS 抓取任务] - `tasks.ods.ods_json_archive_task` (`tasks/ods/ods_json_archive_task.py`) [ODS 抓取任务] - `utils.json_store` (`utils/json_store.py`) - `tasks.dwd.payments_dwd_task` (`tasks/dwd/payments_dwd_task.py`) [任务] - `tasks.dwd.members_dwd_task` (`tasks/dwd/members_dwd_task.py`) [任务] - `tasks.dwd.dwd_load_task` (`tasks/dwd/dwd_load_task.py`) [DWD 加载任务] - `tasks.dwd.ticket_dwd_task` (`tasks/dwd/ticket_dwd_task.py`) [任务] - `loaders.facts.ticket` (`loaders/facts/ticket.py`) [事实表加载器] - `tasks.dwd.dwd_quality_task` (`tasks/dwd/dwd_quality_task.py`) [DWD 加载任务] - `tasks.utility.manual_ingest_task` (`tasks/utility/manual_ingest_task.py`) [任务] - `tasks.utility.init_schema_task` (`tasks/utility/init_schema_task.py`) [Schema 初始化任务] - `tasks.utility.init_dwd_schema_task` (`tasks/utility/init_dwd_schema_task.py`) [Schema 初始化任务] - `tasks.utility.init_dws_schema_task` (`tasks/utility/init_dws_schema_task.py`) [Schema 初始化任务] - `tasks.utility.check_cutoff_task` (`tasks/utility/check_cutoff_task.py`) [任务] - `tasks.utility.dws_build_order_summary_task` (`tasks/utility/dws_build_order_summary_task.py`) [DWS 汇总任务] - `tasks.utility.data_integrity_task` (`tasks/utility/data_integrity_task.py`) [任务] - `quality.integrity_service` (`quality/integrity_service.py`) - `quality.integrity_checker` (`quality/integrity_checker.py`) - `scripts.check.check_ods_gaps` (`scripts/check/check_ods_gaps.py`) - `api.recording_client` (`api/recording_client.py`) - `utils.logging_utils` (`utils/logging_utils.py`) - `utils.ods_record_utils` (`utils/ods_record_utils.py`) - `scripts.repair.backfill_missing_data` (`scripts/repair/backfill_missing_data.py`) - `tasks.utility.seed_dws_config_task` (`tasks/utility/seed_dws_config_task.py`) [任务] - `tasks.dws` (`tasks/dws/__init__.py`) [DWS 汇总任务] - `orchestration.task_executor` (`orchestration/task_executor.py`) - `api.local_json_client` (`api/local_json_client.py`) - `orchestration.pipeline_runner` (`orchestration/pipeline_runner.py`) - `tasks.verification` (`tasks/verification/__init__.py`) [校验任务] - `utils.task_logger` (`utils/task_logger.py`) - `gui.main` (`gui/main.py`) - `gui.main_window` (`gui/main_window.py`) - `scripts.run_update` (`scripts/run_update.py`) - `api.client` (`api/client.py`) - *(已展开)* - `config.settings` (`config/settings.py`) - `database.connection` (`database/connection.py`) - `database.operations` (`database/operations.py`) - `orchestration.scheduler` (`orchestration/scheduler.py`) - *(已展开)* ## 孤立模块 - `config/defaults.py` - `config/env_parser.py` - `database/base.py` - `gui/models/schedule_model.py` - `gui/models/task_model.py` - `gui/models/task_registry.py` - `gui/utils/app_settings.py` - `gui/utils/cli_builder.py` - `gui/utils/config_helper.py` - `gui/widgets/db_viewer.py` - `gui/widgets/env_editor.py` - `gui/widgets/log_viewer.py` - `gui/widgets/pipeline_selector.py` - `gui/widgets/settings_dialog.py` - `gui/widgets/status_panel.py` - `gui/widgets/task_manager.py` - `gui/widgets/task_panel.py` - `gui/widgets/task_selector.py` - `gui/workers/db_worker.py` - `gui/workers/task_worker.py` - `loaders/base_loader.py` - `loaders/ods/generic.py` - `models/validators.py` - `quality/balance_checker.py` - `quality/base_checker.py` - `scripts/check/check_data_integrity.py` - `scripts/check/check_dwd_service.py` - `scripts/check/check_ods_content_hash.py` - `scripts/check/check_ods_json_vs_table.py` - `scripts/check/verify_dws_config.py` - `scripts/db_admin/import_dws_excel.py` - `scripts/export/export_cfg_index_parameters.py` - `scripts/export/export_groupbuy_orders_with_assistant_service.py` - `scripts/export/export_index_tables.py` - `scripts/export/export_intimacy_full_json.py` - `scripts/export/export_visit_60d_member_detail_with_indices.py` - `scripts/rebuild/rebuild_db_and_run_ods_to_dwd.py` - `scripts/repair/dedupe_ods_snapshots.py` - `scripts/repair/fix_dim_assistant_user_id.py` - `scripts/repair/repair_ods_content_hash.py` - `scripts/repair/tune_integrity_indexes.py` - `tasks/dwd/base_dwd_task.py` - `tasks/dws/assistant_customer_task.py` - `tasks/dws/assistant_daily_task.py` - `tasks/dws/assistant_finance_task.py` - `tasks/dws/assistant_monthly_task.py` - `tasks/dws/assistant_salary_task.py` - `tasks/dws/base_dws_task.py` - `tasks/dws/finance_daily_task.py` - `tasks/dws/finance_discount_task.py` - `tasks/dws/finance_income_task.py` - `tasks/dws/finance_recharge_task.py` - `tasks/dws/index/base_index_task.py` - `tasks/dws/index/intimacy_index_task.py` - `tasks/dws/index/member_index_base.py` - `tasks/dws/index/ml_manual_import_task.py` - `tasks/dws/index/newconv_index_task.py` - `tasks/dws/index/recall_index_task.py` - `tasks/dws/index/relation_index_task.py` - `tasks/dws/index/winback_index_task.py` - `tasks/dws/member_consumption_task.py` - `tasks/dws/member_visit_task.py` - `tasks/dws/mv_refresh_task.py` - `tasks/dws/retention_cleanup_task.py` - `tasks/verification/base_verifier.py` - `tasks/verification/dwd_verifier.py` - `tasks/verification/dws_verifier.py` - `tasks/verification/index_verifier.py` - `tasks/verification/models.py` - `tasks/verification/ods_verifier.py` - `utils/helpers.py` - `utils/reporting.py` ## 统计摘要 | 指标 | 数量 | |------|------| | 入口点 | 3 | | 任务 | 29 | | 加载器 | 15 | | 孤立模块 | 72 |