Exemplo n.º 1
0
        private async Task CheckVehiclesConnectivityAsync()
        {
            var vehicles = await _trackedVehicleRepository.GetAsync(_ => true)
                           .AnyContext();

            var tasks = vehicles.Select(v => _pingSender.SendAsync(v.IPAddress, _options.Value.PingTimeout));

            var results = await Task.WhenAll(tasks)
                          .AnyContext();

            foreach (var r in results)
            {
                var vehicle = vehicles.FirstOrDefault(v => v.IPAddress == r.IPAddress);

                if (vehicle == null) // vehicle is no longer tracked
                {
                    _logger.LogInformation($"Vehicle with IP address '{r.IPAddress}' was not found");
                    continue;
                }

                var status = r.IPStatus == IPStatus.Success
                    ? TrackedVehicleStatus.Connected
                    : TrackedVehicleStatus.Disconnected;

                if (status == vehicle.Status)
                {
                    continue;
                }

                var @event = new VehicleStatusChangedEvent(vehicle.Id, status);

                await _busPublisher.PublishAsync(@event)
                .AnyContext();

                vehicle.SetConnectionStatus(status);

                // Enhancement: use bulk update
                await _trackedVehicleRepository.UpdateAsync(vehicle)
                .AnyContext();

                var history = new TrackingHistory(Guid.NewGuid().ToString(), vehicle.Id, status);

                await _trackingHistoryRepository.AddAsync(history)
                .AnyContext();
            }
        }
        public async Task UpdateLocation(VehicleLocationRequest model)
        {
            var vehicle = _vehicleRepository.FindOneByCondition(x => x.VehicleNumber == model.VehicleNumber && x.IsActive);

            if (vehicle == null)
            {
                throw new VehicleNotFoundException(ErrorCode.E102, model.VehicleNumber);
            }

            //Check session was created or not
            var session = _trackingSessionRepository.FindOneByCondition(x =>
                                                                        x.CreatedDate >= DateTime.UtcNow.Date &&
                                                                        x.VehicleId == vehicle.Id);

            if (session == null)
            {
                session = new TrackingSession()
                {
                    VehicleId      = vehicle.Id,
                    CreatedDate    = DateTime.UtcNow,
                    TrackingRemark = DateTime.UtcNow.ToString("d")
                };
                _trackingSessionRepository.Create(session);
                await _trackingSessionRepository.SaveAsync();
            }

            //Update Location with this session
            var location = new TrackingHistory()
            {
                TrackingSessionId = session.Id,
                CreatedDate       = DateTime.UtcNow,
                Lat = model.Latitude,
                Lon = model.Longitude
            };

            _trackingHistoryRepository.Create(location);
            await _trackingHistoryRepository.SaveAsync();
        }
Exemplo n.º 3
0
        public async Task <TrackingHistory> AddTrackingHistory(TrackingHistory trackingHistory)
        {
            TrackingHistory addedHistory = null;
            var             parameters   = new DynamicParameters();

            parameters.Add("@ItemId", trackingHistory.ItemId);
            parameters.Add("@Date", trackingHistory.Date);
            parameters.Add("@Location", trackingHistory.Location);
            using (var db = new SqlConnection(_dbConnection))
            {
                addedHistory = await db.QuerySingleAsync <TrackingHistory>(@"INSERT INTO [dbo].[TrackingHistory]
                                                                                           ( [ItemId]
                                                                                           , [Date]
                                                                                           , [Location])
                                                                                     VALUES
                                                                                           ( @ItemId
		                                                                                   , @Date
		                                                                                   , @Location )
	                                                                                SELECT [Id], [ItemId], [Date], [Location] 
	                                                                                  FROM [dbo].[TrackingHistory]
	                                                                                 WHERE Id = SCOPE_IDENTITY()"    , parameters);
            }
            return(addedHistory);
        }
Exemplo n.º 4
0
 private PackageTracking GetDeliveryStatus()
 {
     return(TrackingHistory.FirstOrDefault(t => t.Status.Equals(DELIVERED_STATUS)));
 }
Exemplo n.º 5
0
 public void AddTrackingInfo(PackageTracking tracking)
 {
     TrackingHistory.Add(tracking);
 }
Exemplo n.º 6
0
 public async Task <ActionResult> AddTrackingHistory([FromBody] TrackingHistory trackingHistory)
 {
     return(Ok(await _gearTrackingProcessor.AddTrackingHistory(trackingHistory)));
 }
Exemplo n.º 7
0
 public async Task CreateTrackingHistoryAsync(TrackingHistory trackingHistory)
 {
     await _trackingHistory.InsertOneAsync(trackingHistory);
 }
Exemplo n.º 8
0
 private void AddTrackingInfo(PackageTracking tracking)
 {
     TrackingHistory.Add(tracking);
 }
Exemplo n.º 9
0
 public async Task AddAsync(TrackingHistory history)
 {
     await _repository.AddAsync(history)
     .AnyContext();
 }
Exemplo n.º 10
0
        public async Task <List <PackageHistory> > TrackPackagesAsync(TrackingRequest trackingRequest, string authToken)
        {
            var packageHistory = new List <PackageHistory>();

            var myCustomParameter = trackingRequest.Config["myCustomParameter"];

            foreach (var package in trackingRequest.Packages)
            {
                var baseUrl    = $"tracking-sandbox.getsandbox.com";
                var parameters = $"/trackPackages?myCustomParameter={myCustomParameter}&tracking-number={package.TrackingNumber}&invoice-number={package.InvoiceNumber}";
                var httpUrl    = $"http://{baseUrl}{parameters}";
                var httpsUrl   = $"https://{baseUrl}{parameters}";

                using (var request = new HttpRequestMessage
                {
                    Method = HttpMethod.Get, //HttpMethod.Post if needed
                    RequestUri = new Uri(httpUrl)
                })
                {
                    request.Headers.Add("X-Vtex-Proxy-To", httpsUrl);
                    request.Headers.Add("Proxy-Authorization", authToken);

                    using (var response = await _httpClient.SendAsync(request))
                    {
                        var responseString = await response.Content.ReadAsStringAsync();

                        //Console.WriteLine(responseString);
                        var resultObject = JsonConvert.DeserializeObject <JToken>(responseString, _jsonSerializerSettings);

                        var trackingHistory = new TrackingHistory
                        {
                            Returned  = false,
                            Delivered = false,
                            Events    = new List <EventTrackingData>()
                        };

                        //Parse result and return correspondent tracking history
                        if (resultObject?["events"] is JArray eventsArray)
                        {
                            foreach (var item in eventsArray)
                            {
                                trackingHistory.Events.Add(new EventTrackingData
                                {
                                    City        = item["city"].ToString(),
                                    State       = item["state"].ToString(),
                                    Description = item["description"].ToString(),
                                    Date        = DateTime.Parse(item["date"].ToString())
                                                  // DateTime.ParseExact(item["date"].ToString(), "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture),
                                });

                                if (item["delivered"].ToObject <bool>())
                                {
                                    trackingHistory.Delivered = true;
                                }
                            }
                        }

                        packageHistory.Add(new PackageHistory
                        {
                            Package         = package,
                            TrackingHistory = trackingHistory
                        });
                    }
                }
            }

            return(packageHistory);
        }
Exemplo n.º 11
0
 public async Task <TrackingHistory> AddTrackingHistory(TrackingHistory trackingHistory)
 {
     return(await _gearTrackingRepository.AddTrackingHistory(trackingHistory));
 }