Пример #1
0
        /// <summary>
        /// Wysyla wiadomosc email, aby powitac nowego dostawce.
        /// </summary>
        /// <param name="wiadomosc"></param>
        /// <returns></returns>
        public string WyslijEmailWitamy(string wiadomosc)
        {
            var emailService  = new EmailSevice();
            var temat         = ("Witaj " + this.NazwaFirmy).Trim();
            var potwierdzenie = emailService.WyslijWiadomosc(temat, wiadomosc, this.Email);

            return(potwierdzenie);
        }
Пример #2
0
        public string PowiedzWitaj()
        {
            //var dostawca = new Dostawca();
            //dostawca.WyslijEmailWitamy("Wiadomosc z produktu");

            var emailServices = new EmailSevice();
            var potwierdzenie = emailServices.WyslijWiadomosc("Nowy produkt", this.NazwaProduktu, "*****@*****.**");

            var wynik = Logowanie("Powiadziano Witaj");


            return("Witaj " + NazwaProduktu + " (" + ProduktId + "): " + Opis
                   + " Dostępny od : " + DataDostepnosci?.ToShortDateString());
        }
Пример #3
0
        /// <summary>
        /// Wysyła zamówienie na produkt do dostawcy
        /// </summary>
        /// <param name="produkt">Produkt do zamówienia.</param>
        /// <param name="ilosc">Ilość produktu do zamówienia.</param>
        /// <param name="data">Data dostawy zamówienia</param>
        /// <param name="instrukcje">Instrukcje dostawy.</param>
        /// <returns></returns>
        public WynikOperacji ZlozZamowienie(Produkt produkt, int ilosc, DateTimeOffset?data = null, string instrukcje = "Standartowa dostawa")
        {
            if (produkt == null)
            {
                throw new ArgumentNullException(nameof(produkt));
            }
            if (ilosc <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(ilosc));
            }
            if (data <= DateTimeOffset.Now)
            {
                throw new ArgumentOutOfRangeException(nameof(data));
            }

            var sukces = false;

            var tekstZamowieniaBuilder = new StringBuilder("Zamowienie z DevHobby.pl" + Environment.NewLine +
                                                           "Produkt: " + produkt.KodProduktu + Environment.NewLine +
                                                           "Ilość: " + ilosc);

            if (data.HasValue)
            {
                tekstZamowieniaBuilder.Append(Environment.NewLine + "Data dostawy: " + data.Value.ToString("d"));
            }

            if (!String.IsNullOrWhiteSpace(instrukcje))
            {
                tekstZamowieniaBuilder.Append(Environment.NewLine + "Instrukcje: " + instrukcje);
            }

            var tekstZamowienia = tekstZamowieniaBuilder.ToString();

            var emailService  = new EmailSevice();
            var potwierdzenie = emailService.WyslijWiadomosc("Nowe zamówienie", tekstZamowienia, this.Email);

            if (potwierdzenie.StartsWith("Wiadomość wysłana: "))
            {
                sukces = true;
            }

            var wynikOperacji = new WynikOperacji(sukces, tekstZamowienia);

            return(wynikOperacji);
        }
Пример #4
0
        static void Main(string[] args)
        {
            ConsumeEventSync objsync = new ConsumeEventSync();

            IConfiguration config = new ConfigurationBuilder()
                                    .AddJsonFile("appsettings.json", true, true)
                                    .Build();

            //de 24 em 24 horas executa esta task começando as 10:20
            TaskScheduler.Instance.ScheduleTask(10, 20, 24, () =>
            {
                objsync.UpdateWeatherConditionsForAllActiveNodes();
                objsync.UpdateHistoryEvaporationForAllActiveCounties();
            });

            // DE 30 EM 30 min TEMPO VER OS PARAMETROS QUE ESTAO NA BASE DE DADOS E COMPRAR COM AS METRICAS E COM ISSO LIGAR OU NAO O SISTEMA DE REGA
            TaskScheduler.Instance.ScheduleTask(10, 20, 0.5, () =>
            {
                MetricsComparisonLogicService metricsService = new MetricsComparisonLogicService();
                List <List <Read_Hourly> > activeNodesWith24HoursReadings =
                    objsync.GetWeatherConditionsForAllActiveNodes();

                foreach (var node in activeNodesWith24HoursReadings)
                {
                    #region AlertRegion


                    List <double> temperaturesOfANode  = node.Select(x => (double)x.Temperature).ToList();
                    List <double> pressureOfANode      = node.Select(x => (double)x.Pres).ToList();
                    List <double> precipitationOfANode = node.Select(x => (double)x.Prcp).ToList();
                    List <double> humidityOfANode      = node.Select(x => (double)x.Rhum).ToList();
                    List <string> Errors = new List <string>();



                    string MailBody = string.Empty;

                    if (MathService.getOutliers(temperaturesOfANode).Count > 0)
                    {
                        MathService.getOutliers(temperaturesOfANode).ForEach(x => temperaturesOfANode.Remove(x));
                        MailBody +=
                            $"There is a error found on Temperature sensor in {node.Select(z => z.IdNode).FirstOrDefault()} \n";
                        Errors.Add(MailBody);
                    }

                    if (MathService.getOutliers(pressureOfANode).Count > 0)
                    {
                        MathService.getOutliers(pressureOfANode).ForEach(x => pressureOfANode.Remove(x));
                        MailBody +=
                            $"There is a error found on Pressure sensor in {node.Select(z => z.IdNode).FirstOrDefault()} \n";
                        Errors.Add(MailBody);
                    }

                    if (MathService.getOutliers(precipitationOfANode).Count > 0)
                    {
                        MathService.getOutliers(precipitationOfANode).ForEach(x => precipitationOfANode.Remove(x));
                        MailBody +=
                            $"There is a error found on Precipitation sensor in {node.Select(z => z.IdNode).FirstOrDefault()}\n";
                        Errors.Add(MailBody);
                    }

                    if (MathService.getOutliers(humidityOfANode).Count > 0)
                    {
                        MathService.getOutliers(humidityOfANode).ForEach(x => humidityOfANode.Remove(x));
                        MailBody +=
                            $"There is a error found on Humidity sensor in {node.Select(z => z.IdNode).FirstOrDefault()}\n";
                        Errors.Add(MailBody);
                    }

                    if (Errors.Count > 0)
                    {
                        EmailSevice.SendEmail(MailBody, node.Select(z => z.IdNode).FirstOrDefault());
                    }

                    #endregion

                    RootWeatherForecast <Daily> forecast  = objsync.GetWeatherForecast();
                    float EvapoTranspirationForLast30Days =
                        objsync.GetEvapoTranspirationForLast30Days(node.Select(z => z.IdNode).FirstOrDefault());

                    int timeSprinklerActivated = 0;

                    if (EvapoTranspirationForLast30Days <= float.Parse(config["Evapotranspiracao:Humida"],
                                                                       CultureInfo.InvariantCulture.NumberFormat))
                    {
                        timeSprinklerActivated = int.Parse(config["TempoDeRegaEmMin:Humida"],
                                                           CultureInfo.InvariantCulture.NumberFormat);
                    }

                    if (EvapoTranspirationForLast30Days > float.Parse(config["Evapotranspiracao:Humida"],
                                                                      CultureInfo.InvariantCulture.NumberFormat) && EvapoTranspirationForLast30Days <=
                        float.Parse(config["Evapotranspiracao:SubHumida"]))
                    {
                        timeSprinklerActivated = int.Parse(config["TempoDeRegaEmMin:SubHumida"],
                                                           CultureInfo.InvariantCulture.NumberFormat);
                    }


                    if (EvapoTranspirationForLast30Days > float.Parse(config["Evapotranspiracao:SubHumida"],
                                                                      CultureInfo.InvariantCulture.NumberFormat) && EvapoTranspirationForLast30Days <=
                        float.Parse(config["Evapotranspiracao:SubHumidaSeca"]))
                    {
                        timeSprinklerActivated = int.Parse(config["TempoDeRegaEmMin:SubHumidaSeca"],
                                                           CultureInfo.InvariantCulture.NumberFormat);
                    }

                    if (EvapoTranspirationForLast30Days > float.Parse(config["Evapotranspiracao:SubHumidaSeca"],
                                                                      CultureInfo.InvariantCulture.NumberFormat))
                    {
                        timeSprinklerActivated = int.Parse(config["TempoDeRegaEmMin:Semiarida"],
                                                           CultureInfo.InvariantCulture.NumberFormat);
                    }

                    //Checks The temperature
                    if (metricsService.IsTheTemperatureOkToSprinkle(activeNodesWith24HoursReadings))
                    {
                        DateTime sunset =
                            DatetimeService.UnixTimeStampToDateTime(
                                double.Parse(forecast.Daily.FirstOrDefault().Sunset));
                        DateTime sunrise =
                            DatetimeService.UnixTimeStampToDateTime(
                                double.Parse(forecast.Daily.FirstOrDefault().Sunrise));
                        //checks if the time that is running is after sunset and before sunrise
                        if (DateTime.Now < sunrise && DateTime.Now > sunset)
                        {
                            if (!forecast.Daily.FirstOrDefault().Weather.FirstOrDefault().Main.ToLower()
                                .Contains("rain") ||
                                !forecast.Daily.FirstOrDefault().Weather.FirstOrDefault().Main.ToLower()
                                .Contains("rain"))
                            {
                                //activate sprinkler
                                objsync.ActivateSprinkler(node.Select(z => z.IdNode).FirstOrDefault());
                                Thread.Sleep(timeSprinklerActivated * 60 * 1000);
                                objsync.DeactivateSprinkler(node.Select(z => z.IdNode).FirstOrDefault());
                            }
                        }
                    }
                }
            });
        }