using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library.Mapper; using Khd.Core.Wcs.Global; using Masuit.Tools; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs { /// /// 二楼AGV调度 /// public class SecondFloorAGV { private readonly IHost _host; int FloorNo { get; set; } int EquipID = 8; //2楼AGV public SecondFloorAGV(IHost host, Plc.S7.Plc plc, int floor) { this._host = host; FloorNo = floor; } /// /// 启动上件扫描监听 /// public void StartPoint() { Thread FlowPointThread = new Thread(MonitorInLocatorPoint); FlowPointThread.Start(); Console.WriteLine(DateTime.Now + ":二楼AGV上件扫描监听启动成功"); LogManager.Info("二楼AGV上件扫描监听启动成功"); } public void MonitorInLocatorPoint() { using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); BaseEquip inEquip = StaticData.BaseEquip.First(t => t.objid == 36); BaseEquip outEquip = StaticData.BaseEquip.First(t => t.objid == 37); BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2); BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == EquipID); BaseEquip wasteEquip = StaticData.BaseEquip.First(t => t.objid == 38); while (true) { try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv var taskList = dbContext.WcsTask .Where(t => t.useFlag == 1) .Where(t => t.nextPointId == EquipID).OrderBy(t => t.createTime).ToList(); foreach (var item in taskList) { if (item.taskStatus == 0)//下发任务 { BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); if (item.taskType == 51)//输送线-小包入口 { WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), cmdStatus = 0, taskId = item.objid, useFlag = 1, cmdType = item.taskType, containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = item.currPointId, currPointNo = lineEquip.agvPositionCode, nextPointId = item.endPointId, nextPointNo = inEquip.agvPositionCode, }; var agvTask = new RequestAGVTaskDto { reqCode = wcsCmd.objid.ToString(), positionCodePath = new List { new () { positionCode=wcsCmd.currPointNo, type="00" }, new () { positionCode=wcsCmd.nextPointNo, type="00" } }, taskTyp = baseDictionary.dicValue, ctnrTyp = "2", }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); var reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; dbContext.Update(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); dbContext.Add(wcsCmdLog); dbContext.Add(wcsCmd); dbContext.SaveChanges(); } else { LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } else if (item.taskType == 56)//废料工位-库位 { var endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), cmdStatus = 0, taskId = item.objid, useFlag = 1, cmdType = item.taskType, containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = item.currPointId, currPointNo = wasteEquip.agvPositionCode, nextPointId = item.endPointId, nextPointNo = endEquip.agvPositionCode, }; var agvTask = new RequestAGVTaskDto { reqCode = wcsCmd.objid.ToString(), positionCodePath = new List { new () { positionCode=wcsCmd.currPointNo, type="00" }, new () { positionCode=wcsCmd.nextPointNo, type="00" } }, taskTyp = baseDictionary.dicValue, ctnrTyp = "2", }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); var reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; dbContext.Update(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); dbContext.Add(wcsCmdLog); dbContext.Add(wcsCmd); dbContext.SaveChanges(); } else { LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } else if (item.taskType == 49)//小包出口-库位 { WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); BaseEquip startEquip = dbContext.BaseEquip.First(t=>t.objid==item.currPointId); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), cmdStatus = 0, taskId = item.objid, useFlag = 1, cmdType = item.taskType, containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = startEquip.objid, currPointNo = startEquip.agvPositionCode, nextPointId = item.endPointId, nextPointNo = wmsBaseLocation.agvPositionCode, }; var agvTask = new RequestAGVTaskDto { reqCode = wcsCmd.objid.ToString(), positionCodePath = new List { new () { positionCode=wcsCmd.currPointNo, type="00" }, new () { positionCode=wcsCmd.nextPointNo, type="00" } }, taskTyp = baseDictionary.dicValue, ctnrTyp = "2", }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); var reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; dbContext.Update(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); dbContext.Add(wcsCmdLog); dbContext.Add(wcsCmd); dbContext.SaveChanges(); } else { LogManager.Info("二楼Agv下发任务失败" + item.taskType + message); } } else if (item.taskType == 57)//周转位-小包入口 { var startPoint = StaticData.BaseEquip.First(t => t.objid == item.currPointId); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), cmdStatus = 0, taskId = item.objid, useFlag = 1, cmdType = item.taskType, containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = item.currPointId, currPointNo = startPoint.agvPositionCode, nextPointId = item.endPointId, nextPointNo = lineEquip.agvPositionCode, }; var agvTask = new RequestAGVTaskDto { reqCode = wcsCmd.objid.ToString(), positionCodePath = new List { new () { positionCode=wcsCmd.currPointNo, type="00" }, new () { positionCode=wcsCmd.nextPointNo, type="00" } }, taskTyp = baseDictionary.dicValue, ctnrTyp = "2", }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); var reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; dbContext.Update(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); dbContext.Add(wcsCmdLog); dbContext.Add(wcsCmd); dbContext.SaveChanges(); } else { LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } else if (item.taskType == 50)//库位-提升机 { var startPoint = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); lineEquip = dbContext.BaseEquip.First(t => t.objid == 2); if (lineEquip.equipStatus == 0) { WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), cmdStatus = 0, taskId = item.objid, useFlag = 1, cmdType = item.taskType, containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = item.currPointId, currPointNo = startPoint.agvPositionCode, nextPointId = lineEquip.objid, nextPointNo = lineEquip.agvPositionCode, }; var agvTask = new RequestAGVTaskDto { reqCode = wcsCmd.objid.ToString(), positionCodePath = new List { new () { positionCode=wcsCmd.currPointNo, type="00" }, new () { positionCode=wcsCmd.nextPointNo, type="00" } }, taskTyp = baseDictionary.dicValue, ctnrTyp = "2", }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); var reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + wcsCmd.ToJsonString() + "\n" + message); Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; lineEquip.equipStatus = 1; dbContext.Update(lineEquip); dbContext.Update(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); dbContext.Add(wcsCmdLog); dbContext.Add(wcsCmd); dbContext.SaveChanges(); } else { LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } } else if (item.taskType == 55)//2F移库 { WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); WmsBaseLocation toWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), cmdStatus = 0, taskId = item.objid, useFlag = 1, cmdType = item.taskType, containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = item.currPointId, currPointNo = fromWmsBaseLocation.agvPositionCode, nextPointId = item.endPointId, nextPointNo = toWmsBaseLocation.agvPositionCode, }; var agvTask = new RequestAGVTaskDto { reqCode = wcsCmd.objid.ToString(), positionCodePath = new List { new() { positionCode = wcsCmd.currPointNo, type = "00" }, new() { positionCode = wcsCmd.nextPointNo, type = "00" } }, taskTyp = baseDictionary.dicValue, ctnrTyp = "2", }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); var reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; dbContext.Update(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); dbContext.Add(wcsCmdLog); dbContext.Add(wcsCmd); dbContext.SaveChanges(); } else { LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } else if (item.taskType == 53)//提升机-废料工位 { WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), cmdStatus = 0, taskId = item.objid, useFlag = 1, cmdType = item.taskType, containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = item.currPointId, currPointNo = lineEquip.agvPositionCode, nextPointId = item.endPointId, nextPointNo = wasteEquip.agvPositionCode, }; var agvTask = new RequestAGVTaskDto { reqCode = wcsCmd.objid.ToString(), positionCodePath = new List { new () { positionCode=wcsCmd.currPointNo, type="00" }, new () { positionCode=wcsCmd.nextPointNo, type="00" } }, taskTyp = baseDictionary.dicValue, ctnrTyp = "2", }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); var reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; dbContext.Update(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); dbContext.Add(wcsCmdLog); dbContext.Add(wcsCmd); dbContext.SaveChanges(); } else { LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } else if (item.taskType == 54)//周转位-废料工位 { var wasteEquipLocation = StaticData.BaseEquip.FirstOrDefault(t => t.objid == item.currPointId); if (wasteEquipLocation != null) { WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), cmdStatus = 0, taskId = item.objid, useFlag = 1, cmdType = item.taskType, containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = item.currPointId, currPointNo = wasteEquipLocation.agvPositionCode, nextPointId = item.endPointId, nextPointNo = wasteEquip.agvPositionCode, }; var agvTask = new RequestAGVTaskDto { reqCode = wcsCmd.objid.ToString(), positionCodePath = new List { new () { positionCode=wcsCmd.currPointNo, type="00" }, new () { positionCode=wcsCmd.nextPointNo, type="00" } }, taskTyp = baseDictionary.dicValue, ctnrTyp = "2", }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); var reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; dbContext.Update(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); dbContext.Add(wcsCmdLog); dbContext.Add(wcsCmd); dbContext.SaveChanges(); } else { LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } } else if (item.taskType == 58)//提升机到周转位 { var endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), cmdStatus = 0, taskId = item.objid, useFlag = 1, cmdType = item.taskType, containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = item.currPointId, currPointNo = lineEquip.agvPositionCode, nextPointId = item.endPointId, nextPointNo = endEquip.agvPositionCode, }; var agvTask = new RequestAGVTaskDto { reqCode = wcsCmd.objid.ToString(), positionCodePath = new List { new () { positionCode=wcsCmd.currPointNo, type="00" }, new () { positionCode=wcsCmd.nextPointNo, type="00" } }, taskTyp = baseDictionary.dicValue, ctnrTyp = "2", }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); var reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; dbContext.Update(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); dbContext.Add(wcsCmdLog); dbContext.Add(wcsCmd); dbContext.SaveChanges(); } else { LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } 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); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), cmdStatus = 0, taskId = item.objid, useFlag = 1, cmdType = item.taskType, containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = item.currPointId, currPointNo = startEquip.agvPositionCode, nextPointId = item.endPointId, nextPointNo = endEquip.agvPositionCode, }; var agvTask = new RequestAGVTaskDto { reqCode = wcsCmd.objid.ToString(), positionCodePath = new List { new () { positionCode=wcsCmd.currPointNo, type="00" }, new () { positionCode=wcsCmd.nextPointNo, type="00" } }, taskTyp = baseDictionary.dicValue, ctnrTyp = "2", }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); var reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; dbContext.Update(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); dbContext.Add(wcsCmdLog); dbContext.Add(wcsCmd); dbContext.SaveChanges(); } else { LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } } else { WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid); if (wcsCmd != null) { LogManager.Info("二楼AGV线程完成任务" + item.objid); if (wcsCmd.cmdStatus == 3) { if (wcsCmd.currPointId == lineEquip.objid) { var lineSignal02 = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal02").plcpointAddress); var rfid = StaticData.PlcDic[0].ReadRFID(StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID002").plcpointAddress); if (lineSignal02 != null && rfid != null && rfid == item.containerNo && lineSignal02.ToString() == "1") { var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), taskCode = wcsCmd.taskCode }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message); ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { wcsCmd.cmdStatus = 4; dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 }); dbContext.Update(wcsCmd); dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 }); dbContext.SaveChanges(); } } } else if (wcsCmd.currPointId == wasteEquip.objid) { if (true) { var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), taskCode = wcsCmd.taskCode }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message); ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { wcsCmd.cmdStatus = 4; dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 }); dbContext.Update(wcsCmd); dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 }); dbContext.SaveChanges(); } } } else if (wcsCmd.currPointId == outEquip.objid) { if (true) { var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), taskCode = wcsCmd.taskCode }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message); ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { wcsCmd.cmdStatus = 4; dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 }); dbContext.Update(wcsCmd); dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 }); dbContext.SaveChanges(); } } } else { var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), taskCode = wcsCmd.taskCode }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message); ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { wcsCmd.cmdStatus = 4; item.taskStatus = 4; dbContext.Update(wcsCmd); dbContext.Update(item); dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 }); dbContext.SaveChanges(); } } } else if (wcsCmd.cmdStatus == 5) { if (item.taskType == 51) { if (true) { var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), taskCode = wcsCmd.taskCode }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message); ReponseMessage? reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { wcsCmd.cmdStatus = 6; item.taskStatus = 6; dbContext.Update(item); dbContext.Update(wcsCmd); dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); dbContext.SaveChanges(); } } } } else if (item.taskStatus == 7) { if (item.currPointId == 2) { lineEquip = dbContext.BaseEquip.First(t => t.objid == 2); lineEquip.equipStatus = 0; dbContext.Update(lineEquip); } if (item.taskType == 49) { //WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId); //if (wmsProductInstock != null) //{ // WmsProductInstockDetail? wmsProductInstockDetail = dbContext.WmsProductInstockDetail.FirstOrDefault(t => t.productInstockId == wmsProductInstock.productInstockId); // if (wmsProductInstockDetail != null) // { MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo); if (mesBasePalletInfo != null) { MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo); if (mesBaseBarcodeInfo != null) { WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); wmsBaseLocation.instockFlag = "0"; wmsBaseLocation.locationStatus = "1"; wmsBaseLocation.containerCode = item.containerNo; WmsProductStock wmsProductStock = new WmsProductStock() { productId = mesBasePalletInfo.materialId, activeFlag = "1", frozenAmount = 0, createBy = "WCS", createDate = DateTime.Now, updateBy = "WCS", updateDate = DateTime.Now, instockDate = DateTime.Now, locationCode = wmsBaseLocation.locationCode, occupyAmount = 0, totalAmount = 1, palletInfoCode = item.containerNo, planCode = mesBaseBarcodeInfo.planCode, planDetailCode = mesBaseBarcodeInfo.planDetailCode, productBatch = mesBasePalletInfo.materialBarcode, saleorderCode = mesBaseBarcodeInfo.saleorderCode, productStockId = StaticData.SnowId.NextId(), saleOrderId = mesBaseBarcodeInfo.saleOrderId, stockType = "3", qualityStatus = "0", warehouseFloor = 2, warehouseId = wmsBaseLocation.warehouseId }; //wmsProductInstockDetail.executeStatus = "2"; //wmsProductInstock.endTime = DateTime.Now; //wmsProductInstock.executeStatus = "2"; //dbContext.Update(wmsProductInstockDetail); dbContext.Add(wmsProductStock); dbContext.Update(wmsBaseLocation); //dbContext.Update(wmsProductInstock); dbContext.Remove(item); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); dbContext.SaveChanges(); } // } //} } } else if (item.taskType == 50) { WmsProductOutstock? wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == item.orderId); if (wmsProductOutstock != null) { WmsProductOutstockDetail? wmsProductOutstockDetail = dbContext.WmsProductOutstockDetail.FirstOrDefault(t => t.productOutstockId == wmsProductOutstock.productOutstockId); if (wmsProductOutstockDetail != null) { var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First(); WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode); if (wmsProductOutstock.applyQty <= wmsProductOutstock.outstockQty) { wmsProductOutstock.endTime = DateTime.Now; wmsProductOutstock.executeStatus = "2"; } wmsProductOutstockDetail.executeStatus = "2"; wmsBaseLocation.locationStatus = "1"; wmsBaseLocation.outstockFlag = "0"; wmsBaseLocation.containerCode = null; item.nextPointId = 2; item.taskStatus = 8; dbContext.Remove(wmsProductStock); dbContext.Update(wmsBaseLocation); dbContext.Update(wmsProductOutstockDetail); dbContext.Update(wmsProductOutstock); dbContext.Update(item); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); dbContext.SaveChanges(); } } } else if (item.taskType == 58) { BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); endEquip.equipStatus = 1; endEquip.emptyCount = item.qty; dbContext.Update(endEquip); dbContext.Remove(item); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); dbContext.SaveChanges(); } else if (item.taskType == 53) { BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId); startEquip.equipStatus = 0; BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); endEquip.equipStatus = 1; endEquip.emptyCount = 1; endEquip.containerNo = item.containerNo; dbContext.Update(endEquip); dbContext.Update(startEquip); dbContext.Remove(item); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); dbContext.SaveChanges(); } else if (item.taskType == 51) { BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId); startEquip.equipStatus = 0; dbContext.Update(startEquip); dbContext.Remove(item); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); dbContext.SaveChanges(); } else if (item.taskType == 54) { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); startEquip.equipStatus = 0; startEquip.emptyCount = 0; startEquip.containerNo = null; BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); endEquip.equipStatus = 1; endEquip.emptyCount = 1; endEquip.containerNo = item.containerNo; dbContext.Update(startEquip); dbContext.Update(endEquip); dbContext.Remove(item); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); dbContext.SaveChanges(); } else if (item.taskType == 55) { using var transaction = dbContext.Database.BeginTransaction(); try { var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.endPointNo).FirstOrDefault(); if (wmsRawStock != null) { wmsRawStock.locationCode = item.endPointNo; dbContext.Update(wmsRawStock); } else { var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo); if (wmsProductStock != null) { wmsProductStock.locationCode = item.currPointNo; dbContext.Update(wmsProductStock); } } dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation { outstockFlag = "0", locationStatus = "1", containerCode = null, updateTime = DateTime.Now }); dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation { instockFlag = "0", locationStatus = "1", containerCode = item.containerNo, updateTime = DateTime.Now }); dbContext.Remove(item); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); transaction.Commit(); dbContext.SaveChanges(); } catch (Exception ex) { transaction.Rollback(); LogManager.Error(ex); } } else if (item.taskType == 56) { wasteEquip.emptyCount = 0; wasteEquip.equipStatus = 0; BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId); endEquip.emptyCount = 1; endEquip.equipStatus = 2; endEquip.containerNo = item.containerNo; dbContext.Remove(item); dbContext.Update(wasteEquip); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); dbContext.SaveChanges(); } else if (item.taskType == 57) { BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); emptyEquip.emptyCount = 0; emptyEquip.equipStatus = 0; emptyEquip.containerNo = null; item.taskStatus = 8; dbContext.Update(item); dbContext.Update(emptyEquip); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 }); dbContext.SaveChanges(); } else if (item.taskType == 59) { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); startEquip.equipStatus = 0; startEquip.emptyCount = 0; startEquip.containerNo = null; dbContext.Update(startEquip); dbContext.Remove(item); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); dbContext.SaveChanges(); } } } } break; } } catch (Exception ex) { if (ex is PlcException) { try { foreach (var item in StaticData.PlcDic) { if (item.Value.IP == ex.Message) { StaticData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot); StaticData.PlcDic[item.Key].Open(); } } } catch { } } LogManager.Error(ex); } finally { Thread.Sleep(1000); } } } } }