From 1630f0dbdae793427744548d38bcce9793aec3d6 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期一, 09 二月 2026 09:44:04 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/SuZhouGuanHong/ShanMeiXinNengYuan

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/ConfigKey.cs                |   20 ++++++
 Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockController.cs |   56 ++++++++++++++++++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs                  |   76 +++++++++++++++++++------
 3 files changed, 133 insertions(+), 19 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/ConfigKey.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/ConfigKey.cs
index 8876d97..280e96d 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/ConfigKey.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/ConfigKey.cs
@@ -19,6 +19,24 @@
 
         MES_API_Base,
         MES_API_Url,
-        MES_API_Timeout
+        MES_API_Timeout,
+
+        #region WMS鎺ュ彛
+        /// <summary>
+        /// 缁勭洏
+        /// </summary>
+        GroupPalletAsync,
+
+        /// <summary>
+        /// 鎹㈢洏
+        /// </summary>
+        ChangePalletAsync,
+
+        /// <summary>
+        /// 鎷嗙洏
+        /// </summary>
+        SplitPalletAsync
+
+        #endregion
     }
 }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
index 1030119..6a945d5 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
@@ -1,7 +1,13 @@
-锘縰sing Quartz;
+锘縰sing HslCommunication;
+using Newtonsoft.Json;
+using Quartz;
 using System.Collections.Concurrent;
 using System.Net.Sockets;
+using System.Text.Json;
+using WIDESEAWCS_Common.HttpEnum;
+using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.Http;
 using WIDESEAWCS_DTO.Stock;
 using WIDESEAWCS_DTO.TaskInfo;
 using WIDESEAWCS_ITaskInfoRepository;
@@ -124,6 +130,7 @@
         /// <returns></returns>
         private async Task<string?> _TcpSocket_MessageReceived(string message, bool isJson, TcpClient client, RobotSocketState state)
         {
+            WebResponseContent content = new WebResponseContent();
             string messageLower = message.ToLowerInvariant();
 
             if (IsSimpleCommand(messageLower, state))
@@ -147,13 +154,6 @@
 
                         if (cmd.StartsWith("pickfinished"))
                         {
-                            state.LastPickPositions = positions;
-                            state.CurrentAction = "PickFinished";
-                        }
-                        else if (cmd.StartsWith("putfinished"))
-                        {
-                            state.LastPutPositions = positions;
-                            // 鍙戦�佹暟鎹粰WMS缁勭洏/鎹㈢洏
                             StockDTO stockDTO = new StockDTO
                             {
                                 SourceLineNo = state.CurrentTask?.RobotSourceAddressLineCode,
@@ -161,17 +161,57 @@
                                 TargetPalletNo = state.CurrentTask?.RobotTargetAddressPalletCode,
                                 TargetLineNo = state.CurrentTask?.RobotTargetAddressLineCode,
                                 Details = positions
-                                    .Where(x => x > 0)
-                                    .OrderBy(x => x)
-                                    .Select((x, idx) => new StockDetailDTO
-                                    {
-                                        Quantity = state.CurrentTask?.RobotTaskTotalNum ?? 1,
-                                        Channel = x > 0 ? x : throw new ArgumentOutOfRangeException(nameof(x), "Channel must be positive"),
-                                        CellBarcode = state.CellBarcode[idx]
-                                    })
-                                    .ToList()
+                                        .Where(x => x > 0)
+                                        .OrderBy(x => x)
+                                        .Select((x, idx) => new StockDetailDTO
+                                        {
+                                            Quantity = state.CurrentTask?.RobotTaskTotalNum ?? 1,
+                                            Channel = x > 0 ? x : throw new ArgumentOutOfRangeException(nameof(x), "Channel must be positive"),
+                                            CellBarcode = state.CellBarcode[idx]
+                                        })
+                                        .ToList()
                             };
-                            state.CurrentAction = "PutFinished";
+                            state.LastPickPositions = positions;
+
+                            var result = await HttpRequestHelper.HTTPPostAsync(nameof(Category.WMS), stockDTO.ToJsonString(), state.CurrentTask?.RobotTaskType == 2 ? nameof(ConfigKey.ChangePalletAsync) : nameof(ConfigKey.SplitPalletAsync));
+                            content = JsonConvert.DeserializeObject<WebResponseContent>(result);
+
+                            if (content.Status)
+                            {
+                                state.CurrentAction = "PickFinished";
+                            }
+                        }
+                        else if (cmd.StartsWith("putfinished"))
+                        {
+                            state.LastPutPositions = positions;
+                            if (state.CurrentTask?.RobotTaskType == 1)
+                            {
+                                // 鍙戦�佹暟鎹粰WMS缁勭洏/鎹㈢洏
+                                StockDTO stockDTO = new StockDTO
+                                {
+                                    SourceLineNo = state.CurrentTask?.RobotSourceAddressLineCode,
+                                    SourcePalletNo = state.CurrentTask?.RobotSourceAddressPalletCode,
+                                    TargetPalletNo = state.CurrentTask?.RobotTargetAddressPalletCode,
+                                    TargetLineNo = state.CurrentTask?.RobotTargetAddressLineCode,
+                                    Details = positions
+                                        .Where(x => x > 0)
+                                        .OrderBy(x => x)
+                                        .Select((x, idx) => new StockDetailDTO
+                                        {
+                                            Quantity = state.CurrentTask?.RobotTaskTotalNum ?? 1,
+                                            Channel = x > 0 ? x : throw new ArgumentOutOfRangeException(nameof(x), "Channel must be positive"),
+                                            CellBarcode = state.CellBarcode[idx]
+                                        })
+                                        .ToList()
+                                };
+                                var result = await HttpRequestHelper.HTTPPostAsync(nameof(Category.WMS), stockDTO.ToJsonString(), nameof(ConfigKey.GroupPalletAsync));
+                                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
+
+                                if (content.Status)
+                                {
+                                    state.CurrentAction = "PutFinished";
+                                }
+                            }
                         }
                     }
                 }
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockController.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockController.cs
new file mode 100644
index 0000000..ee093bd
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockController.cs
@@ -0,0 +1,56 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Stock
+{
+    /// <summary>
+    /// 搴撳瓨
+    /// </summary>
+    [Route("api/Stock")]
+    [ApiController]
+    public class StockController : ApiBaseController<IStockService, Dt_StockInfo>
+    {
+        public StockController(IStockService service) : base(service)
+        {
+        }
+
+        /// <summary>
+        /// 缁勭洏
+        /// </summary>
+        /// <param name="stock"></param>
+        /// <returns></returns>
+        [HttpGet,HttpPost,Route("GroupPalletAsync"), AllowAnonymous]
+        public async Task<bool> GroupPallet([FromBody]StockDTO stock)
+        {
+            return await Service.GroupPallet(stock);
+        }
+
+        /// <summary>
+        /// 鎹㈢洏
+        /// </summary>
+        /// <param name="stock"></param>
+        /// <returns></returns>
+        [HttpGet, HttpPost, Route("ChangePalletAsync"),AllowAnonymous]
+        public async Task<bool> ChangePallet([FromBody] StockDTO stock)
+        {
+            return await Service.ChangePallet(stock);
+        }
+
+        /// <summary>
+        /// 鎷嗙洏
+        /// </summary>
+        /// <param name="stock"></param>
+        /// <returns></returns>
+        [HttpGet, HttpPost, Route("SplitPalletAsync"), AllowAnonymous]
+        public async Task<bool> SplitPallet([FromBody] StockDTO stock)
+        {
+            return await Service.SplitPallet(stock);
+        }
+    }
+}

--
Gitblit v1.9.3