public IEnumerable <AttendanceModel> Page(string pattern, int page, int size, out int count) { var officerHandler = new OfficerHandle(Repository); var atdHandler = new OfficerAttendanceHandle(Repository); var orgHandler = new OrganizationHandle(Repository); var noDel = (short)DeleteStatus.No; var query = from atd in atdHandler.All(null) join ocr in officerHandler.All(t => t.IsDel == noDel) on atd.OfficerId equals ocr.Id join org in orgHandler.All(t => t.IsDel == noDel) on ocr.OrgId equals org.Id select new { officer = ocr, attendance = atd, 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.attendance.STime).Skip(skipCount).Take(size).ToArray() .Select(t => new AttendanceModel { attendance = t.attendance, officer = t.officer, org = t.org }); return(items); }
public IEnumerable <OfficerAttendanceQueryModel> AttendanceSelect(string pattern, DateTime stime, DateTime etime) { var ocrHandler = new OfficerHandle(Repository); var orgHandler = new OrganizationHandle(Repository); var ptHandler = new PoliceTypeHandle(Repository); var atdHandler = new OfficerAttendanceHandle(Repository); var noDel = (short)DeleteStatus.No; var query = from atd in atdHandler.All(null) join ocr in ocrHandler.All(t => t.IsDel == noDel) on atd.OfficerId equals ocr.Id join org in orgHandler.All(t => t.IsDel == noDel) on ocr.OrgId equals org.Id join ptp in ptHandler.All(t => t.IsDel == noDel) on ocr.PtId equals ptp.Id select new { atd = atd, ocr = ocr, org = org, ptp = ptp }; if (!string.IsNullOrWhiteSpace(pattern)) { query = query.Where(t => t.ocr.Name.Contains(pattern) || t.ocr.IdentyCode.Contains(pattern)); } if (!User.IsSupperAdministrator) { var orgId = User.Organization.Id; query = query.Where(t => t.org.Id == orgId); } var items = query.OrderBy(t => t.ocr.Id).OrderByDescending(t => t.atd.STime).ToArray(); if (0 == items.Count()) { return(new OfficerAttendanceQueryModel[0]); } var sttime = items.Select(t => t.atd.STime).Min(); var ettime = DateTime.Now.ToUnixTime(); if (!items.Any(t => t.atd.ETime == 0L)) { ettime = items.Select(t => t.atd.ETime).Max(); } var ids = items.Select(t => t.atd.OfficerId).Distinct().ToArray(); var tracks = OfficerTracks(sttime, ettime, ids); var data = items.Select(t => { var m = new OfficerAttendanceQueryModel { atd = t.atd, officer = t.ocr, org = t.org, ptp = t.ptp }; var sdtime = t.atd.STime; var edtime = ettime; if (t.atd.ETime != 0L) { edtime = t.atd.ETime; } m.tracks = tracks.Where(x => x.track.OfficerId == t.atd.OfficerId && x.track.UpTime >= sdtime && x.track.UpTime <= edtime); return(m); }); return(data); }