From 4c7f2d26fd6041d32f4e291559bc443671493246 Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期四, 19 六月 2025 16:52:45 +0800
Subject: [PATCH] 修改问题

---
 Admin.NET/WCS.Application/PLC/PLCService.cs |  767 ++++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 546 insertions(+), 221 deletions(-)

diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index a25f1e5..0177093 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -1,11 +1,16 @@
 锘縰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;
+using Newtonsoft.Json;
+using Org.BouncyCastle.Ocsp;
 using SixLabors.ImageSharp.ColorSpaces;
 using WCS.Application.Entity;
 using WCS.Application.Util;
@@ -25,6 +30,7 @@
         try
         {
             var mod = sender as WcsDeviceDto;
+            
             //Console.WriteLine($"{mod.Text}鍊间负" + mod.Value);
             switch (mod.Type)
             {
@@ -35,6 +41,10 @@
                     AGV(mod);                                       // AGV璋冨害
                     break;
                 case PLCTypeEnum.ShuttleCar: //绌挎杞�
+                    //if (mod.PlcIdIP == "10.26.254.28") 
+                    //{
+                    //    break;
+                    //}
                     ShuttleCar(mod);
                     break;
                 case PLCTypeEnum.RobotPalletizer:
@@ -70,7 +80,7 @@
                     TaskNo = _taskService.GetTaskCode(),
                     TaskType = TaskTypeEnum.Move,
                     Type = PLCTypeEnum.AGV,
-                    StartLocate = AGVStorageUtil.GetPalletOutStorage(),
+                    StartLocate = "",
                     EndLocate = AGVStaionEnum.D1.ToString(),
                     PalletNo = "",
                     Status = TaskStatusEnum.Wait,
@@ -170,68 +180,187 @@
                         int valueTaskStr = Convert.ToInt32(valueTask);
                         //鑾峰彇浠诲姟淇℃伅 鏍规嵁  浠诲姟鍙枫�佸皬杞︾紪鍙�
                         var carTask = _db.Queryable<WcsCarTasks>().First(m=>m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.CarTaskNo == valueTaskStr && m.CarNo == modDevice.PlcIdIP);
-                        if (carTask == null)
+                        if (carTask != null)
                         {
                             //var modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
                             //plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//娌℃湁鎵惧埌浠诲姟  澶嶄綅
-                            return;
-                        }
-                         
-                        var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo);
-                        if (modFinshTask == null)
-                        {
-                            break;//娌℃湁鏌ヨ鍒版�讳换鍔�
-                        } 
-                        if (carTask != null && carTask.Status != TaskStatusEnum.Complete)
-                        {
-                            carTask.Status = TaskStatusEnum.Complete;
-                            carTask.UpdateTime = DateTime.Now;
-                            _db.Updateable(carTask).ExecuteCommand();
-                            //娣诲姞浠诲姟鏄庣粏
-                            var taskMonitor = new WcsTaskMonitor()
-                            {
-                                TaskNo = carTask.TaskNo,
-                                PlcName = modDevice.Text,
-                                InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�"
-                            };
-                            _db.Insertable(taskMonitor).ExecuteCommand();
-                            //涓嬪彂浠诲姟鏃ュ織
                             
-                            HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
-                        }
-                        //鑾峰彇璺緞2鐨勪换鍔� 涓嬪彂
-                        carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status <= TaskStatusEnum.Doing).OrderBy(m => m.CreateTime).First();
-                        //鎬讳换鍔′笅娌℃湁鍏朵粬鏈墽琛屽皬杞︾殑浠诲姟 鍙樻洿鎬讳换鍔′俊鎭�
-                        if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
-                        {
-                            modFinshTask.Status = TaskStatusEnum.Complete;
-                            modFinshTask.FinishDate = DateTime.Now;
-                            _db.Updateable(modFinshTask).ExecuteCommand();
-                            
-                            //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟,涓嬪彂寮�濮嬪厖鐢靛懡浠�
-                            if (modFinshTask.Levels == 888)
+                            var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo);
+                            if (modFinshTask == null)
                             {
-                                //鍐欏叆寮�濮嬪厖鐢�
-                                var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
-                                plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2");
+                                break;//娌℃湁鏌ヨ鍒版�讳换鍔�
+                            } 
+                            if (carTask != null && carTask.Status != TaskStatusEnum.Complete)
+                            {
+                                carTask.Status = TaskStatusEnum.Complete;
+                                carTask.UpdateTime = DateTime.Now;
+                                _db.Updateable(carTask).ExecuteCommand();
+                                //娣诲姞浠诲姟鏄庣粏
+                                var taskMonitor = new WcsTaskMonitor()
+                                {
+                                    TaskNo = carTask.TaskNo,
+                                    PlcName = modDevice.Text,
+                                    Status = TaskStatusEnum.Complete,
+                                    InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�"
+                                };
+                                _db.Insertable(taskMonitor).ExecuteCommand();
+                                //涓嬪彂浠诲姟鏃ュ織
+                            
+                                HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
                             }
+                            //鑾峰彇璺緞2鐨勪换鍔� 涓嬪彂
+                            carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status <= TaskStatusEnum.Doing).OrderBy(m => m.CreateTime).First();
+                            //鎬讳换鍔′笅娌℃湁鍏朵粬鏈墽琛屽皬杞︾殑浠诲姟 鍙樻洿鎬讳换鍔′俊鎭�
+                            if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
+                            {
+                                if (modFinshTask.TaskType == TaskTypeEnum.Out)
+                                {
+                                    //#region 浠诲姟鍙樻洿鎴愯緭閫佺嚎浠诲姟
+                                    //modFinshTask.Status = TaskStatusEnum.Wait;
+                                    //modFinshTask.Type = PLCTypeEnum.ConveyorLine;
+                                    //_db.Updateable(modFinshTask).ExecuteCommand();
 
-                            //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
-                            //HttpService httpService = new HttpService();
-                            //var requestMode = new TaskRequestWMS()
-                            //{
-                            //    TaskNo = modFinshTask.TaskNo,
-                            //    PalletNo = modFinshTask.PalletNo,
-                            //    TaskType = ((int)modFinshTask.TaskType).ToString(),
-                            //    TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
-                            //};
-                            //var modResponseTask = httpService.RequestTask(requestMode).Result;
-                            //modFinshTask.IsSuccess = TaskSuccessEnum.Success;
-                            //_db.Updateable(modFinshTask).ExecuteCommand();
-                            HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
-                            
+                                    //#endregion
+
+                                    #region 杈撻�佺嚎 鍐欏叆PLC 740
+
+                                    var text = "";
+                                    var devStation = ""; //宸ヤ綅
+                                    var endLocate = modFinshTask.EndRoadway;
+                                    var carcon = new carConverModel();
+                                    var ip = "";
+                                    if ( carcon.conveyorBei.Keys.Contains(endLocate))
+                                    {
+                                        text = "杈撻�佺嚎鍖�";
+                                        ip = "10.26.254.10";
+                                        devStation = carcon.conveyorBei[endLocate];
+                                    }
+                                    else if (carcon.conveyorNan.Keys.Contains(endLocate))
+                                    {
+                                        text = "杈撻�佺嚎鍗�";
+                                        ip = "10.26.254.11";
+                                        devStation = carcon.conveyorNan[endLocate];
+                                    }
+                                    if (text != "")
+                                    {
+
+                                        var modConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == ip);
+                                        //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();
+
+                                        //鏀瑰彉浠诲姟鐘舵��
+                                        modFinshTask.Status = TaskStatusEnum.Complete;
+                                        modFinshTask.FinishDate = DateTime.Now;
+                                        _db.Updateable(modFinshTask).ExecuteCommand();
+
+                                        var locateOut = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.StartLocate);
+                                        if (locateOut != null && locateOut.Make == "1")
+                                        {
+                                            locateOut.PalletNo = "";
+                                            _db.Updateable(locateOut).ExecuteCommand();
+                                        }
+
+                                        //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
+                                        if (modFinshTask.Origin == "WMS")
+                                        {
+                                            HttpService httpService = new HttpService();
+                                            var requestMode = new TaskRequestWMS()
+                                            {
+                                                TaskNo = modFinshTask.TaskNo,
+                                                PalletNo = modFinshTask.PalletNo,
+                                                TaskType = ((int)modFinshTask.TaskType).ToString(),
+                                                TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+                                            };
+                                            var modResponseTask = httpService.RequestTask(requestMode).Result;
+                                            modFinshTask.IsSuccess = TaskSuccessEnum.Success;
+                                            _db.Updateable(modFinshTask).ExecuteCommand();
+                                            HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
+                                        }
+
+                                    }
+
+
+                                    #endregion 
+                                }
+                                else
+                                {
+                                    modFinshTask.Status = TaskStatusEnum.Complete;
+                                    modFinshTask.FinishDate = DateTime.Now;
+                                    _db.Updateable(modFinshTask).ExecuteCommand();
+
+                                    if (modFinshTask.TaskType == TaskTypeEnum.Move)
+                                    {
+                                        var locatemove = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.StartLocate);
+                                        if (locatemove != null && locatemove.Make == "1")
+                                        {
+                                            locatemove.PalletNo = "";
+                                            _db.Updateable(locatemove).ExecuteCommand();
+                                        }
+                                    }
+
+                                    var locateIn = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.EndLocate);
+                                    if (locateIn != null && locateIn.Make == "1")
+                                    {
+                                        locateIn.PalletNo = string.IsNullOrWhiteSpace(modFinshTask.PalletNo) ? "pall" : modFinshTask.PalletNo;
+                                        _db.Updateable(locateIn).ExecuteCommand();
+                                    }
+
+                                    //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
+                                    if (modFinshTask.Origin == "WMS")
+                                    {
+                                        HttpService httpService = new HttpService();
+                                        var requestMode = new TaskRequestWMS()
+                                        {
+                                            TaskNo = modFinshTask.TaskNo,
+                                            PalletNo = modFinshTask.PalletNo,
+                                            TaskType = ((int)modFinshTask.TaskType).ToString(),
+                                            TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+                                        };
+                                        var modResponseTask = httpService.RequestTask(requestMode).Result;
+                                        modFinshTask.IsSuccess = TaskSuccessEnum.Success;
+                                        _db.Updateable(modFinshTask).ExecuteCommand();
+                                        HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
+                                    }
+
+                                    
+
+                                }
+                                
+                                //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟,涓嬪彂寮�濮嬪厖鐢靛懡浠�
+                                if (modFinshTask.Levels == 888)
+                                {
+                                    //鍐欏叆寮�濮嬪厖鐢�
+                                    var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
+                                    plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2");
+                                }
+
+                                
+                            }
                         }
-                        
                     }
                     
                     WcsTask modTask;
@@ -260,44 +389,53 @@
                     var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)");
                     var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
                     var carXYZ = valuex.ToString().PadLeft(2, '0') + valuey.ToString().PadLeft(2, '0') + valuez.ToString().PadLeft(2, '0');
-                    if (modTask == null || carTaskNext == null)
+                    if (modTask == null)
                     {
                         //璇诲彇灏忚溅鐢甸噺
                         var modPosCarDl = modDevice.listStation.FirstOrDefault(s => s.Text == "鐢垫睜鐢甸噺");
                         var (resultDl, valueDl) = plcConn.GetDBValue(modPosCarDl.PosType, modPosCarDl.PlcPos);
-                        if (resultDl.IsSucceed && valueDl < FourWayCarDLEnum.Dl)
+                        if (resultDl.IsSucceed && valueDl < (int)FourWayCarDLEnum.Dl)
                         {
                             var endLocateCar = "";
                             if (valuez == 1)
                             {
-                                endLocateCar = "210401";
+                                endLocateCar = "011201";
                             }
                             else if (valuez == 2)
                             {
-                                endLocateCar = "210402"; //011202
+                                endLocateCar = "011202"; //
                             }
                             else
                             {
                                 return; // 灞傛暟閿欒
                             }
-                            //娣诲姞灏忚溅鍏呯數浣嶇疆
-                            WcsTask modCarTask = new WcsTask()
+                            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)
                             {
-                                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>());
+                                var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos);
+                                if (resultDlLock.IsSucceed && valueDlLock!=3 && carXYZ != endLocateCar)
+                                {
+                                    //娣诲姞灏忚溅鍏呯數浣嶇疆
+                                    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>());
+                                }
+                            }
+                            
                         }
-                        else if(resultDl.IsSucceed && valueDl < FourWayCarDLEnum.Dl2)
+                        else if(resultDl.IsSucceed && valueDl < (int)FourWayCarDLEnum.Dl2)
                         {
                             //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔�  鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
                             var carTime = _db.Queryable<WcsCarTime>().First(m => m.IsDelete == false && m.CarIp == modDevice.PlcIdIP);
@@ -338,22 +476,32 @@
                                         {
                                             return; // 灞傛暟閿欒
                                         }
-                                        //娣诲姞灏忚溅鍏呯數浣嶇疆
-                                        WcsTask modCarTask = new WcsTask()
+                                        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)
                                         {
-                                            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>());
+                                            var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos);
+                                            if (resultDlLock.IsSucceed && valueDlLock != 3 && carXYZ != endLocateCar)
+                                            {
+                                                //娣诲姞灏忚溅鍏呯數浣嶇疆
+                                                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>());
+                                            }
+                                                
+                                        }
+                                       
                                     }
                                 }
 
@@ -364,7 +512,10 @@
                         
                         return;
                     }
-                    
+                    if (carTaskNext == null)
+                    {
+                        return;
+                    }
                     if (carTaskNext.Status == TaskStatusEnum.Doing)
                     {
                         Thread.Sleep(3000);
@@ -386,12 +537,24 @@
                             return;//鍓嶇疆浠诲姟鏈畬鎴�
                         }
                     }
+                     
+                    //灏忚溅鐘舵��
+                    var (resultCar, valueCar) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos);
 
-                    //鍏堝浣�
-                    var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
-                    plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1");
+                    var modPosTaskStatus2 = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鐘舵��");
+                    var (resultTaskStatus2, valueTaskStatus2) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos);
+                    if (resultCar.IsSucceed && valueCar == 1 && resultTaskStatus2.IsSucceed && (valueTaskStatus2 == 0 || valueTaskStatus2 == 1))
+                    {
+                        //鍏堝浣�
+                        var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
+                        plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1");
+                    }
+                    else
+                    {
+                        return;
+                    }
 
-                    List<Result> listResult = new List<Result>();
+                        List<Result> listResult = new List<Result>();
                     //鑾峰彇灏忚溅浠诲姟鍙�
                     var carTaskNo = FourWayCarUtil.GetTaskNo();
 
@@ -404,7 +567,7 @@
                     }
 
                     var modWriteTask = modDevice.listStation.FirstOrDefault(s => s.Text == "鍐欏叆浠诲姟鍙�");
-                    listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString()));
+                    listResult.Add(plcConn.SetDBValueRepeat(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString()));
 
                     var modNodeX = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣X");
                     var modNodeY = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣Y");
@@ -438,22 +601,97 @@
                         var epathz = ePath.Substring(4, 2);
                         var epathn = ePath.Substring(6, 1);
                         //鍐欏叆浜や簰浣嶇疆
-                        listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), epathx));
-                        listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), epathy));
-                        listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), epathz));
-                        listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), epathn));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeX.PosType, posX++.ToString(), epathx));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeY.PosType, posY++.ToString(), epathy));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeZ.PosType, posZ++.ToString(), epathz));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeStatus.PosType, posStatus++.ToString(), epathn));
                     }
                     
                     //杩欓噷鏄妸鍚庨潰鐨勫潗鏍囧叏鍐�0锛堜负浜嗛槻姝笂娆′换鍔″潗鏍囨病琚鐩栵級
                     while (posX <= 43097)
                     {
-                        listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), "0"));
-                        listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), "0"));
-                        listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), "0"));
-                        listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "0"));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeX.PosType, posX++.ToString(), "0"));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeY.PosType, posY++.ToString(), "0"));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeZ.PosType, posZ++.ToString(), "0"));
+                        listResult.Add(plcConn.SetDBValueRepeat(modNodeStatus.PosType, posStatus++.ToString(), "0"));
                     }
                     if (listResult.All(s => s.IsSucceed))
                     {
+                        if (modTask.TaskType == TaskTypeEnum.Out)
+                        {
+                            #region 杈撻�佺嚎 鍐欏叆PLC 730
+
+                            var text = "";
+                            var devStation = "";
+                            var endLocate = modTask.EndRoadway;
+                            var carcon = new carConverModel();
+                            var ip = "";
+                            if (carcon.conveyorBei.Keys.Contains(endLocate))
+                            {
+                                text = "杈撻�佺嚎鍖�";
+                                ip = "10.26.254.10";
+                                devStation = carcon.conveyorBei[endLocate];
+                            }
+                            else if (carcon.conveyorNan.Keys.Contains(endLocate))
+                            {
+                                text = "杈撻�佺嚎鍗�";
+                                ip = "10.26.254.11";
+                                devStation = carcon.conveyorNan[endLocate];
+                            }
+                            if (text != "")
+                            {
+                                var modConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == ip);
+                                //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)
+                                {
+                                    var listResultcon = new List<Result>();
+
+                                    //浠诲姟鍙蜂笌鎵樼洏鏉$爜
+                                    var modPosConverTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "浠诲姟鍙�");
+                                    listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverTask.PosType, modDeviceConver.DbNumber, modPosConverTask.PlcPos, modTask.TaskId.ToString()));
+                                    var modPosConverPallet = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "鎵樼洏鏉$爜");
+                                    listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverPallet.PosType, modDeviceConver.DbNumber, modPosConverPallet.PlcPos, modTask.PalletNo.ToString()));
+
+                                    // 璧峰宸ヤ綅銆佺洰鐨勫伐浣�
+                                    var modPosConverStrLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "璧峰宸ヤ綅");
+                                    listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverStrLocat.PosType, modDeviceConver.DbNumber, modPosConverStrLocat.PlcPos, modDeviceConver.StationNum));
+                                    var modPosConverEndLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "鐩殑宸ヤ綅");
+                                    listResultcon.Add(modConn.SetPlcDBValueRepeat(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();
+                                    }
+                                }
+                                else if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 730)
+                                {
+                                    return;
+                                }
+                               
+                            }
+
+
+                            #endregion
+                        }
+
                         var modStart = modDevice.listStation.FirstOrDefault(s => s.Text == "鍚姩鍛戒护");
                         var result = plcConn.SetDBValue(modStart.PosType, modStart.PlcPos, "1");
                         if (result.IsSucceed)
@@ -461,11 +699,22 @@
                             carTaskNext.Status = TaskStatusEnum.Doing;
                             carTaskNext.CarTaskNo = carTaskNo;
                             _db.Updateable(carTaskNext).ExecuteCommand();
+
+                            
+                             
                             //娓呴櫎灏忚溅绌洪棽鏃堕棿
+                            var carTimeClear = _db.Queryable<WcsCarTime>().First(m=>m.IsDelete == false && m.CarIp == modDevice.PlcIdIP);
+                            if (carTimeClear!= null)
+                            {
+                                carTimeClear.CarTime = null;
+                                carTimeClear.UpdateTime = DateTime.Now;
+                                _db.Updateable(carTimeClear).ExecuteCommand();
+                            }
                             var taskMonitor = new WcsTaskMonitor()
                             {
                                 TaskNo = carTaskNext.TaskNo,
                                 PlcName = modDevice.Text,
+                                Status = TaskStatusEnum.Complete,
                                 InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTaskNext.TaskNo}"
                             };
                             _db.Insertable(taskMonitor).ExecuteCommand();
@@ -540,14 +789,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)
                     {
@@ -568,7 +841,7 @@
                         }
 
                         // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
-                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                         if (ret.IsSucceed)
                         {
                             plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -589,7 +862,7 @@
                         }
 
                         // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
-                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                         if (ret.IsSucceed)
                         {
                             plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -600,7 +873,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灞忓箷銆�
@@ -664,7 +937,7 @@
                         }
 
                         // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
-                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                         if (ret.IsSucceed)
                         {
                             plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -675,7 +948,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)
                     {
@@ -701,7 +974,7 @@
                     }
 
                     // 鑾峰彇鍥涢」杞﹀彇璐у伐浣�
-                    string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum);
+                    string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum.PadLeft(3,'0'));
 
 
 
@@ -709,17 +982,17 @@
                     var listResult = new List<Result>();
                     // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿
                     var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
-                    listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskId.ToString()));
+                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskId.ToString()));
                     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 == "鎵樼洏鐮�");
-                    listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
+                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
+                    var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鏉$爜");
+                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                     // 璧峰宸ヤ綅銆佺洰鐨勫伐浣�
                     var modPosStrLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
-                    listResult.Add(plcConn.SetPlcDBValue(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum));
+                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum));
                     var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
-                    listResult.Add(plcConn.SetPlcDBValue(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue));
+                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue));
 
 
                     if (listResult.All(s => s.IsSucceed))
@@ -764,25 +1037,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"))
                     {
@@ -989,22 +1262,57 @@
                     {
                         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 && w.TaskType == TaskTypeEnum.Out);
+                        if (taskInfo == null)
+                        {
+                            Log.Error(string.Format("杈撻�佺嚎430:鏈壘鍒板搴旂殑浠诲姟銆�"));
+                            break;
+                        }
+                        //// 鏀瑰彉浠诲姟鐘舵��
+                        //taskInfo.Status = TaskStatusEnum.Complete;
+                        //taskInfo.FinishDate = DateTime.Now;
+                        ////modTask.Levels = 999;
+                        //_db.Updateable(taskInfo).ExecuteCommand();
+                        //HubUtil.PublicTask(taskInfo.Adapt<WcsTaskOutput>());
                         // 鎻掑叆浠诲姟鏄庣粏 
                         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,
                         };
+                        //if (taskInfo.Origin == "WMS")
+                        //{
+                        //    // 鍙嶉WMS
+                        //    var requestMode = new TaskRequestWMS()
+                        //    {
+                        //        TaskNo = taskInfo.TaskNo,
+                        //        PalletNo = taskInfo.PalletNo,
+                        //        TaskType = ((int)taskInfo.TaskType).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));
+                        //    }
+                        //}
 
                         // 鎻掑叆浜や簰鏃ュ織
                         _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
@@ -1012,8 +1320,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鏄剧ず鍐呭
@@ -1039,78 +1345,45 @@
             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.IsDelete == false && m.TaskId == tasknoVal);
                         if (modTask == null)
                         {
                             Log.Error(string.Format("杈撻�佺嚎440:鏈壘鍒板搴旂殑浠诲姟銆�"));
                             break;
                         }
-                        // 鏀瑰彉浠诲姟鐘舵��
-                        modTask.Status = TaskStatusEnum.Complete;
-                        modTask.FinishDate = DateTime.Now;
-                        modTask.Levels = 999;
-                        _db.Updateable(modTask).ExecuteCommand();
-                        HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
+                        
                         // 鎻掑叆浠诲姟鏄庣粏 
                         var modInsertTaskMonitor = new WcsTaskMonitor()
                         {
                             TaskNo = modTask.TaskNo,
                             PlcId = modDevice.Id,
                             PlcName = modDevice.Text,
-                            InteractiveMsg = $"鍐欏叆鎸囦护450锛歿modDevice.StationNum}鍑哄簱瀹屾垚",
+                            InteractiveMsg = $"鍐欏叆鎸囦护450锛歿modDevice.StationNum}鎵樼洏绂诲紑宸ヤ綅",
                             PalletNo = palletVal,
                             Status = TaskStatusEnum.Complete,
                             StartLocat = starVal.ToString(),
                             EndLocat = modDevice.StationNum,
                         };
-                        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));
-                            }
-                        }
-
                         // 鎻掑叆浜や簰鏃ュ織
                         _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
 
                         // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
                         HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-                        // led鏄剧ず鍐呭
-                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId);
-
-                        ledText += $"鍑哄簱瀹屾垚\n\n";
-                        ledText += $"浠诲姟鍙�:{modTask.TaskNo}\n";
-                        ledText += $"鎵樼洏鍙�:{modTask.PalletNo}\n\n";
-                        ledText += $"璧峰浣�:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
-                        ledText += $"鐩爣浣�:{modTask.EndRoadway + " " + modTask.EndLocate}";
-                        LedDisplay(ledDevice.LedIP, ledText);
                     }
                     #endregion
                 }
@@ -1128,56 +1401,103 @@
     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>();
+            
+            if (taskModel.taskType == "DPJRK")
+            {
+                //var code = "[{\"type\":\"SITE\",\"code\":\"B100101\"},{\"type\":\"PILE_COUNT\",\"code\":\"8\"}]";
+                var code = new List<object>()
+                {
+                    new {type = "SITE" , code = modTask.StartLocate},
+                    new { type = "PILE_COUNT", code = modTask.Qty }
+                };
+                
+                taskModel.targetRoute.Add(new targetRoute() { 
+                    seq = 0,
+                    type = "MIX_CONDITION",
+                    code = JsonConvert.SerializeObject(code) // "[{\"type":\"SITE", code = modTask.StartLocate },new { type = "PILE_COUNT", code = modTask.Qty }]"
+
+
+                });
+                taskModel.targetRoute.Add(new targetRoute() { seq = 1, type = type2, code = modTask.EndLocate });
+            }
+            else
+            {
+                taskModel.targetRoute.Add(new targetRoute() { seq = 0, type = type1, code = modTask.StartLocate });
+                taskModel.targetRoute.Add(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();
+         
+        if (taskModel.taskType != "DPJRK")
+        {
+            taskModel.extra.carrierInfo = new List<carrierInfo>()
+            {
+                new carrierInfo(){ carrierType = "TP",carrierCode = modTask.PalletNo}
+            };
+        }
+            
+         
+
+        var response = new HttpService().GenAgvSendTask(taskModel).Result;
+        if (response.code == "SUCCESS")
+        {
+            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>
@@ -1222,6 +1542,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鐢宠鍏抽棴
@@ -1233,7 +1558,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