343 lines
15 KiB
Plaintext
343 lines
15 KiB
Plaintext
# ==============================================================================
|
||
# NeoZQYY Monorepo 公共环境配置模板
|
||
# ==============================================================================
|
||
# 使用方式:复制为 .env 后填入实际值
|
||
# 配置优先级:DEFAULTS < .env < .env.local < 环境变量 < CLI 参数
|
||
#
|
||
# 本文件包含所有层级的参数模板:
|
||
# [ROOT] — 根 .env(公共配置,所有子系统共享)
|
||
# [ETL] — apps/etl/connectors/feiqiu/.env(ETL 专属配置)
|
||
# [BACKEND] — apps/backend/.env.local(后端私有覆盖)
|
||
#
|
||
# 语法:KEY=VALUE(正斜杠路径,布尔值用 true/false,列表用逗号分隔)
|
||
|
||
# ╔════════════════════════════════════════════════════════════════════════════╗
|
||
# ║ [ROOT] 根 .env — 公共配置层 ║
|
||
# ╚════════════════════════════════════════════════════════════════════════════╝
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 数据库公共连接参数(后端 + ETL 共用同一 PostgreSQL 实例)
|
||
# ------------------------------------------------------------------------------
|
||
DB_HOST=localhost
|
||
DB_PORT=5432
|
||
DB_USER=
|
||
DB_PASSWORD=
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 数据库名称
|
||
# 数据库清单:
|
||
# etl_feiqiu — ETL 流程(飞球连接器),正式环境
|
||
# test_etl_feiqiu — ETL 流程(飞球连接器),开发/测试环境
|
||
# zqyy_app — 小程序业务库,正式环境
|
||
# test_zqyy_app — 小程序业务库,开发/测试环境
|
||
# 开发/测试环境使用 test_ 前缀库
|
||
# ------------------------------------------------------------------------------
|
||
APP_DB_NAME=test_zqyy_app
|
||
ETL_DB_NAME=test_etl_feiqiu
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 组合式 DSN(各子系统 / 脚本需要完整连接串时使用)
|
||
# 格式:postgresql://user:password@host:port/dbname
|
||
# ------------------------------------------------------------------------------
|
||
PG_DSN=postgresql://user:password@host:5432/test_etl_feiqiu
|
||
APP_DB_DSN=postgresql://user:password@host:5432/test_zqyy_app
|
||
|
||
# 测试库 DSN(运维脚本、集成测试优先使用)
|
||
TEST_DB_DSN=postgresql://user:password@host:5432/test_etl_feiqiu
|
||
TEST_APP_DB_DSN=postgresql://user:password@host:5432/test_zqyy_app
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 通用
|
||
# ------------------------------------------------------------------------------
|
||
TIMEZONE=Asia/Shanghai
|
||
LOG_LEVEL=INFO
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 营业日切点(统计日/周/月分割小时,默认 8 即 08:00)
|
||
# 日统计 = 当日 08:00 ~ 次日 08:00
|
||
# 月统计 = 当月1日 08:00 ~ 次月1日 08:00
|
||
# 周统计 = 周一 08:00 ~ 次周一 08:00
|
||
# ------------------------------------------------------------------------------
|
||
BUSINESS_DAY_START_HOUR=8
|
||
|
||
# ==============================================================================
|
||
# 统一输出路径配置(export/ 目录)
|
||
# ==============================================================================
|
||
# 目录总览:
|
||
# export/
|
||
# ├── ETL-Connectors/feiqiu/
|
||
# │ ├── JSON/ — API 原始 JSON 导出
|
||
# │ ├── LOGS/ — ETL 运行日志
|
||
# │ └── REPORTS/ — ETL 质检/完整性报告
|
||
# ├── SYSTEM/
|
||
# │ ├── LOGS/ — 系统级运维日志
|
||
# │ ├── REPORTS/
|
||
# │ │ ├── dataflow_analysis/ — 数据流结构分析报告
|
||
# │ │ ├── field_audit/ — 字段排查报告
|
||
# │ │ └── full_dataflow_doc/ — 全链路数据流文档
|
||
# │ └── CACHE/
|
||
# │ └── api_samples/ — API 样本缓存
|
||
# └── BACKEND/
|
||
# └── LOGS/ — 后端结构化日志
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# ETL Connector 输出路径
|
||
# ------------------------------------------------------------------------------
|
||
EXPORT_ROOT=C:/NeoZQYY/export/ETL-Connectors/feiqiu/JSON
|
||
LOG_ROOT=C:/NeoZQYY/export/ETL-Connectors/feiqiu/LOGS
|
||
FETCH_ROOT=C:/NeoZQYY/export/ETL-Connectors/feiqiu/JSON
|
||
ETL_REPORT_ROOT=C:/NeoZQYY/export/ETL-Connectors/feiqiu/REPORTS
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 系统级输出路径
|
||
# ------------------------------------------------------------------------------
|
||
SYSTEM_ANALYZE_ROOT=C:/NeoZQYY/export/SYSTEM/REPORTS/dataflow_analysis
|
||
FIELD_AUDIT_ROOT=C:/NeoZQYY/export/SYSTEM/REPORTS/field_audit
|
||
FULL_DATAFLOW_DOC_ROOT=C:/NeoZQYY/export/SYSTEM/REPORTS/full_dataflow_doc
|
||
API_SAMPLE_CACHE_ROOT=C:/NeoZQYY/export/SYSTEM/CACHE/api_samples
|
||
SYSTEM_LOG_ROOT=C:/NeoZQYY/export/SYSTEM/LOGS
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 后端输出路径
|
||
# ------------------------------------------------------------------------------
|
||
BACKEND_LOG_ROOT=C:/NeoZQYY/export/BACKEND/LOGS
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 阿里云百炼 AI 配置
|
||
# ------------------------------------------------------------------------------
|
||
BAILIAN_API_KEY=
|
||
BAILIAN_MODEL=qwen-plus
|
||
BAILIAN_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
|
||
BAILIAN_TEST_APP_ID=
|
||
|
||
# 8 个百炼 AI 应用 ID(从百炼平台获取)
|
||
# 应用 1:通用对话 | 应用 2:财务洞察 | 应用 3:客户数据维客线索分析
|
||
# 应用 4:关系分析/任务建议 | 应用 5:话术参考 | 应用 6:备注分析
|
||
# 应用 7:客户分析 | 应用 8:维客线索整理
|
||
BAILIAN_APP_ID_1_CHAT=
|
||
BAILIAN_APP_ID_2_FINANCE=
|
||
BAILIAN_APP_ID_3_CLUE=
|
||
BAILIAN_APP_ID_4_ANALYSIS=
|
||
BAILIAN_APP_ID_5_TACTICS=
|
||
BAILIAN_APP_ID_6_NOTE=
|
||
BAILIAN_APP_ID_7_CUSTOMER=
|
||
BAILIAN_APP_ID_8_CONSOLIDATE=
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 管道限流配置(RateLimiter 请求间隔,秒)
|
||
# 默认 0.1-2.0s,防止上游风控同时避免过度等待
|
||
# ------------------------------------------------------------------------------
|
||
PIPELINE_RATE_MIN=0.1
|
||
PIPELINE_RATE_MAX=2.0
|
||
|
||
# ╔════════════════════════════════════════════════════════════════════════════╗
|
||
# ║ [ETL] apps/etl/connectors/feiqiu/.env — ETL 专属配置 ║
|
||
# ╚════════════════════════════════════════════════════════════════════════════╝
|
||
# 以下参数应放在 apps/etl/connectors/feiqiu/.env 中,而非根 .env
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 门店配置
|
||
# ------------------------------------------------------------------------------
|
||
STORE_ID=
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 数据库配置(ETL 专属,覆盖根 .env 的公共参数)
|
||
# ------------------------------------------------------------------------------
|
||
# 完整 DSN(优先使用,设置后忽略分离式配置)
|
||
# PG_DSN=postgresql://user:password@host:5432/test_etl_feiqiu
|
||
PG_CONNECT_TIMEOUT=10
|
||
|
||
# 分离式配置(不使用 DSN 时启用)
|
||
# PG_HOST=localhost
|
||
# PG_PORT=5432
|
||
# PG_USER=your_user
|
||
# PG_PASSWORD=your_password
|
||
# PG_NAME=your_database
|
||
|
||
# 数据库 Schema
|
||
SCHEMA_OLTP=ods
|
||
SCHEMA_ETL=meta
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 数据库会话参数(defaults.py → db.session.*)
|
||
# ------------------------------------------------------------------------------
|
||
# DB_SESSION_TIMEZONE=Asia/Shanghai
|
||
# DB_STATEMENT_TIMEOUT_MS=30000
|
||
# DB_LOCK_TIMEOUT_MS=5000
|
||
# DB_IDLE_IN_TX_TIMEOUT_MS=600000
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# API 配置(上游 SaaS API)
|
||
# ------------------------------------------------------------------------------
|
||
API_BASE=
|
||
API_TOKEN=
|
||
API_TIMEOUT=20
|
||
API_PAGE_SIZE=200
|
||
API_RETRY_MAX=3
|
||
# API_RETRY_BACKOFF=[1, 2, 4]
|
||
# API_PARAMS={}
|
||
# API_HEADERS_EXTRA={}
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 管线流程配置
|
||
# ------------------------------------------------------------------------------
|
||
PIPELINE_FLOW=FULL
|
||
# DATA_SOURCE=hybrid
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 时间窗口配置
|
||
# ------------------------------------------------------------------------------
|
||
OVERLAP_SECONDS=600
|
||
WINDOW_BUSY_MIN=30
|
||
WINDOW_IDLE_MIN=180
|
||
IDLE_START=04:00
|
||
IDLE_END=16:00
|
||
WINDOW_SPLIT_UNIT=day
|
||
WINDOW_SPLIT_DAYS=10
|
||
WINDOW_COMPENSATION_HOURS=2
|
||
ALLOW_EMPTY_RESULT_ADVANCE=true
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 快照配置
|
||
# ------------------------------------------------------------------------------
|
||
SNAPSHOT_MISSING_DELETE=true
|
||
SNAPSHOT_ALLOW_EMPTY_DELETE=false
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 数据完整性检查配置
|
||
# ------------------------------------------------------------------------------
|
||
INTEGRITY_MODE=history
|
||
INTEGRITY_HISTORY_START=2025-07-01
|
||
# INTEGRITY_HISTORY_END=
|
||
INTEGRITY_INCLUDE_DIMENSIONS=true
|
||
INTEGRITY_AUTO_CHECK=false
|
||
INTEGRITY_AUTO_BACKFILL=false
|
||
INTEGRITY_COMPARE_CONTENT=true
|
||
INTEGRITY_CONTENT_SAMPLE_LIMIT=50
|
||
INTEGRITY_BACKFILL_MISMATCH=true
|
||
INTEGRITY_RECHECK_AFTER_BACKFILL=true
|
||
# INTEGRITY_ODS_TASK_CODES=
|
||
# INTEGRITY_FORCE_MONTHLY_SPLIT=true
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 校验配置
|
||
# ------------------------------------------------------------------------------
|
||
VERIFY_SKIP_ODS_ON_FETCH=true
|
||
VERIFY_ODS_LOCAL_JSON=true
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# IO 配置
|
||
# ------------------------------------------------------------------------------
|
||
WRITE_PRETTY_JSON=true
|
||
# INGEST_SOURCE_DIR=
|
||
# MANIFEST_NAME=manifest.json
|
||
# INGEST_REPORT_NAME=ingest_report.json
|
||
# MAX_FILE_BYTES=52428800
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 清洗配置(defaults.py → clean.*)
|
||
# ------------------------------------------------------------------------------
|
||
# CLEAN_LOG_UNKNOWN_FIELDS=true
|
||
# CLEAN_UNKNOWN_FIELDS_LIMIT=50
|
||
# CLEAN_HASH_ALGO=sha1
|
||
# CLEAN_HASH_SALT=
|
||
# CLEAN_STRICT_NUMERIC=true
|
||
# CLEAN_ROUND_MONEY_SCALE=2
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 安全配置(defaults.py → security.*)
|
||
# ------------------------------------------------------------------------------
|
||
# SECURITY_REDACT_IN_LOGS=true
|
||
# SECURITY_REDACT_KEYS=["token","password","Authorization"]
|
||
# SECURITY_ECHO_TOKEN_IN_LOGS=false
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# DWD 层配置
|
||
# ------------------------------------------------------------------------------
|
||
DWD_FACT_UPSERT=true
|
||
# DWD_FACT_UPSERT_BATCH_SIZE=1000
|
||
# DWD_FACT_UPSERT_MIN_BATCH_SIZE=100
|
||
# DWD_FACT_UPSERT_MAX_RETRIES=2
|
||
# DWD_FACT_UPSERT_RETRY_BACKOFF=[1,2,4]
|
||
# DWD_FACT_UPSERT_LOCK_TIMEOUT_MS=
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 任务列表配置
|
||
# ------------------------------------------------------------------------------
|
||
RUN_TASKS=PRODUCTS,TABLES,MEMBERS,ASSISTANTS,PACKAGES_DEF,ORDERS,PAYMENTS,REFUNDS,COUPON_USAGE,INVENTORY_CHANGE,TOPUPS,TABLE_DISCOUNT,LEDGER
|
||
# RUN_DWS_TASKS=
|
||
# RUN_INDEX_TASKS=
|
||
INDEX_LOOKBACK_DAYS=60
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# DWS 月度/薪资配置
|
||
# ------------------------------------------------------------------------------
|
||
# DWS_MONTHLY_NEW_HIRE_CAP_EFFECTIVE_FROM=2026-03-01
|
||
# DWS_MONTHLY_NEW_HIRE_CAP_DAY=25
|
||
# DWS_MONTHLY_NEW_HIRE_MAX_TIER_LEVEL=2
|
||
# DWS_SALARY_RUN_DAYS=5
|
||
# DWS_SALARY_ALLOW_OUT_OF_CYCLE=false
|
||
# DWS_SALARY_ROOM_COURSE_PRICE=138
|
||
# DWS_MONTHLY_ALLOW_HISTORY=false
|
||
# DWS_MONTHLY_PREV_GRACE_DAYS=5
|
||
# DWS_MONTHLY_HISTORY_MONTHS=0
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# ODS 离线回放配置(仅开发/运维使用)
|
||
# ------------------------------------------------------------------------------
|
||
# ODS_JSON_DOC_DIR=export/test-json-doc
|
||
# ODS_INCLUDE_FILES=
|
||
# ODS_DROP_SCHEMA_FIRST=true
|
||
|
||
# ╔════════════════════════════════════════════════════════════════════════════╗
|
||
# ║ [BACKEND] apps/backend/.env.local — 后端私有覆盖 ║
|
||
# ╚════════════════════════════════════════════════════════════════════════════╝
|
||
# 以下参数应放在 apps/backend/.env.local 中,而非根 .env
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# ETL 数据库(后端只读访问,用于数据库查看器;省略时复用 DB_HOST/PORT/USER/PASSWORD)
|
||
# ------------------------------------------------------------------------------
|
||
# ETL_DB_HOST=
|
||
# ETL_DB_PORT=
|
||
# ETL_DB_USER=
|
||
# ETL_DB_PASSWORD=
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# JWT 认证
|
||
# ------------------------------------------------------------------------------
|
||
# JWT_SECRET_KEY=change-me-in-production
|
||
# JWT_ALGORITHM=HS256
|
||
# JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
|
||
# JWT_REFRESH_TOKEN_EXPIRE_DAYS=7
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 微信小程序配置
|
||
# 代码读取 WX_APPID / WX_SECRET(注意无下划线分隔)
|
||
# WX_DEV_MODE=true 时启用 mock 登录端点,跳过微信 code2Session
|
||
# ------------------------------------------------------------------------------
|
||
# WX_APPID=
|
||
# WX_SECRET=
|
||
# WX_DEV_MODE=false
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# CORS(逗号分隔)
|
||
# ------------------------------------------------------------------------------
|
||
# CORS_ORIGINS=http://localhost:5173
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# ETL 项目路径(子进程 cwd)
|
||
# CHANGE 2026-03-06 | 必须显式设置,禁止依赖 __file__ 推算
|
||
# ------------------------------------------------------------------------------
|
||
ETL_PROJECT_PATH=C:/NeoZQYY/apps/etl/connectors/feiqiu
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# ETL 子进程 Python 可执行路径
|
||
# CHANGE 2026-03-06 | 必须显式设置,避免 PATH 歧义
|
||
# ------------------------------------------------------------------------------
|
||
ETL_PYTHON_EXECUTABLE=C:/NeoZQYY/.venv/Scripts/python.exe
|
||
|
||
# ------------------------------------------------------------------------------
|
||
# 运维面板服务器根目录
|
||
# CHANGE 2026-03-06 | 必须显式设置,消除 __file__ 推算风险
|
||
# ------------------------------------------------------------------------------
|
||
OPS_SERVER_BASE=C:/NeoZQYY |