From c2d7b5c854e3ef8272bc9dd990237cb7a222c035 Mon Sep 17 00:00:00 2001 From: zzh <1368735060@qq.com> Date: Sat, 11 Jul 2026 17:10:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E5=88=97=E8=A1=A8=20ExpirationFilter=20=E5=B5=8C=E5=A5=97?= =?UTF-8?q?=E4=B8=89=E5=85=83=E5=AF=BC=E8=87=B4=20SqlSugar=20IIF=20?= =?UTF-8?q?=E7=BF=BB=E8=AF=91=E5=A4=B1=E8=B4=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按 expired/within7days/normal 分支构造独立 predicate,与充值等模块写法对齐。 Co-authored-by: Cursor --- .../Services/Orders/PlatformStoreService.cs | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/src/Oms.Application/Services/Orders/PlatformStoreService.cs b/src/Oms.Application/Services/Orders/PlatformStoreService.cs index 357bffa..71678c3 100644 --- a/src/Oms.Application/Services/Orders/PlatformStoreService.cs +++ b/src/Oms.Application/Services/Orders/PlatformStoreService.cs @@ -170,20 +170,37 @@ public class PlatformStoreService : ApplicationService var platformCode = input.PlatformCode?.Trim(); var nickname = input.StoreNickname?.Trim(); var filter = input.ExpirationFilter?.Trim().ToLowerInvariant(); + var hasPlatformCode = !string.IsNullOrWhiteSpace(platformCode); + var hasNickname = !string.IsNullOrWhiteSpace(nickname); var now = DateTime.Now; var within7Days = now.AddDays(7); - return x => - (!hasCustomerFilter || x.CustomerId == customerIdValue) - && (string.IsNullOrWhiteSpace(platformCode) || x.PlatformCode == platformCode) - && (string.IsNullOrWhiteSpace(nickname) || x.StoreNickname.Contains(nickname)) - && (string.IsNullOrWhiteSpace(filter) || filter == "normal" - ? string.IsNullOrWhiteSpace(filter) || !x.TokenExpireTime.HasValue || x.TokenExpireTime > within7Days - : filter == "expired" - ? x.TokenExpireTime.HasValue && x.TokenExpireTime < now - : filter == "within7days" - ? x.TokenExpireTime.HasValue && x.TokenExpireTime >= now && x.TokenExpireTime <= within7Days - : true); + // 显式按过期筛选分支构造表达式,避免嵌套三元被 ORM 翻译成非法 IIF。 + return filter switch + { + "expired" => x => + (!hasCustomerFilter || x.CustomerId == customerIdValue) + && (!hasPlatformCode || x.PlatformCode == platformCode) + && (!hasNickname || x.StoreNickname.Contains(nickname!)) + && x.TokenExpireTime.HasValue + && x.TokenExpireTime < now, + "within7days" => x => + (!hasCustomerFilter || x.CustomerId == customerIdValue) + && (!hasPlatformCode || x.PlatformCode == platformCode) + && (!hasNickname || x.StoreNickname.Contains(nickname!)) + && x.TokenExpireTime.HasValue + && x.TokenExpireTime >= now + && x.TokenExpireTime <= within7Days, + "normal" => x => + (!hasCustomerFilter || x.CustomerId == customerIdValue) + && (!hasPlatformCode || x.PlatformCode == platformCode) + && (!hasNickname || x.StoreNickname.Contains(nickname!)) + && (!x.TokenExpireTime.HasValue || x.TokenExpireTime > within7Days), + _ => x => + (!hasCustomerFilter || x.CustomerId == customerIdValue) + && (!hasPlatformCode || x.PlatformCode == platformCode) + && (!hasNickname || x.StoreNickname.Contains(nickname!)) + }; } private static PlatformStoreOutput MapOutput(SalesStore entity) => 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 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BB=93=E5=82=A8?= =?UTF-8?q?=E4=B8=8E=E5=BA=97=E9=93=BA=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8?= =?UTF-8?q?=20SqlSugar=20=E5=8F=AF=E7=A9=BA=E7=AD=9B=E9=80=89=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=20SQL=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);