diff --git a/app.py b/app.py index 7a1ba37c..4ad9dc54 100755 --- a/app.py +++ b/app.py @@ -11004,7 +11004,9 @@ def get_events_by_mainline(): 4. 按指定层级分组返回 参数: - - recent_days: 近N天(默认7天) + - recent_days: 近N天(默认7天,当有 start_date/end_date 时忽略) + - start_date: 开始时间(精确时间范围,格式 YYYY-MM-DD HH:mm:ss) + - end_date: 结束时间(精确时间范围,格式 YYYY-MM-DD HH:mm:ss) - importance: 重要性筛选(S,A,B,C 或 all) - group_by: 分组方式 (lv1/lv2/lv3/具体概念ID如L2_AI_INFRA),默认lv2 @@ -11036,12 +11038,32 @@ def get_events_by_mainline(): from sqlalchemy import exists # 获取请求参数 - recent_days = request.args.get('recent_days', 7, type=int) + recent_days = request.args.get('recent_days', type=int) + start_date_str = request.args.get('start_date', '') + end_date_str = request.args.get('end_date', '') importance = request.args.get('importance', 'all') group_by = request.args.get('group_by', 'lv2') # lv1/lv2/lv3 或具体ID # 计算日期范围 - since_date = datetime.now() - timedelta(days=recent_days) + # 优先使用精确时间范围,其次使用 recent_days + if start_date_str and end_date_str: + try: + since_date = datetime.strptime(start_date_str, '%Y-%m-%d %H:%M:%S') + until_date = datetime.strptime(end_date_str, '%Y-%m-%d %H:%M:%S') + app.logger.info(f'[mainline] 使用精确时间范围: {since_date} - {until_date}') + except ValueError as e: + app.logger.warning(f'[mainline] 时间格式解析失败: {e}, 降级使用 recent_days') + since_date = datetime.now() - timedelta(days=recent_days or 7) + until_date = None + elif recent_days: + since_date = datetime.now() - timedelta(days=recent_days) + until_date = None + app.logger.info(f'[mainline] 使用 recent_days: {recent_days}') + else: + # 默认7天 + since_date = datetime.now() - timedelta(days=7) + until_date = None + app.logger.info(f'[mainline] 使用默认时间范围: 近7天') # ==================== 1. 获取概念层级映射 ==================== # 调用 concept-api 获取层级结构 @@ -11128,6 +11150,8 @@ def get_events_by_mainline(): # 日期筛选 query = query.filter(Event.created_at >= since_date) + if until_date: + query = query.filter(Event.created_at <= until_date) # 重要性筛选 if importance != 'all':