| | |
| | | } |
| | | return content; |
| | | } |
| | | //æ¥æ¾å¯ç¨åºå |
| | | public List<Dt_ProStockInfo> GetUseableStocks(int warehoseId,Dt_ProOutOrderDetail proOutOrderDetail) |
| | | { |
| | | List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId); |
| | | return BaseDal.GetProStocks(proOutOrderDetail,locationCodes); |
| | | } |
| | | /// <summary> |
| | | /// MESæåºå¯ç¨åºå |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public List<Dt_ProStockInfo> GetUseableStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder) |
| | | { |
| | | //è½¬æ¢æ æåä»ä»åºä¿¡æ¯è·åå°¾æ°å±æ§çè´§ä½ |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA71.ToString()); |
| | | List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehouse.WarehouseId); |
| | | return BaseDal.GetProStocks(mesRworkOutboundOrder, locationCodes); |
| | | } |
| | | /// <summary> |
| | | /// è·ååºåºåºå |
| | | /// </summary> |
| | | public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ProOutOrderDetail outOrderDetail, float needQuantity, out float residueQuantity) |
| | | { |
| | | List<Dt_ProStockInfo> assignOutStocks =new List<Dt_ProStockInfo>(); |
| | | float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x); |
| | | //stockInfos = stockInfos.OrderBy(x => x.Id).ToList(); |
| | | bool isCanLot = string.IsNullOrEmpty(outOrderDetail.PLot); |
| | | bool isCanDate = string.IsNullOrEmpty(outOrderDetail.DateCode); |
| | | if (stockTotalQuantity >= needQuantity)//åºåå¤ |
| | | { |
| | | int index = 0; |
| | | while (needQuantity > 0) |
| | | { |
| | | Dt_ProStockInfo stockInfo = stockInfos[index]; |
| | | float useableStockQuantity = stockInfo.proStockInfoDetails |
| | | .Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0,1)) |
| | | && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) |
| | | && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) |
| | | .Sum(x => x.StockPcsQty - x.OutboundQuantity); |
| | | if (useableStockQuantity < needQuantity) |
| | | { |
| | | stockInfo.proStockInfoDetails.Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1)) |
| | | && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) |
| | | && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)).ToList().ForEach(x => x.OutboundQuantity = x.StockPcsQty); |
| | | needQuantity -= useableStockQuantity; |
| | | } |
| | | else |
| | | { |
| | | stockInfo.proStockInfoDetails.ForEach(x => |
| | | { |
| | | //满足æ¡ä»¶è¿è¡åé
|
| | | if ((x.StockPcsQty > x.OutboundQuantity) |
| | | && x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1)) |
| | | && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) |
| | | && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) |
| | | { |
| | | if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) |
| | | { |
| | | x.OutboundQuantity += needQuantity; |
| | | needQuantity = 0; |
| | | x.OutDetailSaleNo = outOrderDetail.SaleOrder; |
| | | x.OutDetailId = outOrderDetail.Id; |
| | | } |
| | | else |
| | | { |
| | | needQuantity -= (x.StockPcsQty - x.OutboundQuantity); |
| | | x.OutboundQuantity = x.StockPcsQty; |
| | | x.OutDetailSaleNo = outOrderDetail.SaleOrder; |
| | | x.OutDetailId = outOrderDetail.Id; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | assignOutStocks.Add(stockInfo); |
| | | index++; |
| | | } |
| | | } |
| | | #region æåå¯ç¨åºåä¸è¶³ä¸è¿è¡åé
|
| | | //else |
| | | //{ |
| | | // for (int i = 0; i < stockInfos.Count; i++) |
| | | // { |
| | | // Dt_ProStockInfo stockInfo = stockInfos[i]; |
| | | // float useableStockQuantity = stockInfo.proStockInfoDetails |
| | | // .Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer |
| | | // && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) |
| | | // && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) |
| | | // .Sum(x => x.StockPcsQty - x.OutboundQuantity); |
| | | // if (useableStockQuantity < needQuantity) |
| | | // { |
| | | // stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty); |
| | | // needQuantity -= useableStockQuantity; |
| | | // } |
| | | // else |
| | | // { |
| | | // stockInfo.proStockInfoDetails.ForEach(x => |
| | | // { |
| | | // if (x.StockPcsQty > x.OutboundQuantity && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer |
| | | // && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) |
| | | // && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) |
| | | // { |
| | | // if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) |
| | | // { |
| | | // x.OutboundQuantity += needQuantity; |
| | | // needQuantity = 0; |
| | | // } |
| | | // else |
| | | // { |
| | | // needQuantity -= (x.StockPcsQty - x.OutboundQuantity); |
| | | // x.OutboundQuantity = x.StockPcsQty; |
| | | // } |
| | | // } |
| | | // }); |
| | | // } |
| | | // stockInfo.proStockInfoDetails.ForEach(x => |
| | | // { |
| | | // x.OutDetailSaleNo = outOrderDetail.SaleOrder; |
| | | // x.OutDetailId = outOrderDetail.Id; |
| | | // }); |
| | | // assignOutStocks.Add(stockInfo); |
| | | // } |
| | | //} |
| | | #endregion |
| | | residueQuantity = needQuantity; |
| | | return assignOutStocks; |
| | | } |
| | | /// <summary> |
| | | /// è·åMESæåºåºå |
| | | /// </summary> |
| | | public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_MesRworkOutboundOrder mesRworkOutboundOrder, float needQuantity, out float residueQuantity) |
| | | { |
| | | List<Dt_ProStockInfo> assignOutStocks = new List<Dt_ProStockInfo>(); |
| | | float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x); |
| | | //stockInfos = stockInfos.OrderBy(x => x.Id).ToList(); |
| | | bool isCanDate = string.IsNullOrEmpty(mesRworkOutboundOrder.DateCode); |
| | | if (stockTotalQuantity >= needQuantity)//åºåå¤ |
| | | { |
| | | int index = 0; |
| | | while (needQuantity > 0) |
| | | { |
| | | Dt_ProStockInfo stockInfo = stockInfos[index]; |
| | | float useableStockQuantity = stockInfo.proStockInfoDetails |
| | | .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder |
| | | && x.ProductCode == mesRworkOutboundOrder.ProductCode |
| | | && x.ProductVersion == mesRworkOutboundOrder.ProductVersion |
| | | && (isCanDate? isCanDate: x.DateCode == mesRworkOutboundOrder.DateCode)) |
| | | .Sum(x => x.StockPcsQty - x.OutboundQuantity); |
| | | if (useableStockQuantity < needQuantity) |
| | | { |
| | | stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty); |
| | | needQuantity -= useableStockQuantity; |
| | | } |
| | | else |
| | | { |
| | | stockInfo.proStockInfoDetails.ForEach(x => |
| | | { |
| | | if ((x.StockPcsQty > x.OutboundQuantity) && x.SaleOrder == mesRworkOutboundOrder.SaleOrder |
| | | && x.ProductCode == mesRworkOutboundOrder.ProductCode |
| | | && x.ProductVersion == mesRworkOutboundOrder.ProductVersion |
| | | && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode)) |
| | | { |
| | | if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) |
| | | { |
| | | x.OutboundQuantity += needQuantity; |
| | | needQuantity = 0; |
| | | } |
| | | else |
| | | { |
| | | needQuantity -= (x.StockPcsQty - x.OutboundQuantity); |
| | | x.OutboundQuantity = x.StockPcsQty; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | assignOutStocks.Add(stockInfo); |
| | | index++; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | for (int i = 0; i < stockInfos.Count; i++) |
| | | { |
| | | Dt_ProStockInfo stockInfo = stockInfos[i]; |
| | | float useableStockQuantity = stockInfo.proStockInfoDetails |
| | | .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder |
| | | && x.ProductCode == mesRworkOutboundOrder.ProductCode |
| | | && x.ProductVersion == mesRworkOutboundOrder.ProductVersion |
| | | && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode)) |
| | | .Sum(x => x.StockPcsQty - x.OutboundQuantity); |
| | | if (useableStockQuantity < needQuantity) |
| | | { |
| | | stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty); |
| | | needQuantity -= useableStockQuantity; |
| | | } |
| | | else |
| | | { |
| | | stockInfo.proStockInfoDetails.ForEach(x => |
| | | { |
| | | if (x.StockPcsQty > x.OutboundQuantity && x.SaleOrder == mesRworkOutboundOrder.SaleOrder |
| | | && x.ProductCode == mesRworkOutboundOrder.ProductCode |
| | | && x.ProductVersion == mesRworkOutboundOrder.ProductVersion |
| | | && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode)) |
| | | { |
| | | if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) |
| | | { |
| | | x.OutboundQuantity += needQuantity; |
| | | needQuantity = 0; |
| | | } |
| | | else |
| | | { |
| | | needQuantity -= (x.StockPcsQty - x.OutboundQuantity); |
| | | x.OutboundQuantity = x.StockPcsQty; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | assignOutStocks.Add(stockInfo); |
| | | } |
| | | } |
| | | residueQuantity = needQuantity; |
| | | return assignOutStocks; |
| | | } |
| | | ////å¤çåºåºåºå |
| | | //public (List<Dt_ProStockInfoDetail>?, List<Dt_ProStockInfoDetail>?) HandleOutProStock(Dt_ProStockInfo proStockInfo) |
| | | //{ |
| | | // List<Dt_ProStockInfoDetail>? deleteStockDetails = null; |
| | | // List<Dt_ProStockInfoDetail>? updateStockDetails = null; |
| | | // foreach (var item in proStockInfo.proStockInfoDetails) |
| | | // { |
| | | // if (item.StockPcsQty==item.OutboundQuantity) |
| | | // { |
| | | // item.ProOutDetailStatus = StockStatusEmun.åºåºå®æ.ObjToInt(); |
| | | // deleteStockDetails.Add(item); |
| | | // } |
| | | // else if(item.StockPcsQty> item.OutboundQuantity && item.OutboundQuantity>0) |
| | | // { |
| | | // item.StockPcsQty-=item.OutboundQuantity; |
| | | // updateStockDetails.Add(item); |
| | | // } |
| | | // } |
| | | // return (deleteStockDetails, updateStockDetails); |
| | | //} |
| | | } |
| | | } |