Light12306/Web12306/Servers/TrainSuggestion/TrainInfoItem.cs

85 lines
2.4 KiB
C#
Raw Normal View History

2015-03-13 19:25:08 +08:00
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();
}
}
}