using Microsoft.IdentityModel.Tokens; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.Helper; using WIDESEA_IBasicRepository; using WIDESEA_IStockRepository; using WIDESEA_Model.Models; namespace WIDESEA_StockRepository { public class ProStockInfoRepository : RepositoryBase, IProStockInfoRepository { private readonly IBasicRepository _basicRepository; public ProStockInfoRepository(IUnitOfWorkManage unitOfWorkManage,IBasicRepository basicRepository) : base(unitOfWorkManage) { _basicRepository = basicRepository; } //根据明细数据查找可用库存库存 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); ////判断客户出入规则 //Dt_CustomerInfo customerInfo = _basicRepository.CustomerInfoRepository.QueryFirst(x=>x.Code== proOutOrderDetail.Customer); //if (customerInfo==null) //{ // throw new Exception("未找到客户信息"); //} //if (customerInfo.OutRule==CustomerOutRuleEnum.SaleOrderRule.ObjToInt()) //{ // 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.BagNo == proOutOrderDetail.PLot) // && (isCanDate ? isCanDate : v.DateCode == proOutOrderDetail.DateCode) // )) // .ToList(); //} //else //{ proStockInfos = Db.Queryable().Where(x => locationInfos.Contains(x.LocationCode) && x.ProStockAttribute == ProStockAttributeEnum.成品.ObjToInt()) .Includes(x => x.proStockInfoDetails) .Where(x => x.proStockInfoDetails .Any(v => v.ProductCode == proOutOrderDetail.PCode && v.ProductVersion == proOutOrderDetail.PVer && (isCanLot ? isCanLot : v.BagNo == proOutOrderDetail.PLot) && (isCanDate ? isCanDate : v.DateCode == proOutOrderDetail.DateCode) )) .ToList(); //} proStockInfos = proStockInfos?.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.DateCode).ThenBy(x=>x.CreateDate).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; } } }