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); }
// 警员出勤模块处理 // 1,查询当前警员所在组织机构的内部基站 // 2,查询当前警员当天最近一次警员出勤情况,并做进一步处理 private void ExecuteOfficerAttendance(UpLoadDataPackage data, TagBindModel bdm) { var noDel = (short)DeleteStatus.No; var orgId = bdm.Officer.OrgId; var siteId = data.SiteId; var officerId = bdm.Officer.Id; // 查询内部考勤基站是否存在 var siteHandler = new StationHandle(Repository); var site = siteHandler.First(t => t.IsDel == noDel && t.OrgId == orgId && t.SiteId == siteId); // 查询当天最近一次未完成的考勤记录 var today = DateTime.Now.Date.ToUnixTime(); var atdHandler = new OfficerAttendanceHandle(Repository); var atd = atdHandler.First(t => t.OfficerId == officerId && t.STime >= today && t.ETime == 0L); // 离开内部考勤基站,签出 if (null != site && data.IsOut && atd != null && atd.ETime == 0L) { atd.ETime = data.TTime; atd.TimeLength = atd.ETime - atd.STime; atdHandler.Modify(atd); } // 警员进入内部考勤基站,签到 if (null != site && !data.IsOut && atd == null) { atd = new OfficerAttendance { OfficerId = officerId, STime = data.TTime, TimeLength = 0L, ETime = 0L }; atdHandler.Add(atd); } // 重复签到 if (null != site && !data.IsOut && atd != null && atd.ETime != 0L) { } }
public AttendanceModule(UserInfo user) : base(user) { Handler = new OfficerAttendanceHandle(Repository); }
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); }