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 }); }