heshaofeng
10 天以前 48710581fbbdd40eb3a743d91fa04e81531ba2ab
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ESSController.cs
@@ -43,15 +43,12 @@
        public async Task<IActionResult> ContainerArrivalReport([FromBody] ContainerArrivalRequest request)
        {
            //这里要判断出库的时候,料箱会到扫码处。也会请求这个接口。
            _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,
            };
            // ç”Ÿæˆè¯·æ±‚的唯一标识(基于callId + æ—¶é—´æˆ³ï¼‰
@@ -62,51 +59,68 @@
            {
                _logger.LogWarning("检测到重复请求,已忽略: CallId={CallId}", request.CallId);
                response.Code = 1;
                response.Msg = "error";
                response.Data.direction = "0";
                return Ok(response);
                response.Msg = null;
                response.Data = null;
                return Ok(response);
            }
            await _semaphore.WaitAsync();
            try
            {
            {
                if (_memoryCache.TryGetValue(requestKey, out bool _))
                {
                    _logger.LogWarning("双重检查检测到重复请求,已忽略: CallId={CallId}", request.CallId);
                    response.Code = 1;
                    response.Msg = "error";
                    response.Data.direction = "0";
                    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 result = await _taskService.RequestInboundTask(request.ContainerCode, request.SlotCode);
                var cacheOptions = new MemoryCacheEntryOptions
                {
                    AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1)
                    AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(20)
                };
                _memoryCache.Set(requestKey, true, cacheOptions);
                if (result.Status)
                response = new ApiResponse<ContainerArrivalResponseData>
                {
                    response = new ApiResponse<ContainerArrivalResponseData>
                    Code = 0,
                    Msg = "",
                    Data = null,
                };
                if (result != null && !string.IsNullOrEmpty( result.Message ) && result.Message.Contains("该托盘已生成任务"))
                {
                    response.Data = new ContainerArrivalResponseData
                    {
                        Code = 0,
                        Msg = "",
                        Data = new ContainerArrivalResponseData
                        {
                            direction = "100"
                        }
                        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 = "error";
                    response.Data.direction = "0";
                    response.Msg = null;
                    response.Data = null;
                    _logger.LogError(" ESSController  ContainerArrivalReport  Error: Message={Message}", result.Message);
                    return Ok(response);
                }
                }
            }
            catch (Exception ex)
            {
@@ -215,7 +229,7 @@
            _logger.LogInformation("任务完成: TaskCode={TaskCode}, Container={Container}, Robot={Robot}",
                request.TaskCode, request.ContainerCode, request.RobotCode);
            _taskService.TaskCompleted(request.TaskCode);
            await _taskService.TaskCompleted(request.TaskCode);
            // æ ¹æ®ä¸åŒçš„任务类型进行特殊处理
            if (request.Weight.HasValue)
            {
@@ -273,8 +287,7 @@
        /// </summary>
        private async Task HandleTaskSuspended(StatusCallbackRequest request)
        {
            _logger.LogWarning("任务挂起: TaskCode={TaskCode}, ç³»ç»Ÿä»»åŠ¡ç ={SysTaskCode}, åŽŸå› ={Message}",
                request.TaskCode, request.SysTaskCode, request.Message);
            _logger.LogWarning("任务挂起: TaskCode={TaskCode}, ç³»ç»Ÿä»»åŠ¡ç ={SysTaskCode}, åŽŸå› ={Message}",request.TaskCode, request.SysTaskCode, request.Message);
            // è¿™é‡Œæ·»åŠ æ‚¨çš„æŒ‚èµ·å¤„ç†é€»è¾‘
            await Task.CompletedTask;
@@ -285,8 +298,7 @@
        /// </summary>
        private async Task HandleTaskAllocated(StatusCallbackRequest request)
        {
            _logger.LogInformation("任务分配: TaskCode={TaskCode}, Robot={Robot}",
                request.TaskCode, request.RobotCode);
            _logger.LogInformation("任务分配: TaskCode={TaskCode}, Robot={Robot}",request.TaskCode, request.RobotCode);
            // è¿™é‡Œæ·»åŠ æ‚¨çš„ä»»åŠ¡åˆ†é…å¤„ç†é€»è¾‘
            await Task.CompletedTask;
@@ -299,8 +311,9 @@
        {
            if (request.Status == WIDESEA_DTO.Basic.TaskStatus.success)
            {
                _logger.LogInformation("取箱完成: Container={Container}, Location={Location}",
                    request.ContainerCode, request.LocationCode);
                _logger.LogInformation("取箱完成: Container={Container}, Location={Location}", request.ContainerCode, request.LocationCode);
                await _taskService.TaskStatusChange(request.TaskCode, WIDESEA_Common.TaskEnum.TaskStatusEnum.AGV_Pull);
            }
            else
            {
@@ -319,8 +332,8 @@
        {
            if (request.Status == WIDESEA_DTO.Basic.TaskStatus.success)
            {
                _logger.LogInformation("放箱完成: Container={Container}, Location={Location}",
                    request.ContainerCode, request.LocationCode);
                _logger.LogInformation("放箱完成: Container={Container}, Location={Location}", request.ContainerCode, request.LocationCode);
                await _taskService.TaskStatusChange(request.TaskCode, WIDESEA_Common.TaskEnum.TaskStatusEnum.AGV_Puting);
            }
            else
            {