public static void AppendConfiguredCountries(IEnumerable <HistoricalCountryModel> configuredModels)
        {
            if (configuredModels is null)
            {
                return;
            }
            var models = configuredModels.ToList();

            if (!models.Any())
            {
                return;
            }

            //Step.1 修正
            foreach (var model in models)
            {
                if (!model.IsValid())
                {
                    model.Flag = -1;
                    continue;
                }

                var code = (RegionCodeValue)model.Cep1CrCode;

                if (!code.IsHistoricalValue())
                {
                    model.Flag = -1;
                    continue;
                }

                if (model.Since > DateTime.Today.Year || model.Since <= 0)
                {
                    //不支持公元前
                    model.Flag = -1;
                    continue;
                }

                if (model.EndedIn.HasValue && model.Since > model.EndedIn.Value)
                {
                    //不支持公元前
                    model.Flag = -1;
                    continue;
                }

                if (model.Previous != null)
                {
                    if (!model.Previous.EndedIn.HasValue)
                    {
                        model.Flag = -1;
                        continue;
                    }

                    if (model.Previous.EndedIn.Value > model.Since)
                    {
                        model.Flag = -1;
                        continue;
                    }

                    if (!TryFixedNavModel(models, model.Previous) || model.Previous.Kill)
                    {
                        model.Previous = null;
                    }
                }

                if (model.Next != null)
                {
                    if (model.Next.Any())
                    {
                        foreach (var nav in model.Next)
                        {
                            if (nav is null)
                            {
                                continue;
                            }

                            if (!TryFixedNavModel(models, nav))
                            {
                                nav.Kill = true;
                            }
                        }

                        if (model.Next.All(x => x.Kill))
                        {
                            model.Next.Clear();
                            model.Next = null;
                        }
                    }
                    else
                    {
                        model.Next = null;
                    }
                }

                if (!model.IsValid())
                {
                    model.Flag = -1;
                }
            }

            //Step.2 过滤
            var validModels = models.Where(x => x.IsValid()).ToList();

            //Step.3 添加
            foreach (var model in validModels)
            {
                var runtimeModel = model.ToRuntimeCountryInfo();
                var runtimeNav   = model.ToRuntimeNav();

                RuntimeCountryInfoCache.RuntimeUpdate(runtimeModel);
                HistoricalCountryEngine.AddNav(runtimeNav);
            }
        }
        public static IEnumerable <RuntimeCountryInfo> GetByAlias(string alias, int year, int month, int day)
        {
            var navs = HistoricalCountryEngine.GetNav(alias, year, month, day);

            return(navs.Select(nav => nav.Code).Select(RuntimeCountryInfoCache.GetOrDefault).Where(item => item != null));
        }
 public static void AppendBuildInCountries(IEnumerable <CountryInfo> buildInCountries)
 {
     HistoricalCountryEngine.FirstTimeUpdate(buildInCountries);
 }
        private static IEnumerable <RuntimeCountryInfo> InternalGet(long cep1CrCode, int year, int month, int day)
        {
            var navs = HistoricalCountryEngine.GetNav(cep1CrCode, year, month, day);

            return(navs.Select(nav => nav.Code).Select(RuntimeCountryInfoCache.GetOrDefault).Where(item => item != null));
        }