Beispiel #1
0
        public override IEnumerable <EntityObject> _CollectionObjectLoad()
        {
            var workStates = new[]
            {
                (int)BulletinInstanceState.WaitPublication,
                (int)BulletinInstanceState.Unchecked,
                (int)BulletinInstanceState.OnModeration,
                (int)BulletinInstanceState.WaitRepublication,
            };
            var result = Enumerable.Empty <EntityObject>();

            BCT.Execute(c =>
            {
                var id  = c._SessionInfo.HashUID;
                var id2 = c._SessionInfo.SessionUID;
                if (id == "Engine")
                {
                    result = c.BulletinDb.BulletinInstances
                             .Where(q => workStates.Contains(q.State)).Take(1).ToArray();
                }
                else
                {
                    result = base._CollectionObjectLoad();
                }
            });
            return(result);
        }
Beispiel #2
0
        static bool SendEmail(Email email)
        {
            var result = false;

            BCT.Execute((data) =>
            {
                var mail = new MailMessage
                {
                    IsBodyHtml = true,
                    Subject    = email.Title,
                    Body       = email.Body,
                    From       = new System.Net.Mail.MailAddress(senderEmail, senderName)
                };
                using (var client = new System.Net.Mail.SmtpClient
                {
                    Host = senderHost,
                    Port = senderPort,
                    EnableSsl = true,
                    Credentials = new NetworkCredential(senderEmail, senderPassword),
                    DeliveryMethod = SmtpDeliveryMethod.Network
                })
                {
                    mail.To.Add(email.Destination);
                    client.Send(mail);
                    ConsoleHelper.SendMessage("SendStatistics => Письмо отправлено");
                }
                result = true;
            });
            return(result);
        }
Beispiel #3
0
        static int ComputeAccessCapacity(Guid userId)
        {
            var accountCapacity = 0;

            BCT.Execute(d =>
            {
                var boards = d.BulletinDb.Boards.ToArray();
                // Сколько объявлений можно повесить на текущие аккаунты
                foreach (var board in boards)
                {
                    var needPlaces    = defaultCapacity;
                    var boardAccesses = d.BulletinDb.Accesses.Where(q => !q.HasBlocked).Where(q => q.UserId == userId && q.BoardId == board.Id && (q.State == (int)FessooFramework.Objects.Data.DefaultState.Enable)).OrderBy(q => q.LastPublication).ToArray();

                    foreach (var access in boardAccesses)
                    {
                        var occupiedPlaces = d.BulletinDb.BulletinInstances.Count(q => q.BoardId == board.Id && q.AccessId == access.Id);
                        if (occupiedPlaces < needPlaces)
                        {
                            accountCapacity += needPlaces - occupiedPlaces;
                        }
                        else if (needPlaces >= occupiedPlaces && !access.HasBlocked)
                        {
                            access.HasBlocked = true;
                            access.StateEnum  = FessooFramework.Objects.Data.DefaultState.Created;
                        }
                    }
                    d.SaveChanges();
                }
            });
            return(accountCapacity);
        }
        static Bulletin AddAvitoByTemplate(Guid userId, BulletinTemplate template, string brand, string model, string modifier, string price, string groupHash)
        {
            var result = default(Bulletin);

            BCT.Execute(d =>
            {
                var group = BCT.Context.BulletinDb.Groups.FirstOrDefault(q => q.Hash == groupHash);
                if (group == null)
                {
                    ConsoleHelper.SendMessage($"AvitoPublicateBulletin => Группа с хэшем:{groupHash} не найдена");
                    return;
                }

                result             = new Bulletin();
                result.Brand       = brand;
                result.Model       = model;
                result.Modifier    = modifier;
                result.GroupId     = group.Id;
                result.Title       = template.Title;
                result.Description = template.Description;
                result.Price       = price;
                result.Images      = template.Images;
                result.UserId      = userId;
                result.StateEnum   = BulletinState.Created;

                d.SaveChanges();
            });
            return(result);
        }
Beispiel #5
0
        /// <summary>
        /// Запускает задачи по сбору статистики для пользователя
        /// </summary>
        /// <param name="userId"></param>
        public static bool RunUserStatisticsTask(string userLogin)
        {
            var result = false;

            BCT.Execute(d =>
            {
                var user = d.MainDb.UserAccesses.FirstOrDefault(q => q.Login == userLogin);
                if (user == null)
                {
                    return;
                }
                var userId = user.Id;
                // Создаем задачи на сбор статистики с аккаунтов
                var accesses = d.BulletinDb.Accesses.Where(q => q.UserId == userId && q.State != (int)FessooFramework.Objects.Data.DefaultState.Created).ToArray();
                foreach (var access in accesses)
                {
                    TaskHelper.CreateAccessStatistics(access);
                }

                // Создаем задачи на сбор статистики с инстанций
                var bulletinIds = d.BulletinDb.Bulletins.Where(q => q.UserId == userId).Select(q => q.Id).ToArray();
                var instances   = d.BulletinDb.BulletinInstances.Where(q => bulletinIds.Contains(q.BulletinId) && q.Url != null).ToArray();
                foreach (var instance in instances)
                {
                    TaskHelper.CreateInstanceStatistics(userId, instance);
                }

                result = true;
            });
            return(result);
        }
Beispiel #6
0
        public static BulletinPackage ToCache(BulletinInstance obj)
        {
            BulletinPackage result = null;

            BCT.Execute(d =>
            {
                var groupSignature = GroupHelper.GetGroupSignature(obj.Id);
                var access         = AccessHelper.GetFreeAccess(obj.Id);
                var valueFields    = ValueFieldHelper.GetValueFields(obj.Id);
                var accessFields   = AccessFieldHelper.GetAccessFields(obj.Id);
                var state          = obj.State;

                result = new BulletinPackage
                {
                    BulletinId         = obj.BulletinId,
                    BulletinInstanceId = obj.Id,
                    Url          = obj.Url,
                    Signature    = groupSignature,
                    Access       = access,
                    ValueFields  = valueFields,
                    AccessFields = accessFields,
                    State        = state,
                    Title        = obj.Url,
                };
            });
            return(result);
        }
        public static IEnumerable <Task> All()
        {
            var result = Enumerable.Empty <Task>();

            BCT.Execute(d => { result = d.TempDB.Tasks.ToArray(); });
            return(result);
        }
Beispiel #8
0
        static IEnumerable <Bulletin> GetBulletinsForPublication(Guid userId)
        {
            var result = Enumerable.Empty <Bulletin>();

            BCT.Execute(d =>
            {
                var bulletins = d.BulletinDb.Bulletins.Where(q => q.UserId == userId).ToArray();
                //Определяем опубликованные инстанции
                var bulletinIds         = bulletins.Select(q => q.Id);
                var publicatedInstances = d.BulletinDb.BulletinInstances.Where(q =>
                                                                               q.Url != null &&
                                                                               bulletinIds.Any(qq => qq == q.BulletinId)).ToArray().Where(q => q.CreateDate.Date == DateTime.Today);

                //Определяем неопубликованные инстанции, которые в процесс публикации
                var unpublicatedInstances = d.BulletinDb.BulletinInstances.Where(q =>
                                                                                 q.Url == null &&
                                                                                 bulletinIds.Any(qq => qq == q.BulletinId)).ToArray().Where(q => q.CreateDate.Date == DateTime.Today);
                var unpublicatedInstanceIds  = unpublicatedInstances.Select(q => q.Id);
                var instanceToPublicationIds = d.TempDB.Tasks.Where(q => q.Command == (int)TaskCommand.InstancePublication &&
                                                                    q.State == 0 &&
                                                                    unpublicatedInstanceIds.Any(qq => qq == q.InstanceId)).Select(q => q.InstanceId).ToArray();
                var instancesToPublication = unpublicatedInstances.Where(q => instanceToPublicationIds.Any(qq => qq == q.Id)).ToArray();

                // Пропускаем уже опубликованные или в стадии публикации буллетины
                var skippedBulletinIds = publicatedInstances.Concat(instancesToPublication).Select(q => q.BulletinId);
                result = bulletins.Where(q => skippedBulletinIds.All(qq => qq != q.Id)).ToArray();
            });
            return(result);
        }
Beispiel #9
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Получает свободный доступ к борде для пользователя из инстанции буллетина </summary>
        ///
        /// <remarks>   SV Milovanov, 12.02.2018. </remarks>
        ///
        /// <param name="userId">   Identifier for the user. </param>
        /// <param name="boardId">  Identifier for the board. </param>
        ///
        /// <returns>   The free access. </returns>
        ///-------------------------------------------------------------------------------------------------
        public static AccessCache GetFreeAccess(Guid instanceId)
        {
            AccessCache result = null;

            BCT.Execute(d =>
            {
                var dbInstance = d.BulletinDb.BulletinInstances.FirstOrDefault(q => q.Id == instanceId);

                var dbBoard = d.BulletinDb.Boards.FirstOrDefault(q => q.Id == dbInstance.BoardId);
                var boardId = dbBoard.Id;

                var dbBulletin = d.BulletinDb.Bulletins.FirstOrDefault(q => q.Id == dbInstance.BulletinId);
                var userId     = dbBulletin.UserId;
                var accessId   = dbInstance.AccessId;

                Access access;
                if (accessId == Guid.Empty)
                {
                    access   = d.BulletinDb.Accesses.FirstOrDefault(q => q.UserId == userId && q.BoardId == boardId);
                    accessId = access.Id;
                }
                else
                {
                    access = d.BulletinDb.Accesses.FirstOrDefault(q => q.Id == accessId);
                }
                result = new AccessCache
                {
                    //Id = access.Id,
                    Login    = access.Login,
                    Password = access.Password,
                    BoardId  = boardId
                };
            });
            return(result);
        }
Beispiel #10
0
 public void SetGenerationCheck()
 {
     GenerationCheckLast = DateTime.Now;
     GenerationCheckNext = GenerationCheckLast.Value.AddSeconds(GenerationCheckPeriod);
     StateEnum           = StateEnum;
     BCT.SaveChanges();
 }
Beispiel #11
0
 public static void GetAccessStatistics(Access access)
 {
     BCT.Execute(d =>
     {
         TaskHelper.CreateAccessStatistics(access);
     });
 }
Beispiel #12
0
        public static ProductCount GetProductStatisticsByPeriod(Guid userId, DateTime from, DateTime until)
        {
            var result = default(ProductCount);

            BCT.Execute(d =>
            {
                var bulletins   = d.BulletinDb.Bulletins.Where(q => q.UserId == userId).ToArray();
                var bulletinIds = bulletins.Select(q => q.Id);

                var instances = d.BulletinDb.BulletinInstances.Where(q => q.Url != null &&
                                                                     q.ActivationDate != null &&
                                                                     bulletinIds.Any(qq => qq == q.BulletinId) &&
                                                                     q.ActivationDate >= from && q.ActivationDate <= until).ToArray();

                var bulletinCount = instances.GroupBy(q => q.BulletinId).Count();
                var instanceCount = instances.Count();

                result = new ProductCount
                {
                    BulletinCount = bulletinCount,
                    InstanceCount = instanceCount
                };
            });
            return(result);
        }
Beispiel #13
0
        public override IEnumerable <TDataModel> _CacheSave <TDataModel>(IEnumerable <TDataModel> objs)
        {
            var result = Enumerable.Empty <TDataModel>();

            BCT.Execute(d =>
            {
                var access   = objs.FirstOrDefault() as Access;
                var dbAccess = d.BulletinDb.Accesses.FirstOrDefault(q => q.Login == access.Login && q.Password == access.Password);
                if (dbAccess == null)
                {
                    access.BoardId   = d.BulletinDb.Boards.FirstOrDefault().Id;
                    access.UserId    = d.UserId;
                    access.StateEnum = DefaultState.Created;
                    d.SaveChanges();
                }
                else
                {
                    dbAccess.Login        = access.Login;
                    dbAccess.Password     = access.Password;
                    dbAccess.Views        = access.Views;
                    dbAccess.Calls        = access.Calls;
                    dbAccess.Messages     = access.Messages;
                    dbAccess.LastMessage  = access.LastMessage;
                    dbAccess.IsForwarding = access.IsForwarding;
                    d.SaveChanges();
                }
                result = new TDataModel[] { access as TDataModel };
            });
            return(result);
        }
Beispiel #14
0
 public static void ActivateAccess(Access access)
 {
     BCT.Execute(d =>
     {
         TaskHelper.CreateActivateAccess(access);
     });
 }
Beispiel #15
0
        static void CreateNewAccesses(Guid userId, int needAccounts)
        {
            BCT.Execute(d =>
            {
                var forwardingEnabled = false;
                var userSettings      = d.BulletinDb.UserSettings.FirstOrDefault(q => q.UserId == userId);
                if (userSettings != null && userSettings.EnableForwarding)
                {
                    forwardingEnabled = true;
                }

                var accessInTasks      = d.TempDB.Tasks.Where(q => q.State == 0 && q.UserId == userId && q.Command == (int)TaskCommand.Registration).Select(q => q.AccessId).ToArray();
                var accessCountInTasks = d.BulletinDb.Accesses.Count(q => q.UserId == userId && accessInTasks.Any(qq => qq == q.Id));
                needAccounts          -= accessCountInTasks;
                if (needAccounts <= 0)
                {
                    return;
                }

                for (var i = 0; i < needAccounts; i++)
                {
                    AccessTaskHelper.CreateAccess(userId, forwardingEnabled);
                }
            });
        }
 public static void GetInstanceStatistics(BulletinInstance instance)
 {
     BCT.Execute(d =>
     {
         var bulletin = d.BulletinDb.Bulletins.FirstOrDefault(q => q.Id == instance.BulletinId);
         TaskHelper.CreateInstanceStatistics(bulletin.UserId, instance);
     });
 }
Beispiel #17
0
 public static BulletinTemplate MarkAsUsed(BulletinTemplate template)
 {
     BCT.Execute(c =>
     {
         template.StateEnum = DefaultState.Disable;
         c.SaveChanges();
     });
     return(template);
 }
Beispiel #18
0
        public static UserSettingsCache ToCache(UserSettings obj)
        {
            UserSettingsCache result = null;

            BCT.Execute(d =>
            {
            });
            return(result);
        }
        public override ServiceMessage Execute(ServiceMessage data)
        {
            var result = default(ServiceMessage);

            BCT.Execute(c => {
                result = _Execute(data);
            });
            return(result);
        }
        static void CreatePublicationTasks(Bulletin bulletin, Guid templateId)
        {
            BCT.Execute(d =>
            {
                var tasks = d.TempDB.Tasks.Where(q => (q.State == (int)BulletinHub.Entity.Data.TaskState.Created || q.State == (int)BulletinHub.Entity.Data.TaskState.Enabled) && q.BulletinId == bulletin.Id && q.Command == (int)BulletinHub.Entity.Data.TaskCommand.InstancePublication).ToArray();
                if (tasks != null && tasks.Any())
                {
                    TaskHelper.Remove(tasks);
                }
                var instances = BulletinHub.Helpers.BulletinHelper.CreateInstance(bulletin, templateId);
                if (instances.Any())
                {
                    bulletin.SetGenerationCheck();
                    var datePublish = DateTime.Now.AddDays(1);

                    var hasPublication = false;
                    foreach (var instance in instances)
                    {
                        var access = BulletinEngine.Helpers.AccessHelper.GetFreeAccess(bulletin.UserId, instance.BoardId, instance.BulletinId);
                        if (access == null)
                        {
                            ConsoleHelper.SendMessage($"AvitoPublicateBulletin => Не найден свободный доступ для буллетина {bulletin.Id}");
                            continue;
                        }

                        if (accessPublicationTime.ContainsKey(access.Id))
                        {
                            var lastTime = accessPublicationTime[access.Id];
                            datePublish  = lastTime.AddMinutes(30);
                            accessPublicationTime[access.Id] = datePublish;
                        }
                        else
                        {
                            accessPublicationTime.Add(access.Id, datePublish);
                        }

                        instance.AccessId  = access.Id;
                        instance.StateEnum = instance.StateEnum;
                        d.SaveChanges();
                        TaskHelper.CreateInstancePublication(bulletin.UserId, instance, datePublish);
                        //var now = DateTime.Now;
                        //var activationDate = now.Date.AddDays(1);
                        //activationDate.Date.Subtract(now);
                        //activationDate = activationDate.AddHours(3);
                        //TaskHelper.CreateActivateInstance(bulletin.UserId, instance, activationDate);
                        hasPublication = true;
                    }
                    if (hasPublication)
                    {
                        bulletin.DatePublication = datePublish;
                        bulletin.StateEnum       = bulletin.StateEnum;
                        d.SaveChanges();
                    }
                }
            });
        }
Beispiel #21
0
 public static Bulletin Edit(Bulletin bulletin)
 {
     BCT.Execute(d =>
     {
         var instance       = d.BulletinDb.BulletinInstances.FirstOrDefault(q => q.BulletinId == bulletin.Id);
         instance.StateEnum = BulletinInstanceState.Edited;
         d.SaveChanges();
     });
     return(bulletin);
 }
 /// <summary>
 /// Создаем буллетину по шаблону, запускаем задачи на публикацию и активацию
 /// </summary>
 /// <param name="userLogin"></param>
 /// <param name="title"></param>
 public static void AutoPublicateBulletin(string userLogin, string brand, string model, string modifier, string price)
 {
     BCT.Execute(d =>
     {
         //var bulletin = CreateBulletin(userLogin, brand, model, modifier, price);
         //if (bulletin == null) return;
         ////Запускаем задачи на публикацию и активацию
         //CreatePublicationTasks(bulletin);
     });
 }
Beispiel #23
0
        public static IEnumerable <Access> All()
        {
            var result = Enumerable.Empty <Access>();

            BCT.Execute(c =>
            {
                result = c.BulletinDb.Accesses.Where(q => q.UserId == c.UserId).ToArray();
            });
            return(result);
        }
Beispiel #24
0
 public static Bulletin AddAvito(Bulletin model)
 {
     BCT.Execute(c =>
     {
         model.UserId    = c.UserId;
         model.StateEnum = BulletinEngine.Entity.Data.BulletinState.Created;
         c.SaveChanges();
     });
     return(model);
 }
Beispiel #25
0
 static void RunTasks(Guid userId, IEnumerable <Bulletin> bulletins)
 {
     BCT.Execute(d =>
     {
         foreach (var bulletin in bulletins)
         {
             BulletinHelper.AutoPublicateBulletin(bulletin.Id);
         }
     });
 }
Beispiel #26
0
        public static IEnumerable <BulletinTemplate> All()
        {
            var result = Enumerable.Empty <BulletinTemplate>();

            BCT.Execute(c =>
            {
                result = c.TempDB.BulletinTemplate.Where(q => q.State != (int)DefaultState.Disable).ToArray();
            });
            return(result);
        }
        static BulletinTemplate ChooseTemplate(string brand, string model, string modifier)
        {
            var result = default(BulletinTemplate);

            BCT.Execute(d =>
            {
                var temp = d.TempDB.BulletinTemplate.Where(q => q.State != (int)DefaultState.Disable && q.IsIndividualSeller && q.Category4 != "Запчасти").ToArray();
                temp     = temp.Where(q => forbiddenWords.All(x => !q.Description.ToLower().Contains(x.ToLower())) &&
                                      forbiddenWords.All(x => !q.Title.Contains(x))).ToArray();
                result = temp.FirstOrDefault();
                if (result != null)
                {
                    result.StateEnum = DefaultState.Disable;
                    d.SaveChanges();
                }

                //var templates = d.TempDB.BulletinTemplate.Where(q => q.IsIndividualSeller && q.State != (int)DefaultState.Disable
                //&& q.Category4 != "Запчасти").ToArray();
                //// Исключаем шаблоны с запрещенными словами
                //var temp = templates.Where(q => forbiddenWords.All(x => !q.Description.ToLower().Contains(x.ToLower()))
                //&& forbiddenWords.All(x => !q.Title.Contains(x))).ToArray();

                //var modelParams = model.ToLower().Replace("+", "").Split().ToList();
                //if (model.Contains("+"))
                //    modelParams.Add("+");

                //var modifierParams = Enumerable.Empty<string>().ToList();
                //if(modifier != null)
                //{
                //    modifierParams = modifier.Split('/').ToList();
                //}
                //var aliasesForModifier = aliases.Where(q => modifierParams.Any(qq => qq == q.Key)).ToArray();
                //if(aliasesForModifier.Any())
                //{
                //    modifierParams.AddRange(aliasesForModifier.Select(q => q.Value));
                //}

                ////Фильтруем шаблоны по бренду, модели и модификаторам (цвет и т.д.)
                //var allMatches = temp.Where(q =>
                //q.Title.ToLower().Contains(brand.ToLower())
                //&& modelParams.All(x =>
                //   (x == "+" && (q.Title.ToLower().Contains("+") || q.Title.ToLower().Contains("plus")))
                //|| (x == "plus" && (q.Title.ToLower().Contains("+") || q.Title.ToLower().Contains("plus")))
                //|| q.Title.ToLower().Split(' ', '/', ',').Any(qq => qq == x))
                //&& modifierParams.Any(x => q.Title.ToLower().Contains(x)));

                //result = allMatches.FirstOrDefault();
                //if (result != null)
                //{
                //    result.StateEnum = DefaultState.Disable;
                //    d.SaveChanges();
                //}
            });
            return(result);
        }
Beispiel #28
0
        public static UserSettings ToEntity(UserSettingsCache obj, UserSettings entity)
        {
            var result = default(Data.UserSettings);

            BCT.Execute(d =>
            {
                result.TaskGenerationPeriod = 7 * 24;
                entity = result;
            });
            return(entity);
        }
Beispiel #29
0
 internal static void Remove(IEnumerable <Access> entities)
 {
     BCT.Execute(c =>
     {
         foreach (var entity in entities)
         {
             c.BulletinDb.Accesses.Remove(entity);
         }
         c.SaveChanges();
     });
 }
Beispiel #30
0
        public override IEnumerable <TDataModel> _CacheSave <TDataModel>(IEnumerable <TDataModel> objs)
        {
            var result = Enumerable.Empty <TDataModel>();

            BCT.Execute(d =>
            {
                d.SaveChanges();
                result = objs;
            });
            return(result);
        }