using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using WIDESEA_Cache; namespace WIDESEA_StorageBasicServices.Stock { public class StockInfoTimeoutService : ServiceBase, IStockInfoTimeoutService { private readonly ISimpleCacheService _simpleCacheService; private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository; public StockInfoTimeoutService(IStockInfoRepository BaseDal, ISimpleCacheService simpleCacheService, ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository) : base(BaseDal) { _simpleCacheService = simpleCacheService; _locationStatusChangeRecordRepository = locationStatusChangeRecordRepository; } public override PageGridData GetPageData(PageDataOptions options) { string wheres = ValidatePageOptions(options); //获取排序字段 Dictionary orderbyDic = GetPageDataSort(options, TProperties); List orderByModels = new List(); foreach (var item in orderbyDic) { OrderByModel orderByModel = new() { FieldName = item.Key, OrderByType = item.Value }; orderByModels.Add(orderByModel); } int totalCount = 0; List searchParametersList = new List(); if (!string.IsNullOrEmpty(options.Wheres)) { try { searchParametersList = options.Wheres.DeserializeObject>(); options.Filter = searchParametersList; } catch { } } Expression> locationStatus = null; Expression> roadwayNo = null; Expression> materielCode = null; foreach (var item in searchParametersList) { if (item.Name.Contains("locationStatus")) { locationStatus = x => x.LocationInfo.LocationStatus == Convert.ToInt32(item.Value); } else if (item.Name.Contains("roadwayNo")) { roadwayNo = x => x.LocationInfo.RoadwayNo.Contains(item.Value); } else if (item.Name.Contains("materielCode")) { materielCode = x => x.StockInfoDetails.Any(d => d.MaterielCode.Contains(item.Value)); } } var now = DateTime.Now; // 使用Subtract方法 var threeHoursAgo = now.Subtract(TimeSpan.FromHours(3)); var data = BaseDal.Db.Queryable() .Includes(x => x.StockInfoDetails) .Includes(x => x.LocationInfo) .Where(x => x.OutboundTime < threeHoursAgo) .WhereIF(!wheres.IsNullOrEmpty(), wheres) .WhereIF(locationStatus != null, locationStatus) .WhereIF(roadwayNo != null, roadwayNo) .WhereIF(materielCode != null, materielCode) .OrderBy(orderByModels) .ToPageList(options.Page, options.Rows, ref totalCount); return new PageGridData(totalCount, data); } } }