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); }
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); } }
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); } }
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); }