Commit fea0a991 authored by 潘栩锋's avatar 潘栩锋 🚴

修复 TimeGridAdvHelperExt 的 GetAD AD数据时间不对

parent 11ba095b
...@@ -517,38 +517,28 @@ namespace FlyADBase ...@@ -517,38 +517,28 @@ namespace FlyADBase
DateTime lastTime = reponse2.Last().dt; DateTime lastTime = reponse2.Last().dt;
reponse_endTime = lastTime; reponse_endTime = lastTime;
return GetAD(reponse2, begin); return GetAD(reponse2);
} }
public static List<int> GetAD(List<DateTimeUnit3> adPool) public static List<int> GetAD(List<DateTimeUnit3> adPool)
{ {
//通过adPool[0].dt 与 adPool[1].dt 的时间差,计算adPool[0].dt的开始时间 return GetAD(adPool, DateTime.MinValue);
//如果没有adPool[1].dt,就当 adPool[0].dt 的开始时间为 adPool[0].dt - adPool[0].datas.Count() * ad_ts_ms;
DateTime begin;
if (adPool.Count() >= 2)
{
begin = adPool[0].dt - (adPool[1].dt - adPool[0].dt);
}
else {
double t_ms = adPool.First().datas.Count() * ad_ts_ms;
begin = adPool.First().dt - TimeSpan.FromTicks((long)(t_ms * TimeSpan.TicksPerMillisecond));
}
return GetAD(adPool, begin);
} }
public static List<int> GetAD(List<DateTimeUnit3> adPool, DateTime begin) public static List<int> GetAD(List<DateTimeUnit3> adPool, DateTime begin)
{ {
List<int> reponse = new List<int>(); List<int> reponse = new List<int>();
DateTime lastTime = adPool.Last().dt; //导出数据的时间
DateTime idealTime = adPool.Last().dt;
//每个ad包的每个数据不是准确的1.28ms,肯定比1.28ms大,每次需要准确计算
//每个ad包的每个数据不是准确的1.28ms,肯定比1.28ms大,每次需要准
for (int i = 0; i < adPool.Count(); i++) for (int i = 0; i < adPool.Count(); i++)
{ {
int idx = adPool.Count() - 1 - i; int idx = adPool.Count() - 1 - i;
double curr_ad_ts_ms; //当前缓存区包,数据的时间间隔
TimeSpan curr_ad_ts;
//计算这个包每个数据的时间间隔 //计算这个包每个数据的时间间隔
DateTime end_dt = adPool[idx].dt; DateTime end_dt = adPool[idx].dt;
...@@ -556,38 +546,37 @@ namespace FlyADBase ...@@ -556,38 +546,37 @@ namespace FlyADBase
{ {
var begin_dt = adPool[idx - 1].dt; var begin_dt = adPool[idx - 1].dt;
double total_ms = (end_dt - begin_dt).Ticks / TimeSpan.TicksPerMillisecond; double total_ms = (end_dt - begin_dt).Ticks / TimeSpan.TicksPerMillisecond;
curr_ad_ts_ms = total_ms / adPool[idx].datas.Count(); var curr_ad_ts_ms = total_ms / adPool[idx].datas.Count();
curr_ad_ts = TimeSpan.FromTicks((long)(curr_ad_ts_ms * TimeSpan.TicksPerMillisecond));
} }
else if (adPool.Count() > 1) else if (adPool.Count() > 1)
{ {
var begin_dt = adPool[idx].dt - (adPool[idx + 1].dt - adPool[idx].dt); var begin_dt = adPool[idx].dt - (adPool[idx + 1].dt - adPool[idx].dt);
double total_ms = (end_dt - begin_dt).Ticks / TimeSpan.TicksPerMillisecond; double total_ms = (end_dt - begin_dt).Ticks / TimeSpan.TicksPerMillisecond;
curr_ad_ts_ms = total_ms / adPool[idx].datas.Count(); var curr_ad_ts_ms = total_ms / adPool[idx].datas.Count();
curr_ad_ts = TimeSpan.FromTicks((long)(curr_ad_ts_ms * TimeSpan.TicksPerMillisecond));
} }
else else
{ {
curr_ad_ts_ms = ad_ts_ms; curr_ad_ts = ad_ts;
} }
DateTime actTime = adPool[idx].dt;//从缓存区获取数据的时间
double act_ms = 0;
double ideal_ms = 0;//插值,让输出可以有准确的间隔为 ad_ts_ms
for (int j = 0; j < adPool[idx].datas.Count(); j++) for (int j = 0; j < adPool[idx].datas.Count(); j++)
{ {
int idx2 = adPool[idx].datas.Count() - 1 - j; int idx2 = adPool[idx].datas.Count() - 1 - j;
int ad = adPool[idx].datas[idx2]; int ad = adPool[idx].datas[idx2];
actTime -= curr_ad_ts;
act_ms += curr_ad_ts_ms; while (idealTime > actTime)
while (ideal_ms < act_ms)
{ {
reponse.Add(ad); reponse.Add(ad);//导出数据
ideal_ms += ad_ts_ms; idealTime -= ad_ts;//导出数据时间累加
lastTime -= ad_ts;
} }
if (lastTime < begin)
goto _end;//完成
} }
if (idealTime < begin)
goto _end;//完成
} }
_end: _end:
//反转 //反转
...@@ -596,10 +585,6 @@ namespace FlyADBase ...@@ -596,10 +585,6 @@ namespace FlyADBase
} }
/// <summary> /// <summary>
/// 获取 时间在 begin~end 的 AD数据包 /// 获取 时间在 begin~end 的 AD数据包
/// </summary> /// </summary>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment