예제 #1
0
        public static void CreditWriters()
        {
            //Credit
            var amount        = "(SELECT [amount] FROM CTE WHERE CTE.userId = Users.UserId)";
            var updateCommand = String.Format(@"
                                  UPDATE Users SET 
                                    Users.Balance1 = Users.Balance1 + {0},
                                    Users.TotalEarned = Users.TotalEarned + {0},            
                                    Users.StatsEarned = cast(({0}+CONVERT(decimal(19,8),(CAST(SUBSTRING(Users.StatsEarned,0, CHARINDEX('#', Users.StatsEarned)) AS varchar(30))))) as varchar(1000)) + SUBSTRING(Users.StatsEarned,CHARINDEX('#', Users.StatsEarned), 1000)
                                  WHERE Users.UserId IN (SELECT DISTINCT UserId FROM CTE);", amount);

            TableHelper.ExecuteRawCommandNonQuery(GetWritersCTE() + updateCommand);

            //Add Balance Logs
            var balanceLogsCommand = GetWritersCTE() + "SELECT * FROM CTE;";

            BalanceLogManager.AddRange(balanceLogsCommand, "Article writing", BalanceType.MainBalance, BalanceLogType.ArticleWriting);

            //Add Money credited to articles table
            var creditArticlesQuery = @"
                        WITH CTE AS (
	                        SELECT av.ArticleId AS Article, FLOOR((COUNT(av.Id))/1000) AS Quantity, m.ArticleCreatorCPM AS PricePerQuantity FROM ArticleViews av 
		                                            INNER JOIN Articles a ON av.ArticleId = a.Id 
							                        INNER JOIN Users u ON u.UserId = a.CreatorUserId
							                        INNER JOIN Memberships m ON m.MembershipId = u.UpgradeId
		                                            WHERE av.CreatorCredited = 0 
		                                            GROUP BY av.ArticleId, m.ArticleCreatorCPM HAVING FLOOR((COUNT(av.Id))/1000) > 0
                         )

                         UPDATE Articles SET CreatorMoneyEarned = CreatorMoneyEarned + (SELECT Quantity * PricePerQuantity FROM CTE WHERE Articles.Id = CTE.Article) 
                         WHERE Id IN (SELECT DISTINCT Article FROM CTE);";

            TableHelper.ExecuteRawCommandNonQuery(creditArticlesQuery);


            //Mark views as credited
            var query = @"WITH CTE AS
                        (	SELECT av.ArticleId AS Article, FLOOR((COUNT(av.Id))/1000) AS Quantity FROM ArticleViews av 
		                    INNER JOIN Articles a ON av.ArticleId = a.Id 
		                    WHERE av.CreatorCredited = 0 
		                    GROUP BY av.ArticleId HAVING FLOOR((COUNT(av.Id))/1000) > 0
                        )

                        UPDATE ArticleViews SET ArticleViews.CreatorCredited = 1
                        WHERE ArticleViews.ArticleId IN (SELECT DISTINCT Article FROM CTE) AND ArticleViews.Id IN (
	                        SELECT TOP (SELECT Quantity*1000 FROM CTE WHERE ArticleViews.ArticleId = CTE.Article) av.Id FROM ArticleViews av 
	                        WHERE av.ArticleId  IN (SELECT Article FROM CTE WHERE Article = ArticleViews.ArticleId) ORDER BY av.ViewDate ASC
                        )
                        ";

            TableHelper.ExecuteRawCommandNonQuery(query);
        }
예제 #2
0
        public static void CRON()
        {
            try
            {
                if (!AppSettings.TitanFeatures.AdvertMarketplaceEnabled)
                {
                    return;
                }

                AppSettings.Marketplace.Reload();

                if (AppSettings.Marketplace.MarketplaceFundsExpireAfterDays == -1)
                {
                    return;
                }

                var serverTime = AppSettings.ServerTime.ToDBString();

                var balanceUpdateCommand = string.Format(@"UPDATE Users SET MarketplaceBalance = MarketplaceBalance - 
            (SELECT SUM(Amount) FROM MarketplaceBalanceLogs mbl 
            WHERE mbl.UserId = Users.UserId 
            AND '{0}' > DateAdd(d, {1}, DateAdded))", serverTime, AppSettings.Marketplace.MarketplaceFundsExpireAfterDays);

                var balanceLogsCommand = string.Format(@"SELECT 
	            mbl.UserId AS userId, 
                - SUM(mbl.Amount) AS amount, 
                u.MarketplaceBalance AS state
            FROM MarketplaceBalanceLogs mbl 
            JOIN Users u
	        ON mbl.UserId = u.UserId 
            WHERE '{0}' > DateAdd(d, 10, DateAdded)
            GROUP BY mbl.UserId, u.MarketplaceBalance", serverTime);

                var clearMBLCommand = string.Format(@"DELETE FROM MarketplaceBalanceLogs WHERE '{0}' > DateAdd(d, {1}, DateAdded);",
                                                    serverTime, AppSettings.Marketplace.MarketplaceFundsExpireAfterDays);

                TableHelper.ExecuteRawCommandNonQuery(balanceLogsCommand);

                using (var bridge = ParserPool.Acquire(Database.Client))
                {
                    BalanceLogManager.AddRange(bridge.Instance, balanceLogsCommand, "Balance expiration", BalanceType.MarketplaceBalance, BalanceLogType.Other);
                }

                TableHelper.ExecuteRawCommandNonQuery(clearMBLCommand);
            }
            catch (Exception ex) { ErrorLogger.Log(ex); }
        }
예제 #3
0
    private static void RewardMembers()
    {
        string idsToReward = GetUserIdsToReward();

        if (string.IsNullOrWhiteSpace(idsToReward))
        {
            return;
        }

        string amountQuery = @"(SELECT Reward FROM ReferralLeaderShipLevels WHERE Number = (CASE Users.LeadershipLevelId WHEN -1 THEN 1 ELSE (SELECT Number + 1 FROM ReferralLeadershipLevels WHERE Id = Users.LeadershipLevelId) END ))";

        string rewardQuery = string.Format(@"UPDATE 
                Users 
            SET 
                Users.Balance1 = Users.Balance1 + {0},  
                Users.TotalEarned = Users.TotalEarned + {0},            
                Users.StatsEarned = cast(({0}+CONVERT(decimal(10,4),(CAST(SUBSTRING(Users.StatsEarned,0, CHARINDEX('#', Users.StatsEarned)) AS varchar(10))))) as varchar(1000)) + 
                    SUBSTRING(Users.StatsEarned,CHARINDEX('#', Users.StatsEarned), 1000)
            WHERE 
                Users.UserId IN ({1})", amountQuery, idsToReward);

        TableHelper.ExecuteRawCommandNonQuery(rewardQuery);

        string balanceLogHelperQuery = string.Format(@"SELECT 
			Users.UserId AS userId,
			{0} as amount,
			Users.Balance1 AS state
			FROM Users
            WHERE Users.UserId IN ({1})", amountQuery, idsToReward);

        using (var bridge = ParserPool.Acquire(Database.Client))
        {
            BalanceLogManager.AddRange(bridge.Instance, balanceLogHelperQuery, "Leadership Reward", BalanceType.MainBalance, BalanceLogType.LeadershipReward);
        }

        string updateLeadershipIdQuery = string.Format(@"
        UPDATE Users 
        SET 
        Users.LeadershipLevelId = 
		        (SELECT Id FROM ReferralLeaderShipLevels 
		        WHERE Number = CASE Users.LeadershipLevelId WHEN -1 THEN 1 ELSE (SELECT NextNumber FROM ReferralLeadershipLevels WHERE Id = Users.LeadershipLevelId) END),
        Users.LeadershipResetTime = GETDATE()
        WHERE UserId IN ({0})", idsToReward);

        TableHelper.ExecuteRawCommandNonQuery(updateLeadershipIdQuery);
    }
예제 #4
0
    public static void CRON()
    {
        if (TitanFeatures.IsEpadilla)
        {
            //1. Send info about balances to S4DS
            var UsersToSend = TableHelper.GetListFromRawQuery <Member>("SELECT * FROM Users WHERE Balance1 > 0");

            foreach (var userToSend in UsersToSend)
            {
                try
                {
                    CreditS4DSPacks(userToSend);
                }
                catch (Exception ex)
                {
                    ErrorLogger.Log(ex);
                }
            }

            try
            {
                //2. Reset all balances to 0
                using (var parser = ParserPool.Acquire(Database.Client).Instance)
                {
                    string dtCommand = String.Format(@"
            SELECT 
	            U.UserId AS userId, 
                -1 * U.Balance1 AS amount, 
                0.00000000 AS state
            FROM Users U 
            WHERE 
                U.Balance1 > 0");

                    BalanceLogManager.AddRange(parser, dtCommand, "S4DS daily deduction", BalanceType.MainBalance, BalanceLogType.Other);
                }
            }
            catch (Exception ex)
            {
                ErrorLogger.Log(ex);
            }

            TableHelper.ExecuteRawCommandNonQuery("UPDATE Users SET Balance1 = 0 WHERE Balance1 > 0");
        }
    }
예제 #5
0
        public static void CreditInfluencers()
        {
            //Credit
            var amount        = "(SELECT [amount] FROM CTE WHERE CTE.userId = Users.UserId)";
            var updateCommand = String.Format(@"
                                  UPDATE Users SET 
                                    Users.Balance1 = Users.Balance1 + {0},
                                    Users.TotalEarned = Users.TotalEarned + {0},            
                                    Users.StatsEarned = cast(({0}+CONVERT(decimal(19,8),(CAST(SUBSTRING(Users.StatsEarned,0, CHARINDEX('#', Users.StatsEarned)) AS varchar(30))))) as varchar(1000)) + SUBSTRING(Users.StatsEarned,CHARINDEX('#', Users.StatsEarned), 1000),
                                    Users.StatsArticlesTotalSharesMoney = cast(({0}+CONVERT(decimal(19,8),(CAST(SUBSTRING(Users.StatsArticlesTotalSharesMoney,0, CHARINDEX('#', Users.StatsArticlesTotalSharesMoney)) AS varchar(30))))) as varchar(1000)) + SUBSTRING(Users.StatsArticlesTotalSharesMoney,CHARINDEX('#', Users.StatsArticlesTotalSharesMoney), 1000)
                                  WHERE Users.UserId IN (SELECT DISTINCT UserId FROM CTE);", amount);

            TableHelper.ExecuteRawCommandNonQuery(GetInfluencersCTE() + updateCommand);

            //Add Balance Logs
            var balanceLogsCommand = GetInfluencersCTE() + "SELECT * FROM CTE;";

            BalanceLogManager.AddRange(balanceLogsCommand, "Article sharing", BalanceType.MainBalance, BalanceLogType.ArticleSharing);


            //Mark views as credited
            var query = @"WITH CTE AS
                        (	SELECT av.ArticleId AS Article, av.InfluencerUserId AS Influencer, FLOOR((COUNT(av.Id))/1000) AS Quantity FROM ArticleViews av 
		                    WHERE av.InfluencerUserId > 0 AND av.InfluencerCredited = 0 
		                    GROUP BY av.ArticleId, av.InfluencerUserId HAVING FLOOR((COUNT(av.Id))/1000) > 0
                        )
                        UPDATE ArticleViews SET ArticleViews.InfluencerCredited = 1
                        WHERE 
							ArticleViews.ArticleId IN (SELECT DISTINCT Article FROM CTE) AND 
							ArticleViews.InfluencerUserId IN (SELECT DISTINCT Influencer FROM CTE) AND 
							ArticleViews.Id IN (
	                        SELECT TOP 
							(SELECT Quantity*1000 FROM CTE WHERE ArticleViews.ArticleId = CTE.Article AND ArticleViews.InfluencerUserId = CTE.Influencer) 
							av.Id FROM ArticleViews av 
	                        WHERE av.ArticleId  IN (SELECT Article FROM CTE WHERE Article = ArticleViews.ArticleId) AND av.InfluencerUserId IN (SELECT Influencer FROM CTE WHERE Influencer = ArticleViews.InfluencerUserId) 
							ORDER BY av.ViewDate ASC
                        )
                        ";

            TableHelper.ExecuteRawCommandNonQuery(query);
        }
예제 #6
0
    public Money DistributeUsingPriority(Money amount, int AdPackTypeId)
    {
        //Updates all adpacks
        string AdPacksUpdateCommnad = String.Format(@"
            UPDATE AdPacks 
            SET 
                MoneyReturned = MoneyReturned + (FLOOR({0} * ({1} * DistributionPriority)) / {0}) 
            WHERE 
                DistributionPriority > 0 AND AdPackTypeId = {2}", MaxMultiplier, amount.ToClearString(), AdPackTypeId);

        //Update all member balances
        string MemberBalanceUpdateCommand = String.Format(@"
			WITH CTE AS (
                SELECT 
	                P.UserId AS userId, 
                    SUM(FLOOR({0} * ({1} * DistributionPriority)) / {0}) AS amount
                FROM AdPacks P 
                WHERE 
                    DistributionPriority > 0 AND AdPackTypeId = {4}             
                GROUP BY P.UserId
            )
            UPDATE 
                Users 
            SET 
				Users.Balance3 = Users.Balance3 + {3},
                Users.Balance1 = Users.Balance1 + ({2} - {3}) * (1 - {5}), 
                Users.MarketplaceBalance = Users.MarketplaceBalance + ({2} - {3}) * {5},
                Users.TotalEarned = Users.TotalEarned + ({2} - {3}) * (1 - {5}),            
                Users.StatsEarned = cast(({2}+CONVERT(decimal(19,8),(CAST(SUBSTRING(Users.StatsEarned,0, CHARINDEX('#', Users.StatsEarned)) AS varchar(30))))) as varchar(1000)) + 
                    SUBSTRING(Users.StatsEarned,CHARINDEX('#', Users.StatsEarned), 1000),
                Users.StatsRevShareCurrentWeekIncome = Users.StatsRevShareCurrentWeekIncome + {2},
                Users.StatsRevShareCurrentMonthIncome = Users.StatsRevShareCurrentMonthIncome + {2}
            WHERE 
                Users.UserId IN (SELECT DISTINCT UserID from CTE)", MaxMultiplier,
                                                          amount.ToClearString(),
                                                          AmountToEarn,
                                                          AmountToRepurchaseBalance(AdPackTypeId),
                                                          AdPackTypeId,
                                                          MarketplaceBalanceReturnPercentage(AdPackTypeId));

        //BalanceLogs, add fast /MAIN BALANCE/
        string dtCommand = String.Format(@"
            SELECT 
	            P.UserId AS userId, 
                (" + AmountCalculated + @" - " + AmountCalculatedForRepurchase(AdPackTypeId) + @") * (1 - " + MarketplaceBalanceReturnPercentage(AdPackTypeId) + @") AS amount, 
                U.Balance1 AS state
            FROM AdPacks P 
            JOIN Users U
	        ON P.UserID = U.UserID
            WHERE 
                DistributionPriority > 0 AND AdPackTypeId = " + AdPackTypeId + @"
            GROUP BY P.UserId, U.Balance1, U.UpgradeId", amount.ToClearString());

        //BalanceLogs, add fast /PURCHASE BALANCE/
        string dtCommandAdBalance = String.Format(@"
			SELECT 
	            P.UserId AS userId, 
                " + AmountCalculatedForRepurchase(AdPackTypeId) + @" AS amount, 
                U.Balance3 AS state
            FROM AdPacks P 
            JOIN Users U
	        ON P.UserID = U.UserID
            WHERE 
                DistributionPriority > 0 AND AdPackTypeId = " + AdPackTypeId + @" 
            GROUP BY P.UserId, U.Balance3, U.UpgradeId", amount.ToClearString());

        string dtCommandMarketplaceBalance = String.Format(@"
            SELECT 
	            P.UserId AS userId, 
                (" + AmountCalculated + @" - " + AmountCalculatedForRepurchase(AdPackTypeId) + @") * " + MarketplaceBalanceReturnPercentage(AdPackTypeId) + @" AS amount, 
                U.MarketplaceBalance AS state
            FROM AdPacks P 
            JOIN Users U
	        ON P.UserID = U.UserID
            WHERE 
                DistributionPriority > 0 AND AdPackTypeId = " + AdPackTypeId + @"
            GROUP BY P.UserId, U.MarketplaceBalance, U.UpgradeId", amount.ToClearString());

        parser.ExecuteRawCommandNonQuery(MemberBalanceUpdateCommand);

        BalanceLogManager.AddRange(parser, dtCommand, AppSettings.RevShare.AdPack.AdPackName + " revenue", BalanceType.MainBalance, BalanceLogType.AdPackROI);
        BalanceLogManager.AddRange(parser, dtCommandAdBalance, AppSettings.RevShare.AdPack.AdPackName + " revenue", BalanceType.PurchaseBalance, BalanceLogType.AdPackROI);
        if (AppSettings.Payments.MarketplaceBalanceEnabled)
        {
            BalanceLogManager.AddRange(parser, dtCommandMarketplaceBalance, AppSettings.RevShare.AdPack.AdPackName + " revenue", BalanceType.MarketplaceBalance, BalanceLogType.AdPackROI);
        }

        parser.ExecuteRawCommandNonQuery(AdPacksUpdateCommnad);

        //How much distributed
        string selectDistributionAmount = String.Format(@"
            SELECT SUM(FLOOR({0} * ({1} * DistributionPriority)) / {0}) FROM AdPacks
            WHERE 
                DistributionPriority > 0 AND AdPackTypeId = {2}", MaxMultiplier, amount.ToClearString(), AdPackTypeId);

        object result = parser.ExecuteRawCommandScalar(selectDistributionAmount);

        if (result is DBNull)
        {
            return(Money.Zero);
        }

        return(Money.Parse(result.ToString()));
    }