コード例 #1
0
        /// <summary>
        ///     Sets the receiving address on the tracking record based on the UPS Track API response.
        /// </summary>
        /// <param name="trackingRecord">Object containing tracking data that will be written to UPS Integration DB.</param>
        /// <param name="upsResponse">Response object from the UPS Track API.</param>
        public void SetDestinationAddress(UPSTracking trackingRecord, UPSResponse upsResponse)
        {
            var destinationAddress = TrackAPI.GetAddressByType(upsResponse, "ShipTo Address");

            trackingRecord.DestinationCity  = destinationAddress?.Address.City;
            trackingRecord.DestinationState = destinationAddress?.Address.StateProvinceCode;
            trackingRecord.DestinationZip   = destinationAddress?.Address.PostalCode;
        }
コード例 #2
0
        /// <summary>
        ///     Sets the package's current status, location, timestamp and exception (if applicable) on the tracking record based on the
        ///     UPS Track API response.
        /// </summary>
        /// <param name="trackingRecord">Object containing tracking data that will be written to UPS Integration DB.</param>
        /// <param name="upsResponse">Response object from the UPS Track API.</param>
        public void SetLatestActivity(UPSTracking trackingRecord, UPSResponse upsResponse)
        {
            var latestActivity = TrackAPI.GetLatestActivity(upsResponse);

            trackingRecord.Status          = latestActivity.Status;
            trackingRecord.Location        = latestActivity.Location;
            trackingRecord.TimeStamp       = latestActivity.TimeStamp;
            trackingRecord.ExceptionReason = latestActivity.ExceptionReason;
        }
コード例 #3
0
        /// <summary>
        ///     Sets the sender address on the tracking record based on the UPS Track API response.
        /// </summary>
        /// <param name="trackingRecord">Object containing tracking data that will be written to UPS Integration DB.</param>
        /// <param name="upsResponse">Response object from the UPS Track API.</param>
        public void SetOriginAddress(UPSTracking trackingRecord, UPSResponse upsResponse)
        {
            var originAddress = TrackAPI.GetAddressByType(upsResponse, "Shipper Address");

            trackingRecord.OriginAddress = originAddress?.Address.AddressLine;
            trackingRecord.OriginCity    = originAddress?.Address.City;
            trackingRecord.OriginState   = originAddress?.Address.StateProvinceCode;
            var originZip = originAddress?.Address.PostalCode;

            // Format with hyphen after first 5 digits
            if (originZip.Length > 5)
            {
                originZip = originZip.Insert(5, "-");
            }

            trackingRecord.OriginZip = originZip;
        }
コード例 #4
0
        /// <summary>
        ///     Handles inserts to the TrackingNumber or StatusUpdates by creating a SQL query dynamically based on the table name provided.
        /// </summary>
        /// <param name="trackingData">UPS Tracking data to insert</param>
        /// <param name="tableName">Name of the UPSIntegration table to insert to. Currently handles TrackingNumber and StatusUpdates.</param>
        public void InsertLineToUPSTable(UPSTracking trackingData, string tableName)
        {
            var retryPolicy = Policy.Handle <SqlException>(
                e => !e.Message.Contains("Violation of PRIMARY KEY constraint"))
                              .WaitAndRetry(4, _ => TimeSpan.FromMilliseconds(30), (ex, ts, count, context) =>
            {
                string errorMessage = $"Error in InsertLineToUPSTable. Table name {tableName}";
                _logger.LogWarning(ex, $"{errorMessage} . Retrying...");
                if (count == 4)
                {
                    _logger.LogError(ex, errorMessage);
                }
            });

            retryPolicy.Execute(() =>
            {
                using (var conn = new SqlConnection(connectionString))
                {
                    conn.Open();

                    var query = $"INSERT INTO UPSIntegration.tracking.{tableName} ";

                    if (tableName == "StatusUpdates")
                    {
                        query += $@"
                            VALUES (
                                @trackingNum, @status, @time, @location, @exception)";

                        conn.Execute(
                            query,
                            new
                        {
                            trackingNum = trackingData.TrackingNumber,
                            status      = trackingData.Status,
                            time        = trackingData.TimeStamp,
                            location    = trackingData.Location,
                            exception   = trackingData.ExceptionReason
                        },
                            commandTimeout: 3);
                    }

                    if (tableName == "TrackingNumbers")
                    {
                        query += $@"
                            VALUES ( 
                                @trackingNum, @refNum, @originAddress, @originCity, @originState, 
                                @originZip, @destinationCity, @destinationState, @destinationZip)";

                        conn.Execute(
                            query,
                            new
                        {
                            trackingNum      = trackingData.TrackingNumber,
                            refNum           = trackingData.ReferenceNumber,
                            originAddress    = trackingData.OriginAddress,
                            originCity       = trackingData.OriginCity,
                            originState      = trackingData.OriginState,
                            originZip        = trackingData.OriginZip,
                            destinationCity  = trackingData.DestinationCity,
                            destinationState = trackingData.DestinationState,
                            destinationZip   = trackingData.DestinationZip
                        },
                            commandTimeout: 3);
                    }

                    conn.Close();
                }
            });
        }