diff --git a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs index 3d2ead5..733568e 100644 --- a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs +++ b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs @@ -26,14 +26,25 @@ namespace Khd.Core.Api.Controllers public ReponseagvCallbackDto agvCallback(agvCallbackDto agvCallbackDto) { LogManager.Info($"RecieveRcsController接口信息:{agvCallbackDto.ToJsonString()}"); - if (agvCallbackDto.method == "start") - { - Thread.Sleep(1000); - } + Thread.Sleep(500); return _application.AgvCallback(agvCallbackDto); } + /// + /// 接收agv接收任务通知接口 + /// + /// + /// + [HttpPost("agvCallback2")] + public ReponseagvCallbackDto agvCallback2(agvCallbackDto agvCallbackDto) + { + LogManager.Info($"RecieveRcsController接口信息:{agvCallbackDto.ToJsonString()}"); + Thread.Sleep(500); + return _application.AgvCallback2(agvCallbackDto); + + } + /// /// 背负式Agv通知任务完成 /// diff --git a/src/Khd.Core.Api/appsettings.json b/src/Khd.Core.Api/appsettings.json index 344b949..21dd7e5 100644 --- a/src/Khd.Core.Api/appsettings.json +++ b/src/Khd.Core.Api/appsettings.json @@ -11,10 +11,10 @@ //}, "AllowedHosts": "*", "ConnectionStrings": { - "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=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=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;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", - //"DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;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" }, "JwtSecurityOption": { "SigningKey": "3c41f60c-1d12-11ec-890d-00163e1b8678", diff --git a/src/Khd.Core.Application/Interface/IWcsTaskApplication.cs b/src/Khd.Core.Application/Interface/IWcsTaskApplication.cs index 506e674..79bd085 100644 --- a/src/Khd.Core.Application/Interface/IWcsTaskApplication.cs +++ b/src/Khd.Core.Application/Interface/IWcsTaskApplication.cs @@ -29,5 +29,6 @@ namespace Khd.Core.Application.Interface AgvCompeletedResponse TaskContinue(TaskContinue taskContinue); AgvCompeletedResponse TaskReturn(TaskReturn taskReturn); + ReponseagvCallbackDto AgvCallback2(agvCallbackDto agvCallbackDto); } } \ No newline at end of file diff --git a/src/Khd.Core.Application/WcsTaskApplication.cs b/src/Khd.Core.Application/WcsTaskApplication.cs index 262cf54..3cde9e5 100644 --- a/src/Khd.Core.Application/WcsTaskApplication.cs +++ b/src/Khd.Core.Application/WcsTaskApplication.cs @@ -2,6 +2,7 @@ using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; +using Masuit.Tools.Logging; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using System; @@ -57,6 +58,8 @@ namespace Khd.Core.Application WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcscmd.taskId); if (wcsTask != null) { + Console.WriteLine(agvCallbackDto.method.ToLower() + "," + wcscmd.objid + "," + wcscmd.taskCode); + LogManager.Info(agvCallbackDto.method.ToLower() + "," + wcscmd.objid + "," + wcscmd.taskCode); //start 开始 end结束 continue继续 //待取货 if (agvCallbackDto.method.ToLower() == "start") @@ -65,7 +68,7 @@ namespace Khd.Core.Application wcscmd.sendFlag = 1; wcsTask.taskStatus = 2; _dbContext.WcsCmd.Update(wcscmd); - _dbContext.WcsCmdLog.Where(t=>t.objid==wcscmd.objid).Update(a=>new WcsCmdLog { cmdStatus = 2 }); + _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 2 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2 }); _dbContext.SaveChanges(); @@ -77,32 +80,31 @@ namespace Khd.Core.Application wcscmd.sendFlag = 1; wcscmd.cmdStatus = 4; wcsTask.taskStatus = 4; - _dbContext.WcsCmd.Update(wcscmd); - _dbContext.WcsCmdLog.Where(t=>t.objid==wcscmd.objid).Update(a=>new WcsCmdLog { cmdStatus = 4 }); - _dbContext.WcsTask.Update(wcsTask); + _dbContext.WcsCmd.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmd { cmdStatus = 4 }); + _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 4 }); + _dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTask { taskStatus = 4 }); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 }); - _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } //已取货待放货 if (agvCallbackDto.method.ToLower() == "continue") { + wcscmd.sendFlag = 1; wcscmd.cmdStatus = 3; wcsTask.taskStatus = 3; - _dbContext.WcsCmd.Update(wcscmd); - _dbContext.WcsCmdLog.Where(t=>t.objid==wcscmd.objid).Update(a=>new WcsCmdLog { cmdStatus = 3 }); - _dbContext.WcsTask.Update(wcsTask); + _dbContext.WcsCmd.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmd { cmdStatus = 3 }); + _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 3 }); + _dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTask { taskStatus = 3 }); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 }); - _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } //放货完成 if (agvCallbackDto.method.ToLower() == "end") { - if (wcsTask.nextPointId !=10) + if (wcsTask.nextPointId != 10) { wcscmd.cmdStatus = 5; wcscmd.sendFlag = 1; @@ -129,7 +131,7 @@ namespace Khd.Core.Application reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } - + } } } @@ -141,6 +143,7 @@ namespace Khd.Core.Application } catch (Exception ex) { + LogManager.Error(ex); reponseagvCallbackDto.code = "1"; reponseagvCallbackDto.message = ex.Message; } @@ -180,21 +183,38 @@ namespace Khd.Core.Application BaseEquip baseEquip = _dbContext.BaseEquip.FirstOrDefault(t => t.equipNo == agvCompeletedRequest.endStationCode); if (baseEquip != null) { - var wcsCmd = _dbContext.WcsCmd.Where(t => t.nextPointId == baseEquip.objid).FirstOrDefault(); + var wcsCmd = _dbContext.WcsCmd.Where(t => t.nextPointId == baseEquip.objid).Where(t => t.cmdStatus == 5).FirstOrDefault(); if (wcsCmd != null) { WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcsCmd.taskId); if (wcsTask != null) { - agvCompeletedResponse.code = "0"; - agvCompeletedResponse.message = "成功"; - wcsCmd.cmdStatus = 7; - wcsTask.taskStatus = 7; - _dbContext.WcsCmd.Update(wcsCmd); - _dbContext.WcsCmdLog.Where(t=>t.objid==wcsCmd.objid).Update(a=>new WcsCmdLog { cmdStatus = 7 }); - _dbContext.WcsTask.Update(wcsTask); - _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 }); - _dbContext.SaveChanges(); + if (wcsTask.taskType != 48) + { + + wcsCmd.cmdStatus = 7; + wcsTask.taskStatus = 7; + _dbContext.WcsCmd.Update(wcsCmd); + _dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7 }); + _dbContext.WcsTask.Update(wcsTask); + _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 }); + _dbContext.SaveChanges(); + agvCompeletedResponse.code = "0"; + agvCompeletedResponse.message = "成功"; + } + else + { + + wcsCmd.cmdStatus = 4; + wcsTask.taskStatus = 4; + _dbContext.WcsCmd.Update(wcsCmd); + _dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7 }); + _dbContext.WcsTask.Update(wcsTask); + _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 }); + _dbContext.SaveChanges(); + agvCompeletedResponse.code = "0"; + agvCompeletedResponse.message = "成功"; + } } } else @@ -211,6 +231,7 @@ namespace Khd.Core.Application } catch (Exception ex) { + LogManager.Error(ex); agvCompeletedResponse.code = "1"; agvCompeletedResponse.message = ex.Message; } @@ -230,7 +251,7 @@ namespace Khd.Core.Application _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); var wcsTask = _dbContext.WcsTask .Where(t => t.taskType == 47) - .Where(t=>t.masterId==taskContinue.materialId) + .Where(t => t.masterId == taskContinue.materialId) .FirstOrDefault(); if (wcsTask != null) { @@ -249,6 +270,7 @@ namespace Khd.Core.Application } catch (Exception ex) { + LogManager.Error(ex); compeletedResponse.code = "1"; compeletedResponse.message = ex.Message; } @@ -267,13 +289,13 @@ namespace Khd.Core.Application _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); WcsTask wcsTask = _dbContext.WcsTask .Where(t => t.taskType == 28) - .Where(t=>t.endPointNo==taskReturn.endStationCode) + .Where(t => t.endPointNo == taskReturn.endStationCode) .FirstOrDefault(); if (wcsTask != null) { wcsTask.useFlag = 1; _dbContext.WcsTask.Update(wcsTask); - _dbContext.WcsTask.Where(t=>t.objid==wcsTask.objid).Update(a=>new WcsTask { useFlag = 1 }); + _dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(a => new WcsTask { useFlag = 1 }); _dbContext.SaveChanges(); compeletedResponse.code = "0"; compeletedResponse.message = "成功"; @@ -286,10 +308,116 @@ namespace Khd.Core.Application } catch (Exception ex) { + LogManager.Error(ex); compeletedResponse.code = "1"; compeletedResponse.message = ex.Message; } return compeletedResponse; } + + public ReponseagvCallbackDto AgvCallback2(agvCallbackDto agvCallbackDto) + { + ReponseagvCallbackDto reponseagvCallbackDto = new ReponseagvCallbackDto(); + try + { + _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + var wcscmd = _dbContext.WcsCmd + .Where(t => t.taskCode == agvCallbackDto.taskCode) + .FirstOrDefault(); + if (wcscmd != null) + { + WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcscmd.taskId); + if (wcsTask != null) + { + //start 开始 end结束 continue继续 + //待取货 + if (agvCallbackDto.method.ToLower() == "start") + { + wcscmd.cmdStatus = 2; + wcscmd.sendFlag = 1; + wcsTask.taskStatus = 2; + _dbContext.WcsCmd.Update(wcscmd); + _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 2 }); + _dbContext.WcsTask.Update(wcsTask); + _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2 }); + _dbContext.SaveChanges(); + reponseagvCallbackDto.code = "0"; + reponseagvCallbackDto.message = "成功"; + } + if (agvCallbackDto.method.ToLower() == "con") + { + wcscmd.sendFlag = 1; + wcscmd.cmdStatus = 4; + wcsTask.taskStatus = 4; + _dbContext.WcsCmd.Update(wcscmd); + _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 4 }); + _dbContext.WcsTask.Update(wcsTask); + _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 }); + _dbContext.SaveChanges(); + reponseagvCallbackDto.code = "0"; + reponseagvCallbackDto.message = "成功"; + } + //已取货待放货 + if (agvCallbackDto.method.ToLower() == "continue") + { + if (wcscmd.cmdStatus > 3) + { + wcscmd.sendFlag = 1; + wcscmd.cmdStatus = 5; + wcsTask.taskStatus = 5; + _dbContext.WcsCmd.Update(wcscmd); + _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 5 }); + _dbContext.WcsTask.Update(wcsTask); + _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5 }); + _dbContext.SaveChanges(); + reponseagvCallbackDto.code = "0"; + reponseagvCallbackDto.message = "成功"; + } + else + { + wcscmd.sendFlag = 1; + wcscmd.cmdStatus = 3; + wcsTask.taskStatus = 3; + _dbContext.WcsCmd.Update(wcscmd); + _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 3 }); + _dbContext.WcsTask.Update(wcsTask); + _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 }); + _dbContext.SaveChanges(); + reponseagvCallbackDto.code = "0"; + reponseagvCallbackDto.message = "成功"; + } + } + //放货完成 + if (agvCallbackDto.method.ToLower() == "end") + { + wcscmd.cmdStatus = 7; + wcscmd.sendFlag = 1; + wcsTask.taskStatus = 7; + _dbContext.WcsCmd.Update(wcscmd); + _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7}); + _dbContext.WcsTask.Update(wcsTask); + _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 }); + _dbContext.SaveChanges(); + reponseagvCallbackDto.code = "0"; + reponseagvCallbackDto.message = "成功"; + } + } + } + else + { + reponseagvCallbackDto.code = "1"; + reponseagvCallbackDto.message = "未找到当前任务"; + } + } + catch (Exception ex) + { + LogManager.Error(ex); + reponseagvCallbackDto.code = "1"; + reponseagvCallbackDto.message = ex.Message; + } + //返回请求 + reponseagvCallbackDto.reqCode = reponseagvCallbackDto.reqCode; + return reponseagvCallbackDto; + } } } \ No newline at end of file diff --git a/src/Khd.Core.Domain/Dto/webapi/AgvCompeleted.cs b/src/Khd.Core.Domain/Dto/webapi/AgvCompeleted.cs index fc8f9a4..c0917c7 100644 --- a/src/Khd.Core.Domain/Dto/webapi/AgvCompeleted.cs +++ b/src/Khd.Core.Domain/Dto/webapi/AgvCompeleted.cs @@ -16,12 +16,16 @@ namespace Khd.Core.Domain.Dto.webapi public class TaskContinue { + public string BarCodeInfo { get; set; } + public string palletInfoCode { get; set; } public long? materialId { get; set; } public string endStationCode { get; set; } } public class TaskReturn { + public string BarCodeInfo { get; set; } + public string palletInfoCode { get; set; } public long? materialId { get; set; } public string endStationCode { get; set; } } diff --git a/src/Khd.Core.Domain/Models/WcsCmdLog.cs b/src/Khd.Core.Domain/Models/WcsCmdLog.cs index 7faffb8..a27e5d6 100644 --- a/src/Khd.Core.Domain/Models/WcsCmdLog.cs +++ b/src/Khd.Core.Domain/Models/WcsCmdLog.cs @@ -17,7 +17,11 @@ namespace Khd.Core.Domain.Models [Table("wcs_cmd_log")] public class WcsCmdLog { - + /// + /// 任务代码 + /// + [Column("task_code")] + public string taskCode { get; set; } /// /// 主键 /// diff --git a/src/Khd.Core.Wcs/Khd.Core.Wcs.csproj b/src/Khd.Core.Wcs/Khd.Core.Wcs.csproj index b97046c..f8ed9e4 100644 --- a/src/Khd.Core.Wcs/Khd.Core.Wcs.csproj +++ b/src/Khd.Core.Wcs/Khd.Core.Wcs.csproj @@ -31,7 +31,7 @@ - PreserveNewest + Always diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index cbbd6c9..e0f9745 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -51,7 +51,7 @@ namespace Khd.Core.Wcs WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1"); StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList(); StaticData.BaseEquip = dbContext.BaseEquip.ToList(); - StaticData.basePlcs = dbContext.BasePlc.ToList(); + //StaticData.basePlcs = dbContext.BasePlc.ToList(); StaticData.BaseDictionary = dbContext.BaseDictionary.ToList(); foreach (var plcConfig in StaticData.PlcConfigs) @@ -72,8 +72,8 @@ namespace Khd.Core.Wcs StaticData.PlcDic.TryAdd(plcConfig.Code, plc); } } - SystemTimer systemTimer = new SystemTimer(_host); - systemTimer.Start(); + //SystemTimer systemTimer = new SystemTimer(_host); + //systemTimer.Start(); //创建任务 CreateTaskByRecord createTaskByRecord = new(_host, ""); createTaskByRecord.StartPoint(); @@ -87,10 +87,10 @@ namespace Khd.Core.Wcs //SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value, SecondBaseFloorEquip.equipNo); //secondFloorPoint.StartPoint(); - ////二层AGV - //var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First(); - //SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value, SecondFloorAgvEquip.equipNo); - //secondFloorAGV.StartPoint(); + //二层AGV + var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First(); + SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value, SecondFloorAgvEquip.equipNo); + secondFloorAGV.StartPoint(); ////二楼线体 //var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 3).First(); @@ -117,19 +117,19 @@ namespace Khd.Core.Wcs //FiveFloorLine fiveFloorLine = new(_host, StaticData.PlcDic[0], FiveFloorLineEquip.floorNo.Value, FiveFloorLineEquip.equipNo); //fiveFloorLine.StartPoint(); - //五层CTU - var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First(); - FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value, FiveFloorCTUEquip.equipNo); - fiveFloorCTU.StartPoint(); + ////五层CTU + //var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First(); + //FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value, FiveFloorCTUEquip.equipNo); + //fiveFloorCTU.StartPoint(); ////五层AGV //var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First(); //FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[2], FifthFloorAgvEquip.floorNo.Value, FifthFloorAgvEquip.equipNo); //fifthFloorAGV.StartPoint(); - var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 11).First(); - FiveFloorBearAgv fiveFloorBearAgv = new(_host, StaticData.PlcDic[1], FifthFloorBearAgvEquip.floorNo.Value, FifthFloorBearAgvEquip.equipNo); - fiveFloorBearAgv.StartPoint(); + //var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.objid==28).First(); + //FiveFloorBearAgv fiveFloorBearAgv = new(_host, StaticData.PlcDic[1], FifthFloorBearAgvEquip.floorNo.Value, FifthFloorBearAgvEquip.equipNo); + //fiveFloorBearAgv.StartPoint(); } catch (Exception ex) { diff --git a/src/Khd.Core.Wcs/Program.cs b/src/Khd.Core.Wcs/Program.cs index 4f843a9..8e8b065 100644 --- a/src/Khd.Core.Wcs/Program.cs +++ b/src/Khd.Core.Wcs/Program.cs @@ -6,6 +6,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using System.Diagnostics; internal class Program { @@ -17,7 +18,14 @@ internal class Program AppDomain.CurrentDomain.UnhandledException += GlobalExceptionHandler; //全局异常捕获 try { - var mutex = new Mutex(true, "服务端", out bool ret); + Process[] processes = Process.GetProcessesByName("Khd.Core.Wcs"); + if (processes.Length > 1) + { + Console.Write("系统已经启动,请勿重复启动1"); + Console.ReadLine(); + return; + } + var mutex = new Mutex(true, "Khd.Core.Wcs", out bool ret); if (ret) { IHost host = CreateHostBuilder(args).Build(); diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 6266d11..b3d43e8 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -84,6 +84,10 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("出库任务监听启动成功"); } + /// + /// 半成品入库 + /// + /// private void CreateFiveProductInTaskLogic(object? obj) { using var scope = _host.Services.CreateScope(); @@ -356,8 +360,7 @@ namespace Khd.Core.Wcs.Wcs if (wmsRawReturn.executeStatus == "0") { //任务未开始Status=0 - string startStation = wmsRawReturn.endStationCode; - BaseEquip startEquip = StaticData.BaseEquip.First(t => t.equipNo == startStation); + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.equipNo == wmsRawReturn.endStationCode); WcsTask wcsTask = new() { objid = StaticData.SnowId.NextId(), @@ -607,7 +610,7 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.outstockAmount > t.realOutstockAmount) .Where(t => t.auditStatus == "1") .ToList(); - List wcsTaskManuals = dbContext.WcsTaskManual.OrderBy(t => t.createBy).ToList(); + 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(); @@ -1104,6 +1107,7 @@ namespace Khd.Core.Wcs.Wcs { } + Thread.Sleep(1000); } diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index c579aab..d212567 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -57,10 +57,7 @@ namespace Khd.Core.Wcs.Wcs /// private readonly BasePlcpoint reserialno06; - /// - /// 是否可以写去向 - /// - private readonly BasePlcpoint canwritewcsrun06; + public FirstFloor(IHost host, Plc.S7.Plc plc) @@ -87,7 +84,6 @@ namespace Khd.Core.Wcs.Wcs //一楼提升机到位信号 读 this.reserialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("reserialno06")); - this.canwritewcsrun06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("canwritewcsrun06")); } /// @@ -108,10 +104,90 @@ namespace Khd.Core.Wcs.Wcs IsBackground = true }; firstFloorHoister.Start(); + + Thread CallEmptyThread = new Thread(CallEmpty) + { + IsBackground = true + }; + CallEmptyThread.Start(); + Console.WriteLine(DateTime.Now + ":一楼提升机线程启动成功"); LogManager.Info("一楼提升机线程启动成功"); } + private void CallEmpty() + { + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + BasePlcpoint oneOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneOut"); + BasePlcpoint someOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut"); + BaseEquip mdjEquip = StaticData.BaseEquip.First(t => t.objid == 40); + while (true) + { + try + { + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + var linesignal = this._plc.Read(this.linesignal01.plcpointAddress); + int taskCount = dbContext.WcsTask.Where(t => t.nextPointId == 6 && t.taskStatus > 0 && t.endPointId == 1).Count(); + int firstFloorCount = dbContext.WcsTask.Where(t => t.currPointId == 1).Count(); + if (Convert.ToInt32(linesignal) == 0 && taskCount == 0 && firstFloorCount == 0) + { + WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 40).FirstOrDefault(); + if (wcsTaskManual != null) + { + if (wcsTaskManual.taskType == 58) + { + this._plc.WriteToPoint(oneOutPoint.plcpointAddress, "1", oneOutPoint.plcpointLength.ToString()); + WcsTask wcsTask = CoreMapper.Map(wcsTaskManual); + wcsTask.createTime = DateTime.Now; + wcsTask.createBy = "一楼接驳位线程"; + wcsTask.taskStatus = 0; + wcsTask.useFlag = 0; + wcsTask.isEmpty = "1"; + wcsTask.remark = "一楼创建入库任务"; + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + mdjEquip.emptyCount -= 1; + if (mdjEquip.emptyCount <= 0) + { + mdjEquip.emptyCount = 0; + } + dbContext.Update(mdjEquip); + dbContext.Add(wcsTaskLog); + dbContext.Add(wcsTask); + dbContext.SaveChanges(); + LogManager.Info("一楼接驳位线程:空托盘任务下发成功"); + Console.WriteLine(DateTime.Now + ":一楼接驳位线程:空托盘任务下发成功"); + } + else if (wcsTaskManual.taskType == 61) + { + this._plc.WriteToPoint(someOutPoint.plcpointAddress, "1", someOutPoint.plcpointLength.ToString()); + WcsTask wcsTask = CoreMapper.Map(wcsTaskManual); + wcsTask.createTime = DateTime.Now; + wcsTask.createBy = "一楼接驳位线程"; + wcsTask.taskStatus = 0; + wcsTask.useFlag = 1; + wcsTask.isEmpty = mdjEquip.emptyCount.ToString(); + wcsTask.remark = "一楼创建入库任务"; + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + mdjEquip.emptyCount = 0; + dbContext.Update(mdjEquip); + dbContext.Add(wcsTaskLog); + dbContext.Add(wcsTask); + dbContext.SaveChanges(); + LogManager.Info("一楼接驳位线程:空托盘任务下发成功"); + Console.WriteLine(DateTime.Now + ":一楼接驳位线程:空托盘任务下发成功"); + } + } + } + } + catch + { + + } + Thread.Sleep(1000); + } + } + /// /// 启动一楼接驳位线程 /// @@ -292,9 +368,6 @@ namespace Khd.Core.Wcs.Wcs { try { - //var automatic06Value = this._plc.Read(this.automatic.plcpointAddress);//提升机自动状态 - //if (automatic06Value != null && Convert.ToInt32(automatic06Value) == 1) - //{ using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); var serialno06Value = this._plc.Read(this.serialno06.plcpointAddress); //提升机流水号 读 @@ -303,10 +376,9 @@ namespace Khd.Core.Wcs.Wcs var currentfloor06Value = this._plc.Read(this.currentfloor06.plcpointAddress); //提升机当前楼层 读 var targetfloor06Value = this._plc.Read(this.targetfloor06.plcpointAddress); //提升机目的楼层 写 var reserialno06 = this._plc.Read(this.reserialno06.plcpointAddress); //反馈流水号 - var canwritewcsrun06value = this._plc.Read(this.canwritewcsrun06.plcpointAddress); //正常读到plc值 - if (targetfloor06Value != null && canwritewcsrun06value != null && serialno06Value != null && equipstate06Value != null && currentfloor06Value != null && reserialno06 != null && hoisterTrayIn06Value != null) + if (targetfloor06Value != null && serialno06Value != null && equipstate06Value != null && currentfloor06Value != null && reserialno06 != null && hoisterTrayIn06Value != null) { //提升机空闲 if (Convert.ToInt32(equipstate06Value) == 0) @@ -332,21 +404,18 @@ namespace Khd.Core.Wcs.Wcs { if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo) { - //if (Convert.ToInt32(canwritewcsrun06value) == 0) - { - wcsTask.taskStatus = 2; - wcsTask.updateBy = "提升机线程"; - wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行中"; - BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); - this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); - this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); - lineEquip.equipStatus = 1; - dbContext.Update(lineEquip); - dbContext.SaveChanges(); - } + wcsTask.taskStatus = 2; + wcsTask.updateBy = "提升机线程"; + wcsTask.updateTime = DateTime.Now; + wcsTask.remark = "提升机任务执行中"; + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); + this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); + this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); + dbContext.Update(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); + lineEquip.equipStatus = 1; + dbContext.Update(lineEquip); + dbContext.SaveChanges(); } else { @@ -369,21 +438,18 @@ namespace Khd.Core.Wcs.Wcs BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress)) { - //if (Convert.ToInt32(canwritewcsrun06value) == 0) + if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层 { - if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层 - { - wcsTask.taskStatus = 2; - wcsTask.updateBy = "提升机线程"; - wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行中"; - BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); - this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); - this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); - dbContext.SaveChanges(); - } + wcsTask.taskStatus = 2; + wcsTask.updateBy = "提升机线程"; + wcsTask.updateTime = DateTime.Now; + wcsTask.remark = "提升机任务执行中"; + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); + this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); + this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); + dbContext.Update(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); + dbContext.SaveChanges(); } } } @@ -403,18 +469,15 @@ namespace Khd.Core.Wcs.Wcs } if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3,且当前楼层为任务的目的楼层 { - //if (Convert.ToInt32(canwritewcsrun06value) == 0) - { - wcsTask.taskStatus = 4; - wcsTask.updateBy = "提升机线程"; - wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行完成"; - BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); - this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2,表示提升机已到达目的地,让货出去 - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); - dbContext.SaveChanges(); - } + wcsTask.taskStatus = 4; + wcsTask.updateBy = "提升机线程"; + wcsTask.updateTime = DateTime.Now; + wcsTask.remark = "提升机任务执行完成"; + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); + this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2,表示提升机已到达目的地,让货出去 + dbContext.Update(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); + dbContext.SaveChanges(); } else if (wcsTask.taskStatus == 4) { @@ -436,7 +499,6 @@ namespace Khd.Core.Wcs.Wcs } } } - //} } catch (Exception ex) { diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index 4706b8f..ffb9945 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -314,6 +314,7 @@ namespace Khd.Core.Wcs.Wcs // Thread.Sleep(3000); // } //} + private bool CtuWaitLogic() { BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == CTUID); @@ -348,7 +349,7 @@ namespace Khd.Core.Wcs.Wcs /// /// 监控上件扫描点位 /// - public void MonitorInLocatorPoint() + public void MonitorInLocatorPoint() { List taskType = new() { 1, 3, 5, 7 }; using var scope = _host.Services.CreateScope(); diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index 22cc4b4..99f7b38 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -9,6 +9,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; using System; +using System.Runtime.Intrinsics.X86; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -76,6 +77,7 @@ namespace Khd.Core.Wcs.Wcs 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 @@ -85,7 +87,6 @@ namespace Khd.Core.Wcs.Wcs var taskList = dbContext.WcsTask .Where(t => t.useFlag == 1) .Where(t => t.nextPointId == EquipID).OrderBy(t => t.createTime).ToList(); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); foreach (var item in taskList) { if (taskList.Where(t => t.taskStatus > 0).Where(t => t.objid != item.objid).Any()) @@ -96,7 +97,7 @@ namespace Khd.Core.Wcs.Wcs if (item.taskStatus == 0)//下发任务 { BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); - if (item.taskType == 50) + if (item.taskType == 51)//输送线-小包入口 { WcsCmd wcsCmd = new WcsCmd() { @@ -154,8 +155,9 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } - else if (item.taskType == 51) + else if (item.taskType == 56)//废料工位-库位 { + var endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), @@ -167,9 +169,69 @@ namespace Khd.Core.Wcs.Wcs createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = item.currPointId, - currPointNo = lineEquip.agvPositionCode, + currPointNo = wasteEquip.agvPositionCode, nextPointId = item.endPointId, - nextPointNo = outEquip.agvPositionCode, + 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.startPointNo + "," + 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); + 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 = outEquip.agvPositionCode, + nextPointId = item.endPointId, + nextPointNo = wmsBaseLocation.agvPositionCode, }; var agvTask = new RequestAGVTaskDto { @@ -212,8 +274,9 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("二楼Agv下发任务失败" + item.taskType + message); } } - else if (item.taskType == 52) + else if (item.taskType == 57)//周转位-提升机 { + var startPoint = StaticData.BaseEquip.First(t => t.objid == item.startPointId); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), @@ -225,7 +288,7 @@ namespace Khd.Core.Wcs.Wcs createTime = DateTime.Now, createBy = FloorNo + "楼AGV", currPointId = item.currPointId, - currPointNo = lineEquip.agvPositionCode, + currPointNo = startPoint.agvPositionCode, nextPointId = item.endPointId, nextPointNo = lineEquip.agvPositionCode, }; @@ -253,8 +316,8 @@ namespace Khd.Core.Wcs.Wcs var reponseMessage = JsonConvert.DeserializeObject(result); if (reponseMessage != null && reponseMessage.message == "成功") { - LogManager.Info("二楼AGV线程继续任务" + item.objid + "," + item.startPointNo + "," + item.endPointNo); - Console.WriteLine(DateTime.Now + ":二楼AGV线程继续任务" + item.startPointNo + "," + item.endPointNo); + LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); + Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; @@ -267,7 +330,303 @@ namespace Khd.Core.Wcs.Wcs } else { - LogManager.Info("二楼Agv下发任务失败" + item.taskType + message); + LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); + } + } + else if (item.taskType == 50)//库位-提升机 + { + var startPoint = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + 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.startPointNo + "," + 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 == 55)//2F移库 + { + WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + 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" + } + } + }; + 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.startPointNo + "," + 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.startPointNo + "," + 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.startPointId); + 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.startPointNo + "," + 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.startPointNo + "," + 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); } } } @@ -279,60 +638,327 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("二楼AGV线程完成任务" + item.objid); if (wcsCmd.cmdStatus == 3) { - var agvTask = new RequestAGVTaskDto + if (wcsCmd.currPointId == lineEquip.objid) { - 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 == "成功") + 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) { - 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(); + 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 == 50) + if (item.taskType == 53) { - dbContext.Remove(item); - dbContext.Remove(wcsCmd); - dbContext.SaveChanges(); - dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); - dbContext.WcsCmdLog.Where(t => t.taskId == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 }); + 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.taskType == 51) { - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); - wmsBaseLocation.locationStatus = "1"; - wmsBaseLocation.instockFlag = "0"; - wmsBaseLocation.containerCode = item.containerNo; - dbContext.Update(wmsBaseLocation); + 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.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 = wmsProductInstock.planCode, + planDetailCode = wmsProductInstock.planDetailCode, + productBatch = mesBasePalletInfo.materialBarcode, + saleorderCode = wmsProductInstock.saleorderCode, + productStockId = StaticData.SnowId.NextId(), + saleOrderId = wmsProductInstock.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.startPointId).First(); + WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode); + wmsProductOutstockDetail.executeStatus = "2"; + wmsProductOutstock.endTime = DateTime.Now; + wmsProductOutstock.executeStatus = "2"; + wmsBaseLocation.locationStatus = "1"; + wmsBaseLocation.outstockFlag = "0"; + wmsBaseLocation.containerCode = null; + dbContext.Remove(wmsProductStock); + dbContext.Update(wmsBaseLocation); + dbContext.Update(wmsProductOutstockDetail); + dbContext.Update(wmsProductOutstock); + 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 == 58) + { + BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); + endEquip.equipStatus = 1; + endEquip.emptyCount = Convert.ToInt32(item.isEmpty); + 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(); - dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); - dbContext.WcsCmdLog.Where(t => t.taskId == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 }); } - else if (item.taskType == 52) + else if (item.taskType == 53) { - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); - wmsBaseLocation.locationStatus = "1"; - wmsBaseLocation.instockFlag = "0"; - wmsBaseLocation.containerCode = null; - dbContext.Update(wmsBaseLocation); - item.taskStatus = 6; - dbContext.Update(item); + BaseEquip startEquip = StaticData.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 == 51) + { + BaseEquip startEquip = StaticData.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) + { + 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) + { + WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); + WmsBaseLocation toWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); + fromWmsBaseLocation.locationStatus = "1"; + toWmsBaseLocation.locationStatus = "1"; + fromWmsBaseLocation.outstockFlag = "0"; + toWmsBaseLocation.outstockFlag = "0"; + fromWmsBaseLocation.instockFlag = "0"; + toWmsBaseLocation.instockFlag = "0"; + fromWmsBaseLocation.containerCode = null; + toWmsBaseLocation.containerCode = item.containerNo; + dbContext.Update(fromWmsBaseLocation); + dbContext.Update(toWmsBaseLocation); + 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 == 56) + { + wasteEquip.emptyCount = 0; + wasteEquip.equipStatus = 0; + 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; + 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.taskId == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 }); + dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 }); + dbContext.SaveChanges(); } } } @@ -341,6 +967,7 @@ namespace Khd.Core.Wcs.Wcs } catch (Exception ex) { + LogManager.Error(ex); } finally diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index 4e7b3f0..a9bf602 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -18,11 +18,6 @@ namespace Khd.Core.Wcs.Wcs List ScanPoint { get; set; }//点位信息 private readonly IHost _host; private readonly Plc.S7.Plc _plc; - private readonly BasePlcpoint LineRFID; - private readonly BasePlcpoint LineWcsrun; - private readonly BasePlcpoint LineSignal; - private readonly BasePlcpoint LineIsPallet; - private readonly BasePlcpoint LineSerialNO; int FloorNo { get; set; } string EquipNo = ""; public SecondFloorPoint(IHost host, Plc.S7.Plc plc, int floor, string equipNo) @@ -31,12 +26,6 @@ namespace Khd.Core.Wcs.Wcs this._plc = plc; FloorNo = floor; EquipNo = equipNo; - this.ScanPoint = StaticData.BasePlcpointList.Where(t => t.floorNo == floor).ToList();//加载当前站点所对应的点位 - this.LineRFID = this.ScanPoint.First(t => t.plcpointNo.Contains("RFID")); - this.LineWcsrun = this.ScanPoint.First(t => t.plcpointNo.Contains("wcsrun")); - this.LineSignal = this.ScanPoint.First(t => t.plcpointNo.Contains("linesignal")); - this.LineIsPallet = this.ScanPoint.First(t => t.plcpointNo.Contains("ispallet")); - this.LineSerialNO = this.ScanPoint.First(t => t.plcpointNo.Contains("serialno")); //var lineRFID = this._plc.Read(NodeSettingCarNo.plcpointAddress); try @@ -66,39 +55,26 @@ namespace Khd.Core.Wcs.Wcs { using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); + var rfidPoint = StaticData.BasePlcpointList.First(t => t.id == 52); + var agvGetPoint = StaticData.BasePlcpointList.First(t => t.id == 53); + var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54); while (true) { try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - //入库任务 - var rfid = this._plc.Read(LineRFID.plcpointAddress); - var isSignal = this._plc.Read(LineSignal.plcpointAddress); //到位信号 - var isPallet = this._plc.Read(LineIsPallet.plcpointAddress);//是否有托盘 - if (rfid != null && isSignal != null && isPallet != null) + var agvGetValue = this._plc.Read(agvGetPoint.plcpointAddress); + var agvPutValue = this._plc.Read(agvPutPoint.plcpointAddress); + var rfidValue = this._plc.ReadRFID(rfidPoint.plcpointAddress); + if (agvGetValue != null && agvPutValue != null && rfidValue != null) { - //正常读到输送线信息 有到位信号,并且有托盘,获取条码信息 - if (Convert.ToInt32(isSignal) > 0 && Convert.ToInt32(isPallet) == 1) + if(Convert.ToBoolean(agvPutValue)) { - //获取条码信息 - var palletNo = Convert.ToString(rfid); - //获取入库任务 - var wcsTask = GetTask(palletNo, FloorNo, EquipNo); - //判断是否为出库任务 - if (wcsTask.taskType == 5) - { - var nextEquip = StaticData.BaseEquip.Where(t => t.floorNo == FloorNo && t.equipType == 4).FirstOrDefault(); - //更新任务下一点位为AGV - wcsTask.nextPointId = nextEquip.objid; - wcsTask.nextPointNo = nextEquip.equipNo; - wcsTask.updateTime = DateTime.Now; - wcsTask.updateBy = FloorNo + "楼输送线"; - dbContext.Update(wcsTask); - dbContext.SaveChanges(); - ////入库任务 - ////下发agv任务 - //SendTask(wcsTask); - } + + } + if (Convert.ToBoolean(agvGetValue) && !string.IsNullOrEmpty(rfidValue)) + { + } } } @@ -112,117 +88,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(); - //var currEquip= - if (palletInfo != 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(); - } - } - catch (Exception) - { - - throw; - } - } } } diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs index 5ece7ad..3a41e3d 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs @@ -66,9 +66,11 @@ namespace Khd.Core.Wcs.Wcs 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 agvEquip = StaticData.BaseEquip.First(t=>t.objid==8); + BaseEquip outEquip = StaticData.BaseEquip.First(t => t.objid == 37); + BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2); + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8); + BaseEquip tsjEquip = StaticData.BaseEquip.First(t => t.objid == 6); + var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54); while (true) { try @@ -77,6 +79,7 @@ namespace Khd.Core.Wcs.Wcs //入库任务 var rfid = this._plc.ReadRFID(LineRFID.plcpointAddress); var isSignal = this._plc.Read(LineSignal.plcpointAddress); + StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress); if (rfid != null && isSignal != null) { //正常读到输送线信息 有到位信号,并且有托盘,获取条码信息 @@ -89,29 +92,81 @@ namespace Khd.Core.Wcs.Wcs .FirstOrDefault(t => t.containerNo == palletNo && t.nextPointId == baseEquip.objid); if (wcsTask != null) { - if (wcsTask.taskStatus == 5)//入库,提升机任务是完成状态 + if (wcsTask.taskStatus == 5)//入托盘入口,提升机任务是完成状态 { - dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Delete(); - WcsTask newTask = CoreMapper.Map(wcsTask); - newTask.taskStatus = 0; - newTask.objid = StaticData.SnowId.NextId(); - newTask.nextPointId=agvEquip.objid; - newTask.nextPointNo=agvEquip.equipNo; - newTask.createTime = DateTime.Now; - newTask.updateTime = DateTime.Now; - newTask.endPointId=inEquip.objid; - newTask.endPointNo=inEquip.equipNo; - newTask.containerNo=palletNo; - newTask.currPointId=lineEquip.objid; - newTask.currPointNo=lineEquip.equipNo; - newTask.taskType=2; - newTask.useFlag=1; - dbContext.WcsTask.Add(newTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); - LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); - Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); + if (wcsTask.taskType != 99) + { + dbContext.WcsTask.Remove(wcsTask); + WcsTask newTask = CoreMapper.Map(wcsTask); + newTask.taskStatus = 0; + newTask.objid = StaticData.SnowId.NextId(); + newTask.nextPointId = agvEquip.objid; + newTask.nextPointNo = agvEquip.equipNo; + newTask.createTime = DateTime.Now; + newTask.updateTime = DateTime.Now; + newTask.endPointId = inEquip.objid; + newTask.endPointNo = inEquip.equipNo; + newTask.containerNo = palletNo; + newTask.currPointId = lineEquip.objid; + newTask.currPointNo = lineEquip.equipNo; + newTask.taskType = 2; + newTask.useFlag = 1; + dbContext.WcsTask.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); + Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); + } + else + { + + } + } + else if (wcsTask.taskStatus == 6) + { + WmsProductOutstock? wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == wcsTask.orderId); + if (wmsProductOutstock != null) + { + BaseEquip? endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsProductOutstock.endStationCode); + if (endEquip != null) + { + dbContext.WcsTask.Remove(wcsTask); + WcsTask newTask = CoreMapper.Map(wcsTask); + newTask.serialNo = SystemData.GetSerialNo(dbContext); + newTask.taskStatus = 0; + newTask.objid = StaticData.SnowId.NextId(); + newTask.nextPointId = tsjEquip.objid; + newTask.nextPointNo = tsjEquip.equipNo; + newTask.createTime = DateTime.Now; + newTask.updateTime = DateTime.Now; + newTask.endPointId = endEquip.objid; + newTask.endPointNo = endEquip.equipNo; + newTask.containerNo = palletNo; + newTask.currPointId = lineEquip.objid; + newTask.currPointNo = lineEquip.equipNo; + newTask.taskType = 6; + newTask.useFlag = 1; + newTask.fromFloorNo = 2; + newTask.floorNo = endEquip.floorNo; + dbContext.WcsTask.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + LogManager.Info("二楼接驳位生成任务出库成功,托盘号:" + palletNo); + Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务出库成功,托盘号:" + palletNo); + } + else + { + LogManager.Info("二楼接驳位出库任务出库失败,找不到终点站点"); + Console.WriteLine(DateTime.Now + ":二楼接驳位出库任务出库失败,找不到终点站点"); + } + } + else + { + LogManager.Info("二楼接驳位出库任务出库失败,找不到订单信息"); + Console.WriteLine(DateTime.Now + ":二楼接驳位出库任务出库失败,找不到订单信息"); + } } } } diff --git a/src/Khd.Core.Wcs/appsettings.json b/src/Khd.Core.Wcs/appsettings.json index c273bc0..1b7381e 100644 --- a/src/Khd.Core.Wcs/appsettings.json +++ b/src/Khd.Core.Wcs/appsettings.json @@ -6,14 +6,14 @@ //"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" }, "PlcConfigs": [ - //{ - // "IP": "192.168.2.30", - // "Port": 102, //102是默认端口 - // "CpuType": 40, - // "Rack": 0, - // "Slot": 1, - // "Code": 0 - //}, + { + "IP": "192.168.2.30", + "Port": 102, //102是默认端口 + "CpuType": 40, + "Rack": 0, + "Slot": 1, + "Code": 0 + }, { "IP": "192.168.2.31", "Port": 102, //102是默认端口 @@ -22,14 +22,14 @@ "Slot": 1, "Code": 1 }, - //{ - // "IP": "192.168.2.220", - // "Port": 102, //102是默认端口 - // "CpuType": 40, - // "Rack": 0, - // "Slot": 1, - // "Code": 2 - //} + { + "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/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index 3efd4b1..f4e291b 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -25,6 +25,7 @@ + @@ -1534,7 +1565,7 @@ @@ -1623,9 +1654,15 @@ - - - + + + + + + - - - + + +