From d0cc37c3c11859cc55f30624692dca55be2b8a32 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 29 十二月 2025 07:26:51 +0800
Subject: [PATCH] 变更及代码优化

---
 项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs |  113 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 100 insertions(+), 13 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
index 70ebbef..68f68b3 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
@@ -2,7 +2,10 @@
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using System.Text;
+using System.Text.RegularExpressions;
 using WIDESEA_DTO.Agv;
+using WIDESEA_External.Model;
+using WIDESEAWCS_Common.APIEnum;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.Enums;
@@ -70,7 +73,7 @@
                     }
                     else//鍑哄簱鏀捐揣璇锋眰
                     {
-                        var content = PutRequest(task.NextAddress, task.PalletType);
+                        var content = PutRequest(task.NextAddress, task);
                         if (!content.Status)
                         {
                             throw new Exception(content.Message);
@@ -89,7 +92,7 @@
                     }
                     else//鍏ュ簱鏀捐揣璇锋眰
                     {
-                        var content = PutRequest(task.NextAddress, task.TaskNum);
+                        var content = PutRequest(task.NextAddress, task);
                         if (!content.Status)
                         {
                             throw new Exception(content.Message);
@@ -275,6 +278,10 @@
                                 _taskService.UpdateTask(task, TaskStatusEnum.AGV_Finish);
                                 PutFinish(oldAddress, task.TaskNum);
                             }
+                            else if (task.TaskType == TaskTypeEnum.WFBLMYLBackInbound.ObjToInt() || task.TaskType == TaskTypeEnum.WFBYLInbound.ObjToInt())
+                            {
+                                _taskService.TaskCompleted(task.TaskNum);
+                            }
                             else
                             {
                                 task.CurrentAddress = dt_Station.StationCode;
@@ -312,7 +319,7 @@
         /// <param name="palletType"></param>
         /// <returns></returns>
         [HttpPost, HttpGet, Route("PutRequest"), AllowAnonymous]
-        public WebResponseContent PutRequest(string code, int taskNum)
+        public WebResponseContent PutRequest(string code, Dt_Task task)
         {
             WebResponseContent content = new WebResponseContent();
             try
@@ -330,14 +337,20 @@
                     {
                         SD_WorkCentreAgvArriveNoticeInfo=new List<AgvArriveNotice> { new AgvArriveNotice()
                         {
-                            DispatchPlanMaterialId=409,
-                            WorkCentreCode="66",
-                            LocationCode="3-ZD-ZJZZ",
-                            CallId="4534c242-27a7-4fb6-86f5-460b09db303d"
+                            DispatchPlanMaterialId=task.DispatchPlanId,
+                            WorkCentreCode=task.WorkCentreCode,
+                            LocationCode=code,
+                            CallId=Guid.NewGuid().ToString().Replace("-","")
                         } }
                     };
-                    WebResponseContent webResponse= _taskService.MESAvgArriveNotice(requestAGVArriveDTO);
-                    if (webResponse.Message.Contains("\"obj\": true"))
+                    MESResponse response = _taskService.MESAvgArriveNotice(requestAGVArriveDTO).DeserializeObject<MESResponse>() ?? throw new Exception("鏈幏鍙栧埌杩斿洖淇℃伅");
+                    if (!response.Result)
+                    {
+                        throw new Exception($"璋冪敤MES灏忚溅鍏佽鏀捐揣鎶ラ敊,MES杩斿洖淇℃伅"+ Regex.Replace(response.Msg, @"\\u([0-9a-fA-F]{4})", match => {
+                            return ((char)Convert.ToInt32(match.Groups[1].Value, 16)).ToString();
+                        }));
+                    }
+                    if (response.Obj)
                     {
                         return content.Error($"鍏佽鍙栨枡");
                     }
@@ -389,7 +402,7 @@
                         bool RequestPut = otherDevice.GetValue<CoveryorDB, bool>(CoveryorDB.C_RequestPut, stationManger.StationDeviceCode);
                         if (!RequestPut)
                         {
-                            otherDevice.SetValue(CoveryorDB.C_InTaskNum, taskNum, stationManger.StationDeviceCode);
+                            otherDevice.SetValue(CoveryorDB.C_InTaskNum, task.TaskNum, stationManger.StationDeviceCode);
                             otherDevice.SetValue(CoveryorDB.C_RequestPut, true, stationManger.StationDeviceCode);
                             Thread.Sleep(1000);
                         }
@@ -502,7 +515,7 @@
         /// <summary>
         /// 鑾峰彇妗佹灦鏀炬枡淇″彿
         /// </summary>
-        public W_TrussCartonDB GetCartonPut(string StationCode)
+        private W_TrussCartonDB GetCartonPut(string StationCode)
         {
             switch (StationCode)
             {
@@ -525,7 +538,7 @@
         /// <summary>
         /// 鑾峰彇妗佹灦璇锋眰淇″彿
         /// </summary>
-        public W_TrussCartonDB GetCartonRequest(string StationCode)
+        private W_TrussCartonDB GetCartonRequest(string StationCode)
         {
             switch (StationCode)
             {
@@ -549,7 +562,7 @@
         /// <summary>
         /// 鑾峰彇妗佹灦杩涘叆淇″彿
         /// </summary>
-        public R_TrussCartonDB GetCarton(string StationCode)
+        private R_TrussCartonDB GetCarton(string StationCode)
         {
             switch (StationCode)
             {
@@ -705,5 +718,79 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+        /// <summary>
+        /// AGV纭瀹屾垚鎺ュ彛(鍙栨斁)
+        /// </summary>
+        /// <param name="code"></param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("AGVFinish"), AllowAnonymous]
+        public WebResponseContent AGVFinish(string address,int taskNum)
+        {
+            try
+            {
+                Dt_Task task = _taskRepository.QueryFirst(x=>x.TaskNum==taskNum && x.DeviceCode=="AGV");
+                if (task==null)
+                {
+                    return WebResponseContent.Instance.Error($"{taskNum}AGV浠诲姟涓嶅瓨鍦�");
+                }
+                //鑾峰彇瀵瑰簲鐨勫潗鏍囩偣
+                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x=>x.AGVStationCode== address);
+                if (stationManger==null)
+                {
+                    return WebResponseContent.Instance.Error($"{address}AGV鍦板潃缂栧彿涓嶅瓨鍦�");
+                }
+                if (task.TaskState == TaskStatusEnum.AGV_Executing.ObjToInt())//鍙栬揣
+                {
+                    if (task.CurrentAddress != stationManger.StationCode)
+                    {
+                        return WebResponseContent.Instance.Error($"{taskNum}AGV浠诲姟鍙栬揣鍦板潃缂栧彿涓嶆槸{address}");
+                    }
+                    AgvFinishDTO agvFinishDTO = new AgvFinishDTO()
+                    {
+                        ReceiveTaskID = task.TaskNum.ToString(),
+                        Variables = new List<PointDetail>()
+                        {
+                            new PointDetail()
+                            {
+                                Code="isPick",
+                                Value="true"
+                            }
+                        }
+                    };
+                    //鍙戦�丄GV瀹屾垚閫氱煡
+                    WebResponseContent content = _taskService.AGVFinish(agvFinishDTO);
+                    if (!content.Status)
+                        throw new Exception(content.Message);
+                }
+                else//鏀捐揣
+                {
+                    if (task.NextAddress != stationManger.StationCode)
+                    {
+                        return WebResponseContent.Instance.Error($"{taskNum}AGV浠诲姟鏀捐揣鍦板潃缂栧彿涓嶆槸{address}");
+                    }
+                    AgvFinishDTO agvFinishDTO = new AgvFinishDTO()
+                    {
+                        ReceiveTaskID = task.TaskNum.ToString(),
+                        Variables = new List<PointDetail>()
+                        {
+                            new PointDetail()
+                            {
+                                Code="isDown",
+                                Value="true"
+                            }
+                        }
+                    };
+                    //鍙戦�丄GV瀹屾垚閫氱煡
+                    WebResponseContent content = _taskService.AGVFinish(agvFinishDTO);
+                    if (!content.Status)
+                        throw new Exception(content.Message);
+                }
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
     }
 }

--
Gitblit v1.9.3