示例#1
0
        public static void CheckPets(Field field, IDataProvider dataProvider, IRabbitMqBus bus)
        {
            var result = PestCheckDataGenerator.Generate(dataProvider.GetPestsAsync().Result);

            if (result != null)
            {
                var severity = DangerLevel.Low;
                if (result.CountOnSquareMeter >= 50 && result.CountOnSquareMeter < 100)
                {
                    severity = DangerLevel.High;
                }
                else if (result.CountOnSquareMeter > 100)
                {
                    severity = DangerLevel.Critical;
                }

                var message = new PestDetectedMessage()
                {
                    FieldId            = field.Id,
                    OrganizationId     = field.OrganizationId,
                    PestId             = result.PestId,
                    CountOnSquareMeter = result.CountOnSquareMeter,
                    Severity           = severity
                };

                bus.Publish(message);
            }
        }
        public async Task <PestDetectedRecommendation> GetPestDetectedRecommendation(PestDetectedMessage message)
        {
            var field = await _fieldRepository.GetAsync(message.FieldId);

            if (field == null)
            {
                Console.WriteLine($"Field {message.FieldId} was not found.");
                return(null);
            }

            var pesticides = (await _pesticideRepository.BrowseAsync(x => true));

            if (pesticides == null)
            {
                Console.WriteLine($"Error while getting pesticides.");
                return(null);
            }

            var pest = await _pestRepository.GetAsync(message.PestId);

            if (pest == null)
            {
                Console.WriteLine($"Pest {message.PestId} was not found.");
                return(null);
            }

            if (field.CurrentCrop == null)
            {
                Console.WriteLine("Field is empty. No need to recommend.");
                return(null);
            }

            var currentCulture = await _cultureRepository.GetAsync(field.CurrentCrop.CultureId);

            pesticides = pesticides.Where(x => pest.Pesticides.Any(p => p.PesticideId == x.Id) &&
                                          !x.ComponentsIds.Intersect(currentCulture.ForbiddenComponents).Any());

            var pesticidesWithDose = pest.Pesticides.Where(x => pesticides.Any(p => p.Id == x.PesticideId)).ToList();

            if (pesticidesWithDose.Count == 0)
            {
                Console.WriteLine("Unable to find recommendation");
                return(null);
            }

            return(new PestDetectedRecommendation()
            {
                Pesticides = pesticidesWithDose
            });
        }