2014-11-21 20:32:36 +08:00
|
|
|
|
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
|
|
|
|
|
{
|
2014-12-01 02:17:13 +08:00
|
|
|
|
HashSet<string> _hashStore;
|
2014-11-21 20:32:36 +08:00
|
|
|
|
|
2014-12-01 02:17:13 +08:00
|
|
|
|
[JsonProperty("hl")]
|
|
|
|
|
public HashSet<string> HashStore
|
|
|
|
|
{
|
|
|
|
|
get { return _hashStore ?? (_hashStore = new HashSet<string>(StringComparer.OrdinalIgnoreCase)); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[JsonIgnore]
|
2014-11-21 20:32:36 +08:00
|
|
|
|
public List<Train> Trains { get; set; }
|
|
|
|
|
|
|
|
|
|
[JsonIgnore]
|
|
|
|
|
public Dictionary<string, Train[]> TrainsCodeMap { get; private set; }
|
|
|
|
|
|
|
|
|
|
[JsonIgnore]
|
|
|
|
|
public Dictionary<string, Train[]> TrainsIdMap { get; private set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 车站-发车车次信息
|
|
|
|
|
/// </summary>
|
|
|
|
|
[JsonIgnore]
|
|
|
|
|
public Dictionary<string, List<Train>> StationLeftTrainData { get; private set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 车站-发车车次信息
|
|
|
|
|
/// </summary>
|
|
|
|
|
[JsonIgnore]
|
|
|
|
|
public Dictionary<string, List<Train>> StationArriveTrainData { get; private set; }
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 站点路由表
|
|
|
|
|
/// </summary>
|
|
|
|
|
[JsonIgnore]
|
|
|
|
|
public Dictionary<string, HashSet<string>> StationRouteMap { get; private set; }
|
|
|
|
|
|
2014-12-01 02:17:13 +08:00
|
|
|
|
public TrainInfoStorage()
|
2014-11-21 20:32:36 +08:00
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[OnDeserialized]
|
|
|
|
|
void DeserializeCallback(StreamingContext context)
|
|
|
|
|
{
|
|
|
|
|
Init();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 初始化
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void Init()
|
|
|
|
|
{
|
2014-12-01 02:17:13 +08:00
|
|
|
|
//load data
|
|
|
|
|
var store = TrainInfoManager.Instance.DataStore.TrainData;
|
|
|
|
|
|
|
|
|
|
Trains = HashStore.Select(s => store[s]).ToList();
|
2014-11-21 20:32:36 +08:00
|
|
|
|
TrainsCodeMap = Trains.GroupBy(s => s.Code).ToDictionary(s => s.Key, s =>
|
|
|
|
|
{
|
|
|
|
|
var arr = s.ToArray();
|
|
|
|
|
//if (arr.Length > 1)
|
|
|
|
|
//{
|
|
|
|
|
// Trace.TraceWarning("[TRAIN_INFO_STORAGE] 警告:车次编号 {0} 出现重复数据,请查证,重复次数:{1}", s.Key, arr.Length - 1);
|
|
|
|
|
//}
|
|
|
|
|
return arr.ToArray();
|
|
|
|
|
}, StringComparer.OrdinalIgnoreCase);
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 初始化车站->车次信息
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void InitStationTrainData()
|
|
|
|
|
{
|
|
|
|
|
StationLeftTrainData = new Dictionary<string, List<Train>>();
|
|
|
|
|
StationArriveTrainData = new Dictionary<string, List<Train>>();
|
|
|
|
|
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<Train>()).Add(train);
|
|
|
|
|
if (i < train.TrainStops.Count - 1)
|
|
|
|
|
StationLeftTrainData.GetValue(stop.Code, _ => new List<Train>()).Add(train);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|