fix: prevent 500 errors in service list endpoint

Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
This commit is contained in:
dxc
2026-02-11 14:55:28 +08:00
parent 83f040728f
commit 5513e4cd81
2 changed files with 19 additions and 11 deletions

View File

@ -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

View File

@ -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}%'))
# 总数