private bool SortMovingTrams(TramLocation location) { var movingTrams = _repo.GetAllTramsWithLocation(location); if (movingTrams.Count != 0) { UpdateTracks(); var sorter = new TramSortingAlgoritm(_allTracks, _repo); for (var i = 0; i < movingTrams.Count; i++) { var beheerTram = BeheerTram.ToBeheerTram(movingTrams[i]); if (location == TramLocation.ComingIn) { if (beheerTram.DepartureTime == null) { beheerTram.EditTramDepartureTime(GetExitTime(beheerTram)); } sorter.AssignTramLocation(beheerTram); } else if (location == TramLocation.GoingOut) { beheerTram.EditTramLocation(TramLocation.Out); movingTrams[i] = beheerTram; _repo.EditTram(movingTrams[i]); _repo.WipeSectorByTramId(movingTrams[i].Number); Console.WriteLine($"Tram {beheerTram.Number} left the remise."); } } return(true); } return(false); }
public bool SortMovingTrams(TramLocation location) { SortingAlgoritm sorter = new SortingAlgoritm(AllTracks, repo); List <Tram> movingTrams = repo.GetAllTramsWithLocation(location); if (movingTrams.Count != 0) { for (int i = 0; i < movingTrams.Count; i++) { BeheerTram beheerTram = BeheerTram.ToBeheerTram(movingTrams[i]); if (location == TramLocation.ComingIn) { if (movingTrams[i].DepartureTime == null) { GetExitTime(beheerTram); } SortTram(sorter, beheerTram); } else if (location == TramLocation.GoingOut) { beheerTram.EditTramLocation(TramLocation.Out); movingTrams[i] = beheerTram; repo.EditTram(movingTrams[i]); repo.WipeSectorByTramId(movingTrams[i].Number); } } FetchUpdates(); return(true); } return(false); }
public BeheerSector Assign(BeheerSector sector, BeheerTram tram) { sector.SetOccupyingTram(tram); _repo.EditTram(tram); _repo.EditSector(sector); return(sector); }
public void Simulation() { SortingAlgoritm sorter = new SortingAlgoritm(AllTracks, repo); //De schema moet op volgorde van eerst binnenkomende worden gesorteerd schema.Sort((x, y) => x.EntryTime.CompareTo(y.EntryTime)); //Voor iedere inrijtijd een tram eraan koppellen foreach (InUitRijSchema entry in schema.Where(x => x.TramNumber == null)) { foreach (BeheerTram tram in AllTrams.Where(x => x.DepartureTime == null && x.Line == entry.Line)) { entry.TramNumber = tram.Number; tram.EditTramDepartureTime(entry.ExitTime); break; } } //Too little linebound trams to fill each entry so overflow to other types of trams foreach (InUitRijSchema entry in schema.Where(x => x.TramNumber == null)) { foreach (BeheerTram tram in AllTrams.Where(x => x.DepartureTime == null)) { if ((entry.Line == 5 || entry.Line == 1624) && (tram.Model == TramModel.Dubbel_Kop_Combino || tram.Model == TramModel.TwaalfG)) //No driver lines { entry.TramNumber = tram.Number; tram.EditTramDepartureTime(entry.ExitTime); break; } else if ((entry.Line != 5 || entry.Line != 1624) && tram.Model == TramModel.Combino) //Driver lines { entry.TramNumber = tram.Number; tram.EditTramDepartureTime(entry.ExitTime); break; } } } //Het schema afgaan voor de simulatie foreach (InUitRijSchema entry in schema) { BeheerTram tram = AllTrams.Find(x => x.Number == entry.TramNumber); SortTram(sorter, tram); form.Invalidate(); Thread.Sleep(simulationSpeed); } foreach (BeheerTram tram in AllTrams.Where(x => x.DepartureTime == null)) { SortTram(sorter, tram); form.Invalidate(); Thread.Sleep(simulationSpeed); } schema = csv.getSchema(); Update(); }
public DateTime?GetExitTime(BeheerTram tram) { foreach (InUitRijSchema entry in schema.Where(x => x.Line == tram.Line && x.TramNumber == null)) { entry.TramNumber = tram.Number; return(entry.ExitTime); } return(null); }
private DateTime?GetExitTime(BeheerTram tram) { foreach (var entry in _schema.Where(entry => entry.Line == tram.Line && entry.TramNumber == null)) { entry.TramNumber = tram.Number; return(entry.ExitTime); } return(null); }
public void FetchUpdates() { AllTracks = new List <BeheerTrack>(); foreach (Track track in repo.GetTracksAndSectors()) { AllTracks.Add(track == null ? null : BeheerTrack.ToBeheerTrack(track)); } AllTrams = new List <BeheerTram>(); foreach (Tram tram in repo.GetAllTrams()) { AllTrams.Add(tram == null ? null : BeheerTram.ToBeheerTram(tram)); } }
public void SortTram(SortingAlgoritm sorter, BeheerTram tram) { if (tram != null) { BackupAllTracks = AllTracks; AllTracks = sorter.AssignTramLocation(tram); if (AllTracks == null) { AllTracks = BackupAllTracks; } } }
public void EditTram() { var tram = _logisticRepository.GetTram(1); Assert.IsNotNull(tram); var newTram = BeheerTram.ToBeheerTram(tram); newTram.EditTramStatus(TramStatus.Cleaning); newTram.EditTramDepartureTime(new DateTime(2017, 6, 15, 08, 0, 0, DateTimeKind.Unspecified)); newTram.EditTramLocation(TramLocation.Out); _logisticRepository.EditTram(newTram); var fetchTram = _logisticRepository.GetTram(1); Assert.IsNotNull(fetchTram); Assert.AreEqual(JsonConvert.SerializeObject(newTram), JsonConvert.SerializeObject(fetchTram)); }
public void AssignTramLocation(BeheerTram tram) { tram.EditTramLocation(TramLocation.In); //With a service needed, put on the first free slot if (tram.Status == TramStatus.Cleaning || tram.Status == TramStatus.Maintenance || tram.Status == TramStatus.CleaningMaintenance) { foreach (Track track in _allTracks.Where(track => track.Type == TrackType.Service)) { for (var i = 0; i < track.Sectors.Count; i++) { if (track.Sectors[i].OccupyingTram == null && track.Sectors[i].Status == SectorStatus.Open) { var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i]); track.Sectors[i] = Assign(beheerSector, tram); Console.WriteLine("Moved tram {0} to track: {1}, sector: {2} ({3})", tram.Number, beheerSector.TrackNumber, beheerSector.Number + 1, tram.Status); return; } } } } //Put tram on track thats connected to the line the tram is on foreach (var track in _allTracks.Where(track => track.Line == tram.Line && track.Type == TrackType.Normal)) { for (var i = 0; i < track.Sectors.Count - 1; i++) { if (track.Sectors[i].OccupyingTram == null && track.Sectors[i].Status == SectorStatus.Open) { var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i]); track.Sectors[i] = Assign(beheerSector, tram); Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number, beheerSector.TrackNumber, beheerSector.Number + 1); return; } if (track.Sectors[i].Status == SectorStatus.Occupied && track.Sectors[i].OccupyingTram.DepartureTime < tram.DepartureTime) { if (track.Sectors[i + 1].Status == SectorStatus.Open) { var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i + 1]); track.Sectors[i + 1] = Assign(beheerSector, tram); Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number, beheerSector.TrackNumber, beheerSector.Number + 1); return; } } } } //If not successful put tram on any other normal track (that doesn't have another line connected to it) foreach (var track in _allTracks.Where(track => track.Type == TrackType.Normal)) { for (var i = 0; i < track.Sectors.Count - 1; i++) { if (track.Sectors[0].OccupyingTram == null && track.Sectors[0].Status == SectorStatus.Open) { var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i]); track.Sectors[i] = Assign(beheerSector, tram); Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number, beheerSector.TrackNumber, beheerSector.Number + 1); return; } else if (track.Sectors[i].Status == SectorStatus.Occupied && track.Sectors[i].OccupyingTram.DepartureTime < tram.DepartureTime) { if (track.Sectors[i + 1].Status == SectorStatus.Open) { var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i + 1]); track.Sectors[i + 1] = Assign(beheerSector, tram); Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number, beheerSector.TrackNumber, beheerSector.Number + 1); return; } } } } //If not successful put on an exit line foreach (var track in _allTracks.Where(track => track.Type == TrackType.Exit)) { for (var i = 0; i < track.Sectors.Count - 1; i++) { if (track.Sectors[0].OccupyingTram == null && track.Sectors[0].Status == SectorStatus.Open) { var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i]); track.Sectors[i] = Assign(beheerSector, tram); Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number, beheerSector.TrackNumber, beheerSector.Number + 1); return; } else if (track.Sectors[i].Status == SectorStatus.Occupied && track.Sectors[i].OccupyingTram.DepartureTime < tram.DepartureTime) { if (track.Sectors[i + 1].Status == SectorStatus.Open) { var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i + 1]); track.Sectors[i + 1] = Assign(beheerSector, tram); Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number, beheerSector.TrackNumber, beheerSector.Number + 1); return; } } else if (track.Sectors[i].Status == SectorStatus.Occupied && track.Sectors[0].OccupyingTram.DepartureTime == null) { if (track.Sectors[i + 1].Status == SectorStatus.Open) { var beheerSector = BeheerSector.ToBeheerSector(track.Sectors[i + 1]); track.Sectors[i + 1] = Assign(beheerSector, tram); Console.WriteLine("Moved tram {0} to track: {1}, sector: {2}", tram.Number, beheerSector.TrackNumber, beheerSector.Number + 1); return; } } } } //If not successful let user place tram tram.EditTramLocation(TramLocation.NotAssigned); _repo.EditTram(tram); Console.WriteLine($"Could not move tram {tram.Number}, please move manually."); }
public List <BeheerTrack> AssignTramLocation(BeheerTram tram) { tram.EditTramLocation(TramLocation.In); //With a service needed, put on the first free slot if (tram.Status == TramStatus.Cleaning || tram.Status == TramStatus.Maintenance || tram.Status == TramStatus.CleaningMaintenance) { foreach (Track track in allTracks.Where(x => x.Type == TrackType.Service)) { for (int i = 0; i < track.Sectors.Count; i++) { if (track.Sectors[i].OccupyingTram == null && track.Sectors[i].Status == SectorStatus.Open) { BeheerSector beheerSector = track.Sectors[i] == null ? null : BeheerSector.ToBeheerSector(track.Sectors[i]); track.Sectors[i] = Assign(beheerSector, tram); return(allTracks); } } } } //Put tram on track thats connected to the line the tram is on foreach (BeheerTrack track in allTracks.Where(x => x.Line == tram.Line && x.Type == TrackType.Normal)) { for (int i = 0; i < track.Sectors.Count - 1; i++) { float sectorId = track.Number + track.Sectors[i].Number / 100f; if (track.Sectors[i].OccupyingTram == null && track.Sectors[i].Status == SectorStatus.Open && !OccupiedSectors.Contains(sectorId)) { BeheerSector beheerSector = track.Sectors[i] == null ? null : BeheerSector.ToBeheerSector(track.Sectors[i]); track.Sectors[i] = Assign(beheerSector, tram); OccupiedSectors.Add(sectorId); return(allTracks); } sectorId = track.Number + track.Sectors[i + 1].Number / 100f; if (track.Sectors[i].Status == SectorStatus.Occupied && track.Sectors[i].OccupyingTram.DepartureTime < tram.DepartureTime) { if (track.Sectors[i + 1].Status == SectorStatus.Open && !OccupiedSectors.Contains(sectorId)) { BeheerSector beheerSector = track.Sectors[i + 1] == null ? null : BeheerSector.ToBeheerSector(track.Sectors[i + 1]); track.Sectors[i + 1] = Assign(beheerSector, tram); OccupiedSectors.Add(sectorId); return(allTracks); } } } } //If not successful put tram on any other normal track (that doesn't have another line connected to it) foreach (BeheerTrack track in allTracks.Where(x => x.Type == TrackType.Normal)) { for (int i = 0; i < track.Sectors.Count - 1; i++) { if (track.Sectors[0].OccupyingTram == null && track.Sectors[0].Status == SectorStatus.Open) { BeheerSector beheerSector = track.Sectors[i] == null ? null : BeheerSector.ToBeheerSector(track.Sectors[i]); track.Sectors[i] = Assign(beheerSector, tram); return(allTracks); } else if (track.Sectors[i].Status == SectorStatus.Occupied && track.Sectors[i].OccupyingTram.DepartureTime < tram.DepartureTime) { if (track.Sectors[i + 1].Status == SectorStatus.Open) { BeheerSector beheerSector = track.Sectors[i + 1] == null ? null : BeheerSector.ToBeheerSector(track.Sectors[i + 1]); track.Sectors[i + 1] = Assign(beheerSector, tram); return(allTracks); } } } } //If not successful put on an exit line foreach (BeheerTrack track in allTracks.Where(x => x.Type == TrackType.Normal)) { for (int i = 0; i < track.Sectors.Count - 1; i++) { if (track.Sectors[0].OccupyingTram == null && track.Sectors[0].Status == SectorStatus.Open) { BeheerSector beheerSector = track.Sectors[i] == null ? null : BeheerSector.ToBeheerSector(track.Sectors[i]); track.Sectors[i] = Assign(beheerSector, tram); return(allTracks); } else if (track.Sectors[i].Status == SectorStatus.Occupied && track.Sectors[i].OccupyingTram.DepartureTime < tram.DepartureTime) { if (track.Sectors[i + 1].Status == SectorStatus.Open) { BeheerSector beheerSector = track.Sectors[i + 1] == null ? null : BeheerSector.ToBeheerSector(track.Sectors[i + 1]); track.Sectors[i + 1] = Assign(beheerSector, tram); return(allTracks); } } else if (track.Sectors[i].Status == SectorStatus.Occupied && track.Sectors[0].OccupyingTram.DepartureTime == null) { if (track.Sectors[i + 1].Status == SectorStatus.Open) { BeheerSector beheerSector = track.Sectors[i + 1] == null ? null : BeheerSector.ToBeheerSector(track.Sectors[i + 1]); track.Sectors[i + 1] = Assign(beheerSector, tram); return(allTracks); } } } } //If not successful let user place tram return(null); }