|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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(); | 
|---|
|  |  |  |  | 
|---|