예제 #1
0
        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);
        }
예제 #2
0
        public IEnumerable <StationModel> Page(string orgId, string siteId, int page, int size, out int count)
        {
            var staHandler = new StationHandle(Repository);
            var orgHandler = new OrganizationHandle(Repository);
            var noDel      = (short)DeleteStatus.No;
            var query      =
                from sta in staHandler.All(t => t.IsDel == noDel)
                join orgitem in orgHandler.All(t => t.IsDel == noDel) on sta.OrgId equals orgitem.Id into orgs
                from org in orgs.DefaultIfEmpty(new Organization {
            })
                select new { sta = sta, org = org };

            if (!string.IsNullOrWhiteSpace(siteId))
            {
                query = query.Where(t => t.sta.SiteId.Contains(siteId));
            }

            if (string.IsNullOrWhiteSpace(orgId) && !User.IsSupperAdministrator)
            {
                orgId = User.Organization.Id;
            }

            if (!string.IsNullOrEmpty(orgId))
            {
                query = query.Where(t => t.sta.OrgId == orgId);
            }

            count = query.Count();
            var skipCount = (page - 1) * size;
            var items     = query.Skip(skipCount).Take(size).ToArray()
                            .Select(t => new StationModel
            {
                org     = t.org,
                station = t.sta
            });

            return(items);
        }
예제 #3
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)
            {
            }
        }
예제 #4
0
        // 矩形选择
        public IEnumerable <OfficerDispatchQueryModel> RectangleSelect(double x1, double y1, double x2, double y2)
        {
            var lcHandler  = new OfficerLocationHandle(Repository);
            var ocHandler  = new OfficerHandle(Repository);
            var orgHandler = new OrganizationHandle(Repository);
            var ptHandler  = new PoliceTypeHandle(Repository);
            var stHandler  = new StationHandle(Repository);

            var noDel = (short)DeleteStatus.No;
            var query =
                from lc in lcHandler.All(null)
                join oc in ocHandler.All(t => t.IsDel == noDel) on lc.OfficerId equals oc.Id
                join org in orgHandler.All(t => t.IsDel == noDel) on oc.OrgId equals org.Id
                join ptp in ptHandler.All(t => t.IsDel == noDel) on oc.PtId equals ptp.Id
                join sts in stHandler.All(t => t.IsDel == noDel) on lc.SiteId equals sts.SiteId into stas
                from st in stas.DefaultIfEmpty(new Station {
            })
                select new { location = lc, officer = oc, org = org, ptp = ptp, station = st };

            // 此处进一步查询
            if (!User.IsSupperAdministrator)
            {
                var orgId = User.Organization.Id;
                query = query.Where(t => t.org.Id == orgId);
            }

            var xmin = x1;
            var xmax = x2;

            if (x1 > x2)
            {
                xmax = x1;
                xmin = x2;
            }

            var ymin = y1;
            var ymax = y2;

            if (y1 > y2)
            {
                ymin = y2;
                ymax = y1;
            }
            var items = query.OrderByDescending(t => t.location.UpTime).ToArray()
                        .Select(t => {
                OfficerDispatchQueryModel m = null;
                if (string.IsNullOrWhiteSpace(t.station.SiteId) ||
                    (t.station.Lon >= xmin && t.station.Lon <= xmax && t.station.Lat >= ymin && t.station.Lat <= ymax)
                    )
                {
                    m = new OfficerDispatchQueryModel
                    {
                        location = t.location,
                        officer  = t.officer,
                        org      = t.org,
                        ptp      = t.ptp,
                        station  = t.station
                    };
                }
                return(m);
            }).Where(t => t != null).ToArray();

            return(items);
        }
예제 #5
0
 public StationModule(UserInfo user) : base(user)
 {
     Handler = new StationHandle(Repository);
 }