修复仓储与店铺订单列表 SqlSugar 可空筛选条件 SQL 翻译错误。

This commit is contained in:
biybuy 2026-07-11 17:17:34 +08:00 committed by GitHub
commit 0bc826b6a3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 57 additions and 22 deletions

View File

@ -599,13 +599,19 @@ public class PlatformStoreOrderService : ApplicationService
var (hasCustomerFilter, customerIdValue) = WarehouseCustomerHelper.ToCustomerFilter(customerId); var (hasCustomerFilter, customerIdValue) = WarehouseCustomerHelper.ToCustomerFilter(customerId);
var fulfillStatus = input.FulfillStatus?.Trim(); var fulfillStatus = input.FulfillStatus?.Trim();
var platformOrderNo = input.PlatformOrderNo?.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 => return x =>
(!hasCustomerFilter || x.CustomerId == customerIdValue) (!hasCustomerFilter || x.CustomerId == customerIdValue)
&& (!input.StoreId.HasValue || x.StoreId == input.StoreId.Value) && (!hasStoreFilter || x.StoreId == storeIdValue)
&& (string.IsNullOrWhiteSpace(fulfillStatus) || x.FulfillStatus == fulfillStatus) && (!hasFulfillStatusFilter || x.FulfillStatus == fulfillStatus)
&& (!input.IsSuspended.HasValue || x.IsSuspended == input.IsSuspended.Value) && (!hasSuspendedFilter || x.IsSuspended == isSuspendedValue)
&& (string.IsNullOrWhiteSpace(platformOrderNo) || x.PlatformOrderNo.Contains(platformOrderNo)); && (!hasPlatformOrderNoFilter || x.PlatformOrderNo.Contains(platformOrderNo!));
} }
private static PlatformStoreOrderOutput MapOrderOutput( private static PlatformStoreOrderOutput MapOrderOutput(

View File

@ -170,20 +170,37 @@ public class PlatformStoreService : ApplicationService
var platformCode = input.PlatformCode?.Trim(); var platformCode = input.PlatformCode?.Trim();
var nickname = input.StoreNickname?.Trim(); var nickname = input.StoreNickname?.Trim();
var filter = input.ExpirationFilter?.Trim().ToLowerInvariant(); var filter = input.ExpirationFilter?.Trim().ToLowerInvariant();
var hasPlatformCode = !string.IsNullOrWhiteSpace(platformCode);
var hasNickname = !string.IsNullOrWhiteSpace(nickname);
var now = DateTime.Now; var now = DateTime.Now;
var within7Days = now.AddDays(7); var within7Days = now.AddDays(7);
return x => // 显式按过期筛选分支构造表达式,避免嵌套三元被 ORM 翻译成非法 IIF。
(!hasCustomerFilter || x.CustomerId == customerIdValue) return filter switch
&& (string.IsNullOrWhiteSpace(platformCode) || x.PlatformCode == platformCode) {
&& (string.IsNullOrWhiteSpace(nickname) || x.StoreNickname.Contains(nickname)) "expired" => x =>
&& (string.IsNullOrWhiteSpace(filter) || filter == "normal" (!hasCustomerFilter || x.CustomerId == customerIdValue)
? string.IsNullOrWhiteSpace(filter) || !x.TokenExpireTime.HasValue || x.TokenExpireTime > within7Days && (!hasPlatformCode || x.PlatformCode == platformCode)
: filter == "expired" && (!hasNickname || x.StoreNickname.Contains(nickname!))
? x.TokenExpireTime.HasValue && x.TokenExpireTime < now && x.TokenExpireTime.HasValue
: filter == "within7days" && x.TokenExpireTime < now,
? x.TokenExpireTime.HasValue && x.TokenExpireTime >= now && x.TokenExpireTime <= within7Days "within7days" => x =>
: true); (!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) => private static PlatformStoreOutput MapOutput(SalesStore entity) =>

View File

@ -23,9 +23,11 @@ public partial class WarehouseService
var keyword = input.Keyword?.Trim(); var keyword = input.Keyword?.Trim();
var hasKeyword = !string.IsNullOrWhiteSpace(keyword); var hasKeyword = !string.IsNullOrWhiteSpace(keyword);
var hasEnabledFilter = input.IsEnabled.HasValue;
var isEnabledValue = input.IsEnabled.GetValueOrDefault();
var items = await BinLocationRepository.GetListAsync(x => var items = await BinLocationRepository.GetListAsync(x =>
x.WarehouseId == input.WarehouseId 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!)))); && (!hasKeyword || x.BinCode.Contains(keyword!) || (x.BinName != null && x.BinName.Contains(keyword!))));
items = items.OrderBy(x => x.BinCode).ThenBy(x => x.Id).ToList(); items = items.OrderBy(x => x.BinCode).ThenBy(x => x.Id).ToList();

View File

@ -24,11 +24,14 @@ public partial class WarehouseService
var keyword = input.Keyword?.Trim(); var keyword = input.Keyword?.Trim();
var hasKeyword = !string.IsNullOrWhiteSpace(keyword); var hasKeyword = !string.IsNullOrWhiteSpace(keyword);
var receiptStatus = input.ReceiptStatus?.Trim(); var receiptStatus = input.ReceiptStatus?.Trim();
var hasWarehouseFilter = input.WarehouseId.HasValue;
var warehouseIdValue = input.WarehouseId.GetValueOrDefault();
var hasReceiptStatusFilter = !string.IsNullOrWhiteSpace(receiptStatus);
Expression<Func<CInboundNotice, bool>> predicate = x => Expression<Func<CInboundNotice, bool>> predicate = x =>
(!hasCustomerFilter || x.CustomerId == customerIdValue) (!hasCustomerFilter || x.CustomerId == customerIdValue)
&& (!input.WarehouseId.HasValue || x.WarehouseId == input.WarehouseId.Value) && (!hasWarehouseFilter || x.WarehouseId == warehouseIdValue)
&& (string.IsNullOrWhiteSpace(receiptStatus) || x.ReceiptStatus == receiptStatus) && (!hasReceiptStatusFilter || x.ReceiptStatus == receiptStatus)
&& (!hasKeyword || x.NoticeNo.Contains(keyword!) || (x.MarkReference != null && x.MarkReference.Contains(keyword!))); && (!hasKeyword || x.NoticeNo.Contains(keyword!) || (x.MarkReference != null && x.MarkReference.Contains(keyword!)));
var pageIndex = OmsDocHelper.NormalizePage(input.Page); var pageIndex = OmsDocHelper.NormalizePage(input.Page);
@ -302,9 +305,11 @@ public partial class WarehouseService
{ {
var resolvedCustomerId = await ResolveListCustomerIdAsync(customerId); var resolvedCustomerId = await ResolveListCustomerIdAsync(customerId);
var (hasCustomerFilter, customerIdValue) = CustomerFilter(resolvedCustomerId); var (hasCustomerFilter, customerIdValue) = CustomerFilter(resolvedCustomerId);
var hasWarehouseFilter = warehouseId.HasValue;
var warehouseIdValue = warehouseId.GetValueOrDefault();
var notices = await InboundNoticeRepository.GetListAsync(x => var notices = await InboundNoticeRepository.GetListAsync(x =>
(!hasCustomerFilter || x.CustomerId == customerIdValue) (!hasCustomerFilter || x.CustomerId == customerIdValue)
&& (!warehouseId.HasValue || x.WarehouseId == warehouseId.Value)); && (!hasWarehouseFilter || x.WarehouseId == warehouseIdValue));
return new WarehouseInboundSummaryOutput return new WarehouseInboundSummaryOutput
{ {

View File

@ -18,10 +18,12 @@ public partial class WarehouseService
{ {
var customerId = await ResolveListCustomerIdAsync(input.CustomerId); var customerId = await ResolveListCustomerIdAsync(input.CustomerId);
var (hasCustomerFilter, customerIdValue) = CustomerFilter(customerId); var (hasCustomerFilter, customerIdValue) = CustomerFilter(customerId);
var hasWarehouseFilter = input.WarehouseId.HasValue;
var warehouseIdValue = input.WarehouseId.GetValueOrDefault();
var inventories = await InventoryRepository.GetListAsync(x => var inventories = await InventoryRepository.GetListAsync(x =>
(!hasCustomerFilter || x.CustomerId == customerIdValue) (!hasCustomerFilter || x.CustomerId == customerIdValue)
&& x.Qty > 0 && 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 skuIds = inventories.Select(x => x.SkuId).Distinct().ToArray();
var skus = skuIds.Length == 0 var skus = skuIds.Length == 0

View File

@ -24,11 +24,14 @@ public partial class WarehouseService
var keyword = input.Keyword?.Trim(); var keyword = input.Keyword?.Trim();
var hasKeyword = !string.IsNullOrWhiteSpace(keyword); var hasKeyword = !string.IsNullOrWhiteSpace(keyword);
var lifecycleStatus = input.LifecycleStatus?.Trim(); var lifecycleStatus = input.LifecycleStatus?.Trim();
var hasWarehouseFilter = input.WarehouseId.HasValue;
var warehouseIdValue = input.WarehouseId.GetValueOrDefault();
var hasLifecycleStatusFilter = !string.IsNullOrWhiteSpace(lifecycleStatus);
Expression<Func<CParcel, bool>> predicate = x => Expression<Func<CParcel, bool>> predicate = x =>
(!hasCustomerFilter || x.CustomerId == customerIdValue) (!hasCustomerFilter || x.CustomerId == customerIdValue)
&& (!input.WarehouseId.HasValue || x.WarehouseId == input.WarehouseId.Value) && (!hasWarehouseFilter || x.WarehouseId == warehouseIdValue)
&& (string.IsNullOrWhiteSpace(lifecycleStatus) || x.LifecycleStatus == lifecycleStatus) && (!hasLifecycleStatusFilter || x.LifecycleStatus == lifecycleStatus)
&& (!hasKeyword || x.TrackingNo.Contains(keyword!) || (x.CarrierName != null && x.CarrierName.Contains(keyword!))); && (!hasKeyword || x.TrackingNo.Contains(keyword!) || (x.CarrierName != null && x.CarrierName.Contains(keyword!)));
var pageIndex = OmsDocHelper.NormalizePage(input.Page); var pageIndex = OmsDocHelper.NormalizePage(input.Page);