From c2bed218cc875e59fff53ef43a187d5934bdf35c Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期日, 27 四月 2025 14:59:20 +0800
Subject: [PATCH] 修改优化问题

---
 Admin.NET/WCS.Application/PLC/PLCService.cs      |   62 +++++++---
 Admin.NET/WCS.Application/Util/FourWayCarUtil.cs |  107 ++++++++++++++---
 Admin.NET/WCS.Application/Entity/WcsTask.cs      |    2 
 Admin.NET/WCS.Application/OpenApi/OpenApi.cs     |   54 ++++++++
 Admin.NET/WCS.Application/PLC/PLCTaskAction.cs   |   94 ++++++++++-----
 5 files changed, 242 insertions(+), 77 deletions(-)

diff --git a/Admin.NET/WCS.Application/Entity/WcsTask.cs b/Admin.NET/WCS.Application/Entity/WcsTask.cs
index df6477c..7333be5 100644
--- a/Admin.NET/WCS.Application/Entity/WcsTask.cs
+++ b/Admin.NET/WCS.Application/Entity/WcsTask.cs
@@ -14,7 +14,7 @@
     public string? TaskNo { get; set; }
     
     /// <summary>
-    /// 浠诲姟绫诲瀷
+    /// 浠诲姟绫诲瀷  
     /// </summary>
     [SugarColumn(ColumnName = "TaskType", ColumnDescription = "浠诲姟绫诲瀷")]
     public TaskTypeEnum? TaskType { get; set; }
diff --git a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
index 62c9a4d..7d62853 100644
--- a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
+++ b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
@@ -17,6 +17,8 @@
 using Newtonsoft.Json.Linq;
 using SqlSugar;
 using NewLife.Reflection;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.CustomServiceKfSessionGetWaitCaseResponse.Types;
+using WCS.Application.Util;
 
 namespace WCS.Application;
 
@@ -42,7 +44,54 @@
         _taskService = taskService;
     }
 
-    // <summary>
+    /// <summary>
+    /// 娴嬭瘯鍒嗛厤浠诲姟璺緞
+    /// </summary>
+    /// <param name="models">浠诲姟淇℃伅</param>
+    /// <returns>鍙嶉淇℃伅</returns>
+    [AllowAnonymous]
+    public async Task AddAssignTasks(ResponseTasksModel models)
+    {
+        // 楠岃瘉浠诲姟鏄惁宸插瓨鍦�
+        var taskInfo = await _db.Queryable<WcsTask>().FirstAsync(w => w.TaskNo == models.TaskNo);
+        if (taskInfo == null)
+        {
+            throw Oops.Bah("浠诲姟:" + models.TaskNo + ";涓嶅瓨鍦�!");
+        }
+        var data1 = FourWayCarUtil.GetCarPath("090601", "080401");
+        if (data1 == null) //|| data1.Count == 0
+        {
+            throw Oops.Bah("鍒嗛厤璺緞涓嶅瓨鍦�!");
+        }
+
+        // 鏍规嵁浠诲姟鐘舵�� 琛ュ厖璧峰缁撴潫鑺傜偣鐘舵��
+        var data2 = FourWayCarUtil.GetCarPathUp(data1, 1);
+        var path = "";
+        var executionPath1 = "";
+        foreach (var item in data1)
+        {
+            //璺緞鑺傜偣
+            var pathXYZ = item.X.ToString().PadLeft(2, '0') + item.Y.ToString().PadLeft(2, '0') + item.Z.ToString().PadLeft(2, '0') + item.NodeCom.ToString();
+            path += pathXYZ + ";";
+            if (item.IsSendPlc)
+            {
+                executionPath1 += pathXYZ + ";";
+            }
+        }
+        // 鎻掑叆鍥涘悜杞︿换鍔¤〃
+        var carTask1 = new WcsCarTasks()
+        {
+            TaskNo = taskInfo.TaskNo,
+            PreId = "",
+            ExecutionPath = executionPath1,
+            Path = path,
+            CarNo = "",
+            Status = TaskStatusEnum.Wait
+        };
+        var i = _db.Insertable(carTask1).ExecuteCommand();
+        Console.WriteLine(""+i);
+    }
+
     /// WCS鎺ュ彈WMS涓嬪彂鐨勪换鍔�(澶�
     /// 鏉′换鍔�)
     /// <param name="models">浠诲姟淇℃伅</param>
@@ -115,8 +164,9 @@
         var taskAdd = new WcsTask()
         {
             TaskNo = models.TaskNo,
-            TaskType = TaskTypeEnum.Out,
+            TaskType = (TaskTypeEnum?)int.Parse(models.TaskType),
             Status = TaskStatusEnum.Wait,
+            Type = models.Type,
             Levels = 999,
             Origin = "WMS",
             StartRoadway = models.StartRoadway,
diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index ee43c9c..2fff948 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -146,6 +146,7 @@
     private static void ShuttleCar(WcsDeviceDto modDevice)
     {
         var plcConn = modDevice.modbusUtil;
+        // 鍥涘悜杞︾姸鎬� 0:鏈┖闂�,1:绌洪棽,2:寮傚父  3锛氬厖鐢典腑
         switch (modDevice.Value.ToString())
         {
             case "0":
@@ -156,9 +157,10 @@
                     sysCacheService.HashAddOrUpdate("AlarmInfo_Car", plcConn.PlcIP, -1);
                     var modPosTaskStatus = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鐘舵��");
                     var (resultTaskStatus, valueTaskStatus) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos);
-                    //鍒ゆ柇璇诲彇浠诲姟鐘舵�佹槸鍚︽垚鍔� 骞朵笖浠诲姟鐘舵�佹槸1  0:鏈┖闂�,1:绌洪棽,2:寮傚父  3锛氬厖鐢典腑
-                    
+                    //鍒ゆ柇璇诲彇浠诲姟鐘舵�佹槸鍚︽垚鍔� 骞朵笖浠诲姟鐘舵�佹槸1 0:鏃犱换鍔�,1:浠诲姟瀹屾垚,2:浠诲姟鍙栨秷,3:浠诲姟鏆傚仠锛�4锛氫换鍔″紓甯� 5锛氫换鍔℃墽琛屼腑
+
                     WcsCarTasks carTask2 = null;//null 鏂颁换鍔�  not null 璺緞2浠诲姟
+                    
                     if (resultTaskStatus.IsSucceed && valueTaskStatus == 1)
                     {
                         var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
@@ -169,13 +171,15 @@
                         var carTask = _db.Queryable<WcsCarTasks>().First(m=>m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.CarTaskNo == valueTaskStr && m.CarNo == modDevice.PlcIdIP);
                         if (carTask == null)
                         {
-                            return;//娌℃湁鎵惧埌浠诲姟
+                            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)
                         {
-                            return;//娌℃湁鏌ヨ鍒版�讳换鍔�
+                            break;//娌℃湁鏌ヨ鍒版�讳换鍔�
                         }
                         //鑾峰彇璺緞2鐨勪换鍔� 涓嬪彂
                         carTask2 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.PreId.Contains(carTask.Id.ToString())).OrderBy(m=>m.CreateTime).First();
@@ -221,7 +225,7 @@
                         }
                         
                     }
-
+                    
                     var modStationX = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(X)");
                     var (resultx, valuex) = plcConn.GetDBValue(modStationX.PosType, modStationX.PlcPos);
                     var modStationY = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Y)");
@@ -229,20 +233,30 @@
                     var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)");
                     var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
 
-                    // 鑾峰彇浠诲姟淇℃伅
-                    var modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime).First();
 
+                    WcsTask modTask;
                     //瑕佷笅鍙戣矾寰�2浠诲姟
-                    if (carTask2 == null)
+                    if (carTask2 != null)
                     {
                         modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTask2.TaskNo && s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar);
 
                         carTask2= _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP).OrderBy(m => m.CreateTime).First();
                     }
+                    else
+                    {
+                        // 鑾峰彇浠诲姟淇℃伅
+                        modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime).First();
+                        if (modTask == null)
+                        {
+                            return;
+                        }
+                        carTask2 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP).OrderBy(m => m.CreateTime).First();
+                    }
 
                     //return;
                     if (modTask == null || carTask2 == null)
                     {
+                        //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔�  鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
                         return;
                     }
                     
@@ -285,27 +299,34 @@
                     int posY = Convert.ToInt32(modNodeY.PlcPos);
                     int posZ = Convert.ToInt32(modNodeZ.PlcPos);
                     int posStatus = Convert.ToInt32(modNodeStatus.PlcPos);
-                    if (Convert.ToInt32(valuey) != Convert.ToInt32(modTask.StartLocate.Substring(2, 2)))
-                    {
-                        //鍐欏叆灏忚溅褰撳墠浣嶇疆
-                        listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), Convert.ToString(valuex)));
-                        listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), Convert.ToString(valuey)));
-                        listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), Convert.ToString(valuez)));
-                        listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3"));
-                    }
+
                     //浜や簰璺緞
                     var execuPath = carTask2.ExecutionPath.Split(';');
+                    if (Convert.ToInt32(valuex) != Convert.ToInt32(execuPath[0].Substring(0, 2)) || Convert.ToInt32(valuey) != Convert.ToInt32(execuPath[0].Substring(2, 2)) || Convert.ToInt32(valuez) != Convert.ToInt32(execuPath[0].Substring(4, 2)))
+                    {
+                        return; //灏忚溅浣嶇疆涓庤矾寰勮捣濮嬩綅缃笉鍚�
+                        ////鍐欏叆灏忚溅褰撳墠浣嶇疆
+                        //listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), Convert.ToString(valuex)));
+                        //listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), Convert.ToString(valuey)));
+                        //listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), Convert.ToString(valuez)));
+                        //listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3"));
+                    }
+                    
                     foreach (var ePath in execuPath)
                     {
                         if (string.IsNullOrWhiteSpace(ePath))
                         {
                             continue;
                         }
+                        var epathx = ePath.Substring(0, 2);
+                        var epathy = ePath.Substring(2, 2);
+                        var epathz = ePath.Substring(4, 2);
+                        var epathn = ePath.Substring(6, 1);
                         //鍐欏叆浜や簰浣嶇疆
-                        listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), ePath.Substring(0, 2)));
-                        listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), ePath.Substring(2, 2)));
-                        listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), ePath.Substring(4, 2)));
-                        listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), ePath.Substring(5, 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));
                     }
                     
                     //杩欓噷鏄妸鍚庨潰鐨勫潗鏍囧叏鍐�0锛堜负浜嗛槻姝笂娆′换鍔″潗鏍囨病琚鐩栵級
@@ -325,6 +346,7 @@
                             carTask2.Status = TaskStatusEnum.Doing;
                             carTask2.CarTaskNo = carTaskNo;
                             _db.Updateable(carTask2).ExecuteCommand();
+                            //娓呴櫎灏忚溅绌洪棽鏃堕棿
                             var taskMonitor = new WcsTaskMonitor()
                             {
                                 TaskNo = carTask2.TaskNo,
diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
index e6932f9..17bcb90 100644
--- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -143,7 +143,7 @@
             StartRead();
             ConnectionStatus();
             StartWatchAlarm();
-            //AssignTasks();
+            AssignTasks();
             //StartWatchPosition();
         }
     }
@@ -209,15 +209,15 @@
                                         var (result, value) = modPlcUtil.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos);
                                         if (result.IsSucceed)
                                         {
-                                            //濡傛灉鏄┛姊溅锛岃繖閲屽彂閫佸績璺�
-                                            if (modPlc.Type == PLCTypeEnum.ShuttleCar)
-                                            {
-                                                var modHeart = listPlcPosition.Where(s => s.DeviceId == modDevice.Id && s.Text == "蹇冭烦").FirstOrDefault();
-                                                if (modHeart != null)
-                                                {
-                                                    modPlcUtil.SetPlcDBValue(modHeart.PosType, modHeart.PlcPos, "1");
-                                                }
-                                            }
+                                            ////濡傛灉鏄┛姊溅锛岃繖閲屽彂閫佸績璺�
+                                            //if (modPlc.Type == PLCTypeEnum.ShuttleCar)
+                                            //{
+                                            //    var modHeart = listPlcPosition.Where(s => s.DeviceId == modDevice.Id && s.Text == "蹇冭烦").FirstOrDefault();
+                                            //    if (modHeart != null)
+                                            //    {
+                                            //        modPlcUtil.SetPlcDBValue(modHeart.PosType, modHeart.PlcPos, "1");
+                                            //    }
+                                            //}
                                             //鏃犳祦绋嬭烦鍑�
                                             if (Convert.ToInt32(value) == 0)
                                                 continue;
@@ -265,11 +265,22 @@
                                         var (result, value) = modbusUtil.GetDBValue(modDevice.PosType, modDevice.PlcPos);
                                         if (result.IsSucceed)
                                         {
+                                            //濡傛灉鏄┛姊溅锛岃繖閲屽彂閫佸績璺�
+                                            if (modPlc.Type == PLCTypeEnum.ShuttleCar)
+                                            {
+                                                var modHeart = listPlcPosition.Where(s => s.DeviceId == modDevice.Id && s.Text == "蹇冭烦").FirstOrDefault();
+                                                if (modHeart != null)
+                                                {
+                                                    modbusUtil.SetDBValue(modHeart.PosType, modHeart.PlcPos, "1");
+                                                }
+                                            }
+
                                             //鏃犳祦绋嬭烦鍑�
                                             if (value == 0)
                                                 continue;
                                             var dto = modDevice.Adapt<WcsDeviceDto>();
                                             dto.Value = value;
+                                            dto.PlcIdIP = modPlc.IP;
                                             dto.Type = _modplc.Type;
                                             dto.modbusUtil = modbusUtil;
                                             dto.listStation = listPlcPosition.Where(s => s.DeviceId == modDevice.Id).ToList();
@@ -367,10 +378,13 @@
                 {
                     // 鑾峰彇瀵嗛泦搴撴湭鎵ц浠诲姟 鏍规嵁鍒涘缓鏃堕棿鎺掑簭
                     var waitTask = _db.Queryable<WcsTask>().Where(s => s.IsDelete == false && s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(s => s.CreateTime).First();
-
+                    if (waitTask == null)
+                    {
+                        continue;
+                    }
                     //01010101: 01鎺� 01鍒� 01灞� 01娣卞害-姝ら」鐩笉鍋氬垽鏂�
-                    var taskpai = int.Parse(waitTask.StartLocate.Substring(4, 2));
-                    var tasklie = int.Parse(waitTask.StartLocate.Substring(4, 2));
+                    var taskpai = int.Parse(waitTask.StartLocate.Substring(0, 2));
+                    var tasklie = int.Parse(waitTask.StartLocate.Substring(2, 2));
                     var taskceng = int.Parse(waitTask.StartLocate.Substring(4, 2));
 
                     #region 鑾峰彇褰撳墠浠诲姟鎵�鍦ㄥ眰鎵�鏈夌┖闂插皬杞�
@@ -380,6 +394,7 @@
 
                     // 鑾峰彇褰撳墠浠诲姟鎵�鍦ㄥ眰鎵�鏈夌┖闂插皬杞︼紙鏍规嵁灏忚溅浠诲姟琛ㄦ槸鍚︽湁浠诲姟鍜屽皬杞︾姸鎬佸叡鍚屽垽鏂皬杞︽槸鍚︾┖闂�)
                     var kXCarList = new List<CarInfo>();
+                    var carErr = false;//灏忚溅鏄惁鏈夊け鑱旂殑
                     foreach (var modbusUtil in listModbusUtil)
                     {
                         //濡傛灉灏忚溅鏈夋湭鎵ц鐨勪换鍔★紝璺冲嚭
@@ -414,7 +429,8 @@
                                         if (!kXCarList.Any(m => m.CarPlcIp == modbusUtil.PlcIP))
                                         {
                                             var carVal = ((int)valuex).ToString().PadLeft(2, '0') + ((int)valuey).ToString().PadLeft(2, '0') + ((int)valuez).ToString().PadLeft(2, '0');
-                                            var d = FourWayCarUtil.GetCarPath(carVal, waitTask.StartLocate, 0);
+                                            //灏忚溅鍒板彇璐у偍浣嶈矾寰�  
+                                            var d = FourWayCarUtil.GetCarPath(carVal, waitTask.StartLocate);
                                             kXCarList.Add(new CarInfo()
                                             {
                                                 CarPlcIp = modbusUtil.PlcIP,
@@ -430,8 +446,15 @@
                             else
                             {
                                 Console.WriteLine($"璇诲彇鍥涘悜杞modbusUtil.PlcIP}鐘舵�佸け璐�");
-                                return;//鏈変竴涓皬杞﹁鍙栧け璐ヨ烦鍑烘柟娉曪紝鏆傜紦鍒嗛厤锛岄槻姝㈠悓灞傚皬杞﹀叧鏈烘垨澶辫仈瀵艰嚧闃绘尅璺緞
+                                carErr = true;
+                                break;//鏈変竴涓皬杞﹁鍙栧け璐ヨ烦鍑烘柟娉曪紝鏆傜紦鍒嗛厤锛岄槻姝㈠悓灞傚皬杞﹀叧鏈烘垨澶辫仈瀵艰嚧闃绘尅璺緞
                             }
+                        }
+                        //鏈夊皬杞﹀け鑱旓紝涓嶅垎閰嶄换鍔�
+                        if (carErr)
+                        {
+                            kXCarList.Clear();//娓呮绌鸿溅璁板綍
+                            break;
                         }
                     }
 
@@ -442,7 +465,7 @@
                     var assignCar = kXCarList.OrderBy(m => m.Level).FirstOrDefault();
                     if (assignCar == null)
                     {
-                        break;//娌℃湁绌洪棽灏忚溅
+                        continue;//娌℃湁绌洪棽灏忚溅
                     }
                     var data = new List<CarModel>();
                     if (assignCar.Level != 0)
@@ -450,14 +473,15 @@
                         //鍒ゆ柇灏忚溅浣嶇疆鏄惁涓庝换鍔$殑璧峰鍌ㄤ綅鐩稿悓,涓嶇浉鍚岋細鑾峰彇灏忚溅鍒板彇璐у偍浣嶈矾寰�
                         var carLocate = assignCar.X.ToString().PadLeft(2, '0')+assignCar.Y.ToString().PadLeft(2, '0')+ assignCar.Z.ToString().PadLeft(2, '0');
                         //鑾峰彇灏忚溅鍘诲彇璐у偍浣嶄换鍔¤矾寰�
-                        var data1 = FourWayCarUtil.GetCarPath(carLocate, waitTask.StartLocate, 0);
-                        data.AddRange(data1);
+                        var data1 = FourWayCarUtil.GetCarPath(carLocate, waitTask.StartLocate);
+                        var datas = FourWayCarUtil.GetCarPathUp(data1, 0);
+                        data.AddRange(datas);
                     }
                     //鑾峰彇灏忚溅鍘绘斁璐у偍浣嶄换鍔¤矾寰�
-                    var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, 2, "1");
-                    
-                    data.AddRange(data2);
-                    if (data == null) { break; }
+                    var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, "1");
+                    var datas2 = FourWayCarUtil.GetCarPathUp(data2, 1);
+                    data.AddRange(datas2);
+                    if (data == null) { continue; }
 
                     var preId1 = "";//鍓嶇疆浠诲姟Id
                     var executionPath1 = "";//浜や簰璺緞
@@ -478,10 +502,10 @@
                             //鍒ゆ柇濡傛灉鏄畬鏁磋矾寰� 璁板綍浜や簰璺緞
                             if (isOk == "1")
                             {
-                                if (i == 0)
-                                {
-                                    return;//绗竴涓妭鐐规湁鍜屽叾浠栦换鍔¤矾寰勫啿绐侊紝鏃犳硶閬垮厤
-                                }
+                                //if (i == 0)
+                                //{
+                                //    return;//绗竴涓妭鐐规湁鍜屽叾浠栦换鍔¤矾寰勫啿绐侊紝鏃犳硶閬垮厤
+                                //}
                                 var pathXYZQian = data[i - 1].X.ToString().PadLeft(2, '0') + data[i - 1].Y.ToString().PadLeft(2, '0') + data[i - 1].Z.ToString().PadLeft(2, '0') + data[i].NodeCom.ToString();
                                 if (!executionPath1.Contains(pathXYZQian))
                                 {
@@ -540,14 +564,15 @@
                             var endLocate3 = "";
                             var executionPath3 = "";
                             var path3 = ""; 
-                            var data3 = new List<CarModel>();
+                            var datas3 = new List<CarModel>();
                             //鏌ユ壘鐩爣浣嶇疆
-                            while (endLocate3 == "" || data3.Count == 0 || data3 == null)
+                            while (endLocate3 == "" || datas3.Count == 0 || datas3 == null)
                             {
                                 endLocate3 = FourWayCarUtil.GetCarEndLocation(carXYZ, str3);
-                                data3 = FourWayCarUtil.GetCarPath(carXYZ, endLocate3, 0, "0");
+                                var data3 = FourWayCarUtil.GetCarPath(carXYZ, endLocate3, "0");
+                                datas3 = FourWayCarUtil.GetCarPathUp(data3, 0);
                             }
-                            foreach (var itemPath in data3)
+                            foreach (var itemPath in datas3)
                             {
                                 var pathXYZ = itemPath.X.ToString().PadLeft(2, '0') + itemPath.Y.ToString().PadLeft(2, '0') + itemPath.Z.ToString().PadLeft(2, '0') + itemPath.NodeCom.ToString();
 
@@ -612,14 +637,15 @@
                             var endLocate = "";
                             var executionPath4 = "";
                             var path4 = "";
-                            var data4 = new List<CarModel>();
+                            var datas4 = new List<CarModel>();
                             //鏌ユ壘鐩爣浣嶇疆
-                            while (endLocate == "" || data4.Count == 0 || data4 == null)
+                            while (endLocate == "" || datas4.Count == 0 || datas4 == null)
                             {
                                 endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4);
-                                data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate, 0, "0");
+                                var data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate);
+                                datas4 = FourWayCarUtil.GetCarPathUp(data4, 0);
                             }
-                            foreach (var itemPath in data4)
+                            foreach (var itemPath in datas4)
                             {
                                 var pathXYZ = itemPath.X.ToString().PadLeft(2, '0') + itemPath.Y.ToString().PadLeft(2, '0') + itemPath.Z.ToString().PadLeft(2, '0') + itemPath.NodeCom.ToString();
 
diff --git a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
index aaa4238..5116b4d 100644
--- a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
+++ b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
@@ -14,16 +14,67 @@
 {
     private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
 
-    
+    /// <summary>
+    /// 
+    /// </summary>
+    /// <param name="list">闆嗗悎</param>
+    /// <param name="moveType">绉诲姩绫诲瀷 0:绉诲姩 1:绉昏揣 </param>
+    /// <returns></returns>
+    public static List<CarModel> GetCarPathUp(List<CarModel> list,int moveType)
+    {
+        for (int i = 0; i < list.Count; i++)
+        {
+            if (i > 0 && i < list.Count - 1)
+            {
+                if (list[i].X == list[i + 1].X)
+                {
+                    list[i].NodeCom = 2;
+                }
+                else if (list[i].Y == list[i + 1].Y)
+                {
+                    list[i].NodeCom = 3;
+                }
+            }
+            if (i== 0)
+            {
+                list[i].IsSendPlc = true;
+                if (moveType == 0)
+                {
+                    if (list[i + 1] == null)
+                    {
+                        continue;
+                    }
+                    
+                }
+                else 
+                {
+                    list[i].NodeCom = 1;
+                }
+            }
+            if (i == list.Count-1)
+            {
+                list[i].IsSendPlc = true;
+                if (moveType == 0)
+                {
+                    list[i].NodeCom = list[i + 1].NodeCom;
+                }
+                else
+                {
+                    list[i].NodeCom = 4;
+                }
+            }
+        }
+        return list;
+    }
+
     /// <summary>
     /// 鑾峰彇灏忚溅璺緞
     /// </summary>
     /// <param name="startLocation">璧峰浣嶇疆</param>
     /// <param name="endLocation">鐩爣浣嶇疆</param>
-    /// <param name="moveType">绉诲姩绫诲瀷 0:绉诲姩 1:鍙栬揣 2:鏀捐揣</param>
     /// <param name="isLoad">鏄惁杞借揣0锛氭湭杞借揣  1锛氬凡杞借揣</param>
     /// <returns></returns>
-    public static List<CarModel> GetCarPath(string startLocation, string endLocation, int moveType, string isLoad = "0")
+    public static List<CarModel> GetCarPath(string startLocation, string endLocation,  string isLoad = "0")
     {
         if (string.IsNullOrEmpty(startLocation) || string.IsNullOrEmpty(endLocation))
         {
@@ -174,25 +225,41 @@
                     if (!gScore.ContainsKey(neighbor) || tentativeGScore < gScore[neighbor])
                     {
                         neighbor.IsSendPlc = false;
-                        // 琛ュ厖鍙傛暟
-                        if (neighbor.Equals(end))
-                        {
-                            neighbor.NodeCom = moveType;
-                            neighbor.IsSendPlc = true;
-                        }
-                        else if (currentModel.Make != locationModel.Make)
-                        {
-                            if (current.X == neighbor.X)
-                            {
-                                neighbor.NodeCom = 3;
-                            }
-                            else if (current.Y == neighbor.Y)
-                            {
-                                neighbor.NodeCom = 2;
-                            }
 
-                            neighbor.IsSendPlc = true;
+                        //if (current.X == neighbor.X)
+                        //{
+                        //    current.NodeCom = 2;
+                        //}
+                        //else if (current.Y == neighbor.Y)
+                        //{
+                        //    current.NodeCom = 3;
+                        //}
+
+                        //// 琛ュ厖鍙傛暟
+                        //if (current.Equals(start))
+                        //{
+                        //    current.NodeCom = moveType;
+                        //    current.IsSendPlc = true;
+                        //}
+                        //if (neighbor.Equals(end))
+                        //{
+                        //    //neighbor.NodeCom = moveType != 0 ? 2:0 ;
+                        //    if (moveType == 1)
+                        //    {
+                        //        neighbor.NodeCom = 4;
+                        //    }
+                        //    else 
+                        //    {
+                        //        neighbor.NodeCom = current.NodeCom;
+                        //    }
+
+                        //    neighbor.IsSendPlc = true;
+                        //}
+                        if (currentModel.Make != locationModel.Make)
+                        {
+                            neighbor.IsSendPlc = true; 
                         }
+                                                
 
                         // 鏇存柊瀹為檯璺濈涓庨浼拌窛绂�
                         cameFrom[neighbor] = current;

--
Gitblit v1.8.0