From 531c9bbd59f210777e120a24ba7e48435ba6fd94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83?= <15095123350@163.com> Date: Tue, 2 Jul 2024 15:12:13 +0800 Subject: [PATCH] 20240702 --- src/Khd.Core.Domain/Models/BaseEquip.cs | 2 +- src/Khd.Core.Domain/Models/BasePlc.cs | 2 +- src/Khd.Core.Domain/Models/WcsTask.cs | 19 +- src/Khd.Core.Domain/Models/WcsTaskLog.cs | 19 +- .../Models/WmsRawOutstockDetail.cs | 2 +- src/Khd.Core.Wcs/MainCentralControl.cs | 2 - src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 104 ++++++--- src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs | 6 + src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs | 61 +----- src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs | 116 +--------- src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs | 1 + src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs | 148 +++++++------ src/Khd.Core.Wcs/appsettings.json | 33 +-- src/Khd.Core.Wpf/App.xaml | 7 +- src/Khd.Core.Wpf/Form/FormBoardT.xaml | 168 +++++++------- src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs | 206 +++++++++++------- src/Khd.Core.Wpf/Khd.Core.Wpf.csproj | 4 +- 17 files changed, 453 insertions(+), 447 deletions(-) diff --git a/src/Khd.Core.Domain/Models/BaseEquip.cs b/src/Khd.Core.Domain/Models/BaseEquip.cs index 1d9f397..b878674 100644 --- a/src/Khd.Core.Domain/Models/BaseEquip.cs +++ b/src/Khd.Core.Domain/Models/BaseEquip.cs @@ -18,7 +18,7 @@ namespace Khd.Core.Domain.Models public class BaseEquip { [Column("empty_count")] - public int? emptyCount; + public int? emptyCount { get; set; } [Column("agv_position_code")] public string agvPositionCode { get; set; } diff --git a/src/Khd.Core.Domain/Models/BasePlc.cs b/src/Khd.Core.Domain/Models/BasePlc.cs index f149b20..08f49ea 100644 --- a/src/Khd.Core.Domain/Models/BasePlc.cs +++ b/src/Khd.Core.Domain/Models/BasePlc.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace Khd.Core.Domain.Models { - [Table("base_plcpoint")] + [Table("wcs_plcpoint")] public class BasePlc { [Column("id")] diff --git a/src/Khd.Core.Domain/Models/WcsTask.cs b/src/Khd.Core.Domain/Models/WcsTask.cs index a18b735..6ab1b5a 100644 --- a/src/Khd.Core.Domain/Models/WcsTask.cs +++ b/src/Khd.Core.Domain/Models/WcsTask.cs @@ -186,21 +186,30 @@ namespace Khd.Core.Domain.Models /// /// 备用字段1 /// - [Column("ud1")] - public string ud1 { get; set; } + [Column("ctu_execute")] + public string CTUExecute { get; set; } /// /// 备用字段2 /// - [Column("ud2")] - public string ud2 { get; set; } + [Column("is_empty")] + public string isEmpty { get; set; } /// /// 备用字段3 /// [Column("ud3")] public string ud3 { get; set; } - + /// + /// 备用字段3 + /// + [Column("ud1")] + public string ud1 { get; set; } + /// + /// 备用字段3 + /// + [Column("ud2")] + public string ud2 { get; set; } /// /// 备注 /// diff --git a/src/Khd.Core.Domain/Models/WcsTaskLog.cs b/src/Khd.Core.Domain/Models/WcsTaskLog.cs index ed6c08f..8dd61de 100644 --- a/src/Khd.Core.Domain/Models/WcsTaskLog.cs +++ b/src/Khd.Core.Domain/Models/WcsTaskLog.cs @@ -186,21 +186,30 @@ namespace Khd.Core.Domain.Models /// /// 备用字段1 /// - [Column("ud1")] - public string ud1 { get; set; } + [Column("ctu_execute")] + public string CTUExecute { get; set; } /// /// 备用字段2 /// - [Column("ud2")] - public string ud2 { get; set; } + [Column("is_empty")] + public string isEmpty { get; set; } /// /// 备用字段3 /// [Column("ud3")] public string ud3 { get; set; } - + /// + /// 备用字段3 + /// + [Column("ud1")] + public string ud1 { get; set; } + /// + /// 备用字段3 + /// + [Column("ud2")] + public string ud2 { get; set; } /// /// 备注 /// diff --git a/src/Khd.Core.Domain/Models/WmsRawOutstockDetail.cs b/src/Khd.Core.Domain/Models/WmsRawOutstockDetail.cs index b02d248..f16030b 100644 --- a/src/Khd.Core.Domain/Models/WmsRawOutstockDetail.cs +++ b/src/Khd.Core.Domain/Models/WmsRawOutstockDetail.cs @@ -56,7 +56,7 @@ namespace Khd.Core.Domain.Models /// 物料ID /// [Column("material_id")] - public long materialId { get; set; } + public long? materialId { get; set; } /// /// 批次;扫描条码时,从打印条码记录表中获取 diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 760adc4..5c8d651 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -47,8 +47,6 @@ namespace Khd.Core.Wcs WcsChuLiWanCheng = StaticPlcHelper.GetValue("2", "1"); //设置默认去向=>1为 Int16位 WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1"); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList(); StaticData.BaseEquip = dbContext.BaseEquip.ToList(); StaticData.basePlcs = dbContext.BasePlc.ToList(); diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 4e18058..3256aaf 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -70,8 +70,8 @@ namespace Khd.Core.Wcs.Wcs var createRawInWareTaskThread = new Thread(CreateRawInWareTaskLogic); createRawInWareTaskThread.Start(); - var createProductTaskThread = new Thread(CreateProductTaskLogic); - createProductTaskThread.Start(); + var createFiveProductTaskThread = new Thread(CreateFiveProductTaskLogic); + createFiveProductTaskThread.Start(); var createRawTaskThread = new Thread(CreateRawTaskLogic); createRawTaskThread.Start(); @@ -129,7 +129,7 @@ namespace Khd.Core.Wcs.Wcs WmsBaseLocation? wmsBaseLocation = null; bill = bill.OrderBy(t => t.b.instockDate); var fistbill = bill.FirstOrDefault(); - if(fistbill != null) + if (fistbill != null) { int? locRow = 0; if (fistbill.a.locRow % 2 == 1) @@ -148,10 +148,10 @@ namespace Khd.Core.Wcs.Wcs .FirstOrDefault(); if (lastbill != null) { - if (lastbill.b.instockDate != null&&fistbill.b.instockDate != null) + if (lastbill.b.instockDate != null && fistbill.b.instockDate != null) { wmsBaseLocation = fistbill.a; - if(lastbill.b.instockDate.Value.Date == fistbill.b.instockDate.Value.Date) + if (lastbill.b.instockDate.Value.Date == fistbill.b.instockDate.Value.Date) { wmsBaseLocation = lastbill.a; } @@ -162,11 +162,11 @@ namespace Khd.Core.Wcs.Wcs List list = wmsRawStocks.Select(t => t.locationCode).ToList(); var deepLocation = wmsBaseLocations .Where(t => t.locDeep == 1) - .Where(t=>!list.Contains(t.locationCode)) + .Where(t => !list.Contains(t.locationCode)) .ToList(); - if(deepLocation.Count > 0) + if (deepLocation.Count > 0) { - var toWmsBaseLocation= deepLocation.First(); + var toWmsBaseLocation = deepLocation.First(); var EKWcsTask = new WcsTask() { objid = StaticData.SnowId.NextId(), @@ -230,7 +230,7 @@ namespace Khd.Core.Wcs.Wcs } } } - + } } } @@ -337,7 +337,7 @@ namespace Khd.Core.Wcs.Wcs /// /// 成品出库 /// - private void CreateProductTaskLogic() + private void CreateFiveProductTaskLogic() { using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); @@ -346,10 +346,14 @@ namespace Khd.Core.Wcs.Wcs try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - var proStock = dbContext.WmsProductStock.Where(t => t.activeFlag == "0").ToList(); + var proStock = dbContext.WmsProductStock + .Where(t => t.warehouseId == 531) + .Where(t => t.activeFlag == "0").ToList(); var proOutStock = dbContext.WmsProductOutstock .Where(t => t.outstockQty < t.applyQty) .Where(t => t.auditStatus == "1") + .Where(t => t.warehouseId == 531) + .Where(t => t.productType == "3") .Where(t => t.executeStatus == "0" || t.executeStatus == "1").ToList(); //获取最早入库时间 foreach (var item in proOutStock) @@ -444,15 +448,36 @@ namespace Khd.Core.Wcs.Wcs location.locationStatus = "6"; location.updateBy = "WCS"; location.updateTime = DateTime.Now; - dbContext.Update(location); - dbContext.Add(wcsTask); - dbContext.Update(stock); - dbContext.SaveChanges(); - if (qty >= needNumber) + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.productBatch).FirstOrDefault(); + if(mesBaseBarcodeInfo != null) { - break; - } + WmsProductOutstockDetail wmsProductOutstockDetail = new WmsProductOutstockDetail() + { + productOutstockDetailId = StaticData.SnowId.NextId(), + productOutstockId = item.productOutstockId, + productId = item.productId, + beginTime = DateTime.Now, + confirmAmount = 0, + executeStatus = "1", + locationCode = location.locationCode, + outstockAmount = qty, + planAmount = item.applyQty, + warehouseId = item.warehouseId, + productBatch = mesBaseBarcodeInfo.batchCode, + productBarcode=mesBaseBarcodeInfo.barcodeInfo + }; + dbContext.Add(wmsProductOutstockDetail); + dbContext.Update(location); + dbContext.Add(wcsTask); + dbContext.Update(stock); + dbContext.SaveChanges(); + if (qty >= needNumber) + { + break; + } + } } + if (item.beginTime == null) { item.beginTime = DateTime.Now; @@ -583,18 +608,39 @@ namespace Khd.Core.Wcs.Wcs useFlag = 1, qty = outNumber }; - location.outstockFlag = "1"; - location.locationStatus = "6"; - location.updateBy = "WCS"; - location.updateTime = DateTime.Now; - wcsOutstockLock.boxStatus = 1; - dbContext.Update(location); - dbContext.Add(wcsTask); - dbContext.Update(stock); - dbContext.SaveChanges(); - if (qty >= needNumber) + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault(); + if (mesBaseBarcodeInfo != null) { - break; + 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 + }; + dbContext.Add(wmsProductOutstockDetail); + location.outstockFlag = "1"; + location.locationStatus = "6"; + location.updateBy = "WCS"; + location.updateTime = DateTime.Now; + wcsOutstockLock.boxStatus = 1; + dbContext.Update(location); + dbContext.Add(wcsTask); + dbContext.Update(stock); + dbContext.SaveChanges(); + if (qty >= needNumber) + { + break; + } } } if (item.beginTime == null) diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index 2c11fdf..d70e896 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -571,6 +571,12 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 38)//出库 { + var wmsProductOutstockDetail = dbContext.WmsProductOutstockDetail.FirstOrDefault(t => t.productOutstockId == item.orderId); + if(wmsProductOutstockDetail != null) + { + wmsProductOutstockDetail.executeStatus = "2"; + dbContext.Update(wmsProductOutstockDetail); + } BaseEquip lineEquip = StaticData.BaseEquip.First(t=>t.objid==5); WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation .First(t => t.locationId == item.endPointId && t.warehouseFloor == 5); diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index a2b1ce5..2743182 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -133,7 +133,7 @@ namespace Khd.Core.Wcs.Wcs } } } - catch(Exception ex) + catch (Exception ex) { if (ex is PlcException) { @@ -208,16 +208,16 @@ namespace Khd.Core.Wcs.Wcs try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - var taskList = dbContext.WcsTask.Where(t => t.nextPointId == CTUID).OrderBy(t=>t.createTime).ToList(); + var taskList = dbContext.WcsTask.Where(t => t.nextPointId == CTUID).OrderBy(t => t.createTime).ToList(); if (taskList.Count == 0) { LogManager.Info(FloorNo + "楼CTU无任务"); } foreach (var item in taskList) { - if (!taskList.Where(t => t.taskType == 29 && t.ud1 == "2").Any()) + if (!taskList.Where(t => t.taskType == 29 && t.CTUExecute == "2").Any()) { - if (item.ud1 == "1") + if (item.CTUExecute == "1") { ExecuteInTask(baseEquip); WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First(); @@ -225,7 +225,7 @@ namespace Khd.Core.Wcs.Wcs wcsOutstockLock.boxStatus = 0; dbContext.Update(wcsOutstockLock); isWait = false; - item.ud1 = "2"; + item.CTUExecute = "2"; dbContext.Update(item); } } @@ -373,7 +373,6 @@ namespace Khd.Core.Wcs.Wcs { if (wcsCmd.cmdStatus == 3) { - if (item.taskType == 30) { var canOut = this._plc.Read(isput.plcpointAddress); @@ -429,23 +428,21 @@ namespace Khd.Core.Wcs.Wcs } else if (wcsCmd.cmdStatus == 5) { - //任务完成 - //如果是出库任务,更新库存信息,并删除任务 - if (item.taskType == 30) + if (item.taskType == 30)//出库任务 { WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation .First(t => t.locationId == item.startPointId && t.warehouseFloor == 5); wmsBaseLocation.outstockFlag = "0"; wmsBaseLocation.locationStatus = "1"; dbContext.Update(wmsBaseLocation); - + dbContext.WmsRawOutstockDetail.Where(t => t.locationCode == wmsBaseLocation.locationCode).Update(t => new WmsRawOutstockDetail { executeStatus = "2" }); dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete(); dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 }); dbContext.WcsTask.Where(t => t.objid == item.objid).Delete(); dbContext.WcsTaskLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); dbContext.SaveChanges(); } - else//如果是入库任务,更新库存信息,下一个任务为提升机 + else if (item.taskType == 29)//入库任务 { WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation .First(t => t.locationId == item.endPointId && t.warehouseFloor == 5); @@ -499,48 +496,12 @@ namespace Khd.Core.Wcs.Wcs else { LogManager.Info("下发CTU执行入库任务失败"); + Console.WriteLine($"{DateTime.Now}:下发CTU执行入库任务失败" + executeReponse?.message); + ExecuteInTask(baseEquip); + Thread.Sleep(1000); } } } - /// - /// 下发任务 - /// - /// - public void SendTask(long? orderId) - { - using var scope = _host.Services.CreateScope(); - using var dbContext = scope.ServiceProvider.GetRequiredService(); - var taskList = dbContext.WcsTask.Where(t => t.orderId == orderId).ToList(); - //获取 - if (taskList.Count == 0) - return; - //首先判断是否已下发指令 - var cmd = dbContext.WcsCmd.Where(t => taskList.Select(t => t.objid).ToList().Contains(t.taskId.GetValueOrDefault())).FirstOrDefault(); - //指令表存在说明已下发 - if (cmd != null) return; - //获取下发agv指令 - string ip = ""; int port = 0; string url = ""; - RequestAGVTaskDto agvtask = new RequestAGVTaskDto(); - agvtask.reqCode = orderId.ToString(); - var json = JsonConvert.SerializeObject(agvtask); - HttpHelper.SendPostMessage(ip, port, url, json); - foreach (var item in taskList) - { - //未下发给agv下发指令 - WcsCmd taskCmd = new WcsCmd() - { - taskId = item.objid, - cmdType = item.taskType, - serialNo = item.serialNo, - equipmentNo = item.equipmentNo, - cmdStatus = 1, - createBy = FloorNo + "楼CTU", - createTime = DateTime.Now, - }; - dbContext.Add(taskCmd); - dbContext.SaveChanges(); - } - } } } diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs index e939791..129ef39 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs @@ -192,7 +192,7 @@ namespace Khd.Core.Wcs.Wcs var wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.orderId == wcsTask.orderId); if (wmsRawOutstock != null) { - BaseEquip endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsRawOutstock.endStationCode); + var endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsRawOutstock.endStationCode); if (endEquip != null) { floor = endEquip.floorNo; @@ -245,119 +245,5 @@ namespace Khd.Core.Wcs.Wcs } } } - - public WcsTask? GetTask(string containerNo, int floorNo, string equipNo) - { - using var scope = _host.Services.CreateScope(); - using var dbContext = scope.ServiceProvider.GetRequiredService(); - var wcsTask = new WcsTask(); - var wareHouseList = StaticData.WmsBaseWarehouse.ToList(); - try - { - //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv - var task = StaticData.WcsTask.Where(t => t.containerNo == containerNo).FirstOrDefault(); - if (task == null) - { - var palletInfo = StaticData.MesBasePalletInfo.Where(t => t.palletInfoCode == containerNo).FirstOrDefault(); - //查询该条码绑定的物料信息 - var material = StaticData.WmsWarehouseMaterial.Where(t => t.storageId == palletInfo.materialId).FirstOrDefault(); - var wareHouse = wareHouseList.Where(t => t.warehouseId == material.warehouseId).FirstOrDefault(); - var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.agvType == "I" && t.dicField == wareHouse.warehouseInstockType).FirstOrDefault(); - var equip = StaticData.BaseEquip.ToList(); - var startEquip = equip.Where(t => t.equipNo == equipNo).FirstOrDefault(); - var endPoint = wareHouseList.Where(t => t.warehouseFloor == floorNo).FirstOrDefault(); - if (palletInfo != null && startEquip != null && material != null && dic != null && endPoint != null) - { - //自动获取id - var objid = StaticData.SnowId.NextId(); - WcsTask newTask = new() - { - objid = objid, - taskType = Convert.ToInt32(dic.dicValue), - containerNo = containerNo, - taskStatus = 0, - materialId = material.storageId, - qty = Convert.ToInt32(palletInfo.bindAmount), - startPointId = startEquip.objid, - startPointNo = equipNo, - currPointId = startEquip.objid, - currPointNo = equipNo, - endPointId = endPoint.warehouseId, - endPointNo = endPoint.warehouseCode, - }; - dbContext.Add(newTask); - dbContext.SaveChanges(); - wcsTask = newTask; - } - else - { - LogManager.Info(floorNo + "楼接驳位,托盘" + containerNo + "未绑定!"); - } - } - else - { - wcsTask = StaticData.WcsTask.Where(t => t.currPointNo == equipNo).FirstOrDefault(); - } - } - catch (Exception ex) - { - LogManager.Info(floorNo + "楼接驳位异常" + ex.Message); - throw; - } - return wcsTask; - } - /// - /// 下发任务 - /// - /// - public void SendTask(WcsTask task) - { - using var scope = _host.Services.CreateScope(); - using var dbContext = scope.ServiceProvider.GetRequiredService(); - //入库类型 - List taskInType = new List { 1, 3, 5, 7 }; - List taskOutType = new List { 2, 4, 6, 8 }; - try - { - //获取 - if (task == null) return; - if (taskInType.Contains(task.taskType.GetValueOrDefault())) - { - //首先判断是否已下发指令 - var cmd = StaticData.WcsCmd.Where(t => t.taskId == task.objid).FirstOrDefault(); - //指令表存在说明已下发 - if (cmd != null) return; - //获取下发agv指令 - string ip = ""; int port = 0; string url = ""; - RequestAGVTaskDto agvtask = new RequestAGVTaskDto(); - agvtask.reqCode = task.serialNo.ToString(); - var json = JsonConvert.SerializeObject(agvtask); - HttpHelper.SendPostMessage(ip, port, url, json); - //未下发给agv下发指令 - WcsCmd taskCmd = new WcsCmd() - { - taskId = task.objid, - cmdType = task.taskType, - serialNo = task.serialNo, - equipmentNo = task.equipmentNo, - cmdStatus = 1, - createBy = "", - createTime = DateTime.Now, - }; - dbContext.Add(taskCmd); - dbContext.SaveChanges(); - } - else - { - - } - - } - catch (Exception) - { - - throw; - } - } } } diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index ae36c90..127f50d 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -75,6 +75,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv var taskList = dbContext.WcsTask.Where(t => t.nextPointId == EquipID).ToList(); + } catch (Exception ex) { diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs index 39db367..eef3a92 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs @@ -85,78 +85,102 @@ namespace Khd.Core.Wcs.Wcs { BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.floorNo == 3 && t.equipType == 1); var wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.containerNo == rfid && t.nextPointId == baseEquip.objid); + var AgvEquip = StaticData.BaseEquip.First(t => t.floorNo == 3 && t.equipType == 4);//背负Agv if (wcsTask != null)//如果不是null { if (wcsTask.taskStatus == 5)//提升机任务是完成状态 { - var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo) - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.instockFlag == "0") - .Where(t => t.outstockFlag == "0") - .ToList(); - - List containerCodes = wmsBaseLocations.Where(t => t.locDeep == 1).Select(t => t.containerCode).ToList();//深库位的托盘 - List mesBasePalletInfos = dbContext.MesBasePalletInfo - .Where(t => t.materialId == wcsTask.materialId) - .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 - - var bill = from a in mesBasePalletInfos - join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode - select new { b };//等于当前任务的物料的托盘的库位信息 - - var outBill = from a in bill - from b in wmsBaseLocations - where a.b.layerNum == b.layerNum - && b.locDeep == 2 - && a.b.locRow == b.locRow - && a.b.locColumn == b.locColumn - && b.locationStatus == "1" - && b.outstockFlag == "0" - && b.instockFlag == "0" - && string.IsNullOrEmpty(b.containerCode) - select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 - WmsBaseLocation? wmsBaseLocation = null; - wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 - //深浅库位问题?库位入库优先级等 - - var AgvEquip = StaticData.BaseEquip.First(t => t.floorNo == 3 && t.equipType == 4);//背负Agv - if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) + if (wcsTask.isEmpty == "1") { - wcsTask.taskStatus = 0;//创建状态 - wcsTask.updateTime = DateTime.Now; - wcsTask.currPointId = baseEquip.objid; - wcsTask.currPointNo = baseEquip.equipNo; - wcsTask.nextPointId = AgvEquip.objid; - wcsTask.nextPointNo = AgvEquip.equipNo; - wcsTask.endPointId = wmsBaseLocation.locationId; - wcsTask.endPointNo = wmsBaseLocation.locationCode; - if (wmsBaseLocation.warehouseId == 311) + var emptyEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.emptyCount == 0); + if(emptyEquip != null) { - wcsTask.taskType = 39; + wcsTask.taskStatus = 0;//创建状态 + wcsTask.updateTime = DateTime.Now; + wcsTask.currPointId = baseEquip.objid; + wcsTask.currPointNo = baseEquip.equipNo; + wcsTask.nextPointId = AgvEquip.objid; + wcsTask.nextPointNo = AgvEquip.equipNo; + wcsTask.endPointId = emptyEquip.objid; + wcsTask.endPointNo = emptyEquip.equipNo; + wcsTask.useFlag = 1; + dbContext.Update(wcsTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); } - else - { - Console.WriteLine("查找入库库位失败"); - Thread.Sleep(1000); - continue; - } - wcsTask.useFlag = 1; - wmsBaseLocation.instockFlag = "1"; - wmsBaseLocation.locationStatus = "2"; - dbContext.Update(wmsBaseLocation); - dbContext.Update(wcsTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); } else { - Console.WriteLine(DateTime.Now + ":三楼楼接驳位调度入库任务,未找到库位"); - LogManager.Info("三楼接驳位调度入库任务,未找到库位"); + var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo) + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.instockFlag == "0") + .Where(t => t.outstockFlag == "0") + .ToList(); + + List containerCodes = wmsBaseLocations.Where(t => t.locDeep == 1).Select(t => t.containerCode).ToList();//深库位的托盘 + List mesBasePalletInfos = dbContext.MesBasePalletInfo + .Where(t => t.materialId == wcsTask.materialId) + .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 + + var bill = from a in mesBasePalletInfos + join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode + select new { b };//等于当前任务的物料的托盘的库位信息 + + var outBill = from a in bill + from b in wmsBaseLocations + where a.b.layerNum == b.layerNum + && b.locDeep == 2 + && a.b.locRow == b.locRow + && a.b.locColumn == b.locColumn + && b.locationStatus == "1" + && b.outstockFlag == "0" + && b.instockFlag == "0" + && string.IsNullOrEmpty(b.containerCode) + select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + WmsBaseLocation? wmsBaseLocation = null; + wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 + //深浅库位问题?库位入库优先级等 + + + if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) + { + wcsTask.taskStatus = 0;//创建状态 + wcsTask.updateTime = DateTime.Now; + wcsTask.currPointId = baseEquip.objid; + wcsTask.currPointNo = baseEquip.equipNo; + wcsTask.nextPointId = AgvEquip.objid; + wcsTask.nextPointNo = AgvEquip.equipNo; + wcsTask.endPointId = wmsBaseLocation.locationId; + wcsTask.endPointNo = wmsBaseLocation.locationCode; + if (wmsBaseLocation.warehouseId == 311) + { + wcsTask.taskType = 39; + } + else + { + Console.WriteLine("查找入库库位失败"); + Thread.Sleep(1000); + continue; + } + wcsTask.useFlag = 1; + wmsBaseLocation.instockFlag = "1"; + wmsBaseLocation.locationStatus = "2"; + dbContext.Update(wmsBaseLocation); + dbContext.Update(wcsTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + } + else + { + Console.WriteLine(DateTime.Now + ":三楼楼接驳位调度入库任务,未找到库位"); + LogManager.Info("三楼接驳位调度入库任务,未找到库位"); + } } } else if (wcsTask.taskStatus == 6)//小车任务是完成状态,说明是出库 diff --git a/src/Khd.Core.Wcs/appsettings.json b/src/Khd.Core.Wcs/appsettings.json index c5106ba..1b7381e 100644 --- a/src/Khd.Core.Wcs/appsettings.json +++ b/src/Khd.Core.Wcs/appsettings.json @@ -1,6 +1,7 @@ { "ConnectionStrings": { //"DefaultConnection": "server=106.12.13.113;port=3336;database=khd_jyhb;uid=khd;pwd=khd@123;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True", + //"DefaultConnection": "server=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" "DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" //"DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True" }, @@ -13,22 +14,22 @@ "Slot": 1, "Code": 0 }, - //{ - // "IP": "192.168.2.31", - // "Port": 102, //102是默认端口 - // "CpuType": 40, - // "Rack": 0, - // "Slot": 1, - // "Code": 1 - //}, - //{ - // "IP": "192.168.2.220", - // "Port": 102, //102是默认端口 - // "CpuType": 40, - // "Rack": 0, - // "Slot": 1, - // "Code": 2 - //} + { + "IP": "192.168.2.31", + "Port": 102, //102是默认端口 + "CpuType": 40, + "Rack": 0, + "Slot": 1, + "Code": 1 + }, + { + "IP": "192.168.2.220", + "Port": 102, //102是默认端口 + "CpuType": 40, + "Rack": 0, + "Slot": 1, + "Code": 2 + } ], "PLCSetting": { "Mode": "0", diff --git a/src/Khd.Core.Wpf/App.xaml b/src/Khd.Core.Wpf/App.xaml index c6b4434..9611e71 100644 --- a/src/Khd.Core.Wpf/App.xaml +++ b/src/Khd.Core.Wpf/App.xaml @@ -4,6 +4,11 @@ xmlns:local="clr-namespace:Khd.Core.Wpf" StartupUri="LoginPage.xaml"> - + + + + + + diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index f0d0073..0da15dc 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -4,14 +4,15 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Khd.Core.Wpf.myConverter" - mc:Ignorable="d" WindowStyle="None" + mc:Ignorable="d" + WindowStyle="None" WindowStartupLocation="CenterOwner" + xmlns:hc="https://handyorg.github.io/handycontrol" WindowState="Maximized" Title="FormBoardT" Loaded="FormBoard_Loaded" Width="1920" Height="1080" - > @@ -97,7 +98,7 @@ -