diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs index 951f5ab0..d00f1dc2 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs @@ -13,7 +13,6 @@ using JNPF.VisualDev.Interfaces; using Mapster; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; -using NPOI.SS.Formula.Functions; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.WarehouseMgr.Entities; @@ -112,12 +111,33 @@ namespace Tnb.WarehouseMgr areaIds = input.data[nameof(WmsCheckstockH.area_id)].ToObject(); } - filterExpable = checkType!.ToEnum() switch + Expression> filterExp = (a, b, c) => false; + switch (checkType?.ToEnum()) { - EnumCheckType.物料盘点 => filterExpable.AndIF(input.data.ContainsKey(nameof(WmsCarryCode.material_id)) && input.data[nameof(WmsCarryCode.material_id)] != null, (a, b, c) => b.material_id == input.data[nameof(WmsCarryCode.material_id)].ToString()), - EnumCheckType.批次盘点 => filterExpable.AndIF(areaIds?.Length > 0, (a, b, c) => areaIds.Contains(a.region_id)), - _ => filterExpable, - }; + case EnumCheckType.全库盘点: + { + filterExp = (a, b, c) => a.wh_id == input.data[nameof(WmsCheckstockH.warehouse_id)].ToString() + && a.is_type == ((int)EnumLocationType.存储库位).ToString() + && c.is_lock == 0; + } + break; + case EnumCheckType.物料盘点: + { + if (!input.data.ContainsKey(nameof(WmsCarryCode.material_id)) && input.data[nameof(WmsCarryCode.material_id)] != null) + { + filterExp = (a, b, c) => b.material_id == input.data[nameof(WmsCarryCode.material_id)].ToString(); + } + } + break; + case EnumCheckType.批次盘点: + { + if (areaIds?.Length > 0) + { + filterExp = (a, b, c) => areaIds.Contains(a.region_id); + } + } + break; + } var carryCodes = await _db.Queryable().InnerJoin((a, b) => a.id == b.location_id) .InnerJoin((a, b, c) => b.carry_id == c.id) @@ -320,22 +340,21 @@ namespace Tnb.WarehouseMgr _carryMap = await _db.Queryable().ToDictionaryAsync(x => x.id, x => x.carry_code); } - //var filterExpable = Expressionable.Create(); Expression> filterExp = (a, b, c) => false; switch (input.CheckType) { case EnumCheckType.全库盘点: { - filterExp.And((a, b, c) => a.wh_id == input.warehouse_id) - .And((a, b, c) => a.is_type == ((int)EnumLocationType.存储库位).ToString()) - .And((a, b, c) => c.is_lock == 0); + filterExp = (a, b, c) => a.wh_id == input.warehouse_id + && a.is_type == ((int)EnumLocationType.存储库位).ToString() + && c.is_lock == 0; } break; case EnumCheckType.物料盘点: { if (!input.material_id.IsNullOrWhiteSpace()) { - filterExp.And((a, b, c) => b.material_id == input.material_id); + filterExp = (a, b, c) => b.material_id == input.material_id; } } break; @@ -343,7 +362,7 @@ namespace Tnb.WarehouseMgr { if (input.regionIds?.Count > 0) { - filterExp.And((a, b, c) => input.regionIds.Contains(a.region_id)); + filterExp = (a, b, c) => input.regionIds.Contains(a.region_id); } } break; diff --git a/common/Tnb.Common/Extension/LambdaExpressionExtensions.cs b/common/Tnb.Common/Extension/LambdaExpressionExtensions.cs index b0b1b420..04ab917b 100644 --- a/common/Tnb.Common/Extension/LambdaExpressionExtensions.cs +++ b/common/Tnb.Common/Extension/LambdaExpressionExtensions.cs @@ -59,6 +59,23 @@ namespace JNPF.Common.Extension return first.Compose(second, Expression.And); } + + /// + /// or扩展 + /// + /// + /// + /// + /// + public static Expression> Or(this Expression> first, Expression> second) + { + if (first.IsNull()) + { + first = second; + return first; + } + return first.Compose(second, Expression.Or); + } }