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); }
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); }