update pay ui

This commit is contained in:
2025-12-05 19:40:11 +08:00
parent 89f581aeed
commit 4c7a761324
4 changed files with 214 additions and 104 deletions

96
app.py
View File

@@ -5508,6 +5508,102 @@ def delete_related_stock(stock_id):
return jsonify({'success': False, 'error': str(e)}), 500
@app.route('/api/events/by-stocks', methods=['POST'])
def get_events_by_stocks():
"""
通过股票代码列表获取关联的事件(新闻)
用于概念中心时间轴:聚合概念下所有股票的相关新闻
请求体:
{
"stock_codes": ["000001.SZ", "600000.SH", ...], # 股票代码列表
"start_date": "2024-01-01", # 可选,开始日期
"end_date": "2024-12-31", # 可选,结束日期
"limit": 100 # 可选限制返回数量默认100
}
"""
try:
data = request.get_json()
stock_codes = data.get('stock_codes', [])
start_date_str = data.get('start_date')
end_date_str = data.get('end_date')
limit = data.get('limit', 100)
if not stock_codes:
return jsonify({'success': False, 'error': '缺少股票代码列表'}), 400
# 构建查询:通过 RelatedStock 表找到关联的事件
query = db.session.query(Event).join(
RelatedStock, Event.id == RelatedStock.event_id
).filter(
RelatedStock.stock_code.in_(stock_codes)
)
# 日期过滤
if start_date_str:
try:
start_date = datetime.strptime(start_date_str, '%Y-%m-%d')
query = query.filter(Event.event_date >= start_date)
except ValueError:
pass
if end_date_str:
try:
end_date = datetime.strptime(end_date_str, '%Y-%m-%d')
# 设置为当天结束
end_date = end_date.replace(hour=23, minute=59, second=59)
query = query.filter(Event.event_date <= end_date)
except ValueError:
pass
# 去重并排序
query = query.distinct().order_by(Event.event_date.desc())
# 限制数量
if limit:
query = query.limit(limit)
events = query.all()
# 构建返回数据
events_data = []
for event in events:
# 获取该事件关联的股票信息(在请求的股票列表中的)
related_stocks_in_list = [
{
'stock_code': rs.stock_code,
'stock_name': rs.stock_name,
'sector': rs.sector
}
for rs in event.related_stocks
if rs.stock_code in stock_codes
]
events_data.append({
'id': event.id,
'title': event.title,
'content': event.content,
'event_date': event.event_date.isoformat() if event.event_date else None,
'published_time': event.event_date.strftime('%Y-%m-%d %H:%M:%S') if event.event_date else None,
'source': 'event', # 标记来源为事件系统
'importance': event.importance,
'view_count': event.view_count,
'like_count': event.like_count,
'related_stocks': related_stocks_in_list,
'cover_image': event.cover_image,
'created_at': event.created_at.isoformat() if event.created_at else None
})
return jsonify({
'success': True,
'data': events_data,
'total': len(events_data)
})
except Exception as e:
return jsonify({'success': False, 'error': str(e)}), 500
@app.route('/api/events/<int:event_id>/concepts', methods=['GET'])
def get_related_concepts(event_id):
"""获取相关概念列表"""