From 3443d00c1c23f84d8559e802a27eb9ba7ff0858a Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期二, 10 六月 2025 16:32:34 +0800
Subject: [PATCH] 1

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/QMSReceiveCheckModel.cs                                    |   65 +++++
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/84af00d5-ba67-4076-8ddf-2b24626091ba.vsidx |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs                           |   23 +
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/ZH_AGVController.cs                             |    7 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs                                       |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs                                                 |    7 
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/4f9889c8-bc2e-456e-9b47-f0fa2eeb365c.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3e16d87e-9dfc-4339-acea-a3e8fc3006cc.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/IQMSService/IInvokeQMSService.cs                                 |   23 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs                                         |   44 +++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs                                    |   92 +++++++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP仓/ConveyorLineJob_PP.cs                                        |   17 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs                                   |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs                                     |    7 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP仓/TSJConveyorLineJob_PP.cs                                     |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs             |   64 ++++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Agv/AgvUpdateDTO.cs                                                |    1 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/67049f81-98c9-4b14-ac45-8781b4667d93.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/QMS/QmsController.cs                                |   78 ++++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs                                          |    3 
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/73055691-0933-46e5-8aec-b97ad0bfe09e.vsidx |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs                                         |   38 ++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpQmsHelper.cs                                              |   60 ++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs                           |    2 
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3f7cc6f5-3187-454f-b270-cee6e70c2744.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs                                     |   27 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs                                           |    6 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs                          |   14 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs                                              |   31 --
 /dev/null                                                                                                    |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/干膜仓/StackerCraneJob_GM.cs                                        |   60 ++++
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/89e89d9b-deaa-4861-a50e-511b40507585.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/fe5a1663-e219-46ba-811e-e4993b5c3069.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/QMS/CheckResultDTO.cs                                                 |   35 ++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesLotModel.cs                                                    |   18 +
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/QMSService/InvokeQMSService.cs                                   |   45 +++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs                                       |    2 
 37 files changed, 713 insertions(+), 64 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/LargeScreen/CP-Screen.zip" "b/\344\273\243\347\240\201\347\256\241\347\220\206/LargeScreen/CP-Screen.zip"
deleted file mode 100644
index 801a3dc..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/LargeScreen/CP-Screen.zip"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1c314e67-7b22-4b95-82d8-39953c4ffcb1.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1c314e67-7b22-4b95-82d8-39953c4ffcb1.vsidx"
deleted file mode 100644
index 6e5b28d..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1c314e67-7b22-4b95-82d8-39953c4ffcb1.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9c8323bc-3d97-4f52-8315-faf14a56756c.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3f7cc6f5-3187-454f-b270-cee6e70c2744.vsidx"
similarity index 100%
rename from "\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9c8323bc-3d97-4f52-8315-faf14a56756c.vsidx"
rename to "\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3f7cc6f5-3187-454f-b270-cee6e70c2744.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/05de9a72-8eef-42af-bb91-2884b11682fc.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/4f9889c8-bc2e-456e-9b47-f0fa2eeb365c.vsidx"
similarity index 100%
rename from "\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/05de9a72-8eef-42af-bb91-2884b11682fc.vsidx"
rename to "\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/4f9889c8-bc2e-456e-9b47-f0fa2eeb365c.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/fc24c9bc-a681-4021-afee-e9730bbda510.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/73055691-0933-46e5-8aec-b97ad0bfe09e.vsidx"
similarity index 100%
rename from "\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/fc24c9bc-a681-4021-afee-e9730bbda510.vsidx"
rename to "\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/73055691-0933-46e5-8aec-b97ad0bfe09e.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/84af00d5-ba67-4076-8ddf-2b24626091ba.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/84af00d5-ba67-4076-8ddf-2b24626091ba.vsidx"
new file mode 100644
index 0000000..c44bf32
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/84af00d5-ba67-4076-8ddf-2b24626091ba.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Agv/AgvUpdateDTO.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Agv/AgvUpdateDTO.cs"
index 98307d4..613bdb8 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Agv/AgvUpdateDTO.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Agv/AgvUpdateDTO.cs"
@@ -107,5 +107,6 @@
         /// 璁惧缂栧彿
         /// </summary>
         public string EqpCode { get; set; }
+        public string PodTyp { get; set; }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
index 2921662..e90eadd 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
@@ -65,6 +65,8 @@
         /// <param name="sourceAddress">璧峰鍦板潃</param>
         /// <returns></returns>
         WebResponseContent RequestWMSTask(string palletCode, string sourceAddress, string materielBoxCode = "");
+        
+        WebResponseContent RequestWMSZHTask(string agvTaskCode, string palletCode, string palletType,string materialLot);
 
         /// <summary>
         /// 鍚慦MS鐢宠浠诲姟
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs"
index f0bb5e2..9ecc331 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs"
@@ -311,6 +311,29 @@
                                     return agvResponseContent;
                                 }
                             }
+                            else //绾夸綋鏃犱换鍔�
+                            {
+                                //璋冪敤AGV棰勮皟搴︽帴鍙�
+                                AgvScheduleTaskDTO agvScheduleTask = new AgvScheduleTaskDTO()
+                                {
+                                    PositionCode = "8001",
+                                    NextTask = "15",
+                                    UseableLayers = "1",
+                                    CacheCount = "1",
+                                    Update = "0",
+                                    AgvTyp = "10",
+                                    PreTaskQty = "1",
+                                    ReqCode = Guid.NewGuid().ToString().Replace("-", ""),
+                                    ReqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                                };
+                                WebResponseContent contentFL = _taskService.AgvPreScheduleTask(agvScheduleTask);
+                                if (!contentFL.Status)
+                                {
+                                    agvResponseContent.Code = "1";
+                                    agvResponseContent.Message = contentFL.Message;
+                                    return agvResponseContent;
+                                }
+                            }
                             //鑾峰彇璋冨叆鍙傛暟
                             AGVBoxApplyPassDTO boxApplyPassDTO = new AGVBoxApplyPassDTO()
                             {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/ZH_AGVController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/ZH_AGVController.cs"
index 3320450..67617af 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/ZH_AGVController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/ZH_AGVController.cs"
@@ -92,8 +92,11 @@
                 if (task == null) throw new Exception($"鏈壘鍒颁换鍔�,浠诲姟鍙枫�恵agvUpdateModel.TaskCode}銆�");
                 switch (agvUpdateModel.Method)
                 {
-                    case "start":
-                        break;
+                    case "begin":
+                        WebResponseContent requestZH = _taskService.RequestWMSZHTask(agvUpdateModel.TaskCode, agvUpdateModel.PodCode,agvUpdateModel.PodTyp,agvUpdateModel.MaterialLot);
+                        agvResponseContent.Code = requestZH.Status ? "0" : "1";
+                        agvResponseContent.Message = requestZH.Status ? "鎴愬姛" : "澶辫触";
+                        return agvResponseContent;
                     case "outbin"://鍑哄簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鍙栬揣瀹屾垚
                         if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                         {
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 5a885e6..9af1fe7 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"
@@ -427,7 +427,45 @@
             }
             return content;
         }
+        public WebResponseContent RequestWMSZHTask(string agvTaskCode, string palletCode, string palletType, string materialLot)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_Task task = BaseDal.QueryFirst(x => x.AgvTaskNum == agvTaskCode);
+                if (task != null)
+                {
+                    return WebResponseContent.Instance.Error($"浠诲姟鍙穥task.TaskNum}瀵瑰簲浠诲姟宸插瓨鍦�");
+                }
+                string address = AppSettings.Get("WMSApiAddress");
+                if (string.IsNullOrEmpty(address))
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
+                }
+                string responseStr = "";
+                if (string.IsNullOrEmpty(materialLot))
+                {
+                    return content.Error("鐗╂枡鎵规涓虹┖");
+                    
+                }
+                responseStr = HttpHelper.Get($"{address}/api/Task/RequestZHInboundTask?agvTaskCode={agvTaskCode}&palletCode={palletCode}&palletType={palletType}&materialLot={materialLot}");
+                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
+                if (responseContent != null && responseContent.Status && responseContent.Data != null)
+                {
+                    WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
+                    if (taskDTO != null)
+                    {
+                        content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+                    }
+                }
 
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
         /// <summary>
         /// 
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/ConveyorLineJob_PP.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/ConveyorLineJob_PP.cs"
index 30cad43..485a7ae 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/ConveyorLineJob_PP.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/ConveyorLineJob_PP.cs"
@@ -77,20 +77,20 @@
 
                                 if (!string.IsNullOrEmpty(boxcode))
                                 {
-                                    string sc = device.Communicator.Read<string>("DB900.598.0");
+                                    string sc = device.Communicator.Read<string>("DB900.580.0");
                                     WriteError(device.DeviceName, $"璇诲彇鍊硷細{boxcode},瀵规瘮{sc}");
                                     string boxEndCode = "";
-                                    if (boxcode.LastIndexOf(",SC:") >= 0)
+                                    if (boxcode.LastIndexOf(",PO:") >= 0)
                                     {
-                                        boxEndCode = "M" + boxcode.Substring(0, boxcode.LastIndexOf(",SC:")) + sc.Substring(sc.IndexOf(",SC:")).Replace("\0", "");
+                                        boxEndCode = "M" + boxcode.Substring(0, boxcode.LastIndexOf(",PO:")) + sc.Substring(sc.IndexOf(",PO:")).Replace("\0", "");
                                     }
-                                    else if (boxcode.LastIndexOf(",SC") > 0)
+                                    else if (boxcode.LastIndexOf(",PO") > 0)
                                     {
-                                        boxEndCode = "M" + boxcode.Substring(0, boxcode.LastIndexOf(",SC")) + sc.Substring(sc.IndexOf("SC:")).Replace("\0", "");
+                                        boxEndCode = "M" + boxcode.Substring(0, boxcode.LastIndexOf(",PO")) + sc.Substring(sc.IndexOf("PO:")).Replace("\0", "");
                                     }
-                                    else if (boxcode.LastIndexOf(",S") > 0)
+                                    else if (boxcode.LastIndexOf(",P") > 0)
                                     {
-                                        boxEndCode = "M" + boxcode.Substring(0, boxcode.LastIndexOf(",S")) + sc.Substring(sc.IndexOf("SC:")).Replace("\0", "");
+                                        boxEndCode = "M" + boxcode.Substring(0, boxcode.LastIndexOf(",P")) + sc.Substring(sc.IndexOf("PO:")).Replace("\0", "");
                                     }
 
                                     //鍏ュ簱鐢宠浠诲姟
@@ -111,7 +111,8 @@
                             }
                             else if (!conveyorLineSignalRead.STB && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && conveyorLineSignalWrite.ACK)
                             {
-                                Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && x.PalletCode == conveyorLineInfoRead.Barcode && x.DeviceCode == item.StationDeviceCode && x.TaskState == TaskStatusEnum.New.ObjToInt());
+                                string boxcode = device.GetValue<R_ConveyorLineDB, string>(R_ConveyorLineDB.Boxcode, item.StationCode);
+                                Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && boxcode.Contains(x.PalletCode) && x.DeviceCode == item.StationDeviceCode && x.TaskState == TaskStatusEnum.New.ObjToInt());
                                 if (task != null)
                                 {
                                     _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, currentAddress: item.StackerCraneStationCode, deviceCode: task.Roadway, nextAddress: task.TargetAddress);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/TSJConveyorLineJob_PP.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/TSJConveyorLineJob_PP.cs"
index 377fb7e..2a48f12 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/TSJConveyorLineJob_PP.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/TSJConveyorLineJob_PP.cs"
@@ -112,7 +112,7 @@
                         {
                             if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && !conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !conveyorLineSignalWrite.STB && !conveyorLineSignalWrite.ACK)
                             {
-                                Dt_Task task = _taskRepository.QueryFirst(x => _taskService.TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && !string.IsNullOrEmpty(x.NextAddress));
+                                Dt_Task task = _taskRepository.QueryFirst(x => _taskService.TaskOutboundTypes.Contains(x.TaskType) && x.DeviceCode == item.StackerCraneCode && x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && !string.IsNullOrEmpty(x.NextAddress));
                                 if (task != null)
                                 {
                                     _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, nextAddress: item.StationCode, deviceCode: item.StackerCraneCode, targetAddress: item.StationCode);
@@ -121,7 +121,7 @@
 
                             if (conveyorLineSignalRead.STB && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !conveyorLineSignalWrite.ACK)//鍏ュ簱
                             {
-                                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNum && x.NextAddress == item.StationCode);
+                                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNum && x.DeviceCode == item.StationDeviceCode && x.NextAddress == item.StationCode);
                                 if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                                 {
                                     Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.StationCode == item.StationCode);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs"
index eb35201..3d1aa80 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs"
@@ -26,6 +26,8 @@
 using WIDESEAWCS_Core.Caches;
 using WIDESEAWCS_Tasks.ConveyorLineJob;
 using WIDESEAWCS_QuartzJob.Repository;
+using WIDESEAWCS_DTO.TaskInfo;
+using AutoMapper;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -39,9 +41,10 @@
         private readonly IRouterService _routerService;
         private readonly IStationMangerRepository _stationMangerRepository;
         private readonly IRouterRepository _routerRepository;
+        private readonly IMapper _mapper;
         private List<Dt_ApiInfo> apiInfos;
 
-        public StackerCraneJob_GM(ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository)
+        public StackerCraneJob_GM(ITaskService taskService, ICacheService cacheService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IMapper mapper)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
@@ -50,6 +53,7 @@
             _stationMangerRepository = stationMangerRepository;
             _cacheService = cacheService;
             _routerRepository = routerRepository;
+            _mapper = mapper;
 
             string? apiInfoStr = _cacheService.Get("apiInfos");
             if (!string.IsNullOrEmpty(apiInfoStr))
@@ -244,11 +248,61 @@
                 if (string.IsNullOrEmpty(url))
                 {
                     _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"鏈壘鍒癢MS绉诲簱鍒ゆ柇鎺ュ彛");
-                    WriteInfo(commonStackerCrane.DeviceCode, $"鏈壘鍒癢MS绉诲簱鍒ゆ柇鎺ュ彛");
+                    WriteError(commonStackerCrane.DeviceCode, $"鏈壘鍒癢MS绉诲簱鍒ゆ柇鎺ュ彛");
                     _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒癢MS绉诲簱鍒ゆ柇鎺ュ彛");
                     return null;
                 }
-                //HttpHelper.Post($"{url}?taskNum={task.TaskNum}&locationCode={task.NextAddress}", "");//todo 璋冪敤WMS浠诲姟瀹屾垚鏂规硶
+                string response = HttpHelper.Post($"{url}?taskNum={task.TaskNum}&locationCode={task.CurrentAddress}", "");//todo 璋冪敤WMS浠诲姟瀹屾垚鏂规硶
+                if (string.IsNullOrEmpty(response))
+                {
+                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"绉诲簱鎺ュ彛璋冪敤閿欒");
+                    WriteError(commonStackerCrane.DeviceCode, $"绉诲簱鎺ュ彛璋冪敤閿欒");
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱鎺ュ彛璋冪敤閿欒");
+                    return null;
+                }
+                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(response);
+                if (responseContent == null || !responseContent.Status)
+                {
+                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"绉诲簱鎺ュ彛璋冪敤閿欒");
+                    WriteError(commonStackerCrane.DeviceCode, $"绉诲簱鎺ュ彛璋冪敤閿欒");
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱鎺ュ彛璋冪敤閿欒");
+                    return null;
+                }
+                WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.Serialize());
+                if (taskDTO == null)
+                {
+                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"绉诲簱鎺ュ彛璋冪敤閿欒");
+                    WriteError(commonStackerCrane.DeviceCode, $"绉诲簱鎺ュ彛璋冪敤閿欒");
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱鎺ュ彛璋冪敤閿欒");
+                    return null;
+
+                }
+                if (task.TaskNum == taskDTO.TaskNum)
+                {
+                    return task;
+                }
+                else
+                {
+                    Dt_Task reloTask = _mapper.Map<Dt_Task>(taskDTO);
+                    //鍒ゆ柇绉诲簱璐т綅浠诲姟鏄惁宸插瓨鍦紝濡傚瓨鍦ㄥ厛鎵ц
+                    Dt_Task existTask = _taskService.QueryStackerExistTask(reloTask.PalletCode, reloTask.SourceAddress);
+                    if (existTask != null)
+                    {
+                        return existTask;
+                    }
+                    else
+                    {
+                        reloTask.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
+                        reloTask.CurrentAddress = taskDTO.SourceAddress;
+                        reloTask.NextAddress = taskDTO.TargetAddress;
+                        reloTask.DeviceCode = task.DeviceCode;
+                        reloTask.TaskType = TaskTypeEnum.Relocation.ObjToInt();
+                        int taskId = _taskRepository.AddData(reloTask);
+                        reloTask.TaskId = taskId;
+                    }
+                    return reloTask;
+
+                }
             }
 
             return task;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3c89de48-4a08-4fe0-8316-5c4d4bd0d410.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3c89de48-4a08-4fe0-8316-5c4d4bd0d410.vsidx"
deleted file mode 100644
index 2e319cd..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3c89de48-4a08-4fe0-8316-5c4d4bd0d410.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3e16d87e-9dfc-4339-acea-a3e8fc3006cc.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3e16d87e-9dfc-4339-acea-a3e8fc3006cc.vsidx"
new file mode 100644
index 0000000..e215482
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/3e16d87e-9dfc-4339-acea-a3e8fc3006cc.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/67049f81-98c9-4b14-ac45-8781b4667d93.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/67049f81-98c9-4b14-ac45-8781b4667d93.vsidx"
new file mode 100644
index 0000000..6e76dd2
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/67049f81-98c9-4b14-ac45-8781b4667d93.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/89e89d9b-deaa-4861-a50e-511b40507585.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/89e89d9b-deaa-4861-a50e-511b40507585.vsidx"
new file mode 100644
index 0000000..e40ceb0
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/89e89d9b-deaa-4861-a50e-511b40507585.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/bfe4e4fb-c551-4c7f-94ec-d7011d126854.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/bfe4e4fb-c551-4c7f-94ec-d7011d126854.vsidx"
deleted file mode 100644
index 69f5df9..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/bfe4e4fb-c551-4c7f-94ec-d7011d126854.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/fe5a1663-e219-46ba-811e-e4993b5c3069.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/fe5a1663-e219-46ba-811e-e4993b5c3069.vsidx"
new file mode 100644
index 0000000..a0cfaf6
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/fe5a1663-e219-46ba-811e-e4993b5c3069.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs"
index 3691af7..82cb34c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs"
@@ -43,6 +43,8 @@
                 List<string> lockLocationCodes = locationCaches_GM.Select(x => x.LocationCode).ToList();
 
                 List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == roadwayNo);
+                //鑾峰彇鎵�鏈変簩娣变綅璐т綅鏁版嵁
+                List<Dt_LocationInfo> locationInfoDepth = Repository.QueryData(x => x.RoadwayNo == roadwayNo && x.Depth== locationInfos.Max(v=>v.Depth));
                 if (locationInfos == null || locationInfos.Count == 0)
                 {
                     throw new Exception($"鏈壘鍒拌宸烽亾鐨勮揣浣嶄俊鎭�,宸烽亾鍙�:{roadwayNo}");
@@ -83,6 +85,37 @@
                         Dt_LocationInfo? locationInfo = GetUsableLocation_GM(locationInfos, definedTypeEmptyLocation, palletType, palletTypeInfo);
                         if (locationInfo != null)
                         {
+                            if (locationInfo.Depth<locationInfoDepth.Max(x=>x.Depth) && palletTypeInfo.LocaitonCount<2)
+                            {
+                                Dt_LocationInfo? locationInfoExist = null;
+                                int Column = locationInfo.Column;
+                                if (Column % 2 == 0)
+                                {
+                                    Column -= 1;
+                                }
+                                if (locationInfo.Row - locationInfo.Depth == locationInfo.Depth)
+                                {
+                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row-1) && x.Column== Column && x.Layer==locationInfo.Layer && x.LocationStatus==LocationStatusEnum.InStock.ObjToInt());
+                                }
+                                else
+                                {
+                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt());
+                                }
+                                //鑾峰彇娣变綅璐т綅绫诲瀷
+                                if (locationInfoExist==null)
+                                {
+                                    continue;
+                                }
+                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
+                                if (palletTypeInfoDepth == null)
+                                {
+                                    continue;
+                                }
+                                if (palletTypeInfoDepth.LocaitonCount==2 && palletTypeInfo.LocaitonCount==1)
+                                {
+                                    continue;
+                                }
+                            }
                             locationCaches_GM.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                             return locationInfo;
                         }
@@ -103,6 +136,37 @@
                         Dt_LocationInfo? locationInfo = GetUsableLocation_GM(locationInfos, undefinedTypeEmptyLocation, palletType, palletTypeInfo);
                         if (locationInfo != null)
                         {
+                            if (locationInfo.Depth < locationInfoDepth.Max(x => x.Depth) && palletTypeInfo.LocaitonCount < 2)
+                            {
+                                Dt_LocationInfo? locationInfoExist = null;
+                                int Column = locationInfo.Column;
+                                if (Column % 2 == 0)
+                                {
+                                    Column -= 1;
+                                }
+                                if (locationInfo.Row - locationInfo.Depth == locationInfo.Depth)
+                                {
+                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row - 1) && x.Column == Column && x.Layer == locationInfo.Layer && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt());
+                                }
+                                else
+                                {
+                                    locationInfoExist = locationInfoDepth.FirstOrDefault(x => x.Row == (locationInfo.Row + 1) && x.Column == Column && x.Layer == locationInfo.Layer && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt());
+                                }
+                                //鑾峰彇娣变綅璐т綅绫诲瀷
+                                if (locationInfoExist == null)
+                                {
+                                    continue;
+                                }
+                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
+                                if (palletTypeInfoDepth == null)
+                                {
+                                    continue;
+                                }
+                                if (palletTypeInfoDepth.LocaitonCount == 2)
+                                {
+                                    continue;
+                                }
+                            }
                             locationCaches_GM.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                             return locationInfo;
                         }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs"
index aa2255b..516daa7 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs"
@@ -71,6 +71,11 @@
         /// 鍥炶皟WCS浠诲姟瀹屾垚
         /// </summary>
         [Description("鍥炶皟WCS浠诲姟瀹屾垚")]
-        FeedBackWCSTaskCompleted
+        FeedBackWCSTaskCompleted,
+        /// <summary>
+        /// QMS鏉ユ枡妫�楠屾帴鍙�
+        /// </summary>
+        [Description("QMS鏉ユ枡妫�楠屾帴鍙�")]
+        WMS_QMSReceiveCheckApi,
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs"
index 6782f68..1191fdb 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs"
@@ -147,7 +147,11 @@
         /// </summary>
         [Description("鎴愬搧绌烘鍥炲簱")]
         EmptyProductBack = 630,
-
+        /// <summary>
+        /// 闃荤剨鍏ュ簱
+        /// </summary>
+        [Description("闃荤剨鍏ュ簱")]
+        InZHProduct = 640,
         /// <summary>
         /// 宸烽亾鍐呯Щ搴�
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs"
index 70dabe9..cf9f55b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs"
@@ -71,7 +71,12 @@
         /// 娌瑰ⅷ浠�
         /// </summary>
         [Description("娌瑰ⅷ浠�")]
-        HA153
+        HA153,
+        /// <summary>
+        /// 闃荤剨浠�
+        /// </summary>
+        [Description("闃荤剨浠�")]
+        HA154
     }
     public enum WarehouseTypEnum
     {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs"
index 1bfabba..5c7cba4 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs"
@@ -56,36 +56,5 @@
                 Logger.Add(serviceAddress, requestJson == null ? "" : requestJson, result, beginDate);
             }
         }
-        public static string GetStr(string textToEncrypt)
-        {
-            string publicKey;
-            string privateKey;
-            GenerateRSAKeyPair(out publicKey, out privateKey);
-            byte[] encryptedBytes = RSAEncrypt(textToEncrypt, publicKey);
-            // 鍙互灏嗗姞瀵嗗悗鐨勫瓧鑺傛暟缁勮浆鎹负Base64瀛楃涓叉柟渚垮悗缁鐞嗭紝渚嬪浼犺緭绛�
-            string encryptedBase64 = Convert.ToBase64String(encryptedBytes);
-            return encryptedBase64;
-        }
-        public static void GenerateRSAKeyPair(out string publicKey, out string privateKey)
-        {
-            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048))
-            {
-                publicKey = rsa.ToXmlString(false);
-                privateKey = rsa.ToXmlString(true);
-            }
-        }
-        public static byte[] RSAEncrypt(string plainText, string publicKey)
-        {
-            byte[] encryptedData;
-            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
-            {
-                rsa.FromXmlString(publicKey);
-                // 灏嗘枃鏈浆鎹负UTF8缂栫爜鐨勫瓧鑺傛暟缁�
-                byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
-                // 浣跨敤SHA1鍝堝笇绠楁硶浠ュ強Pkcs1濉厖瑙勫垯杩涜鍔犲瘑
-                encryptedData = rsa.Encrypt(plainBytes, true);
-            }
-            return encryptedData;
-        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpQmsHelper.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpQmsHelper.cs"
new file mode 100644
index 0000000..525ae13
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpQmsHelper.cs"
@@ -0,0 +1,60 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Net.Http.Headers;
+using WIDESEA_Core.LogHelper;
+using System.Security.Cryptography;
+
+namespace WIDESEA_Core.Helper
+{
+    public class HttpQmsHelper
+    {
+        public static string Post(string serviceAddress, string requestJson = null, string contentType = "application/json", Dictionary<string, string>? headers = null)
+        {
+            string result = string.Empty;
+            DateTime beginDate = DateTime.Now;
+            try
+            {
+                using (HttpContent httpContent = new StringContent(requestJson))
+                {
+                    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
+
+                    using HttpClient httpClient = new HttpClient();
+                    httpClient.Timeout = new TimeSpan(0, 0, 60);
+                    //姝e紡
+                    //string authorization = "AppKey 1930944618148245504";
+                    //娴嬭瘯
+                    string authorization = "AppKey 1930944618148245504";
+
+
+                    headers = new Dictionary<string, string>
+                    {
+                        { "Authorization", authorization },
+                        //姝e紡
+                        //{ "Site_tenant_id", "6ec60d66-b08e-4ff3-90fa-57748053f79b" }
+                        //娴嬭瘯
+                        { "Site_tenant_id", "6ec60d66-b08e-4ff3-90fa-57748053f79b" }
+                    };
+                    if (headers != null)
+                    {
+                        foreach (var header in headers)
+                            httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
+                    }
+                    HttpResponseMessage responseMessage = httpClient.PostAsync(serviceAddress, httpContent).Result;
+                    result = responseMessage.Content.ReadAsStringAsync().Result;
+                }
+                return result;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+            finally
+            {
+                Logger.Add(serviceAddress, requestJson == null ? "" : requestJson, result, beginDate);
+            }
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesLotModel.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesLotModel.cs"
new file mode 100644
index 0000000..5744eb6
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesLotModel.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.MES
+{
+    public class MesLotInfoModel
+    {
+        public string Product { get; set; }
+        public string ProductVersion { get; set; }
+        public decimal Qty { get; set; }
+        public string DateCode { get; set; }
+        public string LotNo { get; set; }
+        public bool IsFullNumber { get; set; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/QMS/CheckResultDTO.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/QMS/CheckResultDTO.cs"
new file mode 100644
index 0000000..1ca78d5
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/QMS/CheckResultDTO.cs"
@@ -0,0 +1,35 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.QMS
+{
+    /// <summary>
+    /// Qms鍥炰紶
+    /// </summary>
+    public class CheckResultDTO
+    {
+        /// <summary>
+        /// 鏀惰揣鍗曞彿
+        /// </summary>
+        public string EntryNumber { get; set; }
+        /// <summary>
+        /// 鏀惰揣琛屽彿
+        /// </summary>
+        public int RowNumber { get; set; }
+        /// <summary>
+        /// 鏉ユ枡妫�楠屽崟鍙�
+        /// </summary>
+        public string InspectionNumber { get; set; }
+        /// <summary>
+        /// 缁撴灉
+        /// </summary>
+        public string Result { get; set; }
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string Remark { get; set; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/IQMSService/IInvokeQMSService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/IQMSService/IInvokeQMSService.cs"
new file mode 100644
index 0000000..b37ed7b
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/IQMSService/IInvokeQMSService.cs"
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_External.Model;
+
+namespace WIDESEA_External.QMSService
+{
+    /// <summary>
+    /// 璋冪敤ERP鎺ュ彛
+    /// </summary>
+    public interface IInvokeQMSService : IDependency
+    {
+        /// <summary>
+        /// QMS鏀惰揣鏉ユ枡妫�楠屾帴鍙h皟鐢�
+        /// </summary>
+        /// <param name="receiveModel"></param>
+        /// <returns></returns>
+        string InvokeReceiveCheckApi(QMSReceiveCheckModel model);
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/QMSReceiveCheckModel.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/QMSReceiveCheckModel.cs"
new file mode 100644
index 0000000..f1ade45
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/QMSReceiveCheckModel.cs"
@@ -0,0 +1,65 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_External.Model
+{
+    public class QMSReceiveCheckModel
+    {
+        /// <summary>
+        /// 鏀惰揣鍗曞彿
+        /// </summary>
+        public string EntryNumber { get; set; }
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        public string MaterialCode { get; set; }
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public string MaterialName { get; set; }
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        public decimal Quantity { get; set; }
+        /// <summary>
+        /// 渚涘簲鍟嗙紪鐮�
+        /// </summary>
+        public string SupplierCode { get; set; }
+        /// <summary>
+        /// 渚涘簲鍟嗗悕绉�
+        /// </summary>
+        public string SupplierName { get; set; }
+        /// <summary>
+        /// 渚涘簲鍟嗘壒娆″彿
+        /// </summary>
+        public string BatchNumber { get; set; }
+        /// <summary>
+        /// 閫佽揣鍗曞彿
+        /// </summary>
+        public string DeliveryNumber { get; set; }
+        /// <summary>
+        /// 閲囪喘鍗曞彿
+        /// </summary>
+        public string PurchaseNumber { get; set; }
+        /// <summary>
+        /// 鏀惰揣鍗曡鍙�
+        /// </summary>
+        public int RowNumber { get; set; }
+        /// <summary>
+        /// 浠撳簱
+        /// </summary>
+        public string WarehouseCode { get; set; }
+        /// <summary>
+        /// 鏀舵枡鏃堕棿
+        /// </summary>
+        public string ReceiptDate { get; set; }
+        /// <summary>
+        /// 鏀舵枡澶囨敞
+        /// </summary>
+        public string Remark { get; set; }
+
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/QMSService/InvokeQMSService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/QMSService/InvokeQMSService.cs"
new file mode 100644
index 0000000..f174660
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/QMSService/InvokeQMSService.cs"
@@ -0,0 +1,45 @@
+锘縰sing Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.APIEnum;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO;
+using WIDESEA_DTO.MES;
+using WIDESEA_External.Model;
+using WIDESEA_IBasicRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_External.QMSService
+{
+    public class InvokeQMSService: IInvokeQMSService
+    {
+        private readonly IApiInfoRepository _apiInfoRepository;
+        public InvokeQMSService(IApiInfoRepository apiInfoRepository)
+        {
+            _apiInfoRepository = apiInfoRepository;
+        }
+        JsonSerializerSettings settings = new JsonSerializerSettings
+        {
+            ContractResolver = new CamelCasePropertyNamesContractResolver()
+        };
+        public string InvokeReceiveCheckApi(QMSReceiveCheckModel model)
+        {
+            Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_QMSReceiveCheckApi.ToString());
+            MESRoot<QMSReceiveCheckModel> requestModel = new MESRoot<QMSReceiveCheckModel>()
+            {
+                From = "WMS",
+                DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                Content = model
+            };
+
+            string request = JsonConvert.SerializeObject(model,settings);
+
+            string response = HttpHelper.Post(apiInfo.ApiAddress, request);
+            return response;
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
index aa30edb..c14fa72 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
@@ -125,6 +125,8 @@
         /// <returns></returns>
         WebResponseContent AssignInboundTaskLocationByHeight(int taskNum, string roadwayNo, int heightType);
 
+        WebResponseContent RequestZHInboundTask(string agvTaskCode, string palletCode, string palletType, string materialLot);
+
         /// <summary>
         /// 
         /// </summary>
@@ -373,5 +375,6 @@
         /// 浜哄伐閫夋嫨搴撳瓨
         /// </summary>
         WebResponseContent OutProductSelect(int orderDetailId, List<ProStockViewDTO> proStockViews);
+        WebResponseContent GetZHMesMaterialLot(string materialLot);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
index c5528bd..3613253 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
@@ -4,6 +4,7 @@
 using Newtonsoft.Json;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
+using Org.BouncyCastle.Asn1.Ocsp;
 using SqlSugar;
 using System;
 using System.Collections;
@@ -912,7 +913,15 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
-                string SerNum = materielBoxCode.Substring(0, materielBoxCode.LastIndexOf("SC:")-1);
+                string SerNum = "";
+                if (materielBoxCode.LastIndexOf("SC:")<0)
+                {
+                    SerNum = materielBoxCode;
+                }
+                else
+                {
+                    SerNum = materielBoxCode.Substring(0, materielBoxCode.LastIndexOf("SC:") - 1);
+                }
                 MatSerNumAnalysisModel model = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, SerNum);
                 //楠岃瘉鍒ゆ柇鏃堕棿鏍煎紡
                 WebResponseContent IsValidContent = IsValidMCDates(new List<MatSerNumAnalysisModel>() { model });
@@ -920,7 +929,11 @@
                 {
                     return content.Error(IsValidContent.Message);
                 }
-                string result = materielBoxCode.Substring(materielBoxCode.LastIndexOf("SC:") + 3);
+                string result = "";
+                if (materielBoxCode.LastIndexOf("SC:") > 0)
+                {
+                    result = materielBoxCode.Substring(materielBoxCode.LastIndexOf("SC:") + 3);
+                }
                 //鑾峰彇鍏ュ簱鍗曟槑缁�
                 Dt_InboundOrderDetail inboundOrderDetail = _inboundRepository.InboundOrderDetailRepository.QueryFirst(x=>x.BatchNo== model.LotNo && x.MaterielCode== model.MaterielCode);
                 if (inboundOrderDetail == null)
@@ -968,8 +981,8 @@
                         PalletCode = model.LotNo,
                         StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
                         WarehouseId = inboundOrder.WarehouseId,
-                        PalletType = GetPalletTypeGMOrPP(warehouse, result.Split("*")[0]),
-                        StockLength = result.Split("*")[0].ObjToInt(),
+                        PalletType = GetPalletTypeGMOrPP(warehouse, result.IsNullOrEmpty() ? "" : result.Split("*")[0]),
+                        StockLength = result.IsNullOrEmpty() ? 0 : result.Split("*")[0].ObjToInt(),
                         Details = new List<Dt_StockInfoDetail>()
                     };
                 }
@@ -1058,8 +1071,8 @@
                     PalletCode = model.LotNo,
                     StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(),
                     WarehouseId = warehouse.WarehouseId,
-                    PalletType = GetPalletTypeGMOrPP(warehouse, request.Split("*")[0]),
-                    StockLength = request.Split("*")[0].ObjToInt(),
+                    PalletType = GetPalletTypeGMOrPP(warehouse, request.IsNullOrEmpty() ?"":request.Split("*")[0]),
+                    StockLength = request.IsNullOrEmpty()?0:request.Split("*")[0].ObjToInt(),
                     Details = new List<Dt_StockInfoDetail>()
                 };
             }
@@ -1104,7 +1117,7 @@
             if (warehouse.WarehouseCode == WarehouseEnum.HA152.ToString())
             {
 
-                if (boxWidth.ObjToInt() <= 690 && boxWidth.ObjToInt()>=515)
+                if (boxWidth.ObjToInt() <= 690 && boxWidth.ObjToInt()>=520)
                 {
                     return 15;
                 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
index 99a9bb7..3db069b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
@@ -134,7 +134,7 @@
                             && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
                             && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
                         .Sum(x => x.StockPcsQty - x.OutboundQuantity);
-                    if (useableStockQuantity < needQuantity)
+                    if (useableStockQuantity < needQuantity && useableStockQuantity >0)
                     {
                         stockInfo.proStockInfoDetails.Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1))
                             && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs"
index fd9691d..3b97fd6 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/AssignInboundTaskLocation_BC.cs"
@@ -225,7 +225,7 @@
                 string roadwayNo=string.Empty;
                 foreach (var location in locationCounts.OrderBy(x => x.Count))
                 {
-                    if (location.Count == 1)
+                    if (location.Count <= 2)
                         continue;
                     roadwayNo = location?.RoadwayNo ?? "";
                     break;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
index 0df30d5..1181cd4 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
@@ -77,7 +77,7 @@
                       (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
                     if (locationInfo == null)
                     {
-                        return responseContent.Error($"娴嬭瘯鏋惰揣浣嶃�傘�傘�傘�傘�傘�傘�傘�傘��:{stockInfo.LocationCode}鍑哄簱鏉′欢涓嶆弧瓒�");
+                        return responseContent.Error($"娴嬭瘯鏋惰揣浣�:{stockInfo.LocationCode}鍑哄簱鏉′欢涓嶆弧瓒�");
                     }
                     //鐢熸垚娴嬭瘯鏋跺嚭搴撲换鍔� 閿佸畾搴撳瓨 鏇存敼璐т綅鐘舵��
                     Dt_Task taskOut = new()
@@ -1424,6 +1424,46 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
-       
+        /// <summary>
+        /// 鑾峰彇MES闃荤剨鎵规淇℃伅
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public WebResponseContent GetZHMesMaterialLot(string materialLot)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_GetProductByLot.ToString());
+                object obj = new { LotNo = materialLot };
+                MESRoot<object> root = new MESRoot<object>()
+                {
+                    From = "WMS",
+                    DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                    Content = obj
+                };
+                JsonSerializerSettings settings = new JsonSerializerSettings
+                {
+                    ContractResolver = new CamelCasePropertyNamesContractResolver()
+                };
+                string request = JsonConvert.SerializeObject(root, settings);
+                string response = HttpMesHelper.Post(apiInfo.ApiAddress, request);
+                MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
+                //璋冪敤鎺ュ彛
+                if (mesResponseContent.BSucc == true)
+                {
+                    content.OK(mesResponseContent.StrMsg, mesResponseContent.Content);
+                }
+                else
+                {
+                    content.Error(mesResponseContent.StrMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
index 8a041a3..ac7efdb 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
@@ -1,4 +1,5 @@
-锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
+锘縰sing Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
 using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -9,12 +10,14 @@
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.LocationEnum;
 using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.OtherEnum;
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.TaskEnum;
 using WIDESEA_Common.WareHouseEnum;
 using WIDESEA_Core;
 using WIDESEA_Core.Helper;
 using WIDESEA_DTO;
+using WIDESEA_DTO.MES;
 using WIDESEA_DTO.Task;
 using WIDESEA_Model.Models;
 
@@ -736,6 +739,93 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+        public WebResponseContent RequestZHInboundTask(string agvTaskCode, string palletCode, string palletType, string materialLot)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                //鑾峰彇娴嬭瘯鏋跺師搴撳瓨淇℃伅
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA154.ToString());
+                //鑾峰彇搴撳瓨璁板綍
+                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
+                  x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).ToList();
+                Dt_StockInfo? stockInfoOld = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == materialLot));
+                if (stockInfoOld != null)
+                {
+                    return content.Error($"搴撳瓨淇℃伅宸插瓨鍦�");
+                }
+                Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x=>x.CodeStartStr== palletType);
+                if (palletTypeInfo != null)
+                {
+                    return content.Error($"鎵樼洏绫诲瀷淇℃伅涓嶅瓨鍦�");
+                }
+                //鑾峰彇闃荤剨鎵规
+                WebResponseContent requestLotInfo = GetZHMesMaterialLot(materialLot);
+                if (!requestLotInfo.Status)
+                {
+                    return content.Error($"{requestLotInfo.Message}");
+                }
+                MesLotInfoModel mesLotInfo = JsonConvert.DeserializeObject<MesLotInfoModel>(requestLotInfo.Data.ToString());
+                Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
+                {
+                    MaterielSpec = mesLotInfo.ProductVersion,
+                    BatchNo = materialLot,
+                    EffectiveDate = mesLotInfo.DateCode,
+                    MaterielCode = mesLotInfo.Product,
+                    InboundOrderRowNo =  0,
+                    MaterielName = mesLotInfo.Product,
+                    ProductionDate = mesLotInfo.DateCode,
+                    OrderNo = "",
+                    OutboundQuantity = 0,
+                    SerialNumber = materialLot,
+                    StockQuantity = (float)mesLotInfo.Qty,
+                    Status = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
+                    Unit = "Lot",
+                    Remark= mesLotInfo.IsFullNumber?"婊ot":"涓嶆弧Lot"
+                };
+                Dt_StockInfo stockInfo = new Dt_StockInfo()
+                {
+                    PalletCode = palletCode,
+                    PalletType = palletTypeInfo.PalletType,
+                    WarehouseId = warehouse.WarehouseId,
+                    StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
+                    Details = new List<Dt_StockInfoDetail> { stockInfoDetail }
+                };
+                
+                //鐢熸垚閫�搴撲换鍔�
+                Dt_Task taskIn = new()
+                {
+                    CurrentAddress = "AGV_ZH",
+                    Grade = 0,
+                    PalletCode = palletCode,
+                    NextAddress = "",
+                    Roadway = "",
+                    SourceAddress = "AGV_ZH",
+                    TargetAddress = "",
+                    TaskStatus = (int)TaskStatusEnum.New,
+                    TaskType = (int)TaskTypeEnum.InZHProduct,
+                    TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+                    PalletType = palletTypeInfo.PalletType,
+                    WarehouseId = warehouse.WarehouseId,
+                };
+                _unitOfWorkManage.BeginTran();
+                Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand();
+                BaseDal.AddData(taskIn);
+                //BaseDal.AddData(task);
+                _unitOfWorkManage.CommitTran();
+                //灏嗕换鍔℃帹閫佸埌WCS
+                PushTasksToWCS(new List<Dt_Task>() { taskIn }, "AGV_ZH"); ;
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+
         public readonly string[] OutStartPonits = { "5230", "5237", "5244" };
         /// <summary>
         /// 鎴愬搧浣欐枡閫�搴撳叆浠�
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
index 192ee8c..1574e33 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
@@ -124,7 +124,7 @@
                 }
                 if (result.Item1 != null && result.Item1.Count > 0)
                 {
-                    Dt_Task? task = BaseDal.QueryData(x=>x.TaskType==TaskTypeEnum.OutProduct.ObjToInt()).OrderByDescending(x=>x.Grade).FirstOrDefault();
+                    Dt_Task? task = BaseDal.QueryData(x=>x.TaskType==TaskTypeEnum.OutProduct.ObjToInt()).OrderBy(x=>x.Grade).FirstOrDefault();
                     //鏇存柊鍑哄簱鐩殑浣嶇疆
                     result.Item1.ForEach(x =>
                     {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/QMS/QmsController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/QMS/QmsController.cs"
new file mode 100644
index 0000000..4d4ba43
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/QMS/QmsController.cs"
@@ -0,0 +1,78 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using SqlSugar;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.MaterielEnum;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO;
+using WIDESEA_DTO.Basic;
+using WIDESEA_DTO.ERP;
+using WIDESEA_DTO.QMS;
+using WIDESEA_External.ERPService;
+using WIDESEA_External.Model;
+using WIDESEA_External.QMSService;
+using WIDESEA_IBasicRepository;
+using WIDESEA_IBasicService;
+using WIDESEA_IInboundRepository;
+using WIDESEA_IInboundService;
+using WIDESEA_InboundService;
+using WIDESEA_IOutboundService;
+using WIDESEA_Model.Models;
+using static WIDESEA_DTO.ErpResponseContent;
+
+namespace WIDESEA_WMSServer.Controllers.QMS
+{
+    /// <summary>
+    /// ERP鎺ュ彛
+    /// </summary>
+    [Route("api/Erp")]
+    [ApiController]
+    public class QmsController : ControllerBase
+    {
+        private readonly IBasicService _basicService;
+        private readonly IOutboundService _outboundService;
+        private readonly IInboundService _inboundService;
+        private readonly IInvokeERPService _invokeERPService;
+        private readonly IReturnOrderService _returnOrderService;
+        private readonly IInvokeQMSService _invokeQMSService;
+
+        public QmsController(IBasicService basicService, IOutboundService outboundService, IInboundService inboundService,
+            IInvokeERPService invokeERPService, IReturnOrderService returnOrderService, IInvokeQMSService invokeQMSService)
+        {
+            _basicService = basicService;
+            _outboundService = outboundService;
+            _inboundService = inboundService;
+            _invokeERPService = invokeERPService;
+            _returnOrderService = returnOrderService;
+            _invokeQMSService = invokeQMSService;
+        }
+
+        ///// <summary>
+        ///// 妫�楠屽崟鍥炰紶鏇存柊
+        ///// </summary>
+        ///// <param name="model"></param>
+        ///// <returns></returns>
+        //[HttpPost, Route("CheckResultReturn"), AllowAnonymous, MethodParamsValidate]
+        //public ErpResponseContent ReceivePurchaseOrder([FromBody] Root<CheckResultDTO> model)
+        //{
+        //    WebResponseContent content = _inboundService.PurchaseOrderService.ReceivePurchaseOrder(model.Content);
+        //    if (content.Status) return Instance.OK();
+        //    else return Instance.Error(content.Message);
+        //}
+        /// <summary>
+        /// 妫�楠屽崟鍥炰紶鏇存柊
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        [HttpPost, Route("CheckResultReturn"), AllowAnonymous, MethodParamsValidate]
+        public string ReceivePurchaseOrder([FromBody] QMSReceiveCheckModel model)
+        {
+           string content = _invokeQMSService.InvokeReceiveCheckApi(model);
+           return content;
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
index 2c768e0..fe6c647 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
@@ -130,7 +130,10 @@
         {
             return Service.AssignInboundTaskLocationByHeight(taskNum, roadwayNo, heightType);
         }
-
+        public WebResponseContent RequestZHInboundTask(string agvTaskCode, string palletCode, string palletType, string materialLot)
+        {
+            return Service.RequestZHInboundTask(agvTaskCode,palletCode,palletType,materialLot);
+        }
         /// <summary>
         /// 鍏ュ簱浠诲姟瀹屾垚
         /// </summary>
@@ -260,7 +263,6 @@
         {
             return await Service.TaskCompleted(taskNum);
         }
-
         /// <summary>
         /// 鍗曚釜浠诲姟鎺ㄩ�佽嚦WCS
         /// </summary>
@@ -374,5 +376,13 @@
         {
             return Service.OutProductSelect(orderDetailId, proStockViews);
         }
+        /// <summary>
+        /// 闃荤剨鎵规鐗╂枡鏌ヨ
+        /// </summary>
+        [HttpPost, Route("GetZHMesMaterialLot"), AllowAnonymous]
+        public WebResponseContent GetZHMesMaterialLot(string materialLot)
+        {
+            return Service.GetZHMesMaterialLot(materialLot);
+        }
     }
 }

--
Gitblit v1.9.3