From d06e44eb1c8818c8d19709602631eb7888d4f0e9 Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期二, 06 五月 2025 08:53:01 +0800
Subject: [PATCH] 修改程序,AGV交互

---
 Admin.NET/WCS.Application/PLC/PLCService.cs |  456 +++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 331 insertions(+), 125 deletions(-)

diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index e8a2fe2..08d9606 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -1,8 +1,11 @@
 锘縰sing Admin.NET.Core.Service;
+using AngleSharp.Io;
 using COSXML.Network;
 using DocumentFormat.OpenXml.Bibliography;
 using DocumentFormat.OpenXml.Drawing;
 using DocumentFormat.OpenXml.Spreadsheet;
+using DocumentFormat.OpenXml.Wordprocessing;
+using Elastic.Clients.Elasticsearch.Snapshot;
 using Furion.Logging;
 using IoTClient;
 using NewLife.Reflection;
@@ -25,6 +28,7 @@
         try
         {
             var mod = sender as WcsDeviceDto;
+            
             //Console.WriteLine($"{mod.Text}鍊间负" + mod.Value);
             switch (mod.Type)
             {
@@ -70,7 +74,7 @@
                     TaskNo = _taskService.GetTaskCode(),
                     TaskType = TaskTypeEnum.Move,
                     Type = PLCTypeEnum.AGV,
-                    StartLocate = AGVStorageUtil.GetPalletOutStorage(),
+                    StartLocate = "",
                     EndLocate = AGVStaionEnum.D1.ToString(),
                     PalletNo = "",
                     Status = TaskStatusEnum.Wait,
@@ -190,6 +194,7 @@
                                 {
                                     TaskNo = carTask.TaskNo,
                                     PlcName = modDevice.Text,
+                                    Status = TaskStatusEnum.Complete,
                                     InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�"
                                 };
                                 _db.Insertable(taskMonitor).ExecuteCommand();
@@ -202,10 +207,72 @@
                             //鎬讳换鍔′笅娌℃湁鍏朵粬鏈墽琛屽皬杞︾殑浠诲姟 鍙樻洿鎬讳换鍔′俊鎭�
                             if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
                             {
-                                modFinshTask.Status = TaskStatusEnum.Complete;
-                                modFinshTask.FinishDate = DateTime.Now;
-                                _db.Updateable(modFinshTask).ExecuteCommand();
-                            
+                                if (modFinshTask.TaskType == TaskTypeEnum.Out)
+                                {
+                                    //#region 浠诲姟鍙樻洿鎴愯緭閫佺嚎浠诲姟
+                                    //modFinshTask.Status = TaskStatusEnum.Wait;
+                                    //modFinshTask.Type = PLCTypeEnum.ConveyorLine;
+                                    //_db.Updateable(modFinshTask).ExecuteCommand();
+
+                                    //#endregion
+
+                                    #region 杈撻�佺嚎 鍐欏叆PLC 740
+
+                                    var text = "";
+                                    var devStation = ""; //宸ヤ綅
+                                    var endLocate = modFinshTask.EndRoadway;
+                                    var carcon = new carConverModel();
+                                    if ( carcon.conveyorBei.Keys.Contains(endLocate))
+                                    {
+                                        text = "杈撻�佺嚎鍖�";
+                                        devStation = carcon.conveyorBei[endLocate];
+                                    }
+                                    else if (carcon.conveyorNan.Keys.Contains(endLocate))
+                                    {
+                                        text = "杈撻�佺嚎鍗�";
+                                        devStation = carcon.conveyorNan[endLocate];
+                                    }
+                                    if (text != "")
+                                    {
+                                        var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text);
+                                        var modConn = new PLCUtil(modPlc);
+
+                                        var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation);
+                                        var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos);
+                                        if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 730)
+                                        {
+                                            modConn.Close();
+                                            return;//鏀捐揣宸ヤ綅娌℃湁璇诲彇鎴愬姛鎴栦笉鏄┖闂�
+                                        }
+                                        
+                                        var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "740");
+                                        if (!plcResult.IsSucceed)
+                                        {
+                                            modConn.Close();
+                                            return;
+                                        }
+                                        //娣诲姞浠诲姟鏄庣粏
+                                        var taskMonitor = new WcsTaskMonitor()
+                                        {
+                                            TaskNo = modFinshTask.TaskNo,
+                                            PlcName = modDevice.Text,
+                                            Status = TaskStatusEnum.Complete,
+                                            InteractiveMsg = $"鍐欏叆鎸囦护740锛氭墭鐩樺埌杈緖modFinshTask.EndRoadway}"
+                                        };
+                                        _db.Insertable(taskMonitor).ExecuteCommand();
+                                        modConn.Close();
+                                    }
+
+
+                                    #endregion 
+                                }
+                                else
+                                {
+                                    modFinshTask.Status = TaskStatusEnum.Complete;
+                                    modFinshTask.FinishDate = DateTime.Now;
+                                    _db.Updateable(modFinshTask).ExecuteCommand();
+                                }
+                                
                                 //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟,涓嬪彂寮�濮嬪厖鐢靛懡浠�
                                 if (modFinshTask.Levels == 888)
                                 {
@@ -281,22 +348,26 @@
                             var getCdTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Levels == 888 && m.EndLocate == endLocateCar && m.Type == PLCTypeEnum.ShuttleCar && m.Status <= TaskStatusEnum.Doing);
                             if (getCdTask == null)
                             {
-                                //娣诲姞灏忚溅鍏呯數浣嶇疆
-                                WcsTask modCarTask = new WcsTask()
+                                var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos);
+                                if (resultDlLock.IsSucceed && valueDlLock!=3)
                                 {
-                                    TaskNo = _taskService.GetTaskCode(),
-                                    TaskType = TaskTypeEnum.Move,
-                                    Type = PLCTypeEnum.ShuttleCar,
-                                    StartLocate = carXYZ,
-                                    EndLocate = endLocateCar,
-                                    PalletNo = "",
-                                    Status = TaskStatusEnum.Wait,
-                                    Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇
-                                    Origin = "WCS",
-                                    CarIp = modDevice.PlcIdIP
-                                };
-                                _db.Insertable(modCarTask).ExecuteCommand();
-                                HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>());
+                                    //娣诲姞灏忚溅鍏呯數浣嶇疆
+                                    WcsTask modCarTask = new WcsTask()
+                                    {
+                                        TaskNo = _taskService.GetTaskCode(),
+                                        TaskType = TaskTypeEnum.Move,
+                                        Type = PLCTypeEnum.ShuttleCar,
+                                        StartLocate = carXYZ,
+                                        EndLocate = endLocateCar,
+                                        PalletNo = "",
+                                        Status = TaskStatusEnum.Wait,
+                                        Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇
+                                        Origin = "WCS",
+                                        CarIp = modDevice.PlcIdIP
+                                    };
+                                    _db.Insertable(modCarTask).ExecuteCommand();
+                                    HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>());
+                                }
                             }
                             
                         }
@@ -344,22 +415,27 @@
                                         var getCdTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Levels == 888 && m.EndLocate == endLocateCar && m.Type == PLCTypeEnum.ShuttleCar && m.Status <= TaskStatusEnum.Doing);
                                         if (getCdTask == null)
                                         {
-                                            //娣诲姞灏忚溅鍏呯數浣嶇疆
-                                            WcsTask modCarTask = new WcsTask()
+                                            var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos);
+                                            if (resultDlLock.IsSucceed && valueDlLock != 3)
                                             {
-                                                TaskNo = _taskService.GetTaskCode(),
-                                                TaskType = TaskTypeEnum.Move,
-                                                Type = PLCTypeEnum.ShuttleCar,
-                                                StartLocate = carXYZ,
-                                                EndLocate = endLocateCar,
-                                                PalletNo = "",
-                                                Status = TaskStatusEnum.Wait,
-                                                Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇
-                                                Origin = "WCS",
-                                                CarIp = modDevice.PlcIdIP
-                                            };
-                                            _db.Insertable(modCarTask).ExecuteCommand();
-                                            HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>());
+                                                //娣诲姞灏忚溅鍏呯數浣嶇疆
+                                                WcsTask modCarTask = new WcsTask()
+                                                {
+                                                    TaskNo = _taskService.GetTaskCode(),
+                                                    TaskType = TaskTypeEnum.Move,
+                                                    Type = PLCTypeEnum.ShuttleCar,
+                                                    StartLocate = carXYZ,
+                                                    EndLocate = endLocateCar,
+                                                    PalletNo = "",
+                                                    Status = TaskStatusEnum.Wait,
+                                                    Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇
+                                                    Origin = "WCS",
+                                                    CarIp = modDevice.PlcIdIP
+                                                };
+                                                _db.Insertable(modCarTask).ExecuteCommand();
+                                                HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>());
+                                            }
+                                                
                                         }
                                        
                                     }
@@ -472,6 +548,77 @@
                             carTaskNext.Status = TaskStatusEnum.Doing;
                             carTaskNext.CarTaskNo = carTaskNo;
                             _db.Updateable(carTaskNext).ExecuteCommand();
+
+                            if (modTask.TaskType == TaskTypeEnum.Out)
+                            {
+                                #region 杈撻�佺嚎 鍐欏叆PLC 730
+
+                                var text = "";
+                                var devStation = "";
+                                var endLocate = modTask.EndRoadway;
+                                var carcon = new carConverModel();
+                                if (carcon.conveyorBei.Keys.Contains(endLocate))
+                                {
+                                    text = "杈撻�佺嚎鍖�";
+                                    devStation = carcon.conveyorBei[endLocate];
+                                }
+                                else if (carcon.conveyorNan.Keys.Contains(endLocate))
+                                {
+                                    text = "杈撻�佺嚎鍗�";
+                                    devStation = carcon.conveyorNan[endLocate];
+                                }
+                                if (text != "")
+                                {
+                                    var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text);
+                                    var modConn = new PLCUtil(modPlc);
+
+                                    var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation);
+                                    var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos);
+                                    if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 720)
+                                    {
+                                        modConn.Close();
+                                        return;//鏀捐揣宸ヤ綅娌℃湁璇诲彇鎴愬姛鎴栦笉鏄┖闂�
+                                    }
+                                    var listResultcon = new List<Result>();
+
+                                    //浠诲姟鍙蜂笌鎵樼洏鏉$爜
+                                    var modPosConverTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "浠诲姟鍙�");
+                                    listResultcon.Add(modConn.SetPlcDBValue(modPosConverTask.PosType, modDeviceConver.DbNumber, modPosConverTask.PlcPos, modTask.TaskId.ToString()));
+                                    var modPosConverPallet = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "鎵樼洏鏉$爜");
+                                    listResultcon.Add(modConn.SetPlcDBValue(modPosConverPallet.PosType, modDeviceConver.DbNumber, modPosConverPallet.PlcPos, modTask.PalletNo.ToString()));
+
+                                    // 璧峰宸ヤ綅銆佺洰鐨勫伐浣�
+                                    var modPosConverStrLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "璧峰宸ヤ綅");
+                                    listResultcon.Add(modConn.SetPlcDBValue(modPosConverStrLocat.PosType, modDeviceConver.DbNumber, modPosConverStrLocat.PlcPos, modDeviceConver.StationNum));
+                                    var modPosConverEndLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "鐩殑宸ヤ綅");
+                                    listResultcon.Add(modConn.SetPlcDBValue(modPosConverEndLocat.PosType, modDeviceConver.DbNumber, modPosConverEndLocat.PlcPos, modTask.EndLocate));
+
+                                    if (listResultcon.All(s => s.IsSucceed))
+                                    {
+                                        var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "730");
+                                        if (!plcResult.IsSucceed)
+                                        {
+                                            modConn.Close();
+                                            return;
+                                        }
+                                        //娣诲姞浠诲姟鏄庣粏
+                                        var taskMonitor2 = new WcsTaskMonitor()
+                                        {
+                                            TaskNo = carTaskNext.TaskNo,
+                                            PlcName = modDevice.Text,
+                                            Status = TaskStatusEnum.Complete,
+                                            InteractiveMsg = $"鍐欏叆鎸囦护730锛氬伐浣嶆槸{modDeviceConver.StationNum}"
+                                        };
+                                        _db.Insertable(taskMonitor2).ExecuteCommand();
+                                    }
+                                        
+                                    modConn.Close();
+                                }
+
+
+                                #endregion
+                            }
+                             
                             //娓呴櫎灏忚溅绌洪棽鏃堕棿
                             var carTimeClear = _db.Queryable<WcsCarTime>().First(m=>m.IsDelete == false && m.CarIp == modDevice.PlcIdIP);
                             if (carTimeClear!= null)
@@ -484,6 +631,7 @@
                             {
                                 TaskNo = carTaskNext.TaskNo,
                                 PlcName = modDevice.Text,
+                                Status = TaskStatusEnum.Complete,
                                 InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTaskNext.TaskNo}"
                             };
                             _db.Insertable(taskMonitor).ExecuteCommand();
@@ -558,14 +706,38 @@
         var ledText = "";
         switch (modDevice.Value.ToString())
         {
+            case "120": //绌洪棽锛孉GV鍙斁璐�
+                {
+                    var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.IsComple == "1");
+                    if (task != null)
+                    {
+                        //娌℃湁鍑哄簱涓氬姟
+                        var res = new HttpService().GenAgvContinueTask(task.TaskNo).Result;
+                        if (res.code == "0")
+                        {
+                            var modTaskMonitor = new WcsTaskMonitor()
+                            {
+                                TaskNo = task.TaskNo,
+                                PlcId = modDevice.modPlc.Id,
+                                PlcName = modDevice.modPlc.IP,
+                                InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂缁х画鎵ц浠诲姟"
+                            };
+                            _db.Insertable(modTaskMonitor).ExecuteCommand();
+
+                            //涓嬪彂浠诲姟鏃ュ織
+                            HubUtil.PublicTask(task.Adapt<WcsTaskOutput>());
+                            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                        }
+                    }
+                }
+                break;
             case "320":
                 {
                     // 鐢宠瀵嗛泦搴撶粍
                     string strMsg = "";
-                    string taskModel = "";
 
                     // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
-                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
                     var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
                     if (!res.IsSucceed)
                     {
@@ -618,7 +790,7 @@
 
                     var http = new HttpService();
                     string TaskNo = "", EndLocate = "";
-                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, "1", ref EndLocate, ref TaskNo);
+                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, ref EndLocate, ref TaskNo);
                     if (!strMsg.Contains("-1"))
                     {
                         // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆�
@@ -693,7 +865,7 @@
             case "330":
                 {
                     // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
-                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
                     var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
                     if (!res.IsSucceed)
                     {
@@ -719,7 +891,7 @@
                     }
 
                     // 鑾峰彇鍥涢」杞﹀彇璐у伐浣�
-                    string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum);
+                    string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum.PadLeft(3,'0'));
 
 
 
@@ -731,7 +903,7 @@
                     var modPosTaskType = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷");
                     var taskTypeStr = (int)modTask.TaskType;
                     listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
-                    var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鐮�");
+                    var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鏉$爜");
                     listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                     // 璧峰宸ヤ綅銆佺洰鐨勫伐浣�
                     var modPosStrLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
@@ -782,25 +954,25 @@
                 {
                     // 鐢宠鍌ㄤ綅 鏇存柊鍏ュ簱浠诲姟(鍌ㄤ綅鍦板潃) 630
                     var strMsg = "";
-                    var taskModel = "";
 
-                    //// 鏍规嵁宸ヤ綅鍙疯幏鍙栧贩閬撳彿
-                    //var roadway = PLCCommon.GetRoadwayByStation(modDevice.StationNum);
-                    //if (roadway == "")
-                    //{
-                    //    break;
-                    //}
+                    // 鑾峰彇宸ヤ綅浠诲姟鍙蜂俊鎭�
+                    var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+                    var (resTask, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
+                    if (!resTask.IsSucceed)
+                    {
+                        break;
+                    }
                     // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
-                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
                     var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
                     if (!res.IsSucceed)
                     {
                         break;
                     }
-                    var http = new HttpService();
+
                     string TaskNo = "";
                     // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅
-                    strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, "roadway", ref TaskNo);
+                    strMsg = new HttpService().RequestLocate(palletVal, taskVal,ref TaskNo);
 
                     if (!strMsg.Contains("-1"))
                     {
@@ -1007,20 +1179,28 @@
                     {
                         var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
                         var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
-                        var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                        var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
                         var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
                         var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
                         var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos);
+
+                        int taskNoVal = Convert.ToInt32(taskVal);
+                        var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskId == taskNoVal);
+                        if (taskInfo == null)
+                        {
+                            Log.Error(string.Format("杈撻�佺嚎430:鏈壘鍒板搴旂殑浠诲姟銆�"));
+                            break;
+                        }
                         // 鎻掑叆浠诲姟鏄庣粏 
                         var modInsertTaskMonitor = new WcsTaskMonitor()
                         {
-                            TaskNo = taskVal,
+                            TaskNo = taskInfo.TaskNo,
                             PlcId = modDevice.Id,
                             PlcName = modDevice.Text,
                             InteractiveMsg = $"鍐欏叆鎸囦护430锛氭墭鐩樺埌杈緖modDevice.StationNum}宸ヤ綅",
                             PalletNo = palletVal,
                             Status = TaskStatusEnum.Complete,
-                            StartLocat = starVal,
+                            StartLocat = Convert.ToString(starVal),
                             EndLocat = modDevice.StationNum,
                         };
 
@@ -1030,8 +1210,6 @@
                         // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
                         HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
 
-                        // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆�
-                        var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == modInsertTaskMonitor.TaskNo);
                         modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.EndLocate).Select(s => s.LedIP).First();
 
                         // led鏄剧ず鍐呭
@@ -1057,19 +1235,22 @@
             case "440":
                 {
                     #region 鎷i�夊畬鎴�,鎵樼洏绂诲紑宸ヤ綅
+
+                    var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+                    var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
+                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜");
+                    var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
+                    var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
+                    var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos);
+
                     // 鍐欏叆450
                     var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "450");
                     if (ret.IsSucceed)
                     {
-                        var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
-                        var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
-                        var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
-                        var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
-                        var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
-                        var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos);
+                        
 
-                        string tasknoVal = taskVal.ToString();
-                        var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false);
+                        int tasknoVal = Convert.ToInt32(taskVal);
+                        var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.IsDelete == false && m.TaskId == tasknoVal);
                         if (modTask == null)
                         {
                             Log.Error(string.Format("杈撻�佺嚎440:鏈壘鍒板搴旂殑浠诲姟銆�"));
@@ -1078,7 +1259,7 @@
                         // 鏀瑰彉浠诲姟鐘舵��
                         modTask.Status = TaskStatusEnum.Complete;
                         modTask.FinishDate = DateTime.Now;
-                        modTask.Levels = 999;
+                        //modTask.Levels = 999;
                         _db.Updateable(modTask).ExecuteCommand();
                         HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
                         // 鎻掑叆浠诲姟鏄庣粏 
@@ -1095,24 +1276,24 @@
                         };
                         if (modTask.Origin == "WMS")
                         {
-                            // 鍙嶉WMS
-                            var requestMode = new TaskRequestWMS()
-                            {
-                                TaskNo = modTask.TaskNo + modTask.EndLocate,
-                                PalletNo = modTask.PalletNo,
-                                TaskType = ((int)TaskTypeEnum.Out).ToString(),
-                                TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
-                            };
-                            HttpService httpService = new HttpService();
-                            var modResponseTask = httpService.RequestTask(requestMode).Result;
-                            if (modResponseTask.StatusCode == 0)
-                            {
-                                modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚";
-                            }
-                            else
-                            {
-                                Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg));
-                            }
+                            //// 鍙嶉WMS
+                            //var requestMode = new TaskRequestWMS()
+                            //{
+                            //    TaskNo = modTask.TaskNo + modTask.EndLocate,
+                            //    PalletNo = modTask.PalletNo,
+                            //    TaskType = ((int)TaskTypeEnum.Out).ToString(),
+                            //    TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+                            //};
+                            //HttpService httpService = new HttpService();
+                            //var modResponseTask = httpService.RequestTask(requestMode).Result;
+                            //if (modResponseTask.StatusCode == 0)
+                            //{
+                            //    modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚";
+                            //}
+                            //else
+                            //{
+                            //    Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg));
+                            //}
                         }
 
                         // 鎻掑叆浜や簰鏃ュ織
@@ -1146,56 +1327,76 @@
     private static void AGV(WcsDeviceDto modDevice)
     {
         
-        //杩欓噷鎵惧嚭鏉GV寰呮墽琛岀殑浠诲姟銆佹寜鐓т紭鍏堢骇涓嬪彂涓�涓换鍔$粰AGV
-        var listTask = _db.Queryable<WcsTask>().Where(s => (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.Type == PLCTypeEnum.AGV).OrderBy(s => s.Levels).ToList();
-        if (listTask.Count == 0)
+        //杩欓噷鎵惧嚭鏉GV寰呮墽琛岀殑浠诲姟銆佹寜鐓т紭鍏堢骇銆佸垱寤烘椂闂翠笅鍙戜竴涓换鍔$粰AGV
+        var modTask = _db.Queryable<WcsTask>().Where(s => s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.AGV).OrderBy(s => new { s.Levels ,s.CreateTime}).First();
+        if (modTask == null)
         {
             return;
         }
         
-        foreach (var modTask in listTask)
+         
+        if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV ))
         {
-            if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV ))
-            {
-                continue; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔�
-            }
-            
-            //涓嬪彂AGV浠诲姟
-            AgvTaskInput input = new AgvTaskInput()
-            {
-                ReqCode = modTask.Id.ToString(),
-                TaskCode = modTask.TaskNo,
-                CtnrCode = modTask.PalletNo,
-                PositionCodePath = new List<PositionCodePathItem>()
-            {
-                new PositionCodePathItem(){ PositionCode = modTask.StartLocate },
-                new PositionCodePathItem(){ PositionCode = modTask.EndLocate }
-            }
-            };
-            input.TaskTyp = "1" + modTask.StartLocate.Substring(0, 1) + modTask.EndLocate.Substring(0, 1);
-            var response = new HttpService().GenAgvSchedulingTask(input).Result;
-            if (response.code == "0")
-            {
-                AGVStatus = true;
-                modTask.Status = TaskStatusEnum.Doing;
-                _db.Updateable(modTask).ExecuteCommand();
-                var modTaskMonitor = new WcsTaskMonitor()
-                {
-                    TaskNo = modTask.TaskNo,
-                    PlcId = modDevice.modPlc.Id,
-                    PlcName = modDevice.modPlc.IP,
-                    InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂浠诲姟"
-                };
-                _db.Insertable(modTaskMonitor).ExecuteCommand();
+            return; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔�
+        }
 
-                //涓嬪彂浠诲姟鏃ュ織
-                HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
-                HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-            }
-            Console.WriteLine(response.ToJson());
+        //涓嬪彂AGV浠诲姟 
+        var taskTypeModel = AGVStorageUtil.GetTaskModle(modTask.StartLocate, modTask.EndLocate,out string type1,out string type2, out string jiebo);
+        if (string.IsNullOrWhiteSpace(taskTypeModel))
+        {
+            Console.WriteLine("鑾峰彇AGV浠诲姟妯℃澘澶辫触锛氳鏍稿疄浠诲姟璧峰鐩爣鍌ㄤ綅鏄惁姝g‘");
             return;
         }
+        AgvTaskSend taskModel = new AgvTaskSend();
+        taskModel.robotTaskCode = modTask.TaskNo;
+        taskModel.taskType = taskTypeModel;
+        if (jiebo == "")
+        {
+            taskModel.targetRoute = new List<targetRoute>()
+            {
+                new targetRoute(){seq = 0,type = type1,code = modTask.StartLocate},
+                new targetRoute(){seq = 1,type = type2,code = modTask.EndLocate}
+            };
+        }
+        else
+        {
+            taskModel.targetRoute = new List<targetRoute>()
+            {
+                new targetRoute(){seq = 0,type = type1,code = modTask.StartLocate},
+                new targetRoute(){seq = 1,type = "ZONE",code = jiebo},
+                new targetRoute(){seq = 2,type = type2,code = modTask.EndLocate}
+            };
+        }
+        
+        taskModel.extra = new extra()
+        {
+            carrierInfo = new List<carrierInfo>()
+            {
+                new carrierInfo(){ carrierType = "TP",carrierCode = modTask.PalletNo}
+            }
+        };
+        var response = new HttpService().GenAgvSendTask(taskModel).Result;
+        if (response.code == "0")
+        {
+            modTask.Status = TaskStatusEnum.Doing;
+            _db.Updateable(modTask).ExecuteCommand();
+            var modTaskMonitor = new WcsTaskMonitor()
+            {
+                TaskNo = modTask.TaskNo,
+                PlcId = modDevice.modPlc.Id,
+                PlcName = modDevice.modPlc.IP,
+                InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂浠诲姟"
+            };
+            _db.Insertable(modTaskMonitor).ExecuteCommand();
+
+            //涓嬪彂浠诲姟鏃ュ織
+            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
+            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+        }
+        //Console.WriteLine(response.ToJson());
         Thread.Sleep(3000);
+        return; 
+        
     }
 
     /// <summary>
@@ -1240,6 +1441,11 @@
 
     private static void Test(WcsDeviceDto modDevice)
     {
+
+        var ledText = $"鐢宠鍏ュ簱澶辫触\n\n";
+        ledText += $"鎵樼洏鍙�:T2300001\n";
+        ledText += $"鍏ュ簱浠诲姟宸查攣瀹氾紝璇疯В閿佸悗閲嶈瘯!\n";
+        LedDisplay("10.26.254.31", ledText);
         //鍗峰笜闂�2鐢宠鎵撳紑
         //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1152", "10");
         //鍗峰笜闂�2鐢宠鍏抽棴
@@ -1251,7 +1457,7 @@
         //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1154", "30");
 
         //C鍙GV鏀炬墭鐩樺畬鎴愮敵璇峰叆搴�
-        var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1156", "100");
+        //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1156", "100");
 
         ////鍐欐娴嬭瘯璇籹tring
         //var (res, val) = modDevice.PLCUtil.GetPlcDBValue(PLCDataTypeEnum.String, "DB100", "64");

--
Gitblit v1.8.0