public void PreProcess(List <Truck> trucks, long time) { var dayIndex = GetDayIndexFromMs(time); var newTrucksGroup = trucks.Where(t => t.DrivenKms == 0).GroupBy(t => t.Road.From.Name); foreach (var newTruckList in newTrucksGroup) { var stat = SealStats.First(s => s.Node == newTruckList.Key); newTruckList.ForEach(t => SealDistributions[t.Seals - 1]++); var inquirySeals = newTruckList.Sum(t => t.Seals); var prevStock = dayIndex == 0 ? 000 : stat.Stock[dayIndex - 1]; var prevReuse = dayIndex == 0 ? 000 : stat.Reuses[dayIndex - 1]; stat.Inquiries[dayIndex] += inquirySeals; if (prevStock < inquirySeals) { var delta = 0; if (prevStock <= 0) { delta = inquirySeals - prevReuse; } else { delta = inquirySeals - prevStock - prevReuse; } stat.Increments[dayIndex] = Math.Abs(delta); stat.Minimum += Math.Abs(delta); } stat.Stock[dayIndex] = prevStock - inquirySeals; } }
public void PostProcess(List <Truck> trucks, long time) { var dayIndex = GetDayIndexFromMs(time); #region reuses var arrivedTrucksGroup = trucks.Where(t => t.Arrived).GroupBy(t => t.Road.To.Name); foreach (var arrivedTruckList in arrivedTrucksGroup) { var stat = SealStats.First(s => s.Node == arrivedTruckList.Key); var prevStock = dayIndex == 0 ? 000 : stat.Stock[dayIndex - 1]; var reuseSeals = arrivedTruckList.Sum(t => t.Seals); stat.Reuses[dayIndex] += reuseSeals; stat.Stock[dayIndex] = prevStock + stat.Reuses[dayIndex] - stat.Inquiries[dayIndex]; } #endregion }