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.schemas.stock_schema import stock_service_schema
|
||||||
from app.services.inbound.service_service import ServiceService
|
from app.services.inbound.service_service import ServiceService
|
||||||
from app.utils.decorators import role_required
|
from app.utils.decorators import role_required
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
|
||||||
@inbound_bp.route('/service/search-base', methods=['GET'])
|
@inbound_bp.route('/service/search-base', methods=['GET'])
|
||||||
@ -49,6 +50,7 @@ def get_service_list():
|
|||||||
})
|
})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
current_app.logger.error(f'获取服务列表失败: {str(e)}')
|
current_app.logger.error(f'获取服务列表失败: {str(e)}')
|
||||||
|
traceback.print_exc()
|
||||||
return jsonify({'code': 500, 'msg': '内部服务器错误'}), 500
|
return jsonify({'code': 500, 'msg': '内部服务器错误'}), 500
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,7 @@ from app.models.inbound.service import StockService
|
|||||||
from app.models.base import MaterialBase
|
from app.models.base import MaterialBase
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
import re
|
import re
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
|
||||||
class ServiceService:
|
class ServiceService:
|
||||||
@ -130,24 +131,29 @@ class ServiceService:
|
|||||||
query = StockService.query.filter_by(is_deleted=False)
|
query = StockService.query.filter_by(is_deleted=False)
|
||||||
# 关键词搜索:可搜索 SKU 或 关联物料名称
|
# 关键词搜索:可搜索 SKU 或 关联物料名称
|
||||||
if keyword:
|
if keyword:
|
||||||
# 子查询查找物料名称匹配的 base_id
|
# 直接子查询
|
||||||
subquery = MaterialBase.query.filter(
|
|
||||||
MaterialBase.name.ilike(f'%{keyword}%')
|
|
||||||
).subquery()
|
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
db.or_(
|
db.or_(
|
||||||
StockService.sku.ilike(f'%{keyword}%'),
|
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:
|
if start_date:
|
||||||
start = datetime.strptime(start_date, '%Y-%m-%d')
|
try:
|
||||||
query = query.filter(StockService.created_at >= start)
|
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:
|
if end_date:
|
||||||
end = datetime.strptime(end_date, '%Y-%m-%d')
|
try:
|
||||||
# 包含当天
|
end = datetime.strptime(end_date, '%Y-%m-%d')
|
||||||
end = end + timedelta(days=1) - timedelta(seconds=1)
|
# 包含当天
|
||||||
query = query.filter(StockService.created_at <= end)
|
end = end + timedelta(days=1) - timedelta(seconds=1)
|
||||||
|
query = query.filter(StockService.created_at <= end)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
if provider_name:
|
if provider_name:
|
||||||
query = query.filter(StockService.provider_name.ilike(f'%{provider_name}%'))
|
query = query.filter(StockService.provider_name.ilike(f'%{provider_name}%'))
|
||||||
# 总数
|
# 总数
|
||||||
|
|||||||
Reference in New Issue
Block a user