public IEnumerable <OfficerAttendanceTrackModel> OfficerTracks(long stime, long etime, params string[] officerIds) { var trackHandler = new OfficerTrackHandle(Repository); var stHandler = new StationHandle(Repository); var ids = officerIds.Where(t => !string.IsNullOrWhiteSpace(t)).ToArray(); var noDel = (short)DeleteStatus.No; var query = from track in trackHandler.All(null) join sta in stHandler.All(t => t.IsDel == noDel) on track.SiteId equals sta.SiteId into stas from site in stas.DefaultIfEmpty(new Station { }) select new { track = track, site = site }; query = query.Where(t => t.track.UpTime >= stime && t.track.UpTime <= etime); if (ids.Length > 0) { query = query.Where(t => ids.Any(x => t.track.OfficerId == x)); } var items = query.OrderBy(t => t.track.OfficerId).OrderByDescending(t => t.track.UpTime).ToArray() .Select(t => new OfficerAttendanceTrackModel { station = t.site, track = t.track }); return(items); }
public IEnumerable <OfficerTrackModel> Page(string pattern, int page, int size, out int count) { var orcHandler = new OfficerHandle(Repository); var orgHandler = new OrganizationHandle(Repository); var trkHandler = new OfficerTrackHandle(Repository); var noDel = (short)DeleteStatus.No; var query = from trk in trkHandler.All(null) join ocr in orcHandler.All(t => t.IsDel == noDel) on trk.OfficerId equals ocr.Id join org in orgHandler.All(t => t.IsDel == noDel) on ocr.OrgId equals org.Id select new { track = trk, officer = ocr, org = org }; if (!string.IsNullOrWhiteSpace(pattern)) { query = query.Where(t => t.officer.Name.Contains(pattern) || t.officer.IdentyCode.Contains(pattern)); } if (!User.IsSupperAdministrator) { var orgId = User.Organization.Id; query = query.Where(t => t.officer.OrgId == orgId); } count = query.Count(); var skipCount = (page - 1) * size; var items = query.OrderByDescending(t => t.track.UpTime).Skip(skipCount).Take(size).ToArray() .Select(t => new OfficerTrackModel { officer = t.officer, org = t.org, track = t.track }); return(items); }