using SqlSugar; using System.Dynamic; using System.Reflection; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.DB.Models; using WIDESEA_Core.Helper; using WIDESEA_DTO.Stock; using WIDESEA_IStockService; using WIDESEA_Model.Models; namespace WIDESEA_StockService { public partial class StockViewService : IStockViewService { private readonly SqlSugarClient _dbBase; public StockViewService(IUnitOfWorkManage unitOfWorkManage) { _dbBase = unitOfWorkManage.GetDbClient(); } public virtual PageGridData GetPageData(PageDataOptions options) { string where = options.ValidatePageOptions(typeof(StockViewDTO).GetProperties()); int totalCount = 0; var list = _dbBase.Queryable() .InnerJoin((b, a) => a.LocationCode == b.LocationCode) .WhereIF(!string.IsNullOrEmpty(where), where) .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, }) .ToPageList(options.Page, options.Rows, ref totalCount); return new PageGridData(totalCount, list); } public virtual object GetDetailPage(PageDataOptions pageData) { if (pageData.Value == null) return new PageGridData(total: 0, null); var propertyInfo = typeof(StockViewDTO).GetProperties() .FirstOrDefault(x => x.GetCustomAttribute() != null); if (propertyInfo == null) return new PageGridData(total: 0, null); var detailType = propertyInfo.PropertyType.GetGenericArguments()[0]; var navigate = propertyInfo.GetCustomAttribute(); if (navigate == null) return new PageGridData(total: 0, null); int totalCount = 0; var list = _dbBase.Queryable(detailType.Name, "detail") .Where(navigate.GetName(), "=", pageData.Value) .ToPageList(pageData.Page, pageData.Rows, ref totalCount); return new PageGridData(totalCount, list); } } }