From 60d9f982d5cfe3a0e625e21a50baf703ac0f7443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83?= <15095123350@163.com> Date: Mon, 29 Jul 2024 16:16:15 +0800 Subject: [PATCH] 20240729 --- src/Khd.Core.Wcs/Global/StaticData.cs | 2 +- src/Khd.Core.Wcs/MainCentralControl.cs | 4 + src/Khd.Core.Wcs/SystemData.cs | 38 +++++++- src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 47 +++++++--- src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs | 60 ++++++++++-- src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs | 7 +- src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs | 3 +- src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs | 30 +++++- src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs | 14 ++- src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs | 1 + src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs | 24 +++-- src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs | 26 +++++- src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs | 2 +- src/Khd.Core.Wpf/Form/FormBoardT.xaml | 35 ++++--- src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs | 91 ++++++++++++++----- src/Khd.Core.Wpf/TaskForm/AddTask.xaml.cs | 1 + .../TaskForm/SelectOutRawForm.xaml.cs | 2 +- 17 files changed, 308 insertions(+), 79 deletions(-) diff --git a/src/Khd.Core.Wcs/Global/StaticData.cs b/src/Khd.Core.Wcs/Global/StaticData.cs index 76f3d43..6918588 100644 --- a/src/Khd.Core.Wcs/Global/StaticData.cs +++ b/src/Khd.Core.Wcs/Global/StaticData.cs @@ -64,7 +64,7 @@ namespace Khd.Core.Wcs.Global public static List basePlcs = new List(); public static List PlcConfigs { get; set; } public static int DeleteLogDay { get; internal set; } - public static List BigContainerCodes = new List(){ "JYHB01020001", "JYHB01020002", "JYHB01020003", "JYHB01020004" }; + public static List BigContainerCodes = new List(){ "JYHB01020001", "JYHB01020002", "JYHB01020003", "JYHB01020004"}; public static Dictionary> PlcPoints = new Dictionary>(); public static Dictionary PlcDic = new Dictionary(); diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index e7e6557..2ff49fb 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -96,6 +96,10 @@ namespace Khd.Core.Wcs ThirdFloorAGV thirdFloorAGV = new(_host, ThirdFloorAgvEquip.floorNo.Value); thirdFloorAGV.StartPoint(); + //四楼接驳位 + FourthFloorPoint fourthFloorPoint = new FourthFloorPoint(_host, 4); + fourthFloorPoint.StartPoint(); + //五层接驳位 var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First(); FiveFloorPoint fifthFloorPoint = new(_host, FifthBaseFloorEquip.floorNo.Value); diff --git a/src/Khd.Core.Wcs/SystemData.cs b/src/Khd.Core.Wcs/SystemData.cs index e6ca263..f65a295 100644 --- a/src/Khd.Core.Wcs/SystemData.cs +++ b/src/Khd.Core.Wcs/SystemData.cs @@ -1,4 +1,5 @@ -using Khd.Core.EntityFramework; +using Khd.Core.Domain.Models; +using Khd.Core.EntityFramework; namespace Khd.Core.Wcs { @@ -28,5 +29,40 @@ namespace Khd.Core.Wcs } public static object outStockLock = new object(); + /// + /// 出入库锁定浅库位 + /// + /// + /// + public static void LockOutLocation(WmsBaseLocation wmsBaseLocation,DefaultDbContext dbContext) + { + if (wmsBaseLocation.locDeep == 1) + { + WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation.Where(t => t.locDeep == 2 && t.locRow == wmsBaseLocation.locRow && t.locColumn == (wmsBaseLocation.locColumn % 2 == 0 ? wmsBaseLocation.locColumn - 1 : wmsBaseLocation.locColumn + 1)).FirstOrDefault(); + if(wmsLocation != null) + { + wmsLocation.locationStatus = "2"; + dbContext.Update(wmsLocation); + } + } + } + + /// + /// 出入库解锁浅库位 + /// + /// + /// + public static void UnLockOutLocation(WmsBaseLocation wmsBaseLocation, DefaultDbContext dbContext) + { + if (wmsBaseLocation.locDeep == 1) + { + WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation.Where(t => t.locDeep == 2 && t.locRow == wmsBaseLocation.locRow && t.locColumn == (wmsBaseLocation.locColumn % 2 == 0 ? wmsBaseLocation.locColumn - 1 : wmsBaseLocation.locColumn + 1)).FirstOrDefault(); + if (wmsLocation != null) + { + wmsLocation.locationStatus = "1"; + dbContext.Update(wmsLocation); + } + } + } } } diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 563a445..983fcbd 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -387,7 +387,7 @@ namespace Khd.Core.Wcs.Wcs .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 var bill = from a in mesBasePalletInfos - join b in wmsBaseLocations.Where(t => t.locDeep == 1&&t.returnFlag=="1") on a.palletInfoCode equals b.containerCode + join b in wmsBaseLocations.Where(t => t.locDeep == 1 && t.returnFlag == "1") on a.palletInfoCode equals b.containerCode select new { b };//等于当前任务的物料的托盘的库位信息 var outBill = from a in bill @@ -400,10 +400,10 @@ namespace Khd.Core.Wcs.Wcs select new { a, b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 WmsBaseLocation? wmsBaseLocation = null; - wmsBaseLocation ??= outBill.Where(t=> !cannotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 + wmsBaseLocation ??= outBill.Where(t => !cannotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 - //深浅库位问题?库位入库优先级等 + //深浅库位问题?库位入库优先级等 var AgvEquip = StaticData.BaseEquip.First(t => t.objid == 28);//5楼叉车 if (wmsBaseLocation != null) @@ -462,6 +462,7 @@ namespace Khd.Core.Wcs.Wcs rawInstockId = wmsRawInstock.rawInstockId, taskCode = wmsRawInstock.taskCode, }; + SystemData.LockOutLocation(wmsBaseLocation, dbContext); dbContext.Add(wmsRawInstockDetail); dbContext.Update(wmsBaseLocation); dbContext.Add(newTask); @@ -503,13 +504,17 @@ namespace Khd.Core.Wcs.Wcs WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 9 || t.nextPointId == 8).OrderBy(t => t.createBy).FirstOrDefault(); if (wcsTaskManual != null) { - WcsTask wcsTask = CoreMapper.Map(wcsTaskManual); - wcsTask.createTime = DateTime.Now; - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - dbContext.Add(wcsTask); - dbContext.Add(wcsTaskLog); - dbContext.Remove(wcsTaskManual); - dbContext.SaveChanges(); + var equip = dbContext.BaseEquip.Where(t => t.objid == wcsTaskManual.endPointId).FirstOrDefault(); + if (equip != null && equip.equipStatus == 0) + { + WcsTask wcsTask = CoreMapper.Map(wcsTaskManual); + wcsTask.createTime = DateTime.Now; + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.Remove(wcsTaskManual); + dbContext.SaveChanges(); + } } } } @@ -735,7 +740,7 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.locationScrapType == "1") .Where(t => t.locationStatus == "1") .Where(t => t.containerCode == null) - .Where(t=>t.warehouseId==521) + .Where(t => t.warehouseId == 521) .OrderByDescending(t => t.locColumn) .FirstOrDefault(); if (wmsBaseLocation != null) @@ -956,6 +961,8 @@ namespace Khd.Core.Wcs.Wcs useFlag = 1, qty = 1 }; + SystemData.LockOutLocation(toLocation, dbContext); + SystemData.LockOutLocation(fromBaseLocation, dbContext); toLocation.locationStatus = "4"; toLocation.updateBy = "WCS"; toLocation.updateTime = DateTime.Now; @@ -1034,6 +1041,7 @@ namespace Khd.Core.Wcs.Wcs useFlag = 1, qty = 1 }; + SystemData.LockOutLocation(wmsBaseLocation, dbContext); wmsBaseLocation.locationStatus = "6"; dbContext.Update(wmsBaseLocation); dbContext.Add(wmsRawOutstockDetail); @@ -1278,6 +1286,9 @@ namespace Khd.Core.Wcs.Wcs useFlag = 1, qty = 1 }; + SystemData.LockOutLocation(toLocation, dbContext); + SystemData.LockOutLocation(wmsBaseLocation, dbContext); + toLocation.locationStatus = "4"; toLocation.updateBy = "WCS"; toLocation.updateTime = DateTime.Now; @@ -1345,6 +1356,7 @@ namespace Khd.Core.Wcs.Wcs useFlag = 1, qty = 1 }; + SystemData.LockOutLocation(location, dbContext); location.locationStatus = "6"; location.updateBy = "WCS"; location.updateTime = DateTime.Now; @@ -1523,6 +1535,8 @@ namespace Khd.Core.Wcs.Wcs useFlag = 1, qty = 1 }; + SystemData.LockOutLocation(toLocation, dbContext); + SystemData.LockOutLocation(wmsBaseLocation, dbContext); toLocation.locationStatus = "4"; toLocation.updateBy = "WCS"; toLocation.updateTime = DateTime.Now; @@ -1589,6 +1603,7 @@ namespace Khd.Core.Wcs.Wcs productOutstockDetailId = StaticData.SnowId.NextId(), productBarcode = mesBasePalletInfo.materialBarcode, }; + SystemData.LockOutLocation(location, dbContext); location.locationStatus = "6"; location.updateBy = "WCS"; location.updateTime = DateTime.Now; @@ -1808,6 +1823,10 @@ namespace Khd.Core.Wcs.Wcs BaseEquip endStationCodeEquip = dbContext.BaseEquip.First(t => t.objid == 10); if (!string.IsNullOrEmpty(endStationCodeEquip.endStationCode)) { + if (item.endStationCode != endStationCodeEquip.endStationCode) + { + continue; + } bool CreateSuccess = false; bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 11).Any(); if (!hasTask) @@ -1972,7 +1991,7 @@ namespace Khd.Core.Wcs.Wcs } BaseEquip startStationEquip = StaticData.BaseEquip.First(t => t.objid == 21); BaseEquip bearAgvEquip = StaticData.BaseEquip.First(t => t.objid == 10); - BaseEquip endStationEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode); + BaseEquip endStationEquip = StaticData.BaseEquip.First(t => t.equipNo == endStationCodeEquip.endStationCode); hasTask = dbContext.WcsTask.Where(t => t.taskType == 32).Any(); if (!hasTask) { @@ -2002,6 +2021,8 @@ namespace Khd.Core.Wcs.Wcs fromFloorNo = 5, }; dbContext.Add(bearAgvTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(bearAgvTask); + dbContext.Add(wcsTaskLog); } if (item.beginTime == null) @@ -2195,6 +2216,7 @@ namespace Khd.Core.Wcs.Wcs useFlag = 1, qty = qty }; + //location是出库的库位,mesBaseBarcodeInfo是条码信息表数据,item是出库申请单 WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail() { rawOutstockDetailId = StaticData.SnowId.NextId(), @@ -2220,6 +2242,7 @@ namespace Khd.Core.Wcs.Wcs { item.beginTime = DateTime.Now; } + SystemData.LockOutLocation(location, dbContext); dbContext.Add(wmsProductOutstockDetail); location.locationStatus = "6"; location.updateBy = "WCS"; diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index 49da482..741e77d 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -11,6 +11,7 @@ using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; +using System.ComponentModel; using System.Transactions; using Z.EntityFramework.Plus; @@ -416,7 +417,6 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskStatus == 5) { - if (item.taskType == 66)//移库 { Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo); @@ -430,7 +430,7 @@ namespace Khd.Core.Wcs.Wcs wmsRawStock.locationCode = item.endPointNo; dbContext.Update(wmsRawStock); } - else if(wmsRawStock == null) + else if (wmsRawStock == null) { var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo); if (wmsProductStock != null) @@ -448,9 +448,13 @@ namespace Khd.Core.Wcs.Wcs continue; } WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First(); + WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First(); + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); + SystemData.UnLockOutLocation(toLocation, dbContext); + dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation { - returnFlag="0", + returnFlag = "0", locationStatus = "1", containerCode = null, updateTime = DateTime.Now @@ -458,7 +462,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation { locationStatus = "1", - returnFlag=wmsBaseLocation.returnFlag, + returnFlag = wmsBaseLocation.returnFlag, containerCode = item.containerNo, updateTime = DateTime.Now }); @@ -482,6 +486,7 @@ namespace Khd.Core.Wcs.Wcs if (wmsProductOutstockDetail != null && wmsProductOutstock != null) { wmsProductOutstockDetail.executeStatus = "2"; + wmsProductOutstockDetail.endTime = DateTime.Now; dbContext.Update(wmsProductOutstockDetail); wmsProductOutstock.outstockQty += 1; if (wmsProductOutstock.applyQty <= wmsProductOutstock.outstockQty) @@ -496,6 +501,7 @@ namespace Khd.Core.Wcs.Wcs wmsBaseLocation.updateTime = DateTime.Now; wmsBaseLocation.updateBy = "WCS"; dbContext.Update(wmsBaseLocation); + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); dbContext.WmsProductStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete(); BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == 5); WcsTask newTask = CoreMapper.Map(item); @@ -527,7 +533,10 @@ namespace Khd.Core.Wcs.Wcs wmsRawOutstock.realOutstockAmount += 1; wmsRawOutstockDetail.executeStatus = "2"; wmsRawOutstock.executeStatus = "2"; + wmsRawOutstock.endTime = DateTime.Now; + wmsRawOutstockDetail.outstockTime = DateTime.Now; WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); wmsBaseLocation.returnFlag = "0"; wmsBaseLocation.locationStatus = "1"; wmsBaseLocation.containerCode = null; @@ -562,6 +571,7 @@ namespace Khd.Core.Wcs.Wcs if (wmsProductInstockDetail != null) { wmsProductInstock.executeStatus = "2"; + wmsProductInstock.endTime = DateTime.Now; dbContext.Update(wmsProductInstock); WmsProductStock wmsProductStock = new WmsProductStock() { @@ -590,6 +600,7 @@ namespace Khd.Core.Wcs.Wcs }; BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); wmsProductInstockDetail.executeStatus = "2"; + wmsProductInstockDetail.instockDate = DateTime.Now; startEquip.emptyCount = 0; dbContext.Update(wmsProductInstockDetail); dbContext.Update(startEquip); @@ -613,6 +624,8 @@ namespace Khd.Core.Wcs.Wcs wmsRawOutStock.realOutstockAmount += 1; wmsRawOutstockDetail.executeStatus = "2"; wmsRawOutStock.executeStatus = "2"; + wmsRawOutStock.endTime = DateTime.Now; + wmsRawOutstockDetail.outstockTime = DateTime.Now; dbContext.Update(wmsRawOutStock); dbContext.Update(wmsRawOutstockDetail); WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); @@ -620,6 +633,7 @@ namespace Khd.Core.Wcs.Wcs wmsBaseLocation.containerCode = null; wmsBaseLocation.updateTime = DateTime.Now; wmsBaseLocation.updateBy = "WCS"; + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).FirstOrDefault(); if (wmsRawStock != null) { @@ -672,6 +686,23 @@ namespace Khd.Core.Wcs.Wcs updateDate = DateTime.Now, warehouseId = 511, }; + WmsRawInstock wmsRawInstock = new WmsRawInstock() + { + 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, + poNo = mesBaseBarcodeInfo.poNo, + warehouseId = 511 + }; + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); + dbContext.Add(wmsRawInstock); dbContext.Add(wmsRawStock); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); startEquip.emptyCount = 0; @@ -682,9 +713,9 @@ namespace Khd.Core.Wcs.Wcs dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); } } - + } - else if (item.taskType == 47) + else if (item.taskType == 47)//原材料入库 { Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo); _logger.Info("五楼Agv完成任务成功:" + item.ToJsonString()); @@ -722,6 +753,23 @@ namespace Khd.Core.Wcs.Wcs updateDate = DateTime.Now, warehouseId = 511, }; + WmsRawInstock wmsRawInstock = new WmsRawInstock() + { + 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, + poNo = mesBaseBarcodeInfo.poNo, + warehouseId = 511 + }; + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); + dbContext.Add(wmsRawInstock); wmsBaseLocation.returnFlag = "0"; BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 5); lineEquip.equipStatus = 0; diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index 3a6bb9c..55021c9 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -99,10 +99,6 @@ namespace Khd.Core.Wcs.Wcs var waring = StaticData.PlcDic[1].Read(CtuLineWaring.plcpointAddress); if (rfid != null && isArrive != null && receiveMaterial != null && Convert.ToInt32(receiveMaterial) == 1 && Convert.ToInt32(isArrive) == 1) { - if (Convert.ToBoolean(waring)) - { - StaticData.PlcDic[1].WriteToPoint(CtuLineWaring.plcpointAddress, "false", CtuLineWaring.plcpointLength.ToString()); - } rfid = rfid[rfid.IndexOf('C')..]; WcsTask? task = dbContext.WcsTask.FirstOrDefault(t => t.containerNo == rfid); if (task == null) @@ -141,6 +137,7 @@ namespace Khd.Core.Wcs.Wcs WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); + StaticData.PlcDic[1].WriteToPoint(CtuLineWaring.plcpointAddress, false, CtuLineWaring.plcpointLength.ToString()); } } else @@ -188,6 +185,7 @@ namespace Khd.Core.Wcs.Wcs WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); + StaticData.PlcDic[1].WriteToPoint(CtuLineWaring.plcpointAddress, false, CtuLineWaring.plcpointLength.ToString()); } } } @@ -227,6 +225,7 @@ namespace Khd.Core.Wcs.Wcs WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); + StaticData.PlcDic[1].WriteToPoint(CtuLineWaring.plcpointAddress, false, CtuLineWaring.plcpointLength.ToString()); } } } diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs index e78a00a..ca8ecea 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs @@ -98,7 +98,7 @@ namespace Khd.Core.Wcs.Wcs } continue; } - else + else//小托盘 { if (wcsTask.taskStatus == 5)//入库,提升机任务是完成状态 { @@ -194,6 +194,7 @@ namespace Khd.Core.Wcs.Wcs wmsBaseLocation.locationStatus = "2"; dbContext.Update(wmsBaseLocation); dbContext.Remove(wcsTask); + SystemData.LockOutLocation(wmsBaseLocation, dbContext); dbContext.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); diff --git a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs index 17180d4..1ae3a36 100644 --- a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs @@ -21,7 +21,7 @@ namespace Khd.Core.Wcs.Wcs private readonly IHost _host; private readonly BasePlcpoint LineRFID; private readonly BasePlcpoint LineSignal; - public FourthFloorPoint(int floor, Plc.S7.Plc plc, IHost host) + public FourthFloorPoint( IHost host,int floor) { Floor = floor; this._host = host; @@ -35,6 +35,7 @@ namespace Khd.Core.Wcs.Wcs MonitorInLocatorPointThread.IsBackground = true; MonitorInLocatorPointThread.Name = "FourthFloorPoint"; MonitorInLocatorPointThread.Start(); + Console.WriteLine($"{DateTime.Now}:四楼接驳位线程开始"); } private void MonitorInLocatorPoint() @@ -59,13 +60,36 @@ namespace Khd.Core.Wcs.Wcs { if (wcsTask.taskStatus == 5)//提升机上来的 { - dbContext.Remove(wcsTask); - dbContext.SaveChanges(); + //清除托盘信息 + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == rfid); + if (mesBasePalletInfo != null) + { + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.palletInfoCode == rfid).FirstOrDefault(); + if (mesBaseBarcodeInfo != null) + { + mesBaseBarcodeInfo.palletInfoCode = null; + dbContext.Update(mesBaseBarcodeInfo); + } + mesBasePalletInfo.bindAmount = null; + mesBasePalletInfo.bindAmount = 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(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); + dbContext.Remove(wcsTask); + dbContext.SaveChanges(); + } } } else { bool hasTask = dbContext.WcsTask.Where(t => t.currPointId == 4 || (t.endPointId == 4 && t.taskStatus > 0)).Any(); + //如果有任务往当前楼层送,报警 BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 4); BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.objid == 6); if (!hasTask) diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index 8c40543..a6b8e2d 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -189,7 +189,7 @@ namespace Khd.Core.Wcs.Wcs _logger.Info("二楼Agv下发任务失败" + item.taskType + result); } } - else if (item.taskType == 57)//周转位-小包入口 + else if (item.taskType == 57)//周转位-提升机 { var startPoint = StaticData.BaseEquip.First(t => t.objid == item.currPointId); var agvTask = new RequestAGVTaskDto @@ -440,7 +440,6 @@ namespace Khd.Core.Wcs.Wcs else if (item.taskType == 59)//周转位-小包入口 { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); - BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); var agvTask = new RequestAGVTaskDto { @@ -454,7 +453,7 @@ namespace Khd.Core.Wcs.Wcs }, new () { - positionCode=endEquip.agvPositionCode, + positionCode=inEquip.agvPositionCode, type="00" } }, @@ -639,6 +638,7 @@ namespace Khd.Core.Wcs.Wcs //dbContext.Update(wmsProductInstockDetail); dbContext.Add(wmsProductStock); dbContext.Update(wmsBaseLocation); + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); //dbContext.Update(wmsProductInstock); dbContext.Remove(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); @@ -649,7 +649,7 @@ namespace Khd.Core.Wcs.Wcs //} } } - else if (item.taskType == 50) + else if (item.taskType == 50)//成品出库 { WmsProductOutstock? wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == item.orderId); if (wmsProductOutstock != null) @@ -666,10 +666,12 @@ namespace Khd.Core.Wcs.Wcs wmsProductOutstock.executeStatus = "2"; } wmsProductOutstockDetail.executeStatus = "2"; + wmsProductOutstockDetail.endTime = DateTime.Now; wmsBaseLocation.locationStatus = "1"; wmsBaseLocation.containerCode = null; item.nextPointId = 2; item.taskStatus = 8; + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); dbContext.Remove(wmsProductStock); dbContext.Update(wmsBaseLocation); dbContext.Update(wmsProductOutstockDetail); @@ -740,6 +742,10 @@ namespace Khd.Core.Wcs.Wcs try { var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo); + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First(); + WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First(); + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); + SystemData.UnLockOutLocation(toLocation, dbContext); if (wmsProductStock != null) { wmsProductStock.locationCode = item.endPointNo; diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index 67d4c0e..ff3c316 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -309,6 +309,7 @@ namespace Khd.Core.Wcs.Wcs taskType = 49, qty = 1, }; + SystemData.LockOutLocation(wmsBaseLocation, dbContext); dbContext.Add(wcsTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); dbContext.Add(wcsTaskLog); diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs index 3c5cb73..9e378f3 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs @@ -19,7 +19,7 @@ namespace Khd.Core.Wcs.Wcs private readonly BasePlcpoint LineRFID; private readonly BasePlcpoint LineSignal; int FloorNo { get; set; } - public SecondFloorPoint(IHost host,int floor) + public SecondFloorPoint(IHost host, int floor) { this._host = host; FloorNo = floor; @@ -58,7 +58,6 @@ namespace Khd.Core.Wcs.Wcs //入库任务 var rfid = StaticData.PlcDic[0].ReadRFID(LineRFID.plcpointAddress); var isSignal = StaticData.PlcDic[0].Read(LineSignal.plcpointAddress); - var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress); if (rfid != null && isSignal != null) { @@ -72,9 +71,19 @@ namespace Khd.Core.Wcs.Wcs { if (wcsTask.taskStatus == 5 && (wcsTask.nextPointId == 6 || wcsTask.nextPointId == 2))//入托盘入口,提升机任务是完成状态 { + object? agvPutValue = null; + try + { + agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress); + } + catch + { + + } if (wcsTask.taskType != 99)//不是人工任务 { - if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 0)//小包入口要料 + bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == inEquip.objid).Any(); + if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 0&&!hasTask)//小包入口要料 { dbContext.WcsTask.Remove(wcsTask);//删除原本的任务 WcsTask newTask = CoreMapper.Map(wcsTask); @@ -98,7 +107,7 @@ namespace Khd.Core.Wcs.Wcs _logger.Info("二楼接驳位生成任务入库成功,托盘号:" + rfid); Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + rfid); } - else if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1) + else { BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);//二楼周转位 if (endEquip != null) @@ -131,7 +140,8 @@ namespace Khd.Core.Wcs.Wcs { if (wcsTask.endPointId == 36)//目的地是小包入口 { - if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1)//小包入口要料 + bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == inEquip.objid).Any(); + if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 0 && !hasTask)//小包入口要料 { dbContext.WcsTask.Remove(wcsTask); WcsTask newTask = CoreMapper.Map(wcsTask); @@ -155,7 +165,7 @@ namespace Khd.Core.Wcs.Wcs _logger.Info("二楼接驳位生成任务入库成功,托盘号:" + rfid); Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + rfid); } - else if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 0) + else { BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0); if (endEquip != null) @@ -306,7 +316,7 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - + } else { diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index 92a62b6..9edb430 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -485,7 +485,6 @@ namespace Khd.Core.Wcs.Wcs } else { - { if (item.taskStatus == 3) { @@ -543,6 +542,10 @@ namespace Khd.Core.Wcs.Wcs try { var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.endPointNo).FirstOrDefault(); + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First(); + WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First(); + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); + SystemData.UnLockOutLocation(toLocation, dbContext); if (wmsRawStock != null) { wmsRawStock.locationCode = item.endPointNo; @@ -608,6 +611,23 @@ namespace Khd.Core.Wcs.Wcs warehouseFloor = 3, warehouseId = 311 }; + WmsRawInstock wmsRawInstock = new WmsRawInstock() + { + 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, + poNo = mesBaseBarcodeInfo.poNo, + warehouseId = 311 + }; + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); + dbContext.Add(wmsRawInstock); dbContext.Add(wmsRawStock); dbContext.Update(wmsBaseLocation); dbContext.Remove(item); @@ -646,21 +666,23 @@ namespace Khd.Core.Wcs.Wcs WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == item.orderId); if (wmsRawOutstock != null) { - wmsRawOutstock.realOutstockAmount += 1; WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.rawOutstockId == wmsRawOutstock.rawOutstockId && t.executeStatus == "1"); if (wmsRawOutstockDetail != null) { wmsRawOutstockDetail.executeStatus = "2"; + wmsRawOutstockDetail.outstockTime = DateTime.Now; WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault(); if (wmsRawStock != null) { BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 31); endEquip.emptyCount = 1; + wmsRawOutstock.realOutstockAmount += 1; if (wmsRawOutstock.realOutstockAmount >= wmsRawOutstock.outstockAmount) { wmsRawOutstock.endTime = DateTime.Now; wmsRawOutstock.executeStatus = "2"; } + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); dbContext.Update(endEquip); dbContext.Update(wmsRawOutstock); dbContext.Remove(wmsRawStock); diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs index a3d3db4..cca0e7c 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs @@ -59,7 +59,6 @@ namespace Khd.Core.Wcs.Wcs var isSignal = StaticData.PlcDic[0].Read(LineSignal.plcpointAddress); if (rfid != null && isSignal != null) { - if (Convert.ToInt32(isSignal) == 1)//托盘到位 { BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 3 && t.equipType == 1); @@ -138,6 +137,7 @@ namespace Khd.Core.Wcs.Wcs newTask.taskType = 39; newTask.useFlag = 1; wmsBaseLocation.locationStatus = "2"; + SystemData.LockOutLocation(wmsBaseLocation, dbContext); dbContext.Update(wmsBaseLocation); dbContext.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index 21f22a3..c6c7058 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -1945,7 +1945,7 @@ - + @@ -1959,13 +1959,13 @@ - - - - - - - + + + + + + + @@ -2011,7 +2011,10 @@ - + + + + + x:Name="OutTaskNumber" > + - +