public static HeaderContainer <T, DailyCounter <T>, DateTime> BuildDailyCounter <T>(this HeaderContainer <T, DailyCounter <T>, DateTime> obj, DailyCounter <T>[] sources, Action <DailyCounter <T> > instanceCreated, DateTime initial, int days) { var results = new DailyCounter <T> [days]; var addedCount = 0; foreach (var item in sources) { var i = item.Date.GetIndex(initial, 1440, days); if (i < 0 || i >= results.Length) { continue; } results[i] = item; addedCount++; } if (addedCount < days) { for (var i = 0; i < days; i++) { if (results[i] == null) { results[i] = new DailyCounter <T>(obj.Header, initial.AddDays(i), 0); instanceCreated(results[i]); } } } obj.Items = new List <DailyCounter <T> >(results); return(obj); }
/// <summary> /// 修改班次估算统计值 /// </summary> /// <param name="a">班别</param> /// <param name="value">班次</param> private void AlterShiftEstimation(DailyCounter <AssignmentType> a, int value) { var indexOfDate = _dateIndexer[a.Date]; // 未来可能会用 a.Date -> HRDate var diff = value - a.Max; PlanningShifts[indexOfDate].Max += diff; a.Max = value; }
private DailyCounter PrepareCounter(VisitorsCounter counter, int prev = 0) { var model = new DailyCounter { date = counter.LastDate, Count = counter.TodayCount, ToPrev = counter.TodayCount - prev }; return(model); }
public IDictionary <string, HeaderContainer <AssignmentType, DailyCounter <AssignmentType>, DateTime> > GetAssignmentTypeDailyCounter(DateTime start, DateTime end, ICollection <ServiceQueue> svcQueues) { DateTime[] dates; //x var indexer = new DateRange(start, end).CreateDateIndexer(new Dictionary<DateTime, int>(), d => d, out dates); var viewDays = end.IndexOf(start); var list = Session.CreateQuery(@"select a,k from AssignmentTypeDailyCounter a right join a.Kind k with k.InUse = true and k.Type = :classType left join fetch k.ServiceQueue q where (a.Date >= :from and a.Date < :end) or q in (:svcQueues) order by k.EstimationPriority") .SetDateTime("from", start) .SetDateTime("end", end) .SetParameterList("svcQueues", svcQueues) .SetParameter("classType", typeof(Assignment)) .SetResultTransformer(new DelegateTransformer <DailyCounter <AssignmentType> >(t => { var counter = t[0] as DailyCounter <AssignmentType>; if (counter != null) { return(counter); } var assignmentType = t[1] as AssignmentType; if (assignmentType != null) { counter = new DailyCounter <AssignmentType>(assignmentType, start, 0); Session.Save(counter); } //if (result != null && result.Kind.ServiceQueue != null && svcQueues.Contains(result.Kind.ServiceQueue)) return(counter); })) .List <DailyCounter <AssignmentType> >(); var gp = from d in list //where d != default(DailyCounter<AssignmentType>) group d by d.Kind into g where g.Key.ServiceQueue != null && svcQueues.Contains(g.Key.ServiceQueue) select new HeaderContainer <AssignmentType, DailyCounter <AssignmentType>, DateTime>(g.Key, date => date.IndexOf(start)) .BuildDailyCounter(g.ToArray(), o => { Session.Save(o); } , start, viewDays) ; return(gp.ToDictionary(o => o.Header.Text, o => o)); }
public static void IncrementDailyCounter(ISession session, int count) { DateTime utcnow = DateTime.UtcNow.Date; DailyCounter counter = (DailyCounter)session.CreateCriteria(typeof(DailyCounter)) .Add(Expression.Eq("DateTime", utcnow)) .UniqueResult(); if (counter == null) { counter = new DailyCounter(); counter.DateTime = utcnow; counter.RequestCount = 0; } counter.RequestCount += count; session.Save(counter); }
public static List <TransitCounter> GetSummaryDaily(ISession session) { List <TransitCounter> result = new List <TransitCounter>(); DateTime now = DateTime.UtcNow; DateTime ts = now.AddDays(-14); while (ts <= now) { DateTime ts_current = new DateTime(ts.Year, ts.Month, ts.Day, 0, 0, 0); DailyCounter c = (DailyCounter)session.CreateCriteria(typeof(DailyCounter)) .Add(Expression.Eq("DateTime", ts_current)) .UniqueResult(); result.Add((c == null) ? new TransitCounter(ts_current, 0) : new TransitCounter(c.DateTime, c.RequestCount)); ts = ts.AddDays(1); } return(result); }
public DailyCounterTest() { mDailyCounter = new DailyCounter(); mDailyCounter.DateTime = DateTime.UtcNow; mDailyCounter.RequestCount = 10; }