huangxiaoqiang
4 天以前 74d731cd8ac6bd995fbda485ee3371300af29a74
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/AGVController.cs
@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Mvc;
using NewLife.Net;
using System.Threading.Tasks;
using WIDESEA_DTO.AGV;
using WIDESEA_IStoragIntegrationServices;
using WIDESEA_StorageSocketServices;
@@ -15,6 +16,7 @@
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        private readonly IAGVService _service;
        public static bool Islock = true; // é”ï¼Œé˜²æ­¢é‡å¤è¯·æ±‚
        public AGVController(IAGVService service, IHttpContextAccessor httpContextAccessor)
        {
@@ -24,8 +26,7 @@
        /// <summary>
        /// è¯·æ±‚入库任务
        /// </summary>
        /// <param name="TaskNum"></param>
        /// <param name="SourceAddress"></param>
        /// <param name="aGVDTO"></param>
        /// <returns></returns>
        [HttpGet, HttpPost, Route("RequestInTask"), AllowAnonymous]
        public WebResponseContent RequestInTask([FromBody] AGVDTO aGVDTO)
@@ -47,8 +48,7 @@
        /// <summary>
        /// AGV任务开始或结束
        /// </summary>
        /// <param name="Status"></param>
        /// <param name="TaskNum"></param>
        /// <param name="aGVDTO"></param>
        /// <returns></returns>
        [HttpGet, HttpPost, Route("AGVStartOrEndJob"), AllowAnonymous]
        public WebResponseContent AGVStartOrEndJob([FromBody] AGVDTO aGVDTO)
@@ -59,13 +59,49 @@
        /// <summary>
        /// è®¾å¤‡çŠ¶æ€ä¸ŠæŠ¥
        /// </summary>
        /// <param name="Message"></param>
        /// <param name="PallteCode"></param>
        /// <param name="aGVDTO"></param>
        /// <returns></returns>
        [HttpGet, HttpPost, Route("DeviceErrorResponse"), AllowAnonymous]
        public WebResponseContent DeviceErrorResponse([FromBody] AGVDTO aGVDTO)
        {
            return _service.DeviceErrorResponse(aGVDTO);
        }
        /// <summary>
        /// è®¾å¤‡å¼‚常上报
        /// </summary>
        /// <param name="DTO"></param>
        /// <returns></returns>
        [HttpGet, HttpPost, Route("DeviceWarning"), AllowAnonymous]
        [TypeFilter(typeof(ThrottleFilter), Arguments = new object[] { 10 })] // 10秒节流
        public async Task<WebResponseContent> DeviceWarning([FromBody] AGVDTO DTO)
        {
            WebResponseContent responseContent = new WebResponseContent();
            try
            {
                // ä½¿ç”¨çœŸæ­£çš„锁结构
                if (Islock)
                {
                    Islock = false;
                    try
                    {
                        return await Task.Run(()=> _service.DeviceWarning(DTO));
                    }
                    finally
                    {
                        Islock = true;
                    }
                }
                else
                {
                    return responseContent.Error("请求过于频繁,请稍后再试");
                }
            }
            catch (Exception ex)
            {
                // ä¸éœ€è¦åœ¨è¿™é‡Œé‡Šæ”¾é”ï¼Œå› ä¸ºTryEnter成功后会在finally中释放
                return responseContent.Error($"设备异常上报失败: {ex.Message}");
            }
        }
    }
}