using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using TrainInfomationProviderService.StationInfo; namespace TrainInfomationProviderService.TrainInfo.Entities { public class TrainInfoStorage { HashSet _hashStore; [JsonProperty("hl")] public HashSet HashStore { get { return _hashStore ?? (_hashStore = new HashSet(StringComparer.OrdinalIgnoreCase)); } } [JsonIgnore] public List Trains { get; set; } //[JsonIgnore] //public Dictionary TrainsIdMap { get; private set; } /// /// 车站-发车车次信息 /// [JsonIgnore] public Dictionary> StationLeftTrainData { get; private set; } /// /// 车站-发车车次信息 /// [JsonIgnore] public Dictionary> StationArriveTrainData { get; private set; } /// /// 站点路由表 /// [JsonIgnore] public Dictionary> StationRouteMap { get; private set; } public TrainInfoStorage() { } [OnDeserialized] void DeserializeCallback(StreamingContext context) { Init(); } /// /// 初始化 /// public void Init() { //load data var store = TrainInfoManager.Instance.DataStore.TrainData; Trains = HashStore.Select(s => store.GetValue(s)).ExceptNull().ToList(); //TrainsIdMap = Trains.GroupBy(s => s.Id).ToDictionary(s => s.Key, s => //{ // var arr = s.ToArray(); // //if (arr.Length > 1) // //{ // // Trace.TraceWarning("[TRAIN_INFO_STORAGE] 警告:车次ID {0} 出现重复数据,请查证,重复次数:{1}", s.Key, arr.Length - 1); // //} // return arr; //}, StringComparer.OrdinalIgnoreCase); } /// /// 初始化车站->车次信息 /// public void InitStationTrainData() { StationLeftTrainData = new Dictionary>(); StationArriveTrainData = new Dictionary>(); foreach (var train in Trains) { for (int i = 0; i < train.TrainStops.Count; i++) { var stop = train.TrainStops[i]; if (i > 0) StationArriveTrainData.GetValue(stop.Code, _ => new List()).Add(train); if (i < train.TrainStops.Count - 1) StationLeftTrainData.GetValue(stop.Code, _ => new List()).Add(train); } } } } }