| using Org.BouncyCastle.Crypto; | 
| using SqlSugar; | 
| using SqlSugar.Extensions; | 
| using System; | 
| using System.Collections.Generic; | 
| using System.Linq; | 
| using System.Text; | 
| using System.Threading.Tasks; | 
| using WIDESEA_Common.LocationEnum; | 
| using WIDESEA_Common.StockEnum; | 
| using WIDESEA_Core.BaseRepository; | 
| using WIDESEA_Core.Enums; | 
| using WIDESEA_DTO.Stock; | 
| using WIDESEA_IBasicRepository; | 
| using WIDESEA_IStockRepository; | 
| using WIDESEA_Model.Models; | 
|   | 
| namespace WIDESEA_StockRepository | 
| { | 
|     public class StockInfoRepository : RepositoryBase<Dt_StockInfo>, IStockInfoRepository | 
|     { | 
|         public StockInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage) | 
|         { | 
|         } | 
|   | 
|         public List<StockViewDTO> GetAllStockViews() | 
|         { | 
|             ISugarQueryable<Dt_LocationInfo> sugarQueryable = Db.Queryable<Dt_LocationInfo>(); | 
|             ISugarQueryable<Dt_StockInfo> sugarQueryable1 = Db.Queryable<Dt_StockInfo>(); | 
|   | 
|             return sugarQueryable.InnerJoin(sugarQueryable1, (a, b) => a.LocationCode == b.LocationCode).Select((a, b) => new StockViewDTO | 
|             { | 
|                 LocationCode = b.LocationCode, | 
|                 Column = a.Column, | 
|                 CreateDate = b.CreateDate, | 
|                 Creater = b.Creater, | 
|                 Depth = a.Depth, | 
|                 EnalbeStatus = a.EnableStatus, | 
|                 Layer = a.Layer, | 
|                 LocationName = a.LocationName, | 
|                 LocationStatus = a.LocationStatus, | 
|                 LocationType = a.LocationType, | 
|                 Modifier = b.Modifier, | 
|                 ModifyDate = b.ModifyDate, | 
|                 PalletCode = b.PalletCode, | 
|                 StockRemark = b.Remark, | 
|                 RoadwayNo = a.RoadwayNo, | 
|                 Row = a.Row, | 
|                 StockId = b.Id, | 
|                 StockStatus = b.StockStatus, | 
|                 Details = b.Details, | 
|             }).Includes(x => x.Details).ToList(); | 
|         } | 
|   | 
|         public Dt_StockInfo GetStockInfo(string palletCode) | 
|         { | 
|             return Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First(); | 
|         } | 
|   | 
|         public List<Dt_StockInfo> GetStockInfos(string materielCode) | 
|         { | 
|             return Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList(); | 
|             //ISugarQueryable<Dt_LocationInfo> sugarQueryable = Db.Queryable<Dt_LocationInfo>(); | 
|             //ISugarQueryable<Dt_StockInfo> sugarQueryable1 = Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)); | 
|             //return sugarQueryable.InnerJoin(sugarQueryable1, (a, b) => a.LocationCode == b.LocationCode).Select((a, b) => b).Includes(x => x.Details).ToList(); | 
|         } | 
|   | 
|         public List<Dt_StockInfo> GetStockInfos(string materielCode, string lotNo, List<string> locationCodes) | 
|         { | 
|             if (!string.IsNullOrEmpty(lotNo)) | 
|             { | 
|                 return Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.OrderBy(x=>x.EffectiveDate).Any(v => v.MaterielCode == materielCode && v.BatchNo == lotNo)).ToList(); | 
|             } | 
|             else | 
|             { | 
|                 return Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList(); | 
|             } | 
|   | 
|   | 
|             //ISugarQueryable<Dt_LocationInfo> sugarQueryable = Db.Queryable<Dt_LocationInfo>().Where(x => locationCodes.Contains(x.LocationCode)); | 
|             //ISugarQueryable<Dt_StockInfo> sugarQueryable1 = Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)); | 
|             //return sugarQueryable.InnerJoin(sugarQueryable1, (a, b) => a.LocationCode == b.LocationCode).Select((a, b) => b).OrderBy(a => a.CreateDate).Includes(a => a.Details).ToList(); | 
|         } | 
|   | 
|         public List<Dt_StockInfo> GetStockInfosByIds(List<int> ids) | 
|         { | 
|             return Db.Queryable<Dt_StockInfo>().Where(x => ids.Contains(x.Id)).Includes(x => x.Details).ToList(); | 
|         } | 
|   | 
|         public List<Dt_StockInfo> GetStockInfosByPalletCodes(List<string> palletCodes) | 
|         { | 
|             return Db.Queryable<Dt_StockInfo>().Where(x => palletCodes.Contains(x.PalletCode)).Includes(x => x.Details).ToList(); | 
|         } | 
|   | 
|         public List<Dt_StockInfo> GetStockInfosExclude(string materielCode, List<string> palletCodes) | 
|         { | 
|             return Db.Queryable<Dt_StockInfo>().Where(x => !palletCodes.Contains(x.PalletCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList(); | 
|         } | 
|   | 
|         public bool UpdateDataWithDetail(Dt_StockInfo stockInfo) | 
|         { | 
|             return Db.UpdateNav(stockInfo).Include(x => x.Details).ExecuteCommand(); | 
|         } | 
|     } | 
| } |