From b511ce686d438b202b73fc4f3b2d1abd5cf72dc4 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期六, 29 十一月 2025 09:51:40 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ESSController.cs |  114 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 94 insertions(+), 20 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ESSController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ESSController.cs"
index 1b242d7..6cfedd4 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ESSController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ESSController.cs"
@@ -1,5 +1,6 @@
 锘縰sing Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
 using Newtonsoft.Json;
 using System.DirectoryServices.Protocols;
 using System.Threading.Tasks;
@@ -24,10 +25,13 @@
 
         public readonly ITaskService _taskService;
         private readonly ILogger<ESSController> _logger;
-        public ESSController(ITaskService taskService, ILogger<ESSController> logger)
+        private readonly IMemoryCache _memoryCache;
+        private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
+        public ESSController(ITaskService taskService, ILogger<ESSController> logger, IMemoryCache memoryCache)
         {
             _taskService = taskService;
             _logger = logger;
+            _memoryCache = memoryCache;
         }
 
         /// <summary>
@@ -38,26 +42,94 @@
         [HttpPost("ContainerArrivalReport"), AllowAnonymous]
         public async Task<IActionResult> ContainerArrivalReport([FromBody] ContainerArrivalRequest request)
         {
+            //杩欓噷瑕佸垽鏂嚭搴撶殑鏃跺�欙紝鏂欑浼氬埌鎵爜澶勩�備篃浼氳姹傝繖涓帴鍙c��
+            _logger.LogInformation(" ESSController  ContainerArrivalReport : CallId={CallId},ContainerCode={ContainerCode},SlotCode={SlotCode}", request.CallId, request.ContainerCode, request.SlotCode);
             var response = new ApiResponse<ContainerArrivalResponseData>
             {
-                Code = 0,
-                Msg = "",
-                Data = new ContainerArrivalResponseData
-                {
-                    direction = "100" // 绀轰緥鍊硷細鍙牴鎹疄闄呮儏鍐佃繑鍥炴柟鍚戞垨鍏朵粬淇℃伅
-                }
+                Code = 1,
+                Data = null,
+
             };
-            var result = await _taskService.RequestInboundTask(request.ContainerCode, request.SlotCode);
-            if (result.Status)
+
+            // 鐢熸垚璇锋眰鐨勫敮涓�鏍囪瘑锛堝熀浜巆allId + 鏃堕棿鎴筹級
+            var requestKey = $"callback_{request.CallId}-{request.ContainerCode}_{DateTime.UtcNow:yyyyMMddHH}";
+
+            // 妫�鏌ユ槸鍚﹀凡缁忓鐞嗚繃鐩稿悓鐨勮姹�
+            if (_memoryCache.TryGetValue(requestKey, out bool _))
             {
+                _logger.LogWarning("妫�娴嬪埌閲嶅璇锋眰锛屽凡蹇界暐: CallId={CallId}", request.CallId);
+                response.Code = 1;
+                response.Msg = null;
+                response.Data = null;
                 return Ok(response);
             }
-            else
+
+
+            await _semaphore.WaitAsync();
+            try
             {
-                response.Code = 1;
-                response.Msg = "error";
-                response.Data.direction = "0";
-                return Ok(response);
+                if (_memoryCache.TryGetValue(requestKey, out bool _))
+                {
+                    _logger.LogWarning("鍙岄噸妫�鏌ユ娴嬪埌閲嶅璇锋眰锛屽凡蹇界暐: CallId={CallId}", request.CallId);
+                    response.Code = 1;
+                    response.Msg = null;
+                    response.Data = null;
+                    return Ok(response);
+                }
+
+                WebResponseContent result = await _taskService.RequestInboundTask(request.ContainerCode, request.SlotCode);
+                if (result != null && !string.IsNullOrEmpty(result.Message))
+                {
+                    _logger.LogError(" ESSController  ContainerArrivalReport  RequestInboundTask: Message={Message}", result?.Message);
+                }
+             
+
+                var cacheOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(20)
+                };
+                _memoryCache.Set(requestKey, true, cacheOptions);
+                response = new ApiResponse<ContainerArrivalResponseData>
+                {
+                    Code = 0,
+                    Msg = "",
+                    Data = null,
+                };
+                if (result != null && !string.IsNullOrEmpty( result.Message ) && result.Message.Contains("璇ユ墭鐩樺凡鐢熸垚浠诲姟"))
+                {
+
+                    response.Data = new ContainerArrivalResponseData
+                    {
+                        direction = "100"
+                    };
+                    return Ok(response);
+                }
+                if (result != null && result.Status)
+                {
+                    response.Data = new ContainerArrivalResponseData
+                    {
+                        direction = "100"
+                    };
+                    return Ok(response);
+                }
+                else
+                {
+                    response.Code = 1;
+                    response.Msg = null;
+                    response.Data = null;
+                    _logger.LogError(" ESSController  ContainerArrivalReport  Error: Message={Message}", result.Message);
+
+                    return Ok(response);
+                }
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, "澶勭悊浠诲姟鐘舵�佸洖璋冩椂鍙戠敓寮傚父: CallId={CallId}", request.CallId);
+                return Ok($"澶勭悊鍥炶皟鏃跺彂鐢熷紓甯�: {ex.Message}");
+            }
+            finally
+            {
+                _semaphore.Release();
             }
 
         }
@@ -94,12 +166,6 @@
                 // 鏍规嵁浜嬩欢绫诲瀷鍜岀姸鎬佽繘琛屼笉鍚岀殑涓氬姟澶勭悊
                 switch (request.EventType)
                 {
-                    case EventType.task:
-                        await HandleTaskStatusChange(request);
-                        break;
-                    case EventType.task_allocated:
-                        await HandleTaskAllocated(request);
-                        break;
                     case EventType.tote_load:
                         await HandleToteLoad(request);
                         break;
@@ -109,6 +175,13 @@
                     case EventType.robot_reach:
                         await HandleRobotReach(request);
                         break;
+                    case EventType.task:
+                        await HandleTaskStatusChange(request);
+                        break;
+                    case EventType.task_allocated:
+                        await HandleTaskAllocated(request);
+                        break;
+
                     default:
                         _logger.LogWarning("鏈煡鐨勪簨浠剁被鍨�: {EventType}", request.EventType);
                         break;
@@ -156,6 +229,7 @@
             _logger.LogInformation("浠诲姟瀹屾垚: TaskCode={TaskCode}, Container={Container}, Robot={Robot}",
                 request.TaskCode, request.ContainerCode, request.RobotCode);
 
+            await _taskService.TaskCompleted(request.TaskCode);
             // 鏍规嵁涓嶅悓鐨勪换鍔$被鍨嬭繘琛岀壒娈婂鐞�
             if (request.Weight.HasValue)
             {

--
Gitblit v1.9.3