| | |
| | | { |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly SqlSugarClient _dbBase; |
| | | private readonly IRepository<Dt_StockInfoDetail> _stockInfoDetailRepository; |
| | | |
| | | public StockDetailByMaterielService(IUnitOfWorkManage unitOfWorkManage) |
| | | public StockDetailByMaterielService(IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _dbBase = unitOfWorkManage.GetDbClient(); |
| | | _stockInfoDetailRepository = stockInfoDetailRepository; |
| | | } |
| | | |
| | | |
| | |
| | | { |
| | | try |
| | | { |
| | | |
| | | List<StockDetailByMateriel> materielnfoStatistics = new List<StockDetailByMateriel>(); |
| | | ISugarQueryable<Dt_StockInfoDetail> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfoDetail>(); |
| | | |
| | | ISugarQueryable<Dt_StockInfo> sugarQueryable = _dbBase.Queryable<Dt_StockInfo>(); |
| | | ISugarQueryable<Dt_MaterielInfo> sugarQueryable3 = _dbBase.Queryable<Dt_MaterielInfo>(); |
| | | |
| | | if (!string.IsNullOrEmpty(options.Wheres)) |
| | | { |
| | | try |
| | |
| | | List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>(); |
| | | if (searchParametersList.Count > 0) |
| | | { |
| | | |
| | | SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielCode.Contains(searchParameters.Value)); |
| | | } |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielCode.Contains(searchParameters.Value)); |
| | | } |
| | | |
| | | searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.WarehouseCode).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.WarehouseId).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable = sugarQueryable.Where(x => x.WarehouseId.Equals(searchParameters.Value)); |
| | | } |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.WarehouseCode.Contains(searchParameters.Value)); |
| | | } |
| | | |
| | | searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielName).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.StockStatus).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable = sugarQueryable.Where(x => x.StockStatus.Equals(searchParameters.Value)); |
| | | } |
| | | |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielName.Contains(searchParameters.Value)); |
| | | } |
| | | |
| | | searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielName).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielName.Contains(searchParameters.Value)); |
| | | } |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.BatchNo.Contains(searchParameters.Value)); |
| | | } |
| | | |
| | | searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.SupplyCode).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.SupplyCode.Contains(searchParameters.Value)); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | ISugarQueryable<StockDetailByMateriel> sugarQueryable2 = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => b.StockId == a.Id).Where((b, a) => a.LocationCode != "" && a.LocationCode != null).Select((b, a) |
| | | => new StockDetailByMateriel |
| | | ISugarQueryable<StockDetailByMateriel> sugarQueryable2 = sugarQueryable1 |
| | | .InnerJoin(sugarQueryable, (detail, stock) => detail.StockId == stock.Id) |
| | | .LeftJoin(sugarQueryable3, (detail, stock, materiel) => detail.MaterielCode == materiel.MaterielCode) |
| | | .Where((detail, stock, materiel) => !string.IsNullOrEmpty(stock.LocationCode)) |
| | | .Select((detail, stock, materiel) => new StockDetailByMateriel |
| | | { |
| | | StockId = b.StockId, |
| | | MaterielCode = b.MaterielCode, |
| | | MaterielName = b.MaterielName, |
| | | StockQuantity = (decimal)b.StockQuantity, |
| | | OutboundQuantity = (decimal)b.OutboundQuantity, |
| | | OrderNo = b.OrderNo, |
| | | BatchNo = b.BatchNo, |
| | | SerialNumber = b.SerialNumber, |
| | | SupplyCode = b.SupplyCode, |
| | | WarehouseCode = b.WarehouseCode, |
| | | Barcode = b.Barcode, |
| | | Unit = b.Unit, |
| | | Creater = b.Creater, |
| | | CreateDate= b.CreateDate, |
| | | Modifier = b.Modifier, |
| | | ModifyDate = b.ModifyDate, |
| | | Remark = a.Remark, |
| | | |
| | | StockId = detail.StockId, |
| | | MaterielCode = detail.MaterielCode, |
| | | MaterielName = materiel.MaterielName ==null ?detail.MaterielName:materiel.MaterielName, |
| | | StockQuantity = (decimal)detail.StockQuantity, |
| | | OutboundQuantity = (decimal)detail.OutboundQuantity, |
| | | OrderNo = detail.OrderNo, |
| | | BatchNo = detail.BatchNo, |
| | | SerialNumber = detail.SerialNumber, |
| | | SupplyCode = detail.SupplyCode, |
| | | WarehouseCode = detail.WarehouseCode, |
| | | Barcode = detail.Barcode, |
| | | Unit = detail.Unit, |
| | | Creater = detail.Creater, |
| | | CreateDate = detail.CreateDate, |
| | | Modifier = detail.Modifier, |
| | | ModifyDate = detail.ModifyDate, |
| | | Remark = stock.Remark |
| | | }); |
| | | // è·åæææ°æ® |
| | | |
| | | |
| | | var allData = sugarQueryable2.ToList(); |
| | | |
| | | // 使ç¨åå
¸è¿è¡åç»æ±æ» |
| | | |
| | | var groupedData = new Dictionary<string, StockDetailByMateriel>(); |
| | | foreach (var item in allData) |
| | | { |
| | | // ç¡®ä¿åå§å¼ä¸ºdecimalç±»å |
| | | if (groupedData.ContainsKey(item.MaterielCode)) |
| | | string groupKey = $"{item.MaterielCode}|{item.SupplyCode}|{item.BatchNo}|{item.WarehouseCode}"; |
| | | |
| | | if (groupedData.ContainsKey(groupKey)) |
| | | { |
| | | groupedData[item.MaterielCode].StockQuantity += Convert.ToDecimal(item.StockQuantity); |
| | | groupedData[item.MaterielCode].OutboundQuantity += Convert.ToDecimal(item.OutboundQuantity); |
| | | groupedData[groupKey].StockQuantity += Convert.ToDecimal(item.StockQuantity); |
| | | groupedData[groupKey].OutboundQuantity += Convert.ToDecimal(item.OutboundQuantity); |
| | | } |
| | | else |
| | | { |
| | | groupedData[item.MaterielCode] = new StockDetailByMateriel |
| | | groupedData[groupKey] = new StockDetailByMateriel |
| | | { |
| | | StockId = item.StockId, |
| | | MaterielCode = item.MaterielCode, |
| | |
| | | } |
| | | } |
| | | |
| | | // 转æ¢ä¸ºå表 |
| | | materielnfoStatistics = groupedData.Values.ToList(); |
| | | decimal totalStockQuantity = 0; |
| | | if (groupedData.Count > 0) |
| | | { |
| | | totalStockQuantity = groupedData.Values.Sum(x => x.StockQuantity); |
| | | } |
| | | |
| | | // å页å¤ç |
| | | materielnfoStatistics = groupedData.Values.ToList(); |
| | | int startIndex = (options.Page - 1) * options.Rows; |
| | | int endIndex = Math.Min(startIndex + options.Rows, materielnfoStatistics.Count); |
| | | materielnfoStatistics = materielnfoStatistics.GetRange(startIndex, endIndex - startIndex); |
| | | if (startIndex < materielnfoStatistics.Count) |
| | | { |
| | | materielnfoStatistics = materielnfoStatistics.GetRange(startIndex, endIndex - startIndex); |
| | | } |
| | | else |
| | | { |
| | | materielnfoStatistics = new List<StockDetailByMateriel>(); |
| | | } |
| | | |
| | | int count = groupedData.Count; |
| | | |
| | | return new PageGridData<StockDetailByMateriel>(count, materielnfoStatistics); |
| | | |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | return new PageGridData<StockDetailByMateriel>(); |
| | | } |
| | | return new PageGridData<StockDetailByMateriel>(); |
| | | } |
| | | |
| | | public WebResponseContent CalculateStock(string warehouseCode,string materielCode) |
| | | { |
| | | var calculateStock =_stockInfoDetailRepository.QueryData(x => x.WarehouseCode == warehouseCode && x.MaterielCode == materielCode).Sum(x => x.StockQuantity); |
| | | if(calculateStock == 0) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°åºå"); |
| | | } |
| | | return WebResponseContent.Instance.OK(data: calculateStock); |
| | | } |
| | | } |
| | | } |