|  |  | 
 |  |  |             bool isCanLot = string.IsNullOrEmpty(outOrderDetail.PLot); | 
 |  |  |             bool isCanDate = string.IsNullOrEmpty(outOrderDetail.DateCode); | 
 |  |  |             float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1)) | 
 |  |  |                             && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) | 
 |  |  |                             && (isCanLot ? isCanLot : x.ProductCode == outOrderDetail.PLot) | 
 |  |  |                             && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) | 
 |  |  |                         .Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x); | 
 |  |  |             //stockInfos = stockInfos.OrderBy(x => x.Id).ToList(); | 
 |  |  | 
 |  |  |                     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) | 
 |  |  |                             && (isCanLot ? isCanLot : x.ProductCode == outOrderDetail.PLot) | 
 |  |  |                             && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) | 
 |  |  |                         .Sum(x => x.StockPcsQty - x.OutboundQuantity); | 
 |  |  |                     if (useableStockQuantity < needQuantity && useableStockQuantity >0) | 
 |  |  |                     { | 
 |  |  |                         stockInfo.proStockInfoDetails.Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1)) | 
 |  |  |                             && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) | 
 |  |  |                             && (isCanLot ? isCanLot : x.ProductCode == outOrderDetail.PLot) | 
 |  |  |                             && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)).ToList().ForEach(x => x.OutboundQuantity = x.StockPcsQty); | 
 |  |  |                         needQuantity -= useableStockQuantity; | 
 |  |  |                     } | 
 |  |  | 
 |  |  |                             //满足æ¡ä»¶è¿è¡åé
 | 
 |  |  |                             if ((x.StockPcsQty > x.OutboundQuantity) | 
 |  |  |                                 && x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1))  | 
 |  |  |                                 && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) | 
 |  |  |                                 && (isCanLot ? isCanLot : x.ProductCode == outOrderDetail.PLot) | 
 |  |  |                                 && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) | 
 |  |  |                             { | 
 |  |  |                                 if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) | 
 |  |  | 
 |  |  |         //    } | 
 |  |  |         //    return (deleteStockDetails, updateStockDetails); | 
 |  |  |         //} | 
 |  |  |         public WebResponseContent GetProCodeByWarehouse(int warehouseId) | 
 |  |  |         { | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 //è·åææåºååå· | 
 |  |  |                 List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId) | 
 |  |  |                 .Where((master, detail) => master.WarehouseId == warehouseId) | 
 |  |  |                 .Select((master, detail) => detail) | 
 |  |  |                 .ToList(); | 
 |  |  |                 //è¿æ»¤éå¤ | 
 |  |  |                 List<string> proCode = proStockInfoDetails.Select(x => x.ProductCode).Distinct().ToList(); | 
 |  |  |                 return WebResponseContent.Instance.OK("æå",data: proCode); | 
 |  |  |             } | 
 |  |  |             catch (Exception ex) | 
 |  |  |             { | 
 |  |  |                 return WebResponseContent.Instance.Error(ex.Message); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public WebResponseContent GetProVersionByCode(string scrapProCode, int warehouseId) | 
 |  |  |         { | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 //è·åæå®äº§ååºåçæ¬ | 
 |  |  |                 List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId) | 
 |  |  |                 .Where((master, detail) => master.WarehouseId == warehouseId && detail.ProductCode== scrapProCode) | 
 |  |  |                 .Select((master, detail) => detail) | 
 |  |  |                 .ToList(); | 
 |  |  |                 //è¿æ»¤éå¤ | 
 |  |  |                 List<string> productVersion = proStockInfoDetails.Select(x => x.ProductVersion).Distinct().ToList(); | 
 |  |  |                 return WebResponseContent.Instance.OK("æå",data: productVersion); | 
 |  |  |             } | 
 |  |  |             catch (Exception ex) | 
 |  |  |             { | 
 |  |  |                 return WebResponseContent.Instance.Error(ex.Message); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public WebResponseContent GetProLotNoByCode(string scrapProCode, int warehouseId) | 
 |  |  |         { | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 //è·åæå®äº§ååºåæ¹æ¬¡ | 
 |  |  |                 List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId) | 
 |  |  |                 .Where((master, detail) => master.WarehouseId == warehouseId && detail.ProductCode == scrapProCode) | 
 |  |  |                 .Select((master, detail) => detail) | 
 |  |  |                 .ToList(); | 
 |  |  |                 //è¿æ»¤éå¤ | 
 |  |  |                 List<string> lotNumber = proStockInfoDetails.Select(x => x.LotNumber).Distinct().ToList(); | 
 |  |  |                 return WebResponseContent.Instance.OK("æå", data: lotNumber); | 
 |  |  |             } | 
 |  |  |             catch (Exception ex) | 
 |  |  |             { | 
 |  |  |                 return WebResponseContent.Instance.Error(ex.Message); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } |