Beispiel #1
0
    public static void CRON()
    {
        using (var bridge = ParserPool.Acquire(Database.Client))
        {
            //0. RevenueShareAdsWatched yesterday
            string RevenueShareAdsWatchedCommand = @"
            UPDATE Users 
            SET RevenueShareAdsWatchedYesterday = (
            CASE WHEN Users.RSAAdsViewed = '-1'
            THEN -1
            ELSE len(Users.RSAAdsViewed) - len(replace(Users.RSAAdsViewed, '#', ''))
            END
            ) + 1
            ";
            bridge.Instance.ExecuteRawCommandNonQuery(RevenueShareAdsWatchedCommand);
        }

        using (var bridge = ParserPool.Acquire(Database.Client))
        {
            //1. Credit new Referral Reward
            CreditForNewReferrals();

            //2. Delete watched ads & TrafficGrid and other
            string resetDailyStatsCommand = "UPDATE Users SET " + Member.Columns.ViewedAds + " = '-1', "
                                            + Member.Columns.TrafficGridHitsToday + " = 0, PointsToday = 0, PointsCreditedForVideoToday = 0, PointsCreditedForSearchToday = 0, CPACompletedToday = 0, CompletedDailyCPAOffersToday = '-1', CompletedOffersFromOfferwallsToday = 0, MatrixBonusMoneyCyclesToday = 0, CompletedOffersMoreThan100pFromOfferwallsToday = 0, FbLikesToday = 0";

            if (AppSettings.RevShare.DistributionTime != DistributionTimePolicy.EveryWeek ||
                AppSettings.ServerTime.DayOfWeek == AppSettings.RevShare.DayOfWeekDistribution)
            {
                resetDailyStatsCommand += ", RSAAdsViewed = '-1'";
            }

            bridge.Instance.ExecuteRawCommandNonQuery(resetDailyStatsCommand);
        }

        //3. Recalculate Statistics
        RecalculateStatistics(Member.Columns.StatsEarned, true);
        RecalculateStatistics(Member.Columns.StatsClicks, false);
        RecalculateStatistics(Member.Columns.UserClicksStats, false);
        RecalculateStatistics("RawDirectReferralsClicks", false);
        RecalculateStatistics("RawRentedReferralsClicks", false);
        RecalculateStatistics("StatsDirectReferralsEarned", true);
        RecalculateStatistics("StatsPointsEarned", false);
        RecalculateStatistics("StatsDirectReferralsPointsEarned", false);
        RecalculateStatistics("StatsDRAdPacksEarned", true);
        RecalculateStatistics("StatsCashLinksEarned", true);
        RecalculateStatistics("StatsDRCashLinksEarned", true);

        using (var bridge = ParserPool.Acquire(Database.Client))
        {
            //4. Mark inactive ones
            string Command = string.Format(@"UPDATE Users SET {0} = {2}, AccountStatus = 'Expired'
            WHERE Username <> 'admin'
            AND {0} = {3} 
            AND (
		            (
			            (LastLoginDate IS NOT NULL 
			            AND DATEADD (day, {1}, LastLoginDate) < GETDATE()) 
		            OR 
			            (LastLoginDate IS NULL 
			            AND DATEADD (day, {1}, RegisterDate) < GETDATE())
		            )
	            AND (
			            (VacationModeEnds IS NULL) 
		            OR 
			            (DATEADD (day, {1}, VacationModeEnds) < GETDATE())
		            )
            )", "AccountStatusInt", AppSettings.Misc.DaysToInactivity, (int)MemberStatus.Expired, (int)MemberStatus.Active);

            bridge.Instance.ExecuteRawCommandNonQuery(Command);


            //5. Upgrade expiration
            var upgradeExpiredMembersQuery = "SELECT * FROM Users WHERE UpgradeExpires IS NOT NULL AND UpgradeExpires < GETDATE()";
            var upgradeExpiredMembers      = TableHelper.GetListFromRawQuery <Member>(upgradeExpiredMembersQuery);
            foreach (Member user in upgradeExpiredMembers)
            {
                DateTime membershipExpires = (DateTime)user.MembershipExpires;
                var      dateWhenReferralsWillBeResolved = membershipExpires.AddDays(AppSettings.Referrals.ResolveReferralsAfterSpecifiedDays);

                if (dateWhenReferralsWillBeResolved <= DateTime.Now)
                {
                    user.ResolveReferralsLimitDate = null;
                    user.Downgrade();
                }
                else
                {
                    user.ResolveReferralsLimitDate = dateWhenReferralsWillBeResolved;
                    user.Downgrade(false);
                }
                History.AddUpgradeExpiration(user.Name, user.MembershipName);
            }

            var usersWhoCouldHaveTooManyReferralsQuery = string.Format("SELECT * FROM {0} WHERE {1} IS NOT NULL AND {1} <= GETDATE()",
                                                                       Member.TableName, Member.Columns.ResolveReferralsLimitDate, AppSettings.Referrals.ResolveReferralsAfterSpecifiedDays);
            var usersWhoCouldHaveTooManyReferrals = TableHelper.GetListFromRawQuery <Member>(usersWhoCouldHaveTooManyReferralsQuery);
            foreach (var user in usersWhoCouldHaveTooManyReferrals)
            {
                user.ResolveReferralsLimitDate = null;
                user.SaveMembership();
                user.ResolveReferralLimits(user.Membership);
            }

            DateTime DateNow = DateTime.Now;

            //6 Vacation mode expiration
            string VacationModeExpiredCommand = "UPDATE Users SET LastActivityTime = GETDATE(), AccountStatusInt = " + (int)MemberStatus.Active + ", AccountStatus = 'Active' WHERE VacationModeEnds IS NOT NULL AND VacationModeEnds < GETDATE() AND AccountStatusInt = " + (int)MemberStatus.VacationMode;
            bridge.Instance.ExecuteRawCommandNonQuery(VacationModeExpiredCommand);

            //7. RemovalReferrals
            Member.DeleteReferralsCRON();

            //8. Inactivity fee:
            if (AppSettings.VacationAndInactivity.InactivityChargePerDay > Money.Zero)
            {
                try
                {
                    string InactivityUpdateCommand = string.Format("UPDATE Users SET Balance1 = Balance1 - {0}", AppSettings.VacationAndInactivity.InactivityChargePerDay.ToClearString());
                    string InactivitySelectCommand = "SELECT * FROM Users";
                    string InactivityCondition     = string.Format(" WHERE (LastActivityTime IS NOT NULL AND LastActivityTime < '{0}') AND AccountStatusInt = {1}",
                                                                   DateNow.AddDays(-AppSettings.VacationAndInactivity.DaysToInactivityCharge).ToDBString(), (int)MemberStatus.Active);
                    BalanceLogManager.GlobalMemberAdjustHelper(bridge.Instance, InactivitySelectCommand, InactivityUpdateCommand, InactivityCondition, "Inactivity fee", AppSettings.VacationAndInactivity.InactivityChargePerDay, BalanceLogType.Other);
                }
                catch (Exception ex)
                {
                    ErrorLogger.Log(ex);
                }
            }

            if (DateNow.Day == 1)
            {
                bridge.Instance.ExecuteRawCommandNonQuery("UPDATE Users SET PtcAutoSurfClicksThisMonth = 0;");
            }

            DowngradeMembersLevels();

            //Automatically reject all payout requests from banned members
            //We are doing it to properly calculate 'CheckMaxValueOfPendingRequestsPerDay' for payment processors
            var PayoutRequestsToReject = TableHelper.GetListFromRawQuery <PayoutRequest>(PayoutRequest.GetPayoutRequestsSQLQuery(true));
            foreach (var request in PayoutRequestsToReject)
            {
                PayoutManager.RejectRequest(request);
            }
        }

        //9. Commissions Income Statistics
        //WEEKLY
        if (AppSettings.ServerTime.DayOfWeek == DayOfWeek.Sunday)
        {
            TableHelper.ExecuteRawCommandNonQuery("UPDATE Users SET StatsCommissionsLastWeekIncome = StatsCommissionsCurrentWeekIncome, StatsCommissionsCurrentWeekIncome = 0");
        }
        //MONTHLY
        if (AppSettings.ServerTime.Day == DateTime.DaysInMonth(AppSettings.ServerTime.Year, AppSettings.ServerTime.Month))
        {
            TableHelper.ExecuteRawCommandNonQuery("UPDATE Users SET StatsCommissionsLastMonthIncome = StatsCommissionsCurrentMonthIncome, StatsCommissionsCurrentMonthIncome = 0");
        }
    }