public static void SetAlarm(string myKeyId, Model_SystemAlarm mySystemAlarm)
 {
     if (_SystemAlarmBuffer.ContainsKey(myKeyId))
     {
         int m_CurrentAlarmCount = _SystemAlarmBuffer[myKeyId].AlarmCount;
         if (m_CurrentAlarmCount >= _MaxAlarmCount)
         {
             _SystemAlarmBuffer[myKeyId].AlarmCount = _MaxAlarmCount;
             _SystemAlarmBuffer[myKeyId].UpdateStatus = true;
         }
         else
         {
             _SystemAlarmBuffer[myKeyId].AlarmCount = _SystemAlarmBuffer[myKeyId].AlarmCount + 1;
             _SystemAlarmBuffer[myKeyId].UpdateStatus = true;
         }
     }
     else
     {
         _SystemAlarmBuffer.Add(myKeyId, mySystemAlarm);
         _SystemAlarmBuffer[myKeyId].AlarmCount = 1;
         _SystemAlarmBuffer[myKeyId].UpdateStatus = true;
     }
 }
 public void GetCollectionAlarm(string[] myFactoryOrganizationId)
 {
     string m_Sql = @"SELECT A.NodeId
                       ,A.OrganizationID as OrganizationId
                       ,A.NodeName
                       ,A.ParentNodeId
                       ,A.NodeType
                       ,A.SwitchModels
                       ,A.IpAddress
                       ,A.RealtimeDataTable
                       ,(case when B.StatusSum = B.StatusCount then '工作正常' else '不能连接' end) as Status
                       ,B.[Timestamp] as Timestamp
                       ,'' as InstanceName
                       ,B.[Servers] as Servers
                   FROM net_DataCollectionNet A,
                   (Select C.BranchFactory,
                           C.IP,
                           C.[Servers],
                           sum(case when C.Status = '工作正常' then 1 else 0 end) as StatusSum,
                           count(C.Status) as StatusCount,
                           min(case when C.Status = '工作正常' then getdate() else [Timestamp] end) as Timestamp
                           from system_StatusNet C
                    group by C.BranchFactory, C.IP, C.[Servers]
                   ) B
                   where A.OrganizationID in ({0})
                       and A.OrganizationID = B.BranchFactory
                       and A.IpAddress = B.IP
                       and A.NodeType = B.[Servers]";
     string m_FactoryOrganizationId = "";
     for (int i = 0; i < myFactoryOrganizationId.Length; i++)
     {
         if (i == 0)
         {
             m_FactoryOrganizationId = "'" + myFactoryOrganizationId[i] + "'";
         }
         else
         {
             m_FactoryOrganizationId = m_FactoryOrganizationId + ",'" + myFactoryOrganizationId[i] + "'";
         }
     }
     m_Sql = string.Format(m_Sql, m_FactoryOrganizationId);
     try
     {
         DataTable m_CollectionInterfaceInfoTable = _dataFactory.Query(m_Sql);
         if (m_CollectionInterfaceInfoTable != null)
         {
             for (int i = 0; i < m_CollectionInterfaceInfoTable.Rows.Count; i++)
             {
                 string m_Status = m_CollectionInterfaceInfoTable.Rows[i]["Status"] == DBNull.Value ? "" : m_CollectionInterfaceInfoTable.Rows[i]["Status"].ToString();
                 if (m_Status != "工作正常")
                 {
                     Model_SystemAlarm m_SystemAlarmGroup = new Model_SystemAlarm();
                     m_SystemAlarmGroup.NodeId = m_CollectionInterfaceInfoTable.Rows[i]["NodeId"].ToString();
                     m_SystemAlarmGroup.Ip = m_CollectionInterfaceInfoTable.Rows[i]["IpAddress"] == DBNull.Value ? "" : m_CollectionInterfaceInfoTable.Rows[i]["IpAddress"].ToString();
                     m_SystemAlarmGroup.OrganizationId = m_CollectionInterfaceInfoTable.Rows[i]["OrganizationId"] == DBNull.Value ? "" : m_CollectionInterfaceInfoTable.Rows[i]["OrganizationId"].ToString();
                     m_SystemAlarmGroup.NodeName = m_CollectionInterfaceInfoTable.Rows[i]["NodeName"] == DBNull.Value ? "" : m_CollectionInterfaceInfoTable.Rows[i]["NodeName"].ToString();
                     m_SystemAlarmGroup.StartTime = m_CollectionInterfaceInfoTable.Rows[i]["Timestamp"] == DBNull.Value ? "" : m_CollectionInterfaceInfoTable.Rows[i]["Timestamp"].ToString();
                     m_SystemAlarmGroup.Type = m_CollectionInterfaceInfoTable.Rows[i]["Servers"] == DBNull.Value ? "" : m_CollectionInterfaceInfoTable.Rows[i]["Servers"].ToString();
                     m_SystemAlarmGroup.NodeType = m_CollectionInterfaceInfoTable.Rows[i]["NodeType"] == DBNull.Value ? "" : m_CollectionInterfaceInfoTable.Rows[i]["NodeType"].ToString();
                     m_SystemAlarmGroup.InstanceName = m_CollectionInterfaceInfoTable.Rows[i]["InstanceName"] == DBNull.Value ? "" : m_CollectionInterfaceInfoTable.Rows[i]["InstanceName"].ToString();
                     m_SystemAlarmGroup.AlarmDescription = m_SystemAlarmGroup.NodeName;
                     Buffer_SystemAlarm.SetAlarm(m_SystemAlarmGroup.Type + "_" + m_SystemAlarmGroup.NodeType + "_" + m_SystemAlarmGroup.NodeId + "_" + m_SystemAlarmGroup.InstanceName, m_SystemAlarmGroup);
                 }
             }
         }
     }
     catch
     {
     }
 }
 public void GetAmmeterAlarm(string[] myFactoryOrganizationId)
 {
     DataTable m_DataBaseInfoTable = GetDataBaseByOrganizationId(myFactoryOrganizationId);
     if (m_DataBaseInfoTable != null)
     {
         string m_SqlTemplate = @"Select N.NodeId
                           ,N.NodeName
                           ,N.ParentNodeId
                           ,N.NodeType
                           ,N.NodeType as Servers
                           ,N.SwitchModels
                           ,N.InstanceName
                           ,M.StatusCount
                           ,M.StatusSum
                           ,M.IpAddress
                           ,M.OrganizationID as OrganizationId
                           ,(case when M.StatusCount - M.StatusSum > 0 then 0 else 1 end) as Status
                       from (
                           Select A.IpAddress
                           ,A.OrganizationID
                           ,A.ElectricRoom
                           ,count(A.Status) as StatusCount
                           ,sum(case when A.Status = '正常读取' then 1 else 0 end) as StatusSum
                           from {0}.dbo.AmmeterContrast A
                           where EnabledFlag = 1
                           group by A.OrganizationID,A.ElectricRoom,A.IpAddress) M, net_DataCollectionNet N
                       where N.NodeType = 'Ammeter'
                       and M.IpAddress = N.IpAddress
                       and M.OrganizationID = N.OrganizationID
                       and M.ElectricRoom = N.NodeName
                       and N.OrganizationID = '{1}'";
         //A.IpAddress is not null and A.IpAddress <> '' and
         for (int i = 0; i < myFactoryOrganizationId.Length; i++)
         {
             DataRow[] m_DataBaseRow = m_DataBaseInfoTable.Select(string.Format("OrganizationId = '{0}'", myFactoryOrganizationId[i]));
             if (m_DataBaseRow.Length > 0)
             {
                 string m_Sql = m_SqlTemplate;
                 m_Sql = string.Format(m_Sql, m_DataBaseRow[0]["MeterDatabase"].ToString(), myFactoryOrganizationId[i]);
                 try
                 {
                     DataTable m_AmmeterInfoTable = _dataFactory.Query(m_Sql);
                     if (m_AmmeterInfoTable != null)
                     {
                         for (int j = 0; j < m_AmmeterInfoTable.Rows.Count; j++)
                         {
                             string m_Status = m_AmmeterInfoTable.Rows[j]["Status"] == DBNull.Value ? "0" : m_AmmeterInfoTable.Rows[j]["Status"].ToString();
                             if (m_Status != "1")
                             {
                                 Model_SystemAlarm m_SystemAlarmGroup = new Model_SystemAlarm();
                                 m_SystemAlarmGroup.NodeId = m_AmmeterInfoTable.Rows[j]["NodeId"].ToString();
                                 m_SystemAlarmGroup.Ip = m_AmmeterInfoTable.Rows[j]["IpAddress"] == DBNull.Value ? "" : m_AmmeterInfoTable.Rows[j]["IpAddress"].ToString();
                                 m_SystemAlarmGroup.OrganizationId = m_AmmeterInfoTable.Rows[j]["OrganizationId"] == DBNull.Value ? "" : m_AmmeterInfoTable.Rows[j]["OrganizationId"].ToString();
                                 m_SystemAlarmGroup.NodeName = m_AmmeterInfoTable.Rows[j]["NodeName"] == DBNull.Value ? "" : m_AmmeterInfoTable.Rows[j]["NodeName"].ToString();
                                 m_SystemAlarmGroup.StartTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                                 m_SystemAlarmGroup.Type = m_AmmeterInfoTable.Rows[j]["Servers"] == DBNull.Value ? "" : m_AmmeterInfoTable.Rows[j]["Servers"].ToString() + "S";
                                 m_SystemAlarmGroup.NodeType = m_AmmeterInfoTable.Rows[j]["NodeType"] == DBNull.Value ? "" : m_AmmeterInfoTable.Rows[j]["NodeType"].ToString();
                                 m_SystemAlarmGroup.InstanceName = m_AmmeterInfoTable.Rows[j]["InstanceName"] == DBNull.Value ? "" : m_AmmeterInfoTable.Rows[j]["InstanceName"].ToString();
                                 m_SystemAlarmGroup.AlarmDescription = m_SystemAlarmGroup.NodeName;
                                 Buffer_SystemAlarm.SetAlarm(m_SystemAlarmGroup.Type + "_" + m_SystemAlarmGroup.NodeType + "_" + m_SystemAlarmGroup.NodeId + "_" + m_SystemAlarmGroup.InstanceName, m_SystemAlarmGroup);
                             }
                         }
                     }
                 }
                 catch
                 {
                 }
             }
         }
     }
 }
        public void GetCollectionSoftwareAlarm(string[] myFactoryOrganizationId)
        {
            string m_Sql = @"SELECT A.NodeId
                              ,A.OrganizationID as OrganizationId
                              ,A.NodeName
                              ,A.ParentNodeId
                              ,A.NodeType
                              ,A.SwitchModels
                              ,A.IpAddress
                              ,A.RealtimeDataTable
                              ,B.Status
                              ,B.[Timestamp] as Timestamp
                              ,B.InstanceName
                              ,B.[Servers]
                              ,B.Remark
                          FROM net_DataCollectionNet A, system_StatusNet B
                          where A.OrganizationID in ({0})
                          and A.OrganizationID = B.BranchFactory
                          and A.IpAddress = B.IP
                          and A.NodeType = 'DataComputer'
                          and B.[Servers] = 'Software'";
            string m_FactoryOrganizationId = "";
            for (int i = 0; i < myFactoryOrganizationId.Length; i++)
            {
                if (i == 0)
                {
                    m_FactoryOrganizationId = "'" + myFactoryOrganizationId[i] + "'";
                }
                else
                {
                    m_FactoryOrganizationId = m_FactoryOrganizationId + ",'" + myFactoryOrganizationId[i] + "'";
                }
            }
            m_Sql = string.Format(m_Sql, m_FactoryOrganizationId);
            try
            {
                DataTable m_SoftwareInfoTable = _dataFactory.Query(m_Sql);
                if (m_SoftwareInfoTable != null)
                {
                    for (int i = 0; i < m_SoftwareInfoTable.Rows.Count; i++)
                    {
                        bool m_Status = false;
                        if (m_SoftwareInfoTable.Rows[i]["Timestamp"] != DBNull.Value)
                        {
                            DateTime m_TimeStamp = DateTime.Parse(m_SoftwareInfoTable.Rows[i]["Timestamp"].ToString());
                            if (m_TimeStamp.AddMinutes(10) >= DateTime.Now)      //如果记录的时间与当前时间间隔不到10分钟表示数据采集软件运行正常
                            {
                                m_Status = true;
                            }
                        }

                        if (m_Status == false)
                        {
                            Model_SystemAlarm m_SystemAlarmGroup = new Model_SystemAlarm();
                            m_SystemAlarmGroup.NodeId = m_SoftwareInfoTable.Rows[i]["NodeId"].ToString();
                            m_SystemAlarmGroup.Ip = m_SoftwareInfoTable.Rows[i]["IpAddress"] == DBNull.Value ? "" : m_SoftwareInfoTable.Rows[i]["IpAddress"].ToString();
                            m_SystemAlarmGroup.OrganizationId = m_SoftwareInfoTable.Rows[i]["OrganizationId"] == DBNull.Value ? "" : m_SoftwareInfoTable.Rows[i]["OrganizationId"].ToString();
                            m_SystemAlarmGroup.NodeName = m_SoftwareInfoTable.Rows[i]["NodeName"] == DBNull.Value ? "" : m_SoftwareInfoTable.Rows[i]["NodeName"].ToString();
                            m_SystemAlarmGroup.StartTime = m_SoftwareInfoTable.Rows[i]["Timestamp"] == DBNull.Value ? "" : m_SoftwareInfoTable.Rows[i]["Timestamp"].ToString();
                            m_SystemAlarmGroup.Type = m_SoftwareInfoTable.Rows[i]["Servers"] == DBNull.Value ? "" : m_SoftwareInfoTable.Rows[i]["Servers"].ToString();
                            m_SystemAlarmGroup.NodeType = m_SoftwareInfoTable.Rows[i]["NodeType"] == DBNull.Value ? "" : m_SoftwareInfoTable.Rows[i]["NodeType"].ToString();
                            m_SystemAlarmGroup.InstanceName = m_SoftwareInfoTable.Rows[i]["InstanceName"] == DBNull.Value ? "" : m_SoftwareInfoTable.Rows[i]["InstanceName"].ToString();
                            m_SystemAlarmGroup.AlarmDescription = m_SystemAlarmGroup.Ip;
                            Buffer_SystemAlarm.SetAlarm(m_SystemAlarmGroup.Type + "_" + m_SystemAlarmGroup.NodeType + "_" + m_SystemAlarmGroup.NodeId + "_" + m_SystemAlarmGroup.InstanceName, m_SystemAlarmGroup);
                        }
                    }
                }
            }
            catch
            {
            }
        }
 public void MonitorNetworkStatus(string[] myFactoryOrganizationId, string myGroupIpAddress)
 {
     //分厂服务器与数据采集计算机之间的网络
     string m_Sql = @"SELECT A.NodeId
                       ,A.OrganizationID as OrganizationId
                       ,A.NodeName
                       ,A.ParentNodeId
                       ,A.NodeType
                       ,A.SwitchModels
                       ,A.IpAddress
                       ,A.RealtimeDataTable
                       ,A.InstanceName
                   FROM net_DataCollectionNet A
                   where A.OrganizationID in ({0})
                   and (A.NodeType = '{1}' or A.NodeType = '{2}')";
     string m_FactoryOrganizationId = "";
     for (int i = 0; i < myFactoryOrganizationId.Length; i++)
     {
         if (i == 0)
         {
             m_FactoryOrganizationId = "'" + myFactoryOrganizationId[i] + "'";
         }
         else
         {
             m_FactoryOrganizationId = m_FactoryOrganizationId + ",'" + myFactoryOrganizationId[i] + "'";
         }
     }
     m_Sql = string.Format(m_Sql, m_FactoryOrganizationId, "DataComputer", "FactoryServer");
     try
     {
         DataTable m_DataBaseInfoTable = _dataFactory.Query(m_Sql);
         if (m_DataBaseInfoTable != null)
         {
             for (int i = 0; i < m_DataBaseInfoTable.Rows.Count; i++)
             {
                 bool m_DataComputerNetworkStatus = false;
                 string m_IpAddress = m_DataBaseInfoTable.Rows[i]["IpAddress"] == DBNull.Value ? "" : m_DataBaseInfoTable.Rows[i]["IpAddress"].ToString();
                 if (m_DataBaseInfoTable.Rows[i]["NodeType"].ToString() == "FactoryServer") //当前节点是分厂服务器时,实际上ping的是分厂服务器到集团服务器的网络
                 {
                     m_DataComputerNetworkStatus = GetNetworkStatus(myGroupIpAddress);
                 }
                 else
                 {
                     m_DataComputerNetworkStatus = GetNetworkStatus(m_IpAddress);  //当前节点是数据采集计算机时,实际上ping的是分厂服务器到采集计算机的网络
                 }
                 if (m_DataComputerNetworkStatus == false)
                 {
                     Model_SystemAlarm m_SystemAlarmGroup = new Model_SystemAlarm();
                     m_SystemAlarmGroup.NodeId = m_DataBaseInfoTable.Rows[i]["NodeId"].ToString();
                     m_SystemAlarmGroup.Ip = m_IpAddress;
                     m_SystemAlarmGroup.OrganizationId = m_DataBaseInfoTable.Rows[i]["OrganizationId"].ToString();
                     m_SystemAlarmGroup.NodeName = m_DataBaseInfoTable.Rows[i]["NodeName"].ToString();
                     m_SystemAlarmGroup.StartTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                     m_SystemAlarmGroup.Type = "Network";
                     m_SystemAlarmGroup.NodeType = m_DataBaseInfoTable.Rows[i]["NodeType"].ToString();
                     m_SystemAlarmGroup.InstanceName = m_DataBaseInfoTable.Rows[i]["InstanceName"] == DBNull.Value ? "" : m_DataBaseInfoTable.Rows[i]["InstanceName"].ToString();
                     m_SystemAlarmGroup.AlarmDescription = m_SystemAlarmGroup.Ip;
                     Buffer_SystemAlarm.SetAlarm(m_SystemAlarmGroup.Type + "_" + m_SystemAlarmGroup.NodeType + "_" + m_SystemAlarmGroup.NodeId + "_" + m_SystemAlarmGroup.InstanceName, m_SystemAlarmGroup);
                 }
             }
         }
     }
     catch
     {
     }
 }