Exemple #1
0
        private List <EnergyInfo06> AddDataToCache()
        {
            var userData = UserData;
            var cacheKey = WebUtility.GetCacheKeyName(userData, "energy-006-report");

            HttpRuntime.Cache.Remove(cacheKey);

            if (String.IsNullOrEmpty(RangeField.RawValue.ToString()))
            {
                return(new List <EnergyInfo06>());
            }
            var period     = (EnmPeriod)int.Parse(PeriodField.SelectedItem.Value);
            var startDate  = DateTime.Parse(StartDate.RawText);
            var endDate    = DateTime.Parse(EndDate.RawText).AddSeconds(86399);
            var tstartDate = startDate.AddYears(-1);
            var tendDate   = endDate.AddYears(-1);
            var ranges     = RangeField.RawValue.ToString();
            var auxSet     = new string[] { "NHPMT", "NHPT" };

            var result = new List <EnergyInfo06>();

            if (ranges == "root")
            {
                #region root
                var nodeEntity = new BNode();
                foreach (var lsc in userData.LscUsers)
                {
                    var values = new List <ElecValueInfo>();
                    var nodes  = nodeEntity.GetNodes(lsc.LscID, EnmNodeType.Aic, null, auxSet, null);
                    if (nodes.Count > 0)
                    {
                        values = nodeEntity.GetElecValues(lsc.LscID, startDate, endDate, period);
                    }

                    var valWnodes = from node in nodes
                                    join value in values on node.NodeID equals value.NodeId
                                    select new {
                        Station = node.StaID,
                        Start   = value.Start,
                        End     = value.End,
                        Value   = value.Value,
                        AuxSet  = GetAuxset(auxSet, node.AuxSet)
                    };

                    var valWgrp = from vn in valWnodes
                                  group vn by new { vn.Station, vn.Start, vn.End, vn.AuxSet } into g
                        select new {
                        Station = g.Key.Station,
                        Start   = g.Key.Start,
                        End     = g.Key.End,
                        Value   = g.Sum(v => v.Value),
                        AuxSet  = g.Key.AuxSet
                    };

                    var stations = lsc.Group.GroupNodes.FindAll(gti => gti.NodeType == EnmNodeType.Sta);
                    foreach (var station in stations)
                    {
                        var def = this.GetEntities(station.NodeID.ToString(), station.NodeName, period, startDate, endDate);
                        if (nodes.Count > 0 && values.Count > 0)
                        {
                            var mdetail = valWgrp.Where(m => m.Station == station.NodeID && m.AuxSet == "NHPMT");
                            def.Value = mdetail.Sum(v => v.Value);

                            var tdetail = valWgrp.Where(m => m.Station == station.NodeID && m.AuxSet == "NHPT");
                            def.TValue = tdetail.Sum(v => v.Value);
                        }

                        result.Add(def);
                    }
                }
                #endregion
            }
            else
            {
                var keys = WebUtility.ItemSplit(ranges);
                if (keys.Length != 5)
                {
                    return(result);
                }

                var lscId       = int.Parse(keys[0]);
                var groupId     = int.Parse(keys[1]);
                var nodeId      = int.Parse(keys[2]);
                var nodeType    = int.Parse(keys[3]);
                var remark      = keys[4];
                var enmNodeType = Enum.IsDefined(typeof(EnmNodeType), nodeType) ? (EnmNodeType)nodeType : EnmNodeType.Null;
                if (enmNodeType == EnmNodeType.LSC)
                {
                    #region lsc
                    var lscUser = userData.LscUsers.Find(l => l.LscID == lscId);
                    if (lscUser != null)
                    {
                        var nodeEntity = new BNode();
                        var values     = new List <ElecValueInfo>();
                        var nodes      = nodeEntity.GetNodes(lscUser.LscID, EnmNodeType.Aic, null, auxSet, null);
                        if (nodes.Count > 0)
                        {
                            values = nodeEntity.GetElecValues(lscUser.LscID, startDate, endDate, period);
                        }

                        var valWnodes = from node in nodes
                                        join value in values on node.NodeID equals value.NodeId
                                        select new {
                            Station = node.StaID,
                            Start   = value.Start,
                            End     = value.End,
                            Value   = value.Value,
                            AuxSet  = GetAuxset(auxSet, node.AuxSet)
                        };

                        var valWgrp = from vn in valWnodes
                                      group vn by new { vn.Station, vn.Start, vn.End, vn.AuxSet } into g
                            select new {
                            Station = g.Key.Station,
                            Start   = g.Key.Start,
                            End     = g.Key.End,
                            Value   = g.Sum(v => v.Value),
                            AuxSet  = g.Key.AuxSet
                        };

                        var stations = lscUser.Group.GroupNodes.FindAll(gti => gti.NodeType == EnmNodeType.Sta);
                        foreach (var station in stations)
                        {
                            var def = this.GetEntities(station.NodeID.ToString(), station.NodeName, period, startDate, endDate);
                            if (nodes.Count > 0 && values.Count > 0)
                            {
                                var mdetail = valWgrp.Where(m => m.Station == station.NodeID && m.AuxSet == "NHPMT");
                                def.Value = mdetail.Sum(v => v.Value);

                                var tdetail = valWgrp.Where(m => m.Station == station.NodeID && m.AuxSet == "NHPT");
                                def.TValue = tdetail.Sum(v => v.Value);
                            }

                            result.Add(def);
                        }
                    }
                    #endregion
                }
                else if (enmNodeType == EnmNodeType.Area && remark.Equals("2"))
                {
                    #region area2
                    var lscUser = userData.LscUsers.Find(l => l.LscID == lscId);
                    if (lscUser != null)
                    {
                        var nodeEntity = new BNode();
                        var values     = new List <ElecValueInfo>();
                        var nodes      = nodeEntity.GetNodes(lscUser.LscID, EnmNodeType.Aic, null, auxSet, null);
                        if (nodes.Count > 0)
                        {
                            values = nodeEntity.GetElecValues(lscUser.LscID, startDate, endDate, period);
                        }

                        var valWnodes = from node in nodes
                                        join value in values on node.NodeID equals value.NodeId
                                        select new {
                            Station = node.StaID,
                            Start   = value.Start,
                            End     = value.End,
                            Value   = value.Value,
                            AuxSet  = GetAuxset(auxSet, node.AuxSet)
                        };

                        var valWgrp = from vn in valWnodes
                                      group vn by new { vn.Station, vn.Start, vn.End, vn.AuxSet } into g
                            select new {
                            Station = g.Key.Station,
                            Start   = g.Key.Start,
                            End     = g.Key.End,
                            Value   = g.Sum(v => v.Value),
                            AuxSet  = g.Key.AuxSet
                        };

                        var allStations = new BOther().GetStations(lscUser.LscID, lscUser.Group.GroupID);
                        var stations    = allStations.FindAll(s => s.Area2ID == nodeId);
                        foreach (var station in stations)
                        {
                            var def = this.GetEntities(station.StaID.ToString(), station.StaName, period, startDate, endDate);
                            if (nodes.Count > 0 && values.Count > 0)
                            {
                                var mdetail = valWgrp.Where(m => m.Station == station.StaID && m.AuxSet == "NHPMT");
                                def.Value = mdetail.Sum(v => v.Value);

                                var tdetail = valWgrp.Where(m => m.Station == station.StaID && m.AuxSet == "NHPT");
                                def.TValue = tdetail.Sum(v => v.Value);
                            }

                            result.Add(def);
                        }
                    }
                    #endregion
                }
                else if (enmNodeType == EnmNodeType.Area && remark.Equals("3"))
                {
                    #region area3
                    var lscUser = userData.LscUsers.Find(l => l.LscID == lscId);
                    if (lscUser != null)
                    {
                        var nodeEntity = new BNode();
                        var values     = new List <ElecValueInfo>();
                        var nodes      = nodeEntity.GetNodes(lscUser.LscID, EnmNodeType.Aic, null, auxSet, null);
                        if (nodes.Count > 0)
                        {
                            values = nodeEntity.GetElecValues(lscUser.LscID, startDate, endDate, period);
                        }

                        var valWnodes = from node in nodes
                                        join value in values on node.NodeID equals value.NodeId
                                        select new {
                            Station = node.StaID,
                            Start   = value.Start,
                            End     = value.End,
                            Value   = value.Value,
                            AuxSet  = GetAuxset(auxSet, node.AuxSet)
                        };

                        var valWgrp = from vn in valWnodes
                                      group vn by new { vn.Station, vn.Start, vn.End, vn.AuxSet } into g
                            select new {
                            Station = g.Key.Station,
                            Start   = g.Key.Start,
                            End     = g.Key.End,
                            Value   = g.Sum(v => v.Value),
                            AuxSet  = g.Key.AuxSet
                        };

                        var stations = lscUser.Group.GroupNodes.FindAll(gti => gti.NodeType == EnmNodeType.Sta && gti.LastNodeID == nodeId);
                        foreach (var station in stations)
                        {
                            var def = this.GetEntities(station.NodeID.ToString(), station.NodeName, period, startDate, endDate);
                            if (nodes.Count > 0 && values.Count > 0)
                            {
                                var mdetail = valWgrp.Where(m => m.Station == station.NodeID && m.AuxSet == "NHPMT");
                                def.Value = mdetail.Sum(v => v.Value);

                                var tdetail = valWgrp.Where(m => m.Station == station.NodeID && m.AuxSet == "NHPT");
                                def.TValue = tdetail.Sum(v => v.Value);
                            }

                            result.Add(def);
                        }
                    }
                    #endregion
                }
            }

            #region total
            if (result.Count > 0)
            {
                var def = this.GetEntities("TOTAL", "总计", period, startDate, endDate);
                def.Value  = result.Sum(v => v.Value);
                def.TValue = result.Sum(v => v.TValue);
                result.Add(def);
            }
            #endregion

            var cacheDuration = Int32.Parse(WebConfigurationManager.AppSettings["DefaultCacheDuration"]);
            HttpRuntime.Cache.Insert(cacheKey, result, null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(cacheDuration), CacheItemPriority.Default, null);
            return(result);
        }
        /// <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);
        }
Exemple #3
0
        /// <summary>
        /// Add Data To Cache
        /// </summary>
        private List <DevLoadPageEntity> AddDataToCache()
        {
            var userData = UserData;
            var cacheKey = WebUtility.GetCacheKeyName(userData, "dev-load-report");

            HttpRuntime.Cache.Remove(cacheKey);

            if (LscsComboBox.SelectedItem.Value == "")
            {
                return(null);
            }
            var ids = WebUtility.ItemSplit(LscsComboBox.SelectedItem.Value);

            if (ids.Length != 2)
            {
                return(null);
            }
            var lscId   = Int32.Parse(ids[0]);
            var groupId = Int32.Parse(ids[1]);
            var lsc     = new BLsc().GetLsc(lscId);

            if (lsc == null)
            {
                WebUtility.ShowMessage(EnmErrType.Warning, "无法获取Lsc信息");
                return(null);
            }

            var fromTime = DateTime.Parse(BeginDate.Text);
            var toTime   = DateTime.Parse(EndDate.Text);

            var devTypes = new Dictionary <Int32, String>();

            foreach (var dt in DevTypeMultiCombo.SelectedItems)
            {
                devTypes[Int32.Parse(dt.Value)] = dt.Text;
            }
            if (devTypes.Count == 0)
            {
                return(null);
            }

            var devices = new BOther().GetDevices(lsc.LscID, groupId);

            if (Area2ComboBox.SelectedIndex > 0)
            {
                var area2Id = Int32.Parse(Area2ComboBox.SelectedItem.Value);
                devices = devices.FindAll(s => s.Area2ID == area2Id);
            }
            if (Area3ComboBox.SelectedIndex > 0)
            {
                var area3Id = Int32.Parse(Area3ComboBox.SelectedItem.Value);
                devices = devices.FindAll(s => s.Area3ID == area3Id);
            }
            if (StaComboBox.SelectedIndex > 0)
            {
                var staId = Int32.Parse(StaComboBox.SelectedItem.Value);
                devices = devices.FindAll(s => s.StaID == staId);
            }
            if (devTypes.Count > 0)
            {
                devices = devices.FindAll(s => devTypes.ContainsKey(s.DevTypeID));
            }

            var connectionString = WebUtility.CreateLscConnectionString(lsc);
            var sdevs            = new BOther().GetSubDev(lsc.LscID, lsc.LscName, connectionString);
            var values           = new BNode().GetMaxHisAIV(lsc.LscID, fromTime, toTime);

            var temp1 = from sd in sdevs
                        join v in values on sd.AicID equals v.NodeID
                        select new {
                SubDev = sd,
                v.Value
            };

            var result = (from dev in devices
                          join t1 in temp1 on dev.DevID equals t1.SubDev.DevID into lt
                          from dt in lt.DefaultIfEmpty()
                          select new DevLoadPageEntity {
                Device = dev,
                SubDev = dt != null ? dt.SubDev : null,
                Value = dt != null ? dt.Value : 0
            }).ToList();


            var cacheDuration = Int32.Parse(WebConfigurationManager.AppSettings["DefaultCacheDuration"]);

            HttpRuntime.Cache.Insert(cacheKey, result, null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(cacheDuration), CacheItemPriority.Default, null);
            return(result);
        }