Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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;
        }
Esempio n. 3
0
        private DailyCounter PrepareCounter(VisitorsCounter counter, int prev = 0)
        {
            var model = new DailyCounter
            {
                date   = counter.LastDate,
                Count  = counter.TodayCount,
                ToPrev = counter.TodayCount - prev
            };

            return(model);
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
 public DailyCounterTest()
 {
     mDailyCounter              = new DailyCounter();
     mDailyCounter.DateTime     = DateTime.UtcNow;
     mDailyCounter.RequestCount = 10;
 }