xxyy
2025-02-28 d5dd90abc1548d52bf16ad0da53e1a78b02a3217
添加请求跟踪功能和设备过滤条件

在 `Dt_TaskService` 类中引入静态字典 `requestTracker`,用于追踪请求的调用次数和最后请求时间。新增异步方法 `RequestOutTaskToBZAsync`,实现请求次数和时间限制检查,超出限制时抛出异常。同时,更新请求跟踪信息,并在设备查询中添加状态过滤条件,仅返回状态为 "1" 的设备。
已修改1个文件
25 ■■■■■ 文件已修改
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -975,6 +975,9 @@
    #region  常温3出库至包装
    // 用于追踪每个请求的调用次数和最后请求时间。
    private static readonly Dictionary<string, (int Count, DateTime LastRequestTime)> requestTracker = new();
    /// <summary>
    /// 常温3出库至包装
    /// </summary>
@@ -985,6 +988,26 @@
        WebResponseContent content = new WebResponseContent();
        try
        {
            string requestKey = JsonConvert.SerializeObject(json);
            // 检查请求次数和时间限制
            if (requestTracker.TryGetValue(requestKey, out var requestInfo))
            {
                if (requestInfo.Count >= 9 && DateTime.Now < requestInfo.LastRequestTime.AddMinutes(5))
                {
                    // 如果请求次数超过限制且未超过10分钟,抛出异常
                    throw new InvalidOperationException("请求次数已达到限制,请稍后再试。");
                }
            }
            // 更新请求跟踪信息
            if (requestTracker.ContainsKey(requestKey))
            {
                requestTracker[requestKey] = (requestInfo.Count + 1, DateTime.Now);
            }
            else
            {
                requestTracker[requestKey] = (1, DateTime.Now);
            }
            //LogFactory.GetLog("常温3出库至包装").Info(true, $"常温3出库至包装传入参数:" + JsonConvert.SerializeObject(json, Formatting.Indented));
            Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == json.Position && x.stationType == 12 && x.stationArea == "Call");
@@ -992,7 +1015,7 @@
            var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
                .Where(x => x.DeviceStatus == "1")
                .Where(x => x.DeviceCode.Contains("CWSC"))
                .Where(x => x.DeviceCode.Contains("CWSC")) // 过滤条件
                .ToList();
            var deviceCode = devices.Select(x => x.DeviceCode).ToList();