From bbc4a3a07baf111c9074ceee7728158fb3eedf1a Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期二, 25 十一月 2025 05:33:35 +0800
Subject: [PATCH] 提交
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ESSController.cs | 102 +++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 82 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..4a26da8 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,82 @@
[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
+
};
- 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);
+
+ var cacheOptions = new MemoryCacheEntryOptions
+ {
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(20)
+ };
+ _memoryCache.Set(requestKey, true, cacheOptions);
+ response = new ApiResponse<ContainerArrivalResponseData>
+ {
+ Code = 0,
+ Msg = "",
+ Data = new ContainerArrivalResponseData
+ {
+ direction = "100"
+ }
+ };
+ if (result != null && !string.IsNullOrEmpty( result.Message ) && result.Message.Contains("璇ユ墭鐩樺凡鐢熸垚浠诲姟"))
+ {
+ return Ok(response);
+ }
+ if (result != null && result.Status)
+ {
+ 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 +154,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 +163,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 +217,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