From d94839bf3a4c4aeca725c01ce80aa3e318cbaa35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83?= <15095123350@163.com> Date: Thu, 25 Jul 2024 10:24:52 +0800 Subject: [PATCH] 20240725 --- src/Khd.Core.Domain/Auth/SysMenu.cs | 2 + .../Models/MesBaseBarcodeInfo.cs | 3 +- src/Khd.Core.Domain/Models/WcsTask.cs | 3 +- src/Khd.Core.Plc/StaticPlcHelper.cs | 2 +- src/Khd.Core.Wcs/MainCentralControl.cs | 3 +- src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 26 +- src/Khd.Core.Wcs/Wcs/FirstFloor.cs | 291 +++++++++--------- src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs | 21 +- src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs | 6 +- src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs | 71 ++--- src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs | 23 +- src/Khd.Core.Wcs/Wcs/SystemTimer.cs | 55 ++++ src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs | 39 ++- src/Khd.Core.Wcs/appsettings.json | 6 +- src/Khd.Core.Wpf/Form/FormBoardT.xaml | 7 +- src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs | 71 ++--- src/Khd.Core.Wpf/TaskForm/AddTask.xaml.cs | 2 +- src/Khd.Core.Wpf/TaskForm/MenuList.xaml | 2 +- src/Khd.Core.Wpf/TaskForm/MenuList.xaml.cs | 1 + .../myConverter/AgvTaskStatusConverter.cs | 13 + 20 files changed, 349 insertions(+), 298 deletions(-) diff --git a/src/Khd.Core.Domain/Auth/SysMenu.cs b/src/Khd.Core.Domain/Auth/SysMenu.cs index 4daa278..ae3bf34 100644 --- a/src/Khd.Core.Domain/Auth/SysMenu.cs +++ b/src/Khd.Core.Domain/Auth/SysMenu.cs @@ -16,5 +16,7 @@ namespace Khd.Core.Domain.Auth [Column("MENU_VISIBLE")] public int MenuVisble { get; set; } + [Column("MENU_ICON")] + public string MenuIcon { get; set; } } } diff --git a/src/Khd.Core.Domain/Models/MesBaseBarcodeInfo.cs b/src/Khd.Core.Domain/Models/MesBaseBarcodeInfo.cs index a1a83a1..6baf793 100644 --- a/src/Khd.Core.Domain/Models/MesBaseBarcodeInfo.cs +++ b/src/Khd.Core.Domain/Models/MesBaseBarcodeInfo.cs @@ -17,7 +17,8 @@ namespace Khd.Core.Domain.Models [Table("mes_base_barcode_info")] public class MesBaseBarcodeInfo { - + [Column("purchase_order_id")] + public int? PurchaseOrderId { get; set; } [Key] [Column("barcode_id")] public long barcodeId { get; set; } diff --git a/src/Khd.Core.Domain/Models/WcsTask.cs b/src/Khd.Core.Domain/Models/WcsTask.cs index 781fdd6..b97026d 100644 --- a/src/Khd.Core.Domain/Models/WcsTask.cs +++ b/src/Khd.Core.Domain/Models/WcsTask.cs @@ -216,7 +216,8 @@ namespace Khd.Core.Domain.Models [Column("remark")] public string remark { get; set; } - + [Column("is_delete")] + public int? IsDelete { get; set; } } } diff --git a/src/Khd.Core.Plc/StaticPlcHelper.cs b/src/Khd.Core.Plc/StaticPlcHelper.cs index 98f67df..bdc1158 100644 --- a/src/Khd.Core.Plc/StaticPlcHelper.cs +++ b/src/Khd.Core.Plc/StaticPlcHelper.cs @@ -48,7 +48,7 @@ namespace Khd.Core.Plc if (res.Contains("JYHB")) { - return res[res.IndexOf('J')..]; + return res[res.IndexOf('J')..].Substring(0,12); } else if(res.Contains('C')) { diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 5626b36..9d50a28 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -42,7 +42,6 @@ namespace Khd.Core.Wcs StaticData.basePlcs = dbContext.BasePlc.ToList();//陈工Agv和设备信息推送 StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息 StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();//字典表,Agv任务模板 - foreach (var plcConfig in StaticData.PlcConfigs) { if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code)) @@ -51,7 +50,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 diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 2e93420..84b62a4 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -184,6 +184,10 @@ namespace Khd.Core.Wcs.Wcs taskType = agvEquip.objid == 28 ? 66 : 55, qty = 1, }; + fromLocationCode.locationStatus = "4"; + dbContext.Update(fromLocationCode); + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(wmsBaseLocation); dbContext.Add(wcsTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); dbContext.Add(wcsTaskLog); @@ -281,6 +285,10 @@ namespace Khd.Core.Wcs.Wcs taskType = agvEquip.objid == 28 ? 66 : 67, qty = 1, }; + fromLocationCode.locationStatus = "4"; + dbContext.Update(fromLocationCode); + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(wmsBaseLocation); dbContext.Add(wcsTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); dbContext.Add(wcsTaskLog); @@ -1480,17 +1488,14 @@ namespace Khd.Core.Wcs.Wcs List wcsTaskManuals = dbContext.WcsTaskManual.Where(t => t.nextPointId == 11).OrderBy(t => t.createBy).ToList(); if (wcsTaskManuals.Count > 0) { - WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First(); int taskCount = dbContext.WcsTask.Where(t => t.nextPointId == 11).Count(); - if (taskCount == 0 && wcsOutstockLock.qty == 0 && wcsOutstockLock.boxStatus == 0) + //if (taskCount == 0 && wcsOutstockLock.qty == 0 && wcsOutstockLock.boxStatus == 0) + if (taskCount == 0 ) { foreach (var wcs in wcsTaskManuals.Take(6)) { WcsTask wcsTask = CoreMapper.Map(wcs); WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - wcsOutstockLock.qty += 1; - wcsOutstockLock.boxStatus = 1; - dbContext.Update(wcsOutstockLock); dbContext.Add(wcsTask); dbContext.Add(wcsTaskLog); dbContext.WcsTaskManual.Where(t => t.objid == wcs.objid).Delete(); @@ -1647,10 +1652,8 @@ namespace Khd.Core.Wcs.Wcs if (!string.IsNullOrEmpty(endStationCodeEquip.endStationCode)) { bool CreateSuccess = false; - var wcsOutstockLock = dbContext.WcsOutstockLock - .Where(t => t.warehouseId == 512) - .First(); - if (wcsOutstockLock.qty == 0 && wcsOutstockLock.boxStatus == 0) + bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 11).Any(); + if (!hasTask) { var orderList = rawOutStock.Where(t => t.endStationCode == endStationCodeEquip.endStationCode).ToList(); List tasks = new(); @@ -1790,8 +1793,6 @@ namespace Khd.Core.Wcs.Wcs location.updateBy = "WCS"; location.ContainerStatus = "2"; location.updateTime = DateTime.Now; - wcsOutstockLock.qty += 1; - wcsOutstockLock.boxStatus = 1; dbContext.Update(location); dbContext.Update(stock); CreateSuccess = true; @@ -1815,7 +1816,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); - bool hasTask = dbContext.WcsTask.Where(t => t.taskType == 32).Any(); + hasTask = dbContext.WcsTask.Where(t => t.taskType == 32).Any(); if (!hasTask) { WcsTask bearAgvTask = new() @@ -1857,7 +1858,6 @@ namespace Khd.Core.Wcs.Wcs if (tasks.Count > 0) { dbContext.AddRange(tasks); - dbContext.Update(wcsOutstockLock); } dbContext.SaveChanges(); } diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index a4b9ca8..b381941 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -174,7 +174,7 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - + } else { @@ -236,7 +236,7 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - + } else { @@ -290,163 +290,175 @@ namespace Khd.Core.Wcs.Wcs BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 1); if (Convert.ToInt32(linesignal01Value) == 1) { - + //判断task表里没有该rfid的未完成的入库 + //信息,未下发去向 + var task = dbContext.WcsTask.Where(t => t.IsDelete == 0).Where(t => t.nextPointId == 1).OrderBy(t => t.createTime).FirstOrDefault(); + if (task == null) { - //判断task表里没有该rfid的未完成的入库 - //信息,未下发去向 - var task = dbContext.WcsTask.Where(t => t.nextPointId == 1).OrderBy(t => t.createTime).FirstOrDefault(); - if (task == null) + if (BigContainerCodes.Contains(RFID001Value)) { - if (BigContainerCodes.Contains(RFID001Value)) + var newTask = new WcsTask() { - var newTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - serialNo = SystemData.GetSerialNo(dbContext), - equipmentNo = "F01", - taskType = 5, - taskStatus = 0, - containerNo = RFID001Value, - currPointId = F01, - currPointNo = "TSJ_01", - nextPointId = T01, - nextPointNo = "TSJ_01", - fromFloorNo = 1, - floorNo = 4, - useFlag = 1, - createBy = "一楼接驳位", - createTime = DateTime.Now, - remark = "一楼创建入库任务" - }; - WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); - dbContext.Add(wcsTaskLog); - dbContext.Add(newTask); - dbContext.SaveChanges(); - } - else - { - //根据托盘号获取物料码 - var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).FirstOrDefault(); - WcsTaskLog? taskLog = dbContext.WcsTaskLog.Where(t => t.containerNo == RFID001Value).OrderByDescending(t => t.createTime).FirstOrDefault(); + objid = StaticData.SnowId.NextId(), + serialNo = SystemData.GetSerialNo(dbContext), + equipmentNo = "F01", + taskType = 5, + taskStatus = 0, + containerNo = RFID001Value, + currPointId = F01, + currPointNo = "TSJ_01", + nextPointId = T01, + nextPointNo = "TSJ_01", + fromFloorNo = 1, + floorNo = 4, + useFlag = 1, + createBy = "一楼接驳位", + createTime = DateTime.Now, + remark = "一楼创建入库任务" + }; + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.Add(newTask); + dbContext.SaveChanges(); + } + else + { + //根据托盘号获取物料码 + var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).FirstOrDefault(); + WcsTaskLog? taskLog = dbContext.WcsTaskLog.Where(t => t.containerNo == RFID001Value).OrderByDescending(t => t.createTime).FirstOrDefault(); - if (material != null) + if (material != null) + { + if (string.IsNullOrEmpty(material.materialBarcode)) { - if (taskLog != null) + continue; + } + bool hasBarInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.palletInfoCode == RFID001Value && t.barcodeInfo == material.materialBarcode).Any(); + if (!hasBarInfo) + { + continue; + } + if (taskLog != null) + { + if (taskLog.materialBarcode == material.materialBarcode) { - if (taskLog.materialBarcode == material.materialBarcode) + if (baseEquip.containerNo == "0") { - if (baseEquip.containerNo == "0") - { - baseEquip.containerNo = null; - dbContext.Update(baseEquip); - dbContext.SaveChanges(); - _logger.Info("一楼接驳位线程:托盘" + RFID001Value + "解绑信息更新成功"); - } - else if (baseEquip.containerNo != RFID001Value) - { - baseEquip.containerNo = RFID001Value; - dbContext.Update(baseEquip); - dbContext.SaveChanges(); - _logger.Info("一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功"); - Console.WriteLine(DateTime.Now + ":一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功"); - Thread.Sleep(3000); - continue; - } - else - { - Thread.Sleep(3000); - continue; - } + baseEquip.containerNo = null; + dbContext.Update(baseEquip); + dbContext.SaveChanges(); + _logger.Info("一楼接驳位线程:托盘" + RFID001Value + "解绑信息更新成功"); + } + else if (baseEquip.containerNo != RFID001Value) + { + baseEquip.containerNo = RFID001Value; + dbContext.Update(baseEquip); + dbContext.SaveChanges(); + _logger.Info("一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功"); + Console.WriteLine(DateTime.Now + ":一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功"); + Thread.Sleep(3000); + continue; + } + else + { + Thread.Sleep(3000); + continue; } } + } - var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == material.materialId).FirstOrDefault()?.warehouseId; - if (warehouseId != null) + var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == material.materialId).FirstOrDefault()?.warehouseId; + if (warehouseId != null) + { + var TargetFloor = dbContext.WmsBaseWarehouse.Where(t => t.warehouseId == warehouseId).FirstOrDefault(); + if (TargetFloor != null) { - var TargetFloor = dbContext.WmsBaseWarehouse.Where(t => t.warehouseId == warehouseId).FirstOrDefault(); - if (TargetFloor != null) - { - //插入task表 + //插入task表 - var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.agvType == "I" && t.dicField == TargetFloor.warehouseInstockType).FirstOrDefault(); - if (dic != null) + var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.agvType == "I" && t.dicField == TargetFloor.warehouseInstockType).FirstOrDefault(); + if (dic != null) + { + var newTask = new WcsTask() { - var newTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - serialNo = SystemData.GetSerialNo(dbContext), - equipmentNo = "F01", - taskType = Convert.ToInt32(dic.dicValue), - taskStatus = 0, - containerNo = RFID001Value, - materialBarcode = material.materialBarcode, - materialId = material.materialId, - qty = Convert.ToInt32(material.bindAmount), - currPointId = F01, - currPointNo = "TSJ_01", - nextPointId = T01, - nextPointNo = "TSJ_01", - endPointId = warehouseId, - fromFloorNo = 1, - floorNo = TargetFloor.warehouseFloor, - useFlag = 1, - createBy = "一楼接驳位", - createTime = DateTime.Now, - remark = "一楼创建入库任务" - }; - WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); - dbContext.Add(wcsTaskLog); - dbContext.Add(newTask); - dbContext.SaveChanges(); - } + objid = StaticData.SnowId.NextId(), + serialNo = SystemData.GetSerialNo(dbContext), + equipmentNo = "F01", + taskType = Convert.ToInt32(dic.dicValue), + taskStatus = 0, + containerNo = RFID001Value, + materialBarcode = material.materialBarcode, + materialId = material.materialId, + qty = Convert.ToInt32(material.bindAmount), + currPointId = F01, + currPointNo = "TSJ_01", + nextPointId = T01, + nextPointNo = "TSJ_01", + endPointId = warehouseId, + fromFloorNo = 1, + floorNo = TargetFloor.warehouseFloor, + useFlag = 1, + createBy = "一楼接驳位", + createTime = DateTime.Now, + remark = "一楼创建入库任务" + }; + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.Add(newTask); + dbContext.SaveChanges(); } } } } } + } + else + { + if (string.IsNullOrEmpty(task.containerNo))//人工调出 + { + if (task.useFlag == 1) + { + if (task.qty > 1)//多个托盘 + { + if (task.endPointId != 1) + { + task.nextPointId = 6; + dbContext.SaveChanges(); + } + } + else if (task.qty == 1) + { + if (task.endPointId != 1) + { + task.nextPointId = 6; + task.containerNo = RFID001Value; + dbContext.SaveChanges(); + } + } + } + } else { - if (string.IsNullOrEmpty(task.containerNo))//人工调出 + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == RFID001Value); + if (mesBasePalletInfo != null) { - if (task.useFlag == 1) + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.palletInfoCode == RFID001Value).FirstOrDefault(); + if (mesBaseBarcodeInfo != null) { - if (task.qty > 1)//多个托盘 - { - if (task.endPointId != 1) - { - task.nextPointId = 6; - dbContext.SaveChanges(); - } - } - else if (task.qty == 1) - { - if (task.endPointId != 1) - { - task.nextPointId = 6; - task.containerNo = RFID001Value; - dbContext.SaveChanges(); - } - } - } - } - else - { - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == RFID001Value); - if (mesBasePalletInfo != null) - { - 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(task); - dbContext.WcsTaskLog.Where(t => t.objid == task.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); - dbContext.SaveChanges(); + 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(task); + dbContext.WcsTaskLog.Where(t => t.objid == task.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); + dbContext.SaveChanges(); } } } @@ -457,14 +469,14 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - + } else { _logger.Error(ex.Message + "\n" + ex.StackTrace); } } - Thread.Sleep(1000); + Thread.Sleep(3000); } } @@ -512,6 +524,7 @@ namespace Khd.Core.Wcs.Wcs _logger.Info("提升机线程:" + wcsTask.floorNo + "楼接驳位有AGV任务,跳过当前任务"); continue; } + BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); if (wcsTask.containerNo == StaticData.PlcDic[0].ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1)) { @@ -697,7 +710,7 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - + } else { diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index 55861c2..5d86837 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -59,6 +59,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); var taskList = dbContext.WcsTask .Where(t => t.useFlag == 1) + .Where(t=>t.IsDelete==0) .Where(t => t.nextPointId == agvID).OrderBy(t => t.createTime).ToList(); foreach (var item in taskList) { @@ -88,7 +89,7 @@ namespace Khd.Core.Wcs.Wcs } WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); - RequestAGVTaskDto agvTask = new() + RequestAGVTaskDto agvTask = new () { reqCode = StaticData.SnowId.NextId().ToString(), positionCodePath = new List @@ -125,7 +126,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } @@ -168,7 +169,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 34)//背板安装到半成品 @@ -209,7 +210,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 46)//原材料到拆分区 @@ -250,7 +251,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 28)//拆分区返库 @@ -292,7 +293,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 47)//原材料入库 @@ -333,7 +334,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 66)//移库 @@ -374,7 +375,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } } @@ -434,7 +435,7 @@ namespace Khd.Core.Wcs.Wcs var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault(); if (wmsRawStock != null) { - wmsRawStock.locationCode = item.endPointNo; + wmsRawStock.locationCode = item.currPointNo; dbContext.Update(wmsRawStock); } else @@ -748,7 +749,7 @@ namespace Khd.Core.Wcs.Wcs instockBatch = mesBaseBarcodeInfo.barcodeInfo, updateBy = "WCS", updateDate = DateTime.Now, - warehouseId = 511 + warehouseId = 511, }; BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 5); lineEquip.equipStatus = 0; diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs index b6f6971..01e0139 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs @@ -53,12 +53,10 @@ namespace Khd.Core.Wcs.Wcs { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); var taskList = dbContext.WcsTask + .Where(t => t.IsDelete == 0) .Where(t => t.nextPointId == agvID) .OrderBy(t => t.createTime).ToList(); - if (taskList.Count == 0) - { - _logger.Info(FloorNo + "楼AGV无任务"); - } + foreach (var item in taskList)//出库 { if (item.taskStatus == 0)//下发任务 diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index ff271d0..1cfface 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -50,7 +50,7 @@ namespace Khd.Core.Wcs.Wcs Thread FlowPointThread = new Thread(MonitorInLocatorPoint); FlowPointThread.IsBackground = true; - FlowPointThread.Name= "FiveFloorCTU"; + FlowPointThread.Name = "FiveFloorCTU"; FlowPointThread.Start(); Thread FlowCTUInWareThread = new Thread(MonitorInWare); @@ -78,7 +78,7 @@ namespace Khd.Core.Wcs.Wcs } catch { - + } Thread.Sleep(1000); } @@ -88,7 +88,6 @@ namespace Khd.Core.Wcs.Wcs { using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); - //bool IsStart = false; while (true) { try @@ -231,39 +230,30 @@ namespace Khd.Core.Wcs.Wcs { if (!Convert.ToBoolean(waring)) { - StaticData.PlcDic[1].WriteToPoint(CtuLineWaring.plcpointAddress, "true", CtuLineWaring.plcpointLength.ToString()); + StaticData.PlcDic[1].WriteToPoint(CtuLineWaring.plcpointAddress, true, CtuLineWaring.plcpointLength.ToString()); } } - else if (receiveMaterial != null && Convert.ToInt32(receiveMaterial) == 1) - { - //Task.Run(() => - //{ - // var receiveMaterial2 = StaticData.PlcDic[1].Read(ReceiveMaterial.plcpointAddress); - // while (receiveMaterial2 != null && Convert.ToInt32(receiveMaterial2) == 1) - // { - // receiveMaterial2 = StaticData.PlcDic[1].Read(ReceiveMaterial.plcpointAddress); - // lock (SystemData.outStockLock) - // { - // WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First(); - // bool haveTask = dbContext.WcsTask.Where(t => t.nextPointId == 11).Any(); - // if (!haveTask && wcsOutstockLock.boxStatus == 1) - // { - // wcsOutstockLock.boxStatus = 0; - // wcsOutstockLock.qty = 0; - // dbContext.Update(wcsOutstockLock); - // dbContext.SaveChanges(); - // } - // } - // Thread.Sleep(3000); - // } - //}); - } + //else if (receiveMaterial != null && Convert.ToInt32(receiveMaterial) == 0) + //{ + // lock (SystemData.outStockLock) + // { + // WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First(); + // bool haveTask = dbContext.WcsTask.Where(t => t.nextPointId == 11).Any(); + // if (!haveTask && wcsOutstockLock.boxStatus == 1) + // { + // wcsOutstockLock.boxStatus = 0; + // wcsOutstockLock.qty = 0; + // dbContext.Update(wcsOutstockLock); + // dbContext.SaveChanges(); + // } + // } + //} } catch (Exception ex) { if (ex is PlcException) { - + } else { @@ -363,11 +353,8 @@ namespace Khd.Core.Wcs.Wcs dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); var taskList = dbContext.WcsTask .Where(t => t.useFlag == 1) + .Where(t => t.IsDelete == 0) .Where(t => t.nextPointId == CTUID).OrderByDescending(t => t.ud1).ToList(); - if (taskList.Count == 0) - { - _logger.Info(FloorNo + "楼CTU无任务"); - } foreach (var item in taskList) { if (item.taskStatus == 0)//CTU会同时生成多个任务,生成就下发? @@ -450,16 +437,12 @@ namespace Khd.Core.Wcs.Wcs item.taskStatus = 1; dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); dbContext.Update(item); - int ctuTaskCount = dbContext.WcsTask.Where(t => t.taskType == 29).Count(); lock (SystemData.outStockLock) { - WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First(); - if (ctuTaskCount >= 6 || wcsOutstockLock.qty == ctuTaskCount)//如果CTU当前任务数量很多,取消预执行任务 + bool hasTask = dbContext.WcsTask.Where(t=>t.nextPointId==11&&t.taskType==30).Any(); + if (!hasTask)//如果CTU当前任务数量很多,取消预执行任务 { ExecuteInTask(baseEquip); - wcsOutstockLock.qty = 0; - wcsOutstockLock.boxStatus = 0; - dbContext.Update(wcsOutstockLock); } } dbContext.SaveChanges(); @@ -605,14 +588,6 @@ namespace Khd.Core.Wcs.Wcs dbContext.Remove(item); dbContext.SaveChanges(); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); - lock (SystemData.outStockLock) - { - WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First(); - wcsOutstockLock.qty = 0; - wcsOutstockLock.boxStatus = 0; - dbContext.Update(wcsOutstockLock); - dbContext.SaveChanges(); - } } else if (item.taskType == 100)//出库任务 { @@ -639,7 +614,7 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - + } else { diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index 4a73fb3..e03f9a0 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -61,6 +61,7 @@ namespace Khd.Core.Wcs.Wcs //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv var taskList = dbContext.WcsTask .Where(t => t.useFlag == 1) + .Where(t => t.IsDelete == 0) .Where(t => t.nextPointId == EquipID).OrderBy(t => t.createTime).ToList(); foreach (var item in taskList) { @@ -103,7 +104,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 56)//废料工位-库位 @@ -144,7 +145,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 49)//小包出口-库位 @@ -185,7 +186,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("二楼Agv下发任务失败" + item.taskType + message); + _logger.Info("二楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 57)//周转位-小包入口 @@ -225,7 +226,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 50)//库位-提升机 @@ -270,7 +271,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } } @@ -313,7 +314,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 53)//提升机-废料工位 @@ -352,7 +353,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 54)//周转位-废料工位 @@ -394,7 +395,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } } @@ -435,7 +436,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 59)//周转位-小包入口 @@ -477,7 +478,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } } @@ -744,7 +745,7 @@ namespace Khd.Core.Wcs.Wcs var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo); if (wmsProductStock != null) { - wmsProductStock.locationCode = item.endPointNo; + wmsProductStock.locationCode = item.currPointNo; dbContext.Update(wmsProductStock); } dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs index 6326dc4..953fd77 100644 --- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs +++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs @@ -54,9 +54,64 @@ namespace Khd.Core.Wcs.Wcs }; PlcHearBeat220Thread.Start(); + var deleteTaskThread=new Thread(DeleteTaskLogic) + { + Name = "DeleteTaskThread", + IsBackground = true + }; + deleteTaskThread.Start(); Console.WriteLine($"{DateTime.Now}: SystemTimer started"); } + private void DeleteTaskLogic(object? obj) + { + using var scope = host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + while (true) + { + try + { + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + List wcsTasks = dbContext.WcsTask.Where(t => t.IsDelete == 1).ToList(); + foreach (var item in wcsTasks) + { + if (!string.IsNullOrEmpty(item.taskCode)) + { + BaseEquip agvEquip = StaticData.BaseEquip.First(t=>t.objid==item.nextPointId); + dbContext.WcsTask.Remove(item); + var cancelTask = new + { + reqCode = StaticData.SnowId.NextId().ToString(), + taskCode = item.taskCode + }; + string reponse = HttpHelper.SendPostMessage(agvEquip.serverIp, agvEquip.serverPort.Value, "rcms/services/rest/hikRpcService/cancelTask", cancelTask.ToJsonString()); + var result = JsonConvert.DeserializeObject(reponse); + if (result != null && result.code == "0") + { + dbContext.SaveChanges(); + _logger.Info($"任务{item.taskCode}已删除"); + } + else + { + _logger.Error($"任务{item.taskCode}删除失败,原因:{result?.message}"); + } + } + else + { + dbContext.WcsTask.Remove(item); + dbContext.SaveChanges(); + _logger.Info($"任务{item.objid}已删除"); + } + } + } + catch + { + + } + Thread.Sleep(1000); + } + } + private void PlcHearBeat220Logic(object? obj) { BasePlcpoint HeartBeat30 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray"); diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index fda9285..b6a10ed 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -64,7 +64,7 @@ namespace Khd.Core.Wcs.Wcs var getTrayValue = StaticData.PlcDic[2].Read(getTrayPoint.plcpointAddress); if (getTrayValue != null && Convert.ToBoolean(getTrayValue)) { - var task = dbContext.WcsTask.Where(t => t.taskType == 42 && t.useFlag == 0).FirstOrDefault(); + var task = dbContext.WcsTask.Where(t => t.IsDelete == 0).Where(t => t.taskType == 42 && t.useFlag == 0).FirstOrDefault(); if (task != null) { BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 35); @@ -98,7 +98,7 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - + } else { @@ -164,7 +164,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("五楼Agv下发任务失败" + item.taskType + message); + _logger.Info("五楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 39)//提升机-库位 @@ -205,14 +205,14 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("三楼Agv下发任务失败" + item.taskType + message); + _logger.Info("三楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 41)//库位-翻转机 { BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray"); var callMaterial = StaticData.PlcDic[2].Read(basePlcpoint.plcpointAddress); - if (callMaterial != null&&Convert.ToBoolean(callMaterial)) + if (callMaterial != null && Convert.ToBoolean(callMaterial)) { WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.rawOutstockId == item.orderId && t.executeStatus == "0"); if (wmsRawOutstockDetail != null) @@ -257,7 +257,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("三楼Agv下发任务失败" + item.taskType + message); + _logger.Info("三楼Agv下发任务失败" + item.taskType + result); } } } @@ -301,7 +301,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("三楼Agv下发任务失败" + item.taskType + message); + _logger.Info("三楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 42)//翻转机-收集架 @@ -343,7 +343,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("三楼Agv下发任务失败" + item.taskType + message); + _logger.Info("三楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 43)//收集架-周转区 @@ -386,7 +386,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("三楼Agv下发任务失败" + item.taskType + message); + _logger.Info("三楼Agv下发任务失败" + item.taskType + result); } } else if (item.taskType == 44)//周转区-提升机 @@ -395,7 +395,7 @@ namespace Khd.Core.Wcs.Wcs BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3); if (lineEquip.equipStatus == 0) { - + var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString().ToString(), @@ -433,7 +433,7 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("三楼Agv下发任务失败" + item.taskType + message); + _logger.Info("三楼Agv下发任务失败" + item.taskType + result); } } } @@ -480,14 +480,14 @@ namespace Khd.Core.Wcs.Wcs } else { - _logger.Info("三楼Agv下发任务失败" + item.taskType + message); + _logger.Info("三楼Agv下发任务失败" + item.taskType + result); } } } } else { - + { if (item.taskStatus == 3) { @@ -547,7 +547,7 @@ namespace Khd.Core.Wcs.Wcs var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.endPointNo).FirstOrDefault(); if (wmsRawStock != null) { - wmsRawStock.locationCode = item.endPointNo; + wmsRawStock.locationCode = item.currPointNo; dbContext.Update(wmsRawStock); } dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation @@ -591,7 +591,7 @@ namespace Khd.Core.Wcs.Wcs { rawStockId = StaticData.SnowId.NextId(), activeFlag = "1", - saleOrderId = mesBaseBarcodeInfo.saleOrderId==null?0:mesBaseBarcodeInfo.saleOrderId, + saleOrderId = mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId, stockType = "1", supplierId = mesBaseBarcodeInfo.manufacturerId, qualityStatus = "1", @@ -687,6 +687,12 @@ namespace Khd.Core.Wcs.Wcs MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo); if (mesBasePalletInfo != null) { + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.palletInfoCode == item.containerNo).FirstOrDefault(); + if (mesBaseBarcodeInfo != null) + { + mesBaseBarcodeInfo.palletInfoCode = null; + dbContext.Update(mesBaseBarcodeInfo); + } mesBasePalletInfo.bindAmount = null; mesBasePalletInfo.materialBarcode = null; mesBasePalletInfo.materialCode = null; @@ -755,7 +761,7 @@ namespace Khd.Core.Wcs.Wcs { if (ex is PlcException) { - + } else { @@ -768,6 +774,5 @@ namespace Khd.Core.Wcs.Wcs } } } - } } diff --git a/src/Khd.Core.Wcs/appsettings.json b/src/Khd.Core.Wcs/appsettings.json index 0d972a6..d70ecf1 100644 --- a/src/Khd.Core.Wcs/appsettings.json +++ b/src/Khd.Core.Wcs/appsettings.json @@ -13,7 +13,7 @@ "Rack": 0, "Slot": 1, "Code": 0 - },//提升机,接驳位 + }, //提升机,接驳位 { "IP": "192.168.2.31", "Port": 102, //102是默认端口 @@ -21,7 +21,7 @@ "Rack": 0, "Slot": 1, "Code": 1 - },//U型线 + }, //U型线 { "IP": "192.168.2.220", "Port": 102, //102是默认端口 @@ -29,7 +29,7 @@ "Rack": 0, "Slot": 1, "Code": 2 - }//二楼三楼设备,陈工提供。 + } //二楼三楼设备,陈工提供。 ], "PLCSetting": { "Mode": "0", diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index 265e0f5..5ebf26d 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -1518,16 +1518,15 @@ Header="托盘号" IsReadOnly="True" /> - -