| | |
| | | using System; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_DTO.Stock; |
| | | using WIDESEA_IStockService; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_StockService |
| | | { |
| | | internal class StockDetailByMaterielService |
| | | public class StockDetailByMaterielService :IStockDetailByMaterielService |
| | | { |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly SqlSugarClient _dbBase; |
| | | |
| | | public StockDetailByMaterielService(IUnitOfWorkManage unitOfWorkManage) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _dbBase = unitOfWorkManage.GetDbClient(); |
| | | } |
| | | |
| | | |
| | | public virtual PageGridData<StockDetailByMateriel> GetPageGridData(PageDataOptions options) |
| | | { |
| | | try |
| | | { |
| | | |
| | | List<StockDetailByMateriel> materielnfoStatistics = new List<StockDetailByMateriel>(); |
| | | ISugarQueryable<Dt_StockInfoDetail> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfoDetail>(); |
| | | |
| | | ISugarQueryable<Dt_StockInfo> sugarQueryable = _dbBase.Queryable<Dt_StockInfo>(); |
| | | 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) |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielCode.Contains(searchParameters.Value)); |
| | | } |
| | | } |
| | | { |
| | | SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.WarehouseId).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable = sugarQueryable.Where(x => x.WarehouseId.Equals(searchParameters.Value)); |
| | | } |
| | | } |
| | | { |
| | | SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.StockStatus).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable = sugarQueryable.Where(x => x.StockStatus.Equals(searchParameters.Value)); |
| | | } |
| | | } |
| | | { |
| | | SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielName).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielName.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 |
| | | { |
| | | 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, |
| | | |
| | | }); |
| | | // è·åæææ°æ® |
| | | var allData = sugarQueryable2.ToList(); |
| | | |
| | | // 使ç¨åå
¸è¿è¡åç»æ±æ» |
| | | var groupedData = new Dictionary<string, StockDetailByMateriel>(); |
| | | foreach (var item in allData) |
| | | { |
| | | // ç¡®ä¿åå§å¼ä¸ºdecimalç±»å |
| | | if (groupedData.ContainsKey(item.MaterielCode)) |
| | | { |
| | | groupedData[item.MaterielCode].StockQuantity += Convert.ToDecimal(item.StockQuantity); |
| | | groupedData[item.MaterielCode].OutboundQuantity += Convert.ToDecimal(item.OutboundQuantity); |
| | | } |
| | | else |
| | | { |
| | | groupedData[item.MaterielCode] = new StockDetailByMateriel |
| | | { |
| | | StockId = item.StockId, |
| | | MaterielCode = item.MaterielCode, |
| | | MaterielName = item.MaterielName, |
| | | StockQuantity = Convert.ToDecimal(item.StockQuantity), |
| | | OutboundQuantity = Convert.ToDecimal(item.OutboundQuantity), |
| | | OrderNo = item.OrderNo, |
| | | BatchNo = item.BatchNo, |
| | | SerialNumber = item.SerialNumber, |
| | | SupplyCode = item.SupplyCode, |
| | | WarehouseCode = item.WarehouseCode, |
| | | Barcode = item.Barcode, |
| | | Creater = item.Creater, |
| | | CreateDate = item.CreateDate, |
| | | Modifier = item.Modifier, |
| | | ModifyDate = item.ModifyDate, |
| | | Unit = item.Unit, |
| | | Remark = item.Remark |
| | | }; |
| | | } |
| | | } |
| | | |
| | | // 转æ¢ä¸ºå表 |
| | | 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); |
| | | |
| | | int count = groupedData.Count; |
| | | |
| | | return new PageGridData<StockDetailByMateriel>(count, materielnfoStatistics); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | return new PageGridData<StockDetailByMateriel>(); |
| | | } |
| | | } |
| | | } |