Пример #1
0
        public void Scan() // и переписать на новый паттерн матчинг
        {
            var sw = Stopwatch.StartNew();

            var random          = new Random();
            var randomTimeRange = random.Next(500, 2500);

            using var db = new ApplicationContext();
            var users = db.Users.Include(p => p.Products).ToList();

            foreach (var user in users)
            {
                foreach (var product in user.Products)
                {
                    var transferProduct = parsingDriver.CheckProduct(product.Artikul);
                    var send            = string.Empty;

                    if (CheckErrorСost(transferProduct) || CheckErrorSite(transferProduct))
                    {
                        continue;
                    }

                    if (product.PricePreviousBYN != transferProduct.CostBYN && transferProduct.CostBYN != 0)
                    {
                        db.PriceHistories.Add(new PriceHistory(product.ProductId, DateTime.Now, transferProduct.CostBYN, transferProduct.CostRUS));
                    }

                    if (transferProduct.CostRUS == 0 && transferProduct.CostBYN == 0 && product.ProductIsNow) //товар пропал из продажи
                    {
                        send = Disappeared(user, product, transferProduct);
                        continue;
                    }

                    if (transferProduct.CostBYN > 0 && product.ProductIsNow == false) //товар появился в продаже (по минимальной и )
                    {
                        send = Poyavilsya(user, product, transferProduct);
                        continue;
                    }

                    if (transferProduct.CostBYN == product.PriceMinBYN && transferProduct.CostBYN < product.PricePreviousBYN && transferProduct.CostBYN != 0) //цена снизилась снова до минимальной
                    {
                        send = CenaSnizilas(user, product, transferProduct);
                        continue;
                    }

                    if (transferProduct.CostBYN < product.PriceMinBYN && transferProduct.CostBYN != 0) //цена снизилась до минимальной
                    {
                        send = CenaUvelichilas(user, product, transferProduct);
                        continue;
                    }

                    if (transferProduct.CostRUS != 0 && transferProduct.CostBYN != 0)
                    {
                        Other(product, transferProduct);
                    }

                    Thread.Sleep(RandomTimeSleep(randomTimeRange));
                }
                db.SaveChanges();
            }

            var count = (int)0;

            foreach (var user in users)
            {
                count += user.Products.Count;
            }

            if (count == 0)
            {
                count = 1;
            }

            sw.Stop();

            var massegeStop = $"Выполнено cканирование {DateTime.Now}, \n" +
                              $"отсканировано {count} товара \n" +
                              $"за время {sw.Elapsed.ToString(@"mm\:ss")}  \n" +
                              $"среднее {(sw.Elapsed.Divide(count)).ToString(@"s\.f")} с";

            Logging.LogToConsole(massegeStop);
        }
Пример #2
0
        public void CheckProductAndSendMessage(Telegram.Bot.Args.MessageEventArgs e)  //сильно отрефакторить много проблем // не должно быть пустого ответа // сразу после рефакторинга удалить проверку на базовом классе
        // каждый кейс должен вызывать метод клоторые делает все сам
        {
            if (CheckUser(e))
            {
                var response  = String.Empty;
                var allComman = "Список всех команд бота: \n" +
                                "/all - все отслеживаемые товары одним списком. \n" +
                                "/available - все отслеживаемые которые в наличии. \n" +
                                "/not_available - все отслеживаемые которых нет в наличии. \n" +
                                "/start - информация о боте. \n" +
                                "(Артикул из цифр) - добавляет данный товар в отслеживание.";

                var allCommanShort = "/all - все отслеживаемые товары одним списком. \n" +
                                     "/available - все отслеживаемые которые в наличии. \n" +
                                     "/not_available - все отслеживаемые которых нет в наличии. \n";

                var urlImage = string.Empty;

                if (e.Message.Text != null)
                {
                    switch (e.Message.Text.ToLower())
                    {
                    case "/help":
                        response = allComman;
                        break;

                    case "/all":
                        response = Answer(e, Available.all);
                        break;

                    case "/available":
                        response = Answer(e, Available.available);
                        break;

                    case "/not_available":
                        response = Answer(e, Available.not_available);
                        break;

                    case "/start":
                        response = "Бот, который умеет отслеживать изменения цен товаров на wildberries \n" +
                                   "Для получения списка команд введите /help";
                        break;

                    default:
                        if (CheckOnComman(e.Message.Text, 'D'))
                        {
                            DeleteProduct(e);
                        }
                        else if (CheckOnComman(e.Message.Text, 'I'))
                        {
                            Info(e);
                        }
                        else if (CheckOnComman(e.Message.Text, 'H'))
                        {
                            HistoryPrice(e);
                        }
                        else if (CheckOnArticul(e.Message.Text))
                        {
                            var backCheckProduct = parsingDriver.CheckProduct(e.Message.Text);
                            if (backCheckProduct.Name != string.Empty)
                            {
                                urlImage = $"{Config.MainURL}/catalog/{e.Message.Text}/detail.aspx";
                            }

                            response = OperanionOnProduct(e, backCheckProduct);
                        }
                        else
                        {
                            response = $"{e.Message.Text} - ошибка ввода данных. \n" +
                                       allCommanShort;
                        }
                        break;
                    }

                    if (urlImage.Length != 0)
                    {
                        SendTextAndPhotoToBot(e.Message.Chat.Id, urlImage, response);
                    }
                    else
                    {
                        SendTextAndPhotoToBot(e.Message.Chat.Id, "", response);
                    }
                }
            }
        }