From 2ecd9c5db603efcde9e6e51a500b3c2b1162fb85 Mon Sep 17 00:00:00 2001
From: bklLiudl <673013083@qq.com>
Date: 星期一, 28 四月 2025 17:15:44 +0800
Subject: [PATCH] 冲突合并

---
 Admin.NET/WCS.Application/PLC/PLCService.cs         |   40 +-
 Admin.NET/WCS.Application/Util/FourWayCarUtil.cs    |  422 ++++++++++++++++++++++++++----
 Admin.NET/WCS.Application/OpenApi/OpenApi.cs        |   48 +-
 Admin.NET/WCS.Application/PLC/PLCTaskAction.cs      |  272 ++-----------------
 Admin.NET/WCS.Application/Entity/WcsStorageLocat.cs |    2 
 5 files changed, 441 insertions(+), 343 deletions(-)

diff --git a/Admin.NET/WCS.Application/Entity/WcsStorageLocat.cs b/Admin.NET/WCS.Application/Entity/WcsStorageLocat.cs
index 4f7ae77..ecc7f62 100644
--- a/Admin.NET/WCS.Application/Entity/WcsStorageLocat.cs
+++ b/Admin.NET/WCS.Application/Entity/WcsStorageLocat.cs
@@ -126,7 +126,7 @@
     public string? AisleTwo { get; set; }
 
     /// <summary>
-    /// 鍌ㄤ綅绫诲瀷 1鍌ㄤ綅 0閫氶亾
+    /// 鍌ㄤ綅绫诲瀷 1瀛愰�氶亾 0涓婚�氶亾 2 杈撻�佺嚎鍙�
     /// </summary>
     [SugarColumn(ColumnName = "Make", ColumnDescription = "鍌ㄤ綅绫诲瀷", Length = 32)]
     public string? Make { get; set; }
diff --git a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
index 91917e5..c394ccf 100644
--- a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
+++ b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
@@ -42,38 +42,38 @@
         {
             throw Oops.Bah("浠诲姟:" + models.TaskNo + ";涓嶅瓨鍦�!");
         }
-        var data1 = FourWayCarUtil.GetCarPath(taskInfo.StartLocate, taskInfo.EndLocate);
+        var data1 = FourWayCarUtil.GetCarPath("090501", "080501","0");
         if (data1 == null) //|| data1.Count == 0
         {
             throw Oops.Bah("鍒嗛厤璺緞涓嶅瓨鍦�!");
         }
 
         // 鏍规嵁浠诲姟鐘舵�� 琛ュ厖璧峰缁撴潫鑺傜偣鐘舵��
-        var data2 = FourWayCarUtil.GetCarPathUp(data1, 1);
+        var data2 = FourWayCarUtil.GetCarPathUp(data1, 0);
         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);
+        //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涓嬪彂鐨勪换鍔�(澶�
diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index 670f1e5..72c8d93 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -159,8 +159,8 @@
                     var (resultTaskStatus, valueTaskStatus) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos);
                     //鍒ゆ柇璇诲彇浠诲姟鐘舵�佹槸鍚︽垚鍔� 骞朵笖浠诲姟鐘舵�佹槸1 0:鏃犱换鍔�,1:浠诲姟瀹屾垚,2:浠诲姟鍙栨秷,3:浠诲姟鏆傚仠锛�4锛氫换鍔″紓甯� 5锛氫换鍔℃墽琛屼腑
 
-                    WcsCarTasks carTask2 = null;//null 鏂颁换鍔�  not null 璺緞2浠诲姟
-                    
+                    WcsCarTasks carTaskNext = null;//null 鏂颁换鍔�  not null 褰撳墠灏忚溅&&褰撳墠浠诲姟 涓嬩竴鑺備换鍔�
+
                     if (resultTaskStatus.IsSucceed && valueTaskStatus == 1)
                     {
                         var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
@@ -182,7 +182,7 @@
                             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();
+                        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 (carTask != null && carTask.Status != TaskStatusEnum.Complete)
                         {
@@ -201,8 +201,8 @@
                             
                             HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
                         }
-                        //娌℃湁璺緞2鐨勪换鍔� 鍙樻洿鎬讳换鍔′俊鎭�
-                        if (carTask2 == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
+                        //鎬讳换鍔′笅娌℃湁鍏朵粬鏈墽琛屽皬杞︾殑浠诲姟 鍙樻洿鎬讳换鍔′俊鎭�
+                        if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
                         {
                             modFinshTask.Status = TaskStatusEnum.Complete;
                             modFinshTask.FinishDate = DateTime.Now;
@@ -233,40 +233,40 @@
                     var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)");
                     var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
 
-
+                    
                     WcsTask modTask;
                     //瑕佷笅鍙戣矾寰�2浠诲姟
-                    if (carTask2 != null)
+                    if (carTaskNext != null)
                     {
-                        modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTask2.TaskNo && s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar);
+                        modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTaskNext.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();
+                        carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Wait).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();
+                        modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(m => m.Levels).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();
+                        carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Wait).OrderBy(m => m.CreateTime).First();
                     }
 
                     //return;
-                    if (modTask == null || carTask2 == null)
+                    if (modTask == null || carTaskNext == null)
                     {
                         //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔�  鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
                         return;
                     }
                     
-                    if (carTask2.Status == TaskStatusEnum.Doing)
+                    if (carTaskNext.Status == TaskStatusEnum.Doing)
                     {
                         Thread.Sleep(3000);
                         return;
                     }
                     //鍒ゆ柇褰撳墠浠诲姟鏄惁杩樻湁鍓嶇疆浠诲姟鏈畬鎴�
-                    var preStrs = carTask2.PreId.Split(';');
+                    var preStrs = carTaskNext.PreId.Split(';');
                     foreach (var preStr in preStrs)
                     {
                         if (string.IsNullOrWhiteSpace(preStr))
@@ -301,7 +301,7 @@
                     int posStatus = Convert.ToInt32(modNodeStatus.PlcPos);
 
                     //浜や簰璺緞
-                    var execuPath = carTask2.ExecutionPath.Split(';');
+                    var execuPath = carTaskNext.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; //灏忚溅浣嶇疆涓庤矾寰勮捣濮嬩綅缃笉鍚�
@@ -343,15 +343,15 @@
                         var result = plcConn.SetDBValue(modStart.PosType, modStart.PlcPos, "1");
                         if (result.IsSucceed)
                         {
-                            carTask2.Status = TaskStatusEnum.Doing;
-                            carTask2.CarTaskNo = carTaskNo;
-                            _db.Updateable(carTask2).ExecuteCommand();
+                            carTaskNext.Status = TaskStatusEnum.Doing;
+                            carTaskNext.CarTaskNo = carTaskNo;
+                            _db.Updateable(carTaskNext).ExecuteCommand();
                             //娓呴櫎灏忚溅绌洪棽鏃堕棿
                             var taskMonitor = new WcsTaskMonitor()
                             {
-                                TaskNo = carTask2.TaskNo,
+                                TaskNo = carTaskNext.TaskNo,
                                 PlcName = modDevice.Text,
-                                InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTask2.TaskNo}"
+                                InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTaskNext.TaskNo}"
                             };
                             _db.Insertable(taskMonitor).ExecuteCommand();
                             //涓嬪彂浠诲姟鏃ュ織
diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
index 17bcb90..f22caec 100644
--- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -90,7 +90,7 @@
     /// <summary>
     /// 鍒濆鍖朠LC杩炴帴
     /// </summary>
-    public static void Init()
+    public static void Init() 
     {
         cts.Cancel();
         listPlc = _db.Queryable<WcsPlc>()
@@ -338,7 +338,7 @@
 
 
 
-                        Thread.Sleep(1000);
+                        Thread.Sleep(3000);
                     }
                     catch (OperationCanceledException)
                     {
@@ -460,266 +460,58 @@
 
                     #endregion
 
-                    #region 鑾峰彇閫傚悎鎵ц褰撳墠浠诲姟鐨勫皬杞� 鐢熸垚璺緞锛堥渶鑰冭檻灏忚溅闃婚樆鎸★級
 
+                    // 鑾峰彇閫傚悎鎵ц褰撳墠浠诲姟鐨勫皬杞� 鐢熸垚璺緞锛堥渶鑰冭檻灏忚溅闃婚樆鎸★級
                     var assignCar = kXCarList.OrderBy(m => m.Level).FirstOrDefault();
                     if (assignCar == null)
                     {
                         continue;//娌℃湁绌洪棽灏忚溅
                     }
-                    var data = new List<CarModel>();
+                    
                     if (assignCar.Level != 0)
                     {
                         //鍒ゆ柇灏忚溅浣嶇疆鏄惁涓庝换鍔$殑璧峰鍌ㄤ綅鐩稿悓,涓嶇浉鍚岋細鑾峰彇灏忚溅鍒板彇璐у偍浣嶈矾寰�
                         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);
-                        var datas = FourWayCarUtil.GetCarPathUp(data1, 0);
-                        data.AddRange(datas);
+                        var datas1 = FourWayCarUtil.GetCarPathUp(data1, 0);
+                        if (datas1 == null)
+                        {
+                            continue;
+                        }
+                        else
+                        {
+                            var bl = FourWayCarUtil.AddCarTask(datas1, kXCarList, assignCar, waitTask,0);
+                            //鍒嗛厤閿欒锛屽垹闄ゅ垎閰嶄俊鎭�
+                            if (!bl)
+                            {
+                                var carTask = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == waitTask.TaskNo).ToList();
+                                _db.Deleteable(carTask).ExecuteCommand();
+                            }
+                        }
                     }
                     //鑾峰彇灏忚溅鍘绘斁璐у偍浣嶄换鍔¤矾寰�
                     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 = "";//浜や簰璺緞
-                    var executionPath2 = "";//浜や簰璺緞
-                    var path = "";//鎵�鏈夎矾寰�
-                    var isOk = "1"; //鏄惁瀹屾暣璺緞  1瀹屾暣 2 涓ゆ潯璺緞
-                    for (int i = 0; i < data.Count; i++)
-                    {
-                        //璺緞鑺傜偣
-                        var pathXYZ = data[i].X.ToString().PadLeft(2, '0') + data[i].Y.ToString().PadLeft(2, '0') + data[i].Z.ToString().PadLeft(2, '0')+ data[i].NodeCom.ToString();
-                        path += pathXYZ + ";";
-                        
-                        //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟
-                        var taskList = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.Path.Contains(pathXYZ)).Select(m => m.Id).Distinct().ToList();
-
-                        foreach (var item in taskList)
-                        {
-                            //鍒ゆ柇濡傛灉鏄畬鏁磋矾寰� 璁板綍浜や簰璺緞
-                            if (isOk == "1")
-                            {
-                                //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))
-                                {
-                                    executionPath1 += pathXYZQian + ";";
-                                }
-                                executionPath2 += pathXYZQian + ";";
-                            }
-                            //鍒ゆ柇娣诲姞鍓嶇疆浠诲姟Id
-                            if (!preId1.Contains(item + ""))
-                            {
-                                preId1 += item + ";";
-                            }
-                            
-                            isOk = "2";
-                        }
-                        
-                        if (data[i].IsSendPlc)
-                        {
-                            if (isOk == "1")
-                            {
-                                executionPath1 += pathXYZ + ";";
-                            }
-                            else
-                            {
-                                executionPath2 += pathXYZ + ";";
-                            }
-
-                        }
-
+                    
+                    if (datas2 == null) 
+                    { 
+                        continue; 
                     }
-
-                    #endregion
-
-                    #region 鍒ゆ柇鏄惁鏈夌┖闂插皬杞﹂樆鎸¤矾寰� 3
-                    var preId3 = "";//鍓嶇疆浠诲姟Id
-                    foreach (var item in kXCarList)
+                    else
                     {
-                        if (item == assignCar)
+                        var bl = FourWayCarUtil.AddCarTask(datas2,kXCarList,assignCar,waitTask,1);
+                        //鍒嗛厤閿欒锛屽垹闄ゅ垎閰嶄俊鎭�
+                        if (!bl)
                         {
-                            continue;//鎺掗櫎褰撳墠鍒嗛厤浠诲姟鐨勫皬杞�
-                        }
-                        //灏忚溅浣嶇疆
-                        var carXYZ = item.X.ToString().PadLeft(2, '0') + item.Y.ToString().PadLeft(2, '0') + item.Z.ToString().PadLeft(2, '0') ;
-                        //鍒嗛厤鐨勪换鍔¤矾寰勪腑 褰撳墠灏忚溅鏄惁闃绘尅
-                        if (path.Contains(carXYZ))
-                        {
-                            //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟锛屼笉浼氭湁澶浠诲姟锛屽悓灞傛湁鍑犱釜灏忚溅鏈�澶氭湁鍑犱釜浠诲姟
-                            var taskList3 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)).ToList();
-                            
-                            var str3 = "";//鎵�鏈夊凡鍒嗛厤鎴栨墽琛岀殑浠诲姟鍏ㄨ矾寰勪箣鍜�
-
-                            foreach (var item2 in taskList3)
-                            {
-                                str3 += item2.Path;
-                            }
-                            var endLocate3 = "";
-                            var executionPath3 = "";
-                            var path3 = ""; 
-                            var datas3 = new List<CarModel>();
-                            //鏌ユ壘鐩爣浣嶇疆
-                            while (endLocate3 == "" || datas3.Count == 0 || datas3 == null)
-                            {
-                                endLocate3 = FourWayCarUtil.GetCarEndLocation(carXYZ, str3);
-                                var data3 = FourWayCarUtil.GetCarPath(carXYZ, endLocate3, "0");
-                                datas3 = FourWayCarUtil.GetCarPathUp(data3, 0);
-                            }
-                            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();
-
-                                path3 += pathXYZ + ";";
-                                if (itemPath.IsSendPlc)
-                                {
-                                    executionPath3 += pathXYZ + ";";
-                                }
-                            }
-                            WcsTask modTask = new WcsTask()
-                            {
-                                TaskNo = _taskService.GetTaskCode(),
-                                TaskType = TaskTypeEnum.Move,
-                                Type = PLCTypeEnum.ShuttleCar,
-                                StartLocate = carXYZ,
-                                EndLocate = endLocate3,
-                                PalletNo = "",
-                                Status = TaskStatusEnum.Wait,
-                                Levels = 2,
-                                Origin = "WCS"
-                            };
-                            _db.Insertable(modTask).ExecuteCommand();
-                            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
-                            //绉诲姩灏忚溅
-                            var carTaskYC = new WcsCarTasks()
-                            {
-                                TaskNo = modTask.TaskNo,
-                                PreId = "",
-                                ExecutionPath = executionPath3,
-                                Path = path3,
-                                CarNo = item.CarPlcIp,
-                                Status = TaskStatusEnum.Wait
-                            };
-                            var idLong = _db.Insertable(carTaskYC).ExecuteReturnBigIdentity();
-                            preId3 += idLong + ";";
+                            waitTask.Status = TaskStatusEnum.Wait;
+                            _db.Updateable(waitTask).ExecuteCommand();
+                            var carTask = _db.Queryable<WcsCarTasks>().Where(m=>m.IsDelete == false && m.TaskNo == waitTask.TaskNo).ToList();
+                            _db.Deleteable(carTask).ExecuteCommand();
                         }
                     }
 
-                    #endregion
-
-                    #region 鍒ゆ柇鐜版湁浠诲姟涓渶缁堣妭鐐规槸鍚﹀湪褰撳墠鍒嗛厤璺緞涓紝濡傛湁 娣诲姞绉昏蛋灏忚溅浠诲姟骞跺姞鍏ュ墠缃换鍔� 4
-
-                    //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟锛屼笉浼氭湁澶浠诲姟锛屽悓灞傛湁鍑犱釜灏忚溅鏈�澶氭湁鍑犱釜浠诲姟
-                    var taskList4 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)).ToList();
-                    var preId4 = "";//鍓嶇疆浠诲姟Id
-                    var str4 = "";//鎵�鏈夊凡鍒嗛厤鎴栨墽琛岀殑浠诲姟鍏ㄨ矾寰勪箣鍜�
-
-                    foreach (var item in taskList4)
-                    {
-                        str4 += item.Path;
-                    } 
-                    //鍒ゆ柇鐜版湁浠诲姟涓渶缁堣妭鐐规槸鍚﹀湪褰撳墠鍒嗛厤璺緞涓紝濡傛湁 娣诲姞绉昏蛋灏忚溅浠诲姟骞跺姞鍏ュ墠缃换鍔� 
-                    foreach (var item in taskList4)
-                    {
-                        var lastPathList = item.ExecutionPath.Split(';');
-                        //  a;b;c; 鏈�鍚庝竴涓綅鏄�溾�濓紝鎵�浠astPathList.Length - 2
-                        var lastPath = lastPathList[lastPathList.Length - 2];
-
-                        //濡傛灉姝ゆ鍒嗛厤璺緞鍖呭惈閱夎垶涓渶缁堣妭鐐硅矾寰勶紝娣诲姞绉昏蛋灏忚溅
-                        if (path.Contains(lastPath))
-                        {
-                            var endLocate = "";
-                            var executionPath4 = "";
-                            var path4 = "";
-                            var datas4 = new List<CarModel>();
-                            //鏌ユ壘鐩爣浣嶇疆
-                            while (endLocate == "" || datas4.Count == 0 || datas4 == null)
-                            {
-                                endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4);
-                                var data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate);
-                                datas4 = FourWayCarUtil.GetCarPathUp(data4, 0);
-                            }
-                            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();
-
-                                path4 += pathXYZ + ";";
-                                if (itemPath.IsSendPlc)
-                                {
-                                    executionPath4 += pathXYZ + ";";
-                                }
-                            }
-                            WcsTask modTask = new WcsTask()
-                            {
-                                TaskNo = _taskService.GetTaskCode(),
-                                TaskType = TaskTypeEnum.Move,
-                                Type = PLCTypeEnum.ShuttleCar,
-                                StartLocate = lastPath,
-                                EndLocate = endLocate,
-                                PalletNo = "",
-                                Status = TaskStatusEnum.Wait,
-                                Levels = 2,
-                                Origin = "WCS"
-                            };
-                            _db.Insertable(modTask).ExecuteCommand();
-                            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
-                            //绉诲姩灏忚溅
-                            var carTaskYC = new WcsCarTasks()
-                            {
-                                TaskNo = modTask.TaskNo,
-                                PreId = "",
-                                ExecutionPath = executionPath4,
-                                Path = path4,
-                                CarNo = item.CarNo,
-                                Status = TaskStatusEnum.Wait
-                            };
-                            var idLong = _db.Insertable(carTaskYC).ExecuteReturnBigIdentity();
-                            preId4 += idLong + ";";
-                        }
-                    }
-
-                    #endregion
-
-                    #region 鎻掑叆浠诲姟鏁版嵁  鏀瑰彉浠诲姟鐘舵��
-
-                    // 鎻掑叆鍥涘悜杞︿换鍔¤〃
-                    var carTask1 = new WcsCarTasks()
-                    {
-                        TaskNo = waitTask.TaskNo,
-                        PreId = preId1+ preId3+preId4,
-                        ExecutionPath = executionPath1,
-                        Path = path,
-                        CarNo = assignCar.CarPlcIp,
-                        Status = TaskStatusEnum.Wait
-                    };
-                    _db.Insertable(carTask1).ExecuteCommand();
-                    if (!string.IsNullOrWhiteSpace(executionPath1) && isOk == "2")
-                    {
-                        // 鎻掑叆鍥涘悜杞︿换鍔¤〃
-                        var carTask2 = new WcsCarTasks()
-                        {
-                            TaskNo = waitTask.TaskNo,
-                            PreId = preId1,
-                            ExecutionPath = executionPath2,
-                            Path = path,
-                            CarNo = assignCar.CarPlcIp,
-                            Status = TaskStatusEnum.Wait
-                        };
-                        _db.Insertable(carTask2).ExecuteCommand();
-                    }
-                    // 鏀瑰彉鎬讳换鍔¤〃鐘舵��
-                    waitTask.Status = TaskStatusEnum.Doing;
-                    waitTask.UpdateTime = DateTime.Now;
-                    _db.Updateable(waitTask).ExecuteCommand();
-                    HubUtil.PublicTask(waitTask.Adapt<WcsTaskOutput>());
-
-                    #endregion
+                    
 
                     Thread.Sleep(3000);
                 }
diff --git a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
index 25c77d6..a86c60e 100644
--- a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
+++ b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
@@ -8,6 +8,7 @@
 using System.Threading.Tasks;
 using WCS.Application.Entity;
 using static Elastic.Clients.Elasticsearch.JoinField;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.CustomServiceKfSessionGetWaitCaseResponse.Types;
 
 namespace WCS.Application.Util;
 
@@ -15,17 +16,19 @@
 {
     private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
 
+    private static readonly WcsTaskService _taskService = App.GetService<WcsTaskService>();
+
     /// <summary>
-    /// 
+    /// 瀹屽杽灏忚溅涓嬪彂鑺傜偣銆佽妭鐐瑰懡浠�
     /// </summary>
     /// <param name="list">闆嗗悎</param>
     /// <param name="moveType">绉诲姩绫诲瀷 0:绉诲姩 1:绉昏揣 </param>
     /// <returns></returns>
-    public static List<CarModel> GetCarPathUp(List<CarModel> list,int moveType)
+    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 (i >= 0 && i < list.Count - 1)
             {
                 if (list[i].X == list[i + 1].X)
                 {
@@ -35,8 +38,23 @@
                 {
                     list[i].NodeCom = 3;
                 }
+
             }
-            if (i== 0)
+            if (i > 0 && i < list.Count - 1)
+            {
+                if (list[i].Make != list[i - 1].Make || list[i].Make != list[i + 1].Make)
+                {
+                    if (list[i].X != list[i - 1].X || list[i].X != list[i + 1].X)
+                    {
+                        list[i].IsSendPlc = true;
+                    }
+
+                    //list[i - 1].IsSendPlc = true;
+
+                }
+
+            }
+            if (i == 0)
             {
                 list[i].IsSendPlc = true;
                 if (moveType == 0)
@@ -45,19 +63,26 @@
                     {
                         continue;
                     }
-                    
+
                 }
-                else 
+                else
                 {
                     list[i].NodeCom = 1;
                 }
             }
-            if (i == list.Count-1)
+            if (i == list.Count - 1)
             {
                 list[i].IsSendPlc = true;
                 if (moveType == 0)
                 {
-                    list[i].NodeCom = list[i + 1].NodeCom;
+                    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;
+                    }
                 }
                 else
                 {
@@ -67,6 +92,328 @@
         }
         return list;
     }
+
+    /// <summary>
+    /// 鑾峰彇灏忚溅绉诲姩鐨勭洰鏍囦綅缃�
+    /// </summary>
+    /// <param name="startLocation">璧峰浣嶇疆</param>
+    /// <param name="noPathStr">涓嶈兘瀛樻斁鐨勫偍浣嶅瓧绗︿覆</param>
+    /// <returns></returns>
+    public static string GetCarEndLocation(string startLocation, string noPathStr)
+    {
+        if (string.IsNullOrEmpty(startLocation))
+        {
+            return null;
+        }
+
+        // 璧峰浣嶇疆
+        CarModel start = new CarModel()
+        {
+            X = int.Parse(startLocation.Substring(0, 2)),
+            Y = int.Parse(startLocation.Substring(2, 2)),
+            Z = int.Parse(startLocation.Substring(4, 2)),
+            NodeCom = 0
+        };
+
+        // 鑾峰彇鍌ㄤ綅琛ㄤ俊鎭瓨鍌ㄥ埌闆嗗悎閲�
+        var layer = int.Parse(startLocation.Substring(4, 2));
+
+        //  鑾峰彇褰撳墠灞傚偍浣嶄俊鎭�
+        var locationModels = _db.Queryable<WcsStorageLocat>()
+            .Where(m => m.WareHouseNo == "W01" && m.Layer == layer && m.IsDelete == false)
+        .ToList();
+
+        #region MyRegion
+
+        var list = locationModels.Where(m => !noPathStr.Contains(m.LocatNo)).OrderBy(m => Math.Abs(start.X - m.Row) + Math.Abs(start.Y - m.Column)).ToList();
+        var locateStr = "";
+        foreach (var item in list)
+        {
+            // 鍌ㄤ綅鐘舵�佷负鎹熷潖涓嶅彲閫氳 鍌ㄤ綅鐘舵�佷负灞忚斀涓哄彲閫氳涓嶅彲瀛樺偍鎵樼洏
+            if (item.Flag == "2")
+            {
+                continue;
+            }
+            locateStr = item.LocatNo;
+            break;
+        }
+        return locateStr;
+        #endregion
+    }
+
+    /// <summary>
+    /// 鑾峰彇浠诲姟鍙�
+    /// </summary>
+    /// <returns></returns>
+    public static int GetTaskNo()
+    {
+        var list = _db.Queryable<WcsCarTasks>().ToList();
+        var maxNo = list.Max(m => m.CarTaskNo);
+
+        if (maxNo != null && maxNo > 0)
+        {
+            if (maxNo++ > 65535)
+            {
+                return 1;
+            }
+
+            return (int)maxNo++;
+        }
+        return 1;
+
+    }
+
+    public static bool AddCarTask(List<CarModel> data, List<CarInfo> kXCarList, CarInfo assignCar, WcsTask waitTask,int moveType)
+    {
+        #region 鑾峰彇閫傚悎鎵ц褰撳墠浠诲姟鐨勫皬杞� 鐢熸垚璺緞锛堥渶鑰冭檻灏忚溅闃婚樆鎸★級
+        var preId1 = "";//鍓嶇疆浠诲姟Id
+        var executionPath1 = "";//浜や簰璺緞
+        var executionPath2 = "";//浜や簰璺緞
+        var path = "";//鎵�鏈夎矾寰�
+        var isOk = "1"; //鏄惁瀹屾暣璺緞  1瀹屾暣 2 涓ゆ潯璺緞
+        for (int i = 0; i < data.Count; i++)
+        {
+            //璺緞鑺傜偣
+            var pathXYZ = data[i].X.ToString().PadLeft(2, '0') + data[i].Y.ToString().PadLeft(2, '0') + data[i].Z.ToString().PadLeft(2, '0') + data[i].NodeCom.ToString();
+            var pathXYZ2 = data[i].X.ToString().PadLeft(2, '0') + data[i].Y.ToString().PadLeft(2, '0') + data[i].Z.ToString().PadLeft(2, '0');
+            path += pathXYZ + ";";
+
+            //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟
+            var taskList = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.Path.Contains(pathXYZ2) && m.CarNo != assignCar.CarPlcIp).Select(m => m.Id).Distinct().ToList();
+
+            foreach (var item in taskList)
+            {
+                //鍒ゆ柇濡傛灉鏄畬鏁磋矾寰� 璁板綍浜や簰璺緞
+                if (isOk == "1")
+                {
+                    if (i == 0)
+                    {
+                        continue;
+                    }
+                    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 - 1].NodeCom.ToString();
+                    var pathXYZQian2 = data[i - 1].X.ToString().PadLeft(2, '0') + data[i - 1].Y.ToString().PadLeft(2, '0') + data[i - 1].Z.ToString().PadLeft(2, '0');
+                    if (!executionPath1.Contains(pathXYZQian2))
+                    {
+                        executionPath1 += pathXYZQian + ";";
+                    }
+                    executionPath2 += pathXYZQian + ";";
+                    //鍒ゆ柇娣诲姞鍓嶇疆浠诲姟Id
+                    if (!preId1.Contains(item + ""))
+                    {
+                        preId1 += item + ";";
+                    }
+                }
+                
+
+                isOk = "2";
+            }
+
+            if (data[i].IsSendPlc)
+            {
+                if (isOk == "1")
+                {
+                    executionPath1 += pathXYZ + ";";
+                }
+                else
+                {
+                    executionPath2 += pathXYZ + ";";
+                }
+
+            }
+
+        }
+
+        #endregion
+
+        #region 鍒ゆ柇鏄惁鏈夌┖闂插皬杞﹂樆鎸¤矾寰� 3
+        var preId3 = "";//鍓嶇疆浠诲姟Id
+        foreach (var item in kXCarList)
+        {
+            if (item == assignCar)
+            {
+                continue;//鎺掗櫎褰撳墠鍒嗛厤浠诲姟鐨勫皬杞�
+            }
+            //灏忚溅浣嶇疆
+            var carXYZ = item.X.ToString().PadLeft(2, '0') + item.Y.ToString().PadLeft(2, '0') + item.Z.ToString().PadLeft(2, '0');
+            //鍒嗛厤鐨勪换鍔¤矾寰勪腑 褰撳墠灏忚溅鏄惁闃绘尅
+            if (path.Contains(carXYZ))
+            {
+                //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟锛屼笉浼氭湁澶浠诲姟锛屽悓灞傛湁鍑犱釜灏忚溅鏈�澶氭湁鍑犱釜浠诲姟
+                var taskList3 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)).ToList();
+
+                var str3 = "";//鎵�鏈夊凡鍒嗛厤鎴栨墽琛岀殑浠诲姟鍏ㄨ矾寰勪箣鍜�
+
+                foreach (var item2 in taskList3)
+                {
+                    str3 += item2.Path;
+                }
+                var endLocate3 = "";
+                var executionPath3 = "";
+                var path3 = "";
+                var datas3 = new List<CarModel>();
+                //鏌ユ壘鐩爣浣嶇疆
+                while (endLocate3 == "" || datas3.Count == 0 || datas3 == null)
+                {
+                    endLocate3 = FourWayCarUtil.GetCarEndLocation(carXYZ, str3);
+                    var data3 = FourWayCarUtil.GetCarPath(carXYZ, endLocate3, "0");
+                    datas3 = FourWayCarUtil.GetCarPathUp(data3, 0);
+                }
+                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();
+
+                    path3 += pathXYZ + ";";
+                    if (itemPath.IsSendPlc)
+                    {
+                        executionPath3 += pathXYZ + ";";
+                    }
+                }
+                WcsTask modTask = new WcsTask()
+                {
+                    TaskNo = _taskService.GetTaskCode(),
+                    TaskType = TaskTypeEnum.Move,
+                    Type = PLCTypeEnum.ShuttleCar,
+                    StartLocate = carXYZ,
+                    EndLocate = endLocate3,
+                    PalletNo = "",
+                    Status = TaskStatusEnum.Wait,
+                    Levels = 999,
+                    Origin = "WCS"
+                };
+                _db.Insertable(modTask).ExecuteCommand();
+                HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
+                //绉诲姩灏忚溅
+                var carTaskYC = new WcsCarTasks()
+                {
+                    TaskNo = modTask.TaskNo,
+                    PreId = "",
+                    ExecutionPath = executionPath3,
+                    Path = path3,
+                    CarNo = item.CarPlcIp,
+                    Status = TaskStatusEnum.Wait
+                };
+                var idLong = _db.Insertable(carTaskYC).ExecuteReturnSnowflakeId();
+                preId3 += idLong + ";";
+            }
+        }
+
+        #endregion
+
+        #region 鍒ゆ柇鐜版湁浠诲姟涓渶缁堣妭鐐规槸鍚﹀湪褰撳墠鍒嗛厤璺緞涓紝濡傛湁 娣诲姞绉昏蛋灏忚溅浠诲姟骞跺姞鍏ュ墠缃换鍔� 4
+
+        //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟锛屼笉浼氭湁澶浠诲姟锛屽悓灞傛湁鍑犱釜灏忚溅鏈�澶氭湁鍑犱釜浠诲姟
+        var taskList4 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.CarNo!=assignCar.CarPlcIp).ToList();
+        var preId4 = "";//鍓嶇疆浠诲姟Id
+        var str4 = "";//鎵�鏈夊凡鍒嗛厤鎴栨墽琛岀殑浠诲姟鍏ㄨ矾寰勪箣鍜�
+
+        foreach (var item in taskList4)
+        {
+            str4 += item.Path;
+        }
+        //鍒ゆ柇鐜版湁浠诲姟涓渶缁堣妭鐐规槸鍚﹀湪褰撳墠鍒嗛厤璺緞涓紝濡傛湁 娣诲姞绉昏蛋灏忚溅浠诲姟骞跺姞鍏ュ墠缃换鍔� 
+        foreach (var item in taskList4)
+        {
+            var lastPathList = item.ExecutionPath.Split(';');
+            //  a;b;c; 鏈�鍚庝竴涓綅鏄�溾�濓紝鎵�浠astPathList.Length - 2
+            var lastPath = lastPathList[lastPathList.Length - 2];
+            var lastPath2 = lastPath.Substring(0,6);
+
+            //濡傛灉姝ゆ鍒嗛厤璺緞鍖呭惈閱夎垶涓渶缁堣妭鐐硅矾寰勶紝娣诲姞绉昏蛋灏忚溅
+            if (path.Contains(lastPath2))
+            {
+                var endLocate = "";
+                var executionPath4 = "";
+                var path4 = "";
+                var datas4 = new List<CarModel>();
+                //鏌ユ壘鐩爣浣嶇疆
+                while (endLocate == "" || datas4.Count == 0 || datas4 == null)
+                {
+                    endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4);
+                    var data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate);
+                    datas4 = FourWayCarUtil.GetCarPathUp(data4, 0);
+                }
+                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();
+
+                    path4 += pathXYZ + ";";
+                    if (itemPath.IsSendPlc)
+                    {
+                        executionPath4 += pathXYZ + ";";
+                    }
+                }
+                WcsTask modTask = new WcsTask()
+                {
+                    TaskNo = _taskService.GetTaskCode(),
+                    TaskType = TaskTypeEnum.Move,
+                    Type = PLCTypeEnum.ShuttleCar,
+                    StartLocate = lastPath,
+                    EndLocate = endLocate,
+                    PalletNo = "",
+                    Status = TaskStatusEnum.Wait,
+                    Levels = 999,
+                    Origin = "WCS"
+                };
+                _db.Insertable(modTask).ExecuteCommand();
+                HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
+                //绉诲姩灏忚溅
+                var carTaskYC = new WcsCarTasks()
+                {
+                    TaskNo = modTask.TaskNo,
+                    PreId = "",
+                    ExecutionPath = executionPath4,
+                    Path = path4,
+                    CarNo = item.CarNo,
+                    Status = TaskStatusEnum.Wait
+                };
+                var idLong = _db.Insertable(carTaskYC).ExecuteReturnSnowflakeId();
+                preId4 += idLong + ";";
+            }
+        }
+
+        #endregion
+
+        #region 鎻掑叆浠诲姟鏁版嵁  鏀瑰彉浠诲姟鐘舵��
+
+        // 鎻掑叆鍥涘悜杞︿换鍔¤〃
+        var carTask1 = new WcsCarTasks()
+        {
+            TaskNo = waitTask.TaskNo,
+            PreId = preId1 + preId3 + preId4,
+            ExecutionPath = executionPath1,
+            Path = path,
+            CarNo = assignCar.CarPlcIp,
+            Status = TaskStatusEnum.Wait
+        };
+        _db.Insertable(carTask1).ExecuteCommand();
+        if (!string.IsNullOrWhiteSpace(executionPath1) && isOk == "2")
+        {
+            // 鎻掑叆鍥涘悜杞︿换鍔¤〃
+            var carTask2 = new WcsCarTasks()
+            {
+                TaskNo = waitTask.TaskNo,
+                PreId = preId1,
+                ExecutionPath = executionPath2,
+                Path = path,
+                CarNo = assignCar.CarPlcIp,
+                Status = TaskStatusEnum.Wait
+            };
+            _db.Insertable(carTask2).ExecuteCommand();
+        }
+        if (moveType == 1)
+        {
+            // 鏀瑰彉鎬讳换鍔¤〃鐘舵��
+            waitTask.Status = TaskStatusEnum.Doing;
+            waitTask.UpdateTime = DateTime.Now;
+            _db.Updateable(waitTask).ExecuteCommand();
+            HubUtil.PublicTask(waitTask.Adapt<WcsTaskOutput>());
+        }
+        
+        return true;
+        #endregion
+    }
+
+
 
     /// <summary>
     /// 鑾峰彇灏忚溅璺緞
@@ -142,7 +489,7 @@
                 // 瀛樺偍灏忚溅鍙繍琛岀殑鏂瑰悜
                 var validDirections = new List<CarModel>();
                 var currentLocation = locationModels.FirstOrDefault(m => m.Row == current.X && m.Column == current.Y);
-                if (currentLocation.Make == "0")
+                if (currentLocation.Make == "0"|| currentLocation.Make == "2")
                 {
                     // 涓婚�氶亾
                     validDirections.Add(new CarModel() { X = 1, Y = 0 }); // 鍙�
@@ -227,55 +574,9 @@
                     {
                         neighbor.IsSendPlc = false;
 
-                        //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)
-                        {
-                            //if (current.X != neighbor.X) 
-                            //{
-                            //    current.IsSendPlc = true;
-                            //}
-
-                            if (current.Y > neighbor.Y)
-                            {
-                                current.IsSendPlc = true;
-                            }
-                            else if (current.Y < neighbor.Y)
-                            {
-                                neighbor.IsSendPlc = true;
-                            }
-                            
-                            //current.IsSendPlc = true;
-                        }
-                                                
-
+                        neighbor.Make = locationModel.Make;
+                        current.Make = currentModel.Make;
+                        
                         // 鏇存柊瀹為檯璺濈涓庨浼拌窛绂�
                         cameFrom[neighbor] = current;
                         gScore[neighbor] = tentativeGScore;
@@ -531,6 +832,11 @@
     /// </summary>
     public bool IsSendPlc { get; set; }
 
+    /// <summary>
+    /// 0閫氶亾 1 鍌ㄤ綅
+    /// </summary>
+    public string Make { get; set; }
+
     public int CompareTo(CarModel other)
     {
         if (other == null)

--
Gitblit v1.8.0