刘磊
2024-12-04 e3b6c01acf7228c009d861c1efea4cbcc7926abe
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;
@@ -14,7 +18,7 @@
using WIDESEA_StoragIntegrationServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEA_StorageOutTaskServices;
namespace WIDESEA_StorageTaskServices;
public partial class Dt_TaskService : ServiceBase<Dt_Task, IDt_TaskRepository>, IDt_TaskService
{
@@ -387,24 +391,24 @@
            }
            //创建一个TrayCellsStatusDto对象,并赋值
           TrayCellsStatusDto trayCells = new TrayCellsStatusDto()
           {
               Software = "WMS",
               TrayBarcode = input.PalletCode,
               //EquipmentCode = "EQ_CWJZ01"
               EquipmentCode = input.EquiCodeMOM
           };
            //TrayCellsStatusDto trayCells = new TrayCellsStatusDto()
            //{
            //    Software = "WMS",
            //    TrayBarcode = input.PalletCode,
            //    //EquipmentCode = "EQ_CWJZ01"
            //    EquipmentCode = input.EquiCodeMOM
            //};
            // 调用GetTrayCellStatusAsync方法,获取整盘电芯
            content = await GetTrayCellStatusAsync(trayCells);
            //content = await GetTrayCellStatusAsync(trayCells);
            // 如果状态为false,则返回content
            if (!content.Status) return content;
            //if (!content.Status) return content;
            // 添加组盘信息
            // 将content.Data转换为ResultTrayCellsStatus对象
            var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
            if (result.SerialNos.Count <= 0)
                return content.Error(result.MOMMessage);
            //var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
            //if (result.SerialNos.Count <= 0)
            //    return content.Error(result.MOMMessage);
            //Console.WriteLine(result);
            //// TODO 获取本地料框属性与整盘电芯属性获取的值进行对比,如果一致则继续,否则返回错误信息
@@ -413,8 +417,8 @@
            ////    return content.Error("料框属性不存在");
            //// 调用CreateBoxingInfo方法,创建组盘信息
            var boxing =  CreateBoxingInfo(result, input.PalletCode);
            if (boxing == null) return content.Error("组盘失败");
            //var boxing = CreateBoxingInfo(result, input.PalletCode);
            //if (boxing == null) return content.Error("组盘失败");
            //// 调用GetProcessApplyAsync方法,获取工艺路线
            //ProcessApplyDto process = await GetProcessApplyAsync(input, result);
@@ -432,10 +436,10 @@
            ////var processResponse = await GetProcessResponseAsync(process, input.Position);
            // 调用CreateNewTask方法,创建新任务
            content = await CreateNewTask(input);
            if (content.Status)
            {
                var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing);
            }
            //if (content.Status)
            //{
            //    var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing);
            //}
        }
        catch (Exception err)
        {
@@ -506,6 +510,8 @@
                TaskType = task.TaskType,
            };
            content.OK(data: taskDTO);
        }
        else
            content.Error("添加任务失败");
@@ -633,6 +639,7 @@
            ////// 调用GetProcessResponseAsync方法,获取工艺响应
            ////var processResponse = await GetProcessResponseAsync(process, input.Position);
            var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing);
        }
        var task = new Dt_Task
@@ -779,4 +786,90 @@
    }
    #endregion
    #region 检测高温库是否有可出库库存
    public WebResponseContent StockCheckingAsync()
    {
        WebResponseContent webResponseContent = new WebResponseContent();
        try
        {
            Task.Run(async () =>
            {
                while (true)
                {
                    try
                    {
                        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);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            });
            return webResponseContent.OK();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
            return webResponseContent.Error(ex.Message);
        }
    }
    #endregion
}