diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasLocation.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasLocation.cs index 4a348d76..9c902bc1 100644 --- a/BasicData/Tnb.BasicData.Entities/Entity/BasLocation.cs +++ b/BasicData/Tnb.BasicData.Entities/Entity/BasLocation.cs @@ -75,6 +75,10 @@ public partial class BasLocation : BaseEntity /// 修改用户 /// public string? modify_id { get; set; } + /// + /// 载具规格分类Id + /// + public string carrystd_id { get; set; } /// /// 修改时间 diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index bb3d2c6f..aa747ad7 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -15,7 +15,9 @@ using JNPF.DynamicApiController; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json.Linq; using SqlSugar; +using Tnb.BasicData.Entities; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Entities.Attributes; using Tnb.WarehouseMgr.Entities.Consts; @@ -47,8 +49,32 @@ namespace Tnb.WarehouseMgr } } } + /// + /// 判断最终目标库位是否可以放置当前载具 + /// + /// 当前载具 + /// 目标库位 + /// + /// + [NonAction] + protected Task IsCarryAndLocationMatchByCarryStd(WmsCarryH carry, BasLocation locDest) + { + bool isMatch = false; + string errMessage = string.Empty; + if (carry == null) throw new ArgumentNullException(nameof(carry)); + if (locDest == null) throw new ArgumentNullException(nameof(locDest)); + if (!carry.carrystd_id.IsNullOrEmpty() && !locDest.carrystd_id.IsNullOrEmpty()) + { + var jsonArr = JArray.Parse(locDest.carrystd_id); + var locCarryStdArr = jsonArr.Select(x => x.ToObject()).ToArray(); + if (locCarryStdArr.Contains(carry.carrystd_id)) + { + isMatch = true; + } + } + return Task.FromResult(isMatch); + } - [NonAction] protected async Task DoUpdate(WareHouseUpInput input) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs index 93da5a11..eb71689f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs @@ -66,8 +66,6 @@ namespace Tnb.WarehouseMgr { await _db.Ado.BeginTranAsync(); - VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_CARRYMOVEINSTOCK_ID, true); - await _runService.Create(templateEntity, input); //入库取终点 //出库起点 var inStockStrategyInput = new InStockStrategyQuery { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString()!, Size = 1 }; var endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); @@ -79,9 +77,18 @@ namespace Tnb.WarehouseMgr } if (endLocations?.Count > 0) { + var carry = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsCarryD.carry_id)].ToString()); + var loc = await _db.Queryable().SingleAsync(it => it.id == endLocations[0].id); + var isMatch = await IsCarryAndLocationMatchByCarryStd(carry, loc); + if (!isMatch) throw new AppFriendlyException("库位与载具规格不匹配", 500); ePoint = await _db.Queryable().FirstAsync(it => it.location_id == endLocations[0].id); } + + VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_CARRYMOVEINSTOCK_ID, true); + await _runService.Create(templateEntity, input); + + if (sPoint != null && ePoint != null) { var points = await _wareHouseService.PathAlgorithms(sPoint.id, ePoint.id); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs index 1af501e8..0909866f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs @@ -68,8 +68,6 @@ namespace Tnb.WarehouseMgr { await _db.Ado.BeginTranAsync(); - VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSEMPTYINSTOCK_ID, true); - await _runService.Create(templateEntity, input); //入库取终点 var inStockStrategyInput = new InStockStrategyQuery { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString()!, Size = 1 }; var endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); @@ -81,8 +79,16 @@ namespace Tnb.WarehouseMgr } if (endLocations?.Count > 0) { + var carry = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsCarryD.carry_id)].ToString()); + var loc = await _db.Queryable().SingleAsync(it => it.id == endLocations[0].id); + var isMatch = await IsCarryAndLocationMatchByCarryStd(carry, loc); + if (!isMatch) throw new AppFriendlyException("库位与载具规格不匹配", 500); ePoint = await _db.Queryable().FirstAsync(it => it.location_id == endLocations[0].id); } + + //在线开发 + VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSEMPTYINSTOCK_ID, true); + await _runService.Create(templateEntity, input); if (sPoint != null && ePoint != null) { @@ -180,19 +186,21 @@ namespace Tnb.WarehouseMgr try { var carry = await _db.Queryable().SingleAsync(it => it.carry_code == input.carry_code); - var location = await _db.Queryable().SingleAsync(it => it.location_code == input.location_code); + var loc = await _db.Queryable().SingleAsync(it => it.location_code == input.location_code); + var isMatch = await IsCarryAndLocationMatchByCarryStd(carry, loc); + if (!isMatch) throw new AppFriendlyException("库位与载具规格不匹配", 500); var emptyInstock = await _db.Queryable().FirstAsync(it => it.carry_code == input.carry_code && it.status == WmsWareHouseConst.BILLSTATUS_ADD_ID); if (emptyInstock != null) { - return ToApiResult(HttpStatusCode.InternalServerError, $"空载具{emptyInstock.carry_code},预任务已生成"); + return isSuccessful; } - if (carry != null && location != null) + if (carry != null && loc != null) { var cols = new List(); var dic = new Dictionary(); dic[nameof(WmsEmptyInstock.id)] = SnowflakeIdHelper.NextId(); dic[nameof(WmsEmptyInstock.org_id)] = input.org_id ?? _userManager.User.OrganizeId; - dic[nameof(WmsEmptyInstock.location_id)] = location.id; + dic[nameof(WmsEmptyInstock.location_id)] = loc.id; dic[nameof(WmsEmptyInstock.bill_code)] = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_EMPTYINSTK_ENCODE); dic[nameof(WmsEmptyInstock.status)] = WmsWareHouseConst.BILLSTATUS_ADD_ID; dic[nameof(WmsEmptyInstock.carry_id)] = carry.id; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs index e0b3ecb9..2915a375 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs @@ -272,6 +272,8 @@ namespace Tnb.WarehouseMgr var loc = await _db.Queryable().FirstAsync(it => it.location_code == input.instock.location_code && it.is_type != EnumLocationType.存储库位.ToString()); var carry = await _db.Queryable().SingleAsync(it => it.carry_code == input.instock.carry_code); + var isMatch = await IsCarryAndLocationMatchByCarryStd(carry, loc); + if (!isMatch) throw new AppFriendlyException("库位与载具规格不匹配", 500); //如果数据不全或有误, if (carry.IsNull() || loc.IsNull() || instockds?.Count < 1 || instockcodes?.Count < 1) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs index 7ad379ee..0a37f8c1 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs @@ -67,8 +67,6 @@ namespace Tnb.WarehouseMgr { await _db.Ado.BeginTranAsync(); - VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSKITTINGINSTK_ID, true); - await _runService.Create(templateEntity, input); //入库取终点 //出库起点 var inStockStrategyInput = new InStockStrategyQuery { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString()!, Size = 1 }; var endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); @@ -80,9 +78,16 @@ namespace Tnb.WarehouseMgr } if (endLocations?.Count > 0) { + var carry = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsCarryD.carry_id)].ToString()); + var loc = await _db.Queryable().SingleAsync(it => it.id == endLocations[0].id); + var isMatch = await IsCarryAndLocationMatchByCarryStd(carry, loc); + if (!isMatch) throw new AppFriendlyException("库位与载具规格不匹配", 500); ePoint = await _db.Queryable().FirstAsync(it => it.location_id == endLocations[0].id); } + VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSKITTINGINSTK_ID, true); + await _runService.Create(templateEntity, input); + if (sPoint != null && ePoint != null) { var points = await _wareHouseService.PathAlgorithms(sPoint.id, ePoint.id); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs index d38712ef..665a32ee 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs @@ -66,11 +66,15 @@ namespace Tnb.WarehouseMgr { await _db.Ado.BeginTranAsync(); + var carry = await _db.Queryable().FirstAsync(it => it.id == input.data[nameof(WmsOutbale.carry_id)].ToString()); + var loc = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsPointH.location_id)].ToString()); + var isMatch = await IsCarryAndLocationMatchByCarryStd(carry, loc); + if (!isMatch) throw new AppFriendlyException("该载具无法放置到目标库位", 500); + VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSOUTBALE_ID, true); await _runService.Create(templateEntity, input); //入库取终点 //var OutStockStrategyInput = new OutStockStrategyQuery { carry_id = input.data[nameof(OutStockStrategyQuery.carry_id)].ToString(), Size = 1 }; - var carry = await _db.Queryable().FirstAsync(it => it.id == input.data[nameof(WmsOutbale.carry_id)].ToString()); WmsPointH? sPoint = null; WmsPointH? ePoint = null; if (input.data.ContainsKey(nameof(WmsPointH.location_id))) @@ -117,7 +121,7 @@ namespace Tnb.WarehouseMgr return preTask; }).ToList(); //判断目标库位是否自动签收 - var loc = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsPointH.location_id)].ToString()); + if (loc.is_sign == 0) { preTasks[^1].is_sign = 0; // 修改最后一个元素的是否签收值 diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs index f4b9be85..b86fb731 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs @@ -78,12 +78,12 @@ namespace Tnb.WarehouseMgr try { await _db.Ado.BeginTranAsync(); + //判断目标库位是否自动签收 + var loc = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsPointH.location_id)].ToString()); VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSOUTSTOCK_ID, true); await _runService.Create(templateEntity, input); - //判断目标库位是否自动签收 - var loc = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsPointH.location_id)].ToString()); var carryIds = new List(); //tablefield120 出库物料明细 diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs index 6b87d88e..d89d3c80 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs @@ -66,22 +66,27 @@ namespace Tnb.WarehouseMgr { await _db.Ado.BeginTranAsync(); - VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); - await _runService.Create(templateEntity, input); //入库取终点 //出库起点 var inStockStrategyInput = new InStockStrategyQuery { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString()!, Size = 1 }; var endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); - WmsPointH? sPoint = null; - WmsPointH? ePoint = null; + WmsPointH sPoint = null!; + WmsPointH ePoint = null!; if (input.data.ContainsKey(nameof(WmsPointH.location_id))) { sPoint = await _db.Queryable().FirstAsync(it => it.location_id == input.data[nameof(WmsPointH.location_id)].ToString()); } if (endLocations?.Count > 0) { + var carry = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsCarryD.carry_id)].ToString()); + var loc = await _db.Queryable().SingleAsync(it => it.id == endLocations[0].id); + var isMatch = await IsCarryAndLocationMatchByCarryStd(carry, loc); + if (!isMatch) throw new AppFriendlyException("库位与载具规格不匹配", 500); ePoint = await _db.Queryable().FirstAsync(it => it.location_id == endLocations[0].id); } + VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); + await _runService.Create(templateEntity, input); + if (sPoint != null && ePoint != null) { var points = await _wareHouseService.PathAlgorithms(sPoint.id, ePoint.id); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs index 051aa9d9..ad2de004 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs @@ -65,9 +65,7 @@ namespace Tnb.WarehouseMgr { await _db.Ado.BeginTranAsync(); - VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSEMPTYINSTKPDA_ID, true); - await _runService.Create(templateEntity, input); - //入库取终点 + //入库取终点 //出库起点 var inStockStrategyInput = new InStockStrategyQuery { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString()!, Size = 1 }; var endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); WmsPointH sPoint = null!; @@ -78,9 +76,16 @@ namespace Tnb.WarehouseMgr } if (endLocations?.Count > 0) { + var carry = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsCarryD.carry_id)].ToString()); + var loc = await _db.Queryable().SingleAsync(it => it.id == endLocations[0].id); + var isMatch = await IsCarryAndLocationMatchByCarryStd(carry, loc); + if (!isMatch) throw new AppFriendlyException("库位与载具规格不匹配", 500); ePoint = await _db.Queryable().FirstAsync(it => it.location_id == endLocations[0].id); } + VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSEMPTYINSTKPDA_ID, true); + await _runService.Create(templateEntity, input); + if (sPoint != null && ePoint != null) { var points = await _wareHouseService.PathAlgorithms(sPoint.id, ePoint.id); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs index 7322f013..6e4c6ca2 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs @@ -80,6 +80,10 @@ namespace Tnb.WarehouseMgr } if (endLocations?.Count > 0) { + var carry = await _db.Queryable().SingleAsync(it => it.id == input.data[nameof(WmsCarryD.carry_id)].ToString()); + var loc = await _db.Queryable().SingleAsync(it => it.id == endLocations[0].id); + var isMatch = await IsCarryAndLocationMatchByCarryStd(carry, loc); + if (!isMatch) throw new AppFriendlyException("库位与载具规格不匹配", 500); ePoint = await _db.Queryable().FirstAsync(it => it.location_id == endLocations[0].id); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs index 282556f8..a2a3af29 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs @@ -52,6 +52,9 @@ namespace Tnb.WarehouseMgr [HttpPost] public async Task PackSortingByAdd(WmsCarryMat? carryMat) { + string firstLocationId = "27010980724501", secondLocationId = "27010987857941"; + 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) .ToListAsync(); @@ -61,9 +64,14 @@ namespace Tnb.WarehouseMgr { await _db.Ado.BeginTranAsync(); + var singleSorting = setSortings[^setSortings.Count]; + 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[^setSortings.Count]; + var setSortingDList = await _db.Queryable().Where(it => it.bill_id == singleSorting.id).ToListAsync(); if (setSortingDList?.Count > 0) { @@ -141,18 +149,18 @@ namespace Tnb.WarehouseMgr { List preTasks = new(); List locIds = new(); - string firstLocationId = "27010980724501", secondLocationId = "27010987857941"; + var mid = 6; if (carrys.Length > mid) { var leftCarrys = carrys[..mid]; var rightCarrys = carrys[mid..]; - await InnerGenPreTask(leftCarrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks); - await InnerGenPreTask(rightCarrys, locIds, secondLocationId, singleSorting.id, singleSorting.bill_code, preTasks); + await InnerGenPreTask(leftCarrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks, endLocation); + await InnerGenPreTask(rightCarrys, locIds, secondLocationId, singleSorting.id, singleSorting.bill_code, preTasks, endLocation); } else { - await InnerGenPreTask(carrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks); + await InnerGenPreTask(carrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks, endLocation); } List pretaskCodes = new(); foreach (var pt in preTasks) @@ -187,9 +195,8 @@ namespace Tnb.WarehouseMgr } } - private async Task InnerGenPreTask(WmsCarryH[] carrys, List locIds, string eLocationId, string requireId, string requireCode, List preTasks) + private async Task InnerGenPreTask(WmsCarryH[] carrys, List locIds, string eLocationId, string requireId, string requireCode, List preTasks, BasLocation endLocation) { - var loc = await _db.Queryable().SingleAsync(it => it.id == eLocationId); foreach (var carry in carrys) { WmsPointH sPoint = await _db.Queryable().FirstAsync(it => it.location_id == carry.location_id); @@ -232,7 +239,7 @@ namespace Tnb.WarehouseMgr }; return preTask; }).ToList(); - if (loc.is_sign == 0) + if (endLocation.is_sign == 0) { curPreTasks[^1].is_sign = 0; // 修改最后一个元素的是否签收值 } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index eed1bc1c..b134cd91 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -71,15 +71,15 @@ namespace Tnb.WarehouseMgr // var set = true ; 如果有 把set修改为false var items = await _db.Queryable().Where(it => it.status == WmsWareHouseConst.BILLSTATUS_CALLED_ID).ToListAsync(); var isCalled = items?.Count > 0; - + if (kittingOuts?.Count > 0) { foreach (var ko in kittingOuts) { //a.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID - - Expression> whereExp = (ko.carry_id != null) ? a=>a.id == ko.carry_id : a => a.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID; - + + Expression> whereExp = (ko.carry_id != null) ? a => a.id == ko.carry_id : a => a.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID; + var carrys = await _db.Queryable() .InnerJoin((a, b) => a.collocation_scheme_id == b.id) .Where(whereExp.And(a => a.collocation_scheme_id == ko.collocation_scheme_id && a.is_lock == 0)) @@ -89,7 +89,7 @@ namespace Tnb.WarehouseMgr { var firstCarry = carrys.FirstOrDefault(); GenPreTaskUpInput genPreTaskInput = new() { CarryId = firstCarry?.id }; - await _warehouseService.GenInStockTaskHandleAfter(genPreTaskInput, it => new WmsCarryH { is_lock = 1 , out_status = EnumOutStatus.全部出.ToString()}, null!); + await _warehouseService.GenInStockTaskHandleAfter(genPreTaskInput, it => new WmsCarryH { is_lock = 1, out_status = EnumOutStatus.全部出.ToString() }, null!); ko.status = WmsWareHouseConst.BILLSTATUS_TOBESHIPPED_ID; ko.carry_id = firstCarry?.id; ko.carry_code = firstCarry?.carry_code; @@ -246,14 +246,14 @@ namespace Tnb.WarehouseMgr var carry = await _db.Queryable().SingleAsync(it => it.id == carryId); var kods = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); //载具为料架时,取所有料箱的条码 - List carryMIds = new(); + List mCarryIds = new(); if (carry.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID) { var carryDs = await _db.Queryable().Where(it => it.carry_id == carryId).ToListAsync(); - carryMIds = carryDs.Select(x => x.membercarry_id).ToList(); + mCarryIds = carryDs.Select(x => x.membercarry_id).ToList(); } //当前载具对应的所有条码插入 - Expression> whereExp = carryMIds?.Count > 0 ? a => carryMIds.Contains(a.carry_id) : a => a.carry_id == carryId; + Expression> whereExp = mCarryIds?.Count > 0 ? a => mCarryIds.Contains(a.carry_id) : a => a.carry_id == carryId; var carryCodes = await _db.Queryable().Where(whereExp).ToListAsync(); var kittingoutCodes = carryCodes.Adapt>(); @@ -298,9 +298,9 @@ namespace Tnb.WarehouseMgr // isOk = row > 0; //} //判断当前载具是否为料架,如果是料架 清空所有料架/料箱数据, - if (carry.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID && carryMIds?.Count > 0) + if (carry.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID && mCarryIds?.Count > 0) { - var carrys = await _db.Queryable().Where(it => carryMIds.Contains(it.id)).ToListAsync(); + var carrys = await _db.Queryable().Where(it => mCarryIds.Contains(it.id)).ToListAsync(); carrys.Add(carry); if (carrys?.Count > 0) { @@ -336,6 +336,11 @@ namespace Tnb.WarehouseMgr if (input.IsNull()) throw new ArgumentNullException(nameof(input)); try { + var kittingOut = input[^1]; + var curCarry = await _db.Queryable().SingleAsync(it => it.id == kittingOut.carry_id); + var endLocation = await _db.Queryable().SingleAsync(it => it.id == kittingOut.location_id); + var isMatch = await IsCarryAndLocationMatchByCarryStd(curCarry, endLocation); + if (!isMatch) throw new AppFriendlyException("该载具无法放置到目标库位", 500); await _db.Ado.BeginTranAsync(); List kittingOutDs = new();