update pay ui

This commit is contained in:
2025-12-15 17:48:25 +08:00
parent 1d94328745
commit 0a9d5f338e
4 changed files with 181 additions and 53 deletions

112
app.py
View File

@@ -13590,6 +13590,118 @@ def get_trade_data(seccode):
}), 500
@app.route('/api/market/trade/batch', methods=['POST'])
def get_batch_trade_data():
"""批量获取多只股票的交易数据日K线
请求体:{
codes: string[], // 股票代码列表6位代码
days: number // 获取天数默认1
}
返回:{ success: true, data: { [seccode]: { data: [], stats: {} } } }
"""
try:
data = request.json
codes = data.get('codes', [])
days = data.get('days', 1)
end_date = data.get('end_date', datetime.now().strftime('%Y-%m-%d'))
if not codes:
return jsonify({'success': False, 'error': '请提供股票代码列表'}), 400
if len(codes) > 100:
return jsonify({'success': False, 'error': '单次最多查询100只股票'}), 400
# 构建批量查询
placeholders = ','.join([f':code{i}' for i in range(len(codes))])
params = {f'code{i}': code for i, code in enumerate(codes)}
params['end_date'] = end_date
params['days'] = days
query = text(f"""
SELECT SECCODE,
TRADEDATE,
SECNAME,
F002N as pre_close,
F003N as open,
F004N as volume,
F005N as high,
F006N as low,
F007N as close,
F008N as trades_count,
F009N as change_amount,
F010N as change_percent,
F011N as amount,
F012N as turnover_rate,
F013N as amplitude
FROM ea_trade
WHERE SECCODE IN ({placeholders})
AND TRADEDATE <= :end_date
ORDER BY SECCODE, TRADEDATE DESC
""")
with engine.connect() as conn:
result = conn.execute(query, params)
rows = result.fetchall()
# 按股票代码分组每只股票只取最近N天
stock_data = {}
stock_counts = {}
for row in rows:
seccode = row.SECCODE
if seccode not in stock_data:
stock_data[seccode] = []
stock_counts[seccode] = 0
# 只取指定天数的数据
if stock_counts[seccode] < days:
stock_data[seccode].append({
'date': format_date(row.TRADEDATE),
'stock_name': row.SECNAME,
'open': format_decimal(row.open),
'high': format_decimal(row.high),
'low': format_decimal(row.low),
'close': format_decimal(row.close),
'pre_close': format_decimal(row.pre_close),
'volume': format_decimal(row.volume),
'amount': format_decimal(row.amount),
'change_amount': format_decimal(row.change_amount),
'change_percent': format_decimal(row.change_percent),
'turnover_rate': format_decimal(row.turnover_rate),
'amplitude': format_decimal(row.amplitude),
'trades_count': format_decimal(row.trades_count),
})
stock_counts[seccode] += 1
# 倒序每只股票的数据(让最早的日期在前)
results = {}
for seccode, data_list in stock_data.items():
data_list.reverse()
results[seccode] = {
'data': data_list,
'stats': {
'latest_price': data_list[-1]['close'] if data_list else None,
'change_percent': data_list[-1]['change_percent'] if data_list else None,
} if data_list else {}
}
# 为没有数据的股票返回空结果
for code in codes:
if code not in results:
results[code] = {'data': [], 'stats': {}}
return jsonify({
'success': True,
'data': results
})
except Exception as e:
return jsonify({
'success': False,
'error': str(e)
}), 500
@app.route('/api/market/funding/<seccode>', methods=['GET'])
def get_funding_data(seccode):
"""获取融资融券数据"""