From 0b201eb98881f4381893c9765b530fa5d19e41ea Mon Sep 17 00:00:00 2001
From: xiazhengtongxue <133085197+xiazhengtongxue@users.noreply.github.com>
Date: 星期五, 01 五月 2026 10:56:20 +0800
Subject: [PATCH] 1

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs |   84 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 79 insertions(+), 5 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
index 97fa4ac..7332c59 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
@@ -124,6 +124,20 @@
         }
 
         /// <summary>
+        /// 鎸変换鍔$紪鍙疯幏鍙栨満鍣ㄤ汉浠诲姟
+        /// </summary>
+        /// <remarks>
+        /// 鐢ㄤ簬 RobotJob 蹇�熸煡鎵炬墽琛屼腑鐨勪换鍔★紝閬垮厤鍏ㄨ〃鎵弿銆�
+        /// 浼樺厛閫氳繃鐘舵�佷腑缂撳瓨鐨� CurrentTaskNum 瀹氫綅浠诲姟銆�
+        /// </remarks>
+        /// <param name="taskNum">鏈哄櫒浜轰换鍔$紪鍙�</param>
+        /// <returns>鍖归厤鐨勪换鍔″璞★紝濡傛灉娌℃湁鍒欒繑鍥� null</returns>
+        public Dt_RobotTask? GetTaskByNum(int taskNum)
+        {
+            return _robotTaskService.Repository.QueryFirst(x => x.RobotTaskNum == taskNum);
+        }
+
+        /// <summary>
         /// 鎸夎澶囩紪鐮佽幏鍙栧綋鍓嶆満鍣ㄤ汉鐨勬墽琛屼腑浠诲姟
         /// </summary>
         /// <remarks>
@@ -186,6 +200,7 @@
 
             // 灏嗕换鍔″叧鑱斿埌鐘舵�佸璞�
             state.CurrentTask = task;
+            state.CurrentTaskNum = task.RobotTaskNum;
 
             if (isScanNG)
             {
@@ -276,6 +291,7 @@
 
             // 灏嗕换鍔″叧鑱斿埌鐘舵�佸璞�
             state.CurrentTask = task;
+            state.CurrentTaskNum = task.RobotTaskNum;
 
             if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
             {
@@ -346,6 +362,7 @@
 
             task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
             state.CurrentTask = task;
+            state.CurrentTaskNum = task.RobotTaskNum;
 
             if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
             {
@@ -389,6 +406,7 @@
         {
             task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
             state.CurrentTask = task;
+            state.CurrentTaskNum = task.RobotTaskNum;
 
             if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
             {
@@ -434,6 +452,7 @@
         {
             task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
             state.CurrentTask = task;
+            state.CurrentTaskNum = task.RobotTaskNum;
 
             if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
             {
@@ -525,7 +544,7 @@
                         PalletCode = currentTask.RobotSourceAddressPalletCode;  // 浣跨敤婧愬湴鍧�鐨勬墭鐩樼爜
                         if (isRoadway == "HCSC1")
                         {
-                            warehouseId = 2;
+                            warehouseId = 3;
                             roadway = "HCSC1";
                         }
                         else if (isRoadway == "GWSC1")
@@ -542,7 +561,7 @@
                         taskType = TaskTypeEnum.InEmpty.GetHashCode();  // 绌烘墭鐩樺叆搴�
                         PalletCode = currentTask.RobotSourceAddressPalletCode;  // 浣跨敤婧愬湴鍧�鐨勬墭鐩樼爜
 
-                        warehouseId = 3;
+                        warehouseId = 2;
                         roadway = "CWSC1";
 
                         SourceAddress = currentTask.RobotSourceAddressLineCode;
@@ -562,7 +581,7 @@
 
                         if (isRoadway == "HCSC1")
                         {
-                            warehouseId = 2;
+                            warehouseId = 3;
                             roadway = "HCSC1";
                         }
                         else if (isRoadway == "GWSC1")
@@ -627,6 +646,12 @@
             // 瑙f瀽 WMS 杩斿洖鐨勪换鍔′俊鎭�
             WMSTaskDTO taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(result.Data.Data.ToJson() ?? string.Empty) ?? new WMSTaskDTO();
 
+            var task = await _taskService.Repository.QueryFirstAsync(x => x.PalletCode == taskDTO.PalletCode);
+            if(task != null)
+            {
+                await _taskService.Repository.DeleteDataAsync(task);
+            }
+
             // 璋冪敤浠诲姟鏈嶅姟鎺ユ敹 WMS 浠诲姟
             var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
             if (!content.Status)
@@ -682,14 +707,63 @@
                         // 閫氶亾/浣嶇疆缂栧彿
                         Channel = x,
 
-                        // 鐢垫睜鏉$爜锛氬鏋滅姸鎬佷腑鏈夋潯鐮佸垪琛紝鍙栧搴斾綅缃殑鏉$爜锛涘惁鍒欎负绌�
+                        // 鐢垫睜鏉$爜锛氫娇鐢ㄥ綋鍓嶆壒娆℃潯鐮佸垪琛紝鍙栧搴斾綅缃殑鏉$爜锛涘惁鍒欎负绌�
                         //CellBarcode = state.CellBarcode?.Count > 0 ? state.CellBarcode[x - 1] : ""
-                        CellBarcode = !state.CellBarcode.IsNullOrEmpty() ? state.CellBarcode[idx].ToString() ?? string.Empty : string.Empty
+                        CellBarcode = !state.CurrentBatchBarcodes.IsNullOrEmpty() ? state.CurrentBatchBarcodes[idx].ToString() ?? string.Empty : string.Empty
                     })
                     .ToList()
             };
         }
+        /// <summary>
+        /// 鏋勫缓搴撳瓨鍥炰紶 DTO
+        /// </summary>
+        /// <remarks>
+        /// 鐢ㄤ簬鎷嗙洏鍜岀粍鐩樻搷浣滄椂锛屽悜 WMS 鍥炰紶搴撳瓨淇℃伅銆�
+        /// DTO 鍖呭惈婧愯揣浣嶃�佺洰鏍囪揣浣嶃�佹墭鐩樼爜浠ュ強姣忎釜浣嶇疆鐨勭數姹犳潯鐮併��
+        /// </remarks>
+        /// <param name="state">鏈哄櫒浜哄綋鍓嶇姸鎬�</param>
+        /// <param name="positions">鐢垫睜浣嶇疆鏁扮粍</param>
+        /// <returns>鏋勫缓濂界殑搴撳瓨 DTO</returns>
+        public static StockDTO BuildStockDTO1(RobotSocketState state, int[] positions)
+        {
+            return new StockDTO
+            {
+                // 婧愯緭閫佺嚎缂栧彿
+                SourceLineNo = state.CurrentTask.RobotSourceAddressLineCode,
 
+                // 婧愭墭鐩樺彿
+                SourcePalletNo = state.CurrentTask.RobotSourceAddressPalletCode,
+
+                // 鐩爣鎵樼洏鍙�
+                TargetPalletNo = state.CurrentTask.RobotTargetAddressPalletCode,
+
+                // 鐩爣杈撻�佺嚎缂栧彿
+                TargetLineNo = state.CurrentTask.RobotTargetAddressLineCode,
+
+                // 宸烽亾缂栧彿(鏈哄櫒浜哄悕绉�)
+                Roadway = state.CurrentTask.RobotRoadway,
+
+                // 鐢垫睜浣嶇疆璇︽儏鍒楄〃
+                // 杩囨护鎺変綅缃负 0 鎴栬礋鏁扮殑鏃犳晥鏁版嵁
+                // 鎸変綅缃紪鍙锋帓搴�
+                // 涓烘瘡涓綅缃敓鎴愬搴旂殑搴撳瓨璇︽儏
+                Details = positions
+                    .Where(x => x > 0)  // 杩囨护鏃犳晥浣嶇疆
+                    .OrderBy(x => x)   // 鎸変綅缃帓搴�
+                    .Select((x, idx) => new StockDetailDTO
+                    {
+                        // 鏁伴噺锛氬鏋滃凡鏈変换鍔℃�绘暟锛屼娇鐢ㄤ换鍔℃�绘暟+褰撳墠浣嶇疆鏁帮紱鍚﹀垯鍙娇鐢ㄥ綋鍓嶄綅缃暟
+                        Quantity = 1,
+
+                        // 閫氶亾/浣嶇疆缂栧彿
+                        Channel = x,
+
+                        // 鐢垫睜鏉$爜锛氬彇褰撳墠鎵规鏉$爜鍒楄〃鐨勬渶鍚� N 涓紙N = 鏈夋晥浣嶇疆鏁帮級
+                        CellBarcode = !state.CurrentBatchBarcodes.IsNullOrEmpty() ? state.CurrentBatchBarcodes[^(positions.Count(p => p > 0) - idx)].ToString() ?? string.Empty : string.Empty
+                    })
+                    .ToList()
+            };
+        }
         /// <summary>
         /// 璋冪敤鎷嗙洏 API
         /// </summary>

--
Gitblit v1.9.3