Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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());
        }