update pay ui

This commit is contained in:
2025-12-03 15:19:23 +08:00
parent 722d76093d
commit 94ad679f6f
3 changed files with 212 additions and 37 deletions

49
app.py
View File

@@ -6314,14 +6314,22 @@ def get_stock_kline(stock_code):
@app.route('/api/stock/batch-kline', methods=['POST'])
def get_batch_kline_data():
"""批量获取多只股票的K线/分时数据
请求体:{ codes: string[], type: 'timeline'|'daily', event_time?: string }
返回:{ success: true, data: { [code]: { data: [], trade_date: '', ... } } }
请求体:{
codes: string[],
type: 'timeline'|'daily',
event_time?: string,
days_before?: number, # 查询事件日期前多少天的数据默认60最大365
end_date?: string # 分页加载时指定结束日期(用于加载更早的数据)
}
返回:{ success: true, data: { [code]: { data: [], trade_date: '', ... } }, has_more: boolean }
"""
try:
data = request.json
codes = data.get('codes', [])
chart_type = data.get('type', 'timeline')
event_time = data.get('event_time')
days_before = min(int(data.get('days_before', 60)), 365) # 默认60天最多365天
custom_end_date = data.get('end_date') # 用于分页加载更早数据
if not codes:
return jsonify({'success': False, 'error': '请提供股票代码列表'}), 400
@@ -6435,10 +6443,21 @@ def get_batch_kline_data():
if base_codes:
placeholders = ','.join([f':code{i}' for i in range(len(base_codes))])
params = {f'code{i}': code for i, code in enumerate(base_codes)}
# 确定查询的日期范围
# 如果指定了 custom_end_date用于分页加载更早的数据
if custom_end_date:
try:
end_date_obj = datetime.strptime(custom_end_date, '%Y-%m-%d').date()
except ValueError:
end_date_obj = target_date
else:
end_date_obj = target_date
# TRADEDATE 是整数格式 YYYYMMDD需要转换日期格式
start_date = target_date - timedelta(days=60)
start_date = end_date_obj - timedelta(days=days_before)
params['start_date'] = int(start_date.strftime('%Y%m%d'))
params['end_date'] = int(target_date.strftime('%Y%m%d'))
params['end_date'] = int(end_date_obj.strftime('%Y%m%d'))
daily_result = conn.execute(text(f"""
SELECT SECCODE, TRADEDATE, F003N as open, F005N as high, F006N as low, F007N as close, F004N as volume
@@ -6473,24 +6492,40 @@ def get_batch_kline_data():
})
# 组装结果(使用原始代码作为 key 返回)
# 同时计算最早日期,用于判断是否还有更多数据
earliest_dates = {}
for orig_code in original_codes:
base_code = orig_code.split('.')[0]
stock_name = stock_names.get(base_code, f'股票{base_code}')
data_list = stock_data.get(base_code, [])
# 记录每只股票的最早日期
if data_list:
earliest_dates[orig_code] = data_list[0]['time']
results[orig_code] = {
'code': orig_code,
'name': stock_name,
'data': data_list,
'trade_date': target_date.strftime('%Y-%m-%d'),
'type': 'daily'
'type': 'daily',
'earliest_date': data_list[0]['time'] if data_list else None
}
print(f"批量K线查询完成: {len(codes)} 只股票, 类型: {chart_type}, 交易日: {target_date}")
# 计算是否还有更多历史数据基于事件日期往前推365天
event_date = event_datetime.date()
one_year_ago = event_date - timedelta(days=365)
# 如果当前查询的起始日期还没到一年前,则还有更多数据
has_more = start_date > one_year_ago if chart_type == 'daily' else False
print(f"批量K线查询完成: {len(codes)} 只股票, 类型: {chart_type}, 交易日: {target_date}, days_before: {days_before}, has_more: {has_more}")
return jsonify({
'success': True,
'data': results
'data': results,
'has_more': has_more,
'query_start_date': start_date.strftime('%Y-%m-%d') if chart_type == 'daily' else None,
'query_end_date': end_date_obj.strftime('%Y-%m-%d') if chart_type == 'daily' else None
})
except Exception as e: