wangxinhui
2026-02-03 b2b779905bc8a71b52d0e14f91652309d9279878
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -741,7 +741,7 @@
            if (result.Item1 != null && result.Item1.Count > 0)
            {
                //获取任务
                tasks = GetTasks(result.Item1, TaskTypeEnum.OldYLOutbound);
                tasks = GetTasks(result.Item1.Where(x=> !x.LocationCode.IsNullOrEmpty()).ToList(), TaskTypeEnum.OldYLOutbound);
                result.Item2.ForEach(x =>
                {
                    if (result.Item3.FirstOrDefault(t=>t.OrderDetailId==x.Id)!=null)
@@ -751,7 +751,14 @@
                });
                result.Item3.ForEach(x =>
                {
                    if (x.LocationCode== "老厂缓存区")
                    {
                        x.Status = OutLockStockStatusEnum.出库完成.ObjToInt();
                    }
                    else
                    {
                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                    }
                });
                stockInfos = result.Item1;
@@ -829,42 +836,68 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                //新增
                List<BSTPickInfoDTO> bSTPickInfosAdd = bSTPickInfoDTOs.Where(x => x.Way == 1).ToList();
                //获取新增明细领料
                List<PaperMattakeDetailItem>? paperMattakeDetailItemsAdd = null;
                //修改
                List<BSTPickInfoDTO> bSTPickInfosUp = bSTPickInfoDTOs.Where(x => x.Way == 2).ToList();
                //获取新增明细领料
                List<PaperMattakeDetailItem>? paperMattakeDetailItemsUp = null;
                if (bSTPickInfosAdd != null && bSTPickInfosAdd.Count > 0)
                //获取领料条码及库存
                List<string> lockCodes = bSTPickInfoDTOs.SelectMany(x => x.PaperMattakeDetails).Select(x=>x.Barcode).Distinct().ToList();
                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.QueryData(x=> lockCodes.Contains(x.PalletCode));
                //获取待领料的出库详情
                List<Dt_OutStockLockInfo> outStockLockInfos = _outboundRepository.OutStockLockInfoRepository.QueryData(x => x.OrderType == OutOrderTypeEnum.OutSGPick.ObjToInt() && x.Status==OutLockStockStatusEnum.出库完成.ObjToInt() && lockCodes.Distinct().ToList().Contains(x.PalletCode));
                //出库详情状态更新
                if (outStockLockInfos.Count > 0)
                {
                    paperMattakeDetailItemsAdd = bSTPickInfosAdd.SelectMany(x => x.PaperMattakeDetails).ToList();
                }
                if (bSTPickInfosUp != null && bSTPickInfosUp.Count > 0)
                    outStockLockInfos.ForEach(x =>
                {
                    paperMattakeDetailItemsUp = bSTPickInfosUp.SelectMany(x => x.PaperMattakeDetails).ToList();
                        x.Status = OutLockStockStatusEnum.关闭.ObjToInt();
                    });
                }
                //获取所有待领料的出库详情
                List<Dt_OutStockLockInfo> outStockLockInfos = _outboundRepository.OutStockLockInfoRepository.QueryData(x => x.OrderType == OutOrderTypeEnum.OutSGPick.ObjToInt() && x.Status==OutLockStockStatusEnum.出库完成.ObjToInt());
                List<int> BSTPickDetailsId = outStockLockInfos.Select(x => x.OrderDetailId).Distinct().ToList();
                //获取对应排程
                List<Dt_OutSGOrder> outSGOrders = BaseDal.Db.Queryable<Dt_OutSGOrder>().Where(x => x.OutSGOrderStatus < OutOrderStatusEnum.出库完成.ObjToInt()).Includes(x => x.Details)
                    .Where(x => x.Details
                    .Any(v =>
                        BSTPickDetailsId.Contains(v.Id))
                    ).OrderBy(x => x.CreateDate).ToList();
                List<Dt_OutSGOrderDetail> orderDetails = new List<Dt_OutSGOrderDetail>();
                //处理排程
                if (outSGOrders.Count>0)
                {
                    orderDetails = outSGOrders.SelectMany(x=>x.Details).Where(x=> BSTPickDetailsId.Contains(x.Id)).ToList();
                    orderDetails.ForEach(x =>
                    {
                        x.OutSGOrderDetailStatus = OutOrderStatusEnum.出库完成.ObjToInt();
                    });
                    foreach (var item in outSGOrders)
                    {
                        int overCount = item.Details.Where(x=>x.OutSGOrderDetailStatus==OutLockStockStatusEnum.出库完成.ObjToInt()).Count();
                        int thisCount = orderDetails.Where(x => x.OutSGOrderId == item.Id).Count();
                        if ((overCount + thisCount) == item.Details.Count)
                        {
                            item.OutSGOrderStatus = OutOrderStatusEnum.出库完成.ObjToInt();
                        }
                    }
                }
                //获取所有待领料的库存
                #region é¢†æ–™é€»è¾‘
                if (paperMattakeDetailItemsAdd != null && paperMattakeDetailItemsAdd.Count > 0)
                foreach (var item in stockInfos)
                {
                    foreach (var item in paperMattakeDetailItemsAdd)
                    if (item.StockStatus==StockStatusEmun.出库完成.ObjToInt())
                    {
                        //获取对应的
                        item.StockLength = 0;
                        item.MaterielWeight = 0;
                        item.MaterielThickness = 0;
                        item.MaterielWide = 0;
                        item.StockOutLength = 0;
                        item.IsFull = WhetherEnum.True.ObjToInt();
                        item.IsPick = WhetherEnum.True.ObjToInt();
                    }
                }
                if (paperMattakeDetailItemsUp != null && paperMattakeDetailItemsUp.Count > 0)
                {
                    foreach (var item in paperMattakeDetailItemsUp)
                    {
                    }
                }
                #endregion
                _unitOfWorkManage.BeginTran();
                _stockRepository.StockInfoRepository.UpdateData(stockInfos);
                _outboundRepository.OutStockLockInfoRepository.UpdateData(outStockLockInfos);
                _outboundRepository.OutSGOrderRepository.UpdateData(outSGOrders);
                _outboundRepository.OutSGOrderDetailRepository.UpdateData(orderDetails);
                _unitOfWorkManage.CommitTran();
            }
            catch (Exception ex)
            {
@@ -970,90 +1003,90 @@
                _unitOfWorkManage.BeginTran();
                //操作数据,并分配需求库存
                _outboundRepository.OutMESOrderRepository.AddData(AddoutMESOrders);
                List<Dt_OutMESOrder> mESOrders = _outboundRepository.OutMESOrderRepository.QueryData(x => AddoutMESOrders.Select(x => x.OutDetailId).Contains(x.OutDetailId));
                {
                    List<Dt_Task> tasks = new List<Dt_Task>();
                    List<Dt_ProStockInfo>? stockInfos = null;
                    List<Dt_OutMESOrder>? Orders = null;
                    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                    List<Dt_LocationInfo>? locationInfos = null;
                    {
                        if (mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDFL.ObjToInt()).ToList().Count>0)
                        {
                            //分配库存
                            (List<Dt_ProStockInfo>, List<Dt_OutMESOrder>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutMESOrderService.AssignProStockOutbound(mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDFL.ObjToInt()).ToList());
                            if (result.Item1 != null && result.Item1.Count > 0)
                            {
                                //创建任务
                                tasks = GetTasks(result.Item1, result.Item3);
                                result.Item3.ForEach(x =>
                                {
                                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                                });
                                stockInfos = result.Item1;
                                Orders = result.Item2;
                                outStockLockInfos = result.Item3;
                                locationInfos = result.Item4;
                            }
                        }
                    }
                    if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0 && tasks.Count>0)
                    {
                        BaseDal.AddData(tasks);
                        stockInfos.ForEach(x =>
                        {
                            x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                        });
                        WebResponseContent contentResponse = _outboundService.OutMESOrderService.LockOutboundStockDataUpdate(stockInfos, Orders, outStockLockInfos, locationInfos, tasks: tasks);
                //List<Dt_OutMESOrder> mESOrders = _outboundRepository.OutMESOrderRepository.QueryData(x => AddoutMESOrders.Select(x => x.OutDetailId).Contains(x.OutDetailId));
                //{
                //    List<Dt_Task> tasks = new List<Dt_Task>();
                //    List<Dt_ProStockInfo>? stockInfos = null;
                //    List<Dt_OutMESOrder>? Orders = null;
                //    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                //    List<Dt_LocationInfo>? locationInfos = null;
                //    {
                //        if (mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDFL.ObjToInt()).ToList().Count>0)
                //        {
                //            //分配库存
                //            (List<Dt_ProStockInfo>, List<Dt_OutMESOrder>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutMESOrderService.AssignProStockOutbound(mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDFL.ObjToInt()).ToList());
                //            if (result.Item1 != null && result.Item1.Count > 0)
                //            {
                //                //创建任务
                //                tasks = GetTasks(result.Item1, result.Item3);
                //                result.Item3.ForEach(x =>
                //                {
                //                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                //                });
                //                stockInfos = result.Item1;
                //                Orders = result.Item2;
                //                outStockLockInfos = result.Item3;
                //                locationInfos = result.Item4;
                //            }
                //        }
                //    }
                //    if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0 && tasks.Count>0)
                //    {
                //        BaseDal.AddData(tasks);
                //        stockInfos.ForEach(x =>
                //        {
                //            x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                //        });
                //        WebResponseContent contentResponse = _outboundService.OutMESOrderService.LockOutboundStockDataUpdate(stockInfos, Orders, outStockLockInfos, locationInfos, tasks: tasks);
                        if (!contentResponse.Status)
                        {
                            _unitOfWorkManage.RollbackTran();
                            return content.Error(contentResponse.Message);
                        }
                    }
                }
                {
                    List<Dt_Task> tasks = new List<Dt_Task>();
                    List<Dt_StockInfo>? stockInfos = null;
                    List<Dt_OutMESOrder>? Orders = null;
                    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                    List<Dt_LocationInfo>? locationInfos = null;
                    {
                        if (mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt()).ToList().Count > 0)
                        {
                            //分配库存
                            (List<Dt_StockInfo>, List<Dt_OutMESOrder>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutMESOrderService.AssignStockOutbound(mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt()).ToList());
                            if (result.Item1 != null && result.Item1.Count > 0)
                            {
                                //创建任务
                                tasks = GetTasks(result.Item1, result.Item3);
                                result.Item3.ForEach(x =>
                                {
                                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                                });
                                stockInfos = result.Item1;
                                Orders = result.Item2;
                                outStockLockInfos = result.Item3;
                                locationInfos = result.Item4;
                            }
                        }
                    }
                    if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0 && tasks.Count>0)
                    {
                        BaseDal.AddData(tasks);
                        stockInfos.ForEach(x =>
                        {
                            x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                        });
                        WebResponseContent contentResponse = _outboundService.OutMESOrderService.LockOutboundStockDataUpdate(stockInfos, Orders, outStockLockInfos, locationInfos, tasks: tasks);
                        if (!contentResponse.Status)
                        {
                            _unitOfWorkManage.RollbackTran();
                            return content.Error(contentResponse.Message);
                        }
                    }
                }
                //        if (!contentResponse.Status)
                //        {
                //            _unitOfWorkManage.RollbackTran();
                //            return content.Error(contentResponse.Message);
                //        }
                //    }
                //}
                //{
                //    List<Dt_Task> tasks = new List<Dt_Task>();
                //    List<Dt_StockInfo>? stockInfos = null;
                //    List<Dt_OutMESOrder>? Orders = null;
                //    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                //    List<Dt_LocationInfo>? locationInfos = null;
                //    {
                //        if (mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt()).ToList().Count > 0)
                //        {
                //            //分配库存
                //            (List<Dt_StockInfo>, List<Dt_OutMESOrder>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutMESOrderService.AssignStockOutbound(mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt()).ToList());
                //            if (result.Item1 != null && result.Item1.Count > 0)
                //            {
                //                //创建任务
                //                tasks = GetTasks(result.Item1, result.Item3);
                //                result.Item3.ForEach(x =>
                //                {
                //                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                //                });
                //                stockInfos = result.Item1;
                //                Orders = result.Item2;
                //                outStockLockInfos = result.Item3;
                //                locationInfos = result.Item4;
                //            }
                //        }
                //    }
                //    if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0 && tasks.Count>0)
                //    {
                //        BaseDal.AddData(tasks);
                //        stockInfos.ForEach(x =>
                //        {
                //            x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                //        });
                //        WebResponseContent contentResponse = _outboundService.OutMESOrderService.LockOutboundStockDataUpdate(stockInfos, Orders, outStockLockInfos, locationInfos, tasks: tasks);
                //        if (!contentResponse.Status)
                //        {
                //            _unitOfWorkManage.RollbackTran();
                //            return content.Error(contentResponse.Message);
                //        }
                //    }
                //}
                _unitOfWorkManage.CommitTran();
                
                return content.OK("接收成功");