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

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs |  274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 271 insertions(+), 3 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 bc40d17..169dd92 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,19 +1,287 @@
-锘縰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;
+using WIDESEAWCS_DTO.AGV.HIKROBOT;
+using WIDESEAWCS_DTO.RGV.FOURBOT;
 using WIDESEAWCS_Model.Models;
 
 namespace WIDESEAWCS_Tasks
 {
     public partial class TaskJob
     {
-        #region 涓嬪彂娴峰悍AGV浠诲姟
-        public void SendHIKROBOTTask(List<Dt_Task> tasks)
+        #region 澶勭悊娴峰悍AGV浠诲姟
+        /// <summary>
+        /// 澶勭悊娴峰悍涓嶅悓绫诲瀷鐨勪换鍔★紝杩涜涓嶅悓鐨勪笟鍔¢�昏緫澶勭悊锛堥厤濂椾换鍔�:淇敼骞冲簱璐т綅淇℃伅/鎹㈠眰浠诲姟璁板綍灏忚溅淇℃伅(灏忚溅浣嶇疆灞�)锛涘嚭鍏ュ簱浠诲姟澶勭悊搴撲綅淇℃伅锛�
+        /// </summary>
+        /// <param name="tasks"></param>
+        public void HIKROBOTTask(List<Dt_Task> tasks)
         {
+            foreach (var item in tasks)
+            {
+                var content = _taskService.SendHIKROBOTTask(item);
+            }
+        }
+        #endregion
+
+        #region 澶勭悊娴峰悍寰呯户缁墽琛屼换鍔�
+        public void SendAGVWaitToExecuteTask(List<Dt_Task> tasks)
+        {
+            foreach (var item in tasks)
+            {
+                var content = _taskService.SendHIKROBOTTask(item);
+            }
 
         }
         #endregion
+
+        #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;
+                                    _taskService.UpdateData(item);
+                                }
+                            }
+                            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;
+                                        _taskService.UpdateData(item);
+                                    }
+                                }
+                                else
+                                {
+                                    item.ExceptionMessage = "鏈壘鍒板彲鐢ˋGV灏忚溅";
+                                    _taskService.UpdateData(item);
+                                }
+                            }
+                        }
+                    }
+                    else
+                    {
+                        item.ExceptionMessage = "鑾峰彇AGV灏忚溅淇℃伅澶辫触";
+                        _taskService.UpdateData(item);
+                    }
+                }
+                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 (requiredMapCode==null)
+                            {
+                                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;
+                                    _taskService.UpdateData(item);
+                                }
+                            }
+                            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;
+                                        _taskService.UpdateData(item);
+                                    }
+                                }
+                                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
+            {
+                // 鑾峰彇璧风偣妤煎眰淇℃伅
+                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];
+
+
+                // 璁板綍浣跨敤鐨凙GV灏忚溅鍨嬪彿鍒颁换鍔′腑
+                var carType= "";
+                if (task.TaskType==(int)TaskTypeEnum.F01)
+                {
+                    carType = "MR-Q3-600LE-D(M)";
+                }
+                else//   1-6/6-1鐨勪换鍔�
+                {
+                    carType = "MR-Q3-600LE-D(M)(YWGP)";
+                }
+                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 = carType,
+                    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}");
+            }
+            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鏄搴旂殑鐐逛綅淇℃伅
+            else
+            {
+                var reslut = _stationInfoService.Repository.QueryFirst(x => x.StationCode == address);
+                return reslut.FloorNumber;
+            }
+        }
     }
 }

--
Gitblit v1.9.3