From bac382ce780c4c5981c76e42f3b3a75f5b8ead32 Mon Sep 17 00:00:00 2001 From: liuwf Date: Wed, 21 Aug 2024 14:59:11 +0800 Subject: [PATCH 01/63] =?UTF-8?q?add-=E6=B7=BB=E5=8A=A0=E5=8F=AF=E8=A7=86?= =?UTF-8?q?=E5=8C=96=E5=BA=93=E4=BD=8D=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Khd.Core.Wpf/Form/FormBoardT.xaml | 68 +++++++ src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs | 79 ++++++++- src/Khd.Core.Wpf/WindowPage/StockWindow.xaml | 167 ++++++++++++++++++ .../WindowPage/StockWindow.xaml.cs | 75 ++++++++ src/Khd.Core.Wpf/dto/Location.cs | 26 +++ 5 files changed, 414 insertions(+), 1 deletion(-) create mode 100644 src/Khd.Core.Wpf/WindowPage/StockWindow.xaml create mode 100644 src/Khd.Core.Wpf/WindowPage/StockWindow.xaml.cs create mode 100644 src/Khd.Core.Wpf/dto/Location.cs diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index c46253b..153a85a 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -15,7 +15,12 @@ Height="1080" > + + + + + @@ -362,6 +367,36 @@ + + + + + + @@ -1203,6 +1238,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Khd.Core.Wpf/WindowPage/StockWindow.xaml.cs b/src/Khd.Core.Wpf/WindowPage/StockWindow.xaml.cs new file mode 100644 index 0000000..a37fbbd --- /dev/null +++ b/src/Khd.Core.Wpf/WindowPage/StockWindow.xaml.cs @@ -0,0 +1,75 @@ +using Khd.Core.Domain.Models; +using Khd.Core.EntityFramework; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace Khd.Core.Wpf.WindowPage +{ + /// + /// StockWindow.xaml 的交互逻辑 + /// + public partial class StockWindow : Window + { + private IHost host = null; + public StockWindow(IHost _host,long locationId) + { + host = _host; + InitializeComponent(); + Init(locationId); + } + + public async Task Init(long locationId) + { + using var scope = host.Services.CreateScope(); + var dbContext = scope.ServiceProvider.GetRequiredService(); + var location = await dbContext.WmsBaseLocation.Where(x => x.locationId == locationId).FirstOrDefaultAsync(); + positionRowTxt.Text = location.locRow.ToString(); + positionColumnTxt.Text = location.locColumn.ToString(); + positionLayerTxt.Text = location.layerNum.ToString(); + locationTxt.Text = location.locationCode; + palletTxt.Text = location.containerCode; + + var stockList = await dbContext.WmsRawStock.Where(x => x.palletInfoCode == location.containerCode).ToListAsync(); + if(stockList != null && stockList.Count > 0) + { + // 获取所有库存物料 ID + var materialIds = stockList.Select(stock => stock.materialId).Distinct().ToList(); + var materialInfos = await dbContext.MesBaseMaterialInfo + .Where(material => materialIds.Contains(material.MaterialId)) + .ToListAsync(); + + // 将库存物料信息和物料详细信息合并 + var stockDetails = from stock in stockList + from material in materialInfos + where stock.materialId == material.MaterialId + select new + { + materialCode = material.MaterialCode, + materialName = material.MaterialName, + materialSpec = material.MaterialSpec, + totalAmount = stock.totalAmount, + frozenAmount = stock.frozenAmount + + }; + + + StockDataGrid.ItemsSource = stockDetails; + } + + } + } +} diff --git a/src/Khd.Core.Wpf/dto/Location.cs b/src/Khd.Core.Wpf/dto/Location.cs new file mode 100644 index 0000000..b54a5b2 --- /dev/null +++ b/src/Khd.Core.Wpf/dto/Location.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Khd.Core.Wpf.dto +{ + public class Location + { + public long LocationId { get; set; } // 新增 LocationId + public string Code { get; set; } + public LocationStatus Status { get; set; } + } + + public enum LocationStatus + { + // 在库有库存 + InAndStock, + //// 在库无库存 + //InNoStock, + //库外 + OutOfStock, + + } +} From 94613bb7c9a6ba9f1bd837d0f23a1904a5768973 Mon Sep 17 00:00:00 2001 From: liuwf Date: Wed, 21 Aug 2024 18:41:04 +0800 Subject: [PATCH 02/63] . --- src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs index 61cdda7..a81df55 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs @@ -2516,6 +2516,7 @@ namespace Khd.Core.Wpf.Form newWmsRawOutstock.taskType = "1"; newWmsRawOutstock.auditStatus = "1"; newWmsRawOutstock.applyBy = "CtuGun"; + newWmsRawOutstock.applyDate = DateTime.Now; newWmsRawOutstock.executeStatus = "2"; newWmsRawOutstock.saleOrderId = mesBaseBarcodeInfo.saleOrderId; newWmsRawOutstock.updateDate = DateTime.Now; From 637922f5687494e9e4d832519c996da29ea2ac79 Mon Sep 17 00:00:00 2001 From: liuwf Date: Mon, 26 Aug 2024 08:40:30 +0800 Subject: [PATCH 03/63] =?UTF-8?q?change-wms=5Fraw=5Finstock=E8=A1=A8?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8F=92=E5=85=A5=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Khd.Core.Domain/Models/WmsRawInstock.cs | 32 +++++++--- src/Khd.Core.Wcs/MainCentralControl.cs | 70 ++++++++++----------- src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs | 19 +++++- src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs | 9 ++- src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs | 22 +++++-- 5 files changed, 99 insertions(+), 53 deletions(-) diff --git a/src/Khd.Core.Domain/Models/WmsRawInstock.cs b/src/Khd.Core.Domain/Models/WmsRawInstock.cs index 520eba1..93cf4dd 100644 --- a/src/Khd.Core.Domain/Models/WmsRawInstock.cs +++ b/src/Khd.Core.Domain/Models/WmsRawInstock.cs @@ -64,6 +64,12 @@ namespace Khd.Core.Domain.Models [Column("material_id")] public long? materialId { get; set; } + /// + /// 物料条码信息 + /// + [Column("material_barcode")] + public string materialBarCode { get; set; } + /// /// 物料批次信息 /// @@ -106,17 +112,17 @@ namespace Khd.Core.Domain.Models [Column("execute_status")] public string executeStatus { get; set; } - ///// - ///// 申请人 - ///// - //[Column("apply_by")] - //public string applyBy { get; set; } + /// + /// 申请人 + /// + [Column("apply_by")] + public string applyBy { get; set; } - ///// - ///// 申请时间 - ///// - //[Column("apply_date")] - //public DateTime? applyDate { get; set; } + /// + /// 申请时间 + /// + [Column("apply_date")] + public DateTime? applyDate { get; set; } ///// ///// 审核人 @@ -159,6 +165,12 @@ namespace Khd.Core.Domain.Models /// [Column("return_flag")] public string? returnFlag { get; set; } + + /// + /// 请求返回标识(1是),execute_status改为2时此return_flag改为null + /// + [Column("purchase_order_id")] + public long? purchaseOrderId { get; set; } } } diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index acaa838..684b157 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -51,7 +51,7 @@ namespace Khd.Core.Wcs plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot); try { - plc.Open(); + // plc.Open(); Console.WriteLine(DateTime.Now + ":连接PLC:" + plcConfig.IP); } catch @@ -62,56 +62,56 @@ namespace Khd.Core.Wcs } } //创建定时器 - SystemTimer systemTimer = new SystemTimer(_host); - systemTimer.Start(); + //SystemTimer systemTimer = new SystemTimer(_host); + //systemTimer.Start(); //创建任务 - CreateTaskByRecord createTaskByRecord = new(_host); - createTaskByRecord.StartPoint(); + //CreateTaskByRecord createTaskByRecord = new(_host); + //createTaskByRecord.StartPoint(); - //一楼提升机以及接驳位 - FirstFloor firstFloor = new(_host); - firstFloor.StartPoint(); + ////一楼提升机以及接驳位 + //FirstFloor firstFloor = new(_host); + //firstFloor.StartPoint(); - //二层接驳位 - SecondFloorPoint secondFloorPoint = new(_host, 2); - secondFloorPoint.StartPoint(); + ////二层接驳位 + //SecondFloorPoint secondFloorPoint = new(_host, 2); + //secondFloorPoint.StartPoint(); - //二层AGV - SecondFloorAGV secondFloorAGV = new(_host, 2); - secondFloorAGV.StartPoint(); + ////二层AGV + //SecondFloorAGV secondFloorAGV = new(_host, 2); + //secondFloorAGV.StartPoint(); - //二楼线体 - SecondFloorLine secondFloorLine = new(_host, 2); - secondFloorLine.StartPoint(); + ////二楼线体 + //SecondFloorLine secondFloorLine = new(_host, 2); + //secondFloorLine.StartPoint(); - //三层接驳位 - ThirdFloorPoint thirdFloorPoint = new(_host, 3); - thirdFloorPoint.StartPoint(); + ////三层接驳位 + //ThirdFloorPoint thirdFloorPoint = new(_host, 3); + //thirdFloorPoint.StartPoint(); - // 三层AGV - ThirdFloorAGV thirdFloorAGV = new(_host, 3); - thirdFloorAGV.StartPoint(); + //// 三层AGV + //ThirdFloorAGV thirdFloorAGV = new(_host, 3); + //thirdFloorAGV.StartPoint(); - //四楼接驳位 - FourthFloorPoint fourthFloorPoint = new FourthFloorPoint(_host, 4); - fourthFloorPoint.StartPoint(); + ////四楼接驳位 + //FourthFloorPoint fourthFloorPoint = new FourthFloorPoint(_host, 4); + //fourthFloorPoint.StartPoint(); - //五层接驳位 - FiveFloorPoint fifthFloorPoint = new(_host, 5); - fifthFloorPoint.StartPoint(); + ////五层接驳位 + //FiveFloorPoint fifthFloorPoint = new(_host, 5); + //fifthFloorPoint.StartPoint(); - //五层CTU - FiveFloorCTU fiveFloorCTU = new(_host, 5); - fiveFloorCTU.StartPoint(); + ////五层CTU + //FiveFloorCTU fiveFloorCTU = new(_host, 5); + //fiveFloorCTU.StartPoint(); //五层AGV FiveFloorAGV fifthFloorAGV = new(_host, 5); fifthFloorAGV.StartPoint(); - //背负式Agv - FiveFloorBearAgv fiveFloorBearAgv = new(_host, 5); - fiveFloorBearAgv.StartPoint(); + ////背负式Agv + //FiveFloorBearAgv fiveFloorBearAgv = new(_host, 5); + //fiveFloorBearAgv.StartPoint(); } catch (Exception ex) { diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index b675c0a..29cf594 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -690,13 +690,20 @@ namespace Khd.Core.Wcs.Wcs }; WmsRawInstock wmsRawInstock = new WmsRawInstock() { + taskCode = item.taskCode, + materialBarCode = mesBaseBarcodeInfo.barcodeInfo, + materialBatchCode = mesBaseBarcodeInfo.batchCode, + applyBy = "wcs", + applyDate = System.DateTime.Now, + purchaseOrderId = mesBaseBarcodeInfo.PurchaseOrderId, + beginTime = System.DateTime.Now, endTime = DateTime.Now, locationCode = wmsBaseLocation.locationCode, executeStatus = "2", instockAmount = 1, instockType = "2", - materialBatchCode = mesBaseBarcodeInfo.barcodeInfo, + materialId = mesBaseBarcodeInfo.materialId, operationType = "3", palletInfoCode = mesBaseBarcodeInfo.palletInfoCode, @@ -757,13 +764,21 @@ namespace Khd.Core.Wcs.Wcs }; WmsRawInstock wmsRawInstock = new WmsRawInstock() { + taskCode = item.taskCode, + materialBarCode = mesBaseBarcodeInfo.barcodeInfo, + materialBatchCode = mesBaseBarcodeInfo.batchCode, + applyBy = "wcs", + applyDate = System.DateTime.Now, + purchaseOrderId = mesBaseBarcodeInfo.PurchaseOrderId, + + beginTime = DateTime.Now, endTime = DateTime.Now, locationCode = wmsBaseLocation.locationCode, executeStatus = "2", instockAmount = 1, instockType = "1", - materialBatchCode = mesBaseBarcodeInfo.barcodeInfo, + materialId = mesBaseBarcodeInfo.materialId, operationType = "3", palletInfoCode = mesBaseBarcodeInfo.palletInfoCode, diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index 30b7c08..d636295 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -654,13 +654,20 @@ namespace Khd.Core.Wcs.Wcs }; WmsRawInstock wmsRawInstock = new WmsRawInstock() { + taskCode = item.taskCode, + materialBarCode = mesBaseBarcodeInfo.barcodeInfo, + materialBatchCode = mesBaseBarcodeInfo.batchCode, + applyBy = "wcs", + applyDate = System.DateTime.Now, + purchaseOrderId = mesBaseBarcodeInfo.PurchaseOrderId, + beginTime = System.DateTime.Now, endTime = DateTime.Now, locationCode = wmsBaseLocation.locationCode, executeStatus = "2", instockAmount = 1, instockType = item.fromFloorNo == 1 ? "1" : "3", - materialBatchCode = mesBaseBarcodeInfo.barcodeInfo, + materialId = mesBaseBarcodeInfo.materialId, operationType = "3", palletInfoCode = mesBaseBarcodeInfo.palletInfoCode, diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs index a81df55..a982cd6 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs @@ -1890,15 +1890,21 @@ namespace Khd.Core.Wpf.Form var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtInBarCode.Text); WmsRawInstock wmsRawInstock = new WmsRawInstock() { + taskCode = Global.SnowId.NextId().ToString(), + materialBarCode = mesBaseBarcodeInfo.barcodeInfo, + materialBatchCode = mesBaseBarcodeInfo.batchCode, + applyBy = "WPF", + applyDate = System.DateTime.Now, + purchaseOrderId = mesBaseBarcodeInfo.PurchaseOrderId, + beginTime = System.DateTime.Now, endTime = DateTime.Now, locationCode = container.locationCode, executeStatus = "2", instockAmount = amount, - instockType = "1", - materialBatchCode = txtInBarCode.Text, + instockType = "1", materialId = material.materialId, - operationType = "2", + operationType = "1", palletInfoCode = container.containerCode, poNo = mesBaseBarcodeInfo.poNo, warehouseId = 512 @@ -1938,15 +1944,21 @@ namespace Khd.Core.Wpf.Form var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtInBarCode.Text); WmsRawInstock wmsRawInstock = new WmsRawInstock() { + taskCode = Global.SnowId.NextId().ToString(), + materialBarCode = mesBaseBarcodeInfo.barcodeInfo, + materialBatchCode = mesBaseBarcodeInfo.batchCode, + applyBy = "WPF", + applyDate = System.DateTime.Now, + purchaseOrderId = mesBaseBarcodeInfo.PurchaseOrderId, + beginTime = System.DateTime.Now, endTime = DateTime.Now, locationCode = container.locationCode, executeStatus = "2", instockAmount = amount, instockType = "1", - materialBatchCode = txtInBarCode.Text, materialId = material.materialId, - operationType = "2", + operationType = "1", palletInfoCode = container.containerCode, poNo = mesBaseBarcodeInfo.poNo, warehouseId = 512 From bc3874cd52af60686969a4494d77ce3675f72b7c Mon Sep 17 00:00:00 2001 From: liuwf Date: Tue, 27 Aug 2024 09:07:59 +0800 Subject: [PATCH 04/63] . --- src/Khd.Core.Wcs/MainCentralControl.cs | 68 +++++++++++++------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 684b157..e1d0f64 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -51,7 +51,7 @@ namespace Khd.Core.Wcs plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot); try { - // plc.Open(); + plc.Open(); Console.WriteLine(DateTime.Now + ":连接PLC:" + plcConfig.IP); } catch @@ -62,56 +62,56 @@ namespace Khd.Core.Wcs } } //创建定时器 - //SystemTimer systemTimer = new SystemTimer(_host); - //systemTimer.Start(); + SystemTimer systemTimer = new SystemTimer(_host); + systemTimer.Start(); //创建任务 - //CreateTaskByRecord createTaskByRecord = new(_host); - //createTaskByRecord.StartPoint(); + CreateTaskByRecord createTaskByRecord = new(_host); + createTaskByRecord.StartPoint(); - ////一楼提升机以及接驳位 - //FirstFloor firstFloor = new(_host); - //firstFloor.StartPoint(); + //一楼提升机以及接驳位 + FirstFloor firstFloor = new(_host); + firstFloor.StartPoint(); - ////二层接驳位 - //SecondFloorPoint secondFloorPoint = new(_host, 2); - //secondFloorPoint.StartPoint(); + //二层接驳位 + SecondFloorPoint secondFloorPoint = new(_host, 2); + secondFloorPoint.StartPoint(); - ////二层AGV - //SecondFloorAGV secondFloorAGV = new(_host, 2); - //secondFloorAGV.StartPoint(); + //二层AGV + SecondFloorAGV secondFloorAGV = new(_host, 2); + secondFloorAGV.StartPoint(); - ////二楼线体 - //SecondFloorLine secondFloorLine = new(_host, 2); - //secondFloorLine.StartPoint(); + //二楼线体 + SecondFloorLine secondFloorLine = new(_host, 2); + secondFloorLine.StartPoint(); - ////三层接驳位 - //ThirdFloorPoint thirdFloorPoint = new(_host, 3); - //thirdFloorPoint.StartPoint(); + //三层接驳位 + ThirdFloorPoint thirdFloorPoint = new(_host, 3); + thirdFloorPoint.StartPoint(); - //// 三层AGV - //ThirdFloorAGV thirdFloorAGV = new(_host, 3); - //thirdFloorAGV.StartPoint(); + // 三层AGV + ThirdFloorAGV thirdFloorAGV = new(_host, 3); + thirdFloorAGV.StartPoint(); - ////四楼接驳位 - //FourthFloorPoint fourthFloorPoint = new FourthFloorPoint(_host, 4); - //fourthFloorPoint.StartPoint(); + //四楼接驳位 + FourthFloorPoint fourthFloorPoint = new FourthFloorPoint(_host, 4); + fourthFloorPoint.StartPoint(); - ////五层接驳位 - //FiveFloorPoint fifthFloorPoint = new(_host, 5); - //fifthFloorPoint.StartPoint(); + //五层接驳位 + FiveFloorPoint fifthFloorPoint = new(_host, 5); + fifthFloorPoint.StartPoint(); - ////五层CTU - //FiveFloorCTU fiveFloorCTU = new(_host, 5); - //fiveFloorCTU.StartPoint(); + //五层CTU + FiveFloorCTU fiveFloorCTU = new(_host, 5); + fiveFloorCTU.StartPoint(); //五层AGV FiveFloorAGV fifthFloorAGV = new(_host, 5); fifthFloorAGV.StartPoint(); ////背负式Agv - //FiveFloorBearAgv fiveFloorBearAgv = new(_host, 5); - //fiveFloorBearAgv.StartPoint(); + FiveFloorBearAgv fiveFloorBearAgv = new(_host, 5); + fiveFloorBearAgv.StartPoint(); } catch (Exception ex) { From f83c712cd55a20ff68be76cdfafff2e83475e966 Mon Sep 17 00:00:00 2001 From: liuwf Date: Tue, 27 Aug 2024 15:06:36 +0800 Subject: [PATCH 05/63] . --- src/Khd.Core.Wpf/Form/FormBoardT.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index 153a85a..cf49ade 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -370,7 +370,7 @@ - @@ -1255,8 +1270,36 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs index 3e847ba..ce85d74 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs @@ -311,6 +311,11 @@ namespace Khd.Core.Wpf.Form var inLocationList = allLocationLists.Where(x => x.ContainerStatus == "1").Select(x => x.locationCode).ToList(); //在库里有库存的库位 var withStockLocationList = dbContext.WmsRawStock.Where(x => x.warehouseId == 512 && inLocationList.Contains(x.locationCode)).Select(x => x.locationCode).Distinct().ToList(); + // 在库里无库存的库位 + var withoutStockLocationList = inLocationList + .Except(withStockLocationList) + .ToList(); + var locations = new List(); for (int i = 0; i < 6 * 36; i++) { @@ -320,18 +325,13 @@ namespace Khd.Core.Wpf.Form { status = LocationStatus.InAndStock; } + if (withoutStockLocationList.Contains(targetLocation.locationCode)) + { + status = LocationStatus.EmptyInStock; + } - //Location item = new Location(); - //item.Code = ""; - //item.LocationId = targetLocation.locationId; - //item.Status = status; - //if (i < 36) - //{ - // item.Code = targetLocation.locColumn.ToString(); - //} - //locations.Add(item); - - locations.Add(new Location { LocationId = targetLocation.locationId, Code = targetLocation.locColumn.ToString(), Status = status }); + Visibility isFreeze = targetLocation.locationStatus == "1" ? Visibility.Collapsed : Visibility.Visible; + locations.Add(new Location { LocationId = targetLocation.locationId, Code = targetLocation.locColumn.ToString(), Status = status ,isFreeze = isFreeze}); } LocationsControl.ItemsSource = locations; diff --git a/src/Khd.Core.Wpf/dto/Location.cs b/src/Khd.Core.Wpf/dto/Location.cs index b54a5b2..5d50a69 100644 --- a/src/Khd.Core.Wpf/dto/Location.cs +++ b/src/Khd.Core.Wpf/dto/Location.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows; namespace Khd.Core.Wpf.dto { @@ -11,14 +12,16 @@ namespace Khd.Core.Wpf.dto public long LocationId { get; set; } // 新增 LocationId public string Code { get; set; } public LocationStatus Status { get; set; } + + public Visibility isFreeze { get; set; } } public enum LocationStatus { // 在库有库存 InAndStock, - //// 在库无库存 - //InNoStock, + //// 空料箱在库无库存 + EmptyInStock, //库外 OutOfStock, From c9014a6c6f911f36973171db901c19e7c6d53cac Mon Sep 17 00:00:00 2001 From: liuwf Date: Thu, 5 Sep 2024 18:09:39 +0800 Subject: [PATCH 32/63] =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index f867e2f..a733c36 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -2434,19 +2434,21 @@ namespace Khd.Core.Wcs.Wcs { 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(); + .Where(t => string.IsNullOrEmpty(t.containerCode) && t.locationStatus == "1").FirstOrDefault(); toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) .Where(t => t.warehouseId != location.locationId) .Where(t => string.IsNullOrEmpty(t.containerCode)) @@ -2514,12 +2516,12 @@ namespace Khd.Core.Wcs.Wcs _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); continue; } - else - { - Console.WriteLine(DateTime.Now + $":{location.locationCode}浅库位状态异常,无法移库"); - _logger.Info($"{location.locationCode}浅库位状态异常,无法移库"); - continue; - } + //else + //{ + // Console.WriteLine(DateTime.Now + $":{location.locationCode}浅库位状态异常,无法移库"); + // _logger.Info($"{location.locationCode}浅库位状态异常,无法移库"); + // continue; + //} } wcsTask = new WcsTask() { From 41565429debe465a99099fa204e9d5280fd1fa8f Mon Sep 17 00:00:00 2001 From: liuwf Date: Fri, 6 Sep 2024 10:18:02 +0800 Subject: [PATCH 33/63] . --- src/Khd.Core.Wcs/MainCentralControl.cs | 70 +++++++++++++------------- src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs | 2 +- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 1544c6a..836e48e 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -67,56 +67,56 @@ namespace Khd.Core.Wcs } //创建定时器 - SystemTimer systemTimer = new SystemTimer(_host); - systemTimer.Start(); + //SystemTimer systemTimer = new SystemTimer(_host); + //systemTimer.Start(); - //创建任务 - CreateTaskByRecord createTaskByRecord = new(_host); - createTaskByRecord.StartPoint(); + ////创建任务 + //CreateTaskByRecord createTaskByRecord = new(_host); + //createTaskByRecord.StartPoint(); - //一楼提升机以及接驳位 - FirstFloor firstFloor = new(_host); - firstFloor.StartPoint(); + ////一楼提升机以及接驳位 + //FirstFloor firstFloor = new(_host); + //firstFloor.StartPoint(); - //二层接驳位 - SecondFloorPoint secondFloorPoint = new(_host, 2); - secondFloorPoint.StartPoint(); + ////二层接驳位 + //SecondFloorPoint secondFloorPoint = new(_host, 2); + //secondFloorPoint.StartPoint(); - ////二层AGV - SecondFloorAGV secondFloorAGV = new(_host, 2); - secondFloorAGV.StartPoint(); + //////二层AGV + //SecondFloorAGV secondFloorAGV = new(_host, 2); + //secondFloorAGV.StartPoint(); - //二楼线体 - SecondFloorLine secondFloorLine = new(_host, 2); - secondFloorLine.StartPoint(); + ////二楼线体 + //SecondFloorLine secondFloorLine = new(_host, 2); + //secondFloorLine.StartPoint(); - //三层接驳位 - ThirdFloorPoint thirdFloorPoint = new(_host, 3); - thirdFloorPoint.StartPoint(); + ////三层接驳位 + //ThirdFloorPoint thirdFloorPoint = new(_host, 3); + //thirdFloorPoint.StartPoint(); - // 三层AGV - ThirdFloorAGV thirdFloorAGV = new(_host, 3); - thirdFloorAGV.StartPoint(); + //// 三层AGV + //ThirdFloorAGV thirdFloorAGV = new(_host, 3); + //thirdFloorAGV.StartPoint(); - //四楼接驳位 - FourthFloorPoint fourthFloorPoint = new FourthFloorPoint(_host, 4); - fourthFloorPoint.StartPoint(); + ////四楼接驳位 + //FourthFloorPoint fourthFloorPoint = new FourthFloorPoint(_host, 4); + //fourthFloorPoint.StartPoint(); - //五层接驳位 - FiveFloorPoint fifthFloorPoint = new(_host, 5); - fifthFloorPoint.StartPoint(); + ////五层接驳位 + //FiveFloorPoint fifthFloorPoint = new(_host, 5); + //fifthFloorPoint.StartPoint(); //五层CTU FiveFloorCTU fiveFloorCTU = new(_host, 5); fiveFloorCTU.StartPoint(); - //五层AGV - FiveFloorAGV fifthFloorAGV = new(_host, 5); - fifthFloorAGV.StartPoint(); + ////五层AGV + //FiveFloorAGV fifthFloorAGV = new(_host, 5); + //fifthFloorAGV.StartPoint(); - ////背负式Agv - FiveFloorBearAgv fiveFloorBearAgv = new(_host, 5); - fiveFloorBearAgv.StartPoint(); + //////背负式Agv + //FiveFloorBearAgv fiveFloorBearAgv = new(_host, 5); + //fiveFloorBearAgv.StartPoint(); } catch (Exception ex) { diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index 457815b..be1df5a 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -149,7 +149,7 @@ namespace Khd.Core.Wcs.Wcs } else { - if (task.taskType == StaticTaskType.FiveAccessoryOut || task.taskType == StaticTaskType.FiveAccessoryRemove) + if (task.taskType == StaticTaskType.FiveAccessoryOut || task.taskType == StaticTaskType.FiveAccessoryRemove || task.taskType == StaticTaskType.FiveAccessoryStorage) { dbContext.WcsTask.Where(t => t.objid == task.objid).Delete(); #region 暂不使用-因为删除之后ctu无法知道还有几个箱子///如果已经开始入库,还有出库任务,删除出库任务 From 9bbc05a1ffdf51f59dc3bc3a326f23ea82700a89 Mon Sep 17 00:00:00 2001 From: liuwf Date: Fri, 6 Sep 2024 10:23:09 +0800 Subject: [PATCH 34/63] . --- src/Khd.Core.Wcs/MainCentralControl.cs | 70 +++++++++++++------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 836e48e..1544c6a 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -67,56 +67,56 @@ namespace Khd.Core.Wcs } //创建定时器 - //SystemTimer systemTimer = new SystemTimer(_host); - //systemTimer.Start(); + SystemTimer systemTimer = new SystemTimer(_host); + systemTimer.Start(); - ////创建任务 - //CreateTaskByRecord createTaskByRecord = new(_host); - //createTaskByRecord.StartPoint(); + //创建任务 + CreateTaskByRecord createTaskByRecord = new(_host); + createTaskByRecord.StartPoint(); - ////一楼提升机以及接驳位 - //FirstFloor firstFloor = new(_host); - //firstFloor.StartPoint(); + //一楼提升机以及接驳位 + FirstFloor firstFloor = new(_host); + firstFloor.StartPoint(); - ////二层接驳位 - //SecondFloorPoint secondFloorPoint = new(_host, 2); - //secondFloorPoint.StartPoint(); + //二层接驳位 + SecondFloorPoint secondFloorPoint = new(_host, 2); + secondFloorPoint.StartPoint(); - //////二层AGV - //SecondFloorAGV secondFloorAGV = new(_host, 2); - //secondFloorAGV.StartPoint(); + ////二层AGV + SecondFloorAGV secondFloorAGV = new(_host, 2); + secondFloorAGV.StartPoint(); - ////二楼线体 - //SecondFloorLine secondFloorLine = new(_host, 2); - //secondFloorLine.StartPoint(); + //二楼线体 + SecondFloorLine secondFloorLine = new(_host, 2); + secondFloorLine.StartPoint(); - ////三层接驳位 - //ThirdFloorPoint thirdFloorPoint = new(_host, 3); - //thirdFloorPoint.StartPoint(); + //三层接驳位 + ThirdFloorPoint thirdFloorPoint = new(_host, 3); + thirdFloorPoint.StartPoint(); - //// 三层AGV - //ThirdFloorAGV thirdFloorAGV = new(_host, 3); - //thirdFloorAGV.StartPoint(); + // 三层AGV + ThirdFloorAGV thirdFloorAGV = new(_host, 3); + thirdFloorAGV.StartPoint(); - ////四楼接驳位 - //FourthFloorPoint fourthFloorPoint = new FourthFloorPoint(_host, 4); - //fourthFloorPoint.StartPoint(); + //四楼接驳位 + FourthFloorPoint fourthFloorPoint = new FourthFloorPoint(_host, 4); + fourthFloorPoint.StartPoint(); - ////五层接驳位 - //FiveFloorPoint fifthFloorPoint = new(_host, 5); - //fifthFloorPoint.StartPoint(); + //五层接驳位 + FiveFloorPoint fifthFloorPoint = new(_host, 5); + fifthFloorPoint.StartPoint(); //五层CTU FiveFloorCTU fiveFloorCTU = new(_host, 5); fiveFloorCTU.StartPoint(); - ////五层AGV - //FiveFloorAGV fifthFloorAGV = new(_host, 5); - //fifthFloorAGV.StartPoint(); + //五层AGV + FiveFloorAGV fifthFloorAGV = new(_host, 5); + fifthFloorAGV.StartPoint(); - //////背负式Agv - //FiveFloorBearAgv fiveFloorBearAgv = new(_host, 5); - //fiveFloorBearAgv.StartPoint(); + ////背负式Agv + FiveFloorBearAgv fiveFloorBearAgv = new(_host, 5); + fiveFloorBearAgv.StartPoint(); } catch (Exception ex) { From 714966307ba016bae60f67ecbfff502568b54265 Mon Sep 17 00:00:00 2001 From: liuwf Date: Fri, 6 Sep 2024 10:25:52 +0800 Subject: [PATCH 35/63] =?UTF-8?q?change-=E4=BF=AE=E6=94=B9=E4=BA=94?= =?UTF-8?q?=E6=A5=BC=E6=88=90=E5=93=81=E5=87=BA=E5=BA=93=E7=A7=BB=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 416 +++++++++++---------- 1 file changed, 226 insertions(+), 190 deletions(-) diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index a733c36..72f19eb 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using SixLabors.ImageSharp; using System.Data; +using System.Drawing.Text; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -1584,98 +1585,111 @@ namespace Khd.Core.Wcs.Wcs } 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") - { + {//浅库位有库存 WmsProductStock? wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); - if (wmsProductStock != null) + + #region 找寻移库目标库位 + // 寻找移库目的库位 + WmsBaseLocation? toLocation = null; + + + var moveLocationList = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.warehouseId != location.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode) && t.locationStatus == "1").OrderBy(t => t.locDeep).ToList(); + + foreach (WmsBaseLocation itemLocation in moveLocationList) { - 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) + + if (itemLocation.locDeep == 1) { - if (toLocation.locDeep == 1) + bool hasLocation = AllWmsBaseLocations + .Where(t => t.locRow == (itemLocation.locRow % 2 == 1 ? (itemLocation.locRow + 1) : (itemLocation.locRow - 1))) + .Where(t => t.locColumn == itemLocation.locColumn) + .Where(t => t.locationStatus == "1" && string.IsNullOrEmpty(t.containerCode)) + .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() + else { - objid = StaticData.SnowId.NextId(), - orderId = item.productOutstockId, - taskType = StaticTaskType.SecondRemove, - 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); + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; + } + } else { - continue; + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; } + } - else + if (toLocation == null) { + // 找寻下一个可出库库存 continue; } + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = StaticTaskType.SecondRemove, + 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); + #endregion } - else if (wmsBaseLocation != null && wmsBaseLocation.locationStatus != "1") + else if (wmsBaseLocation.locationStatus != "1") { - Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库"); - _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); + // 浅库位状态异常,找寻下一个可出库库存 continue; } + } } + wcsTask = new WcsTask() { objid = StaticData.SnowId.NextId(), @@ -2423,6 +2437,12 @@ namespace Khd.Core.Wcs.Wcs MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault(); if (mesBaseBarcodeInfo != null) { + if (location.locationStatus != "1") + { + Console.WriteLine(DateTime.Now + $":{location.locationCode}库位状态异常,无法出库"); + _logger.Info($"{location.locationCode}库位状态异常,无法出库"); + return; + } if (location.locDeep == 1) { int? row = 0; @@ -2439,151 +2459,166 @@ namespace Khd.Core.Wcs.Wcs .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") + + if (!string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1") { - // 浅库位有托盘 + // 浅库位有库存 WmsRawStock? wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); - if (wmsRawStock != null) + + + // 寻找移库目的库位 + WmsBaseLocation? toLocation = null; + + + var moveLocationList = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.warehouseId != location.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode) && t.locationStatus == "1").OrderBy(t => t.locDeep).ToList(); + + foreach (WmsBaseLocation itemLocation in moveLocationList) { - // 寻找目的库位 - WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.locDeep == 1) - .Where(t => string.IsNullOrEmpty(t.containerCode) && t.locationStatus == "1").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 (itemLocation.locDeep == 1) { - if (toLocation.locDeep == 1) + bool hasLocation = AllWmsBaseLocations + .Where(t => t.locRow == (itemLocation.locRow % 2 == 1 ? (itemLocation.locRow + 1) : (itemLocation.locRow - 1))) + .Where(t => t.locColumn == itemLocation.locColumn) + .Where(t => t.locationStatus == "1" && string.IsNullOrEmpty(t.containerCode)) + .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() + else { - objid = StaticData.SnowId.NextId(), - orderId = item.rawOutstockId, - taskType = StaticTaskType.FiveRemove, - 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); + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; + } + } else { - continue; + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; } + } - else + if (toLocation == null) { - continue; + // TODO : 没有找到可以移库的目标库位,添加报警 + Console.WriteLine("5F原材料前往背板安装需要先移库,没有找到可以移库的目标库位,添加报警"); + return; } + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.rawOutstockId, + taskType = StaticTaskType.FiveRemove, + 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 if (wmsBaseLocation != null && wmsBaseLocation.locationStatus != "1") + else if (wmsBaseLocation.locationStatus != "1") { - Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库"); - _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); - continue; + Console.WriteLine("浅库位状态异常,禁止出库,请检查浅库位状态"); + return; } - //else - //{ - // Console.WriteLine(DateTime.Now + $":{location.locationCode}浅库位状态异常,无法移库"); - // _logger.Info($"{location.locationCode}浅库位状态异常,无法移库"); - // continue; - //} } - wcsTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = item.rawOutstockId, - taskType = StaticTaskType.FiveRawToBack,//如果是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(); + + //else + //{ + // Console.WriteLine(DateTime.Now + $":{location.locationCode}浅库位状态异常,无法移库"); + // _logger.Info($"{location.locationCode}浅库位状态异常,无法移库"); + // continue; + //} } + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.rawOutstockId, + taskType = StaticTaskType.FiveRawToBack,//如果是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(); } } } @@ -2599,7 +2634,8 @@ namespace Khd.Core.Wcs.Wcs Thread.Sleep(3000); } - } + + } } From 9fbe84cf2c8cc213b209ae9b68001950cd00b730 Mon Sep 17 00:00:00 2001 From: liuwf Date: Sat, 7 Sep 2024 14:25:45 +0800 Subject: [PATCH 36/63] =?UTF-8?q?add-=E4=BF=AE=E6=94=B9CTU=E7=A7=BB?= =?UTF-8?q?=E5=BA=93=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=A7=BB=E5=BA=93=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Khd.Core.Domain/Models/WmsMove.cs | 120 ++++ src/Khd.Core.Domain/Models/WmsMoveDetail .cs | 92 +++ .../DefaultDbContext.cs | 2 + src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 522 +++++++++++------- src/Khd.Core.Wpf/Form/FormBoardT.xaml | 88 +-- src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs | 133 ++++- 6 files changed, 682 insertions(+), 275 deletions(-) create mode 100644 src/Khd.Core.Domain/Models/WmsMove.cs create mode 100644 src/Khd.Core.Domain/Models/WmsMoveDetail .cs diff --git a/src/Khd.Core.Domain/Models/WmsMove.cs b/src/Khd.Core.Domain/Models/WmsMove.cs new file mode 100644 index 0000000..33bc6a4 --- /dev/null +++ b/src/Khd.Core.Domain/Models/WmsMove.cs @@ -0,0 +1,120 @@ + +//----------------------------------------------------------------------- +// +// * Copyright (C) 2021 KEHAIDASOFT All Rights Reserved +// * version : 4.0.30319.42000 +// * author : khd by t4-2 +// +//----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Khd.Core.Domain.Models +{ + + [Table("wms_move")] + public class WmsMove + { + [Key] + [Column("move_id")] + public long MoveId { get; set; } + + [Required] + [Column("task_code")] + [MaxLength(128)] + public string TaskCode { get; set; } + + [Required] + [Column("warehouse_id")] + public long WarehouseId { get; set; } + + [Required] + [Column("ori_location_code")] + [MaxLength(64)] + public string OriLocationCode { get; set; } + + [Required] + [Column("target_location_code")] + [MaxLength(64)] + public string TargetLocationCode { get; set; } + + [Column("instock_batch")] + [MaxLength(64)] + public string InstockBatch { get; set; } + + [Column("material_id")] + public long? MaterialId { get; set; } + + [Column("plan_amount")] + public decimal? PlanAmount { get; set; } + + [Column("real_outstock_amount")] + public decimal RealOutstockAmount { get; set; } = 0.000000m; + + [Column("real_instock_amount")] + public decimal RealInstockAmount { get; set; } = 0.000000m; + + [Required] + [Column("operation_type")] + [MaxLength(1)] + public string OperationType { get; set; } + + [Required] + [Column("move_way")] + [MaxLength(1)] + public string MoveWay { get; set; } + + [Required] + [Column("move_type")] + [MaxLength(1)] + public string MoveType { get; set; } + + [Column("apply_reason")] + [MaxLength(500)] + public string ApplyReason { get; set; } + + [Column("audit_reason")] + [MaxLength(500)] + public string AuditReason { get; set; } + + [Required] + [Column("audit_status")] + [MaxLength(1)] + public string AuditStatus { get; set; } + + [Required] + [Column("execute_status")] + [MaxLength(1)] + public string ExecuteStatus { get; set; } + + [Column("apply_by")] + [MaxLength(64)] + public string ApplyBy { get; set; } + + [Column("apply_date")] + public DateTime? ApplyDate { get; set; } + + [Column("audit_by")] + [MaxLength(64)] + public string AuditBy { get; set; } + + [Column("audit_date")] + public DateTime? AuditDate { get; set; } + + [Column("update_by")] + [MaxLength(64)] + public string UpdateBy { get; set; } + + [Column("update_date")] + public DateTime? UpdateDate { get; set; } + + [Column("begin_time")] + public DateTime? BeginTime { get; set; } + + [Column("end_time")] + public DateTime? EndTime { get; set; } + } +} + diff --git a/src/Khd.Core.Domain/Models/WmsMoveDetail .cs b/src/Khd.Core.Domain/Models/WmsMoveDetail .cs new file mode 100644 index 0000000..4291ce8 --- /dev/null +++ b/src/Khd.Core.Domain/Models/WmsMoveDetail .cs @@ -0,0 +1,92 @@ + +//----------------------------------------------------------------------- +// +// * Copyright (C) 2021 KEHAIDASOFT All Rights Reserved +// * version : 4.0.30319.42000 +// * author : khd by t4-2 +// +//----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Khd.Core.Domain.Models +{ + + [Table("wms_move_detail")] + public class WmsMoveDetail + { + [Key] + [Column("move_detail_id")] + public long MoveDetailId { get; set; } + + [Required] + [Column("move_id")] + public long MoveId { get; set; } + + [Column("material_barcode")] + [MaxLength(64)] + public string? MaterialBarcode { get; set; } + + [Column("instock_batch")] + [MaxLength(64)] + public string? InstockBatch { get; set; } + + [Required] + [Column("material_id")] + public long MaterialId { get; set; } + + [Column("location_code")] + [MaxLength(64)] + public string? LocationCode { get; set; } + + [Required] + [Column("plan_amount")] + public decimal PlanAmount { get; set; } + + [Column("real_amount")] + public decimal? RealAmount { get; set; } + + [Column("real_instock_amount")] + public decimal? RealInstockAmount { get; set; } + + [Required] + [Column("execute_status")] + [MaxLength(1)] + public string ExecuteStatus { get; set; } + + [Column("execute_person")] + [MaxLength(64)] + public string? ExecutePerson { get; set; } + + [Column("execute_time")] + public DateTime? ExecuteTime { get; set; } + + [Column("execute_end_time")] + public DateTime? ExecuteEndTime { get; set; } + + [Column("machine_name")] + [MaxLength(64)] + public string? MachineName { get; set; } + + [Column("create_by")] + [MaxLength(64)] + public string? CreateBy { get; set; } + + [Column("create_date")] + public DateTime? CreateDate { get; set; } + + [Column("update_by")] + [MaxLength(64)] + public string? UpdateBy { get; set; } + + [Column("update_date")] + public DateTime? UpdateDate { get; set; } + + [Column("active_flag")] + [MaxLength(1)] + public string? ActiveFlag { get; set; } + } +} + diff --git a/src/Khd.Core.EntityFramework/DefaultDbContext.cs b/src/Khd.Core.EntityFramework/DefaultDbContext.cs index 2e72f73..6051089 100644 --- a/src/Khd.Core.EntityFramework/DefaultDbContext.cs +++ b/src/Khd.Core.EntityFramework/DefaultDbContext.cs @@ -19,6 +19,8 @@ namespace Khd.Core.EntityFramework public DbSet WmsInventoryCheckDetail { get; set; } public DbSet MesBaseMaterialInfo { get; set; } public DbSet WmsRawReturn { get; set; } + public DbSet WmsMove { get; set; } + public DbSet WmsMoveDetail { get; set; } public DbSet WmsRawReturnDetail { get; set; } public DbSet WcsTaskManual { get; set; } public DbSet BaseDictionary { get; set; } diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 72f19eb..8f6b150 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -943,14 +943,19 @@ namespace Khd.Core.Wcs.Wcs var wmsRawStocks = dbContext.WmsRawStock .Where(t => t.saleOrderId == (wmsRawOutstock.saleOrderId == null ? 0 : wmsRawOutstock.saleOrderId)) .Where(t => t.warehouseId == 311) - .ToList(); + .Where(t => t.materialId == wmsRawOutstock.materialId) + .Where(t => t.totalAmount > t.frozenAmount) + .ToList(); + var wmsRawStockLocations = wmsRawStocks.Select(x => x.locationCode).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(); + .Where(t => t.warehouseId == 311) + .Where(t => t.locationStatus == "1").ToList(); var wmsBaseLocations = AllWmsBaseLocations .Where(t => t.warehouseId == 311) + .Where(t => wmsRawStockLocations.Contains(t.locationCode)) .ToList(); var bill = from a in wmsBaseLocations from b in wmsRawStocks @@ -961,196 +966,207 @@ namespace Khd.Core.Wcs.Wcs bill = bill.OrderBy(t => t.b.instockDate.Value.Date);//按某个时间段 foreach (var item in bill) { - var fistbill = bill.First(); - if (fistbill != null) + // 目标库位 + var fistbill = item; + + int? locRow = 0; + if (fistbill.a.locRow % 2 == 1) { - int? locRow = 0; - if (fistbill.a.locRow % 2 == 1) + locRow = fistbill.a.locRow + 1; + } + else + { + locRow = fistbill.a.locRow - 1; + } + wmsBaseLocation = fistbill.a; + + // 目标库位处于深库位,判断是否需要移库浅库位 + if (wmsBaseLocation.locDeep == 1) + { + int? row = 0; + if (wmsBaseLocation.locRow % 2 == 1) { - locRow = fistbill.a.locRow + 1; + row = wmsBaseLocation.locRow + 1; } else { - locRow = fistbill.a.locRow - 1; + row = wmsBaseLocation.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) + + 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) { - if (lastbill.b.instockDate != null && fistbill.b.instockDate != null) + //对应的浅库位满足条件,直接出浅库位 + wmsBaseLocation = lowLocationBill.a; + } + else + { + //目标出库库位对应的浅库位 + WmsBaseLocation? fromBaseLocation = dbContext.WmsBaseLocation.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)&& fromBaseLocation.locationStatus=="1") { - if (wmsBaseLocation.locDeep == 1) + // 浅库位有库存 + WmsRawStock? wmsRawStock1 = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode); + if (wmsRawStock1 != null) { - int? row = 0; - if (wmsBaseLocation.locRow % 2 == 1) + #region 找寻移库目标库位 + // 寻找移库目的库位 + WmsBaseLocation? toLocation = null; + + var moveLocationList = AllWmsBaseLocations.Where(t => t.warehouseId == fromBaseLocation.warehouseId) + .Where(t => t.warehouseId != fromBaseLocation.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode)).OrderBy(t => t.locDeep).ToList(); + + foreach (WmsBaseLocation itemLocation in moveLocationList) { - 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)) + + if (itemLocation.locDeep == 1) { - WmsRawStock? wmsRawStock1 = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode); - if (wmsRawStock1 != null) + bool hasLocation = AllWmsBaseLocations + .Where(t => t.locRow == (itemLocation.locRow % 2 == 1 ? (itemLocation.locRow + 1) : (itemLocation.locRow - 1))) + .Where(t => t.locColumn == itemLocation.locColumn) + .Where(t => t.locationStatus == "1" && string.IsNullOrEmpty(t.containerCode)) + .Any(); + if (!hasLocation) { - 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) - { - 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(), - taskType = StaticTaskType.ThirdRemove, - 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); - } - else - { - continue; - } + Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + continue; } else { - continue; + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; } + } + else + { + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; + } + } - } - } - } - 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) - { - MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); - if (mesBaseBarcodeInfo != null) - { - WmsRawOutstockDetail wmsRawOutstockDetail = new WmsRawOutstockDetail() + if (toLocation == 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() + // 找寻下一个可出库库存 + continue; + } + + var RemoveTask = new WcsTask() { objid = StaticData.SnowId.NextId(), - orderId = wmsRawOutstock.rawOutstockId, - taskType = StaticTaskType.ThirdRawToFlip, - containerNo = wmsRawStock.palletInfoCode, + taskType = StaticTaskType.ThirdRemove, + containerNo = wmsRawStock1.palletInfoCode, createBy = "WCS", - createTime = DateTime.Now, + createTime = DateTime.Now.AddSeconds(-10), taskStatus = 0, - materialId = wmsRawOutstock.materialId, - currPointId = wmsBaseLocation.locationId, - currPointNo = wmsBaseLocation.locationCode, + currPointId = fromBaseLocation.locationId, + currPointNo = fromBaseLocation.locationCode, nextPointId = baseEquip.objid, nextPointNo = baseEquip.equipNo, - endPointId = endEquip.objid, - endPointNo = endEquip.equipNo, - equipmentNo = endEquip.equipNo, + endPointId = toLocation.locationId, + endPointNo = toLocation.locationCode, + equipmentNo = baseEquip.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); + 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); - dbContext.SaveChanges(); + #endregion + + } + + } + 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) + { + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); + if (mesBaseBarcodeInfo != null) + { + 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 = StaticTaskType.ThirdRawToFlip, + containerNo = wmsRawStock.palletInfoCode, + 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(); + } + } + } + } } } @@ -1343,29 +1359,34 @@ namespace Khd.Core.Wcs.Wcs } else { - WmsBaseLocation? wmsBaseLocation = AllWmsBaseLocations.Where(t => t.locRow == row) + // 外侧浅库位 + 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") + if ( !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1") { + WmsProductStock? wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); if (wmsProductStock != 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(); + #region 找寻移库目标库位 + + WmsBaseLocation? toLocation = null; - if (toLocation != null) + + var moveLocationList = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.warehouseId != location.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode) && t.locationStatus == "1").OrderBy(t => t.locDeep).ToList(); + + foreach (WmsBaseLocation itemLocation in moveLocationList) { - if (toLocation.locDeep == 1) + + if (itemLocation.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) + .Where(t => t.locRow == (itemLocation.locRow % 2 == 1 ? (itemLocation.locRow + 1) : (itemLocation.locRow - 1))) + .Where(t => t.locColumn == itemLocation.locColumn) + .Where(t => t.locationStatus == "1" && string.IsNullOrEmpty(t.containerCode)) .Any(); if (!hasLocation) { @@ -1373,53 +1394,130 @@ namespace Khd.Core.Wcs.Wcs _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); continue; } - } - var RemoveTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = item.productOutstockId, - taskType = StaticTaskType.FiveRemove, - containerNo = wmsProductStock.palletInfoCode, - 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); + else + { + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; + } + + } + else + { + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; + } - 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 + if (toLocation == null) { + // 找寻下一个可出库库存 continue; } + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = StaticTaskType.SecondRemove, + 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); + #endregion + //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.productOutstockId, + // taskType = StaticTaskType.FiveRemove, + // containerNo = wmsProductStock.palletInfoCode, + // 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); + //} + //else + //{ + // continue; + //} } else { continue; } } - else if (wmsBaseLocation != null && wmsBaseLocation.locationStatus != "1") + else { Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库"); _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); @@ -1529,7 +1627,9 @@ namespace Khd.Core.Wcs.Wcs //获取最早入库时间 foreach (var item in proOutStock) { - + task = dbContext.WcsTask.Where(t => t.nextPointId == 8 && t.taskStatus <= 7).Any(); + if (task) break; + 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) @@ -1539,6 +1639,7 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.delFlag == "0") .Where(t => t.locationScrapType == "1") .Where(t => t.locationStatus == "1") + .Where(t => t.warehouseId == item.warehouseId) .Where(t => t.warehouseId == item.warehouseId).ToList(); var wmsBaseLocations = AllWmsBaseLocations .Where(t => t.warehouseId == item.warehouseId) @@ -1553,7 +1654,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.SaveChanges(); continue; } - + var bill = from a in wmsBaseLocations from b in proStock where a.locationCode == b.locationCode @@ -1591,6 +1692,7 @@ namespace Khd.Core.Wcs.Wcs } else { + // 目标出库库位对应的浅库位 WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row) .Where(t => t.locColumn == location.locColumn) diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index ea57f88..3535b2b 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -16,11 +16,11 @@ > - - + + - - + + @@ -389,24 +389,24 @@ - - + - - - - + + + + - - + - + @@ -1297,9 +1297,9 @@ - + - + @@ -2099,14 +2099,14 @@ - - - - + + + + - - - + + + @@ -2125,7 +2125,7 @@ - - + @@ -2624,7 +2625,7 @@ - + @@ -2633,7 +2634,7 @@ - + @@ -2641,35 +2642,40 @@ - + - + - + - + - + -