/// <summary> /// Add Data To Cache /// </summary> private DataTable AddDataToCache() { var userData = UserData; var cacheKey1 = WebUtility.GetCacheKeyName(userData, "dev-alarm-source1"); var cacheKey2 = WebUtility.GetCacheKeyName(userData, "dev-alarm-source2"); var cacheKey3 = WebUtility.GetCacheKeyName(userData, "dev-alarm-source3"); HttpRuntime.Cache.Remove(cacheKey1); HttpRuntime.Cache.Remove(cacheKey2); HttpRuntime.Cache.Remove(cacheKey3); if (String.IsNullOrEmpty(CountItemField.RawValue.ToString())) { return(null); } var values = WebUtility.StringSplit(CountItemField.RawValue.ToString()); var beginTime = Convert.ToDateTime(BeginFromDate.Text); var endTime = Convert.ToDateTime(BeginToDate.Text); var minInterval = MinNumberField.Number; var maxInterval = MaxNumberField.Number; if (maxInterval == 0) { maxInterval = int.MaxValue; } var levels = new Dictionary <Int32, String>(); var devtyps = new Dictionary <Int32, String>(); var almIds = new Dictionary <Int32, String>(); var prdors = new List <String>(); if (AlarmLevelMultiCombo.SelectedItems.Count == 0) { return(null); } for (int i = 0; i < AlarmLevelMultiCombo.SelectedItems.Count; i++) { var key = Int32.Parse(AlarmLevelMultiCombo.SelectedItems[i].Value); var value = AlarmLevelMultiCombo.SelectedItems[i].Text; levels[key] = value; } if (DevTypeMultiCombo.SelectedItems.Count > 0) { for (int i = 0; i < DevTypeMultiCombo.SelectedItems.Count; i++) { var key = Int32.Parse(DevTypeMultiCombo.SelectedItems[i].Value); var value = DevTypeMultiCombo.SelectedItems[i].Text; devtyps[key] = value; } } var text1 = AlarmNameDropDownField.Text.Trim(); if (text1 != "") { var names = WebUtility.StringSplit(text1); for (int i = 0; i < names.Length; i++) { almIds[Int32.Parse(names[i])] = null; } } var text2 = ProductorText.Text.Trim(); if (text2 != "") { prdors.AddRange(WebUtility.StringSplit(text2)); } var colcnt = MainGridPanel.ColumnModel.Columns.Count; var countType = CountTypeComboBox.SelectedItem.Value; var condition = new List <GroupTreeInfo>(); var source1 = CreateCustomizeTable(colcnt); var source2 = new Dictionary <String, List <AlarmInfo> >(); var source3 = new Dictionary <String, List <DeviceInfo> >(); var total1 = new List <AlarmInfo>(); var total2 = new List <DeviceInfo>(); if (countType.Equals("0")) { #region Lsc foreach (var v in values) { var ids = WebUtility.ItemSplit(v); if (ids.Length != 5) { continue; } var lscId = Int32.Parse(ids[0]); var groupId = Int32.Parse(ids[1]); var nodeId = Int32.Parse(ids[2]); var nodeType = Int32.Parse(ids[3]); var remark = ids[4]; var enmNodeType = Enum.IsDefined(typeof(EnmNodeType), nodeType) ? (EnmNodeType)nodeType : EnmNodeType.Null; if (enmNodeType == EnmNodeType.LSC) { condition.Add(new GroupTreeInfo() { LscID = lscId, GroupID = groupId, NodeID = nodeId, NodeType = enmNodeType, Remark = remark }); } } var ls = from c in condition group c by new { c.LscID } into g select new { g.Key.LscID }; foreach (var l in ls) { var lscUser = userData.LscUsers.Find(lu => { return(lu.LscID == l.LscID); }); if (lscUser == null) { continue; } var alarms = new BAlarm().GetHisAlarms(lscUser.LscID, lscUser.LscName, userData.StandardProtocol, lscUser.Group.GroupNodes, beginTime, endTime).FindAll(a => { var interval = a.EndTime.Subtract(a.StartTime).TotalMinutes; return(interval >= minInterval && interval <= maxInterval); }); if (levels.Count > 0) { alarms = alarms.FindAll(a => levels.ContainsKey((Int32)a.AlarmLevel)); } if (almIds.Count > 0) { alarms = alarms.FindAll(a => almIds.ContainsKey(a.AlarmID)); } var devices = new BOther().GetDevices(lscUser.LscID, lscUser.Group.GroupID); if (devtyps.Count > 0) { devices = devices.FindAll(d => devtyps.ContainsKey(d.DevTypeID)); } if (prdors.Count > 0) { devices = devices.FindAll(d => WebUtility.Contain(d.ProdName, prdors.ToArray())); } var temp1 = from alm in alarms join dev in devices on WebUtility.GetDevID(alm.NodeID) equals dev.DevID select new { Device = dev, Alarm = alm }; var temp2 = (from t in temp1 group t by new { t.Device.DevTypeID, t.Device.ProdID, t.Alarm.AlarmID } into g select new { DevTypeID = g.Key.DevTypeID, DevTypeName = g.First().Device.DevTypeName, ProdID = g.Key.ProdID, ProdName = g.First().Device.ProdName, AlarmID = g.Key.AlarmID, AlarmName = g.First().Alarm.AlarmName, Alarms = g.Select(a => a.Alarm).ToList(), Devices = g.Select(a => a.Device).Distinct().ToList() }).ToList(); for (var i = 0; i < temp2.Count; i++) { var dr = source1.NewRow(); dr[1] = lscUser.LscName; dr[2] = temp2[i].DevTypeName; dr[3] = temp2[i].ProdName; dr[4] = temp2[i].AlarmName; dr[5] = temp2[i].Alarms.Count; dr[6] = temp2[i].Devices.Count; dr[7] = WebUtility.GetDateTimeFromSec(temp2[i].Alarms.Sum(a => a.EndTime.Subtract(a.StartTime).TotalSeconds)); source2[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[5].ColumnName)] = temp2[i].Alarms; source3[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[6].ColumnName)] = temp2[i].Devices; source1.Rows.Add(dr); total1.AddRange(temp2[i].Alarms); total2.AddRange(temp2[i].Devices); } } if (total1.Count > 0) { var dr = source1.NewRow(); dr[1] = "总计"; dr[2] = "--"; dr[3] = "--"; dr[4] = "--"; dr[5] = total1.Count; dr[6] = total2.Count; dr[7] = WebUtility.GetDateTimeFromSec(total1.Sum(a => a.EndTime.Subtract(a.StartTime).TotalSeconds)); source2[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[5].ColumnName)] = total1; source3[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[6].ColumnName)] = total2; source1.Rows.Add(dr); } #endregion } else if (countType.Equals("1")) { #region Area=2 foreach (var v in values) { var ids = WebUtility.ItemSplit(v); if (ids.Length != 5) { continue; } var lscId = Int32.Parse(ids[0]); var groupId = Int32.Parse(ids[1]); var nodeId = Int32.Parse(ids[2]); var nodeType = Int32.Parse(ids[3]); var remark = ids[4]; var enmNodeType = Enum.IsDefined(typeof(EnmNodeType), nodeType) ? (EnmNodeType)nodeType : EnmNodeType.Null; if (enmNodeType == EnmNodeType.Area && remark.Equals("2")) { condition.Add(new GroupTreeInfo() { LscID = lscId, GroupID = groupId, NodeID = nodeId, NodeType = enmNodeType, Remark = remark }); } } var ls = from c in condition group c by new { c.LscID } into g select new { g.Key.LscID }; foreach (var l in ls) { var lscUser = userData.LscUsers.Find(lu => { return(lu.LscID == l.LscID); }); if (lscUser == null) { continue; } var alarms = new BAlarm().GetHisAlarms(lscUser.LscID, lscUser.LscName, userData.StandardProtocol, lscUser.Group.GroupNodes, beginTime, endTime).FindAll(a => { var interval = a.EndTime.Subtract(a.StartTime).TotalMinutes; return(interval >= minInterval && interval <= maxInterval); }); if (levels.Count > 0) { alarms = alarms.FindAll(a => levels.ContainsKey((Int32)a.AlarmLevel)); } if (almIds.Count > 0) { alarms = alarms.FindAll(a => almIds.ContainsKey(a.AlarmID)); } var devices = new BOther().GetDevices(lscUser.LscID, lscUser.Group.GroupID); if (devtyps.Count > 0) { devices = devices.FindAll(d => devtyps.ContainsKey(d.DevTypeID)); } if (prdors.Count > 0) { devices = devices.FindAll(d => WebUtility.Contain(d.ProdName, prdors.ToArray())); } var temp1 = from alm in alarms join dev in devices on WebUtility.GetDevID(alm.NodeID) equals dev.DevID select new { Device = dev, Alarm = alm }; var areas = from a in new BOther().GetAreas(lscUser.LscID, lscUser.Group.GroupID, 2) join c in condition on new { a.LscID, a.Area2ID } equals new { c.LscID, Area2ID = c.NodeID } select a; foreach (var area in areas) { var temp2 = temp1.Where(a => a.Device.Area2ID == area.Area2ID); if (temp2.Any()) { var temp3 = (from t in temp2 group t by new { t.Device.DevTypeID, t.Device.ProdID, t.Alarm.AlarmID } into g select new { DevTypeID = g.Key.DevTypeID, DevTypeName = g.First().Device.DevTypeName, ProdID = g.Key.ProdID, ProdName = g.First().Device.ProdName, AlarmID = g.Key.AlarmID, AlarmName = g.First().Alarm.AlarmName, Alarms = g.Select(a => a.Alarm).ToList(), Devices = g.Select(a => a.Device).Distinct().ToList() }).ToList(); for (var i = 0; i < temp3.Count; i++) { var dr = source1.NewRow(); dr[1] = area.LscName; dr[2] = area.Area2Name; dr[3] = temp3[i].DevTypeName; dr[4] = temp3[i].ProdName; dr[5] = temp3[i].AlarmName; dr[6] = temp3[i].Alarms.Count; dr[7] = temp3[i].Devices.Count; dr[8] = WebUtility.GetDateTimeFromSec(temp3[i].Alarms.Sum(a => a.EndTime.Subtract(a.StartTime).TotalSeconds)); source2[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[6].ColumnName)] = temp3[i].Alarms; source3[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[7].ColumnName)] = temp3[i].Devices; source1.Rows.Add(dr); total1.AddRange(temp3[i].Alarms); total2.AddRange(temp3[i].Devices); } } } } if (total1.Count > 0) { var dr = source1.NewRow(); dr[1] = "总计"; dr[2] = "--"; dr[3] = "--"; dr[4] = "--"; dr[5] = "--"; dr[6] = total1.Count; dr[7] = total2.Count; dr[8] = WebUtility.GetDateTimeFromSec(total1.Sum(a => a.EndTime.Subtract(a.StartTime).TotalSeconds)); source2[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[6].ColumnName)] = total1; source3[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[7].ColumnName)] = total2; source1.Rows.Add(dr); } #endregion } else if (countType.Equals("2")) { #region Area=3 foreach (var v in values) { var ids = WebUtility.ItemSplit(v); if (ids.Length != 5) { continue; } var lscId = Int32.Parse(ids[0]); var groupId = Int32.Parse(ids[1]); var nodeId = Int32.Parse(ids[2]); var nodeType = Int32.Parse(ids[3]); var remark = ids[4]; var enmNodeType = Enum.IsDefined(typeof(EnmNodeType), nodeType) ? (EnmNodeType)nodeType : EnmNodeType.Null; if (enmNodeType == EnmNodeType.Area && remark.Equals("3")) { condition.Add(new GroupTreeInfo() { LscID = lscId, GroupID = groupId, NodeID = nodeId, NodeType = enmNodeType, Remark = remark }); } } var ls = from c in condition group c by new { c.LscID } into g select new { g.Key.LscID }; foreach (var l in ls) { var lscUser = userData.LscUsers.Find(lu => { return(lu.LscID == l.LscID); }); if (lscUser == null) { continue; } var alarms = new BAlarm().GetHisAlarms(lscUser.LscID, lscUser.LscName, userData.StandardProtocol, lscUser.Group.GroupNodes, beginTime, endTime).FindAll(a => { var interval = a.EndTime.Subtract(a.StartTime).TotalMinutes; return(interval >= minInterval && interval <= maxInterval); }); if (levels.Count > 0) { alarms = alarms.FindAll(a => levels.ContainsKey((Int32)a.AlarmLevel)); } if (almIds.Count > 0) { alarms = alarms.FindAll(a => almIds.ContainsKey(a.AlarmID)); } var devices = new BOther().GetDevices(lscUser.LscID, lscUser.Group.GroupID); if (devtyps.Count > 0) { devices = devices.FindAll(d => devtyps.ContainsKey(d.DevTypeID)); } if (prdors.Count > 0) { devices = devices.FindAll(d => WebUtility.Contain(d.ProdName, prdors.ToArray())); } var temp1 = from alm in alarms join dev in devices on WebUtility.GetDevID(alm.NodeID) equals dev.DevID select new { Device = dev, Alarm = alm }; var areas = from a in new BOther().GetAreas(lscUser.LscID, lscUser.Group.GroupID, 3) join c in condition on new { a.LscID, a.Area3ID } equals new { c.LscID, Area3ID = c.NodeID } select a; foreach (var area in areas) { var temp2 = temp1.Where(a => a.Device.Area3ID == area.Area3ID); if (temp2.Any()) { var temp3 = (from t in temp2 group t by new { t.Device.DevTypeID, t.Device.ProdID, t.Alarm.AlarmID } into g select new { DevTypeID = g.Key.DevTypeID, DevTypeName = g.First().Device.DevTypeName, ProdID = g.Key.ProdID, ProdName = g.First().Device.ProdName, AlarmID = g.Key.AlarmID, AlarmName = g.First().Alarm.AlarmName, Alarms = g.Select(a => a.Alarm).ToList(), Devices = g.Select(a => a.Device).Distinct().ToList() }).ToList(); for (var i = 0; i < temp3.Count; i++) { var dr = source1.NewRow(); dr[1] = area.LscName; dr[2] = area.Area2Name; dr[3] = area.Area3Name; dr[4] = temp3[i].DevTypeName; dr[5] = temp3[i].ProdName; dr[6] = temp3[i].AlarmName; dr[7] = temp3[i].Alarms.Count; dr[8] = temp3[i].Devices.Count; dr[9] = WebUtility.GetDateTimeFromSec(temp3[i].Alarms.Sum(a => a.EndTime.Subtract(a.StartTime).TotalSeconds)); source2[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[7].ColumnName)] = temp3[i].Alarms; source3[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[8].ColumnName)] = temp3[i].Devices; source1.Rows.Add(dr); total1.AddRange(temp3[i].Alarms); total2.AddRange(temp3[i].Devices); } } } } if (total1.Count > 0) { var dr = source1.NewRow(); dr[1] = "总计"; dr[2] = "--"; dr[3] = "--"; dr[4] = "--"; dr[5] = "--"; dr[6] = "--"; dr[7] = total1.Count; dr[8] = total2.Count; dr[9] = WebUtility.GetDateTimeFromSec(total1.Sum(a => a.EndTime.Subtract(a.StartTime).TotalSeconds)); source2[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[7].ColumnName)] = total1; source3[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[8].ColumnName)] = total2; source1.Rows.Add(dr); } #endregion } else if (countType.Equals("3")) { #region Station foreach (var v in values) { var ids = WebUtility.ItemSplit(v); if (ids.Length != 5) { continue; } var lscId = Int32.Parse(ids[0]); var groupId = Int32.Parse(ids[1]); var nodeId = Int32.Parse(ids[2]); var nodeType = Int32.Parse(ids[3]); var remark = ids[4]; var enmNodeType = Enum.IsDefined(typeof(EnmNodeType), nodeType) ? (EnmNodeType)nodeType : EnmNodeType.Null; if (enmNodeType == EnmNodeType.Area && remark.Equals("3")) { condition.Add(new GroupTreeInfo() { LscID = lscId, GroupID = groupId, NodeID = nodeId, NodeType = enmNodeType, Remark = remark }); } } var ls = from c in condition group c by new { c.LscID } into g select new { g.Key.LscID }; foreach (var l in ls) { var lscUser = userData.LscUsers.Find(lu => { return(lu.LscID == l.LscID); }); if (lscUser == null) { continue; } var alarms = new BAlarm().GetHisAlarms(lscUser.LscID, lscUser.LscName, userData.StandardProtocol, lscUser.Group.GroupNodes, beginTime, endTime).FindAll(a => { var interval = a.EndTime.Subtract(a.StartTime).TotalMinutes; return(interval >= minInterval && interval <= maxInterval); }); if (levels.Count > 0) { alarms = alarms.FindAll(a => levels.ContainsKey((Int32)a.AlarmLevel)); } if (almIds.Count > 0) { alarms = alarms.FindAll(a => almIds.ContainsKey(a.AlarmID)); } var devices = new BOther().GetDevices(lscUser.LscID, lscUser.Group.GroupID); if (devtyps.Count > 0) { devices = devices.FindAll(d => devtyps.ContainsKey(d.DevTypeID)); } if (prdors.Count > 0) { devices = devices.FindAll(d => WebUtility.Contain(d.ProdName, prdors.ToArray())); } var temp1 = from alm in alarms join dev in devices on WebUtility.GetDevID(alm.NodeID) equals dev.DevID select new { Device = dev, Alarm = alm }; var stations = from c in condition join s in new BOther().GetStations(lscUser.LscID, lscUser.Group.GroupID) on new { c.LscID, Area3ID = c.NodeID } equals new { s.LscID, s.Area3ID } select s; foreach (var sta in stations) { var temp2 = temp1.Where(a => a.Device.StaID == sta.StaID); if (temp2.Any()) { var temp3 = (from t in temp2 group t by new { t.Device.DevTypeID, t.Device.ProdID, t.Alarm.AlarmID } into g select new { DevTypeID = g.Key.DevTypeID, DevTypeName = g.First().Device.DevTypeName, ProdID = g.Key.ProdID, ProdName = g.First().Device.ProdName, AlarmID = g.Key.AlarmID, AlarmName = g.First().Alarm.AlarmName, Alarms = g.Select(a => a.Alarm).ToList(), Devices = g.Select(a => a.Device).Distinct().ToList() }).ToList(); for (var i = 0; i < temp3.Count; i++) { var dr = source1.NewRow(); dr[1] = sta.LscName; dr[2] = sta.Area2Name; dr[3] = sta.Area3Name; dr[4] = sta.StaName; dr[5] = temp3[i].DevTypeName; dr[6] = temp3[i].ProdName; dr[7] = temp3[i].AlarmName; dr[8] = temp3[i].Alarms.Count; dr[9] = temp3[i].Devices.Count; dr[10] = WebUtility.GetDateTimeFromSec(temp3[i].Alarms.Sum(a => a.EndTime.Subtract(a.StartTime).TotalSeconds)); source2[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[8].ColumnName)] = temp3[i].Alarms; source3[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[9].ColumnName)] = temp3[i].Devices; source1.Rows.Add(dr); total1.AddRange(temp3[i].Alarms); total2.AddRange(temp3[i].Devices); } } } } if (total1.Count > 0) { var dr = source1.NewRow(); dr[1] = "总计"; dr[2] = "--"; dr[3] = "--"; dr[4] = "--"; dr[5] = "--"; dr[6] = "--"; dr[7] = "--"; dr[8] = total1.Count; dr[9] = total2.Count; dr[10] = WebUtility.GetDateTimeFromSec(total1.Sum(a => a.EndTime.Subtract(a.StartTime).TotalSeconds)); source2[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[8].ColumnName)] = total1; source3[String.Format("{0}-{1}", source1.Rows.Count, source1.Columns[9].ColumnName)] = total2; source1.Rows.Add(dr); } #endregion } var cacheDuration = Int32.Parse(WebConfigurationManager.AppSettings["DefaultCacheDuration"]); HttpRuntime.Cache.Insert(cacheKey1, source1, null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(cacheDuration), CacheItemPriority.Default, null); HttpRuntime.Cache.Insert(cacheKey2, source2, null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(cacheDuration), CacheItemPriority.Default, null); HttpRuntime.Cache.Insert(cacheKey3, source3, null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(cacheDuration), CacheItemPriority.Default, null); return(source1); }