/// <summary>
        /// Create URI for quering
        /// </summary>
        /// <returns></returns>
        public override Uri ToUri()
        {
            var qsb = new Internal.QueryStringBuilder()
                      .Append("origins", WaypointsToUri(_waypointsOrigin))
                      .Append("destinations", WaypointsToUri(_waypointsDestination))
                      .Append("mode", Mode.ToString())
                      .Append("language", Language)
                      .Append("units", Units.ToString())
                      .Append("avoid", AvoidHelper.MakeAvoidString(Avoid))
                      .Append("departure_time", DepartureTime.ToString());

            if (DepartureTime == null)
            {
                qsb.Append("arrival_time", ArrivalTime.ToString());
            }

            if (DepartureTime != null && Mode.Equals(TravelMode.driving))
            {
                qsb.Append("traffic_model ", TrafficModel.ToString());
            }

            if (Mode.Equals(TravelMode.transit))
            {
                qsb.Append("transit_mode", TransitMode.ToString());
                qsb.Append("transit_routing_preference ", TransitRoutingPreference.ToString());
            }

            var url = "json?" + qsb.ToString();

            return(new Uri(url, UriKind.Relative));
        }
        public string ToURIString()
        {
            string uri = "origins=";

            foreach (var orig in Origins)
            {
                if (orig != Origins.First())
                {
                    uri += "|";
                }
                uri += orig.ToLocationString();
            }

            uri += "&destinations=";
            foreach (var orig in Destinations)
            {
                if (orig != Destinations.First())
                {
                    uri += "|";
                }
                uri += orig.ToLocationString();
            }

            if (string.IsNullOrEmpty(Language))
            {
                uri += "&language=" + Language;
            }

            if (Mode != null)
            {
                uri += "&mode=" + Mode.ToString();
            }

            if (Avoid != null)
            {
                uri += "&avoid=" + Avoid.ToString();
            }

            if (string.IsNullOrWhiteSpace(Region))
            {
                uri += "&region=" + Region;
            }

            if (TrafficModel != null)
            {
                uri += "&trafficmodel=" + TrafficModel.ToString();
            }

            if (TransitMode != null)
            {
                uri += "&transit=" + TransitMode.ToString();
            }

            if (preference != null)
            {
                uri += "&transit_routing_preference=" + preference.ToString();
            }

            return(uri);
        }
        public async Task ShouldGetTrafficForRegionWithEmptyCacheSuccessfully()
        {
            TrafficModel cachedValue = null;

            var trafficCache = new Mock <ITrafficCache>();

            trafficCache.Setup(p => p.GetByRegionCode(_region1.Code)).Returns(() =>
            {
                return(cachedValue);
            });
            trafficCache.Setup(p => p.Save(_traffic1)).Callback((TrafficModel traffic) =>
            {
                cachedValue = traffic;
            });

            var trafficProvider = new Mock <ITrafficProvider>();

            trafficProvider.Setup(p => p.GetTrafficAsync(_region1.Code)).Returns(Task.Run(() => _traffic1));

            var regionService = new Mock <IRegionService>();

            var service = new CachedTrafficService(trafficCache.Object, trafficProvider.Object, regionService.Object);
            var result  = await service.GetTrafficForRegionAsync(_region1);

            Assert.IsNotNull(result);
            Assert.AreEqual(_traffic1.RegionCode, result.RegionCode);
            Assert.AreEqual(_traffic1.Level, result.Level);
            Assert.AreEqual(_traffic1.Hint, result.Hint);

            trafficCache.Verify(tc => tc.Save(It.IsAny <TrafficModel>()), Times.Once());
            trafficProvider.Verify(tc => tc.GetTrafficAsync(_region1.Code), Times.Once());
        }
Пример #4
0
 public static TrafficWithRegionDto GetTrafficWithRegionDto(TrafficModel traffic, RegionModel region)
 {
     return(new TrafficWithRegionDto
     {
         Region = GetRegionDto(region),
         Traffic = GetTrafficDto(traffic)
     });
 }
        private bool IsCachedValueActual(TrafficModel traffic)
        {
            if (traffic == null)
            {
                return(false);
            }

            var age = DateTime.Now - traffic.UpdatedAt;

            return(age <= TimeSpan.FromSeconds(CachedValueActualInSeconds));

            ;
        }
        public async Task Repo_GetEntity_Called_Once()
        {
            // Arrange
            mockRepo.Setup(x => x.GetTrafficInfoAsync(
                               It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(GetMockEntity());

            // Act
            TrafficModel model = await _service.GetTrafficModelAsync(Origin, Destination);

            // Assert
            mockRepo.Verify(x => x.GetTrafficInfoAsync(It.IsAny <string>(), It.IsAny <string>()), Times.Once);
        }
Пример #7
0
        public static TrafficDto GetTrafficDto(TrafficModel trafficModel)
        {
            if (trafficModel.IsEmpty())
            {
                return(null);
            }

            return(new TrafficDto
            {
                Level = trafficModel.Level,
                Hint = trafficModel.Hint
            });
        }
Пример #8
0
        public void Can_Map_From_Entity()
        {
            // Arrange
            TrafficEntity entity = GetMockEntity();

            // Act
            _model = _service.MapFromEntity(entity);

            // Assert
            Assert.Equal(Distance, _model.Distance);
            Assert.Equal(Duration, _model.Duration);
            Assert.Equal(Destination, _model.Destination);
            Assert.Equal(Origin, _model.Origin);
        }
Пример #9
0
        public async Task Calculate_Values_Correctly()
        {
            // Arrange
            TrafficEntity entity        = GetMockEntity();
            DateTime      timeOfArrival = DateTime.Now.AddSeconds(Duration);

            // Act
            TrafficModel model = await _service.GetTrafficModelAsync(Origin, Destination);

            model.InitializeModel();

            // Assert
            Assert.Equal(122.31, model.Distance);
            Assert.Equal(timeOfArrival.Hour, model.TimeOfArrival.Hour);
            Assert.Equal(timeOfArrival.Minute, model.TimeOfArrival.Minute);
        }
Пример #10
0
        private async Task <TrafficModel> GetTrafficModelAsync(string origin, string destination)
        {
            if (string.IsNullOrEmpty(origin))
            {
                throw new ArgumentNullException(nameof(origin));
            }

            if (string.IsNullOrEmpty(destination))
            {
                throw new ArgumentNullException(nameof(destination));
            }

            TrafficModel model = await _trafficService.GetTrafficModelAsync(origin, destination);

            return(model);
        }
        public async Task Calculate_Values_Correctly()
        {
            // Arrange
            mockRepo.Setup(x => x.GetTrafficInfoAsync(
                               It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(GetMockEntity());

            DateTime timeOfArrival = DateTime.Now.AddSeconds(Duration);

            // Act
            TrafficModel model = await _service.GetTrafficModelAsync(Origin, Destination);

            // Assert
            Assert.Equal(122.31, model.Distance);
            Assert.Equal(DistanceUom.Metric, model.DistanceUom);
            Assert.Equal(timeOfArrival.Hour, model.TimeOfArrival.Hour);
            Assert.Equal(timeOfArrival.Minute, model.TimeOfArrival.Minute);
        }
Пример #12
0
        private static async Task <MagicMirrorDto> GenerateDto(UserSettings criteria)
        {
            _weatherService = new WeatherService();
            _trafficService = new TrafficService(criteria);
            WeatherModel weatherModel = await _weatherService.GetModelAsync();

            TrafficModel trafficModel = await _trafficService.GetModelAsync();

            var dto = new MagicMirrorDto
            {
                UserName       = criteria.UserName,
                DegreesCelsius = weatherModel.TemperatureCelsius,
                TravelTime     = trafficModel.MinutesText,
                TrafficDensity = trafficModel.TrafficDensity,
                WeatherType    = weatherModel.WeatherType
            };

            return(dto);
        }
Пример #13
0
        public virtual void Save(TrafficModel model)
        {
            lock (_context)
            {
                var original = _context.Traffics.SingleOrDefault(t => t.RegionCode == model.RegionCode);
                if (original == null)
                {
                    model.UpdatedAt = DateTime.Now;
                    _context.Traffics.Add(model);
                }
                else
                {
                    original.UpdatedAt = DateTime.Now;
                    original.Hint      = model.Hint;
                    original.Level     = model.Level;
                    _context.Traffics.Update(original);
                }

                _context.SaveChangesAsync();
            }
        }
Пример #14
0
        private static void setData()
        {
            Console.WriteLine("reading csv");
            string       filePath = @".\Resources\combined_csv.csv";
            StreamReader sr       = new StreamReader(filePath);
            var          lines    = new List <string[]>();
            int          Row      = 0;

            while (!sr.EndOfStream)
            {
                string[] Line = sr.ReadLine().Split(',');
                lines.Add(Line);
                Row++;
            }

            var data = lines.ToArray();



            _TrafficData = TrafficModel.TrafficModelParser(data);
            Console.WriteLine("csv loaded");
        }
Пример #15
0
        private async void GetTrafficInfo(object sender, object e)
        {
            try
            {
                var          settings     = App.UserSettings;
                TrafficModel trafficModel = await _trafficService.GetModelAsync(settings.HomeAddress, settings.HomeCity, settings.WorkAddress);

                TravelDuration = trafficModel.Summary;

                if (!trafficTimer.IsEnabled)
                {
                    trafficTimer.Start();
                }
            }
            catch (HttpRequestException)
            {
                TrafficModel trafficModel = _trafficService.GetOfflineModel(localFolder);
                TravelDuration = trafficModel.Summary;

                int minutes = 5;
                await Task.Delay((minutes * 60) * 10000);

                GetTrafficInfo(null, null);
            }
            catch (Exception)
            {
                if (trafficTimer.IsEnabled)
                {
                    trafficTimer.Stop();
                }

                int minutes = 5;
                await Task.Delay((minutes * 60) * 10000);

                GetTrafficInfo(null, null);
            }
        }
Пример #16
0
        public override Uri ToUri()
        {
            if (Origin == null)
            {
                throw new InvalidOperationException("Origin is required");
            }

            var qsb = new Google.Maps.Internal.QueryStringBuilder()
                      .Append("origin", (Origin == null ? (string)null : Origin.GetAsUrlParameter()))
                      .Append("destination", (Destination == null ? (string)null : Destination.GetAsUrlParameter()))
                      .Append("mode", (Mode != TravelMode.driving ? Mode.ToString() : (string)null))
                      .Append("traffic_model", (TrafficModel != TrafficModel.best_guess ? TrafficModel.ToString():(string)null))
                      .Append("departure_time", (DepartureTime == null ? null : DepartureTime.Value.ToString()))
                      .Append("arrival_time", (ArrivalTime == null ? null : ArrivalTime.Value.ToString()))
                      .Append("waypoints", WaypointsToUri())
                      .Append("region", Region)
                      .Append("language", Language)
                      .Append("avoid", AvoidHelper.MakeAvoidString(Avoid))
                      .Append("alternatives", Alternatives.HasValue ? (Alternatives.Value ? "true" : "false") : (string)null);

            var url = "json?" + qsb.ToString();

            return(new Uri(url, UriKind.Relative));
        }
Пример #17
0
        protected override QueryStringParametersList GetQueryStringParameters()
        {
            if (Origins == null || !Origins.Any())
            {
                throw new ArgumentException("Must specify an Origins");
            }
            if (Destinations == null || !Destinations.Any())
            {
                throw new ArgumentException("Must specify a Destinations");
            }
            if (DepartureTime != null && ArrivalTime != null)
            {
                throw new ArgumentException("Must not specify both an ArrivalTime and a DepartureTime");
            }
            if (Mode != DistanceMatrixTravelModes.transit && ArrivalTime != null)
            {
                throw new ArgumentException("Must not specify ArrivalTime for modes other than Transit");
            }
            if (Mode != DistanceMatrixTravelModes.transit && TransitRoutingPreference != null)
            {
                throw new ArgumentException("Must not specify TransitRoutingPreference for modes other than Transit");
            }
            if (Mode != DistanceMatrixTravelModes.transit && TransitModes != null && TransitModes.Length > 0)
            {
                throw new ArgumentException("Must not specify TransitModes for modes other than Transit");
            }
            if ((!(Mode == null || Mode == DistanceMatrixTravelModes.driving) || DepartureTime == null) &&
                TrafficModel != null)
            {
                throw new ArgumentException("A TrafficModel must not be specified unless the Mode is Driving and a DepartureTime is provided");
            }

            var parameters = base.GetQueryStringParameters();

            parameters.Add("origins", string.Join("|", Origins));
            parameters.Add("destinations", string.Join("|", Destinations));

            if (DepartureTime != null)
            {
                parameters.Add("departure_time", DepartureTime.ToString());
            }

            if (ArrivalTime != null)
            {
                parameters.Add("arrival_time", ArrivalTime.ToString());
            }

            if (Mode != null)
            {
                parameters.Add("mode", Mode.ToString());
            }

            if (TrafficModel != null)
            {
                parameters.Add("traffic_model", TrafficModel.ToString());
            }

            if (TransitRoutingPreference != null)
            {
                parameters.Add("transit_routing_preference", TransitRoutingPreference.ToString());
            }

            if (TransitModes != null && TransitModes.Length > 0)
            {
                parameters.Add("transit_mode", string.Join("|", TransitModes.Select(a => a.ToString())));
            }

            if (Avoid != null)
            {
                parameters.Add("avoid", Avoid.ToString());
            }

            if (Units != null)
            {
                parameters.Add("units", Units.ToString());
            }

            if (!string.IsNullOrWhiteSpace(Language))
            {
                parameters.Add("language", Language);
            }

            return(parameters);
        }
        public override string ToString()
        {
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            //adding required parrameters
            if (Origins != null)
            {
                parameters.Add("origins", string.Join("|", Origins.Select(d => d.ToString())));
            }

            if (Destinations != null)
            {
                parameters.Add("destinations", string.Join("|", Destinations.Select(d => d.ToString())));
            }

            if (!string.IsNullOrEmpty(Key))
            {
                parameters.Add("key", Key);
            }


            //adding optional parametres
            if (TravelMode != null)
            {
                parameters.Add("mode", TravelMode.Value.ToString());
            }



            if (Avoid != null)
            {
                parameters.Add("avoid", string.Join("|", Avoid.Distinct().Select(d => d.ToString())));
            }

            if (string.IsNullOrEmpty(Language))
            {
                parameters.Add("language", Language);
            }

            if (Units is UnitSystem.imperial)
            {
                parameters.Add("units", Units.ToString());
            }

            if (string.IsNullOrEmpty(Region))
            {
                parameters.Add("region", Region);
            }

            if (ArrivalTime != null)
            {
                parameters.Add("arrival_time",
                               ArrivalTime - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) != null
                        ? (ArrivalTime.Value - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Seconds.ToString()
                        : null);
            }

            if (DepartureTime != null)
            {
                parameters.Add("departure_time",
                               DepartureTime - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) != null
                        ? (DepartureTime.Value - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Seconds.ToString()
                        : null);
            }

            if (TrafficModel != null)
            {
                parameters.Add("traffic_model", TrafficModel.ToString());
            }

            if (TransitMode != null)
            {
                parameters.Add("transit_mode", string.Join("|", TransitMode.Distinct().Select(d => d.ToString())));
            }

            if (TransitRoutingPreference != null)
            {
                parameters.Add("transit_routing_preference", TransitRoutingPreference.ToString());
            }

            return(string.Join("&", parameters.Select(d => d.Key + "=" + d.Value)));
        }
Пример #19
0
        //過濾交通限制
        public static bool FilterTraffic(DateTime S_Date, string S_Time, string Fly_No, TrafficModel sec_item, DataTable dt)
        {
            bool date_chk = false;
            bool chk      = false;

            foreach (DataRow dtl_dr in dt.Rows)
            {
                string Forward_Flag = dtl_dr.ToStringEx("FORWARD_FLAG");

                //判斷禁搭日期
                if (Forward_Flag != "" && Forward_Flag == sec_item.FORWARD_FLAG)
                {
                    DateTime emgargo_s_date = DateTime.ParseExact(dtl_dr.ToStringEx("S_DATE"), "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);                    //禁搭日起
                    DateTime emgargo_e_date = DateTime.ParseExact(dtl_dr.ToStringEx("E_DATE"), "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);                    //禁搭日迄

                    if (S_Date >= emgargo_s_date && S_Date <= emgargo_e_date)
                    {
                        date_chk = false; break;
                    }
                    else
                    {
                        date_chk = true;
                    }
                }
                else
                {
                    date_chk = true;
                }

                //判斷禁搭航班、時間
                if (date_chk == true)
                {
                    IFormatProvider culture = new System.Globalization.CultureInfo("zh-TW", true);

                    string   go_limit_flight_no     = dtl_dr.ToStringEx("GO_LIMIT_FLIGHT_NO");
                    string   go_embargo_flight_no   = dtl_dr.ToStringEx("GO_EMBARGO_FLIGHT_NO");
                    string   back_limit_flight_no   = dtl_dr.ToStringEx("BACK_LIMIT_FLIGHT_NO");
                    string   back_embargo_flight_no = dtl_dr.ToStringEx("BACK_EMBARGO_FLIGHT_NO");
                    DateTime s_time = DateTime.ParseExact(S_Time, "HHmm", culture); //出發時間

                    if (sec_item.FORWARD_FLAG == "1")                               //1-->去程
                    {
                        //去程限搭航班
                        if (go_limit_flight_no != "")
                        {
                            foreach (string s in go_limit_flight_no.Split(','))
                            {
                                if (s == Fly_No)
                                {
                                    chk = true; break;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                        }
                        //去程禁搭航班
                        else if (go_embargo_flight_no != "")
                        {
                            foreach (string s in go_embargo_flight_no.Split(','))
                            {
                                if (s == Fly_No)
                                {
                                    chk = false; break;
                                }
                                else
                                {
                                    chk = true;
                                }
                            }
                        }
                        else
                        {
                            chk = true;
                        }

                        DateTime go_limit_s_time;
                        DateTime go_limit_e_time;
                        DateTime go_embargo_s_time;
                        DateTime go_embargo_e_time;

                        if (chk == true)
                        {
                            //去程限搭時段起 迄
                            if (dtl_dr.ToStringEx("GO_LIMIT_FLIGHT_S_TIME") != "" && dtl_dr.ToStringEx("GO_LIMIT_FLIGHT_E_TIME") != "")
                            {
                                go_limit_s_time = DateTime.ParseExact(dtl_dr.ToStringEx("GO_LIMIT_FLIGHT_S_TIME"), "HHmm", culture);
                                go_limit_e_time = DateTime.ParseExact(dtl_dr.ToStringEx("GO_LIMIT_FLIGHT_E_TIME"), "HHmm", culture);

                                if (s_time >= go_limit_s_time && s_time <= go_limit_e_time)
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                            else if (dtl_dr.ToStringEx("GO_LIMIT_FLIGHT_S_TIME") != "" && dtl_dr.ToStringEx("GO_LIMIT_FLIGHT_E_TIME") == "")
                            {
                                go_limit_s_time = DateTime.ParseExact(dtl_dr.ToStringEx("GO_LIMIT_FLIGHT_S_TIME"), "HHmm", culture);
                                if (s_time >= go_limit_s_time)
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                            else if (dtl_dr.ToStringEx("GO_LIMIT_FLIGHT_S_TIME") == "" && dtl_dr.ToStringEx("GO_LIMIT_FLIGHT_E_TIME") != "")
                            {
                                go_limit_e_time = DateTime.ParseExact(dtl_dr.ToStringEx("GO_LIMIT_FLIGHT_E_TIME"), "HHmm", culture);
                                if (s_time <= go_limit_e_time)
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                            //去程禁搭時段起 迄
                            else if (dtl_dr.ToStringEx("GO_EMBARGO_FLIGHT_S_TIME") != "" && dtl_dr.ToStringEx("GO_EMBARGO_FLIGHT_E_TIME") != "")
                            {
                                go_embargo_s_time = DateTime.ParseExact(dtl_dr.ToStringEx("GO_EMBARGO_FLIGHT_S_TIME"), "HHmm", culture);
                                go_embargo_e_time = DateTime.ParseExact(dtl_dr.ToStringEx("GO_EMBARGO_FLIGHT_E_TIME"), "HHmm", culture);

                                if (!((s_time >= go_embargo_s_time) && (s_time <= go_embargo_e_time)))
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                            else if (dtl_dr.ToStringEx("GO_EMBARGO_FLIGHT_S_TIME") != "" && dtl_dr.ToStringEx("GO_EMBARGO_FLIGHT_E_TIME") == "")
                            {
                                go_embargo_s_time = DateTime.ParseExact(dtl_dr.ToStringEx("GO_EMBARGO_FLIGHT_S_TIME"), "HHmm", culture);

                                if (!(s_time >= go_embargo_s_time))
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                            else if (dtl_dr.ToStringEx("GO_EMBARGO_FLIGHT_S_TIME") == "" && dtl_dr.ToStringEx("GO_EMBARGO_FLIGHT_E_TIME") != "")
                            {
                                go_embargo_e_time = DateTime.ParseExact(dtl_dr.ToStringEx("GO_EMBARGO_FLIGHT_E_TIME"), "HHmm", culture);

                                if (!(s_time <= go_embargo_e_time))
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                        }
                    }
                    else                     //2-->回程
                    {
                        //回程限搭航班
                        if (back_limit_flight_no != "")
                        {
                            foreach (string s in back_limit_flight_no.Split(','))
                            {
                                if (s == Fly_No)
                                {
                                    chk = true; break;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                        }
                        //回程禁搭航班
                        else if (back_embargo_flight_no != "")
                        {
                            foreach (string s in back_embargo_flight_no.Split(','))
                            {
                                if (s == Fly_No)
                                {
                                    chk = false; break;
                                }
                                else
                                {
                                    chk = true;
                                }
                            }
                        }
                        else
                        {
                            chk = true;
                        }

                        DateTime back_limit_s_time;
                        DateTime back_limit_e_time;
                        DateTime back_embargo_s_time;
                        DateTime back_embargo_e_time;

                        if (chk == true)
                        {
                            //回程限搭時段起 迄
                            if (dtl_dr.ToStringEx("BACK_LIMIT_FLIGHT_S_TIME") != "" && dtl_dr.ToStringEx("BACK_LIMIT_FLIGHT_E_TIME") != "")
                            {
                                back_limit_s_time = DateTime.ParseExact(dtl_dr.ToStringEx("BACK_LIMIT_FLIGHT_S_TIME"), "HHmm", culture);
                                back_limit_e_time = DateTime.ParseExact(dtl_dr.ToStringEx("BACK_LIMIT_FLIGHT_E_TIME"), "HHmm", culture);

                                if (s_time >= back_limit_s_time && s_time <= back_limit_e_time)
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                            else if (dtl_dr.ToStringEx("BACK_LIMIT_FLIGHT_S_TIME") != "" && dtl_dr.ToStringEx("BACK_LIMIT_FLIGHT_E_TIME") == "")
                            {
                                back_limit_s_time = DateTime.ParseExact(dtl_dr.ToStringEx("BACK_LIMIT_FLIGHT_S_TIME"), "HHmm", culture);

                                if (s_time >= back_limit_s_time)
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                            else if (dtl_dr.ToStringEx("BACK_LIMIT_FLIGHT_S_TIME") == "" && dtl_dr.ToStringEx("BACK_LIMIT_FLIGHT_E_TIME") != "")
                            {
                                back_limit_e_time = DateTime.ParseExact(dtl_dr.ToStringEx("BACK_LIMIT_FLIGHT_E_TIME"), "HHmm", culture);

                                if (s_time <= back_limit_e_time)
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                            //回程禁搭時段起 迄
                            else if (dtl_dr.ToStringEx("BACK_EMBARGO_FLIGHT_S_TIME") != "" && dtl_dr.ToStringEx("BACK_EMBARGO_FLIGHT_E_TIME") != "")
                            {
                                back_embargo_s_time = DateTime.ParseExact(dtl_dr.ToStringEx("BACK_EMBARGO_FLIGHT_S_TIME"), "HHmm", culture);
                                back_embargo_e_time = DateTime.ParseExact(dtl_dr.ToStringEx("BACK_EMBARGO_FLIGHT_E_TIME"), "HHmm", culture);

                                if (!((s_time >= back_embargo_s_time) && (s_time <= back_embargo_e_time)))
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                            else if (dtl_dr.ToStringEx("BACK_EMBARGO_FLIGHT_S_TIME") != "" && dtl_dr.ToStringEx("BACK_EMBARGO_FLIGHT_E_TIME") == "")
                            {
                                back_embargo_s_time = DateTime.ParseExact(dtl_dr.ToStringEx("BACK_EMBARGO_FLIGHT_S_TIME"), "HHmm", culture);

                                if (!(s_time >= back_embargo_s_time))
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                            else if (dtl_dr.ToStringEx("BACK_EMBARGO_FLIGHT_S_TIME") == "" && dtl_dr.ToStringEx("BACK_EMBARGO_FLIGHT_E_TIME") != "")
                            {
                                back_embargo_e_time = DateTime.ParseExact(dtl_dr.ToStringEx("BACK_EMBARGO_FLIGHT_E_TIME"), "HHmm", culture);

                                if (!(s_time <= back_embargo_e_time))
                                {
                                    chk = true;
                                }
                                else
                                {
                                    chk = false;
                                }
                            }
                        }
                    }
                }
            }
            return(chk);
        }
Пример #20
0
        // 取得交通航段
        public static List <TrafficModel> GetTrafficSectors(ProdDetailRQModel req)
        {
            List <TrafficModel> sectors = new List <TrafficModel>();

            try
            {
                // 區段 SECTOR
                DataSet sec_ds        = TrafficDAL.GetTrafficSectors(req.PRODNO, req.SDATE, req.EDATE);
                var     fw_flag       = "";
                var     accum_add_day = 0;
                var     total_psg     = req.ADULT + req.CHILD + req.CHILDNB + req.SENIOR;

                foreach (DataRow dr in sec_ds.Tables[0].Rows)
                {
                    // 檢查去/回程國定假日

                    var AddPriceWeeks = string.IsNullOrEmpty(dr.ToStringEx("ADD_PRICE_WEEKS")) ? "0000000" : dr.ToStringEx("ADD_PRICE_WEEKS");
                    var s_is_holiday  = AddPriceWeeks.Substring(Convert.ToInt32(Convert.ToDateTime(req.SDATE).DayOfWeek), 1);                    // 出發日是否為假日
                    var e_is_holiday  = AddPriceWeeks.Substring(Convert.ToInt32(Convert.ToDateTime(req.EDATE).DayOfWeek), 1);                    // 回程日是否為假日

                    s_is_holiday = (s_is_holiday.Equals("1") || NationalHolidayDAL.ChkNationalHoliday(req.SDATE)) ? "1" : "0";
                    e_is_holiday = (e_is_holiday.Equals("1") || NationalHolidayDAL.ChkNationalHoliday(req.EDATE)) ? "1" : "0";

                    var IsTripInHoliday = (dr.ToStringEx("FORWARD_FLAG").Equals("1") ? s_is_holiday : e_is_holiday).Equals("1") ? true : false;
                    var dept_date       = dr.ToStringEx("FORWARD_FLAG").Equals("1") ? req.SDATE : req.EDATE;

                    // 各段交通累積日數, 當去回程切換數值應該歸零重計
                    if (fw_flag != dr.ToStringEx("FORWARD_FLAG"))
                    {
                        accum_add_day = 0;
                        fw_flag       = dr.ToStringEx("FORWARD_FLAG");
                    }
                    accum_add_day += dr.ToInt32("ADD_DAY");

                    try
                    {
                        // 航段使用交通成本
                        TrafficSectorCostModel SectorCost = GetTrafficCost(req.PRODNO, dr.ToStringEx("DEP_FROM"), dr.ToStringEx("ARR_TO"),
                                                                           Convert.ToDateTime(dept_date), dr.ToInt64("TRAFFIC_XID"), dr.ToInt64("TRAFFIC_COST_XID"), IsTripInHoliday);
                        // 跳過無成本的交通段
                        if (SectorCost == null)
                        {
                            throw new Exception(string.Format("PROD_NO={0}, FORWARD_FLAG={1}, DATE={2}, TRAFFIC_XID={3}, TRAFFIC_COST_XID={4} 交通成本為 NULL",
                                                              req.PRODNO, dr.ToStringEx("FORWARD_FLAG"), dept_date, dr.ToInt64("TRAFFIC_XID"), dr.ToInt64("TRAFFIC_COST_XID")));
                        }

                        // 若承運商為B7, 帶入預設成本與行程代碼
                        if (dr.ToStringEx("CARRIER_CODE").Equals("B7"))
                        {
                            SectorCost.ADULT_TOURCODE  = IsTripInHoliday ? dr.ToStringEx("ADT_TOURCODE_H") : dr.ToStringEx("ADT_TOURCODE");
                            SectorCost.CHILD_TOURCODE  = IsTripInHoliday ? dr.ToStringEx("CHD_TOURCODE_H") : dr.ToStringEx("CHD_TOURCODE");
                            SectorCost.SENIOR_TOURCODE = IsTripInHoliday ? dr.ToStringEx("SEN_TOURCODE_H") : dr.ToStringEx("SEN_TOURCODE");

                            SectorCost.ADULT_FAREBASIS  = IsTripInHoliday ? dr.ToStringEx("ADT_FAREBASIS_H") : dr.ToStringEx("ADT_FAREBASIS");
                            SectorCost.CHILD_FAREBASIS  = IsTripInHoliday ? dr.ToStringEx("CHD_FAREBASIS_H") : dr.ToStringEx("CHD_FAREBASIS");
                            SectorCost.SENIOR_FAREBASIS = IsTripInHoliday ? dr.ToStringEx("SEN_FAREBASIS_H") : dr.ToStringEx("SEN_FAREBASIS");
                        }

                        #region 建構交通航段Model

                        var sec_item = new TrafficSectorModel()
                        {
                            PROD_NO                = dr.ToStringEx("PROD_NO"),
                            TRAFFIC_XID            = dr.ToStringEx("TRAFFIC_XID"),
                            TRAFFIC_COST_XID       = dr.ToStringEx("TRAFFIC_COST_XID"),
                            TRAFFIC_COST_PRICE_XID = dr.ToStringEx("TRAFFIC_COST_PRICE_XID"),

                            TRIP_WAY     = dr.ToStringEx("TRIP_WAY"),
                            FORWARD_FLAG = dr.ToStringEx("FORWARD_FLAG"),
                            SECTOR       = dr.ToInt32("SEC"),
                            TRAFFIC_TYPE = dr.ToStringEx("TRAFFIC_TYPE"),
                            CARRIER_CODE = dr.ToStringEx("CARRIER_CODE"),
                            DEP_FROM     = dr.ToStringEx("DEP_FROM"),
                            ARR_TO       = dr.ToStringEx("ARR_TO"),
                            FLY_HL_FLAG  = dr.ToStringEx("FLY_HL_FLAG"),
                            SUP_NO       = dr.ToStringEx("SUP_NO"),
                            FARE_BASIS   = dr.ToStringEx("FARE_BASIS"),
                            ARNK_FLAG    = dr.ToStringEx("ARNK_FLAG"),

                            // 票規
                            RULE_TYPE = dr.ToStringEx("RULE_TYPE"),

                            // 交通成本
                            TRAFFIC_COST = SectorCost,
                        };

                        var timetable = QueryCrsTimeTable(dr.ToDateTime("S_DATE"), dr.ToDateTime("E_DATE"), sec_item, total_psg);

                        #endregion 建構交通航段Model

                        var sector = new TrafficModel()
                        {
                            PROD_NO     = dr.ToStringEx("PROD_NO"),
                            TRAFFIC_XID = dr.ToStringEx("TRAFFIC_XID"),

                            TRIP_WAY           = dr.ToStringEx("TRIP_WAY"),
                            SECTOR             = dr.ToStringEx("SEC"),
                            TRAFFIC_TYPE       = dr.ToStringEx("TRAFFIC_TYPE"),
                            TRAFFIC_NAME       = dr.ToStringEx("CARRIER_CODE_NAME"),
                            SUP_NO             = dr.ToStringEx("SUP_NO"),
                            RETURN_FEE         = dr.ToStringEx("RETURN_FEE"),
                            RETURN_FEE_PERCENT = Convert.ToDouble(string.IsNullOrEmpty(dr.ToStringEx("RETURN_FEE_PERCENT")) ? "0" : dr.ToStringEx("RETURN_FEE_PERCENT")),
                            // 票規
                            RULE_TYPE = dr.ToStringEx("RULE_TYPE"),

                            // 交通位控
                            //TRAFFIC_QTYS = Qty,
                            // 交通時刻表
                            //TRAFFIC_TIMETBS = timetable
                        };

                        sectors.Add(sector);
                    }
                    catch (Exception ex2)
                    {
                        Website.Instance.logger.FatalFormat("{0},{1}", ex2.Message, ex2.StackTrace);
                    }
                }
            }
            catch (Exception ex)
            {
                //Website.Instance.logger.FatalFormat("{0},{1}", ex.Message, ex.StackTrace);
                throw ex;
            }

            return(sectors);
        }
        public override string ToString()
        {
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            //adding required parrameters
            if (Origin != null)
            {
                parameters.Add("origin", Origin.ToString());
            }

            if (Destination != null)
            {
                parameters.Add("destination", value: Destination.ToString());
            }

            if (!string.IsNullOrEmpty(Key))
            {
                parameters.Add("key", Key);
            }


            //adding optional parametres
            if (TravelMode != null)
            {
                parameters.Add("mode", TravelMode.Value.ToString());
            }

            if (WayPoints != null && WayPoints.Count > 0)
            {
                parameters.Add("waypoints", string.Join("|", WayPoints.Distinct().Select(d => d.ToString())));
            }

            if (Alternatives)
            {
                parameters.Add("alternatives", Alternatives.ToString());
            }

            if (Avoid != null)
            {
                parameters.Add("avoid", string.Join("|", Avoid.Distinct().Select(d => d.ToString())));
            }

            if (!string.IsNullOrEmpty(Language))
            {
                parameters.Add("language", Language);
            }

            if (Units is UnitSystem.imperial)
            {
                parameters.Add("units", Units.ToString());
            }

            if (!string.IsNullOrEmpty(Region))
            {
                parameters.Add("region", Region);
            }

            if (!string.IsNullOrEmpty(ArrivalTime))
            {
                parameters.Add("arrival_time",
                               _ArrivalTime - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) != null
                        ? Math.Floor((_ArrivalTime.Value.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds).ToString(CultureInfo.InvariantCulture)
                        : null);
            }

            if (!string.IsNullOrEmpty(DepartureTime))
            {
                parameters.Add("departure_time",
                               _DepartureTime != null
                        ?Math.Floor((_DepartureTime.Value.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))
                                    .TotalSeconds).ToString(CultureInfo.InvariantCulture)
                        : null);
            }

            if (TrafficModel != null)
            {
                parameters.Add("traffic_model", TrafficModel.ToString());
            }

            if (TransitMode != null)
            {
                parameters.Add("transit_mode", string.Join("|", TransitMode.Distinct().Select(d => d.ToString())));
            }

            if (TransitRoutingPreferences != null)
            {
                parameters.Add("transit_routing_preference", TransitRoutingPreferences.ToString());
            }

            return(string.Join("&", parameters.Select(d => d.Key + "=" + d.Value)));
        }
 public void TestInitialize()
 {
     _region1  = ModelsFactory.NewRegionModel(1, "First Region");
     _traffic1 = ModelsFactory.NewTrafficModel(_region1.Code, 2, "No jams");
 }