1
wankeda
2025-03-01 fcb50f9e6408bf42e3bc5d34d9f6eff93c2dd263
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -27,6 +27,7 @@
using System.Diagnostics.Metrics;
using System.Reflection.Metadata;
using WIDESEA_DTO.Task;
using WIDESEA_DTO.Stock;
namespace WIDESEA_TaskInfoService
{
@@ -515,101 +516,97 @@
            MesResponseContent modelCount = new MesResponseContent();
            try
            {
                Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString());
                if (warehouse == null)
                {
                    return MesResponseContent.Instance.Error("仓库信息未配置");
                }
                Dt_MesPPOutboundOrder mesPPOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPOutboundOrder>().Where(x => x.TaskNo == model.TaskNo).Includes(x => x.Details).First();
                if (mesPPOutboundOrder != null)
                {
                    return MesResponseContent.Instance.Error("已存在此任务单号");
                }
                List<Dt_MesPPOutboundOrderDetail> mesPPOutboundOrderDetail = new List<Dt_MesPPOutboundOrderDetail>();
                foreach (var item in model.Carriers)
                {
                    Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == item.Warehouse);
                    if (warehouse == null)
                    {
                        return MesResponseContent.Instance.Error("仓库信息未配置");
                    }
                    Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == item.CarrierCode || x.WarehouseId == warehouse.WarehouseId);
                    if (stockInfo == null)
                    {
                        return MesResponseContent.Instance.Error("未找到此载具编号库存");
                    }
                    Dt_MesPPOutboundOrder mesPPOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPOutboundOrder>().Where(x => x.TaskNo == model.TaskNo).Includes(x => x.Details).First();
                    if (mesPPOutboundOrder != null)
                    {
                        return MesResponseContent.Instance.Error("已存在此任务单号");
                    }
                    Dt_MesPPOutboundOrderDetail mesPPOutboundOrderDetail = new Dt_MesPPOutboundOrderDetail()
                    {
                        Warehouse = item.Warehouse,
                        CarrierCode = item.CarrierCode,
                    };
                    Dt_MesPPOutboundOrder mesOutboundOrder = new Dt_MesPPOutboundOrder()
                    {
                        CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                        MaterialCode = model.MaterialCode,
                        MaterialName = model.MaterialName,
                        OrderQuantity = model.RequiredQuantity,
                        TaskNo = model.TaskNo,
                        Unit = model.Unit,//PP需要转换成米(需求平方(PNL数*面积)/宽度)
                        Width = model.Width,
                        TargetAddressCode = model.TargetAddressCode,
                        OrderType = TaskTypeEnum.MesHandPickOutbound.ObjToInt(),
                        OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
                        WarehouseId = warehouse.WarehouseId,
                        Details = new List<Dt_MesPPOutboundOrderDetail> { mesPPOutboundOrderDetail }
                    };
                    //Db.InsertNav(mesOutboundOrder).Include(x=>x.Details).ExecuteCommand();
                    List<Dt_Task> tasks = new List<Dt_Task>();
                    List<Dt_StockInfo>? stockInfos = null;
                    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                    List<Dt_LocationInfo>? locationInfos = null;
                    {
                        (List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesOutboundOrder);
                        if (result.Item1 != null && result.Item1.Count > 0)
                        {
                            tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
                            result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                            result.Item3.ForEach(x =>
                            {
                                x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                            });
                            stockInfos = result.Item1;
                            mesOutboundOrder = result.Item2;
                            outStockLockInfos = result.Item3;
                            locationInfos = result.Item4;
                            mesPPOutboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                        }
                        else
                        {
                            throw new Exception("无库存");
                        }
                    }
                    tasks.ForEach(x =>
                    {
                        x.TargetAddress = model.TargetAddressCode;
                    });
                    _unitOfWorkManage.BeginTran();
                    int id = BaseDal.AddData(tasks);
                    outStockLockInfos.ForEach(x =>
                    {
                        x.OrderNo = mesOutboundOrder.TaskNo;
                        x.OrderDetailId = id;
                    });
                    //_outboundService.MesPPOutboundOrderService.Repository.AddData(mesOutboundOrder);
                    Db.InsertNav(mesOutboundOrder).Include(x => x.Details).ExecuteCommand();
                    if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
                    {
                        WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks);
                        if (!content.Status)
                        {
                            _unitOfWorkManage.RollbackTran();
                            return MesResponseContent.Instance.Error(content.Message);
                        }
                    }
                    _unitOfWorkManage.CommitTran();
                    PushTasksToWCS(tasks);
                    mesPPOutboundOrderDetail.Add(_mapper.Map<Dt_MesPPOutboundOrderDetail>(item));
                }
                Dt_MesPPOutboundOrder mesOutboundOrder = new Dt_MesPPOutboundOrder()
                {
                    CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                    MaterialCode = model.MaterialCode,
                    MaterialName = model.MaterialName,
                    OrderQuantity = model.RequiredQuantity,
                    TaskNo = model.TaskNo,
                    Unit = model.Unit,//PP需要转换成米(需求平方(PNL数*面积)/宽度)
                    Width = model.Width,
                    TargetAddressCode = model.TargetAddressCode,
                    OrderType = TaskTypeEnum.MesHandPickOutbound.ObjToInt(),
                    OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
                    WarehouseId = warehouse.WarehouseId,
                    Details = mesPPOutboundOrderDetail
                };
                #region
                //Db.InsertNav(mesOutboundOrder).Include(x=>x.Details).ExecuteCommand();
                //    List<Dt_Task> tasks = new List<Dt_Task>();
                //    List<Dt_StockInfo>? stockInfos = null;
                //    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                //    List<Dt_LocationInfo>? locationInfos = null;
                //    {
                (List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesOutboundOrder);
                //        if (result.Item1 != null && result.Item1.Count > 0)
                //        {
                //            tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
                //            result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                //            result.Item3.ForEach(x =>
                //            {
                //                x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                //            });
                //            stockInfos = result.Item1;
                //            mesOutboundOrder = result.Item2;
                //            outStockLockInfos = result.Item3;
                //            locationInfos = result.Item4;
                //            mesPPOutboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                //        }
                //        else
                //        {
                //            throw new Exception("无库存");
                //        }
                //    }
                //    tasks.ForEach(x =>
                //    {
                //        x.TargetAddress = model.TargetAddressCode;
                //    });
                //    _unitOfWorkManage.BeginTran();
                //    int id = BaseDal.AddData(tasks);
                //    outStockLockInfos.ForEach(x =>
                //    {
                //        x.OrderNo = mesOutboundOrder.TaskNo;
                //        x.OrderDetailId = id;
                //    });
                //    //_outboundService.MesPPOutboundOrderService.Repository.AddData(mesOutboundOrder);
                //    Db.InsertNav(mesOutboundOrder).Include(x => x.Details).ExecuteCommand();
                //    if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
                //    {
                //        WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks);
                //        if (!content.Status)
                //        {
                //            _unitOfWorkManage.RollbackTran();
                //            return MesResponseContent.Instance.Error(content.Message);
                //        }
                //    }
                //    _unitOfWorkManage.CommitTran();
                //    PushTasksToWCS(tasks);
                //}
                #endregion
                Db.InsertNav(mesOutboundOrder).Include(x => x.Details).ExecuteCommand();
                return MesResponseContent.Instance.OK();
            }
            catch (Exception ex)
@@ -628,97 +625,87 @@
        {
            try
            {
                Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString());
                if (warehouse == null)
                {
                    return MesResponseContent.Instance.Error("仓库基础信息未配置");
                }
                Dt_MesPPCutOutboundOrder mesPPCutOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPCutOutboundOrder>().Where(x => x.TaskNo == model.TaskNo).Includes(x => x.Details).First();
                if (mesPPCutOutboundOrder != null)
                {
                    return MesResponseContent.Instance.Error("已存在此任务单号");
                }
                List<Dt_MesPPCutOutboundOrderDetail> mesPPCutOutboundOrderDetail = new List<Dt_MesPPCutOutboundOrderDetail>();
                foreach (var item in model.MaterialDetails)
                {
                    Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString());
                    if (warehouse == null)
                    {
                        return MesResponseContent.Instance.Error("仓库基础信息未配置");
                    }
                    Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == item.MaterialCode);
                    if (materielInfo == null)
                    {
                        return MesResponseContent.Instance.Error($"未找到该物料信息");
                    }
                    Dt_MesPPCutOutboundOrder mesPPCutOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPCutOutboundOrder>().Where(x => x.TaskNo == model.TaskNo).Includes(x => x.Details).First();
                    if (mesPPCutOutboundOrder != null)
                    {
                        return MesResponseContent.Instance.Error("已存在此任务单号");
                    }
                    Dt_MesPPCutOutboundOrderDetail mesPPCutOutboundOrderDetail = new Dt_MesPPCutOutboundOrderDetail()
                    {
                        MaterielCode = item.MaterialCode,
                        MaterielName = item.MaterialName,
                        OrderQuantity = item.RequiredQuantity,
                        Unit = item.Unit,
                        LayerCode = item.LayerCode,
                        Sequence = item.Sequence,
                        TargetAddressCode = item.TargetAddressCode,
                        Width = item.Width,
                    };
                    Dt_MesPPCutOutboundOrder mesPPOutboundOrder = new Dt_MesPPCutOutboundOrder()
                    {
                        CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                        TaskNo = model.TaskNo,
                        OrderType = TaskTypeEnum.MesOutbound.ObjToInt(),
                        OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
                        WarehouseId = warehouse.WarehouseId,
                        Details = new List<Dt_MesPPCutOutboundOrderDetail> { mesPPCutOutboundOrderDetail }
                    };
                    List<Dt_Task> tasks = new List<Dt_Task>();
                    List<Dt_StockInfo>? stockInfos = null;
                    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                    List<Dt_LocationInfo>? locationInfos = null;
                    {
                        (List<Dt_StockInfo>, Dt_MesPPCutOutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesPPOutboundOrder, mesPPCutOutboundOrderDetail);
                        if (result.Item1 != null && result.Item1.Count > 0)
                        {
                            tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
                            result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                            result.Item3.ForEach(x =>
                            {
                                x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                            });
                            stockInfos = result.Item1;
                            mesPPCutOutboundOrderDetail = result.Item2;
                            outStockLockInfos = result.Item3;
                            locationInfos = result.Item4;
                        }
                        else
                        {
                            throw new Exception("无库存");
                        }
                    }
                    tasks.ForEach(x =>
                    {
                        x.TargetAddress = mesPPCutOutboundOrderDetail.TargetAddressCode;
                    });
                    _unitOfWorkManage.BeginTran();
                    int id = BaseDal.AddData(tasks);
                    outStockLockInfos.ForEach(x =>
                    {
                        x.OrderNo = mesPPOutboundOrder.TaskNo;
                        x.OrderDetailId = id;
                    });
                    //_outboundService.MesPPOutboundOrderService.Repository.AddData(mesOutboundOrder);
                    Db.InsertNav(mesPPOutboundOrder).Include(x => x.Details).ExecuteCommand();
                    if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
                    {
                        WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks);
                        if (!content.Status)
                        {
                            _unitOfWorkManage.RollbackTran();
                            return MesResponseContent.Instance.Error(content.Message);
                        }
                    }
                    _unitOfWorkManage.CommitTran();
                    PushTasksToWCS(tasks, "AGV_PP");
                    mesPPCutOutboundOrderDetail.Add(_mapper.Map<Dt_MesPPCutOutboundOrderDetail>(item));
                }
                Dt_MesPPCutOutboundOrder mesPPOutboundOrder = new Dt_MesPPCutOutboundOrder()
                {
                    CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                    TaskNo = model.TaskNo,
                    OrderType = TaskTypeEnum.MesOutbound.ObjToInt(),
                    OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
                    WarehouseId = warehouse.WarehouseId,
                    Details = mesPPCutOutboundOrderDetail,
                };
                Db.InsertNav(mesPPOutboundOrder).Include(x => x.Details).ExecuteCommand();
                #region
                //List<Dt_Task> tasks = new List<Dt_Task>();
                //List<Dt_StockInfo>? stockInfos = null;
                //List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                //List<Dt_LocationInfo>? locationInfos = null;
                //{
                //(List<Dt_StockInfo>, Dt_MesPPCutOutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesPPOutboundOrder, mesPPCutOutboundOrderDetail);
                //    if (result.Item1 != null && result.Item1.Count > 0)
                //    {
                //        tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
                //        result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                //        result.Item3.ForEach(x =>
                //        {
                //            x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                //        });
                //        stockInfos = result.Item1;
                //        mesPPCutOutboundOrderDetail = result.Item2;
                //        outStockLockInfos = result.Item3;
                //        locationInfos = result.Item4;
                //    }
                //    else
                //    {
                //        throw new Exception("无库存");
                //    }
                //}
                //tasks.ForEach(x =>
                //{
                //    x.TargetAddress = mesPPCutOutboundOrderDetail.TargetAddressCode;
                //});
                //_unitOfWorkManage.BeginTran();
                //int id = BaseDal.AddData(tasks);
                //outStockLockInfos.ForEach(x =>
                //{
                //    x.OrderNo = mesPPOutboundOrder.TaskNo;
                //    x.OrderDetailId = id;
                //});
                ////_outboundService.MesPPOutboundOrderService.Repository.AddData(mesOutboundOrder);
                //Db.InsertNav(mesPPOutboundOrder).Include(x => x.Details).ExecuteCommand();
                //if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
                //{
                //    WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks);
                //    if (!content.Status)
                //    {
                //        _unitOfWorkManage.RollbackTran();
                //        return MesResponseContent.Instance.Error(content.Message);
                //    }
                //}
                //_unitOfWorkManage.CommitTran();
                //PushTasksToWCS(tasks, "AGV_PP");
                #endregion
                return MesResponseContent.Instance.OK();
            }
            catch (Exception ex)
@@ -893,7 +880,7 @@
            MesResponseContent content = new MesResponseContent();
            try
            {
                //需判断查询立库,平库
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString());
                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
                x.WarehouseId == warehouse.WarehouseId &&
@@ -906,19 +893,19 @@
                var stock = stockInfo.Details.FirstOrDefault();
                if (stock != null)
                {
                    content.BSucc = true;
                    content.StrCode = "0000";
                    content.StrMsg = "执行成功";
                    content.MaterialCode = stock.MaterielCode;
                    content.Quantity = stock.StockQuantity;
                    content.Unit = stock.Unit;
                    content.Warehouse = warehouse.WarehouseCode;
                    content.WarehouseName = warehouse.WarehouseName;
                    content.CutedWidth = stock.CutedWidth;
                    content.CarrierCode = stockInfo.PalletCode;
                    content.MaterialLot = stock.BatchNo;
                    content.Content = new
                    {
                        MaterialCode= stock.MaterielCode,
                        Quantity = stock.StockQuantity,
                        Unit = stock.Unit,
                        Warehouse = warehouse.WarehouseCode,
                        WarehouseName = warehouse.WarehouseName,
                        CutedWidth = stock.CutedWidth,
                        CarrierCode = stockInfo.PalletCode,
                        MaterialLot = stock.BatchNo,
                    };
                }
                return content;
                return content.OK();
            }
            catch (Exception ex)
            {
@@ -934,8 +921,8 @@
            MesResponseContent content = new MesResponseContent();
            try
            {
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==bagInfoModel.WarehouseCode);
                if (warehouse==null)
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == bagInfoModel.WarehouseCode);
                if (warehouse == null)
                {
                    return content.Error("未找到仓库信息");
                }
@@ -953,10 +940,10 @@
                    WarehouseId = warehouse.WarehouseId,
                    BatchNo = bagInfoModel.BatchNo,
                    MesProStatus = InOrderStatusEnum.未开始.ObjToInt(),
                    UnPackStock=bagInfoModel.UnPackStock,
                    Details= mesProInOrderDetails
                    UnPackStock = bagInfoModel.UnPackStock,
                    Details = mesProInOrderDetails
                };
                Db.InsertNav(mesProInOrder).Include(x=>x.Details).ExecuteCommand();
                Db.InsertNav(mesProInOrder).Include(x => x.Details).ExecuteCommand();
                return content.OK("接收成功");
            }
            catch (Exception ex)
@@ -987,6 +974,7 @@
                }
                Dt_Task exsit2 = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
            }
            catch (Exception ex)
            {
@@ -996,5 +984,180 @@
            return MesResponseContent.Instance.OK();
        }
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务
        /// </summary>
        /// <param name="keys">出库单明细主键</param>
        /// <returns></returns>
        public WebResponseContent MESPPGenerateOutboundTasks(int[] keys)
        {
            try
            {
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>();
                List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
                List<Dt_MesPPOutboundOrderDetail> outboundOrderDetails = new List<Dt_MesPPOutboundOrderDetail>();
                List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
                (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = MESPPOutboundTaskDataHandle(keys);
                if (result.Item2 != null && result.Item2.Count > 0)
                {
                    stockInfos.AddRange(result.Item2);
                }
                if (result.Item3 != null && result.Item3.Count > 0)
                {
                    outboundOrderDetails.AddRange(result.Item3);
                }
                if (result.Item4 != null && result.Item4.Count > 0)
                {
                    outStockLockInfos.AddRange(result.Item4);
                }
                if (result.Item5 != null && result.Item5.Count > 0)
                {
                    locationInfos.AddRange(result.Item5);
                }
                if (result.Item1 != null && result.Item1.Count > 0)
                {
                    tasks.AddRange(result.Item1);
                }
                WebResponseContent content = MESPPGenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos);
                return content;
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// å‡ºåº“任务数据处理
        /// </summary>
        /// <param name="orderDetailId"></param>
        /// <param name="stockSelectViews"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) MESPPOutboundTaskDataHandle(int[] keys)
        {
            List<Dt_Task> tasks = new List<Dt_Task>();
            //List<Dt_MesPPOutboundOrderDetail> outboundOrderDetailss = _outboundService.MesPPOutboundOrderDetailService.Repository.QueryData(x => keys.Contains(x.Id));
            //List<Dt_MesPPOutboundOrderDetail> outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).ToList();
            //List<Dt_MesPPOutboundOrder> mesPPOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPOutboundOrder>().Where(x => keys.Contains(10)).ToList();
            Dt_MesPPOutboundOrderDetail outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).First();
            Dt_MesPPOutboundOrder mesPPOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPOutboundOrder>().Where(x => x.Id == 10).First();
            //if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
            //{
            //    throw new Exception("未找到出库单明细信息");
            //}
            //if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null)
            //{
            //    throw new Exception("所选出库单明细存在出库中或已完成");
            //}
            List<Dt_StockInfo>? stockInfos = null;
            List<Dt_MesPPOutboundOrderDetail>? orderDetails = null;
            List<Dt_OutStockLockInfo>? outStockLockInfos = null;
            List<Dt_LocationInfo>? locationInfos = null;
            //if (outboundOrderDetails == OrderDetailStatusEnum.New.ObjToInt())
            {
                //(List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesPPOutboundOrder);
                //(List<Dt_StockInfo>, List<Dt_MesPPOutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails);
                (List<Dt_StockInfo>, Dt_MesPPOutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result1 = _outboundService.MesPPOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails);
                //if (result.Item1 != null && result.Item1.Count > 0)
                //{
                //    Dt_MesPPOutboundOrder outboundOrder = _outboundService.MesPPOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
                //    TaskTypeEnum typeEnum = outboundOrder.OrderType switch
                //    {
                //        (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
                //        (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate,
                //        (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
                //        _ => new TaskTypeEnum()
                //    };
                //    tasks = GetTasks(result.Item1, typeEnum);
                //    result.Item2.ForEach(x =>
                //    {
                //        x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                //    });
                //    result.Item3.ForEach(x =>
                //    {
                //        x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                //    });
                //    stockInfos = result.Item1;
                //    orderDetails = result.Item2;
                //    outStockLockInfos = result.Item3;
                //    locationInfos = result.Item4;
                //}
                //else
                //{
                //    throw new Exception("无库存");
                //}
            }
            //else
            //{
            //    List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId, OutLockStockStatusEnum.已分配);
            //    if (stockLockInfos != null && stockLockInfos.Count > 0)
            //    {
            //        List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
            //        tasks = GetTasks(stocks);
            //    }
            //}
            return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos);
        }
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务后数据更新到数据库
        /// </summary>
        /// <param name="tasks"></param>
        /// <param name="stockInfos"></param>
        /// <param name="outboundOrderDetails"></param>
        /// <param name="outStockLockInfos"></param>
        /// <param name="locationInfos"></param>
        /// <returns></returns>
        public WebResponseContent MESPPGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
        {
            try
            {
                _unitOfWorkManage.BeginTran();
                BaseDal.AddData(tasks);
                if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
                {
                    stockInfos.ForEach(x =>
                    {
                        x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                    });
                    WebResponseContent content = _outboundService.MesPPOutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
                    if (!content.Status)
                    {
                        _unitOfWorkManage.RollbackTran();
                        return content;
                    }
                }
                else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0)
                {
                    outboundOrderDetails.ForEach(x =>
                    {
                        x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                    });
                    _outboundService.MesPPOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                }
                _unitOfWorkManage.CommitTran();
                PushTasksToWCS(tasks);
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
    }
}