zoukankan      html  css  js  c++  java
  • C#告警统计614版

       1         #endregion
       2 
       3         #region 告警统计
       4         /// <summary>
       5         /// 获取天、周、月、年起始时间 
       6         /// </summary>
       7         public List<DateTime> GetListDate()
       8         {
       9             try
      10             {
      11                 //
      12                 DateTime day = Convert.ToDateTime(DateTime.Now.Date.ToString());  //当天开始时间              
      13                 //
      14                 DateTime week = Convert.ToDateTime(DateTime.Now.Date.AddDays(-(int)(DateTime.Now.DayOfWeek)).ToString());  //本周开始时间 +1
      15                 //if (week > DateTime.Now)     //now(2017/5/7是周日 week首天应为2017/5/1)
      16                 //    week = week.AddDays(-7);
      17                 //
      18                 DateTime month = Convert.ToDateTime(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString());  //本月开始时间
      19                 //
      20                 DateTime year = Convert.ToDateTime(new DateTime(DateTime.Now.Date.Year, 1, 1).ToString());  //本年开始时间
      21                 return new List<DateTime>() { day, week, month, year };
      22             }
      23             catch (Exception ex)
      24             {
      25                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
      26                 return null;
      27             }
      28         }
      29         /// <summary>
      30         /// 获取子系统的告警根据当日、周、月、年
      31         /// </summary>
      32         public List<List<HisAlarm>> GetSubsysDateAlarmList(int subsysId)
      33         {
      34             try
      35             {
      36                 List<List<HisAlarm>> subAlarm = new List<List<HisAlarm>>();
      37                 foreach (var date in listDate)
      38                 {
      39                     String hql = String.Format("from HisAlarm as alm where alm.AlarmTime>'{0}'AND alm.SubsysId={1}", date.ToString("yyyy-MM-dd HH:mm:ss"),subsysId.ToString());
      40                     List<HisAlarm> hqlResult = (List<HisAlarm>)alarmDao.GetSession().CreateQuery(hql).List<HisAlarm>();
      41                     subAlarm.Add(hqlResult);
      42                 }
      43                 return subAlarm;
      44             }
      45             catch (Exception ex)
      46             {
      47                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
      48                 return null;
      49             }
      50         }
      51 
      52         /// <summary>
      53         /// 获取设备的告警根据当日、周、月、年
      54         /// </summary>
      55         public List<List<HisAlarm>> GetDeviceDateAlarmList(int deviceId)
      56         {
      57             try
      58             {
      59                 List<List<HisAlarm>> devAlarm = new List<List<HisAlarm>>();
      60                 foreach (var date in listDate)
      61                 {  
      62                     string hql = String.Format("from HisAlarm as alm where alm.AlarmTime>'{0}'AND alm.AlarmObjectid={1}", date.ToString("yyyy-MM-dd HH:mm:ss"), deviceId.ToString());
      63                     List<HisAlarm> hqlResult = (List<HisAlarm>)alarmDao.GetSession().CreateQuery(hql).List<HisAlarm>();
      64                     devAlarm.Add(hqlResult);
      65                 }
      66                 return devAlarm;
      67             }
      68             catch (Exception ex)
      69             {
      70                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
      71                 return null;
      72             }
      73         }
      74         //子系统告警趋势(子系统告警统计)
      75         public Dictionary<int, List<int>> GetSubThrendAlarmDic(List<HisAlarm> list, int timeFlag)
      76         {
      77             try
      78             {
      79                 Dictionary<int, List<int>> dic = new Dictionary<int, List<int>>();
      80                 if(list==null ||list.Count==0)
      81                     return dic;
      82                 var query = list.GroupBy(it => it.SubsysId, it => it);
      83                 foreach (var info in query)
      84                 {
      85                     var temList = info.ToList<HisAlarm>();
      86                     List<int> intList = new List<int>();
      87                     //day
      88                     if (timeFlag == 0)
      89                     {
      90                         DateTime day = listDate[0];//当天开始时间
      91                         for (int i = 0; i <= DateTime.Now.Hour; i++)  //DateTime.Now.Hour当天的小时数
      92                         {
      93                             var hour1 = day.AddHours(i);
      94                             var hour2 = day.AddHours(i + 1);
      95                             var dayAlarmList = temList.FindAll(item => hour1 <= item.AlarmTime && item.AlarmTime < hour2);
      96                             intList.Add((dayAlarmList != null) ? dayAlarmList.Count : 0);
      97                             intList.Add((dayAlarmList != null) ? dayAlarmList.Count(item => item.Status != (int)AlarmStatus_e.AlarmFinish) : 0);
      98                             intList.Add((dayAlarmList != null) ? dayAlarmList.Count(item => item.Status == (int)AlarmStatus_e.AlarmFinish) : 0);
      99                         }
     100                     }
     101                     //week
     102                     if (timeFlag == 1)
     103                     {
     104                         DateTime week = listDate[1];  //本周开始时间
     105                         int dayshu = DateTime.Now.Day- week.Day + 1;  //本周的第几天
     106                         for (int i = 0; i < dayshu; i++) 
     107                         {
     108                             var day1 = week.AddDays(i);
     109                             var day2 = week.AddDays(i + 1);
     110                             var weekAlarmList = temList.FindAll(item => day1 <= item.AlarmTime && item.AlarmTime < day2);
     111                             intList.Add((weekAlarmList != null) ? weekAlarmList.Count : 0);
     112                             intList.Add((weekAlarmList != null) ? weekAlarmList.Count(item => item.Status != (int)AlarmStatus_e.AlarmFinish) : 0);
     113                             intList.Add((weekAlarmList != null) ? weekAlarmList.Count(item => item.Status == (int)AlarmStatus_e.AlarmFinish) : 0);
     114                         }
     115                     }
     116                     //month
     117                     if (timeFlag == 2)
     118                     {
     119                         DateTime month = listDate[2];  //本月开始时间
     120                         for (int i = 0; i < DateTime.Now.Day; i++)  //DateTime.Now.Day表示该月中的第几天
     121                         {
     122                             var day1 = month.AddDays(i);
     123                             var day2 = month.AddDays(i + 1);
     124                             var monthAlarmList = temList.FindAll(item => day1 <= item.AlarmTime && item.AlarmTime < day2);
     125                             intList.Add((monthAlarmList != null) ? monthAlarmList.Count : 0);
     126                             intList.Add((monthAlarmList != null) ? monthAlarmList.Count(item => item.Status != (int)AlarmStatus_e.AlarmFinish) : 0);
     127                             intList.Add((monthAlarmList != null) ? monthAlarmList.Count(item => item.Status == (int)AlarmStatus_e.AlarmFinish) : 0);
     128                         }
     129                     }
     130                     //year
     131                     if (timeFlag == 3)
     132                     {
     133                         DateTime year = listDate[3];  //本年开始时间
     134                         for (int i = 0; i < DateTime.Now.Month; i++)  //DateTime.Now.Month表示该年中的第几个月
     135                         {
     136                             var year1 = year.AddMonths(i);
     137                             var year2 = year.AddMonths(i + 1);
     138                             var yearAlarmList = temList.FindAll(item => year1 <= item.AlarmTime && item.AlarmTime < year2);
     139                             intList.Add((yearAlarmList != null) ? yearAlarmList.Count : 0);
     140                             intList.Add((yearAlarmList != null) ? yearAlarmList.Count(item => item.Status != (int)AlarmStatus_e.AlarmFinish) : 0);
     141                             intList.Add((yearAlarmList != null) ? yearAlarmList.Count(item => item.Status == (int)AlarmStatus_e.AlarmFinish) : 0);
     142                         }
     143                     }
     144                     dic.Add(info.Key, intList);
     145                 }
     146                 return dic;
     147             }
     148             catch (Exception ex)
     149             {
     150                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     151                 return null;
     152             }
     153         }
     154         //告警类型趋势(设备告警统计)
     155         public Dictionary<int, List<int>> GetAlarmTypeThrendAlarmDic(List<HisAlarm> list, int timeFlag)
     156         {
     157             try
     158             {
     159                 Dictionary<int, List<int>> dic = new Dictionary<int, List<int>>();
     160                 if (list == null || list.Count == 0)
     161                     return dic;
     162                 var query = list.GroupBy(it => it.AlarmCode, it => it);
     163                 foreach (var info in query)
     164                 {
     165                     var temList = info.ToList<HisAlarm>();
     166                     List<int> intList = new List<int>();
     167                     //day
     168                     if (timeFlag == 0)
     169                     {
     170                         DateTime day = listDate[0];  //当天开始时间
     171                         for (int i = 0; i <= DateTime.Now.Hour; i++)  //DateTime.Now.Hour当天的小时数
     172                         {
     173                             var hour1 = day.AddHours(i);
     174                             var hour2 = day.AddHours(i + 1);
     175                             //var dayAlarmList = temList.FindAll(item => hour1 <= item.AlarmTime && item.AlarmTime < hour2);
     176                             //intList.Add((dayAlarmList != null) ? dayAlarmList.Count : 0);
     177                             intList.Add(temList.Count(item => hour1 <= item.AlarmTime && item.AlarmTime < hour2));
     178                         }
     179                     }
     180                     //week
     181                     if (timeFlag == 1)
     182                     {
     183                         DateTime week = listDate[1]; ;  //本周开始时间                      
     184                         int dayshu = DateTime.Now.Day - week.Day +1;  //本周第几天
     185                         for (int i = 0; i < dayshu ; i++)  //DateTime.Now.Day%7本周第几天
     186                         {
     187                             var day1 = week.AddDays(i);
     188                             var day2 = week.AddDays(i + 1);
     189                             //var weekAlarmList = temList.FindAll(item => day1 <= item.AlarmTime && item.AlarmTime < day2);
     190                             //intList.Add((weekAlarmList != null) ? weekAlarmList.Count : 0);
     191                             intList.Add(temList.Count(item => day1 <= item.AlarmTime && item.AlarmTime < day2));
     192                         }
     193                     }
     194                     //month
     195                     if (timeFlag == 2)
     196                     {
     197                         DateTime month = listDate[2];  //本月开始时间
     198                         for (int i = 0; i < DateTime.Now.Day; i++)  //DateTime.Now.Day表示该月中的第几天
     199                         {
     200                             var day1 = month.AddDays(i);
     201                             var day2 = month.AddDays(i + 1);
     202                             //var monthAlarmList = temList.FindAll(item => day1 <= item.AlarmTime && item.AlarmTime < day2);
     203                             //intList.Add((monthAlarmList != null) ? monthAlarmList.Count : 0);
     204                             intList.Add(temList.Count(item => day1 <= item.AlarmTime && item.AlarmTime < day2));
     205                         }
     206                     }
     207                     //year
     208                     if (timeFlag == 3)
     209                     {
     210                         DateTime year = listDate[3];  //本年开始时间
     211                         for (int i = 0; i < DateTime.Now.Month; i++)  //DateTime.Now.Month表示该年中的第几个月
     212                         {
     213                             var year1 = year.AddMonths(i);
     214                             var year2 = year.AddMonths(i + 1);
     215                             //var yearAlarmList = temList.FindAll(item => year1 <= item.AlarmTime && item.AlarmTime < year2);
     216                             //intList.Add((yearAlarmList != null) ? yearAlarmList.Count : 0);
     217                             intList.Add(temList.Count(item => year1 <= item.AlarmTime && item.AlarmTime < year2));
     218                         }
     219                     }
     220                     dic.Add(info.Key, intList);
     221                 }
     222                 return dic;
     223             }
     224             catch (Exception ex)
     225             {
     226                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     227                 return null;
     228             }
     229         }
     230         //设备对象告警趋势(设备告警统计)
     231         public Dictionary<int, List<int>> GetDeviceObjectThrendAlarmDic(List<HisAlarm> list, int timeFlag)
     232         {
     233             try
     234             {
     235                 Dictionary<int, List<int>> dic = new Dictionary<int, List<int>>();
     236                 if (list == null || list.Count == 0)
     237                     return dic;
     238                 var query = list.GroupBy(it => it.AlarmObjectid, it => it);
     239                 foreach (var info in query)
     240                 {
     241                     var temList = info.ToList<HisAlarm>();
     242                     List<int> intList = new List<int>();
     243                     //day
     244                     if (timeFlag == 0)
     245                     {
     246                         DateTime day = listDate[0];  //当天开始时间
     247                         for (int i = 0; i <= DateTime.Now.Hour; i++)  //DateTime.Now.Hour当天的小时数
     248                         {
     249                             var hour1 = day.AddHours(i);
     250                             var hour2 = day.AddHours(i + 1);
     251                             var dayAlarmList = temList.FindAll(item => hour1 <= item.AlarmTime && item.AlarmTime < hour2);
     252                             intList.Add((dayAlarmList != null) ? dayAlarmList.Count : 0);
     253                             intList.Add((dayAlarmList != null) ? dayAlarmList.Count(item => item.Status != (int)AlarmStatus_e.AlarmFinish) : 0);
     254                             intList.Add((dayAlarmList != null) ? dayAlarmList.Count(item => item.Status == (int)AlarmStatus_e.AlarmFinish) : 0);
     255                         }
     256                     }
     257                     //week
     258                     if (timeFlag == 1)
     259                     {
     260                         DateTime week = listDate[1];  //本周开始时间     
     261                         int dayshu = DateTime.Now.Day - week.Day+1;  //本周第几天
     262                         if (dayshu == 0)
     263                             dayshu = 7;
     264                         for (int i = 0; i < dayshu ; i++) 
     265                         {
     266                             var day1 = week.AddDays(i);
     267                             var day2 = week.AddDays(i + 1);
     268                             var weekAlarmList = temList.FindAll(item => day1 <= item.AlarmTime && item.AlarmTime < day2);
     269                             intList.Add((weekAlarmList != null) ? weekAlarmList.Count : 0);
     270                             intList.Add((weekAlarmList != null) ? weekAlarmList.Count(item => item.Status != (int)AlarmStatus_e.AlarmFinish) : 0);
     271                             intList.Add((weekAlarmList != null) ? weekAlarmList.Count(item => item.Status == (int)AlarmStatus_e.AlarmFinish) : 0);
     272                         }
     273                     }
     274                     //month
     275                     if (timeFlag == 2)
     276                     {
     277                         DateTime month = listDate[2];  //本月开始时间
     278                         for (int i = 0; i < DateTime.Now.Day; i++)  //DateTime.Now.Day表示该月中的第几天
     279                         {
     280                             var day1 = month.AddDays(i);
     281                             var day2 = month.AddDays(i + 1);
     282                             var monthAlarmList = temList.FindAll(item => day1 <= item.AlarmTime && item.AlarmTime < day2);
     283                             intList.Add((monthAlarmList != null) ? monthAlarmList.Count : 0);
     284                             intList.Add((monthAlarmList != null) ? monthAlarmList.Count(item => item.Status != (int)AlarmStatus_e.AlarmFinish) : 0);
     285                             intList.Add((monthAlarmList != null) ? monthAlarmList.Count(item => item.Status == (int)AlarmStatus_e.AlarmFinish) : 0);
     286                         }
     287                     }
     288                     //year
     289                     if (timeFlag == 3)
     290                     {
     291                         DateTime year = listDate[3]; //本年开始时间
     292                         for (int i = 0; i < DateTime.Now.Month; i++)  //DateTime.Now.Month表示该年中的第几个月
     293                         {
     294                             var year1 = year.AddMonths(i);
     295                             var year2 = year.AddMonths(i + 1);
     296                             var yearAlarmList = temList.FindAll(item => year1 <= item.AlarmTime && item.AlarmTime < year2);
     297                             intList.Add((yearAlarmList != null) ? yearAlarmList.Count : 0);
     298                             intList.Add((yearAlarmList != null) ? yearAlarmList.Count(item => item.Status != (int)AlarmStatus_e.AlarmFinish) : 0);
     299                             intList.Add((yearAlarmList != null) ? yearAlarmList.Count(item => item.Status == (int)AlarmStatus_e.AlarmFinish) : 0);
     300                         }
     301                     }
     302                     dic.Add(info.Key, intList);
     303                 }
     304                 return dic;
     305             }
     306             catch (Exception ex)
     307             {
     308                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     309                 return null;
     310             }
     311         }
     312         
     313         /// <summary>
     314         /// 整体告警统计
     315         /// </summary>
     316         /// <returns></returns>
     317         public AllAlarmCountDTO GetAllAlarmCount()
     318         {
     319             try
     320             {
     321                 AllAlarmCountDTO allAlarmCount = new AllAlarmCountDTO()
     322                 {
     323                     levelAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     324                     deviceTypeAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     325                     moduleAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     326                     subAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     327                     typeAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() }
     328                 };
     329                 //告警等级
     330                 foreach (var date in listDate)
     331                 {
     332                     string sql = String.Format("SELECT t3.a2,SUM(t3.b2)as r FROM(SELECT*FROM(SELECT alarm_code AS a1,alarm_level AS a2 FROM def_type_alarm) AS t1,(SELECT alarm_code AS b1,COUNT (*) AS b2 FROM his_alarm WHERE alarm_time > '{0}' GROUP BY alarm_code) AS t2 WHERE t1.a1 = t2.b1) AS t3 GROUP BY t3.a2", date.ToString("yyyy-MM-dd HH:mm:ss"));
     333                     var listRelut = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("a2", NHibernateUtil.Int32).AddScalar("r", NHibernateUtil.Int32).List();
     334                     if (listRelut.Count == 0)
     335                     {
     336                         if (date == listDate[0]) //
     337                             allAlarmCount.levelAlarm.dayAlarm = new Dictionary<int, List<int>>();
     338                         if (date == listDate[1]) //
     339                             allAlarmCount.levelAlarm.weekAlarm = new Dictionary<int, List<int>>();
     340                         if (date == listDate[2]) //
     341                             allAlarmCount.levelAlarm.monthAlarm = new Dictionary<int, List<int>>();
     342                         if (date == listDate[3]) //
     343                             allAlarmCount.levelAlarm.yearAlarm = new Dictionary<int, List<int>>();
     344                     }
     345                     else
     346                     {
     347                         foreach (var it in listRelut)
     348                         {
     349                             Object[] obj = (Object[])it;
     350                             if (date == listDate[0])  //
     351                                 allAlarmCount.levelAlarm.dayAlarm.Add((int)obj[0], new List<int>() { (int)obj[1]});  //告警等级,数量
     352                             if (date == listDate[1])  //
     353                                 allAlarmCount.levelAlarm.weekAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });  //告警等级,数量
     354                             if (date == listDate[2])  //
     355                                 allAlarmCount.levelAlarm.monthAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });  //告警等级,数量
     356                             if (date == listDate[3])  //
     357                                 allAlarmCount.levelAlarm.yearAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });  //告警等级,数量
     358                         }
     359                     }                       
     360                 }
     361                 //告警类型top10
     362                 foreach (var date in listDate)  //遍历天、周、月、年
     363                 {
     364                     String hqlAlarmCode = String.Format("select alm.AlarmCode,count(AlarmId) from HisAlarm as alm where alm.AlarmTime>'{0}' group by alm.AlarmCode order by count(AlarmId) desc", date.ToString("yyyy-MM-dd HH:mm:ss"));
     365                     var alarmCodeTop = alarmDao.GetSession().CreateQuery(hqlAlarmCode).SetMaxResults(10).List();
     366                     if (alarmCodeTop.Count == 0)
     367                     {
     368                         if (date == listDate[0]) //
     369                             allAlarmCount.typeAlarm.dayAlarm = new Dictionary<int, List<int>>();
     370                         if (date == listDate[1]) //
     371                             allAlarmCount.typeAlarm.weekAlarm = new Dictionary<int, List<int>>();
     372                         if (date == listDate[2]) //
     373                             allAlarmCount.typeAlarm.monthAlarm = new Dictionary<int, List<int>>();
     374                         if (date == listDate[3]) //
     375                             allAlarmCount.typeAlarm.yearAlarm = new Dictionary<int, List<int>>();
     376                     }
     377                     else
     378                     {
     379                         foreach (var it in alarmCodeTop)
     380                         {
     381                             Object[] obj = (Object[])it;
     382                             if (date == listDate[0]) //
     383                                 allAlarmCount.typeAlarm.dayAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     384                             if (date == listDate[1]) //
     385                                 allAlarmCount.typeAlarm.weekAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     386                             if (date == listDate[2]) //
     387                                 allAlarmCount.typeAlarm.monthAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     388                             if (date == listDate[3]) //
     389                                 allAlarmCount.typeAlarm.yearAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     390                         }
     391                     }
     392                 }
     393                 //设备类型top10
     394                 foreach (var date in listDate)  //遍历天、周、月、年
     395                 {
     396                     String sql = String.Format("SELECT t2.b2,sum(a2) as r FROM(SELECT alarm_objectid AS a1,COUNT (*) AS a2 FROM his_alarm WHERE his_alarm.alarm_time > '{0}'GROUP BY alarm_objectid) AS t1,(SELECT object_id AS b1,object_type AS b2 FROM cfg_object_device) AS t2 WHERE t1.a1 = t2.b1 GROUP BY t2.b2 ORDER BY r DESC", date.ToString("yyyy-MM-dd HH:mm:ss"));
     397                     var alarmDeviceTop = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("b2", NHibernateUtil.Int32).AddScalar("r", NHibernateUtil.Int32).SetMaxResults(10).List();
     398                     if (alarmDeviceTop.Count == 0)
     399                     {
     400                         if (date == listDate[0]) //
     401                             allAlarmCount.deviceTypeAlarm.dayAlarm = new Dictionary<int, List<int>>();
     402                         if (date == listDate[1]) //
     403                             allAlarmCount.deviceTypeAlarm.weekAlarm = new Dictionary<int, List<int>>();
     404                         if (date == listDate[2]) //
     405                             allAlarmCount.deviceTypeAlarm.monthAlarm = new Dictionary<int, List<int>>();
     406                         if (date == listDate[3]) //
     407                             allAlarmCount.deviceTypeAlarm.yearAlarm = new Dictionary<int, List<int>>();
     408                     }
     409                     else
     410                     {
     411                         foreach (var it in alarmDeviceTop)
     412                         {
     413                             Object[] obj = (Object[])it;
     414                             if (date == listDate[0]) //
     415                                 allAlarmCount.deviceTypeAlarm.dayAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     416                             if (date == listDate[1]) //
     417                                 allAlarmCount.deviceTypeAlarm.weekAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     418                             if (date == listDate[2]) //
     419                                 allAlarmCount.deviceTypeAlarm.monthAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     420                             if (date == listDate[3]) //
     421                                 allAlarmCount.deviceTypeAlarm.yearAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     422                         }
     423                     }
     424                 }
     425                 //模块
     426                 System.Diagnostics.Stopwatch sw3 = new System.Diagnostics.Stopwatch();
     427                 sw3.Start();
     428                 foreach (var date in listDate)  //遍历天、周、月、年
     429                 {
     430                     String sql = String.Format("SELECT  t1.ModuId,t1.r FROM(SELECT t.ModuId,SUM(t.result)as r FROM(SELECT alarm_objectid AS objId,(CASE WHEN alarm_objectid in (SELECT cfg_object_device.object_id from cfg_object_device) THEN(SELECT cfg_object_device.parent_id FROM cfg_object_device WHERE cfg_object_device.object_id = alarm_objectid)ELSE alarm_objectid END) AS ModuId,COUNT (*) AS result FROM his_alarm where alarm_time>'{0}' GROUP BY alarm_objectid)as t GROUP BY t.ModuId ) as t1,cfg_object_module where t1.ModuId=cfg_object_module.object_id", date.ToString("yyyy-MM-dd HH:mm:ss"));
     431                     var alarmModule = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("ModuId", NHibernateUtil.Int32).AddScalar("r", NHibernateUtil.Int32).List();
     432                     if (alarmModule.Count == 0)
     433                     {
     434                         if (date == listDate[0]) //
     435                             allAlarmCount.moduleAlarm.dayAlarm = new Dictionary<int, List<int>>();
     436                         if (date == listDate[1]) //
     437                             allAlarmCount.moduleAlarm.weekAlarm = new Dictionary<int, List<int>>();
     438                         if (date == listDate[2]) //
     439                             allAlarmCount.moduleAlarm.monthAlarm = new Dictionary<int, List<int>>();
     440                         if (date == listDate[3]) //
     441                             allAlarmCount.moduleAlarm.yearAlarm = new Dictionary<int, List<int>>();
     442                     }
     443                     else
     444                     {
     445                         foreach (var it in alarmModule)
     446                         {
     447                             Object[] obj = (Object[])it;
     448                             if (date == listDate[0]) //
     449                                 allAlarmCount.moduleAlarm.dayAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });
     450                             if (date == listDate[1]) //
     451                                 allAlarmCount.moduleAlarm.weekAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });
     452                             if (date == listDate[2]) //
     453                                 allAlarmCount.moduleAlarm.monthAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });
     454                             if (date == listDate[3]) //
     455                                 allAlarmCount.moduleAlarm.yearAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });
     456                         }
     457                     }  
     458                 }
     459                 //子系统
     460                 System.Diagnostics.Stopwatch sw4 = new System.Diagnostics.Stopwatch();
     461                 sw4.Start();
     462                 foreach (var date in listDate)
     463                 {
     464                     string sql = String.Format("SELECT subsys_id as SId,COUNT (*) as CAll,COUNT(CASE WHEN status!=3 THEN 1 END) as C1,COUNT(CASE WHEN status=3 THEN 1 END) as C2 FROM his_alarm WHERE alarm_time>'{0}' GROUP BY subsys_id", date.ToString("yyyy-MM-dd HH:mm:ss"));
     465                     var listResult = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("SId", NHibernateUtil.Int32).AddScalar("CAll", NHibernateUtil.Int32).AddScalar("C1", NHibernateUtil.Int32).AddScalar("C2", NHibernateUtil.Int32).List();
     466                     if (listResult.Count == 0)
     467                     {
     468                         if (date == listDate[0])//
     469                             allAlarmCount.subAlarm.dayAlarm = new Dictionary<int, List<int>>();
     470                         if (date == listDate[1])//
     471                             allAlarmCount.subAlarm.weekAlarm = new Dictionary<int, List<int>>();
     472                         if (date == listDate[2])//
     473                             allAlarmCount.subAlarm.monthAlarm = new Dictionary<int, List<int>>();
     474                         if (date == listDate[3])//
     475                             allAlarmCount.subAlarm.yearAlarm = new Dictionary<int, List<int>>();
     476                     }
     477                     else
     478                     {
     479                         foreach (var it in listResult)
     480                         {
     481                             Object[] obj = (Object[])it;
     482                             if (date == listDate[0])//
     483                                 allAlarmCount.subAlarm.dayAlarm.Add((int)obj[0], new List<int>() { (int)obj[1], (int)obj[2], (int)obj[3] });
     484                             if (date == listDate[1])//
     485                                 allAlarmCount.subAlarm.weekAlarm.Add((int)obj[0], new List<int>() { (int)obj[1], (int)obj[2], (int)obj[3] });
     486                             if (date == listDate[2])//
     487                                 allAlarmCount.subAlarm.monthAlarm.Add((int)obj[0], new List<int>() { (int)obj[1], (int)obj[2], (int)obj[3] });
     488                             if (date == listDate[3])//
     489                                 allAlarmCount.subAlarm.yearAlarm.Add((int)obj[0], new List<int>() { (int)obj[1], (int)obj[2], (int)obj[3] });
     490                         }
     491                     }                    
     492                 }
     493                 return allAlarmCount;
     494             }
     495             catch (Exception ex)
     496             {
     497                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     498                 return null;
     499             }
     500         }
     501         
     502         /// <summary>
     503         /// 子系统告警统计
     504         /// </summary>
     505         /// <param name="subsysId"></param>
     506         /// <returns></returns>
     507         public SubAlarmCountDTO GetSubsysAlarmCount(int subsysId)
     508         {
     509             try
     510             {
     511                 SubAlarmCountDTO subAlarmCount = new SubAlarmCountDTO()
     512                 {
     513                     levelAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     514                     deviceTypeAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     515                     deviceObjectAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     516                     subAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     517                     typeAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() }
     518                 };
     519                 var dateList = GetSubsysDateAlarmList(subsysId);
     520                 //告警等级
     521                 foreach (var date in listDate)
     522                 {
     523                     string sql = String.Format("SELECT t3.a2,SUM(t3.b2)as r FROM(SELECT*FROM(SELECT alarm_code AS a1,alarm_level AS a2 FROM def_type_alarm) AS t1,(SELECT alarm_code AS b1,COUNT (*) AS b2 FROM his_alarm WHERE alarm_time > '{0}' And his_alarm.subsys_id ='{1}' GROUP BY alarm_code) AS t2 WHERE t1.a1 = t2.b1) AS t3 GROUP BY t3.a2", date.ToString("yyyy-MM-dd HH:mm:ss"), subsysId.ToString());
     524                     var listRelut = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("a2", NHibernateUtil.Int32).AddScalar("r", NHibernateUtil.Int32).List();
     525                     if (listRelut.Count == 0)
     526                     {
     527                         if (date == listDate[0]) //
     528                             subAlarmCount.levelAlarm.dayAlarm = new Dictionary<int, List<int>>();
     529                         if (date == listDate[1]) //
     530                             subAlarmCount.levelAlarm.weekAlarm = new Dictionary<int, List<int>>();
     531                         if (date == listDate[2]) //
     532                             subAlarmCount.levelAlarm.monthAlarm = new Dictionary<int, List<int>>();
     533                         if (date == listDate[3]) //
     534                             subAlarmCount.levelAlarm.yearAlarm = new Dictionary<int, List<int>>();
     535                     }
     536                     else
     537                     {
     538                         foreach (var it in listRelut)
     539                         {
     540                             Object[] obj = (Object[])it;
     541                             if (date == listDate[0])  //
     542                                 subAlarmCount.levelAlarm.dayAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });  //告警等级,数量
     543                             if (date == listDate[1])  //
     544                                 subAlarmCount.levelAlarm.weekAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });  //告警等级,数量
     545                             if (date == listDate[2])  //
     546                                 subAlarmCount.levelAlarm.monthAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });  //告警等级,数量
     547                             if (date == listDate[3])  //
     548                                 subAlarmCount.levelAlarm.yearAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });  //告警等级,数量
     549                         }
     550                     }
     551                 }         
     552                 //告警类型top10
     553                 foreach (var date in listDate)  //遍历天、周、月、年
     554                 {
     555                     String hqlAlarmCode = String.Format("select alm.AlarmCode,count(AlarmId) from HisAlarm as alm where alm.AlarmTime>'{0}' And alm.SubsysId ='{1}' group by alm.AlarmCode order by count(AlarmId) desc", date.ToString("yyyy-MM-dd HH:mm:ss"), subsysId.ToString());
     556                     var alarmCodeTop = alarmDao.GetSession().CreateQuery(hqlAlarmCode).SetMaxResults(10).List();
     557                     if (alarmCodeTop.Count == 0)
     558                     {
     559                         if (date == listDate[0]) //
     560                             subAlarmCount.typeAlarm.dayAlarm = new Dictionary<int, List<int>>();
     561                         if (date == listDate[1]) //
     562                             subAlarmCount.typeAlarm.weekAlarm = new Dictionary<int, List<int>>();
     563                         if (date == listDate[2]) //
     564                             subAlarmCount.typeAlarm.monthAlarm = new Dictionary<int, List<int>>();
     565                         if (date == listDate[3]) //
     566                             subAlarmCount.typeAlarm.yearAlarm = new Dictionary<int, List<int>>();
     567                     }
     568                     else
     569                     {
     570                         foreach (var it in alarmCodeTop)
     571                         {
     572                             Object[] obj = (Object[])it;
     573                             if (date == listDate[0]) //
     574                                 subAlarmCount.typeAlarm.dayAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     575                             if (date == listDate[1]) //
     576                                 subAlarmCount.typeAlarm.weekAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     577                             if (date == listDate[2]) //
     578                                 subAlarmCount.typeAlarm.monthAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     579                             if (date == listDate[3]) //
     580                                 subAlarmCount.typeAlarm.yearAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     581                         }
     582                     }
     583                 }
     584                 //设备对象 top10
     585                 foreach (var date in listDate)  //遍历天、周、月、年
     586                 {
     587                     String sql = String.Format("SELECT t1.a1,sum(t1.a2) as r FROM(SELECT alarm_objectid AS a1,COUNT (*) AS a2 FROM his_alarm WHERE his_alarm.alarm_time > '{0}' And his_alarm.subsys_id ='{1}' GROUP BY alarm_objectid) AS t1,(SELECT object_id AS b1 FROM cfg_object_device) AS t2 WHERE t1.a1 = t2.b1 GROUP BY t1.a1 ORDER BY r DESC", date.ToString("yyyy-MM-dd HH:mm:ss"), subsysId.ToString());
     588                     var alarmDeviceTop = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("a1", NHibernateUtil.Int32).AddScalar("r", NHibernateUtil.Int32).SetMaxResults(10).List();
     589                     if (alarmDeviceTop.Count == 0)
     590                     {
     591                         if (date == listDate[0]) //
     592                             subAlarmCount.deviceObjectAlarm.dayAlarm = new Dictionary<int, List<int>>();
     593                         if (date == listDate[1]) //
     594                             subAlarmCount.deviceObjectAlarm.weekAlarm = new Dictionary<int, List<int>>();
     595                         if (date == listDate[2]) //
     596                             subAlarmCount.deviceObjectAlarm.monthAlarm = new Dictionary<int, List<int>>();
     597                         if (date == listDate[3]) //
     598                             subAlarmCount.deviceObjectAlarm.yearAlarm = new Dictionary<int, List<int>>();
     599                     }
     600                     else
     601                     {
     602                         foreach (var it in alarmDeviceTop)
     603                         {
     604                             Object[] obj = (Object[])it;
     605                             if (date == listDate[0]) //
     606                                 subAlarmCount.deviceObjectAlarm.dayAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     607                             if (date == listDate[1]) //
     608                                 subAlarmCount.deviceObjectAlarm.weekAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     609                             if (date == listDate[2]) //
     610                                 subAlarmCount.deviceObjectAlarm.monthAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     611                             if (date == listDate[3]) //
     612                                 subAlarmCount.deviceObjectAlarm.yearAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     613                         }
     614                     }
     615                 }
     616                 //设备类型 top10
     617                 foreach (var date in listDate)  //遍历天、周、月、年
     618                 {
     619                     String sql = String.Format("SELECT t2.b2,sum(a2) as r FROM(SELECT alarm_objectid AS a1,COUNT (*) AS a2 FROM his_alarm WHERE his_alarm.alarm_time > '{0}' And his_alarm.subsys_id ='{1}' GROUP BY alarm_objectid) AS t1,(SELECT object_id AS b1,object_type AS b2 FROM cfg_object_device) AS t2 WHERE t1.a1 = t2.b1 GROUP BY t2.b2 ORDER BY r DESC", date.ToString("yyyy-MM-dd HH:mm:ss"), subsysId.ToString());
     620                     var alarmDeviceTop = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("b2", NHibernateUtil.Int32).AddScalar("r", NHibernateUtil.Int32).SetMaxResults(10).List();
     621                     if (alarmDeviceTop.Count == 0)
     622                     {
     623                         if (date == listDate[0]) //
     624                             subAlarmCount.deviceTypeAlarm.dayAlarm = new Dictionary<int, List<int>>();
     625                         if (date == listDate[1]) //
     626                             subAlarmCount.deviceTypeAlarm.weekAlarm = new Dictionary<int, List<int>>();
     627                         if (date == listDate[2]) //
     628                             subAlarmCount.deviceTypeAlarm.monthAlarm = new Dictionary<int, List<int>>();
     629                         if (date == listDate[3]) //
     630                             subAlarmCount.deviceTypeAlarm.yearAlarm = new Dictionary<int, List<int>>();
     631                     }
     632                     else
     633                     {
     634                         foreach (var it in alarmDeviceTop)
     635                         {
     636                             Object[] obj = (Object[])it;
     637                             if (date == listDate[0]) //
     638                                 subAlarmCount.deviceTypeAlarm.dayAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     639                             if (date == listDate[1]) //
     640                                 subAlarmCount.deviceTypeAlarm.weekAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     641                             if (date == listDate[2]) //
     642                                 subAlarmCount.deviceTypeAlarm.monthAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     643                             if (date == listDate[3]) //
     644                                 subAlarmCount.deviceTypeAlarm.yearAlarm.Add(Convert.ToInt32(obj[0]), new List<int>() { Convert.ToInt32(obj[1]) });
     645                         }
     646                     }
     647                 }
     648                 //子系统
     649                 subAlarmCount.subAlarm.dayAlarm = GetSubThrendAlarmDic(dateList[0], 0);
     650                 subAlarmCount.subAlarm.weekAlarm = GetSubThrendAlarmDic(dateList[1], 1);
     651                 subAlarmCount.subAlarm.monthAlarm = GetSubThrendAlarmDic(dateList[2], 2);
     652                 subAlarmCount.subAlarm.yearAlarm = GetSubThrendAlarmDic(dateList[3], 3);
     653                 return subAlarmCount;
     654             }
     655             catch (Exception ex)
     656             {
     657                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     658                 return null;
     659             }
     660         }
     661         
     662         /// <summary>
     663         /// 设备告警统计
     664         /// </summary>
     665         /// <param name="deviceId"></param>
     666         /// <returns></returns>
     667         public DeviceAlarmCountDTO GetDeviceAlarmCount(int deviceId)
     668         {
     669             try
     670             {
     671                 DeviceAlarmCountDTO deviceAlarmCount = new DeviceAlarmCountDTO()
     672                 {
     673                     deviceObjectAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     674                     levelAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     675                     typeAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() }
     676                 };
     677                 var dateList = GetDeviceDateAlarmList(deviceId);
     678                 //告警等级
     679                 foreach (var date in listDate)
     680                 {
     681                     string sql = String.Format("SELECT t3.a2,SUM(t3.b2)as r FROM(SELECT*FROM(SELECT alarm_code AS a1,alarm_level AS a2 FROM def_type_alarm) AS t1,(SELECT alarm_code AS b1,COUNT (*) AS b2 FROM his_alarm WHERE alarm_time > '{0}' And his_alarm.alarm_objectid ='{1}' GROUP BY alarm_code) AS t2 WHERE t1.a1 = t2.b1) AS t3 GROUP BY t3.a2", date.ToString("yyyy-MM-dd HH:mm:ss"), deviceId.ToString());
     682                     var listRelut = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("a2", NHibernateUtil.Int32).AddScalar("r", NHibernateUtil.Int32).List();
     683                     if (listRelut.Count == 0)
     684                     {
     685                         if (date == listDate[0]) //
     686                             deviceAlarmCount.levelAlarm.dayAlarm = new Dictionary<int, List<int>>();
     687                         if (date == listDate[1]) //
     688                             deviceAlarmCount.levelAlarm.weekAlarm = new Dictionary<int, List<int>>();
     689                         if (date == listDate[2]) //
     690                             deviceAlarmCount.levelAlarm.monthAlarm = new Dictionary<int, List<int>>();
     691                         if (date == listDate[3]) //
     692                             deviceAlarmCount.levelAlarm.yearAlarm = new Dictionary<int, List<int>>();
     693                     }
     694                     else
     695                     {
     696                         foreach (var it in listRelut)
     697                         {
     698                             Object[] obj = (Object[])it;
     699                             if (date == listDate[0])  //
     700                                 deviceAlarmCount.levelAlarm.dayAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });  //告警等级,数量
     701                             if (date == listDate[1])  //
     702                                 deviceAlarmCount.levelAlarm.weekAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });  //告警等级,数量
     703                             if (date == listDate[2])  //
     704                                 deviceAlarmCount.levelAlarm.monthAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });  //告警等级,数量
     705                             if (date == listDate[3])  //
     706                                 deviceAlarmCount.levelAlarm.yearAlarm.Add((int)obj[0], new List<int>() { (int)obj[1] });  //告警等级,数量
     707                         }
     708                     }
     709                 }
     710                 //告警类型趋势
     711                 deviceAlarmCount.typeAlarm.dayAlarm = GetAlarmTypeThrendAlarmDic(dateList[0], 0);
     712                 deviceAlarmCount.typeAlarm.weekAlarm = GetAlarmTypeThrendAlarmDic(dateList[1], 1);
     713                 deviceAlarmCount.typeAlarm.monthAlarm = GetAlarmTypeThrendAlarmDic(dateList[2], 2);
     714                 deviceAlarmCount.typeAlarm.yearAlarm = GetAlarmTypeThrendAlarmDic(dateList[3], 3);
     715                 //设备对象告警趋势
     716                 deviceAlarmCount.deviceObjectAlarm.dayAlarm = GetDeviceObjectThrendAlarmDic(dateList[0], 0);
     717                 deviceAlarmCount.deviceObjectAlarm.weekAlarm = GetDeviceObjectThrendAlarmDic(dateList[1], 1);
     718                 deviceAlarmCount.deviceObjectAlarm.monthAlarm = GetDeviceObjectThrendAlarmDic(dateList[2], 2);
     719                 deviceAlarmCount.deviceObjectAlarm.yearAlarm = GetDeviceObjectThrendAlarmDic(dateList[3], 3);
     720                 return deviceAlarmCount;
     721             }
     722             catch (Exception ex)
     723             {
     724                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     725                 return null;
     726             }
     727         }
     728 
     729         /// <summary>
     730         /// 多个设备的告警统计
     731         /// </summary>
     732         /// <param name="deviceId"></param>
     733         /// <returns></returns>
     734         public DevMultiAlarmCountDTO GetDevMultiAlarmCount(List<int> deviceIdList)
     735         {
     736             try
     737             {
     738                 DevMultiAlarmCountDTO devObjAlarmCount = new DevMultiAlarmCountDTO()
     739                 {
     740                     dev1ObjAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     741                     //dev2ObjAlarm = new ItemAlarmDTO() { dayAlarm = new Dictionary<int, List<int>>(), monthAlarm = new Dictionary<int, List<int>>(), weekAlarm = new Dictionary<int, List<int>>(), yearAlarm = new Dictionary<int, List<int>>() },
     742                 };
     743                 if (deviceIdList.Count == 0)
     744                     return devObjAlarmCount;
     745                 if (deviceIdList.Count == 1)
     746                 {
     747                     var date1List = GetDeviceDateAlarmList(deviceIdList[0]);
     748                     //设备对象告警趋势
     749                     devObjAlarmCount.dev1ObjAlarm.dayAlarm = GetDeviceObjectThrendAlarmDic(date1List[0], 0);
     750                     devObjAlarmCount.dev1ObjAlarm.weekAlarm = GetDeviceObjectThrendAlarmDic(date1List[1], 1);
     751                     devObjAlarmCount.dev1ObjAlarm.monthAlarm = GetDeviceObjectThrendAlarmDic(date1List[2], 2);
     752                     devObjAlarmCount.dev1ObjAlarm.yearAlarm = GetDeviceObjectThrendAlarmDic(date1List[3], 3);
     753                     return devObjAlarmCount;
     754                 }
     755                 //if (deviceIdList.Count == 2)
     756                 //{
     757                 //    var date1List = GetDeviceDateAlarmList(deviceIdList[0]);
     758                 //    //设备对象告警趋势
     759                 //    devObjAlarmCount.dev1ObjAlarm.dayAlarm = GetDeviceObjectThrendAlarmDic(date1List[0], 0);
     760                 //    devObjAlarmCount.dev1ObjAlarm.weekAlarm = GetDeviceObjectThrendAlarmDic(date1List[1], 1);
     761                 //    devObjAlarmCount.dev1ObjAlarm.monthAlarm = GetDeviceObjectThrendAlarmDic(date1List[2], 2);
     762                 //    devObjAlarmCount.dev1ObjAlarm.yearAlarm = GetDeviceObjectThrendAlarmDic(date1List[3], 3);
     763                 //    var date2List = GetDeviceDateAlarmList(deviceIdList[1]);
     764                 //    //设备对象告警趋势
     765                 //    devObjAlarmCount.dev1ObjAlarm.dayAlarm = GetDeviceObjectThrendAlarmDic(date2List[0], 0);
     766                 //    devObjAlarmCount.dev1ObjAlarm.weekAlarm = GetDeviceObjectThrendAlarmDic(date2List[1], 1);
     767                 //    devObjAlarmCount.dev1ObjAlarm.monthAlarm = GetDeviceObjectThrendAlarmDic(date2List[2], 2);
     768                 //    devObjAlarmCount.dev1ObjAlarm.yearAlarm = GetDeviceObjectThrendAlarmDic(date2List[3], 3);
     769                 //    return devObjAlarmCount;
     770                 //}
     771                 return devObjAlarmCount;
     772             }
     773             catch (Exception ex)
     774             {
     775                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     776                 return null;
     777             }
     778         }
     779         #endregion
     780 
     781         #region 整体告警统计
     782         /// <summary>
     783         /// 1整体告警等级统计
     784         /// </summary>
     785         /// <param name="timeType"></param>
     786         /// <returns></returns>
     787         public Dictionary<int, int> AllAlarmLevel(int timeType)
     788         {
     789             try
     790             {
     791                 Dictionary<int, int> dic = new Dictionary<int,int>();
     792                 string sql = String.Format("SELECT t3.a2 AS x,SUM(t3.b2)AS y FROM(SELECT*FROM(SELECT alarm_code AS a1,alarm_level AS a2 FROM def_type_alarm) AS t1,(SELECT alarm_code AS b1,COUNT (*) AS b2 FROM his_alarm WHERE alarm_time > '{0}' GROUP BY alarm_code) AS t2 WHERE t1.a1 = t2.b1) AS t3 GROUP BY t3.a2", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"));
     793                 var listResult = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("x", NHibernateUtil.Int32).AddScalar("y", NHibernateUtil.Int32).List();
     794                 if (listResult.Count == 0)
     795                     return dic;
     796                 foreach (var item in listResult)  //遍历查询到的结果
     797                 {
     798                     Object[] obj = (Object[])item;
     799                     dic.Add((int)obj[0], (int)obj[1]);
     800                 }
     801                 //保证dic中有三个元素
     802                 for (int i = 1; i <= 3; i++)
     803                 {
     804                     if (!dic.Keys.Contains(i))
     805                         dic.Add(i, 0);
     806                 }
     807                 return dic;
     808             }
     809             catch (Exception ex)
     810             {
     811                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     812                 return null;
     813             }
     814         }
     815         /// <summary>
     816         /// 2整体告警子系统统计
     817         /// </summary>
     818         /// <param name="timeType"></param>
     819         /// <returns></returns>
     820         public Dictionary<int, int> AllAlarmSubCount(int timeType)
     821         {
     822             try
     823             {
     824                 Dictionary<int, int> dic = new Dictionary<int, int>();
     825                 string sql = String.Format("SELECT cfg_object_subsystem.object_id AS x,ISNULL(a2, 0)AS y FROM cfg_object_subsystem LEFT JOIN (SELECT subsys_id AS a1,COUNT(subsys_id) AS a2 FROM his_alarm WHERE alarm_time>'{0}' GROUP BY subsys_id)AS t1 ON t1.a1=cfg_object_subsystem.object_id", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"));
     826                 var listResult = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("x", NHibernateUtil.Int32).AddScalar("y", NHibernateUtil.Int32).List();
     827                 if (listResult.Count == 0)
     828                     return dic;
     829                 foreach (var item in listResult)  //遍历查询到的结果
     830                 {
     831                     Object[] obj = (Object[])item;
     832                     dic.Add((int)obj[0], (int)obj[1]);
     833                 }
     834                 //dic集合中有不为0的元素则返回集合
     835                 foreach (var item in dic.Keys)
     836                 {
     837                     if (!(dic[item] == 0))
     838                         return dic;
     839                 }
     840                 return null;
     841             }
     842             catch (Exception ex)
     843             {
     844                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     845                 return null;
     846             }
     847         }
     848         /// <summary>
     849         /// 3整体告警告警类型top10
     850         /// </summary>
     851         /// <param name="timeType"></param>
     852         /// <returns></returns>
     853         public Dictionary<int, int> AllAlarmTypeTop10(int timeType)
     854         {
     855             try
     856             {
     857                 Dictionary<int, int> dic = new Dictionary<int, int>();
     858                 String sql = String.Format("SELECT his_alarm.alarm_code AS x,COUNT(his_alarm.alarm_code)AS y FROM his_alarm WHERE his_alarm.alarm_time>'{0}' GROUP BY alarm_code ORDER BY COUNT(his_alarm.alarm_code) DESC", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"));
     859                 var listResult = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("x", NHibernateUtil.Int32).AddScalar("y", NHibernateUtil.Int32).SetMaxResults(10).List();
     860                 if (listResult.Count == 0)
     861                     return dic;
     862                 foreach (var item in listResult)  //遍历查询到的结果
     863                 {
     864                     Object[] obj = (Object[])item;
     865                     dic.Add((int)obj[0], (int)obj[1]);
     866                 }
     867                 //dic集合中有不为0的元素则返回集合
     868                 foreach (var item in dic.Keys)
     869                 {
     870                     if (!(dic[item] == 0))
     871                         return dic;
     872                 }
     873                 return null;
     874             }
     875             catch (Exception ex)
     876             {
     877                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     878                 return null;
     879             }
     880         }
     881         /// <summary>
     882         /// 4整体告警设备类型top10
     883         /// </summary>
     884         /// <param name="timeType"></param>
     885         /// <returns></returns>
     886         public Dictionary<int, int> AllAlarmDeviceTop10(int timeType)
     887         {
     888             try
     889             {
     890                 Dictionary<int, int> dic = new Dictionary<int, int>();
     891                 String sql = String.Format("SELECT t2.b2 AS x,sum(a2) AS y FROM(SELECT alarm_objectid AS a1,COUNT (*) AS a2 FROM his_alarm WHERE his_alarm.alarm_time > '{0}'GROUP BY alarm_objectid) AS t1,(SELECT object_id AS b1,object_type AS b2 FROM cfg_object_device) AS t2 WHERE t1.a1 = t2.b1 GROUP BY t2.b2 ORDER BY y DESC", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"));
     892                 var listResult = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("x", NHibernateUtil.Int32).AddScalar("y", NHibernateUtil.Int32).SetMaxResults(10).List();
     893                 if (listResult.Count == 0)
     894                     return dic;
     895                 foreach (var item in listResult)  //遍历查询到的结果
     896                 {
     897                     Object[] obj = (Object[])item;
     898                     dic.Add((int)obj[0], (int)obj[1]);
     899                 }
     900                 //dic集合中有不为0的元素则返回集合
     901                 foreach (var item in dic.Keys)
     902                 {
     903                     if (!(dic[item] == 0))
     904                         return dic;
     905                 }
     906                 return null;
     907             }
     908             catch (Exception ex)
     909             {
     910                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     911                 return null;
     912             }
     913         }
     914        /// <summary>
     915        /// 5整体告警模块统计
     916        /// </summary>
     917        /// <param name="timeType"></param>
     918        /// <returns></returns>
     919         public Dictionary<int, int> AllAlarmModuleCount(int timeType)
     920         { 
     921             try
     922             {
     923                 Dictionary<int, int> dic = new Dictionary<int, int>();
     924                 String sql = String.Format("SELECT cfg_object_module.object_id AS x,ISNULL(t2.r, 0)AS y FROM cfg_object_module LEFT JOIN(SELECT t1.a2,SUM(t1.a3) AS r FROM(SELECT alarm_objectid AS a1,(CASE WHEN alarm_objectid IN (SELECT cfg_object_device.object_id FROM cfg_object_device) THEN (SELECT cfg_object_device.parent_id FROM cfg_object_device WHERE cfg_object_device.object_id = alarm_objectid)ELSE alarm_objectid END) AS a2,COUNT (*) AS a3 FROM his_alarm WHERE alarm_time > '{0}' GROUP BY alarm_objectid) AS t1 GROUP BY t1.a2)AS t2 ON t2.a2=cfg_object_module.object_id", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"));
     925                 var listResult = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("x", NHibernateUtil.Int32).AddScalar("y", NHibernateUtil.Int32).List();
     926                 if (listResult.Count == 0)
     927                     return dic;
     928                 foreach (var item in listResult)  //遍历查询到的结果
     929                 {
     930                     Object[] obj = (Object[])item;
     931                     dic.Add((int)obj[0], (int)obj[1]);
     932                 }
     933                 //dic集合中有不为0的元素则返回集合
     934                 foreach (var item in dic.Keys)
     935                 {
     936                     if (!(dic[item] == 0))
     937                         return dic;
     938                 }
     939                 return null;
     940             }
     941             catch (Exception ex)
     942             {
     943                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     944                 return null;
     945             }
     946         }
     947         /// <summary>
     948         /// 6整体告警子系统状态统计
     949         /// </summary>
     950         /// <param name="timeType"></param>
     951         /// <returns></returns>
     952         public Dictionary<int, List<int>> AllAlarmSubStatus(int timeType)
     953         {
     954             try
     955             {
     956                 Dictionary<int, List<int>> dic = new Dictionary<int, List<int>>();
     957                 string sql = String.Format("SELECT cfg_object_subsystem.object_id AS x,ISNULL(t1.a2, 0)AS y1,ISNULL(t1.a3, 0)AS y2,ISNULL(t1.a4, 0)AS y3 FROM cfg_object_subsystem LEFT JOIN(SELECT subsys_id AS a1,COUNT (*) AS a2,COUNT (CASE WHEN status != 3 THEN 1 END) AS a3,COUNT (CASE WHEN status = 3 THEN 1 END) AS a4 FROM his_alarm WHERE alarm_time > '{0}' GROUP BY subsys_id)AS t1 ON t1.a1=cfg_object_subsystem.object_id", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"));
     958                 var listResult = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("x", NHibernateUtil.Int32).AddScalar("y1", NHibernateUtil.Int32).AddScalar("y2", NHibernateUtil.Int32).AddScalar("y3", NHibernateUtil.Int32).List();
     959                 if (listResult.Count == 0)
     960                     return dic;
     961                 foreach (var item in listResult)  //遍历查询到的结果
     962                 {
     963                     Object[] obj = (Object[])item;
     964                     dic.Add((int)obj[0], new List<int>(){(int)obj[1], (int)obj[2], (int)obj[3]});
     965                 }
     966                 //dic集合中有不为0的元素即返回集合
     967                 foreach (var item in dic.Keys)
     968                 {
     969                     if (!(dic[item][0] == 0))
     970                         return dic;
     971                 }
     972                 return null;
     973             }
     974             catch (Exception ex)
     975             {
     976                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
     977                 return null;
     978             }
     979         }
     980         #endregion
     981 
     982         #region 子系统告警统计
     983         /// <summary>
     984         /// 1子系统告警等级统计
     985         /// </summary>
     986         /// <param name="timeType"></param>
     987         /// <returns></returns>
     988         public Dictionary<int, int> SubAlarmLevel(int timeType, int subsysId)
     989         {
     990             try
     991             {
     992                 Dictionary<int, int> dic = new Dictionary<int, int>();
     993                 string sql = String.Format("SELECT t3.a2 AS x,SUM(t3.b2)AS y FROM(SELECT*FROM(SELECT alarm_code AS a1,alarm_level AS a2 FROM def_type_alarm) AS t1,(SELECT alarm_code AS b1,COUNT (*) AS b2 FROM his_alarm WHERE alarm_time > '{0}' And his_alarm.subsys_id ='{1}' GROUP BY alarm_code) AS t2 WHERE t1.a1 = t2.b1) AS t3 GROUP BY t3.a2", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), subsysId.ToString());
     994                 var listResult = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("x", NHibernateUtil.Int32).AddScalar("y", NHibernateUtil.Int32).List();
     995                 if (listResult.Count == 0)
     996                     return dic;
     997                 foreach (var item in listResult)  //遍历查询到的结果
     998                 {
     999                     Object[] obj = (Object[])item;
    1000                     dic.Add((int)obj[0], (int)obj[1]);
    1001                 }
    1002                 //保证dic中有三个元素
    1003                 for (int i = 1; i <= 3; i++)
    1004                 {
    1005                     if (!dic.Keys.Contains(i))
    1006                         dic.Add(i, 0);
    1007                 }
    1008                 return dic;
    1009             }
    1010             catch (Exception ex)
    1011             {
    1012                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
    1013                 return null;
    1014             }
    1015         }
    1016         /// <summary>
    1017         /// 2子系统告警趋势
    1018         /// </summary>
    1019         /// <returns></returns>
    1020         public List<int> SubAlarmTrend(int timeType, int subsysId)
    1021         {
    1022             try
    1023             {
    1024                 List<int> listResult = new List<int>();
    1025                 String sql = String.Format("SELECT his_alarm.alarm_time as dt FROM his_alarm WHERE alarm_time>'{0}' AND subsys_id='{1}'", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), subsysId.ToString());
    1026                 var listReturn = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("dt", NHibernateUtil.DateTime).List<DateTime>();
    1027                 var list = (List<DateTime>)listReturn;
    1028                 if (list.Count == 0)
    1029                     return listResult;
    1030                 switch (timeType)
    1031                 {
    1032                     case 0:
    1033                         DateTime day = listDate[0];//当天开始时间
    1034                         for (int i = 0; i <= DateTime.Now.Hour; i++)  //DateTime.Now.Hour当天的小时数
    1035                         {
    1036                             var hour1 = day.AddHours(i);
    1037                             var hour2 = day.AddHours(i + 1);
    1038                             listResult.Add(list.Count(it => hour1 < it && it <= hour2));
    1039                         }
    1040                         break;
    1041                     case 1:
    1042                         DateTime week = listDate[1];  //本周开始时间
    1043                         int dayshu = DateTime.Now.Day - week.Day + 1;  //本周的第几天
    1044                         for (int i = 0; i < dayshu; i++)
    1045                         {
    1046                             var day1 = week.AddDays(i);
    1047                             var day2 = week.AddDays(i + 1);
    1048                             listResult.Add(list.Count(it => day1 < it && it <= day2));
    1049                         }
    1050                         break;
    1051                     case 2:
    1052                         DateTime month = listDate[2];  //本月开始时间
    1053                         for (int i = 0; i < DateTime.Now.Day; i++)  //DateTime.Now.Day表示该月中的第几天
    1054                         {
    1055                             var day1 = month.AddDays(i);
    1056                             var day2 = month.AddDays(i + 1);
    1057                             listResult.Add(list.Count(it => day1 < it && it <= day2));
    1058                         }
    1059                         break;
    1060                     case 3:
    1061                         DateTime year = listDate[3];  //本年开始时间
    1062                         for (int i = 0; i < DateTime.Now.Month; i++)  //DateTime.Now.Month表示该年中的第几个月
    1063                         {
    1064                             var month1 = year.AddMonths(i);
    1065                             var month2 = year.AddMonths(i + 1);
    1066                             listResult.Add(list.Count(it => month1 < it && it <= month2));
    1067                         }
    1068                         break;
    1069                 }
    1070                 //集合中有不为0的元素则返回集合
    1071                 foreach (var item in listResult)
    1072                 {
    1073                     if (!(item == 0))
    1074                         return listResult;
    1075                 }
    1076                 return null;
    1077             }
    1078             catch (Exception ex)
    1079             {
    1080                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
    1081                 return null;
    1082             }
    1083         }
    1084         /// <summary>
    1085         /// 3子系统告警告警类型top10
    1086         /// </summary>
    1087         /// <param name="timeType"></param>
    1088         /// <param name="subsysId"></param>
    1089         /// <returns></returns>
    1090         public Dictionary<int, int> SubAlarmType10(int timeType, int subsysId)
    1091         {
    1092             try
    1093             {
    1094                 Dictionary<int, int> dic = new Dictionary<int, int>();
    1095                 String sql = String.Format("SELECT his_alarm.alarm_code AS x,COUNT(his_alarm.alarm_code)AS y FROM his_alarm WHERE his_alarm.alarm_time>'{0}' AND his_alarm.subsys_id = '{1}' GROUP BY alarm_code ORDER BY COUNT(his_alarm.alarm_code) DESC", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), subsysId.ToString());
    1096                 var listResult = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("x", NHibernateUtil.Int32).AddScalar("y", NHibernateUtil.Int32).SetMaxResults(10).List();
    1097                 if (listResult.Count == 0)
    1098                     return dic;
    1099                 foreach (var item in listResult)  //遍历查询到的结果
    1100                 {
    1101                     Object[] obj = (Object[])item;
    1102                     dic.Add(Convert.ToInt32(obj[0]), Convert.ToInt32(obj[1]));
    1103                 }
    1104                 foreach (var item in dic.Keys)
    1105                 {
    1106                     if (!(dic[item] == 0))
    1107                         return dic;
    1108                 }
    1109                 return null;
    1110             }
    1111             catch (Exception ex)
    1112             {
    1113                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
    1114                 return null;
    1115             }
    1116         }
    1117         /// <summary>
    1118         /// 4子系统告警设备对象top10
    1119         /// </summary>
    1120         /// <param name="timeType"></param>
    1121         /// <param name="subsysId"></param>
    1122         /// <returns></returns>
    1123         public Dictionary<int, int> SubAlarmDeviceObject10(int timeType, int subsysId)
    1124         {
    1125             try
    1126             {
    1127                 Dictionary<int, int> dic = new Dictionary<int, int>();
    1128                 String sql = String.Format("SELECT t1.a1 AS x,sum(t1.a2) AS y FROM(SELECT alarm_objectid AS a1,COUNT (*) AS a2 FROM his_alarm WHERE his_alarm.alarm_time > '{0}' And his_alarm.subsys_id ='{1}' GROUP BY alarm_objectid) AS t1,(SELECT object_id AS b1 FROM cfg_object_device) AS t2 WHERE t1.a1 = t2.b1 GROUP BY t1.a1 ORDER BY y DESC", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), subsysId.ToString());
    1129                 var listResult = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("x", NHibernateUtil.Int32).AddScalar("y", NHibernateUtil.Int32).SetMaxResults(10).List();
    1130                 if (listResult.Count == 0)
    1131                     return dic;
    1132                 foreach (var item in listResult)  //遍历查询到的结果
    1133                 {
    1134                     Object[] obj = (Object[])item;
    1135                     dic.Add(Convert.ToInt32(obj[0]), Convert.ToInt32(obj[1]));
    1136                 }
    1137                 foreach (var item in dic.Keys)
    1138                 {
    1139                     if (!(dic[item] == 0))
    1140                         return dic;
    1141                 }
    1142                 return null;
    1143             }
    1144             catch (Exception ex)
    1145             {
    1146                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
    1147                 return null;
    1148             }
    1149         }
    1150         /// <summary>
    1151         /// 5子系统告警设备类型top10
    1152         /// </summary>
    1153         /// <param name="timeType"></param>
    1154         /// <param name="subsysId"></param>
    1155         /// <returns></returns>
    1156         public Dictionary<int, int> SubAlarmDeviceType10(int timeType, int subsysId)
    1157         {
    1158             try
    1159             {
    1160                 Dictionary<int, int> dic = new Dictionary<int, int>();
    1161                 String sql = String.Format("SELECT t2.b2 AS x,sum(a2) AS y FROM(SELECT alarm_objectid AS a1,COUNT (*) AS a2 FROM his_alarm WHERE his_alarm.alarm_time > '{0}' And his_alarm.subsys_id ='{1}' GROUP BY alarm_objectid) AS t1,(SELECT object_id AS b1,object_type AS b2 FROM cfg_object_device) AS t2 WHERE t1.a1 = t2.b1 GROUP BY t2.b2 ORDER BY y DESC", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), subsysId.ToString());
    1162                 var listResult = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("x", NHibernateUtil.Int32).AddScalar("y", NHibernateUtil.Int32).SetMaxResults(10).List();
    1163                 if (listResult.Count == 0)
    1164                     return dic;
    1165                 foreach (var item in listResult)  //遍历查询到的结果
    1166                 {
    1167                     Object[] obj = (Object[])item;
    1168                     dic.Add(Convert.ToInt32(obj[0]), Convert.ToInt32(obj[1]));
    1169                 }
    1170                 foreach (var item in dic.Keys)
    1171                 {
    1172                     if (!(dic[item] == 0))
    1173                         return dic;
    1174                 }
    1175                 return null;
    1176             }
    1177             catch (Exception ex)
    1178             {
    1179                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
    1180                 return null;
    1181             }
    1182         }
    1183         /// <summary>
    1184         /// 6子系统告警状态趋势
    1185         /// </summary>
    1186         /// <returns></returns>
    1187         public List<int> SubAlarmStatusTrend(int timeType, int subsysId)
    1188         {
    1189             try
    1190             {
    1191                 List<int> listResult = new List<int>();
    1192                 String sql = String.Format("SELECT his_alarm.alarm_time as dt FROM his_alarm WHERE alarm_time>'{0}' AND subsys_id='{1}'", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), subsysId.ToString());
    1193                 var listAll = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("dt", NHibernateUtil.DateTime).List<DateTime>();
    1194                 var list = (List<DateTime>)listAll;
    1195                 if (listAll.Count == 0)
    1196                     return listResult;
    1197                 String sql2 = String.Format("SELECT his_alarm.alarm_time as dt FROM his_alarm WHERE alarm_time>'{0}' AND subsys_id='{1}' AND his_alarm.status!='3'", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), subsysId.ToString());
    1198                 var listAll2 = alarmDao.GetSession().CreateSQLQuery(sql2).AddScalar("dt", NHibernateUtil.DateTime).List<DateTime>();
    1199                 var list2 = (List<DateTime>)listAll2;
    1200                 switch (timeType)
    1201                 {
    1202                     case 0:
    1203                         DateTime day = listDate[0];//当天开始时间
    1204                         for (int i = 0; i <= DateTime.Now.Hour; i++)  //DateTime.Now.Hour当天的小时数
    1205                         {
    1206                             var hour1 = day.AddHours(i);
    1207                             var hour2 = day.AddHours(i + 1);
    1208                             var count1 = list.Count(it => hour1 < it && it <= hour2);
    1209                             var count2 = list2.Count(it => hour1 < it && it <= hour2);
    1210                             listResult.Add(count1);
    1211                             listResult.Add(count2);
    1212                             listResult.Add(count1-count2);
    1213                         }
    1214                         break;
    1215                     case 1:
    1216                         DateTime week = listDate[1];  //本周开始时间
    1217                         int dayshu = DateTime.Now.Day - week.Day + 1;  //本周的第几天
    1218                         for (int i = 0; i < dayshu; i++)
    1219                         {
    1220                             var day1 = week.AddDays(i);
    1221                             var day2 = week.AddDays(i + 1);
    1222                             var count1 = list.Count(it => day1 < it && it <= day2);
    1223                             var count2 = list2.Count(it => day1 < it && it <= day2);
    1224                             listResult.Add(count1);
    1225                             listResult.Add(count2);
    1226                             listResult.Add(count1 - count2);
    1227                         }
    1228                         break;
    1229                     case 2:
    1230                         DateTime month = listDate[2];  //本月开始时间
    1231                         for (int i = 0; i < DateTime.Now.Day; i++)  //DateTime.Now.Day表示该月中的第几天
    1232                         {
    1233                             var day1 = month.AddDays(i);
    1234                             var day2 = month.AddDays(i + 1);
    1235                             var count1 = list.Count(it => day1 < it && it <= day2);
    1236                             var count2 = list2.Count(it => day1 < it && it <= day2);
    1237                             listResult.Add(count1);
    1238                             listResult.Add(count2);
    1239                             listResult.Add(count1 - count2);
    1240                         }
    1241                         break;
    1242                     case 3:
    1243                         DateTime year = listDate[3];  //本年开始时间
    1244                         for (int i = 0; i < DateTime.Now.Month; i++)  //DateTime.Now.Month表示该年中的第几个月
    1245                         {
    1246                             var month1 = year.AddMonths(i);
    1247                             var month2 = year.AddMonths(i + 1);
    1248                             var count1 = list.Count(it => month1 < it && it <= month2);
    1249                             var count2 = list2.Count(it => month1 < it && it <= month2);
    1250                             listResult.Add(count1);
    1251                             listResult.Add(count2);
    1252                             listResult.Add(count1 - count2);
    1253                         }
    1254                         break;
    1255                 }
    1256                 foreach (var item in listResult)
    1257                 {
    1258                     if (!(item == 0))
    1259                         return listResult;
    1260                 }
    1261                 return null;
    1262             }
    1263             catch (Exception ex)
    1264             {
    1265                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
    1266                 return null;
    1267             }
    1268         }
    1269         #endregion
    1270         
    1271         #region 设备告警统计
    1272         /// <summary>
    1273         /// 1设备告警等级统计
    1274         /// </summary>
    1275         /// <param name="timeType"></param>
    1276         /// <returns></returns>
    1277         public Dictionary<int, int> DevAlarmLevel(int timeType, int deviceId)
    1278         {
    1279             try
    1280             {
    1281                 Dictionary<int, int> dic = new Dictionary<int, int>();
    1282                 string sql = String.Format("SELECT t3.a2 AS x,SUM(t3.b2)AS y FROM(SELECT*FROM(SELECT alarm_code AS a1,alarm_level AS a2 FROM def_type_alarm) AS t1,(SELECT alarm_code AS b1,COUNT (*) AS b2 FROM his_alarm WHERE alarm_time > '{0}' And his_alarm.alarm_objectid ='{1}' GROUP BY alarm_code) AS t2 WHERE t1.a1 = t2.b1) AS t3 GROUP BY t3.a2", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), deviceId.ToString());
    1283                 var listRelut = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("x", NHibernateUtil.Int32).AddScalar("y", NHibernateUtil.Int32).List();
    1284                 if (listRelut.Count == 0)
    1285                     return dic;
    1286                 foreach (var item in listRelut)  //遍历查询到的结果
    1287                 {
    1288                     Object[] obj = (Object[])item;
    1289                     dic.Add((int)obj[0], (int)obj[1]);
    1290                 }
    1291                 //保证dic中有三个元素
    1292                 for (int i = 1; i <= 3; i++)
    1293                 {
    1294                     if (!dic.Keys.Contains(i))
    1295                         dic.Add(i, 0);
    1296                 }
    1297                 return dic;
    1298             }
    1299             catch (Exception ex)
    1300             {
    1301                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
    1302                 return null;
    1303             }
    1304         }
    1305         /// <summary>
    1306         /// 2,4设备告警趋势
    1307         /// </summary>
    1308         /// <returns></returns>
    1309         public List<int> DevAlarmTrend(int timeType, int deviceId)
    1310         {
    1311             try
    1312             {
    1313                 List<int> listResult = new List<int>();
    1314                 String sql = String.Format("SELECT his_alarm.alarm_time AS dt FROM his_alarm WHERE alarm_time>'{0}' AND alarm_objectid='{1}'", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), deviceId.ToString());
    1315                 var listRelut = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("dt", NHibernateUtil.DateTime).List<DateTime>();
    1316                 var list = (List<DateTime>)listRelut;
    1317                 if (list.Count == 0)
    1318                     return listResult;
    1319                 switch (timeType)
    1320                 {
    1321                     case 0:
    1322                         DateTime day = listDate[0];//当天开始时间
    1323                         for (int i = 0; i <= DateTime.Now.Hour; i++)  //DateTime.Now.Hour当天的小时数
    1324                         {
    1325                             var hour1 = day.AddHours(i);
    1326                             var hour2 = day.AddHours(i + 1);
    1327                             listResult.Add(list.Count(it => hour1 < it && it <= hour2));
    1328                         }
    1329                         break;
    1330                     case 1:
    1331                         DateTime week = listDate[1];  //本周开始时间
    1332                         int dayshu = DateTime.Now.Day - week.Day + 1;  //本周的第几天
    1333                         for (int i = 0; i < dayshu; i++)
    1334                         {
    1335                             var day1 = week.AddDays(i);
    1336                             var day2 = week.AddDays(i + 1);
    1337                             listResult.Add(list.Count(it => day1 < it && it <= day2));
    1338                         }
    1339                         break;
    1340                     case 2:
    1341                         DateTime month = listDate[2];  //本月开始时间
    1342                         for (int i = 0; i < DateTime.Now.Day; i++)  //DateTime.Now.Day表示该月中的第几天
    1343                         {
    1344                             var day1 = month.AddDays(i);
    1345                             var day2 = month.AddDays(i + 1);
    1346                             listResult.Add(list.Count(it => day1 < it && it <= day2));
    1347                         }
    1348                         break;
    1349                     case 3:
    1350                         DateTime year = listDate[3];  //本年开始时间
    1351                         for (int i = 0; i < DateTime.Now.Month; i++)  //DateTime.Now.Month表示该年中的第几个月
    1352                         {
    1353                             var month1 = year.AddMonths(i);
    1354                             var month2 = year.AddMonths(i + 1);
    1355                             listResult.Add(list.Count(it => month1 < it && it <= month2));
    1356                         }
    1357                         break;
    1358                 }
    1359                 foreach (var item in listResult)
    1360                 {
    1361                     if (!(item == 0))
    1362                         return listResult;
    1363                 }
    1364                 return null;
    1365             }
    1366             catch (Exception ex)
    1367             {
    1368                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
    1369                 return null;
    1370             }
    1371         }
    1372         /// <summary>
    1373         /// 3设备告警类型趋势
    1374         /// </summary>
    1375         /// <param name="timeType"></param>
    1376         /// <param name="deviceId"></param>
    1377         /// <param name="alarmCode"></param>
    1378         /// <returns></returns>
    1379         public List<int> DevAlarmTypeTrend(int timeType, int deviceId, int alarmCode)
    1380         {
    1381             try
    1382             {
    1383                 List<int> listResult = new List<int>();
    1384                 String sql = String.Format("SELECT his_alarm.alarm_time AS dt FROM his_alarm WHERE alarm_time>'{0}' AND alarm_objectid='{1}' AND alarm_code='{2}'", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), deviceId.ToString(), alarmCode.ToString());
    1385                 var listRelut = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("dt", NHibernateUtil.DateTime).List<DateTime>();
    1386                 var list = (List<DateTime>)listRelut;
    1387                 if (list.Count == 0)
    1388                     return listResult;
    1389                 switch (timeType)
    1390                 {
    1391                     case 0:
    1392                         DateTime day = listDate[0];//当天开始时间
    1393                         for (int i = 0; i <= DateTime.Now.Hour; i++)  //DateTime.Now.Hour当天的小时数
    1394                         {
    1395                             var hour1 = day.AddHours(i);
    1396                             var hour2 = day.AddHours(i + 1);
    1397                             listResult.Add(list.Count(it => hour1 < it && it <= hour2));
    1398                         }
    1399                         break;
    1400                     case 1:
    1401                         DateTime week = listDate[1];  //本周开始时间
    1402                         int dayshu = DateTime.Now.Day - week.Day + 1;  //本周的第几天
    1403                         for (int i = 0; i < dayshu; i++)
    1404                         {
    1405                             var day1 = week.AddDays(i);
    1406                             var day2 = week.AddDays(i + 1);
    1407                             listResult.Add(list.Count(it => day1 < it && it <= day2));
    1408                         }
    1409                         break;
    1410                     case 2:
    1411                         DateTime month = listDate[2];  //本月开始时间
    1412                         for (int i = 0; i < DateTime.Now.Day; i++)  //DateTime.Now.Day表示该月中的第几天
    1413                         {
    1414                             var day1 = month.AddDays(i);
    1415                             var day2 = month.AddDays(i + 1);
    1416                             listResult.Add(list.Count(it => day1 < it && it <= day2));
    1417                         }
    1418                         break;
    1419                     case 3:
    1420                         DateTime year = listDate[3];  //本年开始时间
    1421                         for (int i = 0; i < DateTime.Now.Month; i++)  //DateTime.Now.Month表示该年中的第几个月
    1422                         {
    1423                             var month1 = year.AddMonths(i);
    1424                             var month2 = year.AddMonths(i + 1);
    1425                             listResult.Add(list.Count(it => month1 < it && it <= month2));
    1426                         }
    1427                         break;
    1428                 }
    1429                 foreach (var item in listResult)
    1430                 {
    1431                     if (!(item == 0))
    1432                         return listResult;
    1433                 }
    1434                 return null;
    1435             }
    1436             catch (Exception ex)
    1437             {
    1438                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
    1439                 return null;
    1440             }
    1441         }
    1442         /// <summary>
    1443         /// 5设备告警状态趋势
    1444         /// </summary>
    1445         /// <returns></returns>
    1446         public List<int> DevAlarmStatusTrend(int timeType, int deviceId)
    1447         {
    1448             try
    1449             {
    1450                 List<int> listResult = new List<int>();
    1451                 String sql = String.Format("SELECT his_alarm.alarm_time as dt FROM his_alarm WHERE alarm_time>'{0}' AND alarm_objectid='{1}'", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), deviceId.ToString());
    1452                 var listAll = alarmDao.GetSession().CreateSQLQuery(sql).AddScalar("dt", NHibernateUtil.DateTime).List<DateTime>();
    1453                 var list = (List<DateTime>)listAll;
    1454                 if (listAll.Count == 0)
    1455                     return listResult;
    1456                 String sql2 = String.Format("SELECT his_alarm.alarm_time as dt FROM his_alarm WHERE alarm_time>'{0}' AND alarm_objectid='{1}' AND his_alarm.status!='3'", listDate[timeType].ToString("yyyy-MM-dd HH:mm:ss"), deviceId.ToString());
    1457                 var listAll2 = alarmDao.GetSession().CreateSQLQuery(sql2).AddScalar("dt", NHibernateUtil.DateTime).List<DateTime>();
    1458                 var list2 = (List<DateTime>)listAll2;
    1459                 switch (timeType)
    1460                 {
    1461                     case 0:
    1462                         DateTime day = listDate[0];//当天开始时间
    1463                         for (int i = 0; i <= DateTime.Now.Hour; i++)  //DateTime.Now.Hour当天的小时数
    1464                         {
    1465                             var hour1 = day.AddHours(i);
    1466                             var hour2 = day.AddHours(i + 1);
    1467                             var count1 = list.Count(it => hour1 < it && it <= hour2);
    1468                             var count2 = list2.Count(it => hour1 < it && it <= hour2);
    1469                             listResult.Add(count1);  //总告警数
    1470                             listResult.Add(count2);  //新生成
    1471                             listResult.Add(count1 - count2); //已完成
    1472                         }
    1473                         break;
    1474                     case 1:
    1475                         DateTime week = listDate[1];  //本周开始时间
    1476                         int dayshu = DateTime.Now.Day - week.Day + 1;  //本周的第几天
    1477                         for (int i = 0; i < dayshu; i++)
    1478                         {
    1479                             var day1 = week.AddDays(i);
    1480                             var day2 = week.AddDays(i + 1);
    1481                             var count1 = list.Count(it => day1 < it && it <= day2);
    1482                             var count2 = list2.Count(it => day1 < it && it <= day2);
    1483                             listResult.Add(count1);
    1484                             listResult.Add(count2);
    1485                             listResult.Add(count1 - count2);
    1486                         }
    1487                         break;
    1488                     case 2:
    1489                         DateTime month = listDate[2];  //本月开始时间
    1490                         for (int i = 0; i < DateTime.Now.Day; i++)  //DateTime.Now.Day表示该月中的第几天
    1491                         {
    1492                             var day1 = month.AddDays(i);
    1493                             var day2 = month.AddDays(i + 1);
    1494                             var count1 = list.Count(it => day1 < it && it <= day2);
    1495                             var count2 = list2.Count(it => day1 < it && it <= day2);
    1496                             listResult.Add(count1);
    1497                             listResult.Add(count2);
    1498                             listResult.Add(count1 - count2);
    1499                         }
    1500                         break;
    1501                     case 3:
    1502                         DateTime year = listDate[3];  //本年开始时间
    1503                         for (int i = 0; i < DateTime.Now.Month; i++)  //DateTime.Now.Month表示该年中的第几个月
    1504                         {
    1505                             var month1 = year.AddMonths(i);
    1506                             var month2 = year.AddMonths(i + 1);
    1507                             var count1 = list.Count(it => month1 < it && it <= month2);
    1508                             var count2 = list2.Count(it => month1 < it && it <= month2);
    1509                             listResult.Add(count1);
    1510                             listResult.Add(count2);
    1511                             listResult.Add(count1 - count2);
    1512                         }
    1513                         break;
    1514                 }
    1515                 foreach (var item in listResult)
    1516                 {
    1517                     if (!(item == 0))
    1518                         return listResult;
    1519                 }
    1520                 return null;
    1521             }
    1522             catch (Exception ex)
    1523             {
    1524                 LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
    1525                 return null;
    1526             }
    1527         }
    1528         #endregion
    1529         #endregion
  • 相关阅读:
    JVM源码分析之Object.wait/notify(All)完全解读
    进程无故消失的破案历程
    Jmeter——JDBC Connection Configuration参数化
    Jmeter——CSV DataSet Config参数化
    WeTest明星工具-移动端性能测试PerfDog初探
    基于appium实现的线性代码引用unittest单元测试框架
    Requests实践详解
    Appium-Server与Appium-Desktop的区别
    Appium Python API 中文版
    单元测试框架Uinttest一文详解
  • 原文地址:https://www.cnblogs.com/mathyk/p/9181674.html
Copyright © 2011-2022 走看看