/// <summary> /// 根据选中时间和机型生成相应的饼图和飞机数据 /// </summary> /// <param name="SelectedName">选中机型</param> /// <param name="time">选中时间</param> public void CreateFleetAgeCollection(string SelectedName, DateTime time) { //机龄的饼图分布集合 List<FleetAgeComposition> AgeCompositionList = new List<FleetAgeComposition>(); //机龄饼图的飞机数据分布字典 AircraftByAgeDic = new Dictionary<string, List<Aircraft>>(); //当前时间点的可计算机龄的飞机 IEnumerable<Aircraft> MonthAircraft = this.ViewAircraft.Where(p => p.FactoryDate != null).Where(o => o.OperationHistories.Any(p => p.StartDate <= time && !(p.EndDate != null && p.EndDate < time)) && o.AircraftBusinesses.Any(p => p.StartDate <= time && !(p.EndDate != null && p.EndDate < time)) && o.FactoryDate <= time && !(o.ExportDate != null && o.ExportDate < time)); if (SelectedName != "所有飞机" && MonthAircraft != null) { if (AgeSelectedIndex == 0) { MonthAircraft = MonthAircraft.Where(o => o.AircraftBusinesses.FirstOrDefault(p => p.StartDate <= time && !(p.EndDate != null && p.EndDate < time)).AircraftType.AircraftCategory.Regional == SelectedName); } else if (AgeSelectedIndex == 1) { MonthAircraft = MonthAircraft.Where(o => o.AircraftBusinesses.FirstOrDefault(p => p.StartDate <= time && !(p.EndDate != null && p.EndDate < time)).AircraftType.Name == SelectedName); } else if (AgeSelectedIndex == 2) { MonthAircraft = MonthAircraft.Where(o => o.OperationHistories.FirstOrDefault(p => p.StartDate <= time && !(p.EndDate != null && p.EndDate < time)).Airlines.ShortName == SelectedName); } } var xmlconfig = this.ViewXmlConfig.FirstOrDefault(p => p.ConfigType == "机龄配置"); XElement agecolor = null; XmlConfig colorconfig = this.ViewXmlConfig.FirstOrDefault(p => p.ConfigType == "颜色配置"); if (colorconfig != null && colorconfig.XmlContent.Descendants("Type").Any(p => p.Attribute("TypeName").Value == "机龄")) { agecolor = colorconfig.XmlContent.Descendants("Type").FirstOrDefault(p => p.Attribute("TypeName").Value == "机龄"); } if (xmlconfig != null && MonthAircraft != null && MonthAircraft.Count() > 0) { XElement xelement = xmlconfig.XmlContent; foreach (XElement item in xelement.Descendants("Item")) { int StartYear = Convert.ToInt32(item.Attribute("Start").Value); int EndYear = Convert.ToInt32(item.Attribute("End").Value); //设置相应机龄范围的飞机数据,用于弹出窗体的数据显示 var AircraftByAge = MonthAircraft.Where(p => EndYear * 12 > (time.Year - Convert.ToDateTime(p.FactoryDate).Year) * 12 + (time.Month - Convert.ToDateTime(p.FactoryDate).Month) && (time.Year - Convert.ToDateTime(p.FactoryDate).Year) * 12 + (time.Month - Convert.ToDateTime(p.FactoryDate).Month) >= StartYear * 12).ToList(); if (AircraftByAge != null && AircraftByAge.Count() > 0) { FleetAgeComposition AgeComposition = new FleetAgeComposition(); AgeComposition.AgeGroup = item.Value; AgeComposition.GroupCount = AircraftByAge.Count(); AgeComposition.ToolTip = AgeComposition.GroupCount + " 架,占" + (AircraftByAge.Count() * 100 / MonthAircraft.Count()).ToString("##0") + "%"; if (agecolor != null) { AgeComposition.Color = agecolor.Descendants("Item") .FirstOrDefault(p => p.Attribute("Name").Value == AgeComposition.AgeGroup).Attribute("Color").Value; } AgeCompositionList.Add(AgeComposition); AircraftByAgeDic.Add(AgeComposition.AgeGroup, AircraftByAge); } } } FleetAgeCollection = AgeCompositionList; if (MonthAircraft != null) { //飞机详细数据集合 AircraftCollection = commonmethod.GetAircraftByTime(MonthAircraft.ToList(), time); } }
/// <summary> /// 根据选中时间和机型生成相应的饼图和飞机数据 /// </summary> /// <param name="aircraftType">选中机型</param> /// <param name="time">选中时间</param> public void CreateFleetAgeCollection(string aircraftType, DateTime time) { //机龄的饼图分布集合 var ageCompositionList = new List<FleetAgeComposition>(); //机龄饼图的飞机数据分布字典 aircraftByAgeDic = new Dictionary<string, List<AircraftDTO>>(); IEnumerable<AircraftDTO> aircraft = null; if (aircraftType.Equals("所有机型", StringComparison.OrdinalIgnoreCase)) { aircraft = Aircrafts.Where(p => p.FactoryDate != null) .Where( o => o.AircraftBusinesses.Any( p => p.StartDate <= time && !(p.EndDate != null && p.EndDate < time)) && o.FactoryDate <= time && !(o.ExportDate != null && o.ExportDate < time)); } var xmlConfig = XmlConfigs.FirstOrDefault(p => p.ConfigType.Equals("机龄配置", StringComparison.OrdinalIgnoreCase)); XElement ageColor = null; var colorConfig = XmlSettings.FirstOrDefault(p => p.SettingType.Equals("颜色配置", StringComparison.OrdinalIgnoreCase)); if (colorConfig != null && XElement.Parse(colorConfig.SettingContent) .Descendants("Type") .Any(p => p.Attribute("TypeName").Value.Equals("机龄", StringComparison.OrdinalIgnoreCase))) { ageColor = XElement.Parse(colorConfig.SettingContent) .Descendants("Type") .FirstOrDefault(p => p.Attribute("TypeName").Value.Equals("机龄", StringComparison.OrdinalIgnoreCase)); } if (xmlConfig != null && aircraft != null) { var aircraftDtos = aircraft as AircraftDTO[] ?? aircraft.ToArray(); var xelement = XElement.Parse(xmlConfig.ConfigContent); foreach (var item in xelement.Descendants("Item")) { var startYear = Convert.ToInt32(item.Attribute("Start").Value); var endYear = Convert.ToInt32(item.Attribute("End").Value); //设置相应机龄范围的飞机数据,用于弹出窗体的数据显示 var aircraftByAge = aircraftDtos.Where(p => endYear*12 > (time.Year - Convert.ToDateTime(p.FactoryDate).Year)*12 + (time.Month - Convert.ToDateTime(p.FactoryDate).Month) && (time.Year - Convert.ToDateTime(p.FactoryDate).Year)*12 + (time.Month - Convert.ToDateTime(p.FactoryDate).Month) >= startYear*12).ToList(); if (aircraftByAge != null && aircraftByAge.Any()) { var ageComposition = new FleetAgeComposition { AgeGroup = item.Value, GroupCount = aircraftByAge.Count() }; ageComposition.ToolTip = ageComposition.GroupCount + " 架,占" + (aircraftByAge.Count()*100/aircraftDtos.Count()).ToString("##0") + "%"; if (ageColor != null) { var firstOrDefault = ageColor.Descendants("Item") .FirstOrDefault(p => p.Attribute("Name") .Value.Equals(ageComposition.AgeGroup, StringComparison.OrdinalIgnoreCase)); if (firstOrDefault != null) ageComposition.Color = firstOrDefault.Attribute("Color").Value; } ageCompositionList.Add(ageComposition); aircraftByAgeDic.Add(ageComposition.AgeGroup, aircraftByAge); } } FleetAgeCollection = ageCompositionList; //飞机详细数据集合 AircraftCollection = CommonMethod.GetAircraftByTime(aircraftDtos.ToList(), time); } }