1
yangpeixing
昨天 aa4aa67abfdf69e30d5076451716e5aba11d5ec0
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -84,6 +84,20 @@
using static WIDESEA_Common.NewHouseInboundPassBack.Parame.Syncretism;
using static WIDESEA_ITaskInfoService.ITaskService;
using Parameter = WIDESEA_Common.Parameter;
using WIDESEA_DTO.ERP;
using WIDESEA_OutboundRepository;
using System.ComponentModel.DataAnnotations;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using Spire.Pdf;
using WIDESEA_InboundRepository;
using System.Drawing.Printing;
using System;
using WIDESEA_Common.Log;
using static WIDESEA_Common.HouseInboundPassBack.data.data1;
using System.Diagnostics;
namespace WIDESEA_TaskInfoService
{
@@ -157,6 +171,7 @@
        public string ReceiveWMSTaskAllocatein = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskAllocatein"];
        public string ReceiveERPTaskout = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveERPTaskout"];
        public string InMaterialWarehousingCallback = WIDESEA_Core.Helper.AppSettings.Configuration["InMaterialWarehousingCallback"];
        public string LEDAPI = WIDESEA_Core.Helper.AppSettings.Configuration["LEDAPI"];
        /// <summary>
@@ -603,7 +618,7 @@
                                return WebResponseContent.Instance.Error($"未找到对应的入库单明细");
                            }
                            // 更新入库单明细状态
                            // 更新入库单明细状态
                            foreach (var inboundOrderDetail in inboundOrderDetails)
                            {
                                // 检查该明细是否已全部入库
@@ -887,7 +902,7 @@
                                         .ToList();
                                    Dt_InboundOrder? dt_InboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderNo == inboundOrder.OrderNo).Includes(x => x.Details).First();
                                    if (StockInfos.Count  == 0) throw new Exception("未找到库存信息");
                                    if (StockInfos.Count == 0) throw new Exception("未找到库存信息");
                                    var houseSyncretism = new NewHouseInboundPassBack
                                    {
@@ -1417,7 +1432,7 @@
            _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(
                stockInfo, stockInfo.Details,
                stockInfo.Details.Sum(x => x.StockQuantity),
                0,
                stockInfo.Details.Sum(x => x.StockQuantity),
                StockChangeType.Inbound, task.TaskNum);
        }
@@ -1769,7 +1784,7 @@
                                       .Where(x => x.OrderId == outboundOrder.Id)
                                       .ToList();
                            }
                            if ((outboundOrderDetails == null && outboundOrderDetails1 == null) || (outboundOrderDetails.Count == 0  && outboundOrderDetails1.Count == 0))
                            if ((outboundOrderDetails == null && outboundOrderDetails1 == null) || (outboundOrderDetails.Count == 0 && outboundOrderDetails1.Count == 0))
                            {
                                throw new Exception($"未找到托盘 {stockInfo.PalletCode} 在货位 {stockInfo.LocationCode} 上的出库单明细");
                            }
@@ -1938,7 +1953,7 @@
                                        }
                                        // 调拨出库
                                        if (outboundOrder.OrderType == 4)
                                        if (outboundOrder.OrderType == 3)
                                        {
                                            var allocate = new InventoryAllocate
                                            {
@@ -2170,7 +2185,7 @@
                                        }
                                        // 调拨出库
                                        if (outboundOrder.OrderType == 4)
                                        if (outboundOrder.OrderType == 3)
                                        {
                                            var allocate = new InventoryAllocate
                                            {
@@ -2261,10 +2276,14 @@
                        {
                            Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
                           .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == detail.BatchNo).First();
                            outboundOrderDetails.Add(outboundOrderDetail);
                            if (outboundOrderDetail != null)
                            {
                                outboundOrderDetails.Add(outboundOrderDetail);
                            }
                        }
                        for (var i = 0; i<outboundOrderDetails.Count; i++)
                        for (var i = 0; i < outboundOrderDetails.Count; i++)
                        {
                            if (outboundOrderDetails[i].LocationName != null && outboundOrderDetails[i].LocationName != "")
                            {
@@ -2452,7 +2471,7 @@
                // 更新库存状态 回库单
                if (locationInfo.RoadwayNo.Contains("DW") || locationInfo.RoadwayNo.Contains("YS"))
                {
                    AddDWANDYSRetrueOrder(stockInfo, inboundOrder);
                    AddDWANDYSRetrueOrder(task, stockInfo, inboundOrder);
                }
                // 区分单据数据来源更新货位状态
@@ -2469,6 +2488,7 @@
                // 添加状态变更记录
                AddStatusChangeRecord(task, stockInfo, locationInfo);
                // 根据订单类型处理不同逻辑
@@ -2545,12 +2565,11 @@
        private void DWANDYSUpdateOutboundOrderDetails(Dt_StockInfo stockInfo, Dt_OutboundOrder inboundOrder, ref List<Dt_OutboundOrderDetail> inboundOrderDetails)
        {
            List<Dt_OutboundOrderDetail> newOutboundOrderDetails = inboundOrderDetails;
            int overCount = inboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
            int CompeletedNum = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
            foreach (var newOutboundOrderDetail in newOutboundOrderDetails)
            {
                string BatchNo = newOutboundOrderDetail.BatchNo;
                //inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == stockInfo.Details.FirstOrDefault()?.BatchNo&&x.LPNNo==stockInfo.PalletCode);
                foreach (var item in stockInfo.Details)
                {
                    if (newOutboundOrderDetail == null) continue;
@@ -2564,16 +2583,17 @@
                        if (newOutboundOrderDetail.OverOutQuantity == newOutboundOrderDetail.OrderQuantity)
                        {
                            newOutboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                            overCount++;
                            CompeletedNum++;
                        }
                        else if (newOutboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
                        {
                            newOutboundOrderDetail.OrderDetailStatus = OutboundStatusEnum.出库中.ObjToInt();
                            inboundOrder.OrderStatus = OutboundStatusEnum.出库中.ObjToInt();
                        }
                    }
                }
                if (inboundOrder.Details.Count() == overCount)
                if (inboundOrder.Details.Count == CompeletedNum)
                {
                    inboundOrder.OrderStatus = OutboundStatusEnum.出库完成.ObjToInt();
                }
@@ -2609,6 +2629,12 @@
                StockChangeType.Outbound.ObjToInt(),
                stockInfo.Details.FirstOrDefault()?.OrderNo ?? "",
                task.TaskNum);
            _recordService.StockQuantityChangeRecordService.NEWAddStockChangeRecord(
                stockInfo, stockInfo.Details,
                stockInfo.Details.Sum(x => x.StockQuantity),
                stockInfo.Details.Sum(x => x.OutboundQuantity),
                StockChangeType.Outbound, task.TaskNum);
        }
        private void ProcessNormalOutbound(Dt_Task task, Dt_StockInfo stockInfo,
@@ -2908,7 +2934,7 @@
        }
        //低温、药水回库单
        private void AddDWANDYSRetrueOrder(Dt_StockInfo stockInfo, Dt_OutboundOrder outboundOrder)
        private void AddDWANDYSRetrueOrder(Dt_Task task, Dt_StockInfo stockInfo, Dt_OutboundOrder outboundOrder)
        {
            List<Dt_StockInfoDetail> stockInfoDetails = _stockService.StockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
@@ -2937,6 +2963,22 @@
                }
                else
                {
                    var postData = new
                    {
                        DeviceCode = task.NextAddress,    // 屏幕编号
                        MaterialCode = outboundOrder.Details.FirstOrDefault()?.MaterielCode,//物料类型
                        BackNum = stockInfoDetail.StockQuantity - stockInfoDetail.OutboundQuantity,//回库数
                        SendNum = outboundOrder.Details.FirstOrDefault()?.OrderQuantity//发料数
                    };
                    string json = Newtonsoft.Json.JsonConvert.SerializeObject(postData);
                    using (var client = new HttpClient())
                    {
                        var content = new StringContent(json, Encoding.UTF8, "application/json");
                        var response = client.PostAsync(LEDAPI, content).Result;
                        string result = response.Content.ReadAsStringAsync().Result;
                    }
                    bool allowCompeted = stockInfo.Details.All(x => x.StockQuantity == x.OutboundQuantity);
                    if (allowCompeted)
                    {
@@ -3496,65 +3538,171 @@
            }
        }
        public virtual void PrintTestDirect(string fullPath)
        public void PrintTestDirect(string fullPath)
        {
            const int maxRetryCount = 3;
            const int retryDelayMs = 1000;
            if (!File.Exists(fullPath))
            {
                Console.WriteLine($"打印失败:文件不存在 {fullPath}");
                Console.WriteLine($"✗ 打印失败:文件不存在 {fullPath}");
                return;
            }
            // 获取配置的打印机名称
            string printerName = AppSettings.app("PrinterName");
            // 获取打印机名称配置
            string printerName = AppSettings.app("PrinterName")?.Trim();
            if (string.IsNullOrEmpty(printerName))
            {
                Console.WriteLine("✗ 打印失败:未配置打印机名称");
                return;
                // 如果没有配置,使用系统默认打印机
                printerName = GetDefaultPrinterUbuntu();
            }
            // 直接使用配置的打印机名称,不进行任何转换
            PrintUsingConfiguredPrinter(fullPath, printerName.Trim());
            PrintUsingUbuntuPrinter(fullPath, printerName);
        }
        /// <summary>
        /// 获取 Ubuntu 默认打印机
        /// </summary>
        private string GetDefaultPrinterUbuntu()
        {
            try
            {
                ProcessStartInfo psi = new ProcessStartInfo
                {
                    FileName = "lpstat",
                    Arguments = "-d",
                    UseShellExecute = false,
                    CreateNoWindow = true,
                    RedirectStandardOutput = true
                };
                using (Process process = new Process { StartInfo = psi })
                {
                    process.Start();
                    string output = process.StandardOutput.ReadToEnd();
                    process.WaitForExit();
                    // 解析默认打印机名称,例如: "system default destination: LenovoPrinter"
                    if (output.Contains(":"))
                    {
                        return output.Split(':')[1].Trim();
                    }
                    return "LenovoPrinter"; // 默认回退
                }
            }
            catch
            {
                return "LenovoPrinter";
            }
        }
        /// <summary>
        /// Ubuntu 打印实现
        /// </summary>
        private void PrintUsingUbuntuPrinter(string filePath, string printerName)
        {
            try
            {
                PrintWithLpr(filePath, printerName);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"✗ 打印失败: {ex.Message}");
                throw;
            }
        }
        /// <summary>
        /// 使用 lpr 命令打印
        /// </summary>
        private void PrintWithLpr(string filePath, string printerName)
        {
            Console.WriteLine($"📄 正在打印到 {printerName}: {Path.GetFileName(filePath)}");
            // 使用 lp 命令,添加 -o raw 选项
            string command = $"lp -d {printerName} -o raw \"{filePath}\"";
            ExecuteShellCommand(command);
        }
        /// <summary>
        /// 执行 Shell 命令
        /// </summary>
        private void ExecuteShellCommand(string command)
        {
            ProcessStartInfo psi = new ProcessStartInfo
            {
                FileName = "/bin/bash",
                Arguments = $"-c \"{command.Replace("\"", "\\\"")}\"",
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardOutput = true,
                RedirectStandardError = true
            };
            using (Process process = new Process { StartInfo = psi })
            {
                process.Start();
                string output = process.StandardOutput.ReadToEnd();
                string error = process.StandardError.ReadToEnd();
                process.WaitForExit();
                if (process.ExitCode == 0)
                {
                    Console.WriteLine($"✅ 打印任务提交成功");
                    if (!string.IsNullOrEmpty(output))
                        Console.WriteLine($"输出: {output}");
                }
                else
                {
                    throw new InvalidOperationException($"命令执行失败: {error}");
                }
            }
        }
        /// <summary>
        /// 只使用配置的打印机进行打印
        /// </summary>
        /// <summary>
        /// Ubuntu 打印方法 - 使用 lpr 命令
        /// </summary>
        private void PrintUsingConfiguredPrinter(string filePath, string printerName)
        {
            try
            {
                // 1. 首先验证打印机是否存在
                if (!IsPrinterInstalled(printerName))
                // 1. 检查打印机是否在线
                if (!IsPrinterAvailableUbuntu(printerName))
                {
                    Console.WriteLine($"✗ 打印机 '{printerName}' 未安装或不存在");
                    Console.WriteLine("\n系统已安装的打印机列表:");
                    foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
                    {
                        Console.WriteLine($"  - {printer}");
                    }
                    throw new InvalidOperationException($"打印机 '{printerName}' 未安装");
                    throw new InvalidOperationException($"打印机 '{printerName}' 不可用或未找到");
                }
                // 3. 使用 Spire.PDF 打印
                using (Spire.Pdf.PdfDocument pdf = new Spire.Pdf.PdfDocument())
                Console.WriteLine($"✓ 使用打印机: {printerName}");
                Console.WriteLine($"✓ 正在打印: {Path.GetFileName(filePath)}");
                // 2. 使用 lpr 命令打印
                ProcessStartInfo psi = new ProcessStartInfo
                {
                    // 加载文件
                    pdf.LoadFromFile(filePath);
                    FileName = "lpr",
                    Arguments = $"-P {printerName} \"{filePath}\"",
                    UseShellExecute = false,
                    CreateNoWindow = true,
                    RedirectStandardOutput = true,
                    RedirectStandardError = true
                };
                    // 设置打印机名称(只使用配置的名称)
                    pdf.PrintSettings.PrinterName = printerName;
                using (Process process = new Process { StartInfo = psi })
                {
                    process.Start();
                    string output = process.StandardOutput.ReadToEnd();
                    string error = process.StandardError.ReadToEnd();
                    process.WaitForExit();
                    Console.WriteLine($"✓ 使用配置的打印机: {printerName}");
                    Console.WriteLine($"✓ 正在打印: {Path.GetFileName(filePath)}");
                    // 直接打印
                    pdf.Print();
                    Console.WriteLine("✓ 打印任务已提交");
                    if (process.ExitCode == 0)
                    {
                        Console.WriteLine($"✓ 打印任务已提交到 {printerName}");
                    }
                    else
                    {
                        throw new InvalidOperationException($"打印失败: {error}");
                    }
                }
            }
            catch (Exception ex)
@@ -3565,155 +3713,29 @@
        }
        /// <summary>
        /// 从配置的友好名称获取实际的打印机名称
        /// Ubuntu 检查打印机可用性
        /// </summary>
        private string GetActualPrinterName(string displayName)
        {
            if (string.IsNullOrEmpty(displayName))
                return string.Empty;
            // 如果配置的是 "192.168.99.3 上的 Lenovo M7605D"
            if (displayName.Contains("192.168.99.3 上的 Lenovo M7605D"))
            {
                // 在系统中查找实际的打印机名称
                return FindActualPrinterForIP("192.168.99.3");
            }
            // 如果直接配置的是IP地址
            if (displayName.Contains("192.168.99.3"))
            {
                return FindActualPrinterForIP("192.168.99.3");
            }
            // 如果已经是实际的打印机名称,直接返回
            if (IsPrinterInstalled(displayName))
            {
                return displayName;
            }
            // 默认返回原名称
            return displayName;
        }
        /// <summary>
        /// 查找IP地址对应的实际打印机名称
        /// </summary>
        private string FindActualPrinterForIP(string ipAddress)
        private bool IsPrinterAvailableUbuntu(string printerName)
        {
            try
            {
                // 获取所有打印机
                var allPrinters = new List<string>();
                foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
                ProcessStartInfo psi = new ProcessStartInfo
                {
                    allPrinters.Add(printer);
                }
                Console.WriteLine($"查找IP地址 {ipAddress} 对应的打印机...");
                Console.WriteLine("系统打印机列表:");
                foreach (var printer in allPrinters)
                {
                    Console.WriteLine($"  - {printer}");
                }
                // 优先查找包含IP地址的打印机
                foreach (string printer in allPrinters)
                {
                    if (printer.Contains(ipAddress))
                    {
                        Console.WriteLine($"✓ 找到包含IP的打印机: {printer}");
                        return printer;
                    }
                }
                // 查找联想打印机
                foreach (string printer in allPrinters)
                {
                    if (printer.Contains("M7605D", StringComparison.OrdinalIgnoreCase))
                    {
                        Console.WriteLine($"✓ 找到联想打印机: {printer}");
                        return printer;
                    }
                }
                // 返回第一个可用的打印机
                if (allPrinters.Any())
                {
                    Console.WriteLine($"⚠️ 未找到精确匹配,使用第一个打印机: {allPrinters.First()}");
                    return allPrinters.First();
                }
                return string.Empty;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"查找打印机失败: {ex.Message}");
                return string.Empty;
            }
        }
        /// <summary>
        /// 检查打印机是否已安装
        /// </summary>
        private bool IsPrinterInstalled(string printerName)
        {
            try
            {
                foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
                {
                    if (printer.Equals(printerName, StringComparison.OrdinalIgnoreCase))
                    {
                        return true;
                    }
                }
                return false;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// 使用原始打印命令
        /// </summary>
        private void PrintUsingRawCommand(string filePath, string printerName)
        {
            try
            {
                var processStartInfo = new System.Diagnostics.ProcessStartInfo
                {
                    FileName = filePath,
                    Verb = "print",  // 使用"print"动词
                    UseShellExecute = true,  // 关键:启用Shell执行
                    FileName = "lpstat",
                    Arguments = $"-p {printerName}",
                    UseShellExecute = false,
                    CreateNoWindow = true,
                    WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden
                    RedirectStandardOutput = true
                };
                // 设置打印机(可选,系统通常会使用默认打印机)
                // processStartInfo.Arguments = $"/t \"{filePath}\" \"{printerName}\"";
                System.Diagnostics.Process.Start(processStartInfo);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"打印失败: {ex.Message}");
                // 可以尝试其他方法
                //TryAlternativePrintMethod(filePath, printerName);
            }
        }
        /// <summary>
        /// 检查文件是否可访问
        /// </summary>
        private bool IsFileAccessible(string filePath)
        {
            try
            {
                using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                using (Process process = new Process { StartInfo = psi })
                {
                    return fs.Length > 0;
                    process.Start();
                    string output = process.StandardOutput.ReadToEnd();
                    process.WaitForExit();
                    return output.Contains($"{printerName} is idle") ||
                           output.Contains($"{printerName} is ready");
                }
            }
            catch
@@ -3721,25 +3743,6 @@
                return false;
            }
        }
        /// <summary>
        /// 尝试强制垃圾回收,释放可能存在的文件句柄
        /// </summary>
        private void TryForceGarbageCollection()
        {
            try
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
                Console.WriteLine("已执行垃圾回收");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"垃圾回收失败: {ex.Message}");
            }
        }
        /// <summary>
        /// 盘点出库完成
        /// </summary>
@@ -3900,520 +3903,11 @@
    #endregion
    #region
    //public WebResponseContent InboundTaskCompleted(int taskNum)
    //{
    //    try
    //    {
    //        Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
    //        if (task == null)
    //        {
    //            return WebResponseContent.Instance.Error($"未找到该任务");
    //        }
    //        if (task.TaskType != TaskTypeEnum.Inbound.ObjToInt())
    //        {
    //            return WebResponseContent.Instance.Error($"任务类型错误");
    //        }
    //        Dt_StockInfo dt_StockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.Details).First();
    //        if (dt_StockInfo == null)
    //        {
    //            return WebResponseContent.Instance.Error($"未找到托盘对应的组盘信息");
    //        }
    //        if (!string.IsNullOrEmpty(dt_StockInfo.LocationCode))
    //        {
    //            return WebResponseContent.Instance.Error($"该托盘已绑定货位");
    //        }
    //        if (dt_StockInfo.Details == null || dt_StockInfo.Details.Count == 0)
    //        {
    //            return WebResponseContent.Instance.Error($"未找到该托盘库存明细信息");
    //        }
    //        Dt_LocationInfo dt_LocationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
    //        if (dt_LocationInfo == null)
    //        {
    //            return WebResponseContent.Instance.Error($"未找到目标货位信息");
    //        }
    //        if (dt_LocationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
    //        {
    //            return WebResponseContent.Instance.Error($"货位状态不正确");
    //        }
    //        int lastStatus = dt_LocationInfo.LocationStatus;
    //        dt_LocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
    //        Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
    //        dt_StockInfo.LocationCode = dt_LocationInfo.LocationCode;
    //        Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == dt_StockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
    //        Dt_InboundOrderDetail? inboundOrderDetail = null;
    //        //判断单据类型是入库还是调拨入库。。。入库
    //        if (inboundOrder.OrderType == 0 && inboundOrder != null && dt_StockInfo.StockStatus == StockStatusEmun.入库确认.ObjToInt())
    //        {
    //            #region //判断入库单据明细只有最后一条完成时删除入库单
    //            //查询原完成的入库明细数量
    //            int overCount = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
    //            //明细id查询
    //            inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.LinId == dt_StockInfo.Details.FirstOrDefault()?.LinId);
    //            foreach (var item in dt_StockInfo.Details)
    //            {
    //                if (inboundOrderDetail == null)
    //                {
    //                    continue;
    //                }
    //                inboundOrderDetail.OverInQuantity += item.StockQuantity;
    //                if (inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity)
    //                {
    //                    inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
    //                    overCount += 1;
    //                }
    //                else if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
    //                {
    //                    inboundOrderDetail.OrderDetailStatus = InboundStatusEnum.入库中.ObjToInt();
    //                }
    //            }
    //            dt_StockInfo.Details.ForEach(x =>
    //            {
    //                x.Status = StockStatusEmun.入库完成.ObjToInt();
    //            });
    //            _unitOfWorkManage.BeginTran();
    //            task.TaskStatus = InTaskStatusEnum.InFinish.ObjToInt();
    //            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateType.人工完成 : OperateType.自动完成);
    //            _basicService.LocationInfoService.Repository.UpdateData(dt_LocationInfo);
    //            _stockRepository.StockInfoRepository.UpdateData(dt_StockInfo);
    //            _stockRepository.StockInfoDetailRepository.UpdateData(dt_StockInfo.Details);
    //            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(dt_LocationInfo, lastStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum);
    //            _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(dt_StockInfo, dt_StockInfo.Details, dt_StockInfo.Details.Sum(x => x.StockQuantity), dt_StockInfo.Details.Sum(x => x.StockQuantity), StockChangeType.Inbound, task.TaskNum);
    //            if (inboundOrder != null)
    //            {
    //                _inboundService.InbounOrderService.UpdateData(inboundOrder);
    //                _inboundService.InboundOrderDetailService.UpdateData(inboundOrderDetail);
    //            }
    //            _unitOfWorkManage.CommitTran();
    //            if (inboundOrder.Details.Count == 1)
    //            {
    //                var stockInfoDetail = dt_StockInfo.Details.FirstOrDefault();
    //                #region//入库信息返回上位WMS。。立库入库数量回传
    //                HouseInboundPassBack houseInboundPassBack = new HouseInboundPassBack();
    //                houseInboundPassBack.ApiType = "AsnController";
    //                houseInboundPassBack.Method = "AsrsGroudingAsn";
    //                data data = new data();
    //                data.data1 data1 = new data.data1();
    //                data1.AsnNo = task.OrderNo;
    //                data1.InWarehouse = task.Roadway;
    //                data1.TransactionCode = inboundOrder.TransactionCode;
    //                data1.InoutType = inboundOrder.OrderType;
    //                data1.OrderType = inboundOrder.InoutType;
    //                data.data1.Inbound inbound = new data.data1.Inbound
    //                {
    //                    LinId = stockInfoDetail.LinId,
    //                    MaterielCode = stockInfoDetail.MaterielCode,
    //                    OrderQuantity = stockInfoDetail.StockQuantity,
    //                    BatchNo = stockInfoDetail.BatchNo,
    //                    FinishQty = stockInfoDetail.StockQuantity,
    //                    LocationName = task.TargetAddress
    //                };
    //                data.Value.Add(data1);
    //                data1.DetailList.Add(inbound);
    //                houseInboundPassBack.Parameters.Add(data);
    //                Authentication authentication = new Authentication()
    //                {
    //                    ApiType = "AuthenticationController",
    //                    Parameters = new List<Parameter>
    //        {
    //             new Parameter { Value = "LKAdmin"},
    //             new Parameter { Value = "LKAdmin"},
    //        },
    //                    Method = "Login",
    //                };
    //                var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
    //                var Ticket = responses1.Context["Ticket"].ToString();
    //                var InvOrgId = responses1.Context["InvOrgId"].ToString();
    //                if (Ticket != null)
    //                {
    //                    houseInboundPassBack.Context = new Dictionary<string, string>();
    //                    houseInboundPassBack.Context.Add("Ticket", Ticket);
    //                    houseInboundPassBack.Context.Add("InvOrgId", InvOrgId);
    //                    var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskin, houseInboundPassBack, "立库入库数量回传WMS");
    //                }
    //                #endregion
    //            }
    //        }
    //        else
    //        {
    //            #region //判断调拨入库单据明细只有最后一条完成时删除入库单并一次返回入库明细信息
    //            if (inboundOrder.Details.Count == 1)
    //            {
    //                List<Dt_StockInfo> StockInfo = _stockService.StockInfoService.Repository.QueryData(x => x.BatchNo == inboundOrderDetail.BatchNo);
    //                Dt_InboundOrder_Hty inboundOrder_Hty = new Dt_InboundOrder_Hty
    //                {
    //                    OrderStatus = inboundOrder.OrderStatus,
    //                    CreateType = inboundOrder.CreateType,
    //                    //SourceId = oldOutboundOrder.SourceId,
    //                    UpperOrderNo = inboundOrder.UpperOrderNo,
    //                    OrderNo = inboundOrder.OrderNo,
    //                    //OutWareHouse = inboundOrder.OutWareHouse,
    //                    TransactionCode = inboundOrder.TransactionCode,
    //                    InoutType = inboundOrder.InoutType,
    //                    OrderType = inboundOrder.OrderType,
    //                    Creater = "WMS",
    //                    CreateDate = DateTime.Now,
    //                };
    //                _inboundOrder_HtyService.AddData(inboundOrder_Hty);
    //                _inboundService.InbounOrderService.DeleteData(inboundOrder);
    //                Dt_InboundOrderDetail_Hty dt_InboundOrderDetail_HtyS = new Dt_InboundOrderDetail_Hty
    //                {
    //                    OrderId = inboundOrderDetail.OrderId,
    //                    MaterielCode = inboundOrderDetail.MaterielCode,
    //                    MaterielName = inboundOrderDetail.MaterielName,
    //                    BatchNo = inboundOrderDetail.BatchNo,
    //                    OrderQuantity = inboundOrderDetail.OrderQuantity,
    //                    ReceiptQuantity = inboundOrderDetail.ReceiptQuantity,
    //                    OverInQuantity = inboundOrderDetail.OverInQuantity,
    //                    OrderDetailStatus = inboundOrderDetail.OrderDetailStatus,
    //                    Creater = "WMS",
    //                    CreateDate = DateTime.Now,
    //                };
    //                _inboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_HtyS);
    //                _inboundService.InboundOrderDetailService.DeleteData(inboundOrderDetail);
    //                #endregion
    //                #region//调拨任务数量回传WMS
    //                InventoryAllocate inventoryAllocate = new InventoryAllocate();
    //                inventoryAllocate.ApiType = "InventoryAllocateController";
    //                inventoryAllocate.Method = "AsrsFinishedStockCount";
    //                Allocate allocate = new Allocate();
    //                Allocate.data1 data1 = new Allocate.data1();
    //                data1.No = task.OrderNo;
    //                data1.InWarehouse = task.Roadway;
    //                data1.TransactionCode = inboundOrder.TransactionCode;
    //                data1.InoutType = inboundOrder.OrderType;
    //                data1.OrderType = inboundOrder.InoutType;
    //                foreach (var item in StockInfo)
    //                {
    //                    Dt_StockInfoDetail detail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == item.Id);
    //                    Allocate.data1.Inventory inbound = new Allocate.data1.Inventory();
    //                    inbound.LinId = detail.LinId;
    //                    inbound.LPN_No = item.PalletCode;
    //                    inbound.MaterielCode = detail.MaterielCode;
    //                    inbound.OrderQuantity = detail.StockQuantity;
    //                    inbound.BatchNo = detail.BatchNo;
    //                    inbound.FinishQty = detail.StockQuantity;
    //                    inbound.LocationName = item.LocationCode;
    //                    data1.DetailList.Add(inbound);
    //                }
    //                allocate.Value.Add(data1);
    //                inventoryAllocate.Parameters.Add(allocate);
    //                Authentication authentication = new Authentication()
    //                {
    //                    ApiType = "AuthenticationController",
    //                    Parameters = new List<Parameter>
    //            {
    //             new Parameter { Value = "LKAdmin"},
    //             new Parameter { Value = "LKAdmin"},
    //            },
    //                    Method = "Login",
    //                };
    //                var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
    //                var Ticket = responses1.Context["Ticket"].ToString();
    //                var InvOrgId = responses1.Context["InvOrgId"].ToString();
    //                if (Ticket != null)
    //                {
    //                    inventoryAllocate.Context = new Dictionary<string, string>();
    //                    inventoryAllocate.Context.Add("Ticket", Ticket);
    //                    inventoryAllocate.Context.Add("InvOrgId", InvOrgId);
    //                    var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "调拨入库数量回传WMS");
    //                }
    //            }
    //            #endregion
    //            Dt_InboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_InboundOrderDetail_Hty
    //            {
    //                OrderId = inboundOrderDetail.OrderId,
    //                MaterielCode = inboundOrderDetail.MaterielCode,
    //                MaterielName = inboundOrderDetail.MaterielName,
    //                BatchNo = inboundOrderDetail.BatchNo,
    //                OrderQuantity = inboundOrderDetail.OrderQuantity,
    //                ReceiptQuantity = inboundOrderDetail.ReceiptQuantity,
    //                OverInQuantity = inboundOrderDetail.OverInQuantity,
    //                OrderDetailStatus = inboundOrderDetail.OrderDetailStatus,
    //                Creater = "WMS",
    //                CreateDate = DateTime.Now,
    //            };
    //            _inboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
    //            _inboundService.InboundOrderDetailService.DeleteData(inboundOrderDetail);
    //        }
    //        return WebResponseContent.Instance.OK();
    //    }
    //    catch (Exception ex)
    //    {
    //        _unitOfWorkManage.RollbackTran();
    //        return WebResponseContent.Instance.Error(ex.Message);
    //    }
    //}
    #endregion
    #region
    //public WebResponseContent OutboundTaskCompleted(int taskNum)
    //{
    //    try
    //    {
    //        Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
    //        if (task == null)
    //        {
    //            return WebResponseContent.Instance.Error($"未找到任务信息");
    //        }
    //        Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
    //        Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
    //        if (stockInfo == null)
    //        {
    //            return WebResponseContent.Instance.Error($"未找到库存信息");
    //        }
    //        if (locationInfo == null)
    //        {
    //            return WebResponseContent.Instance.Error($"未找到货位信息");
    //        }
    //        List<Dt_OutStockLockInfo> outStockLockInfos = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.TaskNum == taskNum);
    //        if (outStockLockInfos == null || outStockLockInfos.Count == 0)
    //        {
    //            return WebResponseContent.Instance.Error($"未找到出库详情信息");
    //        }
    //        List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
    //        for (int i = 0; i < outStockLockInfos.Count; i++)
    //        {
    //            Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == outStockLockInfos[i].OrderDetailId);
    //            if (outboundOrderDetail != null)
    //            {
    //                outboundOrderDetail.OverOutQuantity = outboundOrderDetail.LockQuantity;
    //                if (outboundOrderDetail.LockQuantity == outboundOrderDetail.OrderQuantity)
    //                {
    //                    outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
    //                }
    //                outboundOrderDetails.Add(outboundOrderDetail);
    //            }
    //        }
    //        _unitOfWorkManage.BeginTran();
    //        _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
    //        stockInfo.LocationCode = locationInfo.LocationCode;
    //        stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
    //        _stockService.StockInfoService.Repository.UpdateData(stockInfo);
    //        int beforeStatus = locationInfo.LocationStatus;
    //        locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
    //        _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
    //        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
    //        _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Outbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
    //        _unitOfWorkManage.CommitTran();
    //        Dt_StockInfoDetail stockInfoDetail = _stockRepository.StockInfoDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(x => x.StockId == stockInfo.Id).First();
    //        Dt_OutboundOrderDetail outDetail = _outboundService.OutboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>().Where(x => x.LPNNo == stockInfo.PalletCode).First();
    //        Dt_OutboundOrder outboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == outDetail.OrderId).Includes(x => x.Details).First();
    //        //判断单据类型是出库还是调拨出库。。。出库
    //        if (outboundOrder.OrderType == 1)
    //        {
    //            #region //判断出库单据明细只有最后一条完成时删除出库单
    //            if (outboundOrder.Details.Count == 1)
    //            {
    //                Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty
    //                {
    //                    OrderStatus = outboundOrder.OrderStatus,
    //                    CreateType = outboundOrder.CreateType,
    //                    //SourceId = oldOutboundOrder.SourceId,
    //                    UpperOrderNo = outboundOrder.UpperOrderNo,
    //                    OrderNo = outboundOrder.OrderNo,
    //                    OutWareHouse = outboundOrder.OutWareHouse,
    //                    TransactionCode = outboundOrder.TransactionCode,
    //                    InoutType = outboundOrder.InoutType,
    //                    OrderType = outboundOrder.OrderType,
    //                    Creater = "WMS",
    //                    CreateDate = DateTime.Now,
    //                };
    //                _outboundOrder_HtyService.AddData(inboundOrder_Hty);
    //                _outboundService.OutboundOrderService.DeleteData(outboundOrder);
    //            }
    //            Dt_OutboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_OutboundOrderDetail_Hty
    //            {
    //                OrderId = outDetail.OrderId,
    //                MaterielCode = outDetail.MaterielCode,
    //                MaterielName = outDetail.MaterielName,
    //                BatchNo = outDetail.BatchNo,
    //                OrderQuantity = outDetail.OrderQuantity,
    //                //ReceiptQuantity = outDetail.ReceiptQuantity,
    //                //OverInQuantity = outDetail.OverInQuantity,
    //                OrderDetailStatus = outDetail.OrderDetailStatus,
    //                Creater = "WMS",
    //                CreateDate = DateTime.Now,
    //            };
    //            _outboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
    //            _outboundService.OutboundOrderService.DeleteData(outDetail);
    //            #endregion
    //            #region//出库信息返回上位WMS。。。立库出库数量回传
    //            HouseoutboundPassBack houseInboundPassBack = new HouseoutboundPassBack();
    //            houseInboundPassBack.ApiType = "ShippingOrderController";
    //            houseInboundPassBack.Method = "AsrsOutboundSO";
    //            datas datas = new datas();
    //            datas.data1 data1 = new datas.data1();
    //            data1.No = outboundOrder.OrderNo;
    //            data1.OutWareHouse = task.Roadway;
    //            data1.TransactionCode = outboundOrder.TransactionCode;
    //            data1.InoutType = outboundOrder.OrderType;
    //            data1.OrderType = outboundOrder.InoutType;
    //            datas.data1.Inbound inbound = new datas.data1.Inbound();
    //            inbound.LinId = outDetail.LinId;
    //            inbound.LPN_No = task.PalletCode;
    //            inbound.MaterielCode = stockInfoDetail.MaterielCode;
    //            inbound.OrderQuantity = stockInfoDetail.OutboundQuantity;
    //            inbound.BatchNo = stockInfoDetail.BatchNo;
    //            inbound.FinishQty = stockInfoDetail.OutboundQuantity;
    //            inbound.LocationName = task.SourceAddress;
    //            datas.Value.Add(data1);
    //            data1.DetailList.Add(inbound);
    //            houseInboundPassBack.Parameters.Add(datas);
    //            Authentication authentication = new Authentication()
    //            {
    //                ApiType = "AuthenticationController",
    //                Parameters = new List<Parameter>
    //            {
    //             new Parameter { Value = "LKAdmin"},
    //             new Parameter { Value = "LKAdmin"},
    //            },
    //                Method = "Login",
    //            };
    //            var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
    //            var Ticket = responses1.Context["Ticket"].ToString();
    //            var InvOrgId = responses1.Context["InvOrgId"].ToString();
    //            if (Ticket != null)
    //            {
    //                houseInboundPassBack.Context = new Dictionary<string, string>();
    //                houseInboundPassBack.Context.Add("Ticket", Ticket);
    //                houseInboundPassBack.Context.Add("InvOrgId", InvOrgId);
    //                var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskout, houseInboundPassBack, "立库出库数量回传WMS");
    //            }
    //            #endregion
    //            //删除库存信息
    //            _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
    //            _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
    //        }
    //        else if (outboundOrder.OrderType == 240)
    //        {
    //            //盘点出库任务完成、、、、、、、、、不能删除库存等逻辑
    //        }
    //        else
    //        {
    //            List<Dt_StockInfo> StockInfo = _stockService.StockInfoService.Repository.QueryData(x => x.BatchNo == outDetail.BatchNo);
    //            if (outboundOrder.Details.Count == 1)
    //            {
    //                Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty
    //                {
    //                    OrderStatus = outboundOrder.OrderStatus,
    //                    CreateType = outboundOrder.CreateType,
    //                    //SourceId = oldOutboundOrder.SourceId,
    //                    UpperOrderNo = outboundOrder.UpperOrderNo,
    //                    OrderNo = outboundOrder.OrderNo,
    //                    OutWareHouse = outboundOrder.OutWareHouse,
    //                    TransactionCode = outboundOrder.TransactionCode,
    //                    InoutType = outboundOrder.InoutType,
    //                    OrderType = outboundOrder.OrderType,
    //                    Creater = "WMS",
    //                    CreateDate = DateTime.Now,
    //                };
    //                _outboundOrder_HtyService.AddData(inboundOrder_Hty);
    //                _outboundService.OutboundOrderService.DeleteData(outboundOrder);
    //            }
    //            Dt_OutboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_OutboundOrderDetail_Hty
    //            {
    //                OrderId = outDetail.OrderId,
    //                MaterielCode = outDetail.MaterielCode,
    //                MaterielName = outDetail.MaterielName,
    //                BatchNo = outDetail.BatchNo,
    //                OrderQuantity = outDetail.OrderQuantity,
    //                //ReceiptQuantity = outDetail.ReceiptQuantity,
    //                //OverInQuantity = outDetail.OverInQuantity,
    //                OrderDetailStatus = outDetail.OrderDetailStatus,
    //                Creater = "WMS",
    //                CreateDate = DateTime.Now,
    //            };
    //            _outboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
    //            _outboundService.OutboundOrderService.DeleteData(outDetail);
    //            InventoryAllocate inventoryAllocate = new InventoryAllocate();
    //            inventoryAllocate.ApiType = "InventoryAllocateController";
    //            inventoryAllocate.Method = "AsrsFinishedStockCount";
    //            Allocate allocate = new Allocate();
    //            Allocate.data1 data1 = new Allocate.data1();
    //            data1.No = outboundOrder.OrderNo;
    //            data1.InWarehouse = task.Roadway;
    //            data1.TransactionCode = outboundOrder.TransactionCode;
    //            data1.InoutType = outboundOrder.OrderType;
    //            data1.OrderType = outboundOrder.InoutType;
    //            foreach (var item in StockInfo)
    //            {
    //                Dt_StockInfoDetail detail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == item.Id);
    //                Allocate.data1.Inventory inbound = new Allocate.data1.Inventory();
    //                inbound.LinId = outDetail.LinId;
    //                inbound.LPN_No = item.PalletCode;
    //                inbound.MaterielCode = detail.MaterielCode;
    //                inbound.OrderQuantity = detail.OutboundQuantity;
    //                inbound.BatchNo = detail.BatchNo;
    //                inbound.FinishQty = detail.OutboundQuantity;
    //                inbound.LocationName = task.SourceAddress;
    //                data1.DetailList.Add(inbound);
    //            }
    //            allocate.Value.Add(data1);
    //            inventoryAllocate.Parameters.Add(allocate);
    //            Authentication authentication = new Authentication()
    //            {
    //                ApiType = "AuthenticationController",
    //                Parameters = new List<Parameter>
    //            {
    //             new Parameter { Value = "LKAdmin"},
    //             new Parameter { Value = "LKAdmin"},
    //            },
    //                Method = "Login",
    //            };
    //            var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
    //            var Ticket = responses1.Context["Ticket"].ToString();
    //            var InvOrgId = responses1.Context["InvOrgId"].ToString();
    //            if (Ticket != null)
    //            {
    //                inventoryAllocate.Context = new Dictionary<string, string>();
    //                inventoryAllocate.Context.Add("Ticket", Ticket);
    //                inventoryAllocate.Context.Add("InvOrgId", InvOrgId);
    //                var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "调拨出库数量回传WMS");
    //            }
    //            _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
    //            _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
    //        }
    //        return WebResponseContent.Instance.OK();
    //    }
    //    catch (Exception ex)
    //    {
    //        _unitOfWorkManage.RollbackTran();
    //        return WebResponseContent.Instance.Error(ex.Message);
    //    }
    //}
    #endregion
    public class LEDDTO
    {
        public string DeviceCode { get; set; }
        public string MaterialCode { get; set; }
        public int BackNum { get; set; }
        public int SendNum { get; set; }
    }
}