From 3b7569285434bb38736627821f7d7eb34fabca28 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 09 四月 2026 16:32:30 +0800
Subject: [PATCH] 优化海康跨楼层任务,处理设备信息写入失败任务

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs |  265 ++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 224 insertions(+), 41 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs"
index 2c3ae55..ba18d44 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs"
@@ -1,9 +1,13 @@
-锘縰sing System;
+锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
+using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Reflection.Emit;
 using System.Reflection.Metadata;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_DTO;
@@ -24,7 +28,7 @@
         {
             foreach (var item in tasks)
             {
-                var content = SendHIKROBOTTask(item);
+                var content = _taskService.SendHIKROBOTTask(item);
             }
         }
         #endregion
@@ -34,66 +38,245 @@
         {
             foreach (var item in tasks)
             {
-                var content = SendHIKROBOTTask(item);
+                var content = _taskService.SendHIKROBOTTask(item);
             }
+
         }
         #endregion
 
-        #region 涓嬪彂娴峰悍AGV浠诲姟
-        public WebResponseContent SendHIKROBOTTask(Dt_Task task)
+        #region 涓嬪彂娴峰悍1-6妤肩殑AGV浠诲姟
+        public void SendAGVTask(List<Dt_Task> tasks)
+        {
+            foreach (var item in tasks)
+            {
+                // 鍑哄簱浠诲姟澶勭悊 (浠�1妤煎嚭搴撳埌6妤�)
+                if (item.TaskType == (int)TaskTypeEnum.Q3CK || item.TaskType == (int)TaskTypeEnum.Q3RK)
+                {
+                    // 璋冪敤鎺ュ彛鑾峰彇灏忚溅淇℃伅
+                    var result = _agvcartInfoService.CheckTheCar("MR-Q3-600LE-D(M)(YWGP)");
+                    if (result != null && result.Status)
+                    {
+                        var dataList = result.Data as List<HIKROBOTQueryData>;
+                        if (dataList != null && dataList.Any())
+                        {
+                            // 鍑哄簱浠诲姟锛氭鏌ユ槸鍚︽湁鍦�1妤�(AA)鐨勫皬杞�
+                            // Q3CK 鏄疉A鈫扚F鐨勮法妤煎眰浠诲姟锛屽彧鑳戒娇鐢ㄤ笓鐢ㄥ皬杞�
+                            var code = item.TaskType == (int)TaskTypeEnum.Q3CK ? "AA" : "FF";
+                            var specialCarInAA = dataList.FirstOrDefault(d => d.mapCode == code);
+
+                            if (specialCarInAA != null)
+                            {
+                                // 鏈夊湪1妤肩殑灏忚溅锛岀洿鎺ユ墽琛屼换鍔�
+                                var content = _taskService.SendHIKROBOTTask(item);
+                                if (content.Status)
+                                {
+                                    item.TaskState = (int)TaskStatusEnum.Execut;
+                                }
+                            }
+                            else
+                            {
+                                // 娌℃湁涓撶敤灏忚溅鍦�1妤硷紝闇�瑕佸懠鍙笓鐢ㄥ皬杞︽潵鍒�1妤�
+                                var anySpecialCar = dataList.FirstOrDefault();
+                                if (anySpecialCar != null)
+                                {
+                                    // 璧风偣锛氬皬杞﹀綋鍓嶆墍鍦ㄦゼ灞傜殑鐐逛綅锛岀洰鏍囷細1妤肩偣浣�
+                                    var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, code);
+                                    if (callCarResult.Status)
+                                    {
+                                        // 鍘熶换鍔$姸鎬佹敼涓虹瓑寰呯┖杞�
+                                        item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+                                    }
+                                }
+                                else
+                                {
+                                    item.ExceptionMessage = "鏈壘鍒板彲鐢ˋGV灏忚溅";
+                                }
+                            }
+                        }
+                    }
+                    else
+                    {
+                        item.ExceptionMessage = "鑾峰彇AGV灏忚溅淇℃伅澶辫触";
+                    }
+                }
+                else if (item.TaskType == (int)TaskTypeEnum.F01)
+                {
+                    // F01浠诲姟澶勭悊锛氭牴鎹洰鏍囧湴鍧�鍒ゆ柇闇�瑕佸摢涓ゼ灞傜殑灏忚溅
+                    var result = _agvcartInfoService.CheckTheCar("MR-Q3-600LE-D(M)");
+
+                    if (result != null && result.Status)
+                    {
+                        var dataList = result.Data as List<HIKROBOTQueryData>;
+                        if (dataList != null && dataList.Any())
+                        {
+                            // 浠庝换鍔$殑璧峰鍦板潃涓彁鍙栭渶瑕佺殑妤煎眰浠g爜
+                            string requiredMapCode = GetMapCodeFromAddress(item.SourceAddress);
+                            if (string.IsNullOrEmpty(requiredMapCode))
+                            {
+                                item.ExceptionMessage = $"鏃犳硶浠庣洰鏍囧湴鍧� {item.SourceAddress} 涓瘑鍒ゼ灞備俊鎭�";
+                                _taskService.UpdateData(item);
+                                continue;
+                            }
+
+                            // 妫�鏌ユ槸鍚︽湁鍦ㄧ洰鏍囨ゼ灞傜殑灏忚溅
+                            var hasRequiredCar = dataList.FirstOrDefault(d => d.mapCode == requiredMapCode);
+
+                            if (hasRequiredCar != null)
+                            {
+                                // 鏈夊湪鐩爣妤煎眰鐨勫皬杞︼紝鐩存帴鎵ц浠诲姟
+                                var content = _taskService.SendHIKROBOTTask(item);
+                                if (content.Status)
+                                {
+                                    item.TaskState = (int)TaskStatusEnum.Execut;
+                                }
+                            }
+                            else
+                            {
+                                // 娌℃湁鐩爣妤煎眰鐨勫皬杞︼紝闇�瑕佸懠鍙┖杞︿粠褰撳墠浣嶇疆鍒扮洰鏍囨ゼ灞�
+                                var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)");
+
+                                if (anySpecialCar != null)
+                                {
+                                    var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, requiredMapCode);
+                                    if (callCarResult.Status)
+                                    {
+                                        item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+                                    }
+                                }
+                                else
+                                {
+                                    item.ExceptionMessage = "鏈壘鍒板彲鐢ˋGV灏忚溅";
+                                }
+                            }
+                        }
+                    }
+                }
+                _taskService.UpdateData(item);
+            }
+        }
+
+        #endregion
+
+
+        #region 澶勭悊娴峰悍agv鎼繍浠诲姟
+        /// <summary>
+        /// 鍒涘缓绌鸿溅鍛煎彨浠诲姟锛氭牴鎹皬杞﹀綋鍓嶄綅缃拰鐩爣妤煎眰锛岃缃换鍔$殑璧风偣銆佸綋鍓嶄綅缃拰鐩爣鐐癸紝骞朵笅鍙戠粰娴峰悍鎺ュ彛
+        /// </summary>
+        /// <param name="task"></param>
+        /// <param name="currentMapCode">褰撳墠浣嶇疆</param>
+        /// <param name="targetMapCode">鐩爣鍦板潃</param>
+        /// <returns></returns>
+        public WebResponseContent AddAGVCartInfo(Dt_Task task, string currentMapCode, string targetMapCode)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(HIKROBOTTaskSubmit)) ?? throw new Exception("鏈壘鍒版捣搴稟GV浠诲姟涓嬪彂鎺ュ彛閰嶇疆淇℃伅锛佽妫�鏌ユ帴鍙i厤缃�");
-
-                #region 浠诲姟淇℃伅杞崲
-                HIKROBOTTaskSubmit hIKROBOTTaskSubmit = new HIKROBOTTaskSubmit()
+                // 鑾峰彇璧风偣妤煎眰淇℃伅
+                if (!FloorMapping.FloorMap.ContainsKey(currentMapCode))
                 {
-                    taskType = "",
-                    initPriority = task.Grade,
-                    targetRoute = new List<TargetRouteDto>
-                    {
-                        new TargetRouteDto
-                        {
-                            type= "SITE",
-                            code=task.CurrentAddress,
-                            operation="COLLECT",//鍙栬揣
-                        },
-                        new TargetRouteDto
-                        {
-                            type= "SITE",
-                            code=task.NextAddress,
-                            operation="DELIVERY",//閫佽揣
-                        }
-                    }
+                    content.Error($"鏃犳晥鐨勮捣鐐规ゼ灞備唬鐮侊細{currentMapCode}");
+                    return content;
+                }
+
+                // 鑾峰彇鐩爣妤煎眰淇℃伅
+                if (!FloorMapping.FloorMap.ContainsKey(targetMapCode))
+                {
+                    content.Error($"鏃犳晥鐨勭洰鏍囨ゼ灞備唬鐮侊細{targetMapCode}");
+                    return content;
+                }
+
+                var currentFloorInfo = FloorMapping.FloorMap[currentMapCode];
+                var targetFloorInfo = FloorMapping.FloorMap[targetMapCode];
+
+                // 璁剧疆浠诲姟淇℃伅
+                //task.SourceAddress = currentFloorInfo.PointCode;  // 璧风偣锛氬皬杞﹀綋鍓嶄綅缃殑鐐逛綅
+                //task.CurrentAddress = currentFloorInfo.PointCode; // 褰撳墠浣嶇疆锛氬皬杞﹀綋鍓嶄綅缃殑鐐逛綅
+                //task.TargetAddress = targetFloorInfo.PointCode;   // 鐩爣鐐癸細鐩爣妤煎眰鐐逛綅
+                //task.NextAddress = targetFloorInfo.PointCode; // 璁板綍鐩爣妤煎眰浠g爜
+
+                Dt_Task newTask = new Dt_Task
+                {
+                    WMSTaskNum = "HK_" + task.WMSTaskNum, // 鐢熸垚鍞竴鐨刉MS浠诲姟鍙�
+                    TaskNum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+                    SourceAddress = currentFloorInfo.PointCode,
+                    CurrentAddress = currentFloorInfo.PointCode,
+                    TargetAddress = targetFloorInfo.PointCode,
+                    NextAddress = targetFloorInfo.PointCode,
+                    TaskType = (int)TaskTypeEnum.MOVE,
+                    Grade = task.Grade,
+                    PalletCode = "",
+                    TaskState = (int)TaskStatusEnum.CallingHKtransportation,
+                    // 澶嶅埗鍏朵粬蹇呰瀛楁
+                    CreateDate = DateTime.Now,
+                    Creater = "System"
                 };
-                #endregion
-
-                string response = HttpHelper.Post(apiInfo.ApiAddress, hIKROBOTTaskSubmit.Serialize());
-                var hIKROBOTReturn = response.DeserializeObject<HIKROBOTReturn>();
-                if (hIKROBOTReturn.code == "SUCCESS")
+                var result = _taskService.SendHIKROBOTTask(newTask);
+                if (result.Status)
                 {
-                    var data = hIKROBOTReturn.data.ToString().DeserializeObject<HIKROBOTReturnData>();
-                    content.OK(data: data);
-                    //task.Remark = data.robotTaskCode;
+                    _taskService.AddData(newTask);  // 娣诲姞鏂颁换鍔�
+                    content.OK("绌鸿溅鍛煎彨浠诲姟鍒涘缓鎴愬姛", newTask);
                 }
                 else
                 {
-                    throw new Exception(hIKROBOTReturn.message);
+                    content.Error("绌鸿溅鍛煎彨浠诲姟涓嬪彂澶辫触");
                 }
-                //_taskService.UpdateData(task);
+                return content;
             }
             catch (Exception ex)
             {
-                content.Error(ex.Message);
-            }
-            finally
-            {
-
+                content.Error($"鍒涘缓绌鸿溅鍛煎彨浠诲姟澶辫触锛歿ex.Message}");
             }
             return content;
         }
         #endregion
+
+        #region 澶勭悊agv寰呯┖杞︽惉杩愪换鍔�
+        public void SendHKWaitTask(List<Dt_Task> Tasks)
+        {
+            try
+            {
+                List<Dt_Task> Uptasks = new List<Dt_Task>();
+                foreach (var item in Tasks)
+                {
+                    var content = _taskService.SendHIKROBOTTask(item);
+                    if (content.Status)
+                    {
+                        item.TaskState = (int)TaskStatusEnum.Execut;
+                        Uptasks.Add(item);
+                    }
+                }
+                _taskService.UpdateData(Uptasks);
+
+            }
+            catch (Exception ex)
+            {
+                WriteError(nameof(TaskJob), ex.Message, ex);
+            }
+        }
+        #endregion
+
+        /// <summary>
+        /// 浠庡湴鍧�涓彁鍙栨ゼ灞備唬鐮侊紙AA銆丅B銆丆C銆丏D銆丒E銆丗F锛�
+        /// </summary>
+        /// <param name="address">鐐逛綅鍦板潃</param>
+        /// <returns>妤煎眰浠g爜</returns>
+        private string GetMapCodeFromAddress(string address)
+        {
+            if (string.IsNullOrEmpty(address))
+                return null;
+
+            // 鍦板潃鏍煎紡绀轰緥 锛欰A 瀵瑰簲 0339050AA0309145
+            // keys 鏄� AA銆丅B銆丆C銆丏D銆丒E銆丗F锛寁ule鏄搴旂殑鐐逛綅淇℃伅
+            foreach (var floorCode in FloorMapping.FloorMap.Keys)
+            {
+                if (address.Contains(floorCode))
+                {
+                    return floorCode;//杩斿洖鐨勫氨鏄疉A銆丅B銆丆C銆丏D銆丒E銆丗F涓殑涓�涓紝浠h〃瀵瑰簲鐨勬ゼ灞�
+                }
+            }
+            return null;
+        }
+
+
     }
 }

--
Gitblit v1.9.3