示例#1
0
        public void ComUserDurationSet(int CommunityId, int UserId, int Duration, bool AddToPrevious)
        {
            if (!Manager.IsInTransaction())
            {
                Manager.BeginTransaction();
            }

            Domain.SubscriptionExpiration expiration = Manager.GetAll <Domain.SubscriptionExpiration>(exp =>
                                                                                                      exp.Deleted == BaseStatusDeleted.None &&
                                                                                                      exp.CommunityId == CommunityId &&
                                                                                                      exp.PersonId == UserId)
                                                       .OrderByDescending(exp => exp.CreatedOn)
                                                       .FirstOrDefault();

            if (expiration == null || expiration.Id <= 0)
            {
                expiration = new Domain.SubscriptionExpiration();
                expiration.CreateMetaInfo(Manager.GetLitePerson(UC.CurrentUserID), UC.IpAddress, UC.ProxyIpAddress);
                expiration.PersonId    = UserId;
                expiration.CommunityId = UC.CurrentCommunityID;
            }
            else
            {
                expiration.UpdateMetaInfo(Manager.GetLitePerson(UC.CurrentUserID), UC.IpAddress, UC.ProxyIpAddress);
            }

            if (AddToPrevious && Duration >= 0)
            {
                expiration.Duration += Duration;
            }
            else
            {
                expiration.Duration = Duration;
            }

            //if (expiration.StartDate != null)
            //{
            //    expiration.EndDate = expiration.StartDate + new TimeSpan(Duration, 0, 0, 0);
            //}

            bool saved = false;

            try
            {
                Manager.SaveOrUpdate <Domain.SubscriptionExpiration>(expiration);
                Manager.Commit();
                saved = true;
            }  catch (Exception ex)
            {
                Manager.RollBack();
            }

            if (saved)
            {
                CacheHelper.UserReset(UserId);
            }
        }
示例#2
0
        public void ComUserStartUpdate(int CommunityId, IList <int> UsersId, bool Start)
        {
            if (!Manager.IsInTransaction())
            {
                Manager.BeginTransaction();
            }

            IList <Domain.SubscriptionExpiration> expirations = new List <Domain.SubscriptionExpiration>();

            UsersId = UsersId.Distinct().ToList();

            int counter = UsersId.Count;

            if (counter > 500)
            {
                int block = (counter / 500) + 1;

                for (int curblock = 0; curblock < block; curblock++)
                {
                    IList <int> currentId = UsersId.Skip(500 * curblock).Take(500).ToList();
                    IList <Domain.SubscriptionExpiration> curExps = Manager.GetAll <Domain.SubscriptionExpiration>(se => currentId.Contains(se.PersonId));
                    expirations = expirations.Union(curExps).ToList();
                }

                expirations = expirations.Distinct().ToList();
            }
            else
            {
                expirations = Manager.GetAll <Domain.SubscriptionExpiration>(exp =>
                                                                             exp.Deleted == BaseStatusDeleted.None &&
                                                                             exp.CommunityId == CommunityId &&
                                                                             UsersId.Contains(exp.PersonId));
            }

            IList <int> settedUsersId   = expirations.Select(exp => exp.PersonId).Distinct().ToList();
            IList <int> unSettedUsersId = UsersId.Except(settedUsersId).ToList();

            if (unSettedUsersId != null && unSettedUsersId.Any())
            {
                foreach (int UserIdNotSet in unSettedUsersId)
                {
                    Domain.SubscriptionExpiration expiration = new Domain.SubscriptionExpiration();
                    expiration.CreateMetaInfo(Manager.GetLitePerson(UC.CurrentUserID), UC.IpAddress, UC.ProxyIpAddress);
                    expiration.CommunityId = CommunityId;
                    expiration.PersonId    = UserIdNotSet;

                    Domain.dtoUserExpiration exp = ComUserDurationGet(CommunityId, UserIdNotSet);
                    expiration.Duration = exp.Duration;

                    expirations.Add(expiration);
                }
            }

            DateTime StartDt = DateTime.Now;

            foreach (Domain.SubscriptionExpiration exp in expirations)
            {
                if (Start && exp.Duration >= 0)
                {
                    exp.StartDate = StartDt;
                    //exp.EndDate = StartDt.AddDays(exp.Duration);
                }
                else
                {
                    exp.StartDate = null;
                    //exp.EndDate = null;
                }
            }

            bool saved = false;

            try
            {
                Manager.SaveOrUpdateList <Domain.SubscriptionExpiration>(expirations);
                Manager.Commit();
                saved = true;
            }
            catch
            {
                Manager.RollBack();
            }

            if (saved)
            {
                CacheHelper.UserReset();
            }
        }