diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs index 1e6c5334..d6c26e3a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs @@ -368,16 +368,17 @@ namespace Tnb.WarehouseMgr { List carryMats = new(); List carryCodes = new(); - var whereExp = Expressionable.Create() - .And((a, b, c) => a.is_lock == 0) - .And((a, b, c) => !string.IsNullOrEmpty(a.location_id)) - .And((a, b, c) => a.status == (int)EnumCarryStatus.占用) - .And((a, b, c) => c.is_type == ((int)EnumLocationType.存储库位).ToString()); + foreach (var os in outStockDList) { - whereExp.And((a, b, c) => b.material_id == os.material_id) - .AndIF(!string.IsNullOrEmpty(os.code_batch), (a, b, c) => b.code_batch == os.code_batch); + var whereExp = Expressionable.Create() + .And((a, b, c) => a.is_lock == 0) + .And((a, b, c) => !string.IsNullOrEmpty(a.location_id)) + .And((a, b, c) => a.status == (int)EnumCarryStatus.占用) + .And((a, b, c) => c.is_type == ((int)EnumLocationType.存储库位).ToString()) + .And((a, b, c) => b.material_id == os.material_id) + .AndIF(!string.IsNullOrEmpty(os.code_batch), (a, b, c) => b.code_batch == os.code_batch); var carryCodesPart = await _db.Queryable().InnerJoin((a, b) => a.id == b.carry_id).InnerJoin((a, b, c) => a.location_id == c.id) .Where(whereExp.ToExpression()) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs index 98a05402..079c898c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs @@ -56,7 +56,9 @@ namespace Tnb.WarehouseMgr var endLocation = await _db.Queryable().SingleAsync(it => it.id == secondLocationId); var setSortings = await _db.Queryable() - .Where(a => a.status == WmsWareHouseConst.BILLSTATUS_ADD_ID).OrderBy(a => a.seq) + .Where(a => a.status == WmsWareHouseConst.BILLSTATUS_ADD_ID) + .Select() + .OrderBy(a => a.seq) .ToListAsync(); var items = await _db.Queryable().Where(it => it.status == WmsWareHouseConst.BILLSTATUS_ON_ID).ToListAsync(); var onFlag = items?.Count > 0; @@ -64,17 +66,12 @@ namespace Tnb.WarehouseMgr { await _db.Ado.BeginTranAsync(); - var singleSorting = new WmsSetsortingH(); - if (setSortings?.Count > 0) - { - singleSorting = setSortings[0]; - var curCarry = await _db.Queryable().SingleAsync(it => it.id == singleSorting.carry_id); - var isMatch = await IsCarryAndLocationMatchByCarryStd(curCarry, endLocation); - if (!isMatch) throw new AppFriendlyException("库位与载具规格不匹配", 500); - } + + if (setSortings?.Count > 0 && !onFlag) { + var singleSorting = setSortings[0]; var setSortingDList = await _db.Queryable().Where(it => it.bill_id == singleSorting.id).ToListAsync(); if (setSortingDList?.Count > 0) @@ -83,18 +80,20 @@ namespace Tnb.WarehouseMgr List carryCodes = new(); List carryIds = new(); - var whereExpr = Expressionable.Create() - .And((a, b, c) => a.is_lock == 0) - .And((a, b, c) => !string.IsNullOrEmpty(a.location_id)) - .And((a, b, c) => a.status == (int)EnumCarryStatus.占用); + ; foreach (var os in setSortingDList) { - whereExpr.And((a, b, c) => b.material_id == os.material_id) - .And((a, b, c) => c.wh_id == os.warehouse_id) - .AndIF(!string.IsNullOrEmpty(os.code_batch), (a, b, c) => b.code_batch == os.code_batch); - + var whereExpr = Expressionable.Create() + .And((a, b, c) => a.is_lock == 0) + .And((a, b, c) => !string.IsNullOrEmpty(a.location_id)) + .And((a, b, c) => a.status == (int)EnumCarryStatus.占用) + .And((a, b, c) => b.material_id == os.material_id) + .And((a, b, c) => c.wh_id == os.warehouse_id) + .AndIF(!string.IsNullOrEmpty(os.code_batch), (a, b, c) => b.code_batch == os.code_batch) + .ToExpression(); +; var carryCodesPart = await _db.Queryable().InnerJoin((a, b) => a.id == b.carry_id).InnerJoin((a, b, c) => a.location_id == c.id) - .Where(whereExpr.ToExpression()) + .Where(whereExpr) .Select() .ToListAsync(); if (carryCodesPart?.Count > 0) @@ -152,6 +151,13 @@ namespace Tnb.WarehouseMgr var carrys = await _db.Queryable().Where(it => carryIds.Contains(it.id)).ToArrayAsync(); if (carrys?.Length > 0) { + if (setSortings?.Count > 0) + { + + var curCarry = carrys[^carrys.Length]; + var isMatch = await IsCarryAndLocationMatchByCarryStd(curCarry, endLocation); + if (!isMatch) throw new AppFriendlyException("库位与载具规格不匹配", 500); + } List preTasks = new(); List locIds = new();