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:
@ -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
|
||||
|
||||
|
||||
|
||||
@ -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}%'))
|
||||
# 总数
|
||||
|
||||
Reference in New Issue
Block a user