121 lines
3.7 KiB
Python
121 lines
3.7 KiB
Python
from flask import Blueprint, request, jsonify
|
|
from datetime import datetime, timedelta
|
|
import json
|
|
|
|
bp = Blueprint('calendar', __name__, url_prefix='/api/v1/calendar')
|
|
|
|
@bp.route('/event-counts', methods=['GET'])
|
|
def get_event_counts():
|
|
"""获取事件数量统计"""
|
|
try:
|
|
year = request.args.get('year', '2027')
|
|
month = request.args.get('month', '10')
|
|
|
|
# 模拟事件数量数据
|
|
event_counts = []
|
|
for day in range(1, 32):
|
|
count = (day % 7) + 1 # 模拟每天1-7个事件
|
|
event_counts.append({
|
|
'date': f'{year}-{month.zfill(2)}-{day:02d}',
|
|
'count': count
|
|
})
|
|
|
|
return jsonify({
|
|
'success': True,
|
|
'data': event_counts
|
|
})
|
|
|
|
except Exception as e:
|
|
print(f"Error getting event counts: {e}")
|
|
return jsonify({'success': False, 'error': str(e)}), 500
|
|
|
|
@bp.route('/events', methods=['GET'])
|
|
def get_calendar_events():
|
|
"""获取日历事件"""
|
|
try:
|
|
year = request.args.get('year', '2027')
|
|
month = request.args.get('month', '10')
|
|
event_type = request.args.get('type', 'all')
|
|
|
|
# 模拟日历事件数据
|
|
events = []
|
|
for day in range(1, 32):
|
|
for i in range((day % 7) + 1):
|
|
event = {
|
|
'id': f'{year}{month.zfill(2)}{day:02d}{i}',
|
|
'title': f'事件{day}-{i+1}',
|
|
'date': f'{year}-{month.zfill(2)}-{day:02d}',
|
|
'type': ['政策', '技术', '产业', '公司'][i % 4],
|
|
'importance': ['高', '中', '低'][i % 3],
|
|
'status': 'active'
|
|
}
|
|
events.append(event)
|
|
|
|
# 根据类型过滤
|
|
if event_type != 'all':
|
|
events = [e for e in events if e['type'] == event_type]
|
|
|
|
return jsonify({
|
|
'success': True,
|
|
'data': events
|
|
})
|
|
|
|
except Exception as e:
|
|
print(f"Error getting calendar events: {e}")
|
|
return jsonify({'success': False, 'error': str(e)}), 500
|
|
|
|
@bp.route('/events/<int:event_id>', methods=['GET'])
|
|
def get_calendar_event_detail(event_id):
|
|
"""获取日历事件详情"""
|
|
try:
|
|
# 模拟事件详情
|
|
event_detail = {
|
|
'id': event_id,
|
|
'title': f'事件{event_id}详情',
|
|
'description': f'这是事件{event_id}的详细描述',
|
|
'date': '2027-10-15',
|
|
'type': '政策',
|
|
'importance': '高',
|
|
'status': 'active',
|
|
'related_stocks': [
|
|
{'code': '000001', 'name': '股票A'},
|
|
{'code': '000002', 'name': '股票B'}
|
|
],
|
|
'keywords': ['政策', '改革', '创新'],
|
|
'files': [
|
|
{'name': '报告.pdf', 'url': '/files/report.pdf'},
|
|
{'name': '数据.xlsx', 'url': '/files/data.xlsx'}
|
|
]
|
|
}
|
|
|
|
return jsonify({
|
|
'success': True,
|
|
'data': event_detail
|
|
})
|
|
|
|
except Exception as e:
|
|
print(f"Error getting calendar event detail: {e}")
|
|
return jsonify({'success': False, 'error': str(e)}), 500
|
|
|
|
def get_event_class(count):
|
|
"""根据事件数量获取CSS类"""
|
|
if count == 0:
|
|
return 'no-events'
|
|
elif count <= 3:
|
|
return 'few-events'
|
|
elif count <= 6:
|
|
return 'medium-events'
|
|
else:
|
|
return 'many-events'
|
|
|
|
def parse_json_field(field_value):
|
|
"""解析JSON字段"""
|
|
if isinstance(field_value, str):
|
|
try:
|
|
return json.loads(field_value)
|
|
except (json.JSONDecodeError, TypeError):
|
|
return []
|
|
elif isinstance(field_value, (list, dict)):
|
|
return field_value
|
|
else:
|
|
return [] |