//Забрать заявку void getApplication(Time currentTime) { if (status == StatusCourier.HasApplication && application.status == StatusLetter.Engaged) { application.status = StatusLetter.Taking; application.startProcessTime = new Time(currentTime); application.journalize = false; status = StatusCourier.GetLetter; recieveLetters.Add(application); amountReceived++; } }
//Приезд в филиал void arrivalToBranch(Time currentTime, List <Letter> letters) { //Если курьер приехал на место if (timeCurrNext.inMinutes == 0) { lettersToBranch(currentTime); lettersFromBranch(currentTime, letters); if (amountReceived == 0 && status == StatusCourier.GetLetter) { status = StatusCourier.Free; } getApplication(currentTime); //Если у курьера есть письма, выбираем письмо, которое нужно доставить раньше всех if (status == StatusCourier.GetLetter) { recieveLetters.OrderBy(x => (x.Deadline - branches.timeBetween(currentPlace, x.Destination))); nextPlace = recieveLetters.First(x => x.status == StatusLetter.Taking).Destination; Random rand = new Random(); timeCurrNext = branches.timeBetween(currentPlace, nextPlace) + new Time(0, rand.Next(5, 35)); } } }