From aeb971fe12b73d83d31a83b00f0a6e2876b24a00 Mon Sep 17 00:00:00 2001
From: yanjinhui <3306209981@qq.com>
Date: 星期四, 09 四月 2026 21:21:51 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/RuiShengZhiNeng/GaoPuLiTiKu

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs |  227 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 177 insertions(+), 50 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 0dbd942..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,6 +1,8 @@
-锘縰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;
@@ -47,103 +49,204 @@
         {
             foreach (var item in tasks)
             {
-                if (item.TaskState == (int)TaskTypeEnum.Q3CK)
+                // 鍑哄簱浠诲姟澶勭悊 (浠�1妤煎嚭搴撳埌6妤�)
+                if (item.TaskType == (int)TaskTypeEnum.Q3CK || item.TaskType == (int)TaskTypeEnum.Q3RK)
                 {
                     // 璋冪敤鎺ュ彛鑾峰彇灏忚溅淇℃伅
-                    var result = _agvcartInfoService.CheckTheCar();
-
-                    // 鍒ゆ柇鏄惁鏈� AA 鎴� FF
-                    bool hasAAOrFF = false;
-
-                    if (item.TaskState == (int)TaskTypeEnum.Q3CK)
+                    var result = _agvcartInfoService.CheckTheCar("MR-Q3-600LE-D(M)(YWGP)");
+                    if (result != null && result.Status)
                     {
-                        if (result != null && result.Status)
+                        var dataList = result.Data as List<HIKROBOTQueryData>;
+                        if (dataList != null && dataList.Any())
                         {
-                            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)
                             {
-                                // 妫�鏌ヨ繑鍥炵殑 mapCode 鍒楄〃涓槸鍚︽湁 AA 
-                                hasAAOrFF = dataList.Any(d => d.mapCode == "AA");
-                                if (hasAAOrFF)
+                                // 鏈夊湪1妤肩殑灏忚溅锛岀洿鎺ユ墽琛屼换鍔�
+                                var content = _taskService.SendHIKROBOTTask(item);
+                                if (content.Status)
                                 {
-                                    var content = _taskService.SendHIKROBOTTask(item);
                                     item.TaskState = (int)TaskStatusEnum.Execut;
                                 }
-                                else//杩欓噷鎴戝氨瑕佸懠鍙┖杞︽潵
+                            }
+                            else
+                            {
+                                // 娌℃湁涓撶敤灏忚溅鍦�1妤硷紝闇�瑕佸懠鍙笓鐢ㄥ皬杞︽潵鍒�1妤�
+                                var anySpecialCar = dataList.FirstOrDefault();
+                                if (anySpecialCar != null)
                                 {
-                                    //娣诲姞绌鸿溅杩愯緭浠诲姟
-                                    AddAGVCartInfo(item);
-                                    item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+                                    // 璧风偣锛氬皬杞﹀綋鍓嶆墍鍦ㄦゼ灞傜殑鐐逛綅锛岀洰鏍囷細1妤肩偣浣�
+                                    var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, code);
+                                    if (callCarResult.Status)
+                                    {
+                                        // 鍘熶换鍔$姸鎬佹敼涓虹瓑寰呯┖杞�
+                                        item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+                                    }
+                                }
+                                else
+                                {
+                                    item.ExceptionMessage = "鏈壘鍒板彲鐢ˋGV灏忚溅";
                                 }
                             }
-                           
                         }
                     }
                     else
                     {
-                        if (result != null && result.Status)
+                        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())
                         {
-                            if (hasAAOrFF)
+                            // 浠庝换鍔$殑璧峰鍦板潃涓彁鍙栭渶瑕佺殑妤煎眰浠g爜
+                            string requiredMapCode = GetMapCodeFromAddress(item.SourceAddress);
+                            if (string.IsNullOrEmpty(requiredMapCode))
                             {
-                                var content = _taskService.SendHIKROBOTTask(item);
-                                item.TaskState = (int)TaskStatusEnum.Execut;
+                                item.ExceptionMessage = $"鏃犳硶浠庣洰鏍囧湴鍧� {item.SourceAddress} 涓瘑鍒ゼ灞備俊鎭�";
+                                _taskService.UpdateData(item);
+                                continue;
                             }
-                            else//杩欓噷鎴戝氨瑕佸懠鍙┖杞︽潵
+
+                            // 妫�鏌ユ槸鍚︽湁鍦ㄧ洰鏍囨ゼ灞傜殑灏忚溅
+                            var hasRequiredCar = dataList.FirstOrDefault(d => d.mapCode == requiredMapCode);
+
+                            if (hasRequiredCar != null)
                             {
-                                //娣诲姞绌鸿溅杩愯緭浠诲姟
-                                AddAGVCartInfo(item);
-                                item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+                                // 鏈夊湪鐩爣妤煎眰鐨勫皬杞︼紝鐩存帴鎵ц浠诲姟
+                                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);
             }
-            _taskService.UpdateData(tasks);
         }
+
         #endregion
 
 
         #region 澶勭悊娴峰悍agv鎼繍浠诲姟
-        public WebResponseContent AddAGVCartInfo(Dt_Task task)
+        /// <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
             {
-                task.TaskNum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
-                task.WMSTaskNum = null;
-                task.TaskType = (int)TaskTypeEnum.Move;//鎹㈠眰浠诲姟
-                task.TaskState = (int)TaskStatusEnum.CallingHKtransportation;
-                var result = _taskService.SendHIKROBOTTask(task);
-                _taskService.AddData(task);
+                // 鑾峰彇璧风偣妤煎眰淇℃伅
+                if (!FloorMapping.FloorMap.ContainsKey(currentMapCode))
+                {
+                    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"
+                };
+                var result = _taskService.SendHIKROBOTTask(newTask);
+                if (result.Status)
+                {
+                    _taskService.AddData(newTask);  // 娣诲姞鏂颁换鍔�
+                    content.OK("绌鸿溅鍛煎彨浠诲姟鍒涘缓鎴愬姛", newTask);
+                }
+                else
+                {
+                    content.Error("绌鸿溅鍛煎彨浠诲姟涓嬪彂澶辫触");
+                }
+                return content;
             }
             catch (Exception ex)
             {
-                content.Error($"鍒涘缓澶辫触锛歿ex.Message}");
+                content.Error($"鍒涘缓绌鸿溅鍛煎彨浠诲姟澶辫触锛歿ex.Message}");
             }
             return content;
         }
         #endregion
 
         #region 澶勭悊agv寰呯┖杞︽惉杩愪换鍔�
-        public void SendHKWaitTask()
+        public void SendHKWaitTask(List<Dt_Task> Tasks)
         {
             try
             {
-                List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.Move);
-                if (reslut.Count<0)
+                List<Dt_Task> Uptasks = new List<Dt_Task>();
+                foreach (var item in Tasks)
                 {
-                    foreach (var item in reslut)
+                    var content = _taskService.SendHIKROBOTTask(item);
+                    if (content.Status)
                     {
-                        var content = _taskService.SendHIKROBOTTask(item);
-                    }   
-                    reslut.ForEach(x =>
-                    {
-                        x.TaskState =(int)TaskStatusEnum.Execut;
-                    });
-
+                        item.TaskState = (int)TaskStatusEnum.Execut;
+                        Uptasks.Add(item);
+                    }
                 }
-                _taskService.UpdateData(reslut);
-               
+                _taskService.UpdateData(Uptasks);
+
             }
             catch (Exception ex)
             {
@@ -151,5 +254,29 @@
             }
         }
         #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