public IList <UpdateLogView> Find(ISession s) { var projectionsList = new List <IProjection> { Projections.Property("Id").As("Id"), Projections.Property("Addition").As("Addition"), Projections.Property("Commit").As("Commit"), Projections.Property("AppVersion").As("AppVersion"), Projections.Property("ResultSize").As("ResultSize"), Projections.Property("UpdateType").As("UpdateType"), Projections.Property("RequestTime").As("RequestTime"), Projections.Alias(Projections.Conditional(Restrictions.IsNotNull("Log"), Projections.Constant(1), Projections.Constant(0)), "HaveLog"), Projections.Property("u.Id").As("UserId"), Projections.Property("u.Name").As("UserName"), Projections.Property("u.Login").As("Login"), Projections.Property("c.Id").As("ClientId"), Projections.Property("c.Name").As("ClientName"), Projections.SqlProjection("c2_.RegionCode as RegionId", new[] { "RegionId" }, new[] { NHibernateUtil.String }) }; if (UpdateType == Models.Logs.UpdateType.AccessError) { projectionsList.Add(Projections.ProjectionList().Add(Projections.Alias(Projections.SubQuery(DetachedCriteria.For <UpdateLogEntity>("ule") .Add(Restrictions.EqProperty("ue.User", "ule.User")) .Add(Restrictions.Eq("ule.Commit", true)) .Add(Restrictions.In("ule.UpdateType", new object[] { Models.Logs.UpdateType.Accumulative, Models.Logs.UpdateType.Cumulative, Models.Logs.UpdateType.LimitedCumulative, Models.Logs.UpdateType.AutoOrder, Models.Logs.UpdateType.LoadingDocuments })) .Add(Restrictions.GtProperty("ule.RequestTime", "ue.RequestTime")) .SetProjection(Projections.ProjectionList() .Add(Projections.Conditional(Restrictions.Gt( Projections.Count(Projections.Property("ule.Id")), 0), Projections.Constant(1), Projections.Constant(0))))), "OkUpdate"))); } var criteria = s.CreateCriteria <UpdateLogEntity>("ue") .CreateAlias("User", "u", JoinType.InnerJoin) .CreateAlias("u.Client", "c", JoinType.LeftOuterJoin) .SetProjection(projectionsList.ToArray()); if (User != null) { criteria.Add(Restrictions.Eq("User", User)); } if (Client != null) { criteria.Add(Restrictions.Eq("u.Client", Client)); } if (UpdateType != null) { criteria.Add(Restrictions.Eq("UpdateType", UpdateType)); } criteria .Add(Restrictions.Ge("RequestTime", BeginDate)) .Add(Restrictions.Le("RequestTime", EndDate.AddDays(1))); var regionMask = RegionMask; if (regionMask == 0) { regionMask = SecurityContext.Administrator.RegionMask; } else { regionMask = RegionMask & SecurityContext.Administrator.RegionMask; } criteria.Add(Restrictions.Gt(Projections2.BitOr("u.WorkRegionMask", regionMask), 0)); ApplySort(criteria); if (SortBy != "RequestTime") { criteria.AddOrder(Order.Desc("RequestTime")); } var items = criteria.ToList <UpdateLogView>(); var regions = Region.All(s); items.Where(i => i.RegionId != null).Each(i => { var region = regions.FirstOrDefault(r => r.Id == i.RegionId.Value); if (region == null) { return; } i.Region = region.Name; }); if (String.Equals(SortBy, "Region", StringComparison.OrdinalIgnoreCase)) { if (IsDesc()) { items = items.OrderByDescending(i => i.Region).ToList(); } else { items = items.OrderBy(i => i.Region).ToList(); } var bufList = new List <UpdateLogView>(); var groupItems = items.GroupBy(i => i.Region); groupItems.Each(g => bufList.AddRange(g.OrderByDescending(i => i.RequestTime).ToList())); items = bufList; } return(items); }
public IList <Address> Find() { var addresses = DbSession.QueryOver <Address>(); var _report = DbSession.Get <Report>(Report); var reportProperties = _report.ReportType.Properties; var clientCodeEqual = reportProperties.First(rp => rp.PropertyName == "ClientCodeEqual"); var clientCodeNonEqual = reportProperties.First(rp => rp.PropertyName == "ClientCodeNonEqual"); var payerEqual = reportProperties.First(rp => rp.PropertyName == "PayerEqual"); var payerNonEqual = reportProperties.First(rp => rp.PropertyName == "PayerNonEqual"); var regionEqual = reportProperties.First(rp => rp.PropertyName == "RegionEqual"); var regionNonEqual = reportProperties.First(rp => rp.PropertyName == "RegionNonEqual"); var clientCodeProperty = _report.Properties.FirstOrDefault(rp => rp.PropertyType == clientCodeEqual); if (clientCodeProperty != null && clientCodeProperty.Values.Count > 0) { var clientIds = clientCodeProperty.Values.Select(v => Convert.ToUInt32(v.Value)).ToList(); addresses.Where(a => a.Client.Id.IsIn(clientIds)); } var payerCodeProperty = _report.Properties.FirstOrDefault(rp => rp.PropertyType == payerEqual); if (payerCodeProperty != null && payerCodeProperty.Values.Count > 0) { var payerIds = payerCodeProperty.Values.Select(v => Convert.ToUInt32(v.Value)).ToList(); addresses.Where(a => a.Payer.Id.IsIn(payerIds)); } var clientCodeNonProperty = _report.Properties.FirstOrDefault(rp => rp.PropertyType == clientCodeNonEqual); if (clientCodeNonProperty != null && clientCodeNonProperty.Values.Count > 0) { var clientIds = clientCodeNonProperty.Values.Select(v => Convert.ToUInt32(v.Value)).ToList(); addresses.Where(a => !a.Client.Id.IsIn(clientIds)); } var payerNonEqualProperty = _report.Properties.FirstOrDefault(rp => rp.PropertyType == payerNonEqual); if (payerNonEqualProperty != null && payerNonEqualProperty.Values.Count > 0) { var payerIds = payerNonEqualProperty.Values.Select(v => Convert.ToUInt32(v.Value)).ToList(); addresses.Where(a => !a.Payer.Id.IsIn(payerIds)); } var criteria = addresses.RootCriteria .CreateCriteria("Client", "c", JoinType.InnerJoin) .CreateAlias("c.HomeRegion", "r", JoinType.InnerJoin); var regionEqualProperty = _report.Properties.FirstOrDefault(rp => rp.PropertyType == regionEqual); if (regionEqualProperty != null && regionEqualProperty.Values.Count > 0) { var regions = regionEqualProperty.Values.Select(v => Convert.ToUInt64(v.Value)).ToList(); if (regions.Count > 0) { AbstractCriterion projection = Restrictions.Gt(Projections2.BitOr("r.Id", regions[0]), 0); for (int i = 1; i < regions.Count; i++) { projection |= Restrictions.Gt(Projections2.BitOr("r.Id", regions[i]), 0); } criteria.Add(projection); } } var regionNonEqualProperty = _report.Properties.FirstOrDefault(rp => rp.PropertyType == regionNonEqual); if (regionNonEqualProperty != null && regionNonEqualProperty.Values.Count > 0) { var regions = regionNonEqualProperty.Values.Select(v => Convert.ToUInt64(v.Value)).ToList(); if (regions.Count > 0) { AbstractCriterion projection = Restrictions.Gt(Projections2.BitOr("r.Id", regions[0]), 0); for (int i = 1; i < regions.Count; i++) { projection |= Restrictions.Eq(Projections2.BitOr("r.Id", regions[i]), 0); } criteria.Add(projection); } } var thisAddrIds = DbSession.Get <ReportProperty>(ReportPropertyValue).Values.Select(v => Convert.ToUInt64(v.Value)).ToArray(); addresses.Where(a => !a.Id.IsIn(thisAddrIds)); addresses.Where(a => a.Enabled); if (!string.IsNullOrEmpty(addressText)) { addresses.And(Restrictions.On <Address>(l => l.Value).IsLike(addressText, MatchMode.Anywhere)); } ApplySort(addresses.RootCriteria); addresses.RootCriteria.AddOrder(Order.Asc("Value")); if (CurrentPage > 0) { addresses.RootCriteria.SetFirstResult(CurrentPage * PageSize); } addresses.RootCriteria.SetMaxResults(PageSize); var addressList = addresses.List(); _lastRowsCount = addresses.RowCount(); ThisAddress = DbSession.QueryOver <Address>().Where(a => a.Id.IsIn(thisAddrIds)).List(); return(addressList.ToList()); }