Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        // 警员出勤模块处理
        //  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)
            {
            }
        }
Ejemplo n.º 3
0
 public AttendanceModule(UserInfo user) : base(user)
 {
     Handler = new OfficerAttendanceHandle(Repository);
 }
Ejemplo n.º 4
0
        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);
        }