110 lines
2.8 KiB
C#
110 lines
2.8 KiB
C#
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
|
||
{
|
||
|
||
[JsonProperty("l")]
|
||
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; }
|
||
|
||
/// <summary>
|
||
/// 创建 <see cref="TrainInfoStorage" /> 的新实例(TrainInfoStorage)
|
||
/// </summary>
|
||
public TrainInfoStorage(IEnumerable<Train> trains)
|
||
{
|
||
Trains = trains.ToList();
|
||
Init();
|
||
}
|
||
|
||
[JsonConstructor]
|
||
protected TrainInfoStorage()
|
||
{
|
||
}
|
||
|
||
[OnDeserialized]
|
||
void DeserializeCallback(StreamingContext context)
|
||
{
|
||
Init();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 初始化
|
||
/// </summary>
|
||
public void Init()
|
||
{
|
||
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);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|