From 5737bd8b49232372e42156a9466667237d639ac8 Mon Sep 17 00:00:00 2001 From: "LAPTOP-NLSJV9RB\\91647" <916477576@qq.com> Date: Tue, 26 Mar 2024 15:05:41 +0800 Subject: [PATCH] 1 --- src/Khd.Core.Wcs/Wcs/FirstFloor.cs | 4 +- src/Khd.Core.Wcs/Wcs/SecondFloor.cs | 117 ++++++++++++++++++++++------ 2 files changed, 97 insertions(+), 24 deletions(-) diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index 67c3193..e07a664 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -219,7 +219,7 @@ namespace Khd.Core.Wcs.Wcs { //判断task表里没有该rfid的未完成的入库信息,未下发去向 - var task = dbContext.WcsTask.Where(t => t.customerNo == RFID001Value.ToString() && t.taskStatus < 1).FirstOrDefault(); + var task = dbContext.WcsTask.Where(t => t.containerNo == RFID001Value.ToString() && t.taskStatus < 1).FirstOrDefault(); if (task == null) { //根据托盘号获取物料码 @@ -244,7 +244,7 @@ namespace Khd.Core.Wcs.Wcs equipmentNo = "F01", taskType = Convert.ToInt32(dic.dicValue), taskStatus = 0, - customerNo = RFID001Value.ToString(), + containerNo = RFID001Value.ToString(), materialNo = material.materialCode, materialId = material.materialId, qty = Convert.ToInt32(material.bindAmount), diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloor.cs b/src/Khd.Core.Wcs/Wcs/SecondFloor.cs index a11eb6a..015b44b 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloor.cs @@ -120,33 +120,106 @@ namespace Khd.Core.Wcs.Wcs } } + //获取输送线上的任务 public WcsTask GetTask(string containerNo, int floorNo, string equipNo) { - //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv - var task = StaticData.WcsTask.Where(t => t.customerNo == customerNo).FirstOrDefault(); - if (task == null) + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + var wcsTask = new WcsTask(); + var wareHouseList = StaticData.WmsBaseWarehouse.ToList(); + try { - var palletInfo = StaticData.MesBasePalletInfo.Where(t => t.palletInfoCode == customerNo).FirstOrDefault(); - //查询该条码绑定的物料信息 - var material = StaticData.WmsWarehouseMaterial.Where(t=>t.storageId== palletInfo.materialId).FirstOrDefault(); - var wareHouse = StaticData.WmsBaseWarehouse.Where(t => t.warehouseId == material.warehouseId).FirstOrDefault(); - var dic = StaticData.BaseDictionary.Where(t=>t.dicKey== "TaskType" && t.ud1 == "I" && t.dicField== wareHouse.warehouseInstockType).FirstOrDefault(); - var equip = StaticData.BaseEquip.ToList(); - var startEquip = equip.Where(t => t.equipNo == equipNo).FirstOrDefault(); - //var currEquip= - if (palletInfo != null) + //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv + var task = StaticData.WcsTask.Where(t => t.containerNo == containerNo).FirstOrDefault(); + if (task == null) { - WcsTask newTask = new() + 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.ud1 == "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(); + //var currEquip= + if (palletInfo != null) { - objid = Guid.NewGuid(), - taskType = Convert.ToInt32(dic.dicValue), - customerNo = customerNo, - taskStatus = 0, - materialId = material.storageId, - qty = Convert.ToInt32(palletInfo.bindAmount), - startPointId = startEquip.objid, - startPointNo = equipNo, - //endPointId = wareHouse.warehouseId, + //自动获取id + Jc.SnowId.JcSnowId id = new Jc.SnowId.JcSnowId(1, 1); + var objid = id.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();