From edbf474e0519b1c705c40c5fe86a78ce200495b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83?= <15095123350@163.com> Date: Sat, 20 Jul 2024 09:02:08 +0800 Subject: [PATCH] 20240720 --- src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 960 +++++++++--------- src/Khd.Core.Wcs/Wcs/FirstFloor.cs | 149 ++- src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs | 43 +- .../Inventory/InventoryTaskEditForm.xaml | 28 +- .../Inventory/InventoryTaskEditForm.xaml.cs | 58 +- 5 files changed, 742 insertions(+), 496 deletions(-) diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 1e1eb90..f8a5760 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -177,13 +177,13 @@ namespace Khd.Core.Wcs.Wcs try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - bool canCreate = dbContext.WcsTask.Where(t => t.nextPointId == 9).Any(); + bool canCreate = dbContext.WcsTask.Where(t => t.nextPointId == 9).Where(t=>t.taskStatus<5).Any(); if (!canCreate) { BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 35); if (baseEquip.emptyCount == (SystemData.maxTray / 2)) { - var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.equipStatus == 1 && t.emptyCount == 5); + var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.equipStatus == 1 && t.emptyCount == (SystemData.maxTray / 2)); if (endEquip != null) { var wcsTask = new WcsTask() @@ -476,7 +476,8 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.saleOrderId == wmsRawOutstock.saleOrderId) .Where(t => t.warehouseId == 311) .ToList(); - var wmsBaseLocations = dbContext.WmsBaseLocation + var AllWmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseId == 311).ToList(); + var wmsBaseLocations = AllWmsBaseLocations .Where(t => t.activeFlag == "1") .Where(t => t.delFlag == "0") .Where(t => t.locationScrapType == "1") @@ -502,10 +503,11 @@ namespace Khd.Core.Wcs.Wcs { 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(); + .Where(t => t.a.locColumn == fistbill.a.locColumn) + .Where(t => t.a.locDeep == 2) + .FirstOrDefault(); wmsBaseLocation = fistbill.a; if (lastbill != null) { @@ -523,52 +525,68 @@ namespace Khd.Core.Wcs.Wcs { row = wmsBaseLocation.locRow - 1; } - WmsBaseLocation? fromBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row) + 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 = dbContext.WmsBaseLocation.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) - .Where(t => t.locDeep == 1) - - .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); - toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) - .Where(t => t.warehouseId != wmsBaseLocation.locationId) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .FirstOrDefault(); - if (toLocation != null) + if (fromBaseLocation != null && !string.IsNullOrEmpty(fromBaseLocation.containerCode)) { - var RemoveTask = new WcsTask() + 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) { - objid = StaticData.SnowId.NextId(), - taskType = 67, - containerNo = fromBaseLocation.containerCode, - 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 - }; - toLocation.locationStatus = "4"; - toLocation.instockFlag = "1"; - toLocation.updateBy = "WCS"; - toLocation.updateTime = DateTime.Now; - fromBaseLocation.updateBy = "WCS"; - fromBaseLocation.updateTime = DateTime.Now; - fromBaseLocation.outstockFlag = "1"; - fromBaseLocation.locationStatus = "4"; - dbContext.Update(toLocation); - dbContext.Update(fromBaseLocation); - dbContext.Add(RemoveTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); - dbContext.Add(wcsTaskLog); + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + taskType = 67, + containerNo = fromBaseLocation.containerCode, + 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 + }; + toLocation.locationStatus = "4"; + toLocation.instockFlag = "1"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + fromBaseLocation.updateBy = "WCS"; + fromBaseLocation.updateTime = DateTime.Now; + fromBaseLocation.outstockFlag = "1"; + fromBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(fromBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); + } } } } @@ -736,209 +754,202 @@ namespace Khd.Core.Wcs.Wcs try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - bool task = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.taskStatus <= 5).Any(); - if (!task) + BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 5); + if (lineEquip.equipStatus == 0) { - var proStock = dbContext.WmsProductStock - .Where(t => t.warehouseId == 531) - .Where(t => t.activeFlag == "1").ToList(); - var proOutStock = dbContext.WmsProductOutstock - .Where(t => t.outstockQty < t.applyQty) - .Where(t => t.auditStatus == "1") - .Where(t => t.warehouseId == 531) - .Where(t => t.productType == "3") - .Where(t => t.executeStatus == "0" || t.executeStatus == "1").ToList(); - //获取最早入库时间 - foreach (var item in proOutStock) + bool task = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.taskStatus <= 5).Any(); + if (!task) { - task = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.taskStatus <= 5).Any(); - if (!task) + var proStock = dbContext.WmsProductStock + .Where(t => t.warehouseId == 531) + .Where(t => t.activeFlag == "1").ToList(); + var proOutStock = dbContext.WmsProductOutstock + .Where(t => t.outstockQty < t.applyQty) + .Where(t => t.auditStatus == "1") + .Where(t => t.warehouseId == 531) + .Where(t => t.productType == "3") + .Where(t => t.executeStatus == "0" || t.executeStatus == "1").ToList(); + //获取最早入库时间 + foreach (var item in proOutStock) { - BaseEquip endEquip = dbContext.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); - - var wmsproStocks = proStock - .Where(t => t.productId == item.productId && 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.instockFlag == "0") - .Where(t => t.outstockFlag == "0") - .Where(t => t.locationStatus == "1") - .Where(t => t.warehouseId == item.warehouseId) - .Where(t => wmsproStocks.Contains(t.locationCode)) - .ToList(); - - decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty); - if (needNumber <= 0) + task = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.taskStatus <= 5).Any(); + if (!task) { - item.executeStatus = "2"; - dbContext.Update(item); - dbContext.SaveChanges(); - continue; - } + BaseEquip endEquip = dbContext.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); - var bill = from a in wmsBaseLocations - from b in proStock - 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(); - } - //做数量限制 + var wmsproStocks = proStock + .Where(t => t.productId == item.productId && t.warehouseId == item.warehouseId) + .Where(t => t.totalAmount > t.frozenAmount) + .Select(t => t.locationCode) + .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.instockFlag == "0") + .Where(t => t.outstockFlag == "0") + .Where(t => t.locationStatus == "1") + .Where(t => t.warehouseId == item.warehouseId) + .Where(t => wmsproStocks.Contains(t.locationCode)) + .ToList(); - BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); - BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 5); - foreach (var b in bill) - { - item.executeStatus = "1"; - WmsBaseLocation location = b.a; - WmsProductStock stock = b.b; - WcsTask wcsTask; - int qty = 0; - if (stock.totalAmount - stock.frozenAmount <= needNumber) + decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty); + if (needNumber <= 0) { - item.outstockQty += stock.totalAmount - stock.frozenAmount; - qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); - stock.updateDate = DateTime.Now; + item.executeStatus = "2"; + dbContext.Update(item); + dbContext.SaveChanges(); + continue; } - else + + var bill = from a in wmsBaseLocations + from b in proStock + where a.locationCode == b.locationCode + select new { a, b }; + + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); + foreach (var b in bill) { - item.outstockQty += needNumber; - qty = Convert.ToInt32(needNumber); + item.executeStatus = "1"; + WmsBaseLocation location = b.a; + WmsProductStock stock = b.b; + WcsTask wcsTask; stock.updateDate = DateTime.Now; - } - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == stock.palletInfoCode); - if (mesBasePalletInfo != null) - { - WmsProductOutstockDetail detail = new() + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == stock.palletInfoCode); + if (mesBasePalletInfo != null) { - 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 - }; - if (location.locDeep == 1) - { - int? row = 0; - if (location.locRow % 2 == 1) + + if (location.locDeep == 1) { - row = location.locRow + 1; - } - else - { - row = location.locRow - 1; - } - 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? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.locDeep == 1) - .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); - toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.warehouseId != location.locationId) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .FirstOrDefault(); - if (toLocation != null) + int? row = 0; + if (location.locRow % 2 == 1) { - var RemoveTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = item.productOutstockId, - taskType = 38, - 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 = qty - }; - toLocation.locationStatus = "4"; - toLocation.instockFlag = "1"; - toLocation.updateBy = "WCS"; - toLocation.updateTime = DateTime.Now; - wmsBaseLocation.updateBy = "WCS"; - wmsBaseLocation.updateTime = DateTime.Now; - wmsBaseLocation.outstockFlag = "1"; - wmsBaseLocation.locationStatus = "4"; - dbContext.Update(toLocation); - dbContext.Update(wmsBaseLocation); - dbContext.Add(RemoveTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); - dbContext.Add(wcsTaskLog); + row = location.locRow + 1; } else { - continue; + 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 = 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? 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) + { + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = 38, + 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 + }; + toLocation.locationStatus = "4"; + toLocation.instockFlag = "1"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + wmsBaseLocation.updateBy = "WCS"; + wmsBaseLocation.updateTime = DateTime.Now; + wmsBaseLocation.outstockFlag = "1"; + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(wmsBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); + } + else + { + continue; + } + } + } + } + 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 + }; + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = 38, + containerNo = location.containerCode, + createBy = "WCS", + createTime = DateTime.Now, + taskStatus = 0, + materialId = item.productId, + currPointId = location.locationId, + currPointNo = location.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = lineEquip.objid, + endPointNo = lineEquip.equipNo, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = 1 + }; + location.outstockFlag = "1"; + location.locationStatus = "6"; + location.updateBy = "WCS"; + location.updateTime = DateTime.Now; + dbContext.Add(detail); + dbContext.Update(location); + dbContext.Add(wcsTask); + dbContext.Update(stock); + dbContext.SaveChanges(); + break; } - wcsTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = item.productOutstockId, - taskType = 38, - containerNo = location.containerCode, - createBy = "WCS", - createTime = DateTime.Now, - taskStatus = 0, - materialId = item.productId, - 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.outstockFlag = "1"; - location.locationStatus = "6"; - location.updateBy = "WCS"; - location.updateTime = DateTime.Now; - dbContext.Add(detail); - dbContext.Update(location); - dbContext.Add(wcsTask); - dbContext.Update(stock); - 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(); } } } @@ -964,208 +975,221 @@ namespace Khd.Core.Wcs.Wcs try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - bool task = dbContext.WcsTask.Where(t => t.nextPointId == 8 && t.taskStatus <= 7).Any(); - if (!task) + BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 2); + if (lineEquip.equipStatus == 0) { - 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) + bool task = dbContext.WcsTask.Where(t => t.nextPointId == 8 && t.taskStatus <= 7).Any(); + if (!task) { - - BaseEquip endEquip = dbContext.BaseEquip.First(t => t.floorNo == 2 && t.equipType == 1); - var wmsproStocks = proStock - .Where(t => t.productId == item.productId && t.saleOrderId == item.saleOrderId && t.warehouseId == item.warehouseId) - .Select(t => t.palletInfoCode) - .ToList(); - - var wmsBaseLocations = dbContext.WmsBaseLocation + var proStock = dbContext.WmsProductStock + .Where(t => t.warehouseId == 231) .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.instockFlag == "0") - .Where(t => t.locationStatus == "1") - .Where(t => t.outstockFlag == "0") - .Where(t => t.warehouseId == item.warehouseId) - .Where(t => wmsproStocks.Contains(t.containerCode)) + .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.containerCode == b.palletInfoCode - select new { a, b }; + var wmsproStocks = proStock + .Where(t => t.productId == item.productId && t.saleOrderId == item.saleOrderId && t.warehouseId == item.warehouseId) + .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.instockFlag == "0") + .Where(t => t.locationStatus == "1") + .Where(t => t.outstockFlag == "0") + .Where(t => t.warehouseId == item.warehouseId) + .Where(t => wmsproStocks.Contains(t.containerCode)) + .ToList(); - BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8); - BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 1); - foreach (var b in bill) - { - item.executeStatus = "1"; - WmsBaseLocation location = b.a; - WmsProductStock stock = b.b; - WcsTask wcsTask; - int qty = 0; - if (stock.totalAmount - stock.frozenAmount <= needNumber) + decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty); + if (needNumber <= 0) { - item.outstockQty += stock.totalAmount - stock.frozenAmount; - qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); - stock.updateDate = DateTime.Now; + item.executeStatus = "2"; + dbContext.Update(item); + dbContext.SaveChanges(); + continue; } - else + + var bill = from a in wmsBaseLocations + from b in proStock + where a.containerCode == b.palletInfoCode + 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.outstockQty += needNumber; - qty = Convert.ToInt32(needNumber); - stock.updateDate = DateTime.Now; - } - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == location.containerCode); - if (mesBasePalletInfo != null) - { - WmsProductOutstockDetail detail = new() + item.executeStatus = "1"; + location = b.a; + stock = b.b; + WcsTask wcsTask; + int qty = 0; + if (stock.totalAmount - stock.frozenAmount <= needNumber) { - 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, - }; - if (location.locDeep == 1)//如果是深库位 + item.outstockQty += stock.totalAmount - stock.frozenAmount; + qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); + stock.updateDate = DateTime.Now; + } + else { - int? row = 0; - if (location.locRow % 2 == 1) + item.outstockQty += needNumber; + qty = Convert.ToInt32(needNumber); + stock.updateDate = DateTime.Now; + } + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == location.containerCode); + if (mesBasePalletInfo != null) + { + WmsProductOutstockDetail detail = new() { - row = location.locRow + 1; - } - else + 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, + }; + if (location.locDeep == 1)//如果是深库位 { - row = location.locRow - 1; - } - 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? toLocation = dbContext.WmsBaseLocation.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.instockFlag == "0") - .Where(t => t.locationStatus == "1") - .Where(t => t.outstockFlag == "0") - .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); - toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.warehouseId != location.locationId) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .FirstOrDefault(); - if (toLocation != null) + int? row = 0; + if (location.locRow % 2 == 1) { - 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 = qty - }; - toLocation.locationStatus = "4"; - toLocation.instockFlag = "1"; - toLocation.updateBy = "WCS"; - toLocation.updateTime = DateTime.Now; - wmsBaseLocation.updateBy = "WCS"; - wmsBaseLocation.updateTime = DateTime.Now; - wmsBaseLocation.outstockFlag = "1"; - wmsBaseLocation.locationStatus = "4"; - dbContext.Update(toLocation); - dbContext.Update(wmsBaseLocation); - dbContext.Add(RemoveTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); - dbContext.Add(wcsTaskLog); + row = location.locRow + 1; } else { - continue; + 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 = 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? 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.instockFlag == "0") + .Where(t => t.locationStatus == "1") + .Where(t => t.outstockFlag == "0") + .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) + { + 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 = qty + }; + toLocation.locationStatus = "4"; + toLocation.instockFlag = "1"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + wmsBaseLocation.updateBy = "WCS"; + wmsBaseLocation.updateTime = DateTime.Now; + wmsBaseLocation.outstockFlag = "1"; + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(wmsBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); + } + else + { + continue; + } + } } } - } - wcsTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = item.productOutstockId, - taskType = 50, - containerNo = location.containerCode, - createBy = "WCS", - createTime = DateTime.Now, - taskStatus = 0, - materialId = item.productId, - 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.outstockFlag = "1"; - location.locationStatus = "6"; - location.updateBy = "WCS"; - location.updateTime = DateTime.Now; - dbContext.Add(detail); - dbContext.Update(location); - dbContext.Add(wcsTask); - dbContext.Update(stock); - dbContext.SaveChanges(); - if (qty >= needNumber) - { + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = 50, + containerNo = location.containerCode, + 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 = qty + }; + location.outstockFlag = "1"; + location.locationStatus = "6"; + location.updateBy = "WCS"; + location.updateTime = DateTime.Now; + dbContext.Add(detail); + dbContext.Update(location); + dbContext.Add(wcsTask); + dbContext.Update(stock); + dbContext.SaveChanges(); + if (qty >= needNumber) + { + break; + } break; } - 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(); } } } @@ -1396,8 +1420,8 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.materialId == order.MaterialId && t.warehouseId == 512) .Select(t => t.palletInfoCode) .ToList(); - - var wmsBaseLocations = dbContext.WmsBaseLocation + var AllWmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseId == 512).ToList(); + var wmsBaseLocations = AllWmsBaseLocations .Where(t => t.activeFlag == "1") .Where(t => t.delFlag == "0") .Where(t => t.locationScrapType == "1") @@ -1699,7 +1723,8 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.totalAmount > t.frozenAmount) .Select(t => t.palletInfoCode) .ToList(); - var wmsBaseLocations = dbContext.WmsBaseLocation + 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") @@ -1723,15 +1748,7 @@ namespace Khd.Core.Wcs.Wcs from b in rawStock where a.containerCode == b.palletInfoCode 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).Take(1).ToList(); - } - else - { - bill = bill.OrderByDescending(t => t.a.locColumn).Take(1).ToList(); - } + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode); @@ -1768,57 +1785,66 @@ namespace Khd.Core.Wcs.Wcs { row = location.locRow - 1; } - WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row) + 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? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.locDeep == 1) - .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); - toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.warehouseId != location.locationId) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .FirstOrDefault(); - if (toLocation != null) + if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode)) { - var RemoveTask = new WcsTask() + 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) { - objid = StaticData.SnowId.NextId(), - orderId = item.rawOutstockId, - taskType = 38, - containerNo = wmsBaseLocation.containerCode, - 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.instockFlag = "1"; - toLocation.updateBy = "WCS"; - toLocation.updateTime = DateTime.Now; - wmsBaseLocation.updateBy = "WCS"; - wmsBaseLocation.updateTime = DateTime.Now; - wmsBaseLocation.outstockFlag = "1"; - wmsBaseLocation.locationStatus = "4"; - dbContext.Update(toLocation); - dbContext.Update(wmsBaseLocation); - dbContext.Add(RemoveTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); - dbContext.Add(wcsTaskLog); - } - else - { - continue; + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.rawOutstockId, + taskType = 38, + containerNo = wmsBaseLocation.containerCode, + 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.instockFlag = "1"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + wmsBaseLocation.updateBy = "WCS"; + wmsBaseLocation.updateTime = DateTime.Now; + wmsBaseLocation.outstockFlag = "1"; + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(wmsBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); + } + else + { + continue; + } } } } diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index 158070c..f5bb2f6 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -109,10 +109,95 @@ namespace Khd.Core.Wcs.Wcs //}; //CallEmptyThread.Start(); + Thread equipStatusThread = new Thread(EquipStatusLogic) + { + IsBackground = true + }; + equipStatusThread.Start(); + Console.WriteLine(DateTime.Now + ":一楼提升机线程启动成功"); LogManager.Info("一楼提升机线程启动成功"); } + private void EquipStatusLogic(object? obj) + { + using var scope = this._host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + while (true) + { + try + { + for (int i = 1; i <= 5; i++) + { + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{i}"); + var lineSignal = StaticData.PlcDic[0].Read(basePlcpoint.plcpointAddress); + if (lineSignal != null) + { + if (Convert.ToInt32(lineSignal) == 1) + { + BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i); + if (baseEquip.equipStatus != 1) + { + dbContext.Update(baseEquip); + dbContext.SaveChanges(); + } + else + { + bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == i || t.currPointId == i).Any(); + if (!hasTask) + { + baseEquip.equipStatus = 0; + dbContext.Update(baseEquip); + dbContext.SaveChanges(); + } + } + } + else + { + BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i); + bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == i || t.currPointId == i).Any(); + if (!hasTask) + { + baseEquip.equipStatus = 0; + dbContext.Update(baseEquip); + dbContext.SaveChanges(); + } + else + { + baseEquip.equipStatus = 1; + dbContext.Update(baseEquip); + dbContext.SaveChanges(); + } + } + } + } + } + catch (Exception ex) + { + if (ex is PlcException) + { + try + { + foreach (var item in StaticData.PlcDic) + { + if (item.Value.IP == ex.Message) + { + StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); + StaticData.PlcDic[item.Key].Open(); + } + } + } + catch + { + + } + } + LogManager.Error(ex); + } + + } + } + private void CallEmpty() { using var scope = _host.Services.CreateScope(); @@ -160,9 +245,27 @@ namespace Khd.Core.Wcs.Wcs } } } - catch + catch (Exception ex) { + if (ex is PlcException) + { + try + { + foreach (var item in StaticData.PlcDic) + { + if (item.Value.IP == ex.Message) + { + StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); + StaticData.PlcDic[item.Key].Open(); + } + } + } + catch + { + } + } + LogManager.Error(ex); } Thread.Sleep(1000); } @@ -297,16 +400,46 @@ namespace Khd.Core.Wcs.Wcs { if (string.IsNullOrEmpty(task.containerNo)) { - if (task.qty > 1)//多个托盘 + if (task.useFlag == 1) { - if (task.useFlag == 1) + if (task.qty > 1)//多个托盘 { - + if (task.endPointId != 1) + { + task.nextPointId = 6; + dbContext.SaveChanges(); + } + } + else if (task.qty == 1) + { + if (task.endPointId != 1) + { + task.nextPointId = 6; + task.containerNo = RFID001Value; + dbContext.SaveChanges(); + } } } - else if (task.qty == 1) + } + else + { + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == RFID001Value); + if (mesBasePalletInfo != null) { - + mesBasePalletInfo.bindAmount = null; + mesBasePalletInfo.createBy = null; + mesBasePalletInfo.bindAmount = null; + mesBasePalletInfo.createTime = null; + mesBasePalletInfo.materialBarcode = null; + mesBasePalletInfo.materialCode = null; + mesBasePalletInfo.materialId = null; + mesBasePalletInfo.materialName = null; + mesBasePalletInfo.updateBy = "WCS"; + mesBasePalletInfo.updateTime = DateTime.Now; + dbContext.Update(mesBasePalletInfo); + dbContext.Remove(task); + dbContext.WcsTaskLog.Where(t => t.objid == task.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); + dbContext.SaveChanges(); } } } @@ -377,7 +510,7 @@ namespace Khd.Core.Wcs.Wcs continue; } BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); - if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress)) + if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1)) { if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo) { @@ -413,7 +546,7 @@ namespace Khd.Core.Wcs.Wcs if (wcsTask.taskStatus == 1 && Convert.ToInt32(reserialno06) == wcsTask.serialNo) { BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); - if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress)) + if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo)&&wcsTask.qty>1)) { if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层 { diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index 23d71a4..cd5277f 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -827,20 +827,35 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 42) { - BaseEquip emptyEquip = dbContext.BaseEquip.First(t => t.objid == 35); - BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 31); - endEquip.emptyCount = 0; - dbContext.Update(endEquip); - emptyEquip.emptyCount += 1; - emptyEquip.equipStatus = 1; - emptyEquip.updateTime = DateTime.Now; - emptyEquip.updateBy = "WCS"; - dbContext.Update(emptyEquip); - dbContext.Remove(wcsCmd); - dbContext.Remove(item); - dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); - dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 }); - dbContext.SaveChanges(); + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo); + if (mesBasePalletInfo != null) + { + mesBasePalletInfo.bindAmount = null; + mesBasePalletInfo.createBy = null; + mesBasePalletInfo.bindAmount = null; + mesBasePalletInfo.createTime = null; + mesBasePalletInfo.materialBarcode = null; + mesBasePalletInfo.materialCode = null; + mesBasePalletInfo.materialId = null; + mesBasePalletInfo.materialName = null; + mesBasePalletInfo.updateBy = "WCS"; + mesBasePalletInfo.updateTime=DateTime.Now; + dbContext.Update(mesBasePalletInfo); + BaseEquip emptyEquip = dbContext.BaseEquip.First(t => t.objid == 35); + BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 31); + endEquip.emptyCount = 0; + dbContext.Update(endEquip); + emptyEquip.emptyCount += 1; + emptyEquip.equipStatus = 1; + emptyEquip.updateTime = DateTime.Now; + emptyEquip.updateBy = "WCS"; + dbContext.Update(emptyEquip); + dbContext.Remove(wcsCmd); + dbContext.Remove(item); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); + dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 }); + dbContext.SaveChanges(); + } } else if (item.taskType == 43) { diff --git a/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml index fc9ced8..f8bce42 100644 --- a/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml +++ b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml @@ -11,7 +11,7 @@ WindowStyle="None" Loaded="Window_Loaded" WindowStartupLocation="CenterScreen" - Height="450" Width="800"> + Height="600" Width="800"> @@ -54,19 +54,37 @@ + - + - - + + + + + + - + + + + + + + + + + + + + + diff --git a/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml.cs b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml.cs index c12b623..34a14fd 100644 --- a/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml.cs +++ b/src/Khd.Core.Wpf/TaskForm/Inventory/InventoryTaskEditForm.xaml.cs @@ -20,6 +20,7 @@ namespace Khd.Core.Wpf.TaskForm.Inventory private readonly string _materialName; private readonly InventoryTaskForm _inventoryTaskForm; private readonly string _locationCode; + private Dictionary _barCodeList; public InventoryTaskEditForm(Microsoft.Extensions.Hosting.IHost _host, long materialId, string containerNo, string materialName, string locationCode, InventoryTaskForm inventoryTaskForm) { InitializeComponent(); @@ -29,6 +30,7 @@ namespace Khd.Core.Wpf.TaskForm.Inventory this._materialName = materialName; this._inventoryTaskForm = inventoryTaskForm; this._locationCode = locationCode; + _barCodeList = new Dictionary(); } private void Window_Loaded(object sender, RoutedEventArgs e) @@ -77,7 +79,35 @@ namespace Khd.Core.Wpf.TaskForm.Inventory var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == this.NewBarCode.Text); if (mesBaseBarcodeInfo != null) { + try + { + _barCodeList.Add(mesBaseBarcodeInfo.barcodeInfo, this.NewCount.Text); + this.BarCodeList.Text += mesBaseBarcodeInfo.barcodeInfo + "\n"; + this.CountList.Text += this.NewCount.Text + "\n"; + this.NewBarCode.Text = ""; + } + catch + { + MessageBoxResult messageBoxResult = MessageBox.Show("该条码已经添加过,是否更新该条码?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Question); + if (messageBoxResult == MessageBoxResult.OK) + { + string[] barCodes = this.BarCodeList.Text.Split('\n'); + string[] counts = this.CountList.Text.Split('\n'); + for (int i = 0; i < barCodes.Length; i++) + { + if (this.BarCodeList.Text == barCodes[i]) + { + counts[i] = this.NewCount.Text; + this.CountList.Text = string.Join("\n", counts); + this.BarCodeList.Text = string.Join("\n", barCodes); + this._barCodeList[mesBaseBarcodeInfo.barcodeInfo] = this.NewCount.Text; + break; + } + } + } + } this.BarCodeList.Text += mesBaseBarcodeInfo.barcodeInfo + "\n"; + this.CountList.Text += this.NewCount.Text + "\n"; this.NewBarCode.Text = ""; } else @@ -94,9 +124,9 @@ namespace Khd.Core.Wpf.TaskForm.Inventory private void SaveButton_Click(object sender, RoutedEventArgs e) { - List newList = this.BarCodeList.Text.Split('\n').Distinct().ToList(); + List newList = this.BarCodeList.Text.Split('\n').ToList(); List list = this.BarCode.Text.Split('\n').ToList(); - StringBuilder addStr = new StringBuilder(); + StringBuilder addStr = new(); List addList = newList.Where(t => !list.Contains(t)).ToList(); if (addList.Count > 0) { @@ -209,5 +239,29 @@ namespace Khd.Core.Wpf.TaskForm.Inventory } this.Close(); } + + private void NewBarCode_LostFocus(object sender, RoutedEventArgs e) + { + try + { + using var scope = this._host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == this.NewBarCode.Text); + if (mesBaseBarcodeInfo != null) + { + this.NewCount.Text = mesBaseBarcodeInfo.batchFlag == "1" ? mesBaseBarcodeInfo.amount.ToString() : "1"; + + } + else + { + MessageBox.Show("条码不存在,请重新扫码"); + this.NewBarCode.Text = ""; + } + } + catch + { + + } + } } }