using MailKit.Search; using Microsoft.AspNetCore.Http; using SqlSugar; using System; using System.Collections.Generic; using System.Drawing.Printing; using System.Dynamic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEA_Common; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_Core.Utilities; using WIDESEA_DTO.Stock; using WIDESEA_IBasicRepository; using WIDESEA_IStockRepository; using WIDESEA_IStockService; using WIDESEA_Model.Models; namespace WIDESEA_StockService { public partial class StockViewService : IStockViewService { private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly IStockRepository _stockRepository; private readonly SqlSugarClient _dbBase; public StockViewService(IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository) { _unitOfWorkManage = unitOfWorkManage; _dbBase = unitOfWorkManage.GetDbClient(); _stockRepository = stockRepository; } public virtual PageGridData GetPageData(PageDataOptions options) { #region MyRegion try { List stockViewDTOs = new List(); string where = string.Empty; ISugarQueryable sugarQueryable1 = _dbBase.Queryable().Includes(x => x.Details); 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.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value))); } } { SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower()); if (searchParameters != null) { sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.BatchNo.Contains(searchParameters.Value))); } } } } catch { } } //string whereSto = GetDataRole(typeof(Dt_StockInfo)); sugarQueryable1 = sugarQueryable1.Where("1 = 1"); EntityProperties.ValidatePageOptions(options, ref sugarQueryable1); //string whereLo = GetDataRole(typeof(Dt_LocationInfo)); ISugarQueryable sugarQueryable = _dbBase.Queryable().Where("1 = 1"); EntityProperties.ValidatePageOptions(options, ref sugarQueryable); ISugarQueryable list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).Select((b, a) => 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, }); int totalCount = 0; stockViewDTOs = list.ToPageList(options.Page, options.Rows, ref totalCount); return new PageGridData(totalCount, stockViewDTOs); } catch (Exception ex) { return new PageGridData(); } #endregion #region MyRegion //string where = options.ValidatePageOptions(typeof(StockViewDTO).GetProperties()); ////获取排序字段 ////Dictionary orderbyDic = options.GetPageDataSort(typeof(StockViewDTO).GetProperties()); ////List orderByModels = new List(); ////foreach (var item in orderbyDic) ////{ //// OrderByModel orderByModel = new OrderByModel() //// { //// FieldName = item.Key, //// OrderByType = item.Value //// }; //// orderByModels.Add(orderByModel); ////} //int totalCount = 0; //ISugarQueryable sugarQueryable1 = _dbBase.Queryable(); //ISugarQueryable sugarQueryable = _dbBase.Queryable(); //List list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).WhereIF(!string.IsNullOrEmpty(where), where).Select((b, a) => new StockViewDTO //{ // AreaId = a.AreaId, // LocationCode = b.LocationCode, // Column = a.Column, // CreateDate = b.CreateDate, // Creater = b.Creater, // Depth = a.Depth, // EnalbeStatus = a.EnableStatus, // IsFull = b.IsFull, // 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, //}).ToPageList(options.Page, options.Rows, ref totalCount); //return new PageGridData(totalCount, list); #endregion } public virtual WebResponseContent GetLocationStockView(int Layer) { WebResponseContent content = new WebResponseContent(); try { List locationStockViews = new List(); ISugarQueryable sugarQueryable = _dbBase.Queryable(); List dt_LocationInfos = sugarQueryable.ToList(); ISugarQueryable sugarQueryable1 = _dbBase.Queryable().Where(x => dt_LocationInfos.Select(x => x.LocationCode).ToList().Contains(x.LocationCode)).Includes(x => x.Details); List StockInfos = sugarQueryable1.OrderBy(x => x.InDate).ToList(); foreach (var dt_LocationInfo in dt_LocationInfos) { LocationStockView locationStockView = new LocationStockView() { AreaId = dt_LocationInfo.AreaId, Column = dt_LocationInfo.Column, Depth = dt_LocationInfo.Depth, EnalbeStatus = dt_LocationInfo.EnableStatus, Layer = dt_LocationInfo.Layer, LocationCode = dt_LocationInfo.LocationCode, LocationName = dt_LocationInfo.LocationName, LocationStatus = dt_LocationInfo.LocationStatus, LocationType = dt_LocationInfo.LocationType, RoadwayNo = dt_LocationInfo.RoadwayNo, Row = dt_LocationInfo.Row }; List dt_StockInfos = StockInfos.Where(x => x.LocationCode == dt_LocationInfo.LocationCode).ToList(); List Details = new List(); foreach (var item in dt_StockInfos) { Details.AddRange(item.Details); } var BatchNo = string.Join(",", Details.GroupBy(x => x.BatchNo).Select(x => x.Key).ToList()); if (dt_StockInfos.Count > 0 && dt_StockInfos != null) { locationStockView.BatchNo = BatchNo; locationStockView.InDate = dt_StockInfos.OrderByDescending(x => x.InDate).First().InDate; locationStockView.MaterielCode = dt_StockInfos.First().Details.First().MaterielCode; locationStockView.MaterielName = dt_StockInfos.First().Details.First().MaterielName; locationStockView.OrderNo = dt_StockInfos.First().Details.First().OrderNo; locationStockView.PalletCode = string.Join(",", dt_StockInfos.Select(x => x.PalletCode).ToList()); locationStockView.Quantity = dt_StockInfos.Count; } locationStockViews.Add(locationStockView); } if (locationStockViews.Count > 0) { #region MyRegion List layers = new List(); foreach (var layer in locationStockViews.GroupBy(x => x.Layer)) { var rows = new List(); var data_rows = layer.GroupBy(t => t.Row); foreach (var data_row in data_rows) { rows.Add(new LocationRow() { index = data_row.Key, cols = data_row.OrderBy(x => x.Column).ToList() }); } //rows=rows.OrderBy(x=>x.index).ToList(); layers.Add(new LocationLayer() { index = layer.Key, rows = rows }); } #endregion layers = layers.OrderBy(x => x.index).ToList(); content.OK(data: layers); } } catch (Exception ex) { content.Error(ex.Message); } return content; } public virtual object GetDetailPage(PageDataOptions pageData) { Type t = typeof(StockViewDTO); if (pageData.Value == null) return new PageGridData(total: 0, null); string keyName = t.GetKeyName(); ////生成查询条件 //Expression> whereExpression = keyName.CreateExpression(pageData.Value, LinqExpressionType.Equal); int totalCount = 0; PropertyInfo? propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute() != null); if (propertyInfo != null) { Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0]; Navigate? navigate = propertyInfo.GetCustomAttribute(); if (navigate != null) { List list = _dbBase.Queryable(detailType.Name, "detail").Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount); return new PageGridData(totalCount, list); } } return new PageGridData(total: 0, null); } } }