Initial commit: stock analysis backend and prototype UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-13 02:26:22 +08:00
commit 8de37d5c2d
25 changed files with 4624 additions and 0 deletions

53
backend/config.py Normal file
View File

@@ -0,0 +1,53 @@
"""中台配置。优先读环境变量,便于以后切换部署环境。
可在 backend/.env 写入密钥(大模型 key、邮箱、推送 token无需改代码。
"""
import os
try:
from dotenv import load_dotenv
load_dotenv(os.path.join(os.path.dirname(os.path.abspath(__file__)), ".env"))
except Exception:
pass
PG_USER = os.getenv("PG_USER", "postgres")
PG_PASSWORD = os.getenv("PG_PASSWORD", "13142324")
PG_HOST = os.getenv("PG_HOST", "localhost")
PG_PORT = os.getenv("PG_PORT", "5432")
PG_DB = os.getenv("PG_DB", "stock_cs")
DB_URL = f"postgresql+psycopg2://{PG_USER}:{PG_PASSWORD}@{PG_HOST}:{PG_PORT}/{PG_DB}"
DB_URL_DEFAULT = f"postgresql+psycopg2://{PG_USER}:{PG_PASSWORD}@{PG_HOST}:{PG_PORT}/postgres"
# 默认入库股票池(沪深龙头 + 自选)。可在「数据中台」页或环境变量扩展。
DEFAULT_UNIVERSE = [
"600519", "300750", "002594", "688981", "300059", "601012",
"600036", "601318", "000858", "002415", "600276", "002230",
"601899", "600030", "000333", "002475", "300760", "601166",
"688111", "600887",
]
# 收盘后定时任务时间24h制本地时区
INGEST_HOUR = int(os.getenv("INGEST_HOUR", "15"))
INGEST_MINUTE = int(os.getenv("INGEST_MINUTE", "35"))
# ---- 大模型OpenAI 兼容DeepSeek/通义/Kimi 等均可)----
# 配置环境变量 LLM_API_KEY 后即启用真实大模型,否则走内置规则点评。
LLM_API_KEY = os.getenv("LLM_API_KEY", "")
LLM_BASE_URL = os.getenv("LLM_BASE_URL", "https://api.deepseek.com/v1")
LLM_MODEL = os.getenv("LLM_MODEL", "deepseek-chat")
LLM_TIMEOUT = int(os.getenv("LLM_TIMEOUT", "40"))
# ---- 推送通知 ----
# 邮件SMTP
SMTP_HOST = os.getenv("SMTP_HOST", "")
SMTP_PORT = int(os.getenv("SMTP_PORT", "465"))
SMTP_USER = os.getenv("SMTP_USER", "")
SMTP_PASSWORD = os.getenv("SMTP_PASSWORD", "") # 邮箱授权码
SMTP_TO = os.getenv("SMTP_TO", "") # 收件人,多个用逗号
# Server酱 Turbo微信推送最简单
SERVERCHAN_KEY = os.getenv("SERVERCHAN_KEY", "")
# 企业微信群机器人 webhook
WECOM_WEBHOOK = os.getenv("WECOM_WEBHOOK", "")
# PushPlus微信推送
PUSHPLUS_TOKEN = os.getenv("PUSHPLUS_TOKEN", "")