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