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)); }