From 413194b8c6a71fea8cb7a567800b11703c6c7d5a Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期三, 11 六月 2025 14:40:05 +0800
Subject: [PATCH] 添加叠托机业务

---
 Admin.NET/WCS.Application/OpenApi/OpenApi.cs |  311 +++++++++++++++++++++++++--------------------------
 1 files changed, 152 insertions(+), 159 deletions(-)

diff --git a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
index 91917e5..c6a068c 100644
--- a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
+++ b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs
@@ -3,6 +3,7 @@
 using Furion.Logging;
 using WCS.Application.Entity;
 using WCS.Application.Util;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.ComponentTCBBatchCreateContainerServiceVersionRequest.Types;
 
 namespace WCS.Application;
 
@@ -34,46 +35,51 @@
     /// <param name="models">浠诲姟淇℃伅</param>
     /// <returns>鍙嶉淇℃伅</returns>
     [AllowAnonymous]
-    public async Task AddAssignTasks(ResponseTasksModel models)
+    public async Task<ResponseAgvDto> AddAssignTasks(AgvTaskSend 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);
+        var response = await new HttpService().GenAgvSendTask(models);
+        //var response2 = await new HttpService().GenAgvContinueTask("Tk20250503000001");
+        //var response3 = await new HttpService().GenAgvUnbind("models", "B010101");
+            return response;
+        // 楠岃瘉浠诲姟鏄惁宸插瓨鍦�
+        //var taskInfo = await _db.Queryable<WcsTask>().FirstAsync(w => w.TaskNo == models.TaskNo);
+        //if (taskInfo == null)
+        //{
+        //    throw Oops.Bah("浠诲姟:" + models.TaskNo + ";涓嶅瓨鍦�!");
+        //}
+        //var data1 = FourWayCarUtil.GetCarPath("091501", "091601","0");
+        //if (data1 == null) //|| data1.Count == 0
+        //{
+        //    throw Oops.Bah("鍒嗛厤璺緞涓嶅瓨鍦�!");
+        //}
+
+        //// 鏍规嵁浠诲姟鐘舵�� 琛ュ厖璧峰缁撴潫鑺傜偣鐘舵��
+        //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);
     }
 
     /// WCS鎺ュ彈WMS涓嬪彂鐨勪换鍔�(澶�
@@ -93,7 +99,8 @@
             throw Oops.Bah("浠诲姟宸插瓨鍦�!");
         }
         var listTask = new List<WcsTask>();
-        foreach (var models in modelList)
+        var list = modelList.OrderBy(m => m.Order).ThenBy(m => m.TaskNo).ToList();
+        foreach (var models in list)
         {
             if (models.TaskType == "0")
             {
@@ -112,11 +119,15 @@
                 Status = TaskStatusEnum.Wait,
                 Levels = 999,
                 Origin = "WMS",
+                SkuNo = models.SkuNo,
+                SkuName=models.SkuName,
+                LotNo=models.LotNo,
                 StartRoadway = models.StartRoadway,
                 StartLocate = models.StartLocate,
                 EndLocate = models.EndLocate,
                 EndRoadway = models.EndRoadway,
                 PalletNo = models.PalletNo,
+                CreateTime = DateTime.Now
             };
 
             // 鑻ラ潪AGV浠诲姟澧炲姞浠诲姟ID
@@ -125,9 +136,9 @@
                 taskAdd.TaskId = FourWayCarUtil.GetTaskId(); 
             }
 
-            listTask.Add(taskAdd);
+            await _db.Insertable(taskAdd).ExecuteCommandAsync();
         }
-        await _db.Insertable(listTask).ExecuteCommandAsync();
+        
     }
     /// <summary>
     /// WCS鎺ュ彈WMS涓嬪彂鐨勪换鍔�(鍗曟潯浠诲姟)
@@ -160,6 +171,9 @@
             Type = models.Type,
             Levels = 999,
             Origin = "WMS",
+            SkuNo = models.SkuNo,
+            SkuName = models.SkuName,
+            LotNo = models.LotNo,
             StartRoadway = models.StartRoadway,
             StartLocate = models.StartLocate,
             EndLocate = models.EndLocate,
@@ -407,53 +421,29 @@
     [UnitOfWork]
     public async Task<dynamic> agvCallback(AGVCallBackInput input)
     {
+        Log.Information("AGV鍙嶉浠诲姟" + input.ToJson());
         AGVCallBackResponse result = new AGVCallBackResponse()
         {
             ReqCode = input.ReqCode,
             Message = "鎴愬姛",
             Code = "0"
         };
-        if (input.TaskCode.Substring(0, 3) != "WCS" && input.TaskCode.Substring(0, 2) != "TK")
+        if (input.robotTaskCode.Substring(0, 3) != "WCS" && input.robotTaskCode.Substring(0, 2) != "TK")
+        {
+            result.Message = "鍙嶉鐨勪换鍔′笉鏄疻CS鐨勪换鍔�"; 
+            result.Code = "1";
             return result;
+        }
         PLCUtil modUtil = null;
         try
         {
-            var modTask = await _db.Queryable<WcsTask>().FirstAsync(s => s.TaskNo == input.TaskCode);
+            var modTask = await _db.Queryable<WcsTask>().FirstAsync(s => s.TaskNo == input.robotTaskCode);
             if (modTask != null)
             {
-                switch (input.Method)
+                switch (input.Extra.Values.Method)
                 {
                     case "end"://浠诲姟瀹屾垚
                         {
-                            
-                            //璐у搧鎷夊埌瀵嗛泦搴撳叆搴撳彛闇�瑕佸悜杈撻�佺嚎鍐欏叆鍊�
-                            if (modTask.EndLocate == AGVStaionEnum.A1.ToString())
-                            {
-                                var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == "杈撻�佺嚎");
-                                var modConn = new PLCUtil(modPlc);
-                                var modDevice = PLCTaskAction.plcDevices.First(s => s.Text == "C鍙�");
-                                var modStation = PLCTaskAction.plcPositions.First(s => s.Text == "C鍙g敵璇峰叆搴�");
-                                var plcResult = modConn.SetPlcDBValue(modStation.PosType, modDevice.DbNumber, modStation.PlcPos, "100");
-                                if (plcResult.IsSucceed)
-                                {
-                                    WcsTaskMonitor modTaskMonitorPLC = new WcsTaskMonitor()
-                                    {
-                                        TaskNo = modTask.TaskNo,
-                                        PlcId = modDevice.PlcId,
-                                        PlcName = modStation.PlcPos,
-                                        StartLocat = modTask.StartLocate,
-                                        EndLocat = modTask.EndLocate,
-                                        Status = TaskStatusEnum.Doing,
-                                        InteractiveMsg = $"鍚憑modStation.Text}鍐欏叆鎸囦护100锛岀粨鏋渰plcResult.IsSucceed}",
-                                    };
-                                    _db.Insertable(modTaskMonitorPLC).ExecuteCommand();
-                                    HubUtil.PublicTaskMonitor(modTaskMonitorPLC.Adapt<WcsTaskMonitorOutput>());
-                                }
-                                else
-                                {
-                                    Log.Error("C鍙g敵璇峰叆搴撳啓鍏ュ��100澶辫触");
-                                }
-                            }
                             modTask.Status = TaskStatusEnum.Complete;
                             modTask.FinishDate = DateTime.Now;
                             await _db.Updateable(modTask).ExecuteCommandAsync();
@@ -477,7 +467,7 @@
                                 var inputs = new TaskRequestWMS();
                                 inputs.TaskNo = modTask.TaskNo;
                                 inputs.PalletNo = modTask.PalletNo;
-                                inputs.TaskType = "2";
+                                inputs.TaskType = ((int)modTask.TaskType).ToString();
                                 inputs.TaskStatus = "2";
                                 var modResponseTask = httpService.RequestTask(inputs).Result;
                             }
@@ -486,6 +476,17 @@
                         break;
                     case "outbin"://璧板嚭鍌ㄤ綅
                         {
+                            WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor()
+                            {
+                                TaskNo = modTask.TaskNo,
+                                //PlcId = modDevice.PlcId,
+                                PlcName = "AGV",
+                                StartLocat = modTask.StartLocate,
+                                EndLocat = modTask.EndLocate,
+                                Status = TaskStatusEnum.Complete,
+                                InteractiveMsg = $"AGV灏忚溅鍙嶉浠诲姟鍙栬揣瀹屾垚锛岃蛋鍑哄偍浣�",
+                            };
+                            await _db.Insertable(modTaskMonitor).ExecuteCommandAsync();
                             //鍙嶉WMS浠诲姟鍙栬揣瀹屾垚銆乄MS鍒ゆ柇鏄钩搴撳偍浣嶅氨鏇存柊鍌ㄤ綅鐘舵��
                             if (modTask.Origin == "WMS")
                             {
@@ -493,74 +494,67 @@
                                 var inputs = new TaskRequestWMS();
                                 inputs.TaskNo = modTask.TaskNo;
                                 inputs.PalletNo = modTask.PalletNo;
-                                inputs.TaskType = "2";
+                                inputs.TaskType = ((int)modTask.TaskType).ToString();
                                 inputs.TaskStatus = "2";
                                 var modResponseTask = httpService.RequestTaskQh(inputs).Result;
                             }
 
                         }
                         break;
-                    case "apply"://鏀捐揣鐢宠
+                    case "release"://鏀捐揣鐢宠
                         {
-                            //todo:鍘荤爜鍨涘伐浣嶅彇璐э紝闇�瑕佸啓PLC淇″彿鍏抽棴鍏夊箷
-                            if ((modTask.StartLocate == AGVStaionEnum.B1.ToString() || modTask.StartLocate == AGVStaionEnum.B2.ToString())
-                                && (modTask.EndLocate == AGVStaionEnum.C1.ToString() || modTask.EndLocate == AGVStaionEnum.C2.ToString()))
+                            if (modTask.EndLocate != "B040101")//9鍙峰伐浣嶅湴鍧�
                             {
-                                var no = modTask.StartLocate.Substring(1, 1);
-                                var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.RobotPalletizer && s.WareHouseNo == no);
-                                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>());
-                                Task.Run(() =>
-                                {
-                                    Thread.Sleep(1000);
-                                    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>());
-                                });
-                                modConn.Close();
+                                result.Code = "1";
+                                result.Message = "鎵句笉鍒拌浠诲姟";
+                                return result;
+                            }
+                            //modTask.Status = TaskStatusEnum.Complete;
+                            modTask.IsComple = "1";
+                            await _db.Updateable(modTask).ExecuteCommandAsync();
+                            WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor()
+                            {
+                                TaskNo = modTask.TaskNo,
+                                //PlcId = modDevice.PlcId,
+                                PlcName = "AGV",
+                                StartLocat = modTask.StartLocate,
+                                EndLocat = modTask.EndLocate,
+                                Status = TaskStatusEnum.Complete,
+                                InteractiveMsg = $"AGV灏忚溅鍙嶉浠诲姟鍒拌揪9宸ヤ綅",
+                            };
+                            await _db.Insertable(modTaskMonitor).ExecuteCommandAsync();
+                            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
+                            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                            if (modTask.Origin == "WMS")
+                            {
+                                HttpService httpService = new HttpService();
+                                var inputs = new TaskRequestWMS();
+                                inputs.TaskNo = modTask.TaskNo;
+                                inputs.PalletNo = modTask.PalletNo;
+                                inputs.TaskType = ((int)modTask.TaskType).ToString();
+                                inputs.TaskStatus = "2";
+                                var modResponseTask = httpService.RequestTaskQh(inputs).Result;
                             }
                         }
                         break;
-                    case "start"://浠诲姟寮�濮�
+                    case "notifyFullSite":
                         {
-                            //寮�濮嬪悜鎷嗘墭鏈烘斁鍏ユ墭鐩樹换鍔�
-                            if (modTask.EndLocate == AGVStaionEnum.D1.ToString())
+                            var palletNo = input.Extra.Values.carrierCode;
+                            var count = input.Extra.Values.pileCount;
+                            if (string.IsNullOrWhiteSpace(palletNo) || count <= 0)
                             {
-                                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, "1");
-                                modConn.Close();
+                                throw new Exception("鍙傛暟锛氭墭鐩樺彿/鏁伴噺楠岃瘉澶辫触");
                             }
+                            //鍚慦MS鐢宠绌烘墭鍏ュ簱
+                            HttpService httpService = new HttpService();
+                            var inputs = new NullPallInRequest();
+                             
+                            inputs.PalletNo = modTask.PalletNo;
+                            inputs.PallNum = count;
+                            inputs.Locate = "B100101";//鍙犳墭鐩樻満浣嶇疆
+                            inputs.HouseNo = "W02";
+                            var modResponseTask = httpService.RequestLiKuPallet(inputs);
 
-                            var taskMonitor = new WcsTaskMonitor()
-                            {
-                                TaskNo = modTask.TaskNo,
-                                PlcName = input.Method,
-                                InteractiveMsg = $"AGV灏忚溅鍙嶉浠诲姟寮�濮�"
-                            };
-                            await _db.Insertable(taskMonitor).ExecuteCommandAsync();
-                            HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
                         }
                         break;
                     case "cancel"://浠诲姟鍙栨秷
@@ -609,11 +603,10 @@
             modUtil?.Close();
         }
 
-
+        Log.Information("AGV鍙嶉浠诲姟杩斿洖" + result.ToJson());
         return result;
     }
-
-
+    
     /// <summary>
     /// 鑾峰彇鍘熸潗鏂欎粨鐘舵��
     /// </summary>
@@ -673,35 +666,35 @@
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [HttpPost]
-    [UnitOfWork]
-    public async Task ProductStorage(RequestStorage input)
-    {
-        var intProduct = AGVStorageUtil.ProductCount();
-        var intTask = await _db.Queryable<WcsTask>().Where(s => s.TaskType == TaskTypeEnum.Move
-                                            && s.Type == PLCTypeEnum.AGV && s.Status <= TaskStatusEnum.Doing
-                                            && s.StartLocate.StartsWith("Z") && s.EndLocate == AGVStaionEnum.A1.ToString()).CountAsync();
-        if (input.Qty > intProduct)
-            throw Oops.Bah($"杈撳叆鏁伴噺澶т簬鍙嚭鏁伴噺{intProduct}");
-        var listTask = new List<WcsTask>();
-        var TaskNo = GetTaskCode("WCS");
-        for (int i = 0; i < input.Qty; i++)
-        {
-            listTask.Add(new WcsTask()
-            {
-                TaskNo = "WCS" + DateTime.Now.ToString("yyyyMMdd") + (TaskNo++).ToString().PadLeft(4, '0'),
-                TaskType = TaskTypeEnum.Move,
-                Type = PLCTypeEnum.AGV,
-                StartLocate = AGVStaionEnum.Z11.ToString(),
-                EndLocate = AGVStaionEnum.A1.ToString(),
-                PalletNo = "",
-                Status = TaskStatusEnum.Wait,
-                Levels = 10,
-                Origin = "PDA"
-            });
-        }
-        await _db.Insertable(listTask).ExecuteCommandAsync();
-    }
+    //[HttpPost]
+    //[UnitOfWork]
+    //public async Task ProductStorage(RequestStorage input)
+    //{
+    //    var intProduct = AGVStorageUtil.ProductCount();
+    //    var intTask = await _db.Queryable<WcsTask>().Where(s => s.TaskType == TaskTypeEnum.Move
+    //                                        && s.Type == PLCTypeEnum.AGV && s.Status <= TaskStatusEnum.Doing
+    //                                        && s.StartLocate.StartsWith("Z") && s.EndLocate == AGVStaionEnum.A1.ToString()).CountAsync();
+    //    if (input.Qty > intProduct)
+    //        throw Oops.Bah($"杈撳叆鏁伴噺澶т簬鍙嚭鏁伴噺{intProduct}");
+    //    var listTask = new List<WcsTask>();
+    //    var TaskNo = GetTaskCode("WCS");
+    //    for (int i = 0; i < input.Qty; i++)
+    //    {
+    //        listTask.Add(new WcsTask()
+    //        {
+    //            TaskNo = "WCS" + DateTime.Now.ToString("yyyyMMdd") + (TaskNo++).ToString().PadLeft(4, '0'),
+    //            TaskType = TaskTypeEnum.Move,
+    //            Type = PLCTypeEnum.AGV,
+    //            StartLocate = AGVStaionEnum.Z11.ToString(),
+    //            EndLocate = AGVStaionEnum.A1.ToString(),
+    //            PalletNo = "",
+    //            Status = TaskStatusEnum.Wait,
+    //            Levels = 10,
+    //            Origin = "PDA"
+    //        });
+    //    }
+    //    await _db.Insertable(listTask).ExecuteCommandAsync();
+    //}
     /// <summary>
     /// 鑷姩鐢熸垚浠诲姟鍙�
     /// </summary>

--
Gitblit v1.8.0