public int Temperature = 0; //curent temperature #endregion Fields #region Constructors public WeatherData() { Location = new LocationData(); Curent = new ForecastData(); ForecastList = new List<ForecastData>(); HourForecastList = new List<HourForecastData>(); }
/// <summary> /// Происзодит обновление отображения элементов /// </summary> private void UpdateInformation() { if (CurrentAircraft != null) { labelTitle.Text = "Date as of: " + SmartCore.Auxiliary.Convert.GetDateFormat(DateTime.Today) + " Aircraft TSN/CSN: " + GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(CurrentAircraft); //очистка массива данных по прогнозам _currentForecast.ForecastDatas.Clear(); //поиск деталей данного самолета var aircraftBaseDetails = new List <BaseComponent>(GlobalObjects.ComponentCore.GetAicraftBaseComponents(CurrentAircraft.ItemId)); //составление нового массива данных по прогнозам foreach (var baseDetail in aircraftBaseDetails) { //определение ресурсов прогноза для каждой базовой детали var forecastData = new ForecastData(DateTime.Today, baseDetail, GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseDetail)); //дабавление в массив _currentForecast.ForecastDatas.Add(forecastData); } } AnimatedThreadWorker.RunWorkerAsync(); }
private static int GetHash(ForecastData data) { var time = data.TimeEndBet.ToShortTimeString(); var myStr = $"{data.NameBetter}{data.NameBet}"; return(myStr.GetHashCode()); }
/// <summary> /// Timer callback to retrieve forecast data /// </summary> /// <param name="state"></param> private async void HandleTimer(object state) { var apiKey = File.ReadAllText(ApiKeyFile); var stationId = File.ReadAllText(StationIdFile); ForecastData forecast = ForecastData.Default; try { var forecastUri = string.Format(ForecastUri, stationId, apiKey); var forecastData = await m_Client.GetStringAsync(forecastUri); forecast = ParseForecast(forecastData); } catch (Exception) { throw; } DispatcherHelper.RunOnUIThread(() => { var viewModel = m_Container.ResolveNamed <MainViewModel>(MainViewModel.Name); if (viewModel != null) { viewModel.ForecastIcon = new BitmapImage(new Uri(forecast.Icon)); viewModel.ForecastTemperature = forecast.Temperature; viewModel.ForecastWeather = forecast.Weather; viewModel.ForecastCity = forecast.CityName; } }); }
/// <summary> /// Определяет значение средней утилизации для выполнения задачи /// </summary> /// <param name="source">Задача, для которой нужно определить утилизацию</param> /// <param name="forecastData">прогнозируемый ресурс выполнения задачи</param> /// <returns>Значение средней утилизации или null</returns> public AverageUtilization GetAverageUtillization(IDirective source, ForecastData forecastData = null) { if (source == null) { return(null); } if (forecastData == null) { if (source is BaseComponent) { return(((BaseComponent)source).AverageUtilization); } var a = _aircraftsCore.GetParentAircraft(source); if (a != null) { var aircraftFrame = _componentCore.GetBaseComponentById(a.AircraftFrameId); return(aircraftFrame.AverageUtilization); } var s = _storeCore.GetParentStore(source); return(s != null ? new AverageUtilization(0, 0) : null); } return(forecastData.AverageUtilization); }
///<summary> /// Конструктор, принимающий в качестве параметра прогноз для базовой детали ///</summary> ///<param name="forecastData">Данные прогнозя для базовой детали</param> public ForecastAdvancedControlItem(ForecastData forecastData) : this() { _currentForecastData = forecastData; _forecastDate = forecastData.ForecastDate; UpdateInformation(); }
public async Task <ForecastData> getForecast(string uri) { ForecastData data = null; try { HttpResponseMessage response = await client.GetAsync(uri); if (response.IsSuccessStatusCode) { string content = await response.Content.ReadAsStringAsync(); data = JsonConvert.DeserializeObject <ForecastData>(content); } else { return(null); } } catch (Exception ex) { return(null); } return(data); }
public async Task <ForecastData> GetCurrentForecastAsync() { if ((DateTime.Now - dataReceivedAt).TotalSeconds < (60 * 60)) { return(lastForecastData); } var client = _httpClientFactory.CreateClient(Constants.OpenWeatherMapHttpClientName); var response = await client.GetAsync($"weather?id={_cityId}&appid={_apiKey}&units=metric"); if (response.IsSuccessStatusCode) { var content = response.Content; string data = await content.ReadAsStringAsync(); _logger.LogDebug(data); var weatherData = JsonConvert.DeserializeObject <WeatherData>(data); lastForecastData = weatherData.Convert(); dataReceivedAt = DateTime.Now; return(lastForecastData); } _logger.LogError("GetCurrentForecastAsync IsSuccessStatusCode = false"); return(null); }
//---------------------------------------------------------------------- // public async Task <Result <ForecastData> > GetWeatherData(string query) { ForecastData weatherData = null; try { var response = await _client.GetAsync(query); if (response.IsSuccessStatusCode) { var content = await response.Content.ReadAsStringAsync(); weatherData = JsonConvert.DeserializeObject <ForecastData>(content); return(new Result <ForecastData>(weatherData)); } else { return(new Result <ForecastData>(Error.Generic)); } } catch (Exception ex) { Debug.WriteLine("\t\tERROR {0}", ex.Message); return(new Result <ForecastData>(Error.Generic)); } }
protected virtual void AddForecastToDataSet(DirectivesListDataSet destinationDataSet) { ForecastData fd = _forecast != null?_forecast.GetForecastDataFrame() : null; if (fd == null) { destinationDataSet.ForecastTable.AddForecastTableRow(0, 0, "", 0, 0, 0, ""); return; } double avgUtilizationCycles = fd.AverageUtilization.Cycles; double avgUtilizationHours = fd.AverageUtilization.Hours; string avgUtilizationType = fd.AverageUtilization.SelectedInterval.ToString(); int forecastCycles = fd.ForecastLifelength.Cycles != null ? (int)fd.ForecastLifelength.Cycles : 0; int forecastHours = fd.ForecastLifelength.Hours != null ? (int)fd.ForecastLifelength.Hours : 0; int forecastDays = fd.ForecastLifelength.Days != null ? (int)fd.ForecastLifelength.Days : 0; string forecastDate = ""; if (fd.SelectedForecastType == ForecastType.ForecastByDate) { forecastDate = SmartCore.Auxiliary.Convert.GetDateFormat(fd.ForecastDate); } else if (fd.SelectedForecastType == ForecastType.ForecastByPeriod) { forecastDate = SmartCore.Auxiliary.Convert.GetDateFormat(fd.LowerLimit) + " - " + SmartCore.Auxiliary.Convert.GetDateFormat(fd.ForecastDate); } else if (fd.SelectedForecastType == ForecastType.ForecastByCheck) { if (fd.NextPerformanceByDate) { forecastDate = fd.NextPerformanceString; } else { forecastDate = $"{fd.CheckName}. {SmartCore.Auxiliary.Convert.GetDateFormat(Convert.ToDateTime(fd.NextPerformance.PerformanceDate))}"; } } destinationDataSet.ForecastTable.AddForecastTableRow(avgUtilizationCycles, avgUtilizationHours, avgUtilizationType, forecastCycles, forecastHours, forecastDays, forecastDate); }
private ForecastHelper.ColumnCaption[] GetColumns(ForecastData data) { return(data.Columns.Select(e => new ForecastHelper.ColumnCaption { ColumnName = e.Indicator.Code + e.Period.Id, IndicatorName = e.Indicator.Name, IndicatorCode = e.Indicator.Code, PeriodId = e.Period.Id, PeriodName = e.Period.Name }).ToArray()); }
private void OnForecastReceived(string data) { Debug.Log("Incoming data..."); try{ forecastData = JsonUtility.FromJson <ForecastData>(data); }catch (Exception e) { Debug.LogError($"Error on message received: {e.ToString()}:"); Debug.LogError(e.Message); } }
//---------------------------------------------------------------------- // public void setData(ForecastData wData) { BindingContext = wData; weathers.Clear(); WeatherForecastList.ItemsSource = weathers; for (int i = 0; i < 7; i++) { weathers.Add(new ItemWeather { Temp = wData.list[i].main.temp.ToString(), Date = i, Icon = wData.list[i].weather[0].icon }); } }
private List <ForecastData> ParsePage(HtmlDocument html) { List <ForecastData> forecastData = new List <ForecastData>(); try { var listForecast = html.DocumentNode.SelectNodes("//li"); foreach (var item in listForecast) { if (!item.InnerHtml.Contains("u-dp data-info")) { continue; } ForecastData data = new ForecastData(); try { var info = item.SelectSingleNode(".//span[@class='u-dp data-info']").InnerText.TrimStart().TrimEnd().Split('%'); Int32.TryParse(info[0].Replace("-", "").Replace("+", ""), out var percent); Int32.TryParse(info[1].Replace("(", "").Replace(")", ""), out var countBet); data.NameBetter = item.SelectSingleNode(".//div[@class='title-name']/div/a").InnerText.TrimStart().TrimEnd(); data.NameBet = item.SelectSingleNode(".//div[@class='pick-line']").InnerText.TrimStart().TrimEnd(); data.Percent = info[0].Contains("-") ? 0 - percent : percent; data.CountBet = countBet; data.HtmlPayload = item.SelectSingleNode(".//div[@class='feed-pick-title']").InnerHtml.TrimStart().TrimEnd(); data.TimeBet = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")); //DateTime.Now;//.ToString("dd.MM.yyyy HH:mm"); if (!item.InnerText.Contains("Show details")) { var timeStartMatch = item.SelectSingleNode(".//small[@class='text-muted']").InnerText.Split('\n').Where(x => x.Contains("Kick off")).First().TrimStart().TrimEnd().Replace("Kick off: ", ""); data.TimeEndBet = DateTime.Parse(timeStartMatch).AddHours(2); } else { data.TimeEndBet = DateTime.Now.AddHours(10); } forecastData.Add(data); } catch { } } return(forecastData); } catch (Exception e) { throw; } }
public void UpdateFromXml() { if (mForecastCity == null || mForecastTown == null) { return; } mForecastData = GetLatestForecastFromXML(); if (mForecastData != null) { UpdateTile(mForecastCity.Name + mForecastTown.Name); } }
} // end of method DeserializeOpenWeatherMapWxJSON public static bool DeserializeOpenWeatherMapFxJSON(string strJSON, ref ForecastData owmFxWeatherData) { owmFxWeatherData = JsonConvert.DeserializeObject <ForecastData>(strJSON); if (owmFxWeatherData == null) { return(false); }// end of if block else { return(true); } // end of else block } // end of method DeserializeOpenWeatherMapFxJSON
/// <summary> /// Данные работы обновляются по введенным значениям /// </summary> private bool SaveData() { foreach (ForecastAdvancedControlItem control in _forecastControlItems) { if (!control.SaveData()) { return(false); } ForecastData fd = control.CurrneForecastData; fd.IncludeNotifyes = checkBoxNotifyes.Checked; fd.IncludePercents = checkBoxIncludePercents.Checked; fd.Percents = (int)numericUpDownPercents.Value; } return(true); }
public async Task <List <EntitiyData> > GetForecastData(string query) { List <EntitiyData> list = null; try { var response = await client.GetAsync(query); if (response.IsSuccessStatusCode) { var content = await response.Content.ReadAsStringAsync(); ForecastData forecastData = JsonConvert.DeserializeObject <ForecastData>(content); list = new List <EntitiyData>(); for (int i = 0; i < forecastData.List.Count; i++) { if (i % 8 == 7) { EntitiyData entitiyData = new EntitiyData { Location = forecastData.City.Name, Country = forecastData.City.Country, DateTime = forecastData.List[i].Dt, Temp = forecastData.List[i].Main.Temp, Icon = forecastData.List[i].Weather[0].Icon, Name = forecastData.List[i].Weather[0].Main, Desc = forecastData.List[i].Weather[0].Description, Humidity = forecastData.List[i].Main.Humidity, Pressure = forecastData.List[i].Main.Pressure, Wind = forecastData.List[i].Wind.Speed }; list.Add(entitiyData); } } } } catch (Exception ex) { Debug.WriteLine("\t\tERROR {0}", ex.Message); } return(list); }
public ForecastViewModel() { if (DesignerProperties.IsInDesignTool) { CurrentForecastData = new ForecastData { Temperature = "20", Rain = "0", CI = "舒適", WeatherIcon = "Weather02.bmp", Wx = "短暫雨" }; WeatherIcon = "Weather02.bmp"; MaxT = "28"; MinT = "17"; } }
public WeatherData ConvertJSONToModel(int zipCode, string jsonData, bool fromCache) { var finaldata = new WeatherData() { ZipCode = zipCode.ToString(), FromCache = fromCache, ForcastInfo = new List <ForecastData>() }; try { APIData x = JsonConvert.DeserializeObject <APIData>(jsonData); finaldata.City = x.location.name; finaldata.Region = x.location.region; finaldata.CurrentTempDegreesF = x.current.temp_f.ToString(); finaldata.Condition = x.current.condition.text; finaldata.ConditionIconUrl = x.current.condition.icon; finaldata.FeelsLikeTempDegreesF = x.current.feelslike_f.ToString(); finaldata.LastUpdated = x.current.last_updated; finaldata.WindDirection = x.current.wind_dir; finaldata.WindSpeedMPH = x.current.wind_mph.ToString(); foreach (ForecastDay y in x.forecast.forecastday) { var t = new ForecastData() { AvgTempDegreesF = y.day.avgtemp_f.ToString(), Condition = y.day.condition.text, ConditionIconUrl = y.day.condition.icon, Date = y.date, MaxTempDegreesF = y.day.maxtemp_f.ToString(), MinTempDegreesF = y.day.mintemp_f.ToString() }; finaldata.ForcastInfo.Add(t); } } catch { } return(finaldata); }
public Lifelength GetCurrentFlightLifelength(BaseEntityObject source, ForecastData forecastData = null) { if (source == null) { return(Lifelength.Null); } if (forecastData == null) { return(GetFlightLifelengthOnEndOfDay(source, DateTime.Today)); } if (forecastData.ForecastDate <= DateTime.Today) { return(GetFlightLifelengthOnEndOfDay(source, forecastData.ForecastDate)); } var res = GetFlightLifelengthOnEndOfDay(source, DateTime.Today); res += AnalystHelper.GetUtilization(forecastData.AverageUtilization, (forecastData.ForecastDate - DateTime.Today).Days); return(res); }
/// <summary> /// Метод, обрабатывающий событие нажатия ссылки Discrepancies /// </summary> /// <param name="e"></param> public void OnDiscrepanciesLinkDisplayRequested(ReferenceEventArgs e) { e.TypeOfReflection = ReflectionTypes.DisplayInNew; var parentAircraft = GlobalObjects.AircraftsCore.GetAircraftById(_baseComponent.ParentAircraftId); //TODO:(Evgenii Babak) пересмотреть использование ParentAircrafId здесь var parentStore = GlobalObjects.StoreCore.GetStoreById(_baseComponent.ParentStoreId); if (_baseComponent.BaseComponentType == BaseComponentType.Frame) { e.DisplayerText = $"{_baseComponent.GetParentAircraftRegNumber()}. Aircraft Frame SN {_baseComponent.SerialNumber}. Forecast"; } else { if (parentAircraft != null) { e.DisplayerText = $"{_baseComponent.GetParentAircraftRegNumber()}. {_baseComponent}. Forecast"; } if (parentStore != null) { e.DisplayerText = parentStore.Name + ". " + _baseComponent + ". Forecast"; } } ForecastData forecastData = null; if (parentAircraft != null) { var aircraftFrame = GlobalObjects.ComponentCore.GetBaseComponentById(parentAircraft.AircraftFrameId); var averageUtilization = GlobalObjects.AverageUtilizationCore.GetAverageUtillization(aircraftFrame); forecastData = new ForecastData(DateTime.Today, averageUtilization, GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_baseComponent)); } if (parentStore != null) { forecastData = new ForecastData(DateTime.Today, new AverageUtilization(10, 5, UtilizationInterval.Dayly), GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_baseComponent)); } if (forecastData != null) { e.RequestedEntity = new ForecastListScreen(_baseComponent, DirectiveType.All); } }
//---------------------------------------------------------------------- // async void OnGetWeatherButtonClicked(object sender, EventArgs e) { Console.WriteLine("Aloha"); if (!string.IsNullOrWhiteSpace(_cityEntry.Text)) { ForecastData weatherData = await _restService.GetWeatherData(APIServer.RequestUriByCity(_cityEntry.Text)); if (weatherData == null) { await DisplayAlert("Alert", "Not found", "OK"); return; } Console.WriteLine("Data: " + weatherData.city.name + weatherData.list[1].weather[0].description); Console.WriteLine(DateTime.Now.DayOfWeek); BindingContext = weatherData; WeatherData(weatherData.list); } else { await DisplayAlert("Alert", "Please enter a valid city name", "OK"); } }
public async Task <ForecastData> GetForecastFromEndpoint(string query) { ForecastData forecastData = null; try { var response = await _client.GetAsync(query); if (response.IsSuccessStatusCode) { var content = await response.Content.ReadAsStringAsync(); forecastData = JsonConvert.DeserializeObject <ForecastData>(content); } } catch (Exception ex) { Debug.WriteLine("\t\tERROR {0}", ex.Message); } return(forecastData); }
private ForecastHelper.ForecastItem[] GetDataCollection(ForecastData data) { return(data.Rows.Select(row => { var item = new ForecastHelper.ForecastItem { Name = row.Value, Id = row.Id, RowId = row.Cells.First().RowId, CanEdit = true }; List <ForecastItemValue> values = new List <ForecastItemValue>(); foreach (var column in data.Columns) { var cell = row.Cells.FirstOrDefault(e => e.PeriodId == column.Period.Id && e.IndicatorId == column.Indicator.Id); ForecastItemValue currentCellValue = cell == null ? CreateEmptyValue(column.Indicator.Id, column.Indicator.Code, column.Period.Id) : CreateValueFromCell(cell, column.Indicator.Code); values.Add(currentCellValue); } item.ForecastItemValues = values.ToArray(); return item; }).ToArray()); }
protected virtual void AddForecastToDataSet(WorkscopeDataSet destinationDataSet) { ForecastData fd = _forecast != null?_forecast.GetForecastDataFrame() : null; double avgUtilizationCycles = fd != null ? fd.AverageUtilization.Cycles : 0; double avgUtilizationHours = fd != null ? fd.AverageUtilization.Hours : 0; string avgUtilizationType = fd != null ? fd.AverageUtilization.SelectedInterval.ToString() : ""; int forecastCycles = fd != null ? fd.ForecastLifelength.Cycles != null ? (int)fd.ForecastLifelength.Cycles : 0 : 0; int forecastHours = fd != null ? fd.ForecastLifelength.Hours != null ? (int)fd.ForecastLifelength.Hours : 0 : 0; int forecastDays = fd != null ? fd.ForecastLifelength.Days != null ? (int)fd.ForecastLifelength.Days : 0 : 0; string forecastDate = _forecast != null ? _forecast.ForecastDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()) : ""; destinationDataSet.ForecastTable.AddForecastTableRow(avgUtilizationCycles, avgUtilizationHours, avgUtilizationType, forecastCycles, forecastHours, forecastDays, forecastDate); }
public Lifelength GetFlightLifelengthOnStartOfDay(BaseEntityObject source, ForecastData forecastData = null) { if (source == null) { return new Lifelength { Days = GetDays(DateTimeExtend.GetCASMinDateTime(), DateTime.Today) } } ; if (forecastData == null) { return(GetFlightLifelengthOnStartOfDay(source, DateTime.Today)); } if (forecastData.ForecastDate <= DateTime.Today) { return(GetFlightLifelengthOnStartOfDay(source, forecastData.ForecastDate)); } var res = GetFlightLifelengthOnStartOfDay(source, DateTime.Today); res += AnalystHelper.GetUtilization(forecastData.AverageUtilization, (forecastData.ForecastDate - DateTime.Today).Days); return(res); }
protected override async void OnAppearing() { base.OnAppearing(); if (IsBusy) { return; } try { HttpService Client = new HttpService(); ForecastData data = await Client.getForecast(Client.generateUri("forecast", this.city.Name)); city.Forecast = data; await city.setForecastData(data); } catch (Exception e) { await Application.Current.MainPage.DisplayAlert( "An error occurred, please try again later.", e.Message, "Ok" ); } finally { IsBusy = false; } this.Children.Clear(); //TODO: Delete this lines and classes //this.Children.Add(new TodayPage(this.city)); //this.Children.Add(new TomorrowPage(this.city)); this.Children.Add(new SingleDayPage(this.city, "Today")); this.Children.Add(new SingleDayPage(this.city, "Tomorrow")); this.Children.Add(new FiveDaysPage(this.city)); }
private void ForecastMenuClick(object sender, EventArgs e) { CancelAsync(); List <BaseComponent> aircraftBaseComponents = null; if (CurrentAircraft != null) { //поиск деталей данного самолета aircraftBaseComponents = new List <BaseComponent>(GlobalObjects.ComponentCore.GetAicraftBaseComponents(CurrentAircraft.ItemId)); //очистка массива данных по прогнозам if (aircraftBaseComponents.Count != 0) { _currentForecast.ForecastDatas.Clear(); } } else { _currentForecast.ForecastDatas[0].ForecastLifelength = new Lifelength(0, 0, 0); } switch ((string)sender) { case "No Forecast": { } break; case "Today": { if (aircraftBaseComponents != null) { //составление нового массива данных по прогнозам foreach (var baseComponent in aircraftBaseComponents) { //определение ресурсов прогноза для каждой базовой детали ForecastData forecastData = new ForecastData(DateTime.Today, baseComponent, GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseComponent)); //дабавление в массив _currentForecast.ForecastDatas.Add(forecastData); } ForecastData main = _currentForecast.GetForecastDataFrame() ?? _currentForecast.ForecastDatas[0]; labelDateAsOf.Text = "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) + " Aircraft TSN/CSN: " + main.ForecastLifelength + "\nAvg. utlz: " + main.AverageUtilization; } } break; case "This week": { if (aircraftBaseComponents != null) { //составление нового массива данных по прогнозам foreach (var baseComponent in aircraftBaseComponents) { //определение ресурсов прогноза для каждой базовой детали ForecastData forecastData = new ForecastData(DateTime.Today.AddDays(7), baseComponent, GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseComponent)); //дабавление в массив _currentForecast.ForecastDatas.Add(forecastData); } ForecastData main = _currentForecast.GetForecastDataFrame() ?? _currentForecast.ForecastDatas[0]; labelDateAsOf.Text = "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) + " Aircraft TSN/CSN: " + main.ForecastLifelength + "\nAvg. utlz: " + main.AverageUtilization; } } break; case "Two weeks": { if (aircraftBaseComponents != null) { //составление нового массива данных по прогнозам foreach (var baseComponent in aircraftBaseComponents) { //определение ресурсов прогноза для каждой базовой детали ForecastData forecastData = new ForecastData(DateTime.Today.AddDays(14), baseComponent, GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseComponent)); //дабавление в массив _currentForecast.ForecastDatas.Add(forecastData); } ForecastData main = _currentForecast.GetForecastDataFrame() ?? _currentForecast.ForecastDatas[0]; labelDateAsOf.Text = "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) + " Aircraft TSN/CSN: " + main.ForecastLifelength + "\nAvg. utlz: " + main.AverageUtilization; } } break; case "Month": { if (aircraftBaseComponents != null) { //составление нового массива данных по прогнозам foreach (var baseComponent in aircraftBaseComponents) { //определение ресурсов прогноза для каждой базовой детали ForecastData forecastData = new ForecastData(DateTime.Today.AddMonths(1), baseComponent, GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseComponent)); //дабавление в массив _currentForecast.ForecastDatas.Add(forecastData); } ForecastData main = _currentForecast.GetForecastDataFrame() ?? _currentForecast.ForecastDatas[0]; labelDateAsOf.Text = "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) + " Aircraft TSN/CSN: " + main.ForecastLifelength + "\nAvg. utlz: " + main.AverageUtilization; } } break; case "Custom": { if (aircraftBaseComponents != null) { //составление нового массива данных по прогнозам foreach (var baseComponent in aircraftBaseComponents) { //определение ресурсов прогноза для каждой базовой детали ForecastData forecastData = new ForecastData(DateTime.Today, baseComponent, GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(baseComponent)); //дабавление в массив _currentForecast.ForecastDatas.Add(forecastData); } } ForecastData main = _currentForecast.GetForecastDataFrame() ?? _currentForecast.ForecastDatas[0]; ForecastCustomsWriteData form = new ForecastCustomsWriteData(_currentForecast); ForecastCustomsAdvancedForm advancedForm = new ForecastCustomsAdvancedForm(_currentForecast); form.ShowDialog(); if (form.DialogResult != DialogResult.OK && form.CallAdvanced) { advancedForm.ShowDialog(); } if (form.DialogResult == DialogResult.OK || advancedForm.DialogResult == DialogResult.OK) { if (main.SelectedForecastType == ForecastType.ForecastByDate) { if (CurrentAircraft != null) { labelDateAsOf.Text = "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) + " Aircraft TSN/CSN: " + main.ForecastLifelength + "\nAvg. utlz: " + main.AverageUtilization; } else { labelDateAsOf.Text = "Forecast date: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) + " Component TSN/CSN: " + main.ForecastLifelength + "\nAvg. utlz: " + main.AverageUtilization; } } else if (main.SelectedForecastType == ForecastType.ForecastByPeriod) { labelDateAsOf.Text = "Forecast Period From: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.LowerLimit) + " To: " + SmartCore.Auxiliary.Convert.GetDateFormat(main.ForecastDate) + "\nAvg. utlz: " + main.AverageUtilization; } else if (main.SelectedForecastType == ForecastType.ForecastByCheck) { if (main.NextPerformanceByDate) { labelDateAsOf.Text = "Forecast: " + main.NextPerformanceString; } else { labelDateAsOf.Text = $"Forecast: {main.CheckName}. {main.NextPerformance}"; } } } else { return; } } break; } AnimatedThreadWorker.DoWork -= AnimatedThreadWorkerDoWork; AnimatedThreadWorker.DoWork -= AnimatedThreadWorkerDoFilteringWork; AnimatedThreadWorker.DoWork += AnimatedThreadWorkerDoWork; AnimatedThreadWorker.RunWorkerAsync(); }
private void gotForecast(ForecastData data, Station station) { Debug.WriteLine(data); }
protected override void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e) { backgroundWorker.ReportProgress(50); try { Invoke(new Action(() => listViewCompliance.Items.Clear())); } catch (Exception) { } if (_currentComponent == null) { e.Cancel = true; return; } var parentAircraft = GlobalObjects.AircraftsCore.GetParentAircraft(_currentComponent); var lastRecords = new List <AbstractRecord>(); var nextPerformances = new List <NextPerformance>(); var allWorkPackagesIncludedTask = new CommonCollection <WorkPackage>(); var openPubWorkPackagesIncludedTask = new CommonCollection <WorkPackage>(); var closedWorkPackages = new CommonCollection <WorkPackage>(); var taskThatIncludeInWorkPackage = new List <IDirective>(); lastRecords.AddRange(_currentComponent.TransferRecords.ToArray()); lastRecords.AddRange(_currentComponent.ChangeLLPCategoryRecords.ToArray()); lastRecords.AddRange(_currentComponent.ActualStateRecords.ToArray()); //Объекты для в котороые будет извлекаться информация //из записеи о перемещении var lastDestination = ""; //прогнозируемый ресурс //если известна родительская деталь данной директивы, //то ее текущая наработка и средняя утилизация //используются в качестве ресурсов прогноза //для расчета всех просроченных выполнений var forecastData = new ForecastData(DateTime.Now, GlobalObjects.AverageUtilizationCore.GetAverageUtillization(_currentComponent), GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_currentComponent)); foreach (var directive in _currentComponent.ComponentDirectives) { if (directive.IsAffect().GetValueOrDefault(true)) { //расчет след. выполнений директивы. //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения //если неизвестне, то только первое //GlobalObjects.PerformanceCalculator.GetNextPerformance(directive, forecastData); nextPerformances.AddRange(directive.NextPerformances); lastRecords.AddRange(directive.PerformanceRecords.ToArray()); if (backgroundWorker.CancellationPending) { e.Cancel = true; return; } taskThatIncludeInWorkPackage.Add(directive); } else { var bindedItems = GlobalObjects.BindedItemsCore.GetBindedItemsFor(parentAircraft.ItemId, directive); foreach (var bindedItem in bindedItems) { if (bindedItem is MaintenanceDirective) { var mpd = (MaintenanceDirective)bindedItem; //прогнозируемый ресурс //если известна родительская деталь данной директивы, //то ее текущая наработка и средняя утилизация //используются в качестве ресурсов прогноза //для расчета всех просроченных выполнений //расчет след. выполнений директивы. //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения //если неизвестне, то только первое GlobalObjects.PerformanceCalculator.GetNextPerformance(mpd, forecastData); nextPerformances.AddRange(mpd.NextPerformances); lastRecords.AddRange(mpd.PerformanceRecords.ToArray()); taskThatIncludeInWorkPackage.Add(mpd); } } } } //загрузка рабочих пакетов для определения //перекрытых ими выполнений задач if (_openPubWorkPackages == null) { _openPubWorkPackages = new CommonCollection <WorkPackage>(); } _openPubWorkPackages.Clear(); //загрузка рабочих пакетов для определения _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Opened)); _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Published)); allWorkPackagesIncludedTask.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.All, taskThatIncludeInWorkPackage)); #region Добавление в список просроченных выполнений //и сравнение их с открытыми и опубликованными рабочими пакетами openPubWorkPackagesIncludedTask.AddRange( allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Opened || wp.Status == WorkPackageStatus.Published)); //сбор всех записей рабочих пакетов для удобства фильтрации var openPubWpRecords = openPubWorkPackagesIncludedTask.SelectMany(wp => wp.WorkPakageRecords).ToList(); //LINQ запрос для сортировки записей по дате var sortNextRecords = (from record in nextPerformances orderby GetDate(record) descending select record).ToList(); for (int i = 0; i < sortNextRecords.Count; i++) { if (backgroundWorker.CancellationPending) { allWorkPackagesIncludedTask.Clear(); openPubWorkPackagesIncludedTask.Clear(); closedWorkPackages.Clear(); e.Cancel = true; return; } //поиск записи в рабочих пакетах по данному чеку //чей номер группы выполнения (по записи) совпадает с расчитанным var parentDirective = sortNextRecords[i].Parent; //номер выполнения int parentCountPerf; if (parentDirective.LastPerformance != null) { parentCountPerf = parentDirective.LastPerformance.PerformanceNum <= 0 ? 1 : parentDirective.LastPerformance.PerformanceNum; } else { parentCountPerf = 0; } parentCountPerf += parentDirective.NextPerformances.IndexOf(sortNextRecords[i]); parentCountPerf += 1; var wpr = openPubWpRecords.FirstOrDefault(r => r.PerformanceNumFromStart == parentCountPerf && r.WorkPackageItemType == parentDirective.SmartCoreObjectType.ItemId && r.DirectiveId == parentDirective.ItemId); if (wpr != null) { var wp = openPubWorkPackagesIncludedTask.GetItemById(wpr.WorkPakageId); //запись о выполнении блокируется найденым пакетом sortNextRecords[i].BlockedByPackage = wp; //последующие записи о выполнении так же должны быть заблокированы for (int j = i - 1; j >= 0; j--) { //блокировать нужно все рабочие записи, или до первой записи, //заблокированной другим рабочим пакетом if (sortNextRecords[j].BlockedByPackage != null || sortNextRecords[j].Condition != ConditionState.Overdue) { break; } if (sortNextRecords[j].Parent == parentDirective) { sortNextRecords[j].BlockedByPackage = wp; Invoke(new Action <int, Color>(SetItemColor), j, Color.FromArgb(Highlight.GrayLight.Color)); } } } Invoke(new Action <NextPerformance>(AddListViewItem), sortNextRecords[i]); } #endregion #region Добавление в список записей о произведенных выполнениях //и сравнение их с закрытыми рабочими пакетами closedWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Closed)); //LINQ запрос для сортировки записей по дате var sortLastRecords = (from record in lastRecords orderby record.RecordDate ascending select record).ToList(); var items = new List <KeyValuePair <AbstractRecord, string[]> >(); for (int i = 0; i < sortLastRecords.Count; i++) { if (backgroundWorker.CancellationPending) { allWorkPackagesIncludedTask.Clear(); openPubWorkPackagesIncludedTask.Clear(); closedWorkPackages.Clear(); e.Cancel = true; return; } string[] subs; if (sortLastRecords[i] is DirectiveRecord) { var directiveRecord = (DirectiveRecord)sortLastRecords[i]; subs = new[] { directiveRecord.WorkType, UsefulMethods.NormalizeDate(directiveRecord.RecordDate), directiveRecord.OnLifelength != null ? directiveRecord.OnLifelength.ToString() : "", "", "", directiveRecord.Remarks }; } else if (sortLastRecords[i] is TransferRecord) { TransferRecord transferRecord = (TransferRecord)sortLastRecords[i]; string currentDestination, destinationObject; DestinationHelper.GetDestination(transferRecord, out currentDestination, out destinationObject); subs = new[] { lastDestination != "" ? "Transfered " + destinationObject + " from " + lastDestination + " to " + currentDestination : "Transfered " + destinationObject + " to " + currentDestination, UsefulMethods.NormalizeDate(transferRecord.TransferDate), transferRecord.OnLifelength.ToString(), "", "", transferRecord.Remarks, }; lastDestination = currentDestination; } else if (sortLastRecords[i] is ComponentLLPCategoryChangeRecord) { ComponentLLPCategoryChangeRecord llpRecord = (ComponentLLPCategoryChangeRecord)sortLastRecords[i]; LLPLifeLimitCategory toCategory = llpRecord.ToCategory; subs = new[] { "Changed to " + toCategory, UsefulMethods.NormalizeDate(llpRecord.RecordDate), llpRecord.OnLifelength.ToString(), "", "", llpRecord.Remarks, }; } else if (sortLastRecords[i] is ActualStateRecord) { ActualStateRecord actualStateRecord = (ActualStateRecord)sortLastRecords[i]; subs = new[] { "Actual state:", UsefulMethods.NormalizeDate(actualStateRecord.RecordDate.Date), actualStateRecord.OnLifelength != null ? actualStateRecord.OnLifelength.ToString() : "", "", "", actualStateRecord.Remarks, }; } else { subs = new[] { "Unknown record ", UsefulMethods.NormalizeDate(sortLastRecords[i].RecordDate), sortLastRecords[i].OnLifelength.ToString(), "", "", sortLastRecords[i].Remarks, }; } items.Add(new KeyValuePair <AbstractRecord, string[]>(sortLastRecords[i], subs)); } #endregion for (int i = items.Count - 1; i >= 0; i--) { WorkPackage workPackage = null; if (items[i].Key is AbstractPerformanceRecord) { var apr = items[i].Key as AbstractPerformanceRecord; workPackage = closedWorkPackages.FirstOrDefault(wp => wp.ItemId == apr.DirectivePackageId); } Invoke(new Action <AbstractRecord, string[], WorkPackage>(AddListViewItem), items[i].Key, items[i].Value, workPackage); } allWorkPackagesIncludedTask.Clear(); openPubWorkPackagesIncludedTask.Clear(); closedWorkPackages.Clear(); backgroundWorker.ReportProgress(100); }