/// <summary> /// Получение информации о маошрутном листе в требуемом формате /// </summary> /// <param name="routeListId">Идентификатор МЛ</param> /// <returns>APIRouteList</returns> public RouteListDto Get(int routeListId) { var routeList = _routeListRepository.GetRouteListById(_unitOfWork, routeListId) ?? throw new DataNotFoundException(nameof(routeListId), $"Маршрутный лист { routeListId } не найден"); return(_routeListConverter.convertToAPIRouteList(routeList, _routeListRepository.GetDeliveryItemsToReturn(_unitOfWork, routeListId))); }
public void RegisterForRouteList(int routeListId, IEnumerable <TrackCoordinateDto> trackList, int driverId) { var track = _trackRepository.GetTrackByRouteListId(_unitOfWork, routeListId); var routeList = _routeListRepository.GetRouteListById(_unitOfWork, routeListId) ?? throw new DataNotFoundException(nameof(routeListId), $"Маршрутный лист {routeListId} не найден"); if (routeList.Status != RouteListStatus.EnRoute && routeList.Status != RouteListStatus.Delivered) { _logger.LogWarning($"Попытка записать трек для МЛ {routeListId}, МЛ в статусе '{routeList.Status}'"); throw new InvalidOperationException($"Нельзя записать трек для МЛ {routeListId}, МЛ в статусе недоступном для записи трека"); } if (!_routeListModel.IsRouteListBelongToDriver(routeListId, driverId)) { _logger.LogWarning($"Водитель ({driverId})" + $" попытался зарегистрировать трек для МЛ {routeListId}"); throw new InvalidOperationException("Нельзя регистрировать координаты трека к чужому МЛ"); } if (track == null) { track = new Track() { RouteList = routeList, Driver = routeList.Driver }; } var receivedPoints = new Dictionary <DateTime, TrackPoint>(); foreach (var trackCoordinate in trackList) { if (track.TrackPoints.Any(t => t.TimeStamp == trackCoordinate.ActionTime)) { _logger.LogInformation($"Уже зарегистрирована точка для времени {trackCoordinate.ActionTime}"); continue; } var trackPoint = new TrackPoint() { Track = track, Latitude = decimal.ToDouble(trackCoordinate.Latitude), Longitude = decimal.ToDouble(trackCoordinate.Longitude), TimeStamp = trackCoordinate.ActionTime }; track.TrackPoints.Add(trackPoint); } _unitOfWork.Save(track); _unitOfWork.Commit(); }
public void RegisterForRouteList(int routeListId, IList <TrackCoordinateDto> trackList, int driverId) { var track = _trackRepository.GetTrackByRouteListId(_unitOfWork, routeListId); var routeList = _routeListRepository.GetRouteListById(_unitOfWork, routeListId) ?? throw new DataNotFoundException(nameof(routeListId), $"Маршрутный лист {routeListId} не найден"); if (routeList.Status != RouteListStatus.EnRoute && routeList.Status != RouteListStatus.Delivered) { _logger.LogWarning($"Попытка записать трек для МЛ {routeListId}, МЛ в статусе '{routeList.Status}'"); throw new InvalidOperationException($"Нельзя записать трек для МЛ {routeListId}, МЛ в статусе недоступном для записи трека"); } if (!_routeListModel.IsRouteListBelongToDriver(routeListId, driverId)) { _logger.LogWarning($"Водитель ({driverId})" + $" попытался зарегистрировать трек для МЛ {routeListId}"); throw new InvalidOperationException("Нельзя регистрировать координаты трека к чужому МЛ"); } if (track == null) { track = new Track { RouteList = routeList, Driver = routeList.Driver }; } foreach (var trackPoint in trackList) { trackPoint.Latitude = Math.Round(trackPoint.Latitude, 8); trackPoint.Longitude = Math.Round(trackPoint.Longitude, 8); trackPoint.ActionTime = new DateTime( trackPoint.ActionTime.Year, trackPoint.ActionTime.Month, trackPoint.ActionTime.Day, trackPoint.ActionTime.Hour, trackPoint.ActionTime.Minute, trackPoint.ActionTime.Second, trackPoint.ActionTime.Kind ); } var trackPoints = trackList .GroupBy(x => new { x.ActionTime, x.Latitude, x.Longitude }) .Select(group => new TrackPoint { Track = track, Latitude = decimal.ToDouble(group.Key.Latitude), Longitude = decimal.ToDouble(group.Key.Longitude), TimeStamp = group.Key.ActionTime }); foreach (var trackPoint in trackPoints) { if (track.TrackPoints.Any(t => t.TimeStamp == trackPoint.TimeStamp)) { _logger.LogInformation($"Уже зарегистрирована точка для времени {trackPoint.TimeStamp}"); continue; } track.TrackPoints.Add(trackPoint); } _unitOfWork.Save(track); _unitOfWork.Commit(); }