protected override object GetDataFromSource() { DataTable usersAds; var cache = new AdminIdCache(); string query; using (var bridge = ParserPool.Acquire(Database.Client)) { if (TitanFeatures.IsClickmyad) { query = string.Format(@"SELECT DISTINCT Id, Status, TargetUrl, ConstantImagePath, NormalImagePath, CreatorUserId, Title, Description, StartPageDate, Priority FROM AdPacksAdverts WHERE Status = {0};", (int)AdvertStatus.Active); } else { query = string.Format(@"SELECT DISTINCT apa.Id, apa.Status, apa.TargetUrl, apa.ConstantImagePath, apa.NormalImagePath, apa.CreatorUserId, apa.Title, apa.Description, apa.StartPageDate, apa.Priority FROM AdPacksAdverts apa JOIN AdPacks ap ON apa.Id = ap.AdPacksAdvertId WHERE ap.TotalClicks < ap.ClicksBought AND (apa.CreatorUserId != {0} OR (apa.CreatorUserId = {0} AND apa.Priority != 0)) AND apa.Status = {1} ;", (int)cache.Get(), (int)AdvertStatus.Active); } usersAds = bridge.Instance.ExecuteRawCommandToDataTable(query); } return(usersAds); }
public static int GetAdDisplayTime(AdPacksAdvert ad) { var cache = new AdminIdCache(); if (ad.CreatorUserId == (int)cache.Get()) { return(AppSettings.RevShare.AdPack.AdminsAdvertDisplayTime); } string query = string.Format(@"SELECT TOP 1 DisplayTime FROM AdPacks WHERE AdPacksAdvertId = {0} AND TotalClicks < ClicksBought ORDER BY PurchaseDate", ad.Id); return((int)TableHelper.SelectScalar(query)); }
public static List <AdPacksAdvert> GetAdPacksAdvertsForUsers(int dailyRequiredClicks) { var cache = new AdPackAdvertsForUsersCache(); var adminIdCache = new AdminIdCache(); DataTable usersAds = (DataTable)cache.Get(); var usersAdsList = TableHelper.GetListFromDataTable <AdPacksAdvert>(usersAds, dailyRequiredClicks, true); var distinctAdPacks = new List <AdPacksAdvert>(); var lowPriorityAdPacks = new List <AdPacksAdvert>(); var highPriorityAdPacks = new List <AdPacksAdvert>(); var normalPriorityAdPacks = new List <AdPacksAdvert>(); AdPacksAdvert startPage = null; for (int i = 0; i < usersAdsList.Count; i++) { var item = usersAdsList[i]; if (item.StartPageDate.HasValue && item.StartPageDate.Value.Date == DateTime.Now.Date) { startPage = item; } else if (item.Priority == 0) { normalPriorityAdPacks.Add(item); } else if (item.Priority > 0) { highPriorityAdPacks.Add(item); } else if (item.Priority < 0) { lowPriorityAdPacks.Add(item); } } highPriorityAdPacks.Sort((x, y) => x.Priority.CompareTo(y.Priority)); lowPriorityAdPacks.Sort((x, y) => y.Priority.CompareTo(x.Priority)); normalPriorityAdPacks.Shuffle(); var adsCountToAdd = dailyRequiredClicks - highPriorityAdPacks.Count - lowPriorityAdPacks.Count; if (startPage != null) { adsCountToAdd--; } if (adsCountToAdd > 0 && normalPriorityAdPacks.Count > 0) { for (int i = 0; i < normalPriorityAdPacks.Count && i < adsCountToAdd; i++) { distinctAdPacks.Add(normalPriorityAdPacks[i]); } } if (distinctAdPacks.Count < adsCountToAdd) { var adminsAdsCount = adsCountToAdd - distinctAdPacks.Count; using (var bridge = ParserPool.Acquire(Database.Client)) { var adminsAds = bridge.Instance.ExecuteRawCommandToDataTable(string.Format(@"SELECT DISTINCT TOP {0} apa.Id, apa.Status, apa.TargetUrl, apa.ConstantImagePath, apa.NormalImagePath, apa.CreatorUserId, apa.Title, apa.Description, apa.Priority FROM AdPacksAdverts apa WHERE apa.CreatorUserId = {1} AND apa.Priority = 0 AND apa.Status = {2}", adminsAdsCount, (int)adminIdCache.Get(), (int)AdvertStatus.Active)); var adminsAdsList = TableHelper.GetListFromDataTable <AdPacksAdvert>(adminsAds, adminsAdsCount, false); distinctAdPacks.AddRange(adminsAdsList); } } if (startPage != null) { distinctAdPacks.Insert(0, startPage); } for (int i = 0; i < highPriorityAdPacks.Count; i++) { distinctAdPacks.Insert(startPage != null ? 1 : 0, highPriorityAdPacks[i]); } distinctAdPacks.AddRange(lowPriorityAdPacks); return(distinctAdPacks); }