using Microsoft.IdentityModel.Tokens; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.StockEnum; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.Helper; using WIDESEA_IStockRepository; using WIDESEA_Model.Models; namespace WIDESEA_StockRepository { public class ProStockInfoRepository : RepositoryBase, IProStockInfoRepository { public ProStockInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage) { } //根据明细数据查找可用库存库存 public List GetProStocks(Dt_ProOutOrderDetail proOutOrderDetail,List locationInfos) { List? proStockInfos = null; bool isCanLot= string.IsNullOrEmpty(proOutOrderDetail.PLot); bool isCanDate = string.IsNullOrEmpty(proOutOrderDetail.DateCode); bool isCanVer = string.IsNullOrEmpty(proOutOrderDetail.OutSpecifyVer); proStockInfos = Db.Queryable().Where(x => locationInfos.Contains(x.LocationCode) && x.ProStockAttribute == ProStockAttributeEnum.成品.ObjToInt()) .Includes(x => x.proStockInfoDetails) .Where(x => x.proStockInfoDetails .Any(v => v.SaleOrder == proOutOrderDetail.SaleOrder && v.ProductCode == proOutOrderDetail.PCode && v.ProductVersion == proOutOrderDetail.PVer && (isCanLot ? isCanLot : v.LotNumber == proOutOrderDetail.PLot) && (isCanDate ? isCanDate : v.DateCode == proOutOrderDetail.DateCode) )) .ToList(); proStockInfos = proStockInfos.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.DateCode).ThenBy(x=>x.proStockInfoDetails.Sum(x=>x.StockPcsQty)).ToList(); return proStockInfos; } /// /// 获取MES提库库存(尾数仓) /// /// /// /// public List GetProStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder, List locationInfos) { List? proStockInfos = null; bool isCanDate = string.IsNullOrEmpty(mesRworkOutboundOrder.DateCode); proStockInfos = Db.Queryable().Where(x => locationInfos.Contains(x.LocationCode) && x.ProStockAttribute==ProStockAttributeEnum.尾数.ObjToInt()) .Includes(x => x.proStockInfoDetails) .Where(x => x.proStockInfoDetails .Any(v => v.SaleOrder == mesRworkOutboundOrder.SaleOrder && v.ProductCode == mesRworkOutboundOrder.ProductCode && v.ProductVersion == mesRworkOutboundOrder.ProductVersion && (isCanDate ? isCanDate : v.DateCode == mesRworkOutboundOrder.DateCode) )) .ToList(); proStockInfos = proStockInfos.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.DateCode).ThenBy(x => x.proStockInfoDetails.Sum(x => x.StockPcsQty)).ToList(); return proStockInfos; } } }