85 lines
2.4 KiB
C#
85 lines
2.4 KiB
C#
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();
|
|
}
|
|
}
|
|
} |