From 0c05aa439507124c500cb99c5c40c2d70e3b260a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83?= <15095123350@163.com> Date: Mon, 5 Aug 2024 17:03:25 +0800 Subject: [PATCH] 20240805 --- src/Khd.Core.Wcs/MainCentralControl.cs | 4 +- src/Khd.Core.Wcs/SystemData.cs | 4 + src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 1908 ++++++++++---------- src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs | 185 +- src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs | 177 +- src/Khd.Core.Wcs/Wcs/SystemTimer.cs | 2 +- src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs | 164 +- 7 files changed, 1238 insertions(+), 1206 deletions(-) diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 2ff49fb..da120f7 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -33,7 +33,7 @@ namespace Khd.Core.Wcs /// public void Start() { - LoggerUtils logger=new LoggerUtils(); + LoggerUtils logger = new LoggerUtils(); using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); try @@ -123,7 +123,7 @@ namespace Khd.Core.Wcs catch (Exception ex) { Console.WriteLine(ex.Message); - logger.Error(ex.Message+"\n"+ex.StackTrace); + logger.Error(ex.Message + "\n" + ex.StackTrace); } } diff --git a/src/Khd.Core.Wcs/SystemData.cs b/src/Khd.Core.Wcs/SystemData.cs index f65a295..15af61c 100644 --- a/src/Khd.Core.Wcs/SystemData.cs +++ b/src/Khd.Core.Wcs/SystemData.cs @@ -64,5 +64,9 @@ namespace Khd.Core.Wcs } } } + + public readonly static object SecondTaskLock = new (); + public readonly static object ThirdTaskLock = new (); + public readonly static object FiveTaskLock = new (); } } diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index e78e77c..68ddecf 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -352,124 +352,127 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 29); - if (baseEquip.emptyCount == 1) + lock (SystemData.FiveTaskLock) { - WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 28).FirstOrDefault(); - if (wcsTask == null) + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 29); + if (baseEquip.emptyCount == 1) { - WmsRawInstock? wmsRawInstock = dbContext.WmsRawInstock.Where(t => t.warehouseId == 511 && t.instockType == "2" && t.executeStatus == "0").FirstOrDefault(); - if (wmsRawInstock != null) + WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 28).FirstOrDefault(); + if (wcsTask == null) { - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wmsRawInstock.palletInfoCode); - if (mesBasePalletInfo != null) + WmsRawInstock? wmsRawInstock = dbContext.WmsRawInstock.Where(t => t.warehouseId == 511 && t.instockType == "2" && t.executeStatus == "0").FirstOrDefault(); + if (wmsRawInstock != null) { - MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); - if (mesBaseBarcodeInfo != null) + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wmsRawInstock.palletInfoCode); + if (mesBasePalletInfo != null) { - var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == 5) - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.warehouseId == 511) - .Where(t => t.locationStatus == "1") - .OrderByDescending(t => t.locColumn) - .ToList(); - - List containerCodes = wmsBaseLocations - .Where(t => t.locDeep == 1) - .Select(t => t.containerCode).ToList();//深库位的托盘 - containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); - List mesBasePalletInfos = dbContext.MesBaseBarcodeInfo - .Where(t => t.materialId == mesBasePalletInfo.materialId) - .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId) - .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 - - var bill = from a in mesBasePalletInfos - join b in wmsBaseLocations.Where(t => t.locDeep == 1 && t.returnFlag == "1") on a.palletInfoCode equals b.containerCode - select new { b };//等于当前任务的物料的托盘的库位信息 - - var outBill = from a in bill - from b in wmsBaseLocations - where b.locDeep == 2 - && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) - && a.b.locColumn == b.locColumn - && b.locationStatus == "1" - && string.IsNullOrEmpty(b.containerCode) - select new { a, b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 - - WmsBaseLocation? wmsBaseLocation = null; - wmsBaseLocation ??= outBill.Where(t => !cannotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 - //深浅库位问题?库位入库优先级等 - - var AgvEquip = StaticData.BaseEquip.First(t => t.objid == 28);//5楼叉车 - if (wmsBaseLocation != null) + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); + if (mesBaseBarcodeInfo != null) { - if (wmsBaseLocation.locDeep == 1) + var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == 5) + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.warehouseId == 511) + .Where(t => t.locationStatus == "1") + .OrderByDescending(t => t.locColumn) + .ToList(); + + List containerCodes = wmsBaseLocations + .Where(t => t.locDeep == 1) + .Select(t => t.containerCode).ToList();//深库位的托盘 + containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); + List mesBasePalletInfos = dbContext.MesBaseBarcodeInfo + .Where(t => t.materialId == mesBasePalletInfo.materialId) + .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId) + .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 + + var bill = from a in mesBasePalletInfos + join b in wmsBaseLocations.Where(t => t.locDeep == 1 && t.returnFlag == "1") on a.palletInfoCode equals b.containerCode + select new { b };//等于当前任务的物料的托盘的库位信息 + + var outBill = from a in bill + from b in wmsBaseLocations + where b.locDeep == 2 + && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) + && a.b.locColumn == b.locColumn + && b.locationStatus == "1" + && string.IsNullOrEmpty(b.containerCode) + select new { a, b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + + WmsBaseLocation? wmsBaseLocation = null; + wmsBaseLocation ??= outBill.Where(t => !cannotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 + //深浅库位问题?库位入库优先级等 + + var AgvEquip = StaticData.BaseEquip.First(t => t.objid == 28);//5楼叉车 + if (wmsBaseLocation != null) { - bool hasLocation = wmsBaseLocations - .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) - .Where(t => t.locColumn == wmsBaseLocation.locColumn).Any(); - if (!hasLocation) + if (wmsBaseLocation.locDeep == 1) { - cannotIn.Add(wmsBaseLocation.locationCode); - Console.WriteLine(DateTime.Now + $":目标库位{cannotIn.Join(",")}的浅库位库位状态异常,无法入库"); - _logger.Info($"目标库位{cannotIn.Join(",")}的浅库位库位状态异常,无法入库"); - continue; + bool hasLocation = wmsBaseLocations + .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) + .Where(t => t.locColumn == wmsBaseLocation.locColumn).Any(); + if (!hasLocation) + { + cannotIn.Add(wmsBaseLocation.locationCode); + Console.WriteLine(DateTime.Now + $":目标库位{cannotIn.Join(",")}的浅库位库位状态异常,无法入库"); + _logger.Info($"目标库位{cannotIn.Join(",")}的浅库位库位状态异常,无法入库"); + continue; + } } + WcsTask newTask = new WcsTask(); + newTask.taskStatus = 0;//创建状态 + newTask.updateTime = DateTime.Now; + newTask.currPointId = baseEquip.objid; + newTask.currPointNo = baseEquip.equipNo; + newTask.nextPointId = AgvEquip.objid; + newTask.nextPointNo = AgvEquip.equipNo; + newTask.endPointId = wmsBaseLocation.locationId; + newTask.endPointNo = wmsBaseLocation.locationCode; + newTask.containerNo = mesBasePalletInfo.palletInfoCode; + newTask.materialId = mesBasePalletInfo.materialId; + newTask.objid = StaticData.SnowId.NextId(); + newTask.createTime = DateTime.Now; + newTask.taskType = 28; + newTask.useFlag = 1; + wmsBaseLocation.locationStatus = "2"; + WmsRawInstockDetail wmsRawInstockDetail = new WmsRawInstockDetail + { + rawInstockDetailId = StaticData.SnowId.NextId(), + stackAmount = 1, + erpStatus = "0", + executeStatus = "1", + qualityStatus = "0", + activeFlag = "1", + createBy = "WCS", + createDate = DateTime.Now, + erpAmount = 0, + instockAmount = 1, + instockBatch = mesBasePalletInfo.materialBarcode, + instockTime = DateTime.Now, + instockWay = "2", + locationCode = newTask.endPointNo, + machineName = mesBaseBarcodeInfo.machineName, + materialBarcode = mesBasePalletInfo.materialBarcode, + materialId = mesBaseBarcodeInfo.materialId, + materialProductionDate = mesBaseBarcodeInfo.productionDate, + planAmount = 1, + poNo = mesBaseBarcodeInfo.poNo, + rawInstockId = wmsRawInstock.rawInstockId, + taskCode = wmsRawInstock.taskCode, + }; + SystemData.LockOutLocation(wmsBaseLocation, dbContext); + dbContext.Add(wmsRawInstockDetail); + dbContext.Update(wmsBaseLocation); + dbContext.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + cannotIn.Clear(); } - WcsTask newTask = new WcsTask(); - newTask.taskStatus = 0;//创建状态 - newTask.updateTime = DateTime.Now; - newTask.currPointId = baseEquip.objid; - newTask.currPointNo = baseEquip.equipNo; - newTask.nextPointId = AgvEquip.objid; - newTask.nextPointNo = AgvEquip.equipNo; - newTask.endPointId = wmsBaseLocation.locationId; - newTask.endPointNo = wmsBaseLocation.locationCode; - newTask.containerNo = mesBasePalletInfo.palletInfoCode; - newTask.materialId = mesBasePalletInfo.materialId; - newTask.objid = StaticData.SnowId.NextId(); - newTask.createTime = DateTime.Now; - newTask.taskType = 28; - newTask.useFlag = 1; - wmsBaseLocation.locationStatus = "2"; - WmsRawInstockDetail wmsRawInstockDetail = new WmsRawInstockDetail - { - rawInstockDetailId = StaticData.SnowId.NextId(), - stackAmount = 1, - erpStatus = "0", - executeStatus = "1", - qualityStatus = "0", - activeFlag = "1", - createBy = "WCS", - createDate = DateTime.Now, - erpAmount = 0, - instockAmount = 1, - instockBatch = mesBasePalletInfo.materialBarcode, - instockTime = DateTime.Now, - instockWay = "2", - locationCode = newTask.endPointNo, - machineName = mesBaseBarcodeInfo.machineName, - materialBarcode = mesBasePalletInfo.materialBarcode, - materialId = mesBaseBarcodeInfo.materialId, - materialProductionDate = mesBaseBarcodeInfo.productionDate, - planAmount = 1, - poNo = mesBaseBarcodeInfo.poNo, - rawInstockId = wmsRawInstock.rawInstockId, - taskCode = wmsRawInstock.taskCode, - }; - SystemData.LockOutLocation(wmsBaseLocation, dbContext); - dbContext.Add(wmsRawInstockDetail); - dbContext.Update(wmsBaseLocation); - dbContext.Add(newTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); - cannotIn.Clear(); } } } @@ -685,25 +688,25 @@ namespace Khd.Core.Wcs.Wcs .ToList(); wmsRawReturns.ForEach(t => t.executeStatus = "1"); dbContext.UpdateRange(wmsRawReturns); - BaseEquip endEquip = StaticData.BaseEquip.First(t=>t.objid==21); + BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 21); var wcsTask = new WcsTask() { - objid=StaticData.SnowId.NextId(), - serialNo=SystemData.GetSerialNo(dbContext), - taskType=48, - nextPointId=baseEquip.objid, - nextPointNo=baseEquip.equipNo, - currPointId=startEquip.objid, - currPointNo=startEquip.equipNo, - endPointId=endEquip.objid, - endPointNo=endEquip.equipNo, - equipmentNo=baseEquip.equipNo, - useFlag=1, - qty=1, - taskStatus=0, - containerNo="", - IsDelete=0, - createTime=DateTime.Now, + objid = StaticData.SnowId.NextId(), + serialNo = SystemData.GetSerialNo(dbContext), + taskType = 48, + nextPointId = baseEquip.objid, + nextPointNo = baseEquip.equipNo, + currPointId = startEquip.objid, + currPointNo = startEquip.equipNo, + endPointId = endEquip.objid, + endPointNo = endEquip.equipNo, + equipmentNo = baseEquip.equipNo, + useFlag = 1, + qty = 1, + taskStatus = 0, + containerNo = "", + IsDelete = 0, + createTime = DateTime.Now, }; baseEquip.IsOut = 0; dbContext.Update(baseEquip); @@ -840,229 +843,232 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - bool task = dbContext.WcsTask.Where(t => t.nextPointId == 9 && t.taskStatus <= 5).Any(); - if (!task) + lock (SystemData.ThirdTaskLock) { - endEquip = dbContext.BaseEquip.First(t => t.objid == 31); - if (endEquip.emptyCount == 0) + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + bool task = dbContext.WcsTask.Where(t => t.nextPointId == 9 && t.taskStatus <= 5).Any(); + if (!task) { - WcsTask? wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.endPointId == endEquip.objid); - if (wcsTask == null) + endEquip = dbContext.BaseEquip.First(t => t.objid == 31); + if (endEquip.emptyCount == 0) { - WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.taskType == 999).FirstOrDefault();//调接口生成的任务 - if (wcsTaskManual != null) + WcsTask? wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.endPointId == endEquip.objid); + if (wcsTask == null) { - var wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == wcsTaskManual.orderId); - if (wmsRawOutstock != null) + WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.taskType == 999).FirstOrDefault();//调接口生成的任务 + if (wcsTaskManual != null) { - var wmsRawStocks = dbContext.WmsRawStock - .Where(t => t.saleOrderId == (wmsRawOutstock.saleOrderId == null ? 0 : wmsRawOutstock.saleOrderId)) - .Where(t => t.warehouseId == 311) - .ToList(); - var AllWmsBaseLocations = dbContext.WmsBaseLocation - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.warehouseId == 311).ToList(); - var wmsBaseLocations = AllWmsBaseLocations - .Where(t => t.warehouseId == 311) - .ToList(); - var bill = from a in wmsBaseLocations - from b in wmsRawStocks - where a.locationCode == b.locationCode - select new { a, b }; - WmsBaseLocation? wmsBaseLocation = null; - WmsRawStock? wmsRawStock = null; - bill = bill.OrderBy(t => t.b.instockDate.Value.Date);//按某个时间段 - foreach (var item in bill) + var wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == wcsTaskManual.orderId); + if (wmsRawOutstock != null) { - var fistbill = bill.First(); - if (fistbill != null) + var wmsRawStocks = dbContext.WmsRawStock + .Where(t => t.saleOrderId == (wmsRawOutstock.saleOrderId == null ? 0 : wmsRawOutstock.saleOrderId)) + .Where(t => t.warehouseId == 311) + .ToList(); + var AllWmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.warehouseId == 311).ToList(); + var wmsBaseLocations = AllWmsBaseLocations + .Where(t => t.warehouseId == 311) + .ToList(); + var bill = from a in wmsBaseLocations + from b in wmsRawStocks + where a.locationCode == b.locationCode + select new { a, b }; + WmsBaseLocation? wmsBaseLocation = null; + WmsRawStock? wmsRawStock = null; + bill = bill.OrderBy(t => t.b.instockDate.Value.Date);//按某个时间段 + foreach (var item in bill) { - int? locRow = 0; - if (fistbill.a.locRow % 2 == 1) + var fistbill = bill.First(); + if (fistbill != null) { - locRow = fistbill.a.locRow + 1; - } - else - { - locRow = fistbill.a.locRow - 1; - } - - var lastbill = bill.Where(t => t.a.locRow == locRow) - .Where(t => t.a.locColumn == fistbill.a.locColumn) - .Where(t => t.a.locDeep == 2) - .FirstOrDefault(); - wmsBaseLocation = fistbill.a; - if (lastbill != null) - { - if (lastbill.b.instockDate != null && fistbill.b.instockDate != null) + int? locRow = 0; + if (fistbill.a.locRow % 2 == 1) { - if (wmsBaseLocation.locDeep == 1) + locRow = fistbill.a.locRow + 1; + } + else + { + locRow = fistbill.a.locRow - 1; + } + + var lastbill = bill.Where(t => t.a.locRow == locRow) + .Where(t => t.a.locColumn == fistbill.a.locColumn) + .Where(t => t.a.locDeep == 2) + .FirstOrDefault(); + wmsBaseLocation = fistbill.a; + if (lastbill != null) + { + if (lastbill.b.instockDate != null && fistbill.b.instockDate != null) { - int? row = 0; - if (wmsBaseLocation.locRow % 2 == 1) + if (wmsBaseLocation.locDeep == 1) { - row = wmsBaseLocation.locRow + 1; - } - else - { - row = wmsBaseLocation.locRow - 1; - } - var lowLocationBill = bill.Where(t => t.a.locRow == locRow).Where(t => t.a.locColumn == wmsBaseLocation.locColumn).Where(t => t.a.warehouseId == wmsBaseLocation.warehouseId).FirstOrDefault(); - if (lowLocationBill != null) - { - wmsBaseLocation = lowLocationBill.a; - } - else - { - WmsBaseLocation? fromBaseLocation = AllWmsBaseLocations.Where(t => t.locRow == row) - .Where(t => t.locColumn == wmsBaseLocation.locColumn) - .Where(t => t.warehouseId == wmsBaseLocation.warehouseId).FirstOrDefault(); - if (fromBaseLocation != null && !string.IsNullOrEmpty(fromBaseLocation.containerCode)) + int? row = 0; + if (wmsBaseLocation.locRow % 2 == 1) { - WmsRawStock? wmsRawStock1 = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode); - if (wmsRawStock1 != null) + row = wmsBaseLocation.locRow + 1; + } + else + { + row = wmsBaseLocation.locRow - 1; + } + var lowLocationBill = bill.Where(t => t.a.locRow == locRow).Where(t => t.a.locColumn == wmsBaseLocation.locColumn).Where(t => t.a.warehouseId == wmsBaseLocation.warehouseId).FirstOrDefault(); + if (lowLocationBill != null) + { + wmsBaseLocation = lowLocationBill.a; + } + else + { + WmsBaseLocation? fromBaseLocation = AllWmsBaseLocations.Where(t => t.locRow == row) + .Where(t => t.locColumn == wmsBaseLocation.locColumn) + .Where(t => t.warehouseId == wmsBaseLocation.warehouseId).FirstOrDefault(); + if (fromBaseLocation != null && !string.IsNullOrEmpty(fromBaseLocation.containerCode)) { - WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) - .Where(t => t.locDeep == 1) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .Where(t => t.locColumn > wmsBaseLocation.locColumn) - .OrderBy(t => t.locColumn) - .FirstOrDefault(); - toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) - .Where(t => t.locDeep == 1) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .Where(t => t.locColumn < wmsBaseLocation.locColumn) - .OrderByDescending(t => t.locColumn) - .FirstOrDefault(); - toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) - .Where(t => t.warehouseId != wmsBaseLocation.locationId) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .FirstOrDefault(); - if (toLocation != null) + WmsRawStock? wmsRawStock1 = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode); + if (wmsRawStock1 != null) { - if (toLocation.locDeep == 1) + WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) + .Where(t => t.locDeep == 1) + .Where(t => string.IsNullOrEmpty(t.containerCode)) + .Where(t => t.locColumn > wmsBaseLocation.locColumn) + .OrderBy(t => t.locColumn) + .FirstOrDefault(); + toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) + .Where(t => t.locDeep == 1) + .Where(t => string.IsNullOrEmpty(t.containerCode)) + .Where(t => t.locColumn < wmsBaseLocation.locColumn) + .OrderByDescending(t => t.locColumn) + .FirstOrDefault(); + toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) + .Where(t => t.warehouseId != wmsBaseLocation.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode)) + .FirstOrDefault(); + if (toLocation != null) { - bool hasLocation = AllWmsBaseLocations - .Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1))) - .Where(t => t.locColumn == toLocation.locColumn) - .Any(); - if (!hasLocation) + if (toLocation.locDeep == 1) { - Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); - _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); - continue; + bool hasLocation = AllWmsBaseLocations + .Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1))) + .Where(t => t.locColumn == toLocation.locColumn) + .Any(); + if (!hasLocation) + { + Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + continue; + } } + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + taskType = 67, + containerNo = wmsRawStock1.palletInfoCode, + createBy = "WCS", + createTime = DateTime.Now.AddSeconds(-10), + taskStatus = 0, + currPointId = fromBaseLocation.locationId, + currPointNo = fromBaseLocation.locationCode, + nextPointId = baseEquip.objid, + nextPointNo = baseEquip.equipNo, + endPointId = toLocation.locationId, + endPointNo = toLocation.locationCode, + equipmentNo = baseEquip.equipNo, + useFlag = 1, + qty = 1 + }; + SystemData.LockOutLocation(toLocation, dbContext); + SystemData.LockOutLocation(fromBaseLocation, dbContext); + toLocation.locationStatus = "4"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + fromBaseLocation.updateBy = "WCS"; + fromBaseLocation.updateTime = DateTime.Now; + fromBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(fromBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); } - var RemoveTask = new WcsTask() + else { - objid = StaticData.SnowId.NextId(), - taskType = 67, - containerNo = wmsRawStock1.palletInfoCode, - createBy = "WCS", - createTime = DateTime.Now.AddSeconds(-10), - taskStatus = 0, - currPointId = fromBaseLocation.locationId, - currPointNo = fromBaseLocation.locationCode, - nextPointId = baseEquip.objid, - nextPointNo = baseEquip.equipNo, - endPointId = toLocation.locationId, - endPointNo = toLocation.locationCode, - equipmentNo = baseEquip.equipNo, - useFlag = 1, - qty = 1 - }; - SystemData.LockOutLocation(toLocation, dbContext); - SystemData.LockOutLocation(fromBaseLocation, dbContext); - toLocation.locationStatus = "4"; - toLocation.updateBy = "WCS"; - toLocation.updateTime = DateTime.Now; - fromBaseLocation.updateBy = "WCS"; - fromBaseLocation.updateTime = DateTime.Now; - fromBaseLocation.locationStatus = "4"; - dbContext.Update(toLocation); - dbContext.Update(fromBaseLocation); - dbContext.Add(RemoveTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); - dbContext.Add(wcsTaskLog); + continue; + } } else { continue; } } - else - { - continue; - } } } } } - } - if (wmsBaseLocation != null) - { - wmsRawStock = wmsRawStocks.Where(t => t.locationCode == wmsBaseLocation.locationCode).First(); - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wmsRawStock.palletInfoCode); - if (mesBasePalletInfo != null) + if (wmsBaseLocation != null) { - MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); - if (mesBaseBarcodeInfo != null) + wmsRawStock = wmsRawStocks.Where(t => t.locationCode == wmsBaseLocation.locationCode).First(); + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wmsRawStock.palletInfoCode); + if (mesBasePalletInfo != null) { - WmsRawOutstockDetail wmsRawOutstockDetail = new WmsRawOutstockDetail() + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); + if (mesBaseBarcodeInfo != null) { - rawOutstockDetailId = StaticData.SnowId.NextId(), - createBy = "WCS", - createDate = DateTime.Now, - executeStatus = "0", - erpAmount = 0, - erpStatus = "0", - instockBatch = mesBaseBarcodeInfo.batchCode, - stackAmount = 1, - locationCode = wmsBaseLocation.locationCode, - rawOutstockId = wmsRawOutstock.rawOutstockId, - planAmount = 1, - outstockWay = "2", - outstockPerson = "WCS", - outstockTime = DateTime.Now, - materialProductionDate = mesBaseBarcodeInfo.productionDate, - materialBarcode = mesBasePalletInfo.materialBarcode, - materialId = wmsRawOutstock.materialId, - machineName = mesBaseBarcodeInfo.machineName, - outstockAmount = 1, - taskCode = wmsRawOutstock.taskCode - }; - wcsTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = wmsRawOutstock.rawOutstockId, - taskType = 41, - containerNo = wmsBaseLocation.containerCode, - createBy = "WCS", - createTime = DateTime.Now, - taskStatus = 0, - materialId = wmsRawOutstock.materialId, - currPointId = wmsBaseLocation.locationId, - currPointNo = wmsBaseLocation.locationCode, - nextPointId = baseEquip.objid, - nextPointNo = baseEquip.equipNo, - endPointId = endEquip.objid, - endPointNo = endEquip.equipNo, - equipmentNo = endEquip.equipNo, - useFlag = 1, - qty = 1 - }; - SystemData.LockOutLocation(wmsBaseLocation, dbContext); - wmsBaseLocation.locationStatus = "6"; - dbContext.Update(wmsBaseLocation); - dbContext.Add(wmsRawOutstockDetail); - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - dbContext.Remove(wcsTaskManual); - dbContext.Add(wcsTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); + WmsRawOutstockDetail wmsRawOutstockDetail = new WmsRawOutstockDetail() + { + rawOutstockDetailId = StaticData.SnowId.NextId(), + createBy = "WCS", + createDate = DateTime.Now, + executeStatus = "0", + erpAmount = 0, + erpStatus = "0", + instockBatch = mesBaseBarcodeInfo.batchCode, + stackAmount = 1, + locationCode = wmsBaseLocation.locationCode, + rawOutstockId = wmsRawOutstock.rawOutstockId, + planAmount = 1, + outstockWay = "2", + outstockPerson = "WCS", + outstockTime = DateTime.Now, + materialProductionDate = mesBaseBarcodeInfo.productionDate, + materialBarcode = mesBasePalletInfo.materialBarcode, + materialId = wmsRawOutstock.materialId, + machineName = mesBaseBarcodeInfo.machineName, + outstockAmount = 1, + taskCode = wmsRawOutstock.taskCode + }; + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = wmsRawOutstock.rawOutstockId, + taskType = 41, + containerNo = wmsBaseLocation.containerCode, + createBy = "WCS", + createTime = DateTime.Now, + taskStatus = 0, + materialId = wmsRawOutstock.materialId, + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.locationCode, + nextPointId = baseEquip.objid, + nextPointNo = baseEquip.equipNo, + endPointId = endEquip.objid, + endPointNo = endEquip.equipNo, + equipmentNo = endEquip.equipNo, + useFlag = 1, + qty = 1 + }; + SystemData.LockOutLocation(wmsBaseLocation, dbContext); + wmsBaseLocation.locationStatus = "6"; + dbContext.Update(wmsBaseLocation); + dbContext.Add(wmsRawOutstockDetail); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Remove(wcsTaskManual); + dbContext.Add(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + } } } } @@ -1078,6 +1084,10 @@ namespace Khd.Core.Wcs.Wcs { _logger.Error(ex.Message + "\n" + ex.StackTrace); } + finally + { + Thread.Sleep(5000); + } } } @@ -1424,224 +1434,227 @@ namespace Khd.Core.Wcs.Wcs bool task = dbContext.WcsTask.Where(t => t.nextPointId == 8 && t.taskStatus <= 7).Any(); if (!task) { - var proStock = dbContext.WmsProductStock - .Where(t => t.warehouseId == 231) - .Where(t => t.activeFlag == "1") - .Where(t => t.totalAmount > t.frozenAmount) - .ToList(); - var proOutStock = dbContext.WmsProductOutstock - .Where(t => t.outstockQty < t.applyQty) - .Where(t => t.auditStatus == "1") - .Where(t => t.warehouseId == 231) - .Where(t => t.productType == "3") - .Where(t => t.executeStatus == "0" || t.executeStatus == "1").ToList(); - //获取最早入库时间 - foreach (var item in proOutStock) + lock (SystemData.SecondTaskLock) { - - var wmsproStocks = proStock - .Where(t => t.productId == item.productId && t.saleOrderId == (item.saleOrderId == null ? 0 : item.saleOrderId) && t.warehouseId == item.warehouseId) - .Select(t => t.locationCode) - .ToList(); - List AllWmsBaseLocations = dbContext.WmsBaseLocation - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.locationStatus == "1") - .Where(t => t.warehouseId == item.warehouseId).ToList(); - var wmsBaseLocations = AllWmsBaseLocations - .Where(t => t.warehouseId == item.warehouseId) - .Where(t => wmsproStocks.Contains(t.locationCode)) + var proStock = dbContext.WmsProductStock + .Where(t => t.warehouseId == 231) + .Where(t => t.activeFlag == "1") + .Where(t => t.totalAmount > t.frozenAmount) .ToList(); - - decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty); - if (needNumber <= 0) + var proOutStock = dbContext.WmsProductOutstock + .Where(t => t.outstockQty < t.applyQty) + .Where(t => t.auditStatus == "1") + .Where(t => t.warehouseId == 231) + .Where(t => t.productType == "3") + .Where(t => t.executeStatus == "0" || t.executeStatus == "1").ToList(); + //获取最早入库时间 + foreach (var item in proOutStock) { - item.executeStatus = "2"; - dbContext.Update(item); - dbContext.SaveChanges(); - continue; - } - var bill = from a in wmsBaseLocations - from b in proStock - where a.locationCode == b.locationCode - select new { a, b }; - WmsBaseLocation? location = null; - WmsProductStock? stock = null; - BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8); - BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 1); - foreach (var b in bill) - { - item.executeStatus = "1"; - location = b.a; - stock = b.b; - WcsTask wcsTask; - stock.updateDate = DateTime.Now; - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == stock.palletInfoCode); - if (mesBasePalletInfo != null) + var wmsproStocks = proStock + .Where(t => t.productId == item.productId && t.saleOrderId == (item.saleOrderId == null ? 0 : item.saleOrderId) && t.warehouseId == item.warehouseId) + .Select(t => t.locationCode) + .ToList(); + List AllWmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.locationStatus == "1") + .Where(t => t.warehouseId == item.warehouseId).ToList(); + var wmsBaseLocations = AllWmsBaseLocations + .Where(t => t.warehouseId == item.warehouseId) + .Where(t => wmsproStocks.Contains(t.locationCode)) + .ToList(); + + decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty); + if (needNumber <= 0) { - if (location.locDeep == 1)//如果是深库位 + item.executeStatus = "2"; + dbContext.Update(item); + dbContext.SaveChanges(); + continue; + } + + var bill = from a in wmsBaseLocations + from b in proStock + where a.locationCode == b.locationCode + select new { a, b }; + WmsBaseLocation? location = null; + WmsProductStock? stock = null; + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8); + BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 1); + foreach (var b in bill) + { + item.executeStatus = "1"; + location = b.a; + stock = b.b; + WcsTask wcsTask; + stock.updateDate = DateTime.Now; + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == stock.palletInfoCode); + if (mesBasePalletInfo != null) { - int? row = 0; - if (location.locRow % 2 == 1) + if (location.locDeep == 1)//如果是深库位 { - row = location.locRow + 1; - } - else - { - row = location.locRow - 1; - } - var lowLocationBill = bill.Where(t => t.a.locRow == row).Where(t => t.a.locColumn == location.locColumn).Where(t => t.a.warehouseId == location.warehouseId).FirstOrDefault(); - if (lowLocationBill != null) - { - location = lowLocationBill.a; - stock = lowLocationBill.b; - } - else - { - WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row) - .Where(t => t.locColumn == location.locColumn) - .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); - if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1") + int? row = 0; + if (location.locRow % 2 == 1) { - WmsProductStock? wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); - if (wmsProductStock != null) + row = location.locRow + 1; + } + else + { + row = location.locRow - 1; + } + var lowLocationBill = bill.Where(t => t.a.locRow == row).Where(t => t.a.locColumn == location.locColumn).Where(t => t.a.warehouseId == location.warehouseId).FirstOrDefault(); + if (lowLocationBill != null) + { + location = lowLocationBill.a; + stock = lowLocationBill.b; + } + else + { + WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row) + .Where(t => t.locColumn == location.locColumn) + .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); + if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1") { - WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.locDeep == 1) - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.locationStatus == "1") - .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); - toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.warehouseId != location.locationId) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .FirstOrDefault(); - if (toLocation != null) + WmsProductStock? wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); + if (wmsProductStock != null) { - if (toLocation.locDeep == 1) + WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.locDeep == 1) + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.locationStatus == "1") + .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); + toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.warehouseId != location.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode)) + .FirstOrDefault(); + if (toLocation != null) { - bool hasLocation = AllWmsBaseLocations - .Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1))) - .Where(t => t.locColumn == toLocation.locColumn) - .Any(); - if (!hasLocation) + if (toLocation.locDeep == 1) { - Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); - _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); - continue; + bool hasLocation = AllWmsBaseLocations + .Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1))) + .Where(t => t.locColumn == toLocation.locColumn) + .Any(); + if (!hasLocation) + { + Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + continue; + } } + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = 55, + containerNo = wmsBaseLocation.containerCode, + createBy = "WCS", + createTime = DateTime.Now.AddSeconds(-10), + taskStatus = 0, + materialId = item.productId, + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = toLocation.locationId, + endPointNo = toLocation.locationCode, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = 1 + }; + SystemData.LockOutLocation(toLocation, dbContext); + SystemData.LockOutLocation(wmsBaseLocation, dbContext); + toLocation.locationStatus = "4"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + wmsBaseLocation.updateBy = "WCS"; + wmsBaseLocation.updateTime = DateTime.Now; + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(wmsBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); } - var RemoveTask = new WcsTask() + else { - objid = StaticData.SnowId.NextId(), - orderId = item.productOutstockId, - taskType = 55, - containerNo = wmsBaseLocation.containerCode, - createBy = "WCS", - createTime = DateTime.Now.AddSeconds(-10), - taskStatus = 0, - materialId = item.productId, - currPointId = wmsBaseLocation.locationId, - currPointNo = wmsBaseLocation.locationCode, - nextPointId = agvEquip.objid, - nextPointNo = agvEquip.equipNo, - endPointId = toLocation.locationId, - endPointNo = toLocation.locationCode, - equipmentNo = agvEquip.equipNo, - useFlag = 1, - qty = 1 - }; - SystemData.LockOutLocation(toLocation, dbContext); - SystemData.LockOutLocation(wmsBaseLocation, dbContext); - toLocation.locationStatus = "4"; - toLocation.updateBy = "WCS"; - toLocation.updateTime = DateTime.Now; - wmsBaseLocation.updateBy = "WCS"; - wmsBaseLocation.updateTime = DateTime.Now; - wmsBaseLocation.locationStatus = "4"; - dbContext.Update(toLocation); - dbContext.Update(wmsBaseLocation); - dbContext.Add(RemoveTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); - dbContext.Add(wcsTaskLog); + continue; + } } else { continue; } } - else + else if (wmsBaseLocation != null && wmsBaseLocation.locationStatus != "1") { + Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库"); + _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); continue; } } - else if (wmsBaseLocation != null && wmsBaseLocation.locationStatus != "1") - { - Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库"); - _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); - continue; - } } + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = 50, + containerNo = stock.palletInfoCode, + createBy = "WCS", + createTime = DateTime.Now, + taskStatus = 0, + materialId = item.productId, + currPointId = location.locationId, + currPointNo = location.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = endEquip.objid, + endPointNo = endEquip.equipNo, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = 1 + }; + WmsProductOutstockDetail detail = new() + { + productId = item.productId, + productOutstockId = item.productOutstockId, + locationCode = location.locationCode, + executeStatus = "1", + beginTime = DateTime.Now, + warehouseId = item.warehouseId, + erpAmount = 0, + confirmAmount = 0, + outstockAmount = 1, + planAmount = 1, + productBatch = item.productBatch, + productOutstockDetailId = StaticData.SnowId.NextId(), + productBarcode = mesBasePalletInfo.materialBarcode, + }; + SystemData.LockOutLocation(location, dbContext); + location.locationStatus = "6"; + location.updateBy = "WCS"; + location.updateTime = DateTime.Now; + dbContext.Add(detail); + dbContext.Update(location); + dbContext.Add(wcsTask); + dbContext.Update(stock); + WcsTaskLog wcsTaskLog1 = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTaskLog1); + dbContext.SaveChanges(); + break; } - wcsTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = item.productOutstockId, - taskType = 50, - containerNo = stock.palletInfoCode, - createBy = "WCS", - createTime = DateTime.Now, - taskStatus = 0, - materialId = item.productId, - currPointId = location.locationId, - currPointNo = location.locationCode, - nextPointId = agvEquip.objid, - nextPointNo = agvEquip.equipNo, - endPointId = endEquip.objid, - endPointNo = endEquip.equipNo, - equipmentNo = agvEquip.equipNo, - useFlag = 1, - qty = 1 - }; - WmsProductOutstockDetail detail = new() - { - productId = item.productId, - productOutstockId = item.productOutstockId, - locationCode = location.locationCode, - executeStatus = "1", - beginTime = DateTime.Now, - warehouseId = item.warehouseId, - erpAmount = 0, - confirmAmount = 0, - outstockAmount = 1, - planAmount = 1, - productBatch = item.productBatch, - productOutstockDetailId = StaticData.SnowId.NextId(), - productBarcode = mesBasePalletInfo.materialBarcode, - }; - SystemData.LockOutLocation(location, dbContext); - location.locationStatus = "6"; - location.updateBy = "WCS"; - location.updateTime = DateTime.Now; - dbContext.Add(detail); - dbContext.Update(location); - dbContext.Add(wcsTask); - dbContext.Update(stock); - WcsTaskLog wcsTaskLog1 = CoreMapper.Map(wcsTask); - dbContext.Add(wcsTaskLog1); - dbContext.SaveChanges(); - break; } + if (item.beginTime == null) + { + item.beginTime = DateTime.Now; + } + dbContext.Update(item); + dbContext.SaveChanges(); } - if (item.beginTime == null) - { - item.beginTime = DateTime.Now; - } - dbContext.Update(item); - dbContext.SaveChanges(); } } } @@ -1667,7 +1680,7 @@ namespace Khd.Core.Wcs.Wcs try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - + //原材料出库记录 var rawOutStock = dbContext.WmsRawOutstock .Where(t => t.executeStatus == "0" || t.executeStatus == "1") @@ -1704,143 +1717,144 @@ namespace Khd.Core.Wcs.Wcs var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipNo == item.endStationCode); if (endEquip != null && endEquip.floorNo == 5) { - lock (SystemData.outStockLock) + + #region CTU出库,没用背负Agv的逻辑 + //if (endEquip.equipType == 8)//CTU出库 + //{ + // var wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First(); + // if (wcsOutstockLock.qty == 0 && wcsOutstockLock.boxStatus == 0) + // { + // var wmsRawStocks = rawStock + // .Where(t => t.materialId == item.materialId) + // .Where(t => t.warehouseId == item.warehouseId) + // .Select(t => t.locationCode) + // .ToList(); + + // var wmsBaseLocations = dbContext.WmsBaseLocation + // .Where(t => t.activeFlag == "1") + // .Where(t => t.delFlag == "0") + // .Where(t => t.locationScrapType == "1") + // + // + // .Where(t => t.ContainerStatus == "1") + // .Where(t => t.warehouseId == item.warehouseId) + // .Where(t => wmsRawStocks.Contains(t.locationCode)) + // .ToList(); + + // decimal? needNumber = item.outstockAmount - RealOutNumber; + + // var bill = from a in wmsBaseLocations + // from b in rawStock + // where a.locationCode == b.locationCode + // select new { a, b }; + // //如果第一列满足需求,则按第一列排序,否则按最后一列排序 + // if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.frozenAmount).Sum() > needNumber) + // { + // bill = bill.OrderBy(t => t.a.locColumn).ToList(); + // } + // else + // { + // bill = bill.OrderByDescending(t => t.a.locColumn).ToList(); + // } + // //做数量限制 + + // //bill = bill.Take(5 - dbContext.WcsCmd.Where(t => t.cmdStatus < 3 && t.nextPointId == 20).Count()); + // bill = bill.Take(6); + // BaseEquip ctuEquip = StaticData.BaseEquip.First(t => t.objid == 11); + // BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 20); + // foreach (var b in bill) + // { + // needNumber = item.outstockAmount - RealOutNumber; + // item.executeStatus = "1"; + // WmsBaseLocation location = b.a; + // WmsRawStock stock = b.b; + // WcsTask wcsTask; + // int qty = 0; + // if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出 + // { + // RealOutNumber += stock.totalAmount - stock.frozenAmount; + // qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); + // stock.updateDate = DateTime.Now; + // } + // else + // { + // RealOutNumber += needNumber; + // qty = Convert.ToInt32(needNumber); + // stock.updateDate = DateTime.Now; + // } + // wcsTask = new WcsTask() + // { + // objid = StaticData.SnowId.NextId(), + // orderId = item.rawOutstockId, + // taskType = 38, + // containerNo = location.containerCode, + // createBy = "WCS", + // createTime = DateTime.Now, + // taskStatus = -1, + // materialId = item.materialId, + // currPointId = location.locationId, + // currPointNo = location.locationCode, + // nextPointId = ctuEquip.objid, + // nextPointNo = ctuEquip.equipNo, + // endPointId = lineEquip.objid, + // endPointNo = lineEquip.equipNo, + // equipmentNo = ctuEquip.equipNo, + // ud1 = location.locColumn, + // useFlag = 1, + // qty = qty + // }; + // MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault(); + // if (mesBaseBarcodeInfo != null) + // { + // WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail() + // { + // rawOutstockDetailId = StaticData.SnowId.NextId(), + // rawOutstockId = item.rawOutstockId, + // materialId = item.materialId, + // createDate = DateTime.Now, + // createBy = "WCS", + // taskCode = wcsTask.objid.ToString(), + // executeStatus = "1", + // locationCode = location.locationCode, + // outstockAmount = qty, + // planAmount = item.outstockAmount, + // warehouseId = item.warehouseId, + // materialBarcode = mesBaseBarcodeInfo.barcodeInfo, + // instockBatch = mesBaseBarcodeInfo.batchCode, + // stackAmount = qty, + // outstockPerson = "WCS", + // outstockTime = DateTime.Now, + // outstockWay = "2", + // materialProductionDate = mesBaseBarcodeInfo.productionDate + // }; + // location.outstockFlag = "1"; + // location.locationStatus = "6"; + // location.updateBy = "WCS"; + // location.updateTime = DateTime.Now; + // wcsOutstockLock.boxStatus = 1; + // dbContext.Add(wmsProductOutstockDetail); + // dbContext.Update(location); + // dbContext.Add(wcsTask); + // dbContext.Update(stock); + // if (qty >= needNumber) + // { + // break; + // } + // } + // } + // if (item.beginTime == null) + // { + // item.beginTime = DateTime.Now; + // } + // dbContext.Update(wcsOutstockLock); + // dbContext.Update(item); + // dbContext.SaveChanges(); + // } + //}//CTU出库 + #endregion + if (endEquip.equipType == 10)//CTU出库到装配区 { - #region CTU出库,没用背负Agv的逻辑 - //if (endEquip.equipType == 8)//CTU出库 - //{ - // var wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First(); - // if (wcsOutstockLock.qty == 0 && wcsOutstockLock.boxStatus == 0) - // { - // var wmsRawStocks = rawStock - // .Where(t => t.materialId == item.materialId) - // .Where(t => t.warehouseId == item.warehouseId) - // .Select(t => t.locationCode) - // .ToList(); - - // var wmsBaseLocations = dbContext.WmsBaseLocation - // .Where(t => t.activeFlag == "1") - // .Where(t => t.delFlag == "0") - // .Where(t => t.locationScrapType == "1") - // - // - // .Where(t => t.ContainerStatus == "1") - // .Where(t => t.warehouseId == item.warehouseId) - // .Where(t => wmsRawStocks.Contains(t.locationCode)) - // .ToList(); - - // decimal? needNumber = item.outstockAmount - RealOutNumber; - - // var bill = from a in wmsBaseLocations - // from b in rawStock - // where a.locationCode == b.locationCode - // select new { a, b }; - // //如果第一列满足需求,则按第一列排序,否则按最后一列排序 - // if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.frozenAmount).Sum() > needNumber) - // { - // bill = bill.OrderBy(t => t.a.locColumn).ToList(); - // } - // else - // { - // bill = bill.OrderByDescending(t => t.a.locColumn).ToList(); - // } - // //做数量限制 - - // //bill = bill.Take(5 - dbContext.WcsCmd.Where(t => t.cmdStatus < 3 && t.nextPointId == 20).Count()); - // bill = bill.Take(6); - // BaseEquip ctuEquip = StaticData.BaseEquip.First(t => t.objid == 11); - // BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 20); - // foreach (var b in bill) - // { - // needNumber = item.outstockAmount - RealOutNumber; - // item.executeStatus = "1"; - // WmsBaseLocation location = b.a; - // WmsRawStock stock = b.b; - // WcsTask wcsTask; - // int qty = 0; - // if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出 - // { - // RealOutNumber += stock.totalAmount - stock.frozenAmount; - // qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); - // stock.updateDate = DateTime.Now; - // } - // else - // { - // RealOutNumber += needNumber; - // qty = Convert.ToInt32(needNumber); - // stock.updateDate = DateTime.Now; - // } - // wcsTask = new WcsTask() - // { - // objid = StaticData.SnowId.NextId(), - // orderId = item.rawOutstockId, - // taskType = 38, - // containerNo = location.containerCode, - // createBy = "WCS", - // createTime = DateTime.Now, - // taskStatus = -1, - // materialId = item.materialId, - // currPointId = location.locationId, - // currPointNo = location.locationCode, - // nextPointId = ctuEquip.objid, - // nextPointNo = ctuEquip.equipNo, - // endPointId = lineEquip.objid, - // endPointNo = lineEquip.equipNo, - // equipmentNo = ctuEquip.equipNo, - // ud1 = location.locColumn, - // useFlag = 1, - // qty = qty - // }; - // MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault(); - // if (mesBaseBarcodeInfo != null) - // { - // WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail() - // { - // rawOutstockDetailId = StaticData.SnowId.NextId(), - // rawOutstockId = item.rawOutstockId, - // materialId = item.materialId, - // createDate = DateTime.Now, - // createBy = "WCS", - // taskCode = wcsTask.objid.ToString(), - // executeStatus = "1", - // locationCode = location.locationCode, - // outstockAmount = qty, - // planAmount = item.outstockAmount, - // warehouseId = item.warehouseId, - // materialBarcode = mesBaseBarcodeInfo.barcodeInfo, - // instockBatch = mesBaseBarcodeInfo.batchCode, - // stackAmount = qty, - // outstockPerson = "WCS", - // outstockTime = DateTime.Now, - // outstockWay = "2", - // materialProductionDate = mesBaseBarcodeInfo.productionDate - // }; - // location.outstockFlag = "1"; - // location.locationStatus = "6"; - // location.updateBy = "WCS"; - // location.updateTime = DateTime.Now; - // wcsOutstockLock.boxStatus = 1; - // dbContext.Add(wmsProductOutstockDetail); - // dbContext.Update(location); - // dbContext.Add(wcsTask); - // dbContext.Update(stock); - // if (qty >= needNumber) - // { - // break; - // } - // } - // } - // if (item.beginTime == null) - // { - // item.beginTime = DateTime.Now; - // } - // dbContext.Update(wcsOutstockLock); - // dbContext.Update(item); - // dbContext.SaveChanges(); - // } - //}//CTU出库 - #endregion - if (endEquip.equipType == 10)//CTU出库到装配区 + lock (SystemData.outStockLock) { //原材料库存 var rawStock = dbContext.WmsRawStock @@ -2067,47 +2081,249 @@ namespace Khd.Core.Wcs.Wcs } } } - else if (endEquip.equipType == 12)//原材料到柜体验收区,背板安装 + } + else + { + lock (SystemData.FiveTaskLock) { - var rawStock = dbContext.WmsRawStock - .Where(t => t.activeFlag == "1").ToList(); - bool hasTask = dbContext.WcsTask.Where(t => t.currPointId == endEquip.objid || t.endPointId == endEquip.objid).Any(); - if (!hasTask) + if (endEquip.equipType == 12)//原材料到柜体验收区,背板安装 { - if (endEquip.emptyCount == 0) + var rawStock = dbContext.WmsRawStock + .Where(t => t.activeFlag == "1").ToList(); + bool hasTask = dbContext.WcsTask.Where(t => t.currPointId == endEquip.objid || t.endPointId == endEquip.objid).Any(); + if (!hasTask) { - var wmsRawStocks = rawStock - .Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId) - .WhereIf(endEquip.equipType == 12, t => t.completeFlag == "1") - .Where(t => t.saleOrderId == (item.saleOrderId == null ? 0 : item.saleOrderId)) - .Where(t => t.totalAmount > t.frozenAmount) - .Select(t => t.palletInfoCode) - .ToList(); - List AllWmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseId == item.warehouseId).ToList(); - var wmsBaseLocations = AllWmsBaseLocations - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.locationStatus == "1") - .Where(t => t.warehouseId == item.warehouseId) - .OrderByDescending(t => t.locDeep) - .Where(t => wmsRawStocks.Contains(t.containerCode)) - .ToList(); - - decimal? needNumber = item.outstockAmount - item.realOutstockAmount; - - var bill = from a in wmsBaseLocations - from b in rawStock - where a.locationCode == b.locationCode - select new { a, b }; - - BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); - BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode); - foreach (var b in bill) + if (endEquip.emptyCount == 0) { - item.executeStatus = "1"; - WmsBaseLocation location = b.a; - WmsRawStock stock = b.b; + var wmsRawStocks = rawStock + .Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId) + .WhereIf(endEquip.equipType == 12, t => t.completeFlag == "1") + .Where(t => t.saleOrderId == (item.saleOrderId == null ? 0 : item.saleOrderId)) + .Where(t => t.totalAmount > t.frozenAmount) + .Select(t => t.palletInfoCode) + .ToList(); + List AllWmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseId == item.warehouseId).ToList(); + var wmsBaseLocations = AllWmsBaseLocations + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.locationStatus == "1") + .Where(t => t.warehouseId == item.warehouseId) + .OrderByDescending(t => t.locDeep) + .Where(t => wmsRawStocks.Contains(t.containerCode)) + .ToList(); + + decimal? needNumber = item.outstockAmount - item.realOutstockAmount; + + var bill = from a in wmsBaseLocations + from b in rawStock + where a.locationCode == b.locationCode + select new { a, b }; + + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); + BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode); + foreach (var b in bill) + { + item.executeStatus = "1"; + WmsBaseLocation location = b.a; + WmsRawStock stock = b.b; + WcsTask wcsTask; + int qty = 0; + if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出 + { + qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); + stock.updateDate = DateTime.Now; + } + else + { + qty = Convert.ToInt32(needNumber); + stock.updateDate = DateTime.Now; + } + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault(); + if (mesBaseBarcodeInfo != null) + { + if (location.locDeep == 1) + { + int? row = 0; + if (location.locRow % 2 == 1)//五楼原材料与其他的深浅库位相反 + { + row = location.locRow + 1; + } + else + { + row = location.locRow - 1;//5 + } + var lowLocationBill = bill.Where(t => t.a.locRow == row).Where(t => t.a.locColumn == location.locColumn).Where(t => t.a.warehouseId == location.warehouseId).FirstOrDefault(); + if (lowLocationBill != null) + { + location = lowLocationBill.a; + stock = lowLocationBill.b; + } + else + { + WmsBaseLocation? wmsBaseLocation = AllWmsBaseLocations + .Where(t => t.locRow == row) + .Where(t => t.locColumn == location.locColumn) + .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); + if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1") + { + WmsRawStock? wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); + if (wmsRawStock != null) + { + WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.locDeep == 1) + .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); + toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.warehouseId != location.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode)) + .FirstOrDefault(); + if (toLocation != null) + { + if (toLocation.locDeep == 1) + { + bool hasLocation = AllWmsBaseLocations + .Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1))) + .Where(t => t.locColumn == toLocation.locColumn) + .Any(); + if (!hasLocation) + { + Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + continue; + } + } + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.rawOutstockId, + taskType = 66, + containerNo = wmsRawStock.palletInfoCode, + createBy = "WCS", + createTime = DateTime.Now.AddSeconds(-10), + taskStatus = 0, + materialId = item.materialId, + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = toLocation.locationId, + endPointNo = toLocation.locationCode, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = qty + }; + toLocation.locationStatus = "4"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + wmsBaseLocation.updateBy = "WCS"; + wmsBaseLocation.updateTime = DateTime.Now; + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(wmsBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); + } + else + { + continue; + } + } + else + { + continue; + } + } + else if (wmsBaseLocation != null && wmsBaseLocation.locationStatus != "1") + { + Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库"); + _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); + continue; + } + } + } + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.rawOutstockId, + taskType = endEquip.equipType == 12 ? 46 : 33,//如果是12那么就是原材料到柜体验收区,如果是13那么就是原材料到背板安装区 + containerNo = location.containerCode, + createBy = "WCS", + createTime = DateTime.Now, + taskStatus = 0, + materialId = item.materialId, + currPointId = location.locationId, + currPointNo = location.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = lineEquip.objid, + endPointNo = lineEquip.equipNo, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = qty + }; + //location是出库的库位,mesBaseBarcodeInfo是条码信息表数据,item是出库申请单 + WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail() + { + rawOutstockDetailId = StaticData.SnowId.NextId(), + rawOutstockId = item.rawOutstockId, + materialId = item.materialId, + createDate = DateTime.Now, + createBy = "WCS", + taskCode = wcsTask.objid.ToString(), + executeStatus = "1", + locationCode = location.locationCode, + outstockAmount = qty, + planAmount = item.outstockAmount, + warehouseId = item.warehouseId, + materialBarcode = mesBaseBarcodeInfo.barcodeInfo, + instockBatch = mesBaseBarcodeInfo.batchCode, + stackAmount = qty, + outstockPerson = "WCS", + outstockTime = DateTime.Now, + outstockWay = "2", + materialProductionDate = mesBaseBarcodeInfo.productionDate + }; + if (item.beginTime == null) + { + item.beginTime = DateTime.Now; + } + SystemData.LockOutLocation(location, dbContext); + dbContext.Add(wmsProductOutstockDetail); + location.locationStatus = "6"; + location.updateBy = "WCS"; + location.updateTime = DateTime.Now; + endEquip.emptyCount = 1; + dbContext.Update(endEquip); + dbContext.Update(location); + dbContext.Add(wcsTask); + dbContext.Update(item); + dbContext.Update(stock); + WcsTaskLog wcsTaskLog1 = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTaskLog1); + dbContext.SaveChanges(); + } + + break; + } + } + } + } + else if (endEquip.equipType == 13) + { + var stock = dbContext.WmsRawStock.Where(t => t.instockBatch == item.materialBatch).FirstOrDefault(); + if (stock != null) + { + var location = dbContext.WmsBaseLocation + .Where(t => t.locationStatus == "1") + .Where(t => t.locationCode == stock.locationCode).FirstOrDefault(); + if (location != null) + { + List AllWmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.warehouseId == item.warehouseId).ToList(); + decimal? needNumber = item.outstockAmount - item.realOutstockAmount; + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); + BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode); WcsTask wcsTask; int qty = 0; if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出 @@ -2134,94 +2350,92 @@ namespace Khd.Core.Wcs.Wcs { row = location.locRow - 1;//5 } - var lowLocationBill = bill.Where(t => t.a.locRow == row).Where(t => t.a.locColumn == location.locColumn).Where(t => t.a.warehouseId == location.warehouseId).FirstOrDefault(); - if (lowLocationBill != null) + + WmsBaseLocation? wmsBaseLocation = AllWmsBaseLocations + .Where(t => t.locRow == row) + .Where(t => t.locColumn == location.locColumn) + .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); + if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1") { - location = lowLocationBill.a; - stock = lowLocationBill.b; - } - else - { - WmsBaseLocation? wmsBaseLocation = AllWmsBaseLocations - .Where(t => t.locRow == row) - .Where(t => t.locColumn == location.locColumn) - .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); - if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1") + WmsRawStock? wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); + if (wmsRawStock != null) { - WmsRawStock? wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); - if (wmsRawStock != null) + WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.locDeep == 1) + .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); + toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.warehouseId != location.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode)) + .FirstOrDefault(); + if (toLocation != null) { - WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.locDeep == 1) - .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); - toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.warehouseId != location.locationId) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .FirstOrDefault(); - if (toLocation != null) + if (toLocation.locDeep == 1) { - if (toLocation.locDeep == 1) + bool hasLocation = AllWmsBaseLocations + .Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1))) + .Where(t => t.locColumn == toLocation.locColumn) + .Any(); + if (!hasLocation) { - bool hasLocation = AllWmsBaseLocations - .Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1))) - .Where(t => t.locColumn == toLocation.locColumn) - .Any(); - if (!hasLocation) - { - Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); - _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); - continue; - } + Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + continue; } - var RemoveTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = item.rawOutstockId, - taskType = 66, - containerNo = wmsRawStock.palletInfoCode, - createBy = "WCS", - createTime = DateTime.Now.AddSeconds(-10), - taskStatus = 0, - materialId = item.materialId, - currPointId = wmsBaseLocation.locationId, - currPointNo = wmsBaseLocation.locationCode, - nextPointId = agvEquip.objid, - nextPointNo = agvEquip.equipNo, - endPointId = toLocation.locationId, - endPointNo = toLocation.locationCode, - equipmentNo = agvEquip.equipNo, - useFlag = 1, - qty = qty - }; - toLocation.locationStatus = "4"; - toLocation.updateBy = "WCS"; - toLocation.updateTime = DateTime.Now; - wmsBaseLocation.updateBy = "WCS"; - wmsBaseLocation.updateTime = DateTime.Now; - wmsBaseLocation.locationStatus = "4"; - dbContext.Update(toLocation); - dbContext.Update(wmsBaseLocation); - dbContext.Add(RemoveTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); - dbContext.Add(wcsTaskLog); } - else + var RemoveTask = new WcsTask() { - continue; - } + objid = StaticData.SnowId.NextId(), + orderId = item.rawOutstockId, + taskType = 66, + containerNo = wmsRawStock.palletInfoCode, + createBy = "WCS", + createTime = DateTime.Now.AddSeconds(-10), + taskStatus = 0, + materialId = item.materialId, + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = toLocation.locationId, + endPointNo = toLocation.locationCode, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = qty + }; + toLocation.locationStatus = "4"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + wmsBaseLocation.updateBy = "WCS"; + wmsBaseLocation.updateTime = DateTime.Now; + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(wmsBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); } else { continue; } } - else if (wmsBaseLocation != null && wmsBaseLocation.locationStatus != "1") + else { - Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库"); - _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); continue; } } + else if (wmsBaseLocation != null && wmsBaseLocation.locationStatus != "1") + { + Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库"); + _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); + continue; + } + else + { + Console.WriteLine(DateTime.Now + $":{location.locationCode}浅库位状态异常,无法移库"); + _logger.Info($"{location.locationCode}浅库位状态异常,无法移库"); + continue; + } } wcsTask = new WcsTask() { @@ -2284,200 +2498,6 @@ namespace Khd.Core.Wcs.Wcs dbContext.Add(wcsTaskLog1); dbContext.SaveChanges(); } - - break; - } - } - } - } - else if (endEquip.equipType == 13) - { - var stock = dbContext.WmsRawStock.Where(t => t.instockBatch == item.materialBatch).FirstOrDefault(); - if (stock != null) - { - var location = dbContext.WmsBaseLocation - .Where(t => t.locationStatus == "1") - .Where(t => t.locationCode == stock.locationCode).FirstOrDefault(); - if (location != null) - { - List AllWmsBaseLocations = dbContext.WmsBaseLocation - .Where(t => t.warehouseId == item.warehouseId).ToList(); - decimal? needNumber = item.outstockAmount - item.realOutstockAmount; - BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); - BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode); - WcsTask wcsTask; - int qty = 0; - if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出 - { - qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); - stock.updateDate = DateTime.Now; - } - else - { - qty = Convert.ToInt32(needNumber); - stock.updateDate = DateTime.Now; - } - MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault(); - if (mesBaseBarcodeInfo != null) - { - if (location.locDeep == 1) - { - int? row = 0; - if (location.locRow % 2 == 1)//五楼原材料与其他的深浅库位相反 - { - row = location.locRow + 1; - } - else - { - row = location.locRow - 1;//5 - } - - WmsBaseLocation? wmsBaseLocation = AllWmsBaseLocations - .Where(t => t.locRow == row) - .Where(t => t.locColumn == location.locColumn) - .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); - if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1") - { - WmsRawStock? wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); - if (wmsRawStock != null) - { - WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.locDeep == 1) - .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); - toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.warehouseId != location.locationId) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .FirstOrDefault(); - if (toLocation != null) - { - if (toLocation.locDeep == 1) - { - bool hasLocation = AllWmsBaseLocations - .Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1))) - .Where(t => t.locColumn == toLocation.locColumn) - .Any(); - if (!hasLocation) - { - Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); - _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); - continue; - } - } - var RemoveTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = item.rawOutstockId, - taskType = 66, - containerNo = wmsRawStock.palletInfoCode, - createBy = "WCS", - createTime = DateTime.Now.AddSeconds(-10), - taskStatus = 0, - materialId = item.materialId, - currPointId = wmsBaseLocation.locationId, - currPointNo = wmsBaseLocation.locationCode, - nextPointId = agvEquip.objid, - nextPointNo = agvEquip.equipNo, - endPointId = toLocation.locationId, - endPointNo = toLocation.locationCode, - equipmentNo = agvEquip.equipNo, - useFlag = 1, - qty = qty - }; - toLocation.locationStatus = "4"; - toLocation.updateBy = "WCS"; - toLocation.updateTime = DateTime.Now; - wmsBaseLocation.updateBy = "WCS"; - wmsBaseLocation.updateTime = DateTime.Now; - wmsBaseLocation.locationStatus = "4"; - dbContext.Update(toLocation); - dbContext.Update(wmsBaseLocation); - dbContext.Add(RemoveTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); - dbContext.Add(wcsTaskLog); - } - else - { - continue; - } - } - else - { - continue; - } - } - else if (wmsBaseLocation != null && wmsBaseLocation.locationStatus != "1") - { - Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库"); - _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); - continue; - } - else - { - Console.WriteLine(DateTime.Now + $":{location.locationCode}浅库位状态异常,无法移库"); - _logger.Info($"{location.locationCode}浅库位状态异常,无法移库"); - continue; - } - } - wcsTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = item.rawOutstockId, - taskType = endEquip.equipType == 12 ? 46 : 33,//如果是12那么就是原材料到柜体验收区,如果是13那么就是原材料到背板安装区 - containerNo = location.containerCode, - createBy = "WCS", - createTime = DateTime.Now, - taskStatus = 0, - materialId = item.materialId, - currPointId = location.locationId, - currPointNo = location.locationCode, - nextPointId = agvEquip.objid, - nextPointNo = agvEquip.equipNo, - endPointId = lineEquip.objid, - endPointNo = lineEquip.equipNo, - equipmentNo = agvEquip.equipNo, - useFlag = 1, - qty = qty - }; - //location是出库的库位,mesBaseBarcodeInfo是条码信息表数据,item是出库申请单 - WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail() - { - rawOutstockDetailId = StaticData.SnowId.NextId(), - rawOutstockId = item.rawOutstockId, - materialId = item.materialId, - createDate = DateTime.Now, - createBy = "WCS", - taskCode = wcsTask.objid.ToString(), - executeStatus = "1", - locationCode = location.locationCode, - outstockAmount = qty, - planAmount = item.outstockAmount, - warehouseId = item.warehouseId, - materialBarcode = mesBaseBarcodeInfo.barcodeInfo, - instockBatch = mesBaseBarcodeInfo.batchCode, - stackAmount = qty, - outstockPerson = "WCS", - outstockTime = DateTime.Now, - outstockWay = "2", - materialProductionDate = mesBaseBarcodeInfo.productionDate - }; - if (item.beginTime == null) - { - item.beginTime = DateTime.Now; - } - SystemData.LockOutLocation(location, dbContext); - dbContext.Add(wmsProductOutstockDetail); - location.locationStatus = "6"; - location.updateBy = "WCS"; - location.updateTime = DateTime.Now; - endEquip.emptyCount = 1; - dbContext.Update(endEquip); - dbContext.Update(location); - dbContext.Add(wcsTask); - dbContext.Update(item); - dbContext.Update(stock); - WcsTaskLog wcsTaskLog1 = CoreMapper.Map(wcsTask); - dbContext.Add(wcsTaskLog1); - dbContext.SaveChanges(); } } } @@ -2490,7 +2510,7 @@ namespace Khd.Core.Wcs.Wcs { _logger.Error(ex.Message + "\n" + ex.StackTrace); } - Thread.Sleep(1000); + Thread.Sleep(3000); } diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs index f1aff94..376e19d 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs @@ -102,117 +102,120 @@ namespace Khd.Core.Wcs.Wcs { if (wcsTask.taskStatus == 5)//入库,提升机任务是完成状态 { - var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo) + lock (SystemData.FiveTaskLock) + { + var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo) .Where(t => t.activeFlag == "1") .Where(t => t.delFlag == "0") .Where(t => t.locationScrapType == "1") .Where(t => t.warehouseId == 511) .Where(t => t.locationStatus == "1") .ToList(); - if (wmsBaseLocations.Count > 0) - { - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == rfid).FirstOrDefault(); - if (mesBasePalletInfo != null) + if (wmsBaseLocations.Count > 0) { - MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); - if (mesBaseBarcodeInfo != null) + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == rfid).FirstOrDefault(); + if (mesBasePalletInfo != null) { - List containerCodes = wmsBaseLocations - .Where(t => t.locDeep == 1) - .Select(t => t.containerCode).ToList();//深库位的托盘 - containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); - List mesBasePalletInfos = dbContext.MesBaseBarcodeInfo - .Where(t => t.materialId == wcsTask.materialId) - .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId) - .Where(t => t.palletInfoCode != null) - .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 - mesBasePalletInfos.RemoveAll(t => t.palletInfoCode == null); - var bill = from a in mesBasePalletInfos - join b in wmsBaseLocations - .Where(t => t.locDeep == 1 && mesBaseBarcodeInfo.completeFlag == "0" ? t.returnFlag == "1" : t.returnFlag == "0") on a.palletInfoCode equals b.containerCode - select new { b };//等于当前任务的物料的托盘的库位信息 - var outBill = from a in bill - from b in wmsBaseLocations - where b.locDeep == 2 - && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) - && a.b.locColumn == b.locColumn - && b.locationStatus == "1" - && string.IsNullOrEmpty(b.containerCode) - select new { a, b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 - if(mesBaseBarcodeInfo.completeFlag == "0") + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); + if (mesBaseBarcodeInfo != null) { - outBill = outBill.OrderByDescending(t => t.b.locColumn).ToList(); - wmsBaseLocations= wmsBaseLocations.OrderByDescending(t => t.locColumn).ToList(); - } - else - { - outBill = outBill.OrderBy(t => t.b.locColumn).ToList(); - wmsBaseLocations = wmsBaseLocations.OrderBy(t => t.locColumn).ToList(); - } - WmsBaseLocation? wmsBaseLocation = null; - wmsBaseLocation ??= outBill.Where(t => !canNotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 - //深浅库位问题?库位入库优先级等 + List containerCodes = wmsBaseLocations + .Where(t => t.locDeep == 1) + .Select(t => t.containerCode).ToList();//深库位的托盘 + containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); + List wmsRawStocks = dbContext.WmsRawStock + .Where(t => t.materialId == mesBaseBarcodeInfo.materialId) + .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId) + .Where(t => t.palletInfoCode != null) + .Where(t => t.warehouseId == 511) + .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList(); - var AgvEquip = StaticData.BaseEquip.First(t => t.objid == 28);//5楼叉车 - if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) - { - if (wmsBaseLocation.locDeep == 1) + var bill = from a in wmsRawStocks + join b in wmsBaseLocations + .Where(t => t.locDeep == 1 && mesBaseBarcodeInfo.completeFlag == "0" ? t.returnFlag == "1" : t.returnFlag == "0") on a.palletInfoCode equals b.containerCode + select new { b };//等于当前任务的物料的托盘的库位信息 + var outBill = from a in bill + from b in wmsBaseLocations + where b.locDeep == 2 + && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) + && a.b.locColumn == b.locColumn + && b.locationStatus == "1" + && string.IsNullOrEmpty(b.containerCode) + select new { a, b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + if (mesBaseBarcodeInfo.completeFlag == "0") { - bool hasLocation = wmsBaseLocations - .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) - .Where(t => t.locColumn == wmsBaseLocation.locColumn) - .Where(t => !string.IsNullOrEmpty(t.containerCode) || t.locationStatus != "1") - .Any(); - if (hasLocation) - { - canNotIn.Add(wmsBaseLocation.locationCode); - Console.WriteLine(DateTime.Now + $":目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); - _logger.Info($"目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); - continue; - } - } - WcsTask newTask = CoreMapper.Map(wcsTask); - newTask.taskStatus = 0;//创建状态 - newTask.updateTime = DateTime.Now; - newTask.currPointId = baseEquip.objid; - newTask.currPointNo = baseEquip.equipNo; - newTask.nextPointId = AgvEquip.objid; - newTask.nextPointNo = AgvEquip.equipNo; - newTask.endPointId = wmsBaseLocation.locationId; - newTask.endPointNo = wmsBaseLocation.locationCode; - newTask.objid = StaticData.SnowId.NextId(); - newTask.createTime = DateTime.Now; - newTask.taskType = 47; - if (newTask.fromFloorNo != 1)//如果不是一楼来的,需要通过接口确认入库(质检通过后,点击继续入库) - { - newTask.useFlag = 0; + outBill = outBill.OrderByDescending(t => t.b.locColumn).ToList(); + wmsBaseLocations = wmsBaseLocations.OrderByDescending(t => t.locColumn).ToList(); } else { - newTask.useFlag = 1; + outBill = outBill.OrderBy(t => t.b.locColumn).ToList(); + wmsBaseLocations = wmsBaseLocations.OrderBy(t => t.locColumn).ToList(); } - wmsBaseLocation.locationStatus = "2"; - dbContext.Update(wmsBaseLocation); - dbContext.Remove(wcsTask); - SystemData.LockOutLocation(wmsBaseLocation, dbContext); + WmsBaseLocation? wmsBaseLocation = null; + wmsBaseLocation ??= outBill.Where(t => !canNotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 + //深浅库位问题?库位入库优先级等 - dbContext.Add(newTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); - canNotIn.Clear(); - } - else - { - Console.WriteLine(DateTime.Now + ":五楼接驳位调度入库任务,未找到库位"); - _logger.Info("五楼接驳位调度入库任务,未找到库位"); + var AgvEquip = StaticData.BaseEquip.First(t => t.objid == 28);//5楼叉车 + if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) + { + if (wmsBaseLocation.locDeep == 1) + { + bool hasLocation = wmsBaseLocations + .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) + .Where(t => t.locColumn == wmsBaseLocation.locColumn) + .Where(t => !string.IsNullOrEmpty(t.containerCode) || t.locationStatus != "1") + .Any(); + if (hasLocation) + { + canNotIn.Add(wmsBaseLocation.locationCode); + Console.WriteLine(DateTime.Now + $":目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); + _logger.Info($"目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); + continue; + } + } + WcsTask newTask = CoreMapper.Map(wcsTask); + newTask.taskStatus = 0;//创建状态 + newTask.updateTime = DateTime.Now; + newTask.currPointId = baseEquip.objid; + newTask.currPointNo = baseEquip.equipNo; + newTask.nextPointId = AgvEquip.objid; + newTask.nextPointNo = AgvEquip.equipNo; + newTask.endPointId = wmsBaseLocation.locationId; + newTask.endPointNo = wmsBaseLocation.locationCode; + newTask.objid = StaticData.SnowId.NextId(); + newTask.createTime = DateTime.Now; + newTask.taskType = 47; + if (newTask.fromFloorNo != 1)//如果不是一楼来的,需要通过接口确认入库(质检通过后,点击继续入库) + { + newTask.useFlag = 0; + } + else + { + newTask.useFlag = 1; + } + wmsBaseLocation.locationStatus = "2"; + dbContext.Update(wmsBaseLocation); + dbContext.Remove(wcsTask); + SystemData.LockOutLocation(wmsBaseLocation, dbContext); + + dbContext.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + canNotIn.Clear(); + } + else + { + Console.WriteLine(DateTime.Now + ":五楼接驳位调度入库任务,未找到库位"); + _logger.Info("五楼接驳位调度入库任务,未找到库位"); + } } } } } - } else if (wcsTask.taskStatus == 6) //出库任务,小车任务是完成状态 { diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index 3268708..70d2118 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -228,102 +228,105 @@ namespace Khd.Core.Wcs.Wcs } if (Convert.ToInt32(agvGetValue) == 1 && !string.IsNullOrEmpty(rfidValue))//小包出口成品入口 { - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == rfidValue); - if (mesBasePalletInfo != null) + lock (SystemData.SecondTaskLock) { - MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); - if (mesBaseBarcodeInfo != null) + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == rfidValue); + if (mesBasePalletInfo != null) { - var wmsBaseLocations = dbContext.WmsBaseLocation - .Where(t => t.warehouseFloor == FloorNo) - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.locationStatus == "1") - .Where(t => t.warehouseId == 231) - .ToList();//所有可用库位 - var wmsProductStocks = dbContext.WmsProductStock - .Where(t => t.warehouseId == 231) - .ToList();//仓库的库存 - WmsBaseLocation? wmsBaseLocation = null; - if (wmsBaseLocations.Count > 0) + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); + if (mesBaseBarcodeInfo != null) { - List containerCodes = wmsBaseLocations - .Where(t => t.locDeep == 1) - .Select(t => t.containerCode).ToList();//深库位的有托盘 - containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); - List mesBasePalletInfos = dbContext.MesBaseBarcodeInfo - .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId)//销售订单 - .Where(t => t.materialId == mesBasePalletInfo.materialId)//物料Id - .Where(t => t.palletInfoCode != null) - .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 - mesBasePalletInfos.RemoveAll(t=>t.palletInfoCode==null); - var bill = from a in mesBasePalletInfos - join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode - select new { b };//等于当前任务的物料的托盘的库位信息 + var wmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.warehouseFloor == FloorNo) + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.locationStatus == "1") + .Where(t => t.warehouseId == 231) + .ToList();//所有可用库位 + var wmsProductStocks = dbContext.WmsProductStock + .Where(t => t.warehouseId == 231) + .ToList();//仓库的库存 + WmsBaseLocation? wmsBaseLocation = null; + if (wmsBaseLocations.Count > 0) + { + List containerCodes = wmsBaseLocations + .Where(t => t.locDeep == 1) + .Select(t => t.containerCode).ToList();//深库位的有托盘 + containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); - var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位 - from b in wmsBaseLocations//所有库位 - where b.locDeep == 2//浅库位 - && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) - //如果是4则找3,如果是1则找2 - && a.b.locColumn == b.locColumn//列数相同 - && string.IsNullOrEmpty(b.containerCode) - select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 - - wmsBaseLocation ??= outBill.Where(t => !canNotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 - if (wmsBaseLocation != null)//如果找到库位,生成入库任务 - { - if (wmsBaseLocation.locDeep == 1) + List productStocks = wmsProductStocks.Where(t => t.productId == mesBaseBarcodeInfo.materialId) + .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId) + .Where(t => t.palletInfoCode != null) + .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList(); + + var bill = from a in productStocks + join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode + select new { b };//等于当前任务的物料的托盘的库位信息 + + var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位 + from b in wmsBaseLocations//所有库位 + where b.locDeep == 2//浅库位 + && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) + //如果是4则找3,如果是1则找2 + && a.b.locColumn == b.locColumn//列数相同 + && string.IsNullOrEmpty(b.containerCode) + select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + + wmsBaseLocation ??= outBill.Where(t => !canNotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 + if (wmsBaseLocation != null)//如果找到库位,生成入库任务 { - var hasLocation = wmsBaseLocations - .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) - .Where(t => t.locColumn == wmsBaseLocation.locColumn) - .Where(t => !string.IsNullOrEmpty(t.containerCode) || t.locationStatus != "1") - .Any(); - if (hasLocation) + if (wmsBaseLocation.locDeep == 1) { - canNotIn.Add(wmsBaseLocation.locationCode); - Console.WriteLine(DateTime.Now + $":目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); - _logger.Info($"目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); - continue; + var hasLocation = wmsBaseLocations + .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) + .Where(t => t.locColumn == wmsBaseLocation.locColumn) + .Where(t => !string.IsNullOrEmpty(t.containerCode) || t.locationStatus != "1") + .Any(); + if (hasLocation) + { + canNotIn.Add(wmsBaseLocation.locationCode); + Console.WriteLine(DateTime.Now + $":目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); + _logger.Info($"目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); + continue; + } } + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 37); + var wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + currPointId = startEquip.objid, + currPointNo = startEquip.equipNo, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = wmsBaseLocation.locationId, + endPointNo = wmsBaseLocation.locationCode, + taskStatus = 0, + useFlag = 1, + containerNo = rfidValue, + createBy = "WCS", + createTime = DateTime.Now, + floorNo = 2, + fromFloorNo = 2, + isEmpty = "0", + taskType = 49, + qty = 1, + }; + SystemData.LockOutLocation(wmsBaseLocation, dbContext); + dbContext.Add(wcsTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + canNotIn.Clear(); + Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); + _logger.Info("二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); } - BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 37); - var wcsTask = new WcsTask() + else { - objid = StaticData.SnowId.NextId(), - currPointId = startEquip.objid, - currPointNo = startEquip.equipNo, - nextPointId = agvEquip.objid, - nextPointNo = agvEquip.equipNo, - endPointId = wmsBaseLocation.locationId, - endPointNo = wmsBaseLocation.locationCode, - taskStatus = 0, - useFlag = 1, - containerNo = rfidValue, - createBy = "WCS", - createTime = DateTime.Now, - floorNo = 2, - fromFloorNo = 2, - isEmpty = "0", - taskType = 49, - qty = 1, - }; - SystemData.LockOutLocation(wmsBaseLocation, dbContext); - dbContext.Add(wcsTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); - canNotIn.Clear(); - Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); - _logger.Info("二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); - } - else - { - //报警 + //报警 + } } } } diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs index 9d182a9..14bbe4f 100644 --- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs +++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs @@ -198,7 +198,7 @@ namespace Khd.Core.Wcs.Wcs { try { - StaticData.PlcDic[0].Read(HeartBeat30.plcpointAddress); + StaticData.PlcDic[2].Read(HeartBeat30.plcpointAddress); } catch { diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs index 2a06549..61a892e 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs @@ -48,7 +48,7 @@ namespace Khd.Core.Wcs.Wcs List ITypes = new List { 1, 3, 5, 7 }; using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); - List canNotIn= new List(); + List canNotIn = new List(); while (true) { try @@ -68,95 +68,97 @@ namespace Khd.Core.Wcs.Wcs { if (wcsTask.taskStatus == 5)//提升机任务是完成状态 { - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == rfid).FirstOrDefault(); - if (mesBasePalletInfo != null) + lock (SystemData.ThirdTaskLock) { - MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); - if (mesBaseBarcodeInfo != null) + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == rfid).FirstOrDefault(); + if (mesBasePalletInfo != null) { - var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo) - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.locationStatus == "1") - .OrderByDescending(t => t.locRow) - .ThenByDescending(t => t.locColumn) - .ToList(); - - List containerCodes = wmsBaseLocations.Where(t => t.locDeep == 1).Select(t => t.containerCode).ToList();//深库位的托盘 - containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); - List mesBasePalletInfos = dbContext.MesBaseBarcodeInfo - .Where(t => t.materialId == wcsTask.materialId) - .Where(t=>t.saleOrderId== mesBaseBarcodeInfo.saleOrderId) - .Where(t=>t.palletInfoCode!=null) - .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 - mesBasePalletInfos.RemoveAll(t => t.palletInfoCode == null); - var bill = from a in mesBasePalletInfos - join b in wmsBaseLocations.Where(t => t.locDeep == 1 && !string.IsNullOrEmpty(t.containerCode)) on a.palletInfoCode equals b.containerCode - select new { b };//等于当前任务的物料的托盘的库位信息 - - - var outBill = from b in wmsBaseLocations - from a in bill - where b.locDeep == 2 - && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) - && a.b.locColumn == b.locColumn - && b.locationStatus == "1" - && string.IsNullOrEmpty(b.containerCode) - select new { b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 - WmsBaseLocation? wmsBaseLocation = outBill.Where(t=>!canNotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 - - if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); + if (mesBaseBarcodeInfo != null) { - if (wmsBaseLocation.locDeep == 1) + var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo) + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.locationStatus == "1") + .OrderByDescending(t => t.locRow) + .ThenByDescending(t => t.locColumn) + .ToList(); + + List containerCodes = wmsBaseLocations.Where(t => t.locDeep == 1).Select(t => t.containerCode).ToList();//深库位的托盘 + containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); + List wmsRawStocks = dbContext.WmsRawStock.Where(t => t.materialId == mesBaseBarcodeInfo.materialId) + .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId) + .Where(t => t.palletInfoCode != null) + .Where(t => t.warehouseId == 311) + .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList(); + + var bill = from a in wmsRawStocks + join b in wmsBaseLocations.Where(t => t.locDeep == 1 && !string.IsNullOrEmpty(t.containerCode)) on a.palletInfoCode equals b.containerCode + select new { b };//等于当前任务的物料的托盘的库位信息 + + + var outBill = from b in wmsBaseLocations + from a in bill + where b.locDeep == 2 + && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) + && a.b.locColumn == b.locColumn + && b.locationStatus == "1" + && string.IsNullOrEmpty(b.containerCode) + select new { b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + WmsBaseLocation? wmsBaseLocation = outBill.Where(t => !canNotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 + + if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) { - bool hasLocation = wmsBaseLocations - .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) - .Where(t => t.locColumn == wmsBaseLocation.locColumn) - .Where(t=>!string.IsNullOrEmpty(t.containerCode)||t.locationStatus!="1") - .Any(); - if (hasLocation) + if (wmsBaseLocation.locDeep == 1) { - canNotIn.Add(wmsBaseLocation.locationCode); - Console.WriteLine(DateTime.Now + $":目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); - _logger.Info($"目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); - continue; + bool hasLocation = wmsBaseLocations + .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) + .Where(t => t.locColumn == wmsBaseLocation.locColumn) + .Where(t => !string.IsNullOrEmpty(t.containerCode) || t.locationStatus != "1") + .Any(); + if (hasLocation) + { + canNotIn.Add(wmsBaseLocation.locationCode); + Console.WriteLine(DateTime.Now + $":目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); + _logger.Info($"目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); + continue; + } } + dbContext.Remove(wcsTask); + WcsTask newTask = CoreMapper.Map(wcsTask); + newTask.objid = StaticData.SnowId.NextId(); + newTask.taskStatus = 0;//创建状态 + newTask.updateTime = DateTime.Now; + newTask.currPointId = baseEquip.objid; + newTask.currPointNo = baseEquip.equipNo; + newTask.nextPointId = AgvEquip.objid; + newTask.nextPointNo = AgvEquip.equipNo; + newTask.endPointId = wmsBaseLocation.locationId; + newTask.endPointNo = wmsBaseLocation.locationCode; + newTask.taskType = 39; + newTask.useFlag = 1; + wmsBaseLocation.locationStatus = "2"; + SystemData.LockOutLocation(wmsBaseLocation, dbContext); + dbContext.Update(wmsBaseLocation); + dbContext.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + canNotIn.Clear(); + Console.WriteLine(DateTime.Now + $":三楼接驳位调度入库任务,物料{mesBaseBarcodeInfo.materialId},托盘{rfid},库位{wmsBaseLocation.locationCode}"); + _logger.Info($"三楼接驳位调度入库任务,物料{mesBaseBarcodeInfo.materialId},托盘{rfid},库位{wmsBaseLocation.locationCode}"); + } + else + { + Console.WriteLine(DateTime.Now + ":三楼楼接驳位调度入库任务,未找到库位"); + _logger.Info("三楼接驳位调度入库任务,未找到库位"); } - dbContext.Remove(wcsTask); - WcsTask newTask = CoreMapper.Map(wcsTask); - newTask.objid = StaticData.SnowId.NextId(); - newTask.taskStatus = 0;//创建状态 - newTask.updateTime = DateTime.Now; - newTask.currPointId = baseEquip.objid; - newTask.currPointNo = baseEquip.equipNo; - newTask.nextPointId = AgvEquip.objid; - newTask.nextPointNo = AgvEquip.equipNo; - newTask.endPointId = wmsBaseLocation.locationId; - newTask.endPointNo = wmsBaseLocation.locationCode; - newTask.taskType = 39; - newTask.useFlag = 1; - wmsBaseLocation.locationStatus = "2"; - SystemData.LockOutLocation(wmsBaseLocation, dbContext); - dbContext.Update(wmsBaseLocation); - dbContext.Add(newTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); - canNotIn.Clear(); - Console.WriteLine(DateTime.Now + $":三楼接驳位调度入库任务,物料{mesBaseBarcodeInfo.materialId},托盘{rfid},库位{wmsBaseLocation.locationCode}"); - _logger.Info($"三楼接驳位调度入库任务,物料{mesBaseBarcodeInfo.materialId},托盘{rfid},库位{wmsBaseLocation.locationCode}"); - } - else - { - Console.WriteLine(DateTime.Now + ":三楼楼接驳位调度入库任务,未找到库位"); - _logger.Info("三楼接驳位调度入库任务,未找到库位"); } } } - } else if (wcsTask.taskStatus == 6)//小车任务是完成状态,说明是出库 { @@ -185,7 +187,7 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - + } else {