1
wangxinhui
13 小时以前 0023d3db5bd701864b73e57c0240c219c40c3a4e
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs
@@ -106,87 +106,6 @@
            {
                throw new Exception("未找到成品订单");
            }
            //List<Dt_ProOutOrderDetail> groupDetails = proOutOrderDetails.GroupBy(x => new { x.SaleOrder, x.PCode, x.PVer, x.PLot, x.DateCode }).Select(x => new Dt_ProOutOrderDetail()
            //{
            //    QtyPcs = x.Sum(x => x.QtyPcs) - x.Sum(x => x.OverQtyPcs),
            //    SaleOrder = x.Key.SaleOrder,
            //    PCode = x.Key.PCode,
            //    PVer = x.Key.PVer,
            //    PLot = x.Key.PLot,
            //    DateCode = x.Key.DateCode,
            //}).ToList();
            //foreach (var item in groupDetails)
            //{
            //    float needQty = item.QtyPcs;
            //    //查找可用库存
            //    List<Dt_ProStockInfo> stockInfoss = _stockInfoService.ProStockInfoService.GetUseableStocks(proOutOrder.WarehouseId, item);
            //    if (!stockInfoss.Any())
            //    {
            //        throw new Exception("未找到可分配库存");
            //    }
            //    //获取出库库存
            //    List<Dt_ProStockInfo> assignOutStocks = _stockInfoService.ProStockInfoService.GetOutboundStocks(stockInfoss, item, needQty, out float residueQuantity);
            //    item.LockQtyPcs += needQty - residueQuantity;
            //    if (item.QtyPcs> item.LockQtyPcs)
            //    {
            //        throw new Exception($"产品编码{item.PCode}可分配数量不足,可用数量{item.LockQtyPcs}");
            //    }
            //    outStocks.AddRange(assignOutStocks);
            //    float assignQuantity = needQty - residueQuantity;
            //    bool isCanLot = string.IsNullOrEmpty(item.PLot);
            //    bool isCanDate = string.IsNullOrEmpty(item.DateCode);
            //    List<Dt_ProOutOrderDetail> details = proOutOrderDetails
            //        .Where(x =>x.PCode == item.PCode && x.PVer == item.PVer
            //        && (isCanLot ? isCanLot : x.PLot == item.PLot)
            //        && (isCanDate ? isCanDate : x.DateCode == item.DateCode))
            //        .ToList();
            //    for (int i = 0; i < details.Count; i++)
            //    {
            //        float orderQuantity = details[i].QtyPcs;
            //        for (int j = 0; j < assignOutStocks.Count; j++)
            //        {
            //            //出库订单明细已分配数量
            //            float detailAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer
            //                && (isCanLot ? isCanLot : x.PLot == item.PLot)
            //                && (isCanDate ? isCanDate : x.DateCode == item.DateCode)
            //                && x.OrderDetailId == details[i].Id).Sum(x => x.AssignQuantity);
            //            float palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer
            //                && (isCanLot ? isCanLot : x.PLot == item.PLot)
            //                && (isCanDate ? isCanDate : x.DateCode == item.DateCode)
            //                && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity);
            //            //出库详情已分配数量
            //            palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer
            //                && (isCanLot ? isCanLot : x.PLot == item.PLot)
            //                && (isCanDate ? isCanDate : x.DateCode == item.DateCode)
            //                && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity);//出库详情已分配数量
            //            float palletOutboundQuantity = assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
            //            if (palletAssignQuantity < palletOutboundQuantity)//如果出库详情已分配数量小于托盘已分配数量,则可以继续添加该托盘出库信息
            //            {
            //                float orderDetailNeedQuantity = details[i].QtyPcs - detailAssignQuantity;
            //                if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity)
            //                {
            //                    details[i].LockQtyPcs += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity;
            //                    Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, details[i], assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity);
            //                    outProStockInfos.Add(outStockLockInfo);
            //                }
            //                else
            //                {
            //                    Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, details[i], assignOutStocks[j], details[i].QtyPcs - details[i].LockQtyPcs);
            //                    outProStockInfos.Add(outStockLockInfo);
            //                    details[i].LockQtyPcs = details[i].QtyPcs;
            //                    break;
            //                }
            //            }
            //        }
            //    }
            //    List<string> locationArr = outStocks.Select(x => x.LocationCode).ToList();
            //    locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(locationArr));
            //}
            foreach (var item in proOutOrderDetails)
            {
                float needQty = item.QtyPcs;
@@ -206,39 +125,29 @@
                outStocks.AddRange(assignOutStocks);
                //分配出库的PCS数量
                float assignQuantity = needQty;
                bool isCanLot = string.IsNullOrEmpty(item.PLot);
                bool isCanDate = string.IsNullOrEmpty(item.DateCode);
                //订单明细的出库PCS数量
                float orderQuantity = item.QtyPcs;
                for (int j = 0; j < assignOutStocks.Count; j++)
                {
                    //出库订单明细已分配数量
                    float detailAssignQuantity = outProStockInfos.Where(x => x.OrderDetailId == item.Id).Sum(x => x.AssignQuantity);
                    ////出库详情已分配数量
                    //float palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer
                    //    && (isCanLot ? isCanLot : x.PLot == item.PLot)
                    //    && (isCanDate ? isCanDate : x.DateCode == item.DateCode)
                    //    && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity);
                    ////出库详情已分配数量
                    //float palletOutboundQuantity = assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
                    //if (palletAssignQuantity < palletOutboundQuantity)//如果出库详情已分配数量小于托盘已分配数量,则可以继续添加该托盘出库信息
                    //{
                        float orderDetailNeedQuantity = item.QtyPcs - detailAssignQuantity;
                        if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity))
                        {
                            item.LockQtyPcs += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
                            Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, item, assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity));
                            outProStockInfos.Add(outStockLockInfo);
                        }
                        else
                        {
                            Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, item, assignOutStocks[j], item.QtyPcs - detailAssignQuantity);
                            outProStockInfos.Add(outStockLockInfo);
                            item.LockQtyPcs = item.QtyPcs;
                            break;
                        }
                    //}
                    float orderDetailNeedQuantity = item.QtyPcs - detailAssignQuantity;
                    //生成出库详情
                    if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity))
                    {
                        item.LockQtyPcs += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
                        Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, item, assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity));
                        outProStockInfos.Add(outStockLockInfo);
                    }
                    else
                    {
                        Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, item, assignOutStocks[j], item.QtyPcs - detailAssignQuantity);
                        outProStockInfos.Add(outStockLockInfo);
                        item.LockQtyPcs = item.QtyPcs;
                        break;
                    }
                }
                List<string> locationArr = outStocks.Select(x => x.LocationCode).ToList();