修改总结

This commit is contained in:
2025-11-03 16:10:35 +08:00
parent cb84b0238a
commit 0d84ffe87f
4 changed files with 307 additions and 155 deletions

73
app.py
View File

@@ -97,6 +97,38 @@ def get_trading_day_near_date(target_date):
return trading_days[-1] if trading_days else None
def get_previous_trading_day(target_date):
"""
获取指定日期的上一个交易日
如果目标日期不是交易日,先找到对应的交易日,然后返回前一个交易日
"""
if not trading_days:
load_trading_days()
if not trading_days:
return None
# 如果目标日期是datetime转换为date
if isinstance(target_date, datetime):
target_date = target_date.date()
# 确保目标日期是交易日
if target_date not in trading_days_set:
target_date = get_trading_day_near_date(target_date)
if not target_date:
return None
# 查找上一个交易日
try:
index = trading_days.index(target_date)
if index > 0:
return trading_days[index - 1]
else:
return None # 没有上一个交易日
except ValueError:
return None
# 应用启动时加载交易日数据
load_trading_days()
@@ -6595,6 +6627,9 @@ def api_get_events():
event_status = request.args.get('status', 'active')
importance = request.args.get('importance', 'all')
# 交易日筛选参数
tday = request.args.get('tday') # 交易日格式YYYY-MM-DD 或 YYYY/M/D
# 日期筛选参数
start_date = request.args.get('start_date')
end_date = request.args.get('end_date')
@@ -6680,7 +6715,41 @@ def api_get_events():
text(f"JSON_SEARCH(keywords, 'one', '%{search_query}%') IS NOT NULL")
)
)
if recent_days:
# 交易日筛选逻辑
if tday:
from datetime import datetime, timedelta, time
try:
# 解析交易日参数,支持 YYYY-MM-DD 和 YYYY/M/D 格式
if '/' in tday:
target_tday = datetime.strptime(tday, '%Y/%m/%d').date()
else:
target_tday = datetime.strptime(tday, '%Y-%m-%d').date()
# 获取该交易日的上一个交易日
prev_tday = get_previous_trading_day(target_tday)
if prev_tday:
# 计算时间范围:[前一个交易日 15:00, 当前交易日 15:00]
start_datetime = datetime.combine(prev_tday, time(15, 0, 0))
end_datetime = datetime.combine(target_tday, time(15, 0, 0))
query = query.filter(
Event.created_at >= start_datetime,
Event.created_at <= end_datetime
)
else:
# 如果没有上一个交易日,则筛选当天的事件
start_datetime = datetime.combine(target_tday, time(0, 0, 0))
end_datetime = datetime.combine(target_tday, time(15, 0, 0))
query = query.filter(
Event.created_at >= start_datetime,
Event.created_at <= end_datetime
)
except (ValueError, TypeError) as e:
# 日期格式错误,忽略该参数
app.logger.warning(f"无效的交易日参数: {tday}, 错误: {e}")
elif recent_days:
from datetime import datetime, timedelta
cutoff_date = datetime.now() - timedelta(days=recent_days)
query = query.filter(Event.created_at >= cutoff_date)
@@ -6786,6 +6855,8 @@ def api_get_events():
applied_filters['type'] = event_type
if importance != 'all':
applied_filters['importance'] = importance
if tday:
applied_filters['tday'] = tday
if start_date:
applied_filters['start_date'] = start_date
if end_date: