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 { public class StockDetailByMaterielService :IStockDetailByMaterielService { private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly SqlSugarClient _dbBase; public StockDetailByMaterielService(IUnitOfWorkManage unitOfWorkManage) { _unitOfWorkManage = unitOfWorkManage; _dbBase = unitOfWorkManage.GetDbClient(); } public virtual PageGridData GetPageGridData(PageDataOptions options) { try { List materielnfoStatistics = new List(); ISugarQueryable sugarQueryable1 = _dbBase.Queryable(); ISugarQueryable sugarQueryable = _dbBase.Queryable(); if (!string.IsNullOrEmpty(options.Wheres)) { try { List searchParametersList = options.Wheres.DeserializeObject>(); 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_StockInfoDetail.WarehouseCode).FirstLetterToLower()); if (searchParameters != null) { sugarQueryable1 = sugarQueryable1.Where(x => x.WarehouseCode.Contains(searchParameters.Value)); } } { SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielName).FirstLetterToLower()); if (searchParameters != null) { sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielName.Equals(searchParameters.Value)); } } { SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower()); if (searchParameters != null) { sugarQueryable1 = sugarQueryable1.Where(x => x.BatchNo.Equals(searchParameters.Value)); } } { SearchParameters? 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 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(); foreach (var item in allData) { string groupKey = $"{item.MaterielCode}|{item.SupplyCode}|{item.BatchNo}|{item.WarehouseCode}"; // 确保初始值为decimal类型 if (groupedData.ContainsKey(groupKey)) { groupedData[groupKey].StockQuantity += Convert.ToDecimal(item.StockQuantity); groupedData[groupKey].OutboundQuantity += Convert.ToDecimal(item.OutboundQuantity); } else { groupedData[groupKey] = 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(count, materielnfoStatistics); } catch (Exception ex) { } return new PageGridData(); } } }