From 86a978b557d279e3410bf29e7a73ec4743c068b9 Mon Sep 17 00:00:00 2001 From: zzh <1368735060@qq.com> Date: Sat, 11 Jul 2026 17:15:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BB=93=E5=82=A8=E4=B8=8E?= =?UTF-8?q?=E5=BA=97=E9=93=BA=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8=20SqlSug?= =?UTF-8?q?ar=20=E5=8F=AF=E7=A9=BA=E7=AD=9B=E9=80=89=E6=9D=A1=E4=BB=B6=20S?= =?UTF-8?q?QL=20=E7=BF=BB=E8=AF=91=E9=94=99=E8=AF=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 列表 predicate 改用 hasWarehouseFilter/hasStoreFilter 等本地变量,避免 ORM 生成非法 SQL。 Co-authored-by: Cursor --- .../Services/Orders/PlatformStoreOrderService.cs | 14 ++++++++++---- .../Warehouse/WarehouseService.BinLocation.cs | 4 +++- .../Services/Warehouse/WarehouseService.Inbound.cs | 11 ++++++++--- .../Warehouse/WarehouseService.Inventory.cs | 4 +++- .../Services/Warehouse/WarehouseService.Parcel.cs | 7 +++++-- 5 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/Oms.Application/Services/Orders/PlatformStoreOrderService.cs b/src/Oms.Application/Services/Orders/PlatformStoreOrderService.cs index d10b8f3..1e0d1d7 100644 --- a/src/Oms.Application/Services/Orders/PlatformStoreOrderService.cs +++ b/src/Oms.Application/Services/Orders/PlatformStoreOrderService.cs @@ -599,13 +599,19 @@ public class PlatformStoreOrderService : ApplicationService var (hasCustomerFilter, customerIdValue) = WarehouseCustomerHelper.ToCustomerFilter(customerId); var fulfillStatus = input.FulfillStatus?.Trim(); var platformOrderNo = input.PlatformOrderNo?.Trim(); + var hasStoreFilter = input.StoreId.HasValue; + var storeIdValue = input.StoreId.GetValueOrDefault(); + var hasFulfillStatusFilter = !string.IsNullOrWhiteSpace(fulfillStatus); + var hasPlatformOrderNoFilter = !string.IsNullOrWhiteSpace(platformOrderNo); + var hasSuspendedFilter = input.IsSuspended.HasValue; + var isSuspendedValue = input.IsSuspended.GetValueOrDefault(); return x => (!hasCustomerFilter || x.CustomerId == customerIdValue) - && (!input.StoreId.HasValue || x.StoreId == input.StoreId.Value) - && (string.IsNullOrWhiteSpace(fulfillStatus) || x.FulfillStatus == fulfillStatus) - && (!input.IsSuspended.HasValue || x.IsSuspended == input.IsSuspended.Value) - && (string.IsNullOrWhiteSpace(platformOrderNo) || x.PlatformOrderNo.Contains(platformOrderNo)); + && (!hasStoreFilter || x.StoreId == storeIdValue) + && (!hasFulfillStatusFilter || x.FulfillStatus == fulfillStatus) + && (!hasSuspendedFilter || x.IsSuspended == isSuspendedValue) + && (!hasPlatformOrderNoFilter || x.PlatformOrderNo.Contains(platformOrderNo!)); } private static PlatformStoreOrderOutput MapOrderOutput( diff --git a/src/Oms.Application/Services/Warehouse/WarehouseService.BinLocation.cs b/src/Oms.Application/Services/Warehouse/WarehouseService.BinLocation.cs index aa7676e..0c1327e 100644 --- a/src/Oms.Application/Services/Warehouse/WarehouseService.BinLocation.cs +++ b/src/Oms.Application/Services/Warehouse/WarehouseService.BinLocation.cs @@ -23,9 +23,11 @@ public partial class WarehouseService var keyword = input.Keyword?.Trim(); var hasKeyword = !string.IsNullOrWhiteSpace(keyword); + var hasEnabledFilter = input.IsEnabled.HasValue; + var isEnabledValue = input.IsEnabled.GetValueOrDefault(); var items = await BinLocationRepository.GetListAsync(x => x.WarehouseId == input.WarehouseId - && (!input.IsEnabled.HasValue || x.IsEnabled == input.IsEnabled.Value) + && (!hasEnabledFilter || x.IsEnabled == isEnabledValue) && (!hasKeyword || x.BinCode.Contains(keyword!) || (x.BinName != null && x.BinName.Contains(keyword!)))); items = items.OrderBy(x => x.BinCode).ThenBy(x => x.Id).ToList(); diff --git a/src/Oms.Application/Services/Warehouse/WarehouseService.Inbound.cs b/src/Oms.Application/Services/Warehouse/WarehouseService.Inbound.cs index 3e5b40b..5039bcb 100644 --- a/src/Oms.Application/Services/Warehouse/WarehouseService.Inbound.cs +++ b/src/Oms.Application/Services/Warehouse/WarehouseService.Inbound.cs @@ -24,11 +24,14 @@ public partial class WarehouseService var keyword = input.Keyword?.Trim(); var hasKeyword = !string.IsNullOrWhiteSpace(keyword); var receiptStatus = input.ReceiptStatus?.Trim(); + var hasWarehouseFilter = input.WarehouseId.HasValue; + var warehouseIdValue = input.WarehouseId.GetValueOrDefault(); + var hasReceiptStatusFilter = !string.IsNullOrWhiteSpace(receiptStatus); Expression> predicate = x => (!hasCustomerFilter || x.CustomerId == customerIdValue) - && (!input.WarehouseId.HasValue || x.WarehouseId == input.WarehouseId.Value) - && (string.IsNullOrWhiteSpace(receiptStatus) || x.ReceiptStatus == receiptStatus) + && (!hasWarehouseFilter || x.WarehouseId == warehouseIdValue) + && (!hasReceiptStatusFilter || x.ReceiptStatus == receiptStatus) && (!hasKeyword || x.NoticeNo.Contains(keyword!) || (x.MarkReference != null && x.MarkReference.Contains(keyword!))); var pageIndex = OmsDocHelper.NormalizePage(input.Page); @@ -302,9 +305,11 @@ public partial class WarehouseService { var resolvedCustomerId = await ResolveListCustomerIdAsync(customerId); var (hasCustomerFilter, customerIdValue) = CustomerFilter(resolvedCustomerId); + var hasWarehouseFilter = warehouseId.HasValue; + var warehouseIdValue = warehouseId.GetValueOrDefault(); var notices = await InboundNoticeRepository.GetListAsync(x => (!hasCustomerFilter || x.CustomerId == customerIdValue) - && (!warehouseId.HasValue || x.WarehouseId == warehouseId.Value)); + && (!hasWarehouseFilter || x.WarehouseId == warehouseIdValue)); return new WarehouseInboundSummaryOutput { diff --git a/src/Oms.Application/Services/Warehouse/WarehouseService.Inventory.cs b/src/Oms.Application/Services/Warehouse/WarehouseService.Inventory.cs index 74476a2..b79bf54 100644 --- a/src/Oms.Application/Services/Warehouse/WarehouseService.Inventory.cs +++ b/src/Oms.Application/Services/Warehouse/WarehouseService.Inventory.cs @@ -18,10 +18,12 @@ public partial class WarehouseService { var customerId = await ResolveListCustomerIdAsync(input.CustomerId); var (hasCustomerFilter, customerIdValue) = CustomerFilter(customerId); + var hasWarehouseFilter = input.WarehouseId.HasValue; + var warehouseIdValue = input.WarehouseId.GetValueOrDefault(); var inventories = await InventoryRepository.GetListAsync(x => (!hasCustomerFilter || x.CustomerId == customerIdValue) && x.Qty > 0 - && (!input.WarehouseId.HasValue || x.WarehouseId == input.WarehouseId.Value)); + && (!hasWarehouseFilter || x.WarehouseId == warehouseIdValue)); var skuIds = inventories.Select(x => x.SkuId).Distinct().ToArray(); var skus = skuIds.Length == 0 diff --git a/src/Oms.Application/Services/Warehouse/WarehouseService.Parcel.cs b/src/Oms.Application/Services/Warehouse/WarehouseService.Parcel.cs index 954d207..c555c98 100644 --- a/src/Oms.Application/Services/Warehouse/WarehouseService.Parcel.cs +++ b/src/Oms.Application/Services/Warehouse/WarehouseService.Parcel.cs @@ -24,11 +24,14 @@ public partial class WarehouseService var keyword = input.Keyword?.Trim(); var hasKeyword = !string.IsNullOrWhiteSpace(keyword); var lifecycleStatus = input.LifecycleStatus?.Trim(); + var hasWarehouseFilter = input.WarehouseId.HasValue; + var warehouseIdValue = input.WarehouseId.GetValueOrDefault(); + var hasLifecycleStatusFilter = !string.IsNullOrWhiteSpace(lifecycleStatus); Expression> predicate = x => (!hasCustomerFilter || x.CustomerId == customerIdValue) - && (!input.WarehouseId.HasValue || x.WarehouseId == input.WarehouseId.Value) - && (string.IsNullOrWhiteSpace(lifecycleStatus) || x.LifecycleStatus == lifecycleStatus) + && (!hasWarehouseFilter || x.WarehouseId == warehouseIdValue) + && (!hasLifecycleStatusFilter || x.LifecycleStatus == lifecycleStatus) && (!hasKeyword || x.TrackingNo.Contains(keyword!) || (x.CarrierName != null && x.CarrierName.Contains(keyword!))); var pageIndex = OmsDocHelper.NormalizePage(input.Page);