From 3ecdb121d2da8bbf7df3842f3076886bf5ace2b4 Mon Sep 17 00:00:00 2001 From: DXC Date: Thu, 12 Mar 2026 08:56:08 +0800 Subject: [PATCH] \"fix: remove list brackets from case() for SQLAlchemy 2.0 compatibility\" --- .../app/services/inbound/base_service.py | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/inventory-backend/app/services/inbound/base_service.py b/inventory-backend/app/services/inbound/base_service.py index 84a3c8f..7fe2ea1 100644 --- a/inventory-backend/app/services/inbound/base_service.py +++ b/inventory-backend/app/services/inbound/base_service.py @@ -313,22 +313,26 @@ class MaterialBaseService: enable_warning_sort = filters.get('enableWarningSort', False) if enable_warning_sort: - print("====== [DEBUG] 成功进入预警强排逻辑 ======") + print("====== [DEBUG] 成功进入预警强排逻辑 (SQLA 2.0) ======") # 强制统一数据类型 red_val = cast(MaterialWarningSetting.red_threshold, Numeric) yellow_val = cast(MaterialWarningSetting.yellow_threshold, Numeric) inv_val = cast(total_inv, Numeric) - - warning_level = case([ + + # 注意:移除了 case 内部的 [] + warning_level = case( (and_(MaterialWarningSetting.is_enabled.is_(True), inv_val <= red_val), 2), - (and_(MaterialWarningSetting.is_enabled.is_(True), inv_val <= yellow_val), 1) - ], else_=0).label('sort_level') - red_shortage = case([ - (and_(MaterialWarningSetting.is_enabled.is_(True), inv_val <= red_val), red_val - inv_val) - ], else_=0).label('sort_red') - yellow_distance = case([ - (and_(MaterialWarningSetting.is_enabled.is_(True), inv_val > red_val, inv_val <= yellow_val), inv_val - red_val) - ], else_=999999).label('sort_yellow') + (and_(MaterialWarningSetting.is_enabled.is_(True), inv_val <= yellow_val), 1), + else_=0 + ).label('sort_level') + red_shortage = case( + (and_(MaterialWarningSetting.is_enabled.is_(True), inv_val <= red_val), red_val - inv_val), + else_=0 + ).label('sort_red') + yellow_distance = case( + (and_(MaterialWarningSetting.is_enabled.is_(True), inv_val > red_val, inv_val <= yellow_val), inv_val - red_val), + else_=999999 + ).label('sort_yellow') query = query.add_columns(warning_level, red_shortage, yellow_distance) query = query.order_by(None).order_by( text("sort_level DESC"),