コード例 #1
0
        private static List <GroupLocationScheduleCount> UpdateCache()
        {
            var output = new List <GroupLocationScheduleCount>();

            RockContext rockContext = new RockContext();

            AttendanceOccurrenceService attendanceOccurrenceService = new AttendanceOccurrenceService(rockContext);
            var attendances = attendanceOccurrenceService.Queryable()
                              .Where(ao => ao.OccurrenceDate == RockDateTime.Today)
                              .SelectMany(ao => ao.Attendees)
                              .Where(a => a.EndDateTime == null)
                              .GroupBy(a => new { a.Occurrence.GroupId, a.Occurrence.LocationId, a.Occurrence.ScheduleId })
                              .ToList();

            foreach (var attendance in attendances)
            {
                var glsc = new GroupLocationScheduleCount()
                {
                    GroupId         = attendance.Key.GroupId ?? 0,
                    LocationId      = attendance.Key.LocationId ?? 0,
                    ScheduleId      = attendance.Key.ScheduleId ?? 0,
                    PersonIds       = attendance.Select(a => a.PersonAlias?.PersonId ?? 0).ToList(),
                    InRoomPersonIds = attendance.Where(a => a.DidAttend == true).Select(a => a.PersonAlias?.PersonId ?? 0).ToList()
                };
                output.Add(glsc);
            }

            RockCache.AddOrUpdate(cacheKey, null, output, RockDateTime.Now.AddMinutes(10), Constants.CACHE_TAG);
            return(output);
        }
コード例 #2
0
        public static void AddAttendance(Attendance attendance)
        {
            lock ( LOCK )
            {
                ObjectCache cache = Rock.Web.Cache.RockMemoryCache.Default;
                var         lglsc = (List <GroupLocationScheduleCount>)cache.Get(cacheKey);
                if (lglsc == null)
                {
                    lglsc = UpdateCache();
                }
                GroupLocationScheduleCount glsc = lglsc.FirstOrDefault(g =>
                                                                       g.LocationId == (attendance.LocationId ?? 0) &&
                                                                       g.ScheduleId == (attendance.ScheduleId ?? 0) &&
                                                                       g.GroupId == (attendance.GroupId ?? 0));
                if (glsc == null)
                {
                    glsc = new GroupLocationScheduleCount()
                    {
                        LocationId      = attendance.LocationId ?? 0,
                        ScheduleId      = attendance.ScheduleId ?? 0,
                        GroupId         = attendance.GroupId ?? 0,
                        PersonIds       = new List <int>(),
                        InRoomPersonIds = new List <int>()
                    };
                    lglsc.Add(glsc);
                }


                if (!glsc.PersonIds.Contains(attendance.PersonAlias?.PersonId ?? 0))
                {
                    glsc.PersonIds.Add(attendance.PersonAlias.PersonId);
                }

                if (attendance.DidAttend == true && !glsc.InRoomPersonIds.Contains(attendance.PersonAlias?.PersonId ?? 0))
                {
                    glsc.InRoomPersonIds.Add(attendance.PersonAlias.PersonId);
                }

                var cachePolicy = new CacheItemPolicy();
                cachePolicy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(10);
                cache.Set(cacheKey, lglsc, cachePolicy);
            }
        }
コード例 #3
0
        public static void AddAttendance(Attendance attendance)
        {
            lock ( LOCK )
            {
                var lglsc = (List <GroupLocationScheduleCount>)RockCache.Get(cacheKey);
                if (lglsc == null)
                {
                    lglsc = UpdateCache();
                }
                GroupLocationScheduleCount glsc = lglsc.FirstOrDefault(g =>
                                                                       g.LocationId == (attendance.Occurrence.LocationId ?? 0) &&
                                                                       g.ScheduleId == (attendance.Occurrence.ScheduleId ?? 0) &&
                                                                       g.GroupId == (attendance.Occurrence.GroupId ?? 0));
                if (glsc == null)
                {
                    glsc = new GroupLocationScheduleCount()
                    {
                        LocationId      = attendance.Occurrence.LocationId ?? 0,
                        ScheduleId      = attendance.Occurrence.ScheduleId ?? 0,
                        GroupId         = attendance.Occurrence.GroupId ?? 0,
                        PersonIds       = new List <int>(),
                        InRoomPersonIds = new List <int>()
                    };
                    lglsc.Add(glsc);
                }


                if (!glsc.PersonIds.Contains(attendance.PersonAlias?.PersonId ?? 0))
                {
                    glsc.PersonIds.Add(attendance.PersonAlias.PersonId);
                }

                if (attendance.DidAttend == true && !glsc.InRoomPersonIds.Contains(attendance.PersonAlias?.PersonId ?? 0))
                {
                    glsc.InRoomPersonIds.Add(attendance.PersonAlias.PersonId);
                }
                RockCache.AddOrUpdate(cacheKey, null, lglsc, RockDateTime.Now.AddMinutes(10), Constants.CACHE_TAG);
            }
        }
コード例 #4
0
        private static List <GroupLocationScheduleCount> UpdateCache()
        {
            var output = new List <GroupLocationScheduleCount>();

            var               today             = Rock.RockDateTime.Today;
            var               tomorrow          = Rock.RockDateTime.Today.AddDays(1);
            RockContext       rockContext       = new RockContext();
            AttendanceService attendanceService = new AttendanceService(rockContext);
            var               attendances       = attendanceService.Queryable()
                                                  .Where(a =>
                                                         a.StartDateTime >= today &&
                                                         a.StartDateTime < tomorrow &&
                                                         a.EndDateTime == null)
                                                  .GroupBy(a => new { a.GroupId, a.LocationId, a.ScheduleId })
                                                  .ToList();

            foreach (var attendance in attendances)
            {
                var glsc = new GroupLocationScheduleCount()
                {
                    GroupId         = attendance.Key.GroupId ?? 0,
                    LocationId      = attendance.Key.LocationId ?? 0,
                    ScheduleId      = attendance.Key.ScheduleId ?? 0,
                    PersonIds       = attendance.Select(a => a.PersonAlias?.PersonId ?? 0).ToList(),
                    InRoomPersonIds = attendance.Where(a => a.DidAttend == true).Select(a => a.PersonAlias?.PersonId ?? 0).ToList()
                };
                output.Add(glsc);
            }

            var cachePolicy = new CacheItemPolicy();

            cachePolicy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(10);
            ObjectCache cache = Rock.Web.Cache.RockMemoryCache.Default;

            cache.Set(cacheKey, output, cachePolicy);
            return(output);
        }