namespace Web12306.Servers.TrainSuggestion { using System; using Newtonsoft.Json; public class TrainInfoItem { [JsonProperty("info")] public TrainInfo TrainInfo { get; set; } [JsonProperty("stops")] public StopInfo[] StopInfos { get; set; } public void PreprocessData(DateTime requestDate) { TrainInfo.from.TimePoint = requestDate.Date.Add(Cn12306SuggestionUtility.GetTimeValueSpan(TrainInfo.from.time)); //查找开始站 var startIndex = Array.FindIndex(StopInfos, s => s.isEnabled); TrainInfo.from.Index = startIndex; TrainInfo.to.Index = Array.FindIndex(StopInfos, startIndex + 1, s => !s.isEnabled); if (TrainInfo.to.Index == -1) TrainInfo.to.Index = StopInfos.Length - 1; if (TrainInfo.from.Index == -1 || TrainInfo.to.Index == -1) return; StopInfos[startIndex].StartTime = TrainInfo.from.TimePoint; if (startIndex > 0) { StopInfos[startIndex].ArriveTime = requestDate.Add(StopInfos[startIndex].ArriveTimePoint); if (StopInfos[startIndex].ArriveTime > StopInfos[startIndex].StartTime) StopInfos[startIndex].ArriveTime = StopInfos[startIndex].ArriveTime.AddDays(-1); } var tempDate = requestDate; for (var i = startIndex - 1; i >= 0; i--) { var sto = StopInfos[i]; var stn = StopInfos[i + 1]; sto.StartTime = tempDate.Add(sto.StartTimePoint); if (sto.StartTime > stn.StartTime) { tempDate = tempDate.AddDays(-1); sto.StartTime = sto.StartTime.AddDays(-1); } if (i > 0) { sto.ArriveTime = tempDate.Add(sto.ArriveTimePoint); if (sto.ArriveTime > sto.StartTime) { tempDate = tempDate.AddDays(-1); sto.ArriveTime = sto.ArriveTime.AddDays(-1); } } } tempDate = requestDate; for (var i = startIndex + 1; i < StopInfos.Length; i++) { var sto = StopInfos[i]; var stn = StopInfos[i - 1]; sto.ArriveTime = tempDate.Add(sto.ArriveTimePoint); if (sto.ArriveTime < stn.StartTime) { tempDate = tempDate.AddDays(1); sto.ArriveTime = sto.ArriveTime.AddDays(1); } if (i < StopInfos.Length - 1) { sto.StartTime = tempDate.Add(sto.StartTimePoint); if (sto.StartTime < sto.ArriveTime) { tempDate = tempDate.AddDays(1); sto.StartTime = sto.StartTime.AddDays(1); } } } //var startTime = StopInfos.Select(s => s.StartTime).ToArray(); //var stopTime = StopInfos.Select(s => s.StopTime).ToArray(); } } }