Ejemplo n.º 1
0
        private List <Alarm> RequestHisAlarms(int gid, int node, int type, int[] level, DateTime startDate, DateTime endDate)
        {
            endDate = endDate.AddSeconds(86399);
            var result = new List <Alarm>();

            if (node == -1)
            {
                #region root
                result = _alarmService.GetHisAlarms(startDate, endDate);
                if (level != null && level.Length > 0)
                {
                    result = result.FindAll(a => level.Contains((int)a.AlarmLevel));
                }
                #endregion
            }
            else
            {
                var nodeType = Enum.IsDefined(typeof(EnmScType), type) ? (EnmScType)type : EnmScType.None;
                if (nodeType == EnmScType.Area)
                {
                    #region area organization
                    var areas   = _areaService.GetAreas(gid);
                    var current = areas.Find(a => a.Id == node);
                    if (current == null)
                    {
                        return(result);
                    }

                    var children = new List <Area>();
                    children.Add(current);
                    GetChildArea(areas, current.Id, children);

                    var matchs = children.Select(c => c.Name);
                    result = _alarmService.GetHisAlarms(startDate, endDate).FindAll(a => matchs.Contains(a.AreaName));
                    if (level != null && level.Length > 0)
                    {
                        result = result.FindAll(a => level.Contains((int)a.AlarmLevel));
                    }
                    #endregion
                }
                else if (nodeType == EnmScType.Station)
                {
                    #region station organization
                    var station = _stationService.GetStation(node);
                    if (station == null)
                    {
                        return(result);
                    }

                    result = _alarmService.GetHisAlarms(startDate, endDate).FindAll(a => a.StationName == station.Name);
                    if (level != null && level.Length > 0)
                    {
                        result = result.FindAll(a => level.Contains((int)a.AlarmLevel));
                    }
                    #endregion
                }
                else if (nodeType == EnmScType.Device)
                {
                    #region device organization
                    var device = _deviceService.GetDevice(node);
                    if (device == null)
                    {
                        return(result);
                    }

                    result = _alarmService.GetHisAlarms(startDate, endDate).FindAll(a => a.DeviceId == device.Id);
                    if (level != null && level.Length > 0)
                    {
                        result = result.FindAll(a => level.Contains((int)a.AlarmLevel));
                    }
                    #endregion
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        private List <Alarm> GetHisAlarms(string node, int[] stationtypes, int[] devicetypes, int[] alarmlevels, DateTime startdate, DateTime enddate, double interval)
        {
            enddate = enddate.AddSeconds(86399);
            var result = new List <Alarm>();

            if (!string.IsNullOrWhiteSpace(node))
            {
                var gid = Common.GroupId;
                if (node == "root")
                {
                    #region root
                    var devices = _deviceService.GetAllDevices(gid);
                    if (devicetypes != null && devicetypes.Length > 0)
                    {
                        devices = devices.FindAll(d => devicetypes.Contains(d.DeviceType));
                    }

                    var stations = _stationService.GetStations(gid);
                    if (stationtypes != null && stationtypes.Length > 0)
                    {
                        stations = stations.FindAll(s => stationtypes.Contains(s.StationType));
                    }

                    var alarms = _alarmService.GetHisAlarms(startdate, enddate);
                    if (alarmlevels != null && alarmlevels.Length > 0)
                    {
                        alarms = alarms.FindAll(a => alarmlevels.Contains((int)a.AlarmLevel));
                    }

                    if (interval > 0)
                    {
                        interval = interval * 60;
                        alarms   = alarms.FindAll(a => a.EndTime.Subtract(a.StartTime).TotalSeconds >= interval);
                    }

                    var models = from alarm in alarms
                                 join device in devices on alarm.DeviceId equals device.Id
                                 join station in stations on device.PId equals station.Id
                                 select alarm;

                    result.AddRange(models);
                    #endregion
                }
                else
                {
                    var keys = Common.SplitKeys(node);
                    if (keys.Length == 2)
                    {
                        var type     = int.Parse(keys[0]);
                        var id       = int.Parse(keys[1]);
                        var nodeType = Enum.IsDefined(typeof(EnmScType), type) ? (EnmScType)type : EnmScType.None;
                        if (nodeType == EnmScType.Area)
                        {
                            #region area organization
                            var areas   = _areaService.GetAreas(gid);
                            var current = areas.Find(a => a.Id == id);
                            if (current == null)
                            {
                                return(result);
                            }

                            var children = new List <Area>();
                            children.Add(current);
                            GetChildArea(areas, current.Id, children);

                            var devices = _deviceService.GetAllDevices(gid);
                            if (devicetypes != null && devicetypes.Length > 0)
                            {
                                devices = devices.FindAll(d => devicetypes.Contains(d.DeviceType));
                            }

                            var matchs   = children.Select(c => c.Id);
                            var stations = _stationService.GetStations(gid).FindAll(s => matchs.Contains(s.AreaId));
                            if (stationtypes != null && stationtypes.Length > 0)
                            {
                                stations = stations.FindAll(s => stationtypes.Contains(s.StationType));
                            }

                            var alarms = _alarmService.GetHisAlarms(startdate, enddate);
                            if (alarmlevels != null && alarmlevels.Length > 0)
                            {
                                alarms = alarms.FindAll(a => alarmlevels.Contains((int)a.AlarmLevel));
                            }

                            if (interval > 0)
                            {
                                interval = interval * 60;
                                alarms   = alarms.FindAll(a => a.EndTime.Subtract(a.StartTime).TotalSeconds >= interval);
                            }

                            var models = from alarm in alarms
                                         join device in devices on alarm.DeviceId equals device.Id
                                         join station in stations on device.PId equals station.Id
                                         select alarm;

                            result.AddRange(models);
                            #endregion
                        }
                        else if (nodeType == EnmScType.Station)
                        {
                            #region station organization
                            var station = _stationService.GetStation(id);
                            if (station == null)
                            {
                                return(result);
                            }
                            if (stationtypes != null && stationtypes.Length > 0 && !stationtypes.Contains(station.StationType))
                            {
                                return(result);
                            }

                            var devices = _deviceService.GetDevices(id);
                            if (devicetypes != null && devicetypes.Length > 0)
                            {
                                devices = devices.FindAll(d => devicetypes.Contains(d.DeviceType));
                            }

                            var alarms = _alarmService.GetHisAlarms(startdate, enddate);
                            if (alarmlevels != null && alarmlevels.Length > 0)
                            {
                                alarms = alarms.FindAll(a => alarmlevels.Contains((int)a.AlarmLevel));
                            }

                            if (interval > 0)
                            {
                                interval = interval * 60;
                                alarms   = alarms.FindAll(a => a.EndTime.Subtract(a.StartTime).TotalSeconds >= interval);
                            }

                            var models = from alarm in alarms
                                         join device in devices on alarm.DeviceId equals device.Id
                                         select alarm;

                            result.AddRange(models);
                            #endregion
                        }
                        else if (nodeType == EnmScType.Device)
                        {
                            #region device organization
                            var device = _deviceService.GetDevice(id);
                            if (device == null)
                            {
                                return(result);
                            }
                            if (devicetypes != null && devicetypes.Length > 0 && !devicetypes.Contains(device.DeviceType))
                            {
                                return(result);
                            }

                            var station = _stationService.GetStation(device.PId);
                            if (station == null)
                            {
                                return(result);
                            }
                            if (stationtypes != null && stationtypes.Length > 0 && !stationtypes.Contains(station.StationType))
                            {
                                return(result);
                            }

                            var alarms = _alarmService.GetHisAlarms(startdate, enddate).FindAll(a => a.DeviceId == device.Id);
                            if (alarmlevels != null && alarmlevels.Length > 0)
                            {
                                alarms = alarms.FindAll(a => alarmlevels.Contains((int)a.AlarmLevel));
                            }

                            if (interval > 0)
                            {
                                interval = interval * 60;
                                alarms   = alarms.FindAll(a => a.EndTime.Subtract(a.StartTime).TotalSeconds >= interval);
                            }

                            result.AddRange(alarms);
                            #endregion
                        }
                    }
                }
            }

            return(result);
        }