From e3a4181b4e107c8d2dc13f489ec62af28451bf3a Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期一, 28 四月 2025 17:18:12 +0800
Subject: [PATCH] 修改分配任务问题

---
 Admin.NET/WCS.Application/PLC/PLCService.cs      |    6 +++---
 Admin.NET/WCS.Application/Util/FourWayCarUtil.cs |   46 ++++++++++++++++++++++++++++------------------
 Admin.NET/WCS.Application/Entity/WcsTask.cs      |    7 +++++++
 3 files changed, 38 insertions(+), 21 deletions(-)

diff --git a/Admin.NET/WCS.Application/Entity/WcsTask.cs b/Admin.NET/WCS.Application/Entity/WcsTask.cs
index 7333be5..55e109d 100644
--- a/Admin.NET/WCS.Application/Entity/WcsTask.cs
+++ b/Admin.NET/WCS.Application/Entity/WcsTask.cs
@@ -167,4 +167,11 @@
     /// 璁惧绫诲瀷
     /// </summary>
     public PLCTypeEnum? Type { get; set; }
+
+    /// <summary>
+    /// 灏忚溅IP
+    /// </summary>
+    public string? CarIp { get; set; }
+
+    
 }
diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index f9ef369..0f852e9 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -34,7 +34,7 @@
                     AGV(mod);                                       // AGV璋冨害
                     break;
                 case PLCTypeEnum.ShuttleCar: //绌挎杞�
-                    ShuttleCar(mod);
+                    //ShuttleCar(mod);
                     break;
                 case PLCTypeEnum.RobotPalletizer:
                     RobotPalletizer(mod);//鐮佸灈鏈哄櫒浜�
@@ -238,14 +238,14 @@
                     //瑕佷笅鍙戣矾寰�2浠诲姟
                     if (carTaskNext != null)
                     {
-                        modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTaskNext.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 && s.CarIp == modDevice.PlcIdIP);
 
                         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).OrderBy(m => m.CreateTime).First();
+                        modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.CarIp == modDevice.PlcIdIP).OrderBy(m => m.Levels).OrderBy(m => m.CreateTime).First();
                         if (modTask == null)
                         {
                             return;
diff --git a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
index c4bc14f..596b8d0 100644
--- a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
+++ b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
@@ -196,13 +196,13 @@
                         executionPath1 += pathXYZQian + ";";
                     }
                     executionPath2 += pathXYZQian + ";";
-                    //鍒ゆ柇娣诲姞鍓嶇疆浠诲姟Id
-                    if (!preId1.Contains(item + ""))
-                    {
-                        preId1 += item + ";";
-                    }
+                    
                 }
-                
+                //鍒ゆ柇娣诲姞鍓嶇疆浠诲姟Id
+                if (!preId1.Contains(item + ""))
+                {
+                    preId1 += item + ";";
+                }
 
                 isOk = "2";
             }
@@ -277,7 +277,8 @@
                     PalletNo = "",
                     Status = TaskStatusEnum.Wait,
                     Levels = 999,
-                    Origin = "WCS"
+                    Origin = "WCS",
+                    CarIp = item.CarPlcIp
                 };
                 _db.Insertable(modTask).ExecuteCommand();
                 HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
@@ -301,7 +302,8 @@
         #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 taskListTask4 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.CarNo!=assignCar.CarPlcIp).GroupBy(m=>m.TaskNo).Select(m=>m.TaskNo).ToList();
+        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 = "";//鎵�鏈夊凡鍒嗛厤鎴栨墽琛岀殑浠诲姟鍏ㄨ矾寰勪箣鍜�
 
@@ -310,9 +312,14 @@
             str4 += item.Path;
         }
         //鍒ゆ柇鐜版湁浠诲姟涓渶缁堣妭鐐规槸鍚﹀湪褰撳墠鍒嗛厤璺緞涓紝濡傛湁 娣诲姞绉昏蛋灏忚溅浠诲姟骞跺姞鍏ュ墠缃换鍔� 
-        foreach (var item in taskList4)
+        foreach (var item in taskListTask4)
         {
-            var lastPathList = item.ExecutionPath.Split(';');
+            var lastTask = taskList4.Where(m =>  m.TaskNo == item ).OrderBy(m=>m.CreateTime).LastOrDefault();
+            if (lastTask == null)
+            {
+                continue;
+            }
+            var lastPathList = lastTask.ExecutionPath.Split(';');
             //  a;b;c; 鏈�鍚庝竴涓綅鏄�溾�濓紝鎵�浠astPathList.Length - 2
             var lastPath = lastPathList[lastPathList.Length - 2];
             var lastPath2 = lastPath.Substring(0,6);
@@ -320,6 +327,7 @@
             //濡傛灉姝ゆ鍒嗛厤璺緞鍖呭惈閱夎垶涓渶缁堣妭鐐硅矾寰勶紝娣诲姞绉昏蛋灏忚溅
             if (path.Contains(lastPath2))
             {
+                
                 var endLocate = "";
                 var executionPath4 = "";
                 var path4 = "";
@@ -327,7 +335,7 @@
                 //鏌ユ壘鐩爣浣嶇疆
                 while (endLocate == "" || datas4.Count == 0 || datas4 == null)
                 {
-                    endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4);
+                    endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4+path);
                     var data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate);
                     datas4 = FourWayCarUtil.GetCarPathUp(data4, 0);
                 }
@@ -351,7 +359,8 @@
                     PalletNo = "",
                     Status = TaskStatusEnum.Wait,
                     Levels = 999,
-                    Origin = "WCS"
+                    Origin = "WCS",
+                    CarIp = lastTask.CarNo
                 };
                 _db.Insertable(modTask).ExecuteCommand();
                 HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
@@ -362,7 +371,7 @@
                     PreId = "",
                     ExecutionPath = executionPath4,
                     Path = path4,
-                    CarNo = item.CarNo,
+                    CarNo = lastTask.CarNo,
                     Status = TaskStatusEnum.Wait
                 };
                 var idLong = _db.Insertable(carTaskYC).ExecuteReturnSnowflakeId();
@@ -391,7 +400,7 @@
             var carTask2 = new WcsCarTasks()
             {
                 TaskNo = waitTask.TaskNo,
-                PreId = preId1,
+                PreId = "",
                 ExecutionPath = executionPath2,
                 Path = path,
                 CarNo = assignCar.CarPlcIp,
@@ -399,15 +408,16 @@
             };
             _db.Insertable(carTask2).ExecuteCommand();
         }
+        waitTask.CarIp = assignCar.CarPlcIp;
         if (moveType == 1)
         {
             // 鏀瑰彉鎬讳换鍔¤〃鐘舵��
             waitTask.Status = TaskStatusEnum.Doing;
-            waitTask.UpdateTime = DateTime.Now;
-            _db.Updateable(waitTask).ExecuteCommand();
-            HubUtil.PublicTask(waitTask.Adapt<WcsTaskOutput>());
+            waitTask.UpdateTime = DateTime.Now; 
         }
-        
+        _db.Updateable(waitTask).ExecuteCommand();
+        HubUtil.PublicTask(waitTask.Adapt<WcsTaskOutput>());
+
         return true;
         #endregion
     }

--
Gitblit v1.8.0