From 5513e4cd81e72b7bd8b27f7585ec038d192e1b54 Mon Sep 17 00:00:00 2001 From: dxc Date: Wed, 11 Feb 2026 14:55:28 +0800 Subject: [PATCH] fix: prevent 500 errors in service list endpoint Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) --- .../app/api/v1/inbound/service.py | 2 ++ .../app/services/inbound/service_service.py | 28 +++++++++++-------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/inventory-backend/app/api/v1/inbound/service.py b/inventory-backend/app/api/v1/inbound/service.py index e9a3057..2736513 100644 --- a/inventory-backend/app/api/v1/inbound/service.py +++ b/inventory-backend/app/api/v1/inbound/service.py @@ -4,6 +4,7 @@ from . import inbound_bp from app.schemas.stock_schema import stock_service_schema from app.services.inbound.service_service import ServiceService from app.utils.decorators import role_required +import traceback @inbound_bp.route('/service/search-base', methods=['GET']) @@ -49,6 +50,7 @@ def get_service_list(): }) except Exception as e: current_app.logger.error(f'获取服务列表失败: {str(e)}') + traceback.print_exc() return jsonify({'code': 500, 'msg': '内部服务器错误'}), 500 diff --git a/inventory-backend/app/services/inbound/service_service.py b/inventory-backend/app/services/inbound/service_service.py index 9619d7e..45fc627 100644 --- a/inventory-backend/app/services/inbound/service_service.py +++ b/inventory-backend/app/services/inbound/service_service.py @@ -4,6 +4,7 @@ from app.models.inbound.service import StockService from app.models.base import MaterialBase from datetime import datetime, timedelta import re +import traceback class ServiceService: @@ -130,24 +131,29 @@ class ServiceService: query = StockService.query.filter_by(is_deleted=False) # 关键词搜索:可搜索 SKU 或 关联物料名称 if keyword: - # 子查询查找物料名称匹配的 base_id - subquery = MaterialBase.query.filter( - MaterialBase.name.ilike(f'%{keyword}%') - ).subquery() + # 直接子查询 query = query.filter( db.or_( StockService.sku.ilike(f'%{keyword}%'), - StockService.base_id.in_(db.session.query(subquery.c.id)) + StockService.base_id.in_( + db.session.query(MaterialBase.id).filter(MaterialBase.name.ilike(f'%{keyword}%')) + ) ) ) if start_date: - start = datetime.strptime(start_date, '%Y-%m-%d') - query = query.filter(StockService.created_at >= start) + try: + start = datetime.strptime(start_date, '%Y-%m-%d') + query = query.filter(StockService.created_at >= start) + except ValueError: + pass # ignore invalid date format if end_date: - end = datetime.strptime(end_date, '%Y-%m-%d') - # 包含当天 - end = end + timedelta(days=1) - timedelta(seconds=1) - query = query.filter(StockService.created_at <= end) + try: + end = datetime.strptime(end_date, '%Y-%m-%d') + # 包含当天 + end = end + timedelta(days=1) - timedelta(seconds=1) + query = query.filter(StockService.created_at <= end) + except ValueError: + pass if provider_name: query = query.filter(StockService.provider_name.ilike(f'%{provider_name}%')) # 总数