肖洋
2024-11-29 663d9d2e658ab99a0c3598becd23b00b34b3e3d9
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -1,8 +1,12 @@
using log4net.Core;

using log4net.Core;
using Mapster;
using Masuit.Tools;
using Masuit.Tools.Models;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using SixLabors.Fonts.Tables.AdvancedTypographic;
using System.Diagnostics;
using WIDESEA_Core.Const;
using WIDESEA_DTO;
using WIDESEA_DTO.MOM;
using WIDESEA_DTO.WMS;
@@ -779,4 +783,83 @@
    }
    #endregion
    #region 检测高温库是否有可出库库存
    public WebResponseContent StockCheckingAsync()
    {
        WebResponseContent webResponseContent = new WebResponseContent();
        try
        {
            Task.Run(async () =>
            {
                while (true)
                {
                    Thread.Sleep(10000);
                    var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == "GWSC1");
                    var stockInfo = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
                         .Includes(x => x.LocationInfo) // 预加载LocationInfo
                         .Includes(x => x.StockInfoDetails) // 预加载StockInfoDetails
                         .Where(x => x.AreaCode == area.AreaCode && x.OutboundTime < DateTime.Now && x.IsFull == true) // 过滤条件
                         .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID) // 过滤条件
                         .OrderBy(x => x.OutboundTime) // 排序
                         .ToListAsync(); // 获取第一个元素
                    if (stockInfo.Count <= 0) continue;
                    foreach (var item in stockInfo)
                    {
                        var hasTask = BaseDal.QueryFirst(x => x.PalletCode == item.PalletCode);
                        if (hasTask != null)
                        {
                            Console.WriteLine("已存在出库任务");
                            continue;
                        }
                        string position = string.Empty;
                        if (item.LocationInfo.RoadwayNo == "GWSC1")
                            position = "1059";
                        else
                            position = "1065";
                        var task = CreateTask(item, position, (int)TaskOutboundTypeEnum.Outbound);
                        task.NextAddress = "002-000-002";
                        // 创建任务DTO
                        WMSTaskDTO taskDTO = CreateTaskDTO(task);
                        var configs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                        var wmsBase = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.WCSIPAddress)?.ConfigValue;
                        var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.ReceiveTask)?.ConfigValue;
                        if (wmsBase == null || ipAddress == null)
                        {
                            throw new InvalidOperationException("WMS IP 未配置");
                        }
                        var wmsIpAddress = wmsBase + ipAddress;
                        var result = HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result;
                        var content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                        if (content.Status)
                        {
                            await BaseDal.AddDataAsync(task);
                            // 更新库存位置状态为不可用
                            item.LocationInfo.LocationStatus = (int)LocationEnum.InStockDisable;
                            await _locationRepository.UpdateDataAsync(item.LocationInfo);
                        }
                    }
                }
            });
            return webResponseContent.OK();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
            return webResponseContent.Error(ex.Message);
        }
    }
    #endregion
}