| | |
| | | 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; |
| | | private readonly IRepository<Dt_StockInfoDetail> _stockInfoDetailRepository; |
| | | |
| | | public StockDetailByMaterielService(IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _dbBase = unitOfWorkManage.GetDbClient(); |
| | | _stockInfoDetailRepository = stockInfoDetailRepository; |
| | | } |
| | | |
| | | |
| | | 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>(); |
| | | 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) |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielCode.Contains(searchParameters.Value)); |
| | | } |
| | | |
| | | searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.WarehouseCode).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.WarehouseCode.Contains(searchParameters.Value)); |
| | | } |
| | | |
| | | searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielName).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielName.Contains(searchParameters.Value)); |
| | | } |
| | | |
| | | searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | 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, (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 = 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) |
| | | { |
| | | string groupKey = $"{item.MaterielCode}|{item.SupplyCode}|{item.BatchNo}|{item.WarehouseCode}"; |
| | | |
| | | 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 |
| | | }; |
| | | } |
| | | } |
| | | |
| | | 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); |
| | | 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>(); |
| | | } |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | } |