mirror of
https://ghfast.top/https://github.com/aeroxw/tick-stock-panel.git
synced 2026-09-12 17:54:15 +08:00
feat: v0.2 UI 重构 + 自选分组侧边栏 + 扩展数据时间窗口 + 个股对话框优化
- 侧边栏美化:品牌改名/菜单 active 指示条/收起展开/底部精简 - 数据源+AI 状态卡:名称替换固定文字/档位 tag 条件显示 - 设置页重构:account 合入数据源 tab/数据源置顶/收起展开菜单 - 自选分组侧边栏:二级子菜单/分组跳转同步/清空分组 - 个股对话框:tab 移顶栏/分时关闭/放大全屏/操作按钮归位 - 扩展数据:定时拉取时间窗口(time_window_start/end) - 版本号: 0.1.88 → 0.2.1
This commit is contained in:
@@ -20,6 +20,21 @@ from app.services.ext_data import (
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _in_time_window(start: str | None, end: str | None) -> bool:
|
||||
"""检查当前本地时间是否在每日时间窗口内。
|
||||
|
||||
start/end 为 "HH:MM" 格式。两者都为 None 时不限制(返回 True)。
|
||||
支持跨午夜窗口(如 22:00-02:00)。
|
||||
"""
|
||||
if not start or not end:
|
||||
return True
|
||||
now = datetime.now().strftime("%H:%M")
|
||||
if start <= end:
|
||||
return start <= now < end
|
||||
# 跨午夜: 如 22:00-02:00
|
||||
return now >= start or now < end
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 响应解析
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -253,6 +268,17 @@ class PullScheduler:
|
||||
break
|
||||
pull = fresh.pull
|
||||
|
||||
# 时间窗口检查: 不在窗口内则跳过本次拉取
|
||||
if not _in_time_window(pull.time_window_start, pull.time_window_end):
|
||||
fresh.pull.last_run = datetime.now(timezone.utc).isoformat()
|
||||
fresh.pull.last_status = "skipped"
|
||||
fresh.pull.last_message = "不在拉取时间窗口内"
|
||||
store.upsert(fresh)
|
||||
logger.info("PullScheduler: %s skipped (outside time window)", config.id)
|
||||
interval = max(pull.schedule_minutes * 60, 60)
|
||||
await asyncio.sleep(interval)
|
||||
continue
|
||||
|
||||
# 先执行一次 (启用即拉取, 让用户立刻看到生效)
|
||||
try:
|
||||
n, d = await fetch_and_ingest(fresh, self._data_dir)
|
||||
|
||||
Reference in New Issue
Block a user