From 9b3567a5a2f1a81bec684e8aecda3a1146906cca Mon Sep 17 00:00:00 2001
From: bklLiudl <673013083@qq.com>
Date: 星期一, 28 四月 2025 17:10:46 +0800
Subject: [PATCH] 托盘输送线交互

---
 Admin.NET/WCS.Application/OpenApi/OpenApi.cs |  286 ++++++++++++++++-----------------------------------------
 1 files changed, 81 insertions(+), 205 deletions(-)

diff --git a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
index 7652479..91917e5 100644
--- a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
+++ b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
@@ -1,22 +1,8 @@
-锘縰sing DocumentFormat.OpenXml.Presentation;
-using Elastic.Clients.Elasticsearch;
+锘縰sing Admin.NET.Core.Service;
 using Furion.DatabaseAccessor;
 using Furion.Logging;
-using NewLife.Serialization;
-using Newtonsoft.Json;
-using System;
-using System.Diagnostics.CodeAnalysis;
-using System.Linq;
-using System.Text;
 using WCS.Application.Entity;
-using Microsoft.AspNetCore.Mvc;
-using Admin.NET.Core.Service;
-using DocumentFormat.OpenXml.Bibliography;
-using AngleSharp.Common;
-using AngleSharp.Text;
-using Newtonsoft.Json.Linq;
-using SqlSugar;
-using NewLife.Reflection;
+using WCS.Application.Util;
 
 namespace WCS.Application;
 
@@ -42,7 +28,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(taskInfo.StartLocate, taskInfo.EndLocate);
+        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>
@@ -73,7 +106,7 @@
             //鏂板浠诲姟
             var taskAdd = new WcsTask()
             {
-                TaskNo = models.TaskNo,
+                TaskNo = models.TaskNo,              
                 TaskType = (TaskTypeEnum)Convert.ToInt32(models.TaskType),
                 Type = models.Type,
                 Status = TaskStatusEnum.Wait,
@@ -85,6 +118,13 @@
                 EndRoadway = models.EndRoadway,
                 PalletNo = models.PalletNo,
             };
+
+            // 鑻ラ潪AGV浠诲姟澧炲姞浠诲姟ID
+            if (models.Type != PLCTypeEnum.AGV) 
+            {
+                taskAdd.TaskId = FourWayCarUtil.GetTaskId(); 
+            }
+
             listTask.Add(taskAdd);
         }
         await _db.Insertable(listTask).ExecuteCommandAsync();
@@ -115,8 +155,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,
@@ -125,6 +166,13 @@
             EndRoadway = models.EndRoadway,
             PalletNo = models.PalletNo,
         };
+
+        // 鑻ラ潪AGV浠诲姟澧炲姞浠诲姟ID
+        if (models.Type != PLCTypeEnum.AGV)
+        {
+            taskAdd.TaskId = FourWayCarUtil.GetTaskId();
+        }
+
         await _db.Insertable(taskAdd).ExecuteCommandAsync();
     }
 
@@ -377,33 +425,8 @@
                 {
                     case "end"://浠诲姟瀹屾垚
                         {
-                            PLCService.AGVStatus = false;
-                            //鎶婃垚鍝佽揣鐗╂媺鍒扮紦瀛樺伐浣嶅悗锛屼笅涓�涓换鍔℃妸鎵樼洏鎷夊幓鎻愬崌鏈烘垨鑰呯紦瀛樺尯锛堜紭鍏堢骇浣庝竴鐐癸級
-                            if (modTask.EndLocate == AGVStaionEnum.C1.ToString() || modTask.EndLocate == AGVStaionEnum.C2.ToString())
-                            {
-                                var strEndLocate = "";
-                                Enum.TryParse(await _sysConfigService.GetConfigValue<string>("workshop_Trend"), out WorkshopEnum workshop);
-                                if (workshop == WorkshopEnum.Storage)
-                                    strEndLocate = AGVStaionEnum.A1.ToString();
-                                else
-                                    strEndLocate = AGVStorageUtil.GetProductInStorage();
-                                WcsTask modInsertTask = new WcsTask()
-                                {
-                                    TaskNo = _taskService.GetTaskCode(),
-                                    TaskType = TaskTypeEnum.Move,
-                                    Type = PLCTypeEnum.AGV,
-                                    StartLocate = modTask.EndLocate,//缂撳瓨鍖�
-                                    EndLocate = strEndLocate,
-                                    PalletNo = modTask.PalletNo,
-                                    Status = TaskStatusEnum.Wait,
-                                    Levels = 6,
-                                    Origin = "WCS"
-                                };
-                                await _db.Insertable(modInsertTask).ExecuteCommandAsync();
-                                HubUtil.PublicTask(modInsertTask.Adapt<WcsTaskOutput>());
-                            }
-
-                            //璐у搧鎷夊埌鐢垫鍙i渶瑕佸悜杈撻�佺嚎鍐欏叆100
+                            
+                            //璐у搧鎷夊埌瀵嗛泦搴撳叆搴撳彛闇�瑕佸悜杈撻�佺嚎鍐欏叆鍊�
                             if (modTask.EndLocate == AGVStaionEnum.A1.ToString())
                             {
                                 var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == "杈撻�佺嚎");
@@ -431,52 +454,6 @@
                                     Log.Error("C鍙g敵璇峰叆搴撳啓鍏ュ��100澶辫触");
                                 }
                             }
-                            //鏀惧叆鎷嗘墭鏈哄悗锛屽悜鎷嗘墭鏈哄啓鍏ュ畬鎴愪俊鍙�
-                            if (modTask.EndLocate == AGVStaionEnum.D1.ToString())
-                            {
-                                var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.PalletMachine);
-                                var modConn = new PLCUtil(modPlc);
-                                var modDevice = PLCTaskAction.plcDevices.FirstOrDefault(s => s.Text == "鎷嗘墭鏈�");
-                                var res = modConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "0");
-                                var modTaskMonitorPLC = new WcsTaskMonitor()
-                                {
-                                    TaskNo = modTask.TaskNo,
-                                    PlcId = modDevice.PlcId,
-                                    PlcName = modDevice.WcsPos,
-                                    Status = TaskStatusEnum.Doing,
-                                    InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆瀹屾垚淇″彿0锛岀粨鏋渰res.IsSucceed}",
-                                };
-                                _db.Insertable(modTaskMonitorPLC).ExecuteCommand();
-                                HubUtil.PublicTaskMonitor(modTaskMonitorPLC.Adapt<WcsTaskMonitorOutput>());
-                                modConn.Close();
-                            }
-                            //if (modTask.EndLocate == AGVStaionEnum.B1.ToString() || modTask.EndLocate == AGVStaionEnum.B2.ToString())
-                            //{
-                            //    var num = modTask.EndLocate.Substring(1, 1);
-                            //    var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.RobotPalletizer && s.WareHouseNo == num);
-                            //    var modConn = new PLCUtil(modPlc);
-                            //    var modDevice = PLCTaskAction.plcDevices.FirstOrDefault(s => s.PlcId == modPlc.Id && s.Level == DeviceLevelEnum.DB);
-                            //    var res = modConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos, "0");
-                            //    var modTaskMonitorPLC = new WcsTaskMonitor()
-                            //    {
-                            //        TaskNo = modTask.TaskNo,
-                            //        PlcId = modDevice.PlcId,
-                            //        PlcName = modDevice.PlcPos,
-                            //        Status = TaskStatusEnum.Doing,
-                            //        InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鏀炬墭瀹屾垚淇″彿锛岀粨鏋渰res.IsSucceed}",
-                            //    };
-                            //    _db.Insertable(modTaskMonitorPLC).ExecuteCommand();
-                            //    HubUtil.PublicTaskMonitor(modTaskMonitorPLC.Adapt<WcsTaskMonitorOutput>());
-                            //    modConn.Close();
-                            //}
-                            if (modTask.EndLocate == AGVStaionEnum.F1.ToString())
-                            {
-                                await _sysConfigService.UpdateConfigValue("cache_Materal", true);
-                            }
-                            if (modTask.StartLocate == AGVStaionEnum.F1.ToString())
-                            {
-                                await _sysConfigService.UpdateConfigValue("cache_Materal", false);
-                            }
                             modTask.Status = TaskStatusEnum.Complete;
                             modTask.FinishDate = DateTime.Now;
                             await _db.Updateable(modTask).ExecuteCommandAsync();
@@ -493,6 +470,7 @@
                             await _db.Insertable(modTaskMonitor).ExecuteCommandAsync();
                             HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
                             HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                            //鍙嶉WMS浠诲姟瀹屾垚
                             if (modTask.Origin == "WMS")
                             {
                                 HttpService httpService = new HttpService();
@@ -503,125 +481,23 @@
                                 inputs.TaskStatus = "2";
                                 var modResponseTask = httpService.RequestTask(inputs).Result;
                             }
-                            //鎵樼洏杩涘嚭缂撳瓨鍖� 闇�瑕佽褰�
-                            if (new[] { "Z", "C" }.Contains(modTask.EndLocate.Substring(0, 1)))
-                            {
-                                await _sysConfigService.UpdateConfigValue($"cache_{modTask.EndLocate}", true);
-                            }
-                            if (new[] { "Z", "C" }.Contains(modTask.StartLocate.Substring(0, 1)))
-                            {
-                                await _sysConfigService.UpdateConfigValue($"cache_{modTask.StartLocate}", false);
-                            }
+                            
                         }
                         break;
                     case "outbin"://璧板嚭鍌ㄤ綅
                         {
-                            //鍙栫┖鎵樺畬鎴愬悗锛屽悜鎷嗘墭鏈哄啓鍏ュ畬鎴愪俊鍙�
-                            if (modTask.StartLocate == AGVStaionEnum.D1.ToString() && (modTask.EndLocate == AGVStaionEnum.B1.ToString() || modTask.EndLocate == AGVStaionEnum.B2.ToString()))
+                            //鍙嶉WMS浠诲姟鍙栬揣瀹屾垚銆乄MS鍒ゆ柇鏄钩搴撳偍浣嶅氨鏇存柊鍌ㄤ綅鐘舵��
+                            if (modTask.Origin == "WMS")
                             {
-                                var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.PalletMachine);
-                                var modConn = new PLCUtil(modPlc);
-                                var modDevice = PLCTaskAction.plcDevices.FirstOrDefault(s => s.Text == "鎷嗘墭鏈�");
-                                var modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice.Id && s.Text == "鍙栨墭淇″彿");
-                                var res = modConn.SetPlcDBValue(modPos.PosType, modDevice.DbNumber, modPos.PlcPos, "0");
-                                WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor()
-                                {
-                                    TaskNo = modTask.TaskNo,
-                                    PlcId = modDevice.PlcId,
-                                    PlcName = modPos.PlcPos,
-                                    Status = TaskStatusEnum.Doing,
-                                    InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鍙栨墭淇″彿0锛岀粨鏋渰res.IsSucceed}",
-                                };
-                                _db.Insertable(modTaskMonitor).ExecuteCommand();
-                                HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-                                modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice.Id && s.Text == "鍙栨墭瀹屾垚");
-                                res = modConn.SetPlcDBValue(modPos.PosType, modDevice.DbNumber, modPos.PlcPos, "1");
-                                modTaskMonitor = new WcsTaskMonitor()
-                                {
-                                    TaskNo = modTask.TaskNo,
-                                    PlcId = modDevice.PlcId,
-                                    PlcName = modPos.PlcPos,
-                                    Status = TaskStatusEnum.Doing,
-                                    InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鍙栨墭瀹屾垚1锛岀粨鏋渰res.IsSucceed}",
-                                };
-                                _db.Insertable(modTaskMonitor).ExecuteCommand();
-                                HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-                                modConn.Close();
+                                HttpService httpService = new HttpService();
+                                var inputs = new TaskRequestWMS();
+                                inputs.TaskNo = modTask.TaskNo;
+                                inputs.PalletNo = modTask.PalletNo;
+                                inputs.TaskType = "2";
+                                inputs.TaskStatus = "2";
+                                var modResponseTask = httpService.RequestTaskQh(inputs).Result;
                             }
-                            //todo:鍘荤爜鍨涘伐浣嶅彇璐у畬鎴愬悗锛岄渶瑕佸啓PLC淇″彿寮�鍚厜骞�
-                            if ((modTask.StartLocate == AGVStaionEnum.B1.ToString() || modTask.StartLocate == AGVStaionEnum.B2.ToString())
-                                && (modTask.EndLocate == AGVStaionEnum.C1.ToString() || modTask.EndLocate == AGVStaionEnum.C2.ToString()))
-                            {
-                                var num = modTask.StartLocate.Substring(1, 1);
-                                var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.RobotPalletizer && s.WareHouseNo == num);
-                                var modConn = new PLCUtil(modPlc);
-                                var modDevice = PLCTaskAction.plcDevices.FirstOrDefault(s => s.PlcId == modPlc.Id && s.Level == DeviceLevelEnum.DB);
-                                var modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice.Id && s.Text == "寮�鍚厜骞�");
-                                var res = modConn.SetPlcDBValue(modPos.PosType, modDevice.DbNumber, modPos.PlcPos, "1");
-                                var modTaskMonitor = new WcsTaskMonitor()
-                                {
-                                    TaskNo = modTask.TaskNo,
-                                    PlcId = modDevice.PlcId,
-                                    PlcName = modPos.PlcPos,
-                                    Status = TaskStatusEnum.Doing,
-                                    InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆寮�鍚厜骞�1锛岀粨鏋渰res.IsSucceed}",
-                                };
-                                _db.Insertable(modTaskMonitor).ExecuteCommand();
-                                HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-                                //鍐欏叆鍏夊箷0
-                                Task.Run(() =>
-                                {
-                                    var modDevice = PLCTaskAction.plcDevices.FirstOrDefault(s => s.PlcId == modPlc.Id && s.Level == DeviceLevelEnum.DB);
-                                    var modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice.Id && s.Text == "寮�鍚厜骞�");
-                                    Thread.Sleep(1000);
-                                    var res = modConn.SetPlcDBValue(modPos.PosType, modDevice.DbNumber, modPos.PlcPos, "0");
-                                    var modTaskMonitor = new WcsTaskMonitor()
-                                    {
-                                        TaskNo = modTask.TaskNo,
-                                        PlcId = modDevice.PlcId,
-                                        PlcName = modPos.PlcPos,
-                                        Status = TaskStatusEnum.Doing,
-                                        InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆寮�鍚厜骞�0锛岀粨鏋渰res.IsSucceed}",
-                                    };
-                                    _db.Insertable(modTaskMonitor).ExecuteCommand();
-                                    HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-                                });
 
-                                //鍚戠爜鍨涙満鍣ㄤ汉鍐欏彇鎵樺畬鎴愪俊鍙�
-                                modDevice = PLCTaskAction.plcDevices.FirstOrDefault(s => s.PlcId == modPlc.Id && s.Level == DeviceLevelEnum.Station);
-                                res = modConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos, "0");
-                                modTaskMonitor = new WcsTaskMonitor()
-                                {
-                                    TaskNo = modTask.TaskNo,
-                                    PlcId = modDevice.PlcId,
-                                    PlcName = modPos.PlcPos,
-                                    Status = TaskStatusEnum.Doing,
-                                    InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鍙栨墭瀹屾垚淇″彿锛岀粨鏋渰res.IsSucceed}",
-                                };
-                                _db.Insertable(modTaskMonitor).ExecuteCommand();
-                                HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-                                modConn.Close();
-                            }
-                            //璧峰宸ヤ綅鏄彁鍗囨満鍙栬揣宸ヤ綅
-                            if (modTask.StartLocate == AGVStaionEnum.A1.ToString())
-                            {
-                                var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.ConveyorLine);
-                                var modConn = new PLCUtil(modPlc);
-                                var modDevice = PLCTaskAction.plcDevices.FirstOrDefault(s => s.PlcId == modPlc.Id && s.Text == "C鍙�");
-                                var modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice.Id && s.Text == "鍙栬蛋纭");
-                                var res = modConn.SetPlcDBValue(modPos.PosType, modDevice.DbNumber, modPos.PlcPos, "1");
-                                Log.Information($"鍚憄lc{modDevice.PlcId}鍐欏叆1-鍙栬蛋纭锛岀粨鏋滐細{res.ToJson()}");
-                                var modTaskMonitor = new WcsTaskMonitor()
-                                {
-                                    TaskNo = modTask.TaskNo,
-                                    PlcId = modDevice.PlcId,
-                                    PlcName = modPos.PlcPos,
-                                    Status = TaskStatusEnum.Doing,
-                                    InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鍙栬蛋纭锛岀粨鏋渰res.IsSucceed}",
-                                };
-                                _db.Insertable(modTaskMonitor).ExecuteCommand();
-                                HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-                            }
                         }
                         break;
                     case "apply"://鏀捐揣鐢宠
@@ -687,7 +563,7 @@
                             HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
                         }
                         break;
-                    case "cancel"://浠诲姟缁撴潫
+                    case "cancel"://浠诲姟鍙栨秷
                         {
                             PLCService.AGVStatus = false;
                             modTask.IsSuccess = TaskSuccessEnum.Fail;

--
Gitblit v1.8.0