From 7e69830653c9be2d675c3fb4c5578ac1efa4b89c Mon Sep 17 00:00:00 2001
From: yanjinhui <3306209981@qq.com>
Date: 星期四, 09 四月 2026 08:58:33 +0800
Subject: [PATCH] 添加跨楼层的接口以及优化

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs               |  249 +++++++++++++++++++++++----
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/AGVCartInfoService.cs   |    3 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task_Hty.cs     |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs           |   52 +++--
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs                          |    4 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/KLSTaskMethods.cs        |   72 ++++++-
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs         |   41 +++-
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_AGVCartInfo.cs |    9 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs        |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs                         |   16 +
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs          |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/HIKROBOT/HIKROBOTQuery.cs        |   22 ++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/FOURBOTInfo.cs           |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs              |   21 ++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RGVTaskMethods.cs        |    3 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs           |    9 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HoistEnum.cs                      |    2 
 17 files changed, 415 insertions(+), 96 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/AGVCartInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/AGVCartInfoService.cs"
index 6c71744..77fc8ab 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/AGVCartInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/AGVCartInfoService.cs"
@@ -91,7 +91,8 @@
                             dataList.Add(new HIKROBOTQueryData
                             {
                                 singleRobotCode = item.AGVCode,
-                                mapCode = queryData?.mapCode ?? string.Empty
+                                mapCode = queryData?.mapCode ?? string.Empty,
+                                CarType = item.HkagvType  // 浠庢湰鍦版暟鎹簱鑾峰彇灏忚溅绫诲瀷
                             });
 
                             successMessages.Add($"AGV灏忚溅-{item.AGVCode}鎵�鍦ㄦゼ灞倇queryData?.mapCode}鏌ヨ鎴愬姛");
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HoistEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HoistEnum.cs"
index 569e695..af2eca6 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HoistEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HoistEnum.cs"
@@ -29,7 +29,7 @@
         Outboundmaterialbox,
 
         /// <summary>
-        /// 4妤肩┖绠辩鍙�
+        /// 4妤煎嚭搴撶绠�
         /// </summary>
         Emptycontainernumber,
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
index e79e78a..74374cd 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
@@ -124,7 +124,7 @@
 
 
         /// <summary>
-        /// 鍛煎彨娴峰悍鎼繍涓�  19
+        /// 绛夊緟娴峰悍AGV鎼繍鍒颁綅  19
         /// </summary>
         [Description("绛夊緟娴峰悍AGV鎼繍鍒颁綅")]
         WaitingHkAGVMovePosition,
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
index e228198..b8f6aef 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
@@ -84,7 +84,7 @@
         /// 绌鸿溅璺ㄦゼ灞�
         /// </summary>
         [Description("绌鸿溅璺ㄦゼ灞�")]
-        Move,
+        MOVE,
 
         /// <summary>
         /// 鎴愬搧绉诲簱
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/HIKROBOT/HIKROBOTQuery.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/HIKROBOT/HIKROBOTQuery.cs"
index eadf542..4dddec2 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/HIKROBOT/HIKROBOTQuery.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/HIKROBOT/HIKROBOTQuery.cs"
@@ -32,7 +32,29 @@
         /// 灏忚溅缂栧彿
         /// </summary>
         public string singleRobotCode { get; set; }
+
+        /// <summary>
+        /// 灏忚溅绫诲瀷
+        /// </summary>
+        public string CarType { get; set; }
     }
 
+    public class FloorMapping
+    {
+        public static Dictionary<string, FloorInfo> FloorMap = new Dictionary<string, FloorInfo>
+    {
+        { "AA", new FloorInfo { Floor = "1妤�", PointCode = "1A" } },
+        { "BB", new FloorInfo { Floor = "2妤�", PointCode = "2B" } },
+        { "CC", new FloorInfo { Floor = "3妤�", PointCode = "3C" } },
+        { "DD", new FloorInfo { Floor = "4妤�", PointCode = "4D" } },
+        { "EE", new FloorInfo { Floor = "5妤�", PointCode = "5E" } },
+        { "FF", new FloorInfo { Floor = "6妤�", PointCode = "6F" } }
+    };
+    }
 
+    public class FloorInfo
+    {
+        public string Floor { get; set; }
+        public string PointCode { get; set; }
+    }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/FOURBOTInfo.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/FOURBOTInfo.cs"
index afb6bdc..2a1b4fa 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/FOURBOTInfo.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/FOURBOTInfo.cs"
@@ -10,6 +10,6 @@
     {
         public string warehouseID { get; set; } = "HETU";
         public string clientCode { get; set; } = "WCS";
-        public string requestID { get; set; } = DateTime.Now.ToString("yyyyMMddHHmmss");
+        public string requestID { get; set; } = DateTime.Now.ToString("yyyyMMddHHmmssfff");
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_AGVCartInfo.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_AGVCartInfo.cs"
index 05c5b34..b4e9619 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_AGVCartInfo.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_AGVCartInfo.cs"
@@ -20,8 +20,15 @@
         /// <summary>
         /// 灏忚溅缂栧彿
         /// </summary>
-        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "绔欏彴缂栧彿")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "灏忚溅缂栧彿")]
         public string AGVCode { get; set; }
+
+
+        /// <summary>
+        /// 灏忚溅绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "灏忚溅绫诲瀷")]
+        public string HkagvType { get; set; }
         /// <summary>
         /// 澶囨敞
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task_Hty.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task_Hty.cs"
index b7054da..20d0848 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task_Hty.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task_Hty.cs"
@@ -9,7 +9,7 @@
 {
     public class Dt_Task_Hty : Dt_Task, IBaseHistoryEntity
     {
-        public new DateTime CreateDate { get; set; } = DateTime.Now;
+        public new DateTime CreateDate { get; set; }
         public int SourceId { get; set; }
 
         public string OperateType { get; set; }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs"
index b5d3eb1..bc292cc 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/HKTaskMethods.cs"
@@ -14,6 +14,7 @@
 using WIDESEAWCS_DTO.AGV.HIKROBOT;
 using System.Diagnostics.CodeAnalysis;
 using System.Reflection.PortableExecutable;
+using WIDESEAWCS_QuartzJob;
 
 namespace WIDESEAWCS_TaskInfoService
 {
@@ -43,6 +44,23 @@
                 //鑾峰彇璐т綅淇℃伅
                 else
                     hKLocationInfo = _hKLocationInfoService.GetFreeLocationInfo(taskDTO.toAreaCode) ?? throw new Exception($"鏈壘鍒扮粓鐐瑰簱鍖恒�恵taskDTO.toAreaCode}銆戝彲鐢ㄧ┖璐т綅锛�");
+                if (taskType==(int)TaskTypeEnum.Q1TSJ4)
+                {
+                    var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
+                    if (device.IsConnected)
+                    {
+                        var reslu = device.GetValue<HoistEnum, string>(HoistEnum.Emptycontainernumber);
+                        var result = reslu?.TrimEnd('\0')?.Substring(2);
+                        if (reslu== taskDTO.containerCode&&result!=null)
+                        {
+                            throw new Exception($"褰撳墠鐨勬枡绠卞彿涓簕reslu}涓巤taskDTO.containerCode}鏂欑鍙蜂笉鍖归厤");
+                        }
+                    }
+                    else
+                    {
+                        throw new Exception("鎻愬崌鏈轰俊鎭澶囪繛鎺ュけ璐�");
+                    }
+                }
                 Dt_Task dt_Task = new Dt_Task()
                 {
                     TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
@@ -111,6 +129,8 @@
                 Dt_HKLocationInfo? hKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == taskDTO.fromLocationCode) ?? throw new Exception($"鏈壘鍒拌捣鐐瑰簱浣嶃�恵taskDTO.fromLocationCode}銆戯紒");
                 if (hKLocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt()) throw new Exception($"璧风偣搴撲綅銆恵taskDTO.fromLocationCode}銆戝綋鍓嶅簱浣嶇姸鎬佷笉鍙嚭搴擄紒");
                 if (hKLocationInfo.PalletCode != taskDTO.containerCode) throw new Exception($"璧风偣搴撲綅銆恵taskDTO.fromLocationCode}銆戠粦瀹氭枡绠卞彿銆恵hKLocationInfo.PalletCode}銆戜笌浠诲姟鏂欑鍙枫�恵taskDTO.containerCode}銆戜笉鍖归厤锛�");
+                //搴撳唴鍒板簱澶栫殑鐐瑰埌鐐逛换鍔★紝鏄惁闇�瑕佸垽鏂揣浣嶇姸鎬侊紵
+
                 Dt_Task dt_Task = new Dt_Task()
                 {
                     TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
@@ -226,21 +246,23 @@
                 hIKROBOTTaskSubmit.initPriority = task.Grade;
                 hIKROBOTTaskSubmit.robotTaskCode = task.WMSTaskNum;
                 hIKROBOTTaskSubmit.taskType = tasktype.ToString(); ExtraDto extraDto = new ExtraDto();
-                CarrierInfoDto carrierInfoDto = new CarrierInfoDto()
+                if (task.TaskType != (int)TaskTypeEnum.MOVE &&task.TaskType != (int)TaskTypeEnum.Q3RK && task.TaskType != (int)TaskTypeEnum.Q3CK &&
+                    task.TaskType != (int)TaskTypeEnum.F01)
                 {
-                    carrierCode = task.PalletCode,
-                    carrierType = task.PalletCode.Contains("LXM") ? "DX" : "SX"
-                };
-                extraDto.carrierInfo.Add(carrierInfoDto);
-                hIKROBOTTaskSubmit.extra = extraDto;
+                    CarrierInfoDto carrierInfoDto = new CarrierInfoDto()
+                    {
+                        carrierCode = task.PalletCode,
+                        carrierType = task.PalletCode.Contains("LXM") ? "DX" : "SX"
+                    };
+                    extraDto.carrierInfo.Add(carrierInfoDto);
+                    hIKROBOTTaskSubmit.extra = extraDto;
+                }
                 switch (tasktype)
                 {
                     case TaskTypeEnum.CPInbound:
                     case TaskTypeEnum.CPOutbound:
                     case TaskTypeEnum.MLInbound:
                     case TaskTypeEnum.MLOutbound:
-                        break;
-                    case TaskTypeEnum.F01:
                         break;
                     case TaskTypeEnum.RK3F:
                     case TaskTypeEnum.CK3F:
@@ -310,7 +332,8 @@
                         break;
                     case TaskTypeEnum.Q3RK:
                     case TaskTypeEnum.Q3CK:
-                    case TaskTypeEnum.Move:
+                    case TaskTypeEnum.MOVE:
+                    case TaskTypeEnum.F01:
                         {
                             TargetRouteDto target = new TargetRouteDto()
                             {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/KLSTaskMethods.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/KLSTaskMethods.cs"
index 3bf1406..3051285 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/KLSTaskMethods.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/KLSTaskMethods.cs"
@@ -14,6 +14,7 @@
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_QuartzJob;
+using System.Reflection.Metadata;
 
 namespace WIDESEAWCS_TaskInfoService
 {
@@ -208,8 +209,7 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_HKLocationInfo? hKLocationInfo = null;
-                Dt_StationInfo? stationInfo = null;
+                Dt_StationManger? stationInfo = null;
                 Dt_Task dt_Task = null;
                 //鍏ュ簱 鍒颁竴妤间笁涓珯鍙扮殑浣嶇疆
                 if (taskType == (int)TaskTypeEnum.Q3RK)
@@ -229,7 +229,7 @@
                         WMSTaskNum = taskDTO.taskCode,
                         Grade = taskDTO.taskPriority,
                         PalletCode = taskDTO.containerCode,
-                        Roadway = hKLocationInfo.RoadwayNo,
+                        Roadway = "1",
                         TaskState = (int)TaskStatusEnum.New,
                         TaskType = taskType,
                         SourceAddress = taskDTO.fromLocationCode,
@@ -238,22 +238,20 @@
                         TargetAddress = taskDTO.toLocationCode,
                         Creater = "WMS",
                     };
-
                 }
                 //鍑哄簱
                 if (taskType == (int)TaskTypeEnum.Q3CK)
                 {
-                     stationInfo = _stationInfo.Repository.QueryFirst(x => x.StationName == taskDTO.toLocationCode) ?? throw new Exception($"鏈壘鍒拌捣鐐瑰簱浣嶃�恵taskDTO.toLocationCode}銆戯紒");
-                    if (stationInfo.StationName != LocationStatusEnum.InStock.ToString()) throw new Exception($"璧风偣搴撲綅銆恵taskDTO.toLocationCode}銆戝綋鍓嶅簱浣嶇姸鎬佷笉鍙嚭搴擄紒");
-                    if (stationInfo.PalletCode != taskDTO.containerCode) throw new Exception($"璧风偣搴撲綅銆恵taskDTO.toLocationCode}銆戠粦瀹氭枡绠卞彿銆恵stationInfo.PalletCode}銆戜笌浠诲姟鏂欑鍙枫�恵taskDTO.containerCode}銆戜笉鍖归厤锛�");
-                        dt_Task = new Dt_Task()
+                    //stationInfo = _stationMangerService.Repository.QueryFirst(x => x.StationCode == taskDTO.fromLocationCode) ?? throw new Exception($"鏈壘鍒拌捣鐐瑰簱浣嶃�恵taskDTO.fromLocationCode}銆戯紒");
+                    //if (stationInfo.IsOccupied != (int)LocationStatusEnum.InStock) throw new Exception($"璧风偣搴撲綅銆恵taskDTO.fromLocationCode}銆戝綋鍓嶅簱浣嶇姸鎬佷笉鍙嚭搴擄紒");
+                    dt_Task = new Dt_Task()
                     {
                         TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                         WMSTaskNum = taskDTO.taskCode,
                         //WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                         Grade = taskDTO.taskPriority,
                         PalletCode = taskDTO.containerCode,
-                        Roadway = hKLocationInfo.RoadwayNo,
+                        Roadway = "1",
                         TaskState = (int)TaskStatusEnum.New,
                         TaskType = taskType,
                         SourceAddress = taskDTO.fromLocationCode,
@@ -267,8 +265,6 @@
                 {
                     Db.Ado.BeginTran();
                     BaseDal.AddData(dt_Task);
-                    _hKLocationInfoService.Repository.UpdateData(hKLocationInfo);
-                    _stationInfo.Repository.UpdateData(stationInfo);
                     Db.Ado.CommitTran();
                 }
                 catch (Exception ex)
@@ -295,8 +291,23 @@
         public WebResponseContent CJCarryTaske(TaskDTO taskDTO, int taskType)
         {
             WebResponseContent content = new WebResponseContent();
+            Dt_StationInfo? stationInfo = null;
             try
             {
+                //#region 鏄惁闇�瑕佸垽鏂钩搴撳簱浣嶇姸鎬�
+                //if (taskType!= (int)TaskTypeEnum.CK3F)
+                //{
+                //    stationInfo = _stationInfo.Repository.QueryFirst(x => x.StationName == taskDTO.fromLocationCode) ?? throw new Exception($"鏈壘鍒拌捣鐐瑰簱浣嶃�恵taskDTO.fromLocationCode}銆戯紒");
+                //    if (stationInfo.StationName != LocationStatusEnum.InStock.ToString()) throw new Exception($"璧风偣搴撲綅銆恵taskDTO.fromLocationCode}銆戝綋鍓嶅簱浣嶇姸鎬佷笉鍙嚭搴擄紒");
+                //    if (stationInfo.PalletCode != taskDTO.containerCode) throw new Exception($"璧风偣搴撲綅銆恵taskDTO.fromLocationCode}銆戠粦瀹氭枡绠卞彿銆恵stationInfo.PalletCode}銆戜笌浠诲姟鏂欑鍙枫�恵taskDTO.containerCode}銆戜笉鍖归厤锛�");
+                //}
+                //else
+                //{
+                //    stationInfo = _stationInfo.Repository.QueryFirst(x => x.StationName == taskDTO.toLocationCode) ?? throw new Exception($"鏈壘鍒扮粓鐐瑰簱浣嶃�恵taskDTO.toLocationCode}銆戯紒");
+                //    if (stationInfo.StationName != LocationStatusEnum.InStock.ToString()) throw new Exception($"璧风偣搴撲綅銆恵taskDTO.toLocationCode}銆戝綋鍓嶅簱浣嶇姸鎬佷笉鍙嚭搴擄紒");
+                //}
+                //#endregion
+
                 Dt_Task dt_Task = new Dt_Task()
                 {
                     TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
@@ -326,5 +337,44 @@
             return content;
         }
         #endregion
+
+
+        #region 5绌鸿溅杞繍
+        public WebResponseContent HKF01Transport(TaskDTO taskDTO, int taskType)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                var stationInfo = _stationInfo.Repository.QueryFirst(x => x.StationName == taskDTO.fromLocationCode) ?? throw new Exception($"鏈壘鍒拌捣鐐瑰簱浣嶃�恵taskDTO.fromLocationCode}銆戯紒");
+                var dt_Task = new Dt_Task()
+                {
+                    TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+                    WMSTaskNum = taskDTO.taskCode,
+                    //WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+                    Grade = taskDTO.taskPriority,
+                    PalletCode = taskDTO.containerCode,
+                    Roadway = "1",
+                    TaskState = (int)TaskStatusEnum.New,
+                    TaskType = taskType,
+                    SourceAddress = taskDTO.fromLocationCode,
+                    CurrentAddress = taskDTO.fromLocationCode,
+                    NextAddress = taskDTO.toLocationCode,
+                    TargetAddress = taskDTO.toLocationCode,
+                    Creater = "WMS",
+                };
+                content = SendHIKROBOTTask(dt_Task);
+                if (!content.Status) throw new Exception(content.Message);
+                dt_Task.TaskState = (int)TaskStatusEnum.Execut;
+                dt_Task.Dispatchertime = DateTime.Now;
+                BaseDal.AddData(dt_Task);
+            }
+            catch (Exception ex)
+            {
+
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        #endregion
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RGVTaskMethods.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RGVTaskMethods.cs"
index fe6687c..83f6a96 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RGVTaskMethods.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RGVTaskMethods.cs"
@@ -53,6 +53,7 @@
                     CurrentAddress = taskDTO.fromLocationCode,
                     NextAddress = stationManger.RGVStationCode,
                     TargetAddress = "",
+                    Dispatchertime=DateTime.Now,
                     Creater = "WMS",
                 };
                 BaseDal.AddData(dt_Task);
@@ -104,6 +105,7 @@
                     CurrentAddress = taskDTO.fromLocationCode,
                     NextAddress = taskDTO.toLocationCode,
                     TargetAddress = taskDTO.toLocationCode,
+                    Dispatchertime = DateTime.Now,
                     Creater = "WMS",
                 };
                 rGVLocationInfo.LocationStatus = LocationStatusEnum.OutLock.ObjToInt();
@@ -134,6 +136,7 @@
                 };
                 return content.Error(ex.Message);
             }
+           
         }
         #endregion
         /// <summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs"
index a116186..5f476de 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs"
@@ -78,11 +78,18 @@
                     switch (hIKROBOT.extra.values.method)
                     {
                         case "start":
-                            if (task.TaskState == (int)TaskStatusEnum.CallingHKtransportation && task.TaskType == (int)TaskTypeEnum.Move)
+                            if (task.TaskState == (int)TaskStatusEnum.CallingHKtransportation && task.TaskType == (int)TaskTypeEnum.MOVE)
                             {
                                 task.TaskState = (int)TaskStatusEnum.HktransportIng;
+                                BaseDal.UpdateData(task);
                             }
-                            else if (task.TaskType == (int)TaskTypeEnum.Q3RK|| task.TaskType == (int)TaskTypeEnum.Q3CK)
+                            else if (task.TaskType == (int)TaskTypeEnum.Q3CK)
+                            {
+                                UpdateStandStatus(task, task.SourceAddress, LocationStatusEnum.Lock);
+                                task.TaskState = (int)TaskStatusEnum.Takeing;
+                                TaskFeedback(task, 1);
+                            }
+                            else if (task.TaskType == (int)TaskTypeEnum.Q3RK)
                             {
                                 UpdateStandStatus(task, task.TargetAddress, LocationStatusEnum.Lock);
                                 task.TaskState = (int)TaskStatusEnum.Takeing;
@@ -98,12 +105,14 @@
                             {
                                   if (task.TaskType == (int)TaskTypeEnum.Q3RK|| task.TaskType == (int)TaskTypeEnum.Q3CK)
                                 {
-                                    UpdateStandStatus(task, task.TargetAddress, LocationStatusEnum.Free);
+                                    UpdateStandStatus(task, task.SourceAddress, LocationStatusEnum.Free);
                                     task.TaskState = TaskStatusEnum.TakeFinish.ObjToInt();
+                                    BaseDal.UpdateData(task);
                                     TaskFeedback(task, 1);
                                 }
                                 else
                                 {
+                                    
                                     TaskFromCompleted(task, deviceTypeEnum); //浠诲姟鐘朵綋鏀逛负3鍙栬揣瀹屾垚锛屾洿鏂拌捣鐐硅揣浣嶇姸鎬侊紝骞跺弽棣圵MS璧风偣瀹屾垚
                                 }
                                 ///鍒ゆ柇浠诲姟鏄惁璺熻澶囨湁鍏�
@@ -125,10 +134,11 @@
                                         else
                                             task.ExceptionMessage = "鎻愬崌鏈轰俊鎭澶囪繛鎺ュけ璐�";
                                     }
+                                    BaseDal.UpdateData(task);
                                 }
 
-                                //鍑烘彁鍗囨満
-                                else if (task.TaskType == TaskTypeEnum.CK3F.ObjToInt() && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
+                                //3 鍑烘彁鍗囨満 涔嬪墠鏄疉GV_ToExecute
+                                else if (task.TaskType == TaskTypeEnum.CK3F.ObjToInt() && task.TaskState == (int)TaskStatusEnum.TakeFinish)
                                 {
                                     var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                                     if (device == null) task.ExceptionMessage = "鏈壘鍒版彁鍗囨満淇℃伅";
@@ -139,6 +149,7 @@
                                         else
                                             task.ExceptionMessage = "鎻愬崌鏈轰俊鎭澶囪繛鎺ュけ璐�";
                                     }
+                                    BaseDal.UpdateData(task);
                                 }
                                 //鍥涙ゼ 鍑哄簱
                                 else if ((task.TaskType == TaskTypeEnum.CHUKU1.ObjToInt() || task.TaskType == TaskTypeEnum.F04.ObjToInt()) && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
@@ -152,9 +163,10 @@
                                         else
                                             task.ExceptionMessage = "鎻愬崌鏈轰俊鎭澶囪繛鎺ュけ璐�";
                                     }
+                                    BaseDal.UpdateData(task);
                                 }
-                                //鍥涙ゼ 鍏ュ簱
-                                else if ((task.TaskType == TaskTypeEnum.Q1TSJ4.ObjToInt() || task.TaskType == TaskTypeEnum.F03.ObjToInt()) && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
+                                // //鍥涙ゼ鍑烘彁鍗囨満 鍏ュ簱 涔嬪墠鏄疉GV_ToExecute
+                                if ((task.TaskType == TaskTypeEnum.Q1TSJ4.ObjToInt() || task.TaskType == TaskTypeEnum.F03.ObjToInt()) && task.TaskState == (int)TaskStatusEnum.TakeFinish)
                                 {
                                     var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                                     if (device == null) task.ExceptionMessage = "鏈壘鍒版彁鍗囨満淇℃伅";
@@ -166,14 +178,15 @@
                                         else
                                             task.ExceptionMessage = "鎻愬崌鏈轰俊鎭澶囪繛鎺ュけ璐�";
                                     }
+                                    BaseDal.UpdateData(task);
                                 }
-                                else if (task.TaskType == TaskTypeEnum.Q3RK.ObjToInt() || task.TaskType == TaskTypeEnum.Q3CK.ObjToInt() && task.TaskState == (int)TaskStatusEnum.AGV_ToExecute)
+                                //璺ㄦゼ灞�
+                                else if (task.TaskType == TaskTypeEnum.Q3RK.ObjToInt() || task.TaskType == TaskTypeEnum.Q3CK.ObjToInt() && task.TaskState == (int)TaskStatusEnum.TakeFinish)
                                 {
                                     if (task.TaskType == TaskTypeEnum.Q3RK.ObjToInt()|| task.TaskType == TaskTypeEnum.Q3RK.ObjToInt())
                                     {
                                         var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice;
                                         if (device == null) task.ExceptionMessage = "鏈壘鍒拌川妫�闂ㄤ俊鎭�";
-
                                         else
                                         {
                                             if (device.IsConnected)
@@ -184,7 +197,7 @@
                                         }
 
                                     }
-                                   
+                                    BaseDal.UpdateData(task);
                                 }
                             }
                             break;
@@ -202,8 +215,8 @@
                                 else
                                 {
                                     if (device.IsConnected)
-                                        //鍐欎互涓�涓嚭搴撳畬鎴愪俊鍙�
-                                        device.SetValue(HoistEnum.Outboundboxretrievalcompleted, 1, task.SourceAddress);
+                                         //鎵撳紑鎵爜鍣�
+                                       device.SetValue<HoistEnum, short>(HoistEnum.Codereadingtriggered, 1);
                                     else
                                         task.ExceptionMessage = "鎻愬崌鏈轰俊鎭澶囪繛鎺ュけ璐�";
                                 }
@@ -213,15 +226,10 @@
                             break;
                         case "end"://浠诲姟瀹屾垚閫氱煡
                             {
-                                if (task.TaskType==(int)TaskTypeEnum.Move &&task.TaskState==(int)TaskStatusEnum.HkTransportCompleted)
+                                 if (task.TaskType == (int)TaskTypeEnum.Q3RK || task.TaskType == (int)TaskTypeEnum.Q3CK|| task.TaskType == (int)TaskTypeEnum.MOVE)
                                 {
                                     task.TaskState = TaskStatusEnum.Finish.ObjToInt();
-                                    TaskFeedback(task, 2);
-                                    BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
-                                }
-                                else if (task.TaskType == (int)TaskTypeEnum.Q3RK || task.TaskType == (int)TaskTypeEnum.Q3CK)
-                                {
-                                    task.TaskState = TaskStatusEnum.Finish.ObjToInt();
+                                    BaseDal.UpdateData(task);
                                     TaskFeedback(task, 2);
                                     BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
                                 }
@@ -235,17 +243,19 @@
                         case "intolift": //杩涘叆鐢垫
                             {
                                 //鍏ゼ鍒颁竴妤肩殑鍏ュ簱浠诲姟
-                                if (task.TaskType==(int)TaskTypeEnum.Q3RK)
+                                if (task.TaskType==(int)TaskTypeEnum.Q3RK||task.TaskType==(int)TaskTypeEnum.MOVE)
                                 {
                                     task.TaskState = TaskStatusEnum.Hkintolift.ObjToInt();
+                                    BaseDal.UpdateData(task);
                                 }
                             }
                             break;
                             case "leavelift": //绂诲紑鐢垫
                             {
-                                if (task.TaskType == (int)TaskTypeEnum.Q3RK)
+                                if (task.TaskType == (int)TaskTypeEnum.Q3RK || task.TaskType == (int)TaskTypeEnum.MOVE)
                                 {
                                     task.TaskState = TaskStatusEnum.HKleavelift.ObjToInt();
+                                    BaseDal.UpdateData(task);
                                 }
                             }
                             break;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
index 7557685..50b210d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -178,13 +178,17 @@
                                 content = CreateHKNewOutTask(task, item.taskType);
                                 objects.Add(content.Data);
                                 break;
-                            case (int)TaskTypeEnum.F01:
+                           
                             case (int)TaskTypeEnum.Q3RK:
                             case (int)TaskTypeEnum.Q3CK:
                                 content = CarryTask(task, item.taskType);
                                 objects.Add(content.Data);
                                 break;
+                            case (int)TaskTypeEnum.F01:
+                                content = HKF01Transport(task, item.taskType);
+                                break;
                             case (int)TaskTypeEnum.F04:
+                            case (int)TaskTypeEnum.F03:
                             case (int)TaskTypeEnum.F02:
                             case (int)TaskTypeEnum.RK3F:
                             case (int)TaskTypeEnum.CK3F:
@@ -1153,13 +1157,14 @@
                     var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ") as OtherDevice;
                     if (device == null) throw new Exception("鏈壘鍒版彁鍗囨満璁惧淇℃伅");
                     if (!device.IsConnected) throw new Exception("PLC1鎻愬崌鏈鸿澶囪繛鎺ュけ璐�");
-                    var value = device.GetValue<HoistEnum, short>(HoistEnum.Outboundmaterialbox, "TSJ");
+                    var value = device.GetValue<HoistEnum, short>(HoistEnum.Outboundmaterialbox, "TSJC3F");
                     list.Add(new
                     {
                         LoctionCode = value,
                         LocationStatus = value!=0? 100 : 0,
                         EnableStatus = 0,
                     });
+                    content.OK(data: list);
                 }
                 else if (getLocationInfo.WarehouseId == 4)
                 {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs"
index b2ae635..d6d47e9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TSJJob.cs"
@@ -146,6 +146,7 @@
                                     }
                                     continue;
                                 }
+                                
                                 if (device.GetValue<HoistEnum, short>(HoistEnum.ROutScanningCompletionSignal, task.SourceAddress) != 1)
                                 {
                                     if (task.ExceptionMessage != "4妤兼彁鍗囨満鍑哄彛鎵爜瀹屾垚淇″彿娌℃湁瀹屾垚")
@@ -180,9 +181,9 @@
                     var RK3FTasks = _taskService.Repository.QueryFirst(x => x.TaskType == TaskTypeEnum.RK3F.ObjToInt() && x.TaskState == (int)TaskStatusEnum.CheckPalletCodeing);
                     if (RK3FTasks != null)
                     {
-                        var Barcode = device.SetValue<HoistEnum, short>(HoistEnum.Codereadingtriggered, 1);
                         //妫�鏌�3妤煎叆搴撶鍙锋槸澶氬皯锛岀劧鍚庝紶缁檞ms
                         var BinNumber = device.GetValue<HoistEnum, string>(HoistEnum.Inboxnumber, RK3FTasks.TargetAddress);
+                        BinNumber = BinNumber?.TrimEnd('\0')?.Substring(2);
                         if (device.GetValue<HoistEnum, short>(HoistEnum.RInScanningCompletionSignal, RK3FTasks.TargetAddress ) !=1 )
                         {
                             RK3FTasks.ExceptionMessage = "3妤兼壂鐮佸畬鎴愪俊鍙锋病鏈夊畬鎴�";
@@ -212,6 +213,7 @@
                                     Uptasks.Add(RK3FTasks);
                                 }
                             }
+                            RK3FTasks.ExceptionMessage = "";
                             RK3FTasks.TaskState = (int)TaskStatusEnum.CheckPalletCodeFinish;
                         }
                         Uptasks.Add(RK3FTasks);
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..07b97b6 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,78 +49,225 @@
         {
             foreach (var item in tasks)
             {
-                if (item.TaskState == (int)TaskTypeEnum.Q3CK)
+                // 鍑哄簱浠诲姟澶勭悊 (浠�1妤煎嚭搴撳埌6妤�)
+                if (item.TaskType == (int)TaskTypeEnum.Q3CK)
                 {
                     // 璋冪敤鎺ュ彛鑾峰彇灏忚溅淇℃伅
                     var result = _agvcartInfoService.CheckTheCar();
-
-                    // 鍒ゆ柇鏄惁鏈� AA 鎴� FF
-                    bool hasAAOrFF = false;
-
-                    if (item.TaskState == (int)TaskTypeEnum.Q3CK)
+                    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 specialCarInAA = dataList.FirstOrDefault(d => d.mapCode == "AA" && d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
+
+                            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(d => d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
+                                if (anySpecialCar != null)
                                 {
-                                    //娣诲姞绌鸿溅杩愯緭浠诲姟
-                                    AddAGVCartInfo(item);
-                                    item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+                                    // 璧风偣锛氬皬杞﹀綋鍓嶆墍鍦ㄦゼ灞傜殑鐐逛綅锛岀洰鏍囷細1妤肩偣浣�
+                                    var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, "AA");
+                                    if (callCarResult.Status)
+                                    {
+                                        // 鍘熶换鍔$姸鎬佹敼涓虹瓑寰呯┖杞�
+                                        item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+                                    }
+                                }
+                                else
+                                {
+                                    item.ExceptionMessage = "鏈壘鍒板彲鐢ˋGV灏忚溅";
                                 }
                             }
-                           
                         }
                     }
                     else
                     {
-                        if (result != null && result.Status)
+                        item.ExceptionMessage = "鑾峰彇AGV灏忚溅淇℃伅澶辫触";
+                    }
+                }
+                // 鍏ュ簱浠诲姟澶勭悊 (浠�6妤煎叆搴撳埌1妤�)
+                else if (item.TaskType == (int)TaskTypeEnum.Q3RK)
+                {
+                    var result = _agvcartInfoService.CheckTheCar();
+
+                    if (result != null && result.Status)
+                    {
+                        var dataList = result.Data as List<HIKROBOTQueryData>;
+                        if (dataList != null && dataList.Any())
                         {
-                            if (hasAAOrFF)
+                            // Q3RK 鏄疐F鈫扐A鐨勮法妤煎眰浠诲姟锛屽彧鑳戒娇鐢ㄤ笓鐢ㄥ皬杞�
+                            var specialCarInFF = dataList.FirstOrDefault(d => d.mapCode == "FF" && d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
+
+                            if (specialCarInFF!=null)
                             {
+                                // 鏈夊湪1妤肩殑灏忚溅锛岀洿鎺ユ墽琛屼换鍔�
                                 var content = _taskService.SendHIKROBOTTask(item);
                                 item.TaskState = (int)TaskStatusEnum.Execut;
                             }
-                            else//杩欓噷鎴戝氨瑕佸懠鍙┖杞︽潵
+                            else
                             {
-                                //娣诲姞绌鸿溅杩愯緭浠诲姟
-                                AddAGVCartInfo(item);
-                                item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+                                // 娌℃湁涓撶敤灏忚溅鍦�6妤硷紝闇�瑕佸懠鍙笓鐢ㄥ皬杞︽潵鍒�6妤�
+                                var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
+                                if (anySpecialCar != null)
+                                {
+                                    // 璧风偣锛氬皬杞﹀綋鍓嶆墍鍦ㄦゼ灞傜殑鐐逛綅锛岀洰鏍囷細6妤肩偣浣�
+                                    var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, "FF");
+                                    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();
+
+                    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&&d.CarType== "MR-Q3-600LE-D(M)");
+
+                            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);
             }
-            _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="HKkc"+ DateTime.Now.ToString("yyyyMMddHHmmss"), // 鐢熸垚鍞竴鐨刉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 = null,
+                    TaskState = (int)TaskStatusEnum.CallingHKtransportation,
+                    // 澶嶅埗鍏朵粬蹇呰瀛楁
+                    CreateDate = DateTime.Now,
+                    Creater = "System"
+                };
+                _taskService.AddData(newTask);  // 娣诲姞鏂颁换鍔�
+                var result = _taskService.SendHIKROBOTTask(newTask);
+                if (result.Status)
+                {
+                    content.OK("绌鸿溅鍛煎彨浠诲姟鍒涘缓鎴愬姛", newTask);
+                }
+                else
+                {
+                    content.Error("绌鸿溅鍛煎彨浠诲姟涓嬪彂澶辫触");
+                }
+                return content;
             }
             catch (Exception ex)
             {
-                content.Error($"鍒涘缓澶辫触锛歿ex.Message}");
+                content.Error($"鍒涘缓绌鸿溅鍛煎彨浠诲姟澶辫触锛歿ex.Message}");
             }
             return content;
         }
@@ -129,10 +278,11 @@
         {
             try
             {
-                List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.Move);
-                if (reslut.Count<0)
+                List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.MOVE);
+                if (reslut.Count<=0)
                 {
-                    foreach (var item in reslut)
+                    List<Dt_Task> reslut2 = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.Q3RK||x.TaskType==(int)TaskTypeEnum.Q3CK || x.TaskType == (int)TaskTypeEnum.F01);
+                    foreach (var item in reslut2)
                     {
                         var content = _taskService.SendHIKROBOTTask(item);
                     }   
@@ -151,5 +301,30 @@
             }
         }
         #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;
+        }
+
+
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs"
index d75095a..5c7d346 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs"
@@ -65,6 +65,7 @@
                         task.RGVTaskId = fOURBO.taskID;
                         task.ExceptionMessage = "";
                         task.TaskState = (int)TaskStatusEnum.Execut;
+                        task.Dispatchertime=DateTime.Now;
                     }
                     catch (Exception ex)
                     {
@@ -119,6 +120,7 @@
                         keepRobot = 1,
                         keepRobotTimeout = 1
                     };
+                    fOURBOTnewMovePodTask.requestID += item.TaskId;
                     fOURBOTnewMovePodTask.desType = 1;
                     fOURBOTnewMovePodTask.desNodeID = item.NextAddress;
                     string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize());
@@ -134,6 +136,7 @@
                         }
                         //FOURBOTnewMovePodTaskResponseData fOURBO = fOURBOTReturn.data as FOURBOTnewMovePodTaskResponseData ?? throw new Exception("鏈幏鍙栧埌鍥涘悜杞﹁繑鍥炵殑浠诲姟ID");
                         item.RGVTaskId = fOURBO.taskID;
+                        item.Dispatchertime = DateTime.Now;
                         item.TaskState = (int)TaskStatusEnum.TakeFinish;
                     }
                 }
@@ -206,7 +209,10 @@
                                 #endregion
                                 var responseContent = AddMoveTask(item.blockPods, task);//娣诲姞绉诲簱浠诲姟
                                 if (!responseContent.Status) task.ExceptionMessage = responseContent.Message;
-                                else task.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute;
+                                else
+                                {
+                                    task.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute;
+                                }
                                 dt_Tasks.Add(task);
                             }
                             else
@@ -274,6 +280,7 @@
                             {
                                 autoToRest = 1
                             };
+                            fOURBOTnewMovePodTask.requestID = DateTime.Now.ToString("yyyyMMddHHmmssfff") + item.TaskId;
                             item.CurrentAddress = item.NextAddress;
                             item.NextAddress = rGVLocationInfo.LocationCode;
                             item.TargetAddress = rGVLocationInfo.LocationCode;
@@ -288,8 +295,8 @@
                                 var fOURBO = data.DeserializeObject<FOURBOTnewMovePodTaskResponseData>();
                                 item.RGVTaskId = fOURBO.taskID;
                                 item.TaskState = (int)TaskStatusEnum.Puting;
-
                                 rGVLocationInfo.LocationStatus = LocationStatusEnum.InLock.ObjToInt();
+                                item.Dispatchertime = DateTime.Now;
                                 locationsToUpdate.Add(rGVLocationInfo);
 
                                 #region 閲婃斁鍏ュ簱绔欏彴
@@ -316,6 +323,10 @@
                         item.ExceptionMessage = $"澶勭悊浠诲姟寮傚父锛歿ex.Message}";
                         //WriteError($"{nameof(TaskJob)}-{item.TaskId}", ex.Message, ex);
                         content.Error($"鍥涘悜杞︽帴鍙h繑鍥為敊璇細{ex.Message}");
+                    }
+                    finally
+                    {
+
                     }
                 }
                 #region MyRegion
@@ -467,6 +478,7 @@
                         }
                         item.RGVTaskId = fOURBO.taskID;
                         item.TaskState = (int)TaskStatusEnum.Puting;
+                        item.Dispatchertime = DateTime.Now;
                     }
                 }
                 _taskService.UpdateData(tasks);
@@ -571,6 +583,7 @@
                         var task = tasks.First(x => x.PalletCode == item.podID);
                         task.RGVTaskId = item.taskID;
                         task.TaskState = TaskStatusEnum.RGV_MoveTaskSend.ObjToInt();
+                        task.Dispatchertime = DateTime.Now;
                         dt_Tasks.Add(task);
                     }
                     _taskService.UpdateData(dt_Tasks);
@@ -599,6 +612,7 @@
                     if (takes == null)
                     {
                         item.TaskState = (int)TaskStatusEnum.RGV_WaitSend;
+                        item.Dispatchertime = DateTime.Now;
                     }
                 }
                 _taskService.UpdateData(tasks);
@@ -643,7 +657,7 @@
                         autoToRest = 1
                     };
                     fOURBOTnewMovePodTask.desType = 5;
-                    fOURBOTnewMovePodTask.requestID = DateTime.Now.ToString("yyyyMMddHHmmss") + item.TaskId;
+                    fOURBOTnewMovePodTask.requestID = DateTime.Now.ToString("yyyyMMddHHmmssfff") + item.TaskId;
                     string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize());
                     FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>();
                     content.OK(data: fOURBOTReturn);
@@ -657,6 +671,7 @@
                         }
                         item.RGVTaskId = fOURBO.taskID;
                         item.TaskState = (int)TaskStatusEnum.Execut;
+                        item.Dispatchertime = DateTime.Now;
                         //stationManger.IsOccupied = LocationStatusEnum.Lock.ObjToInt();
                         //_stationMangerService.UpdateData(stationManger);
                     }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs"
index 9b4d943..f2339f2 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs"
@@ -67,10 +67,6 @@
                             var R_RightWideWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_RightWideWarning, task.SourceAddress);
                             //瓒呴珮璀﹀憡
                             var R_ExtremeWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_ExtremeWarning, task.SourceAddress);
-                            //鍐欏叆鍋滄璐ㄦ淇″彿
-                            device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, true, task.SourceAddress);
-                            Thread.Sleep(500);
-                            device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
                             if (qualityResult)
                             {
                                 //濡傛灉璐ㄦ閫氳繃浜嗭紝灏辨妸浠诲姟鐘舵�佹敼涓鸿川妫�瀹屾垚
@@ -89,6 +85,10 @@
                                 //鍐欏叆澶嶄綅淇″彿
                                 //device.SetValue(QualityInspectionCommandEnum.FaultReset, true, task.SourceAddress);
                             }
+                            //鍐欏叆鍋滄璐ㄦ淇″彿
+                            device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, true, task.SourceAddress);
+                            Thread.Sleep(500);
+                            device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
                         }
                         //else
                         //{
@@ -96,12 +96,18 @@
                         //    device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
                         //    device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
                         //}
+                        else
+                        {
+                            task.TaskState = TaskStatusEnum.CheckShapeingNG.ObjToInt();
+                            task.ExceptionMessage = "鏈娴嬪埌璐ㄦ瀹屾垚淇″彿";
+                            Uptasks.Add(task);
+                        }
                     }
                     foreach (var item in AGVtaskList)
                     {
 
                         //into杩涘叆涓�妤间綅缃殑鏃跺�欙紝鍐欏叆杩涘叆淇″彿
-                        device.SetValue(QualityInspectionCommandEnum.RequestToEnter, true, item.TargetAddress);
+                        device.SetValue(QualityInspectionCommandEnum.RequestToEnter, true, item.SourceAddress);
                         if (!device.GetValue<QualityInspectionCommandEnum,bool>(QualityInspectionCommandEnum.Blocking)==true)
                         {
                             item.ExceptionMessage = $"{item.TargetAddress}绔欏彴鍏夋爡涓嶄负true锛�1锛�!";

--
Gitblit v1.9.3