update pay ui
This commit is contained in:
49
app.py
49
app.py
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user