public void OnSeletctSameSiteEvent(TyeBaseSiteEntity entity) { this.SeletctSameSiteEvent?.Invoke(entity); }
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values == null) { return(null); } // Message:起始杆号可选项删选 if (values.Length == 4) { // Message:起始站 TyeBaseSiteEntity start = values[0] as TyeBaseSiteEntity; // Message:结束站 TyeBaseSiteEntity end = values[1] as TyeBaseSiteEntity; if (start == null || end == null) { return(null); } if (start.ID != end.ID) { return(null); } string stationID = start.ID; // Message:当前站杆号列表 List <TyeBasePillarEntity> rods = (values[3] as ObservableCollection <TyeBasePillarEntity>).ToList(); // Message:任务列表哦 ObservableCollection <TaskView4CModel> collection = values[2] as ObservableCollection <TaskView4CModel>; // Message:查找当前站的所有任务信息 var finds = collection.ToList().FindAll(l => l.StartSite.ID == stationID && l.EndSite.ID == stationID); if (finds == null) { return(rods); } foreach (var item in finds) { if (item.StartPole == null || item.EndPole == null) { continue; } var startIndex = rods.FindIndex(l => l.PoleCode == item.StartPole.PoleCode); var endIndex = rods.FindIndex(l => l.PoleCode == item.EndPole.PoleCode); if (startIndex < 0 || endIndex < 0) { continue; } if (startIndex == endIndex) { rods.RemoveAt(startIndex); } else { rods.RemoveRange(startIndex, endIndex - startIndex + 1); } } return(rods); } // Message:结束杆号可选项删选 else if (values.Length == 5) { // Message:起始站 TyeBaseSiteEntity start = values[0] as TyeBaseSiteEntity; // Message:结束站 TyeBaseSiteEntity end = values[1] as TyeBaseSiteEntity; // Message:上一个杆号 TyeBasePillarEntity r = values[2] as TyeBasePillarEntity; List <TyeBasePillarEntity> lastList = (values[3] as List <TyeBasePillarEntity>); if (start == null || end == null) { return(null); } if (lastList == null) { return(null); } if (r == null) { return(null); } if (start.ID != end.ID) { return(null); } if (values[4] == null) { return(null); } string stationID = start.ID; // Message:当前站所有杆号 List <TyeBasePillarEntity> allrods = (values[4] as ObservableCollection <TyeBasePillarEntity>).Where(l => l.SiteID == stationID).ToList(); // Message:上一个杆号可选择列表 List <TyeBasePillarEntity> rods = lastList.ToList(); int index = rods.FindIndex(l => l.ID == r.ID); // Message:从当前选择的开始截取 rods = rods.Skip(index).ToList(); for (int i = 0; i < rods.Count; i++) { if (i == 0) { continue; } int lastIndex = allrods.ToList().FindIndex(l => l.ID == rods[i - 1].ID); int currentIndex = allrods.ToList().FindIndex(l => l.ID == rods[i].ID); if ((currentIndex - lastIndex) > 1) { rods = rods.Take(rods.FindIndex(l => l.ID == rods[i - 1].ID) + 1).ToList(); break; } } //if (r == null) return null; //// Message:当前站所有杆号 //List<TyeBasePillarEntity> rods = (values[4] as ObservableCollection<TyeBasePillarEntity>).ToList(); //// Message:任务列表 //ObservableCollection<TaskViewModel> collection = values[3] as ObservableCollection<TaskViewModel>; //var index = rods.FindIndex(l => l.PoleCode == r.PoleCode); //// Message:查找当前站的所有任务信息 //var finds = collection.ToList().FindAll(l => l.StartSite.ID == stationID && l.EndSite.ID == stationID); //if (finds == null) //{ // return rods.Skip(index); //} //rods = rods.Skip(index).ToList(); //foreach (var item in finds) //{ // if (item.StartPole == null || item.EndPole == null) continue; // var startIndex = rods.FindIndex(l => l.PoleCode == item.StartPole.PoleCode); // var endIndex = rods.FindIndex(l => l.PoleCode == item.EndPole.PoleCode); // if (startIndex < 0 || endIndex < 0) continue; // if (startIndex == endIndex) // { // rods.RemoveAt(startIndex); // } // else // { // rods.RemoveRange(startIndex, rods.Count - startIndex); // } //} return(rods); } else { return(null); } }
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values == null) { return(null); } if (values.Length == 4) { TyeBaseSiteEntity start = values[0] as TyeBaseSiteEntity; TyeBaseSiteEntity end = values[1] as TyeBaseSiteEntity; if (start == null || end == null) { return(null); } if (start.ID != end.ID) { return(null); } string stationName = start.SiteName; List <TyeBasePillarEntity> rods = (values[3] as ObservableCollection <TyeBasePillarEntity>).ToList(); ObservableCollection <TaskModel> collection = values[2] as ObservableCollection <TaskModel>; // Message:查找当前站的所有任务信息 var finds = collection.ToList().FindAll(l => l.StartSite.SiteName == stationName && l.EndSite.SiteName == stationName); if (finds == null) { return(rods); } foreach (var item in finds) { var startIndex = rods.FindIndex(l => l.PoleCode == item.StartPole.PoleCode); var endIndex = rods.FindIndex(l => l.PoleCode == item.EndPole.PoleCode); if (startIndex < 0 || endIndex < 0) { continue; } if (startIndex == endIndex) { rods.RemoveAt(startIndex); } else { rods.RemoveRange(startIndex, endIndex - startIndex); } } return(rods); } else if (values.Length == 5) { TyeBaseSiteEntity start = values[0] as TyeBaseSiteEntity; TyeBaseSiteEntity end = values[1] as TyeBaseSiteEntity; if (start == null || end == null) { return(null); } if (start.ID != end.ID) { return(null); } string stationName = start.SiteName; TyeBasePillarEntity r = values[2] as TyeBasePillarEntity; if (r == null) { return(null); } List <TyeBasePillarEntity> rods = (values[4] as ObservableCollection <TyeBasePillarEntity>).ToList(); ObservableCollection <TaskModel> collection = values[3] as ObservableCollection <TaskModel>; var index = rods.FindIndex(l => l.PoleCode == r.PoleCode); // Message:查找当前站的所有任务信息 var finds = collection.ToList().FindAll(l => l.StartSite.SiteName == stationName && l.EndSite.SiteName == stationName); if (finds == null) { return(rods.Skip(index)); } rods = rods.Skip(index).ToList(); foreach (var item in finds) { var startIndex = rods.FindIndex(l => l.PoleCode == item.StartPole.PoleCode); var endIndex = rods.FindIndex(l => l.PoleCode == item.EndPole.PoleCode); if (startIndex < 0 || endIndex < 0) { continue; } if (startIndex == endIndex) { rods.RemoveAt(startIndex); } else { rods.RemoveRange(startIndex, rods.Count - startIndex); } } return(rods); } else { return(null); } }
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values == null) { return(null); } // Message:起始站可选值 if (values.Count() == 3) { // Message:所有站列表 ObservableCollection <TyeBaseSiteEntity> first = values[0] as ObservableCollection <TyeBaseSiteEntity>; // Message:任务列表 ObservableCollection <TaskView4CModel> second = values[1] as ObservableCollection <TaskView4CModel>; if (first == null || second == null) { return(null); } List <TyeBaseSiteEntity> stations = first.ToList(); List <TyeBaseSiteEntity> delete = new List <TyeBaseSiteEntity>(); Dictionary <string, ObservableCollection <TyeBasePillarEntity> > PilarCache = values[2] as Dictionary <string, ObservableCollection <TyeBasePillarEntity> >; // Message:查找所有不是同一个站的 { var collection = second.ToList().FindAll(l => l.StartSite.ID != l.EndSite.ID); foreach (var item in collection) { var startIndex = stations.FindIndex(l => l.ID == item.StartSite.ID); var endIndex = stations.FindIndex(l => l.ID == item.EndSite.ID); if (startIndex < 0 || endIndex < 0) { continue; } delete.AddRange(stations.Skip(startIndex).Take(endIndex - startIndex + 1)); //// Message:如果是最后一个站移除 //if (endIndex == stations.Count - 1) //{ // delete.Add(stations.Last()); //} } } // Message:查找所有同一个站 { var collection = second.ToList().FindAll(l => l.StartSite.ID == l.EndSite.ID).GroupBy(l => l.StartSite); foreach (var item in collection) { TyeBaseSiteEntity currentSite = item.Key; // Message:判断选择是否可以选择同一个站 var localstation = second.ToList().FindAll(l => l.StartSite.ID == currentSite.ID && currentSite.ID == l.EndSite.ID); if (PilarCache.ContainsKey(currentSite.ID) == false) { Debug.WriteLine("缓存中没找到对应站的杆号信息:" + currentSite.ID); continue; } List <TyeBasePillarEntity> poles = PilarCache[currentSite.ID].ToList(); var startToEnd = localstation.Select(l => new Tuple <int, int>(Math.Min(poles.FindIndex(k => k.ID == l.StartPole.ID), poles.FindIndex(k => k.ID == l.EndPole.ID)), Math.Max(poles.FindIndex(k => k.ID == l.StartPole.ID), poles.FindIndex(k => k.ID == l.EndPole.ID)))).OrderBy(l => l.Item1).OrderBy(l => l.Item2).ToList(); var exist = poles.ToList().Exists(k => !startToEnd.Exists(l => l.Item1 <= poles.IndexOf(k) && l.Item2 >= poles.IndexOf(k))); // Message:如果所有杆号都分配了则排除当前 if (!exist) { delete.Add(currentSite); } } } stations.RemoveAll(l => delete.Exists(k => k.ID == l.ID)); //if (collection != null) //{ // // Message:起始站全部删除 // stations.RemoveAll(l => collection.Exists(k => l.ID == k.StartSite.ID)); // // Message:结束站如果是最后一个则删除 // if(collection.Exists(k => stations.Last().ID == k.EndSite.ID)) // { // stations.RemoveAll(l => l.ID == stations.Last().ID); // } //} //foreach (var item in collection) //{ // var startIndex = stations.FindIndex(l => l.ID == item.StartSite.ID); // var endIndex = stations.FindIndex(l => l.ID == item.EndSite.ID); // if (startIndex < 0 || endIndex < 0) continue; // stations.RemoveRange(startIndex + 1, stations.Count - startIndex - 1); //} return(stations); } // Message:结束站可选值 else if (values.Count() == 5) { // Message:所有站列表 ObservableCollection <TyeBaseSiteEntity> allList = values[0] as ObservableCollection <TyeBaseSiteEntity>; // Message:起始站列表 List <TyeBaseSiteEntity> startList = values[2] as List <TyeBaseSiteEntity>; // Message:起始站 TyeBaseSiteEntity startSite = values[1] as TyeBaseSiteEntity; // Message:任务列表 ObservableCollection <TaskView4CModel> taskList = values[3] as ObservableCollection <TaskView4CModel>; // Message:站杆号选择列表 Dictionary <string, ObservableCollection <TyeBasePillarEntity> > PilarCache = values[4] as Dictionary <string, ObservableCollection <TyeBasePillarEntity> >; if (allList == null) { return(null); } if (startList == null) { return(null); } if (startSite == null) { return(null); } if (taskList == null) { return(null); } if (PilarCache == null) { return(null); } List <TyeBaseSiteEntity> stations = startList.ToList(); int index = stations.FindIndex(l => l.ID == startSite.ID); // Message:从当前选择的开始截取 stations = stations.Skip(stations.FindIndex(l => l.ID == startSite.ID)).ToList(); for (int i = 0; i < stations.Count; i++) { if (i == 0) { continue; } int lastIndex = allList.ToList().FindIndex(l => l.ID == stations[i - 1].ID); int currentIndex = allList.ToList().FindIndex(l => l.ID == stations[i].ID); if ((currentIndex - lastIndex) > 1) { stations = stations.Take(stations.FindIndex(l => l.ID == stations[i - 1].ID) + 1).ToList(); break; } } // Message:查找同一个起始和结束站的 var collection = taskList.ToList().FindAll(l => l.StartSite.ID == l.EndSite.ID).GroupBy(l => l.StartSite); foreach (var item in collection) { int indexCurrent = stations.FindIndex(l => l.ID == item.Key.ID); if (indexCurrent < 0) { continue; } if (startSite.ID != item.Key.ID) { // Message:从当前选择的开始截取 stations = stations.Take(indexCurrent).ToList(); } else { // Message:从当前选择的开始截取 stations = stations.Take(1).ToList(); } } return(stations); //// Message:所有站列表 //ObservableCollection<TyeBaseSiteEntity> first = values[0] as ObservableCollection<TyeBaseSiteEntity>; //// Message:任务列表 //ObservableCollection<TaskViewModel> second = values[1] as ObservableCollection<TaskViewModel>; //// Message:起始站值 //TyeBaseSiteEntity third = values[2] as TyeBaseSiteEntity; //if (first == null || second == null || third == null) return null; //List<TyeBaseSiteEntity> stations = first.ToList(); //var index = stations.FindIndex(l => l.ID == third.ID); //// Message:查找所有不是同一个站的 //var collection = second.ToList().FindAll(l => l.StartSite.ID != l.EndSite.ID); //if (collection == null) return stations.Skip(index); //List<TyeBaseSiteEntity> delete = new List<TyeBaseSiteEntity>(); //delete.AddRange(stations.Take(index)); //foreach (var item in collection) //{ // var startIndex = stations.FindIndex(l => l.ID == item.StartSite.ID); // var endIndex = stations.FindIndex(l => l.ID == item.EndSite.ID); // if (startIndex < 0 || endIndex < 0) continue; // if (startIndex >= index) // { // delete.AddRange(stations.Skip(startIndex + 1).Take(stations.Count - startIndex - 1)); // } // else if (startIndex < index && index < endIndex) // { // stations.Clear(); // } // else // { // delete.AddRange(stations.Skip(startIndex).Take(endIndex - startIndex)); // } //} //stations.RemoveAll(l => delete.Exists(k => k.ID == l.ID)); //// Message:判断选择是否可以选择同一个站 //var localstation = second.ToList().FindAll(l => l.StartSite.ID == third.ID && third.ID == l.EndSite.ID); //if (PilarCache.ContainsKey(third.ID) == false) return stations; //List<TyeBasePillarEntity> poles = PilarCache[third.ID].ToList(); //var startToEnd = localstation.Select(l => new Tuple<int, int>(Math.Min(poles.IndexOf(l.StartPole), // poles.IndexOf(l.EndPole)), Math.Max(poles.IndexOf(l.StartPole), poles.IndexOf(l.EndPole)))).OrderBy(l => l.Item1).OrderBy(l => l.Item2).ToList(); //var exist = poles.ToList().Exists(k => !startToEnd.Exists(l => l.Item1 <= poles.IndexOf(k) && l.Item2 >= poles.IndexOf(k))); //// Message:如果所有杆号都分配了则排除当前 //if (!exist) //{ // stations.RemoveAll(l => l.ID == third.ID); //} //return stations; } else { return(null); } }
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values == null) { return(null); } if (values.Count() == 2) { ObservableCollection <TyeBaseSiteEntity> first = values[0] as ObservableCollection <TyeBaseSiteEntity>; ObservableCollection <TaskModel> second = values[1] as ObservableCollection <TaskModel>; if (first == null || second == null) { return(null); } List <TyeBaseSiteEntity> stations = first.ToList(); // Message:查找所有不是同一个站的 var collection = second.ToList().FindAll(l => l.StartSite.SiteName != l.EndSite.SiteName); if (collection == null) { return(stations); } foreach (var item in collection) { var startIndex = stations.FindIndex(l => l.SiteName == item.StartSite.SiteName); var endIndex = stations.FindIndex(l => l.SiteName == item.EndSite.SiteName); if (startIndex < 0 || endIndex < 0) { continue; } stations.RemoveRange(startIndex + 1, stations.Count - startIndex - 1); } return(stations); } else if (values.Count() == 4) { ObservableCollection <TyeBaseSiteEntity> first = values[0] as ObservableCollection <TyeBaseSiteEntity>; ObservableCollection <TaskModel> second = values[1] as ObservableCollection <TaskModel>; TyeBaseSiteEntity third = values[2] as TyeBaseSiteEntity; Dictionary <string, ObservableCollection <TyeBasePillarEntity> > PilarCache = values[3] as Dictionary <string, ObservableCollection <TyeBasePillarEntity> >; if (first == null || second == null || third == null) { return(null); } List <TyeBaseSiteEntity> stations = first.ToList(); var index = stations.FindIndex(l => l.SiteName == third.SiteName); // Message:查找所有不是同一个站的 var collection = second.ToList().FindAll(l => l.StartSite.SiteName != l.EndSite.SiteName); if (collection == null) { return(stations.Skip(index)); } List <TyeBaseSiteEntity> delete = new List <TyeBaseSiteEntity>(); delete.AddRange(stations.Take(index)); foreach (var item in collection) { var startIndex = stations.FindIndex(l => l.SiteName == item.StartSite.SiteName); var endIndex = stations.FindIndex(l => l.SiteName == item.EndSite.SiteName); if (startIndex < 0 || endIndex < 0) { continue; } if (startIndex >= index) { delete.AddRange(stations.Skip(startIndex + 1).Take(stations.Count - startIndex - 1)); } else if (startIndex < index && index < endIndex) { stations.Clear(); } else { delete.AddRange(stations.Skip(startIndex).Take(endIndex - startIndex)); } //stations.RemoveRange(startIndex, stations.Count - startIndex); } stations.RemoveAll(l => delete.Exists(k => k.SiteName == l.SiteName)); // Message:判断选择是否可以选择同一个站 var localstation = second.ToList().FindAll(l => l.StartSite.SiteName == third.SiteName && third.SiteName == l.EndSite.SiteName); if (PilarCache.ContainsKey(third.SiteName) == false) { return(stations); } List <TyeBasePillarEntity> poles = PilarCache[third.SiteName].ToList(); var startToEnd = localstation.Select(l => new Tuple <int, int>(Math.Min(poles.IndexOf(l.StartPole), poles.IndexOf(l.EndPole)), Math.Max(poles.IndexOf(l.StartPole), poles.IndexOf(l.EndPole)))).OrderBy(l => l.Item1).OrderBy(l => l.Item2).ToList(); var exist = poles.ToList().Exists(k => !startToEnd.Exists(l => l.Item1 <= poles.IndexOf(k) && l.Item2 >= poles.IndexOf(k))); // Message:如果所有杆号都分配了则排除当前 if (!exist) { stations.RemoveAll(l => l.SiteName == third.SiteName); } return(stations); } else { return(null); } }