using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DBFactory; namespace wcfControlMonitorClient { public partial class FrmBrowseActivation : Form { private static FrmBrowseActivation _formInstance; public static FrmBrowseActivation FormInstance { get { if (_formInstance == null) { _formInstance = new FrmBrowseActivation(); } return _formInstance; } set { _formInstance = value; } } DBOperator dbo = CStaticClass.dbo; DataSet ds = new DataSet();//20161121 public FrmBrowseActivation() { InitializeComponent(); this.dtPickerStartDate.Value = DateTime.Today; _formInstance = this; } public void SearchActivation() //20161121 { //DateTime BeginTime = dateTimePickerBegin.Value.ToUniversalTime(); //DateTime EndTime = dateTimePickerBegin.Value.AddDays(1).ToUniversalTime(); chart1.Series["Series1"].Points.Clear(); chart1.Series["Series3"].Points.Clear(); string searchstr = string.Empty; string searchkind=this.comboBox_SearchKind.Text.Trim(); string searkey=textBox_SearchKeyWord.Text.Trim(); string title = "系统故障时间柱形图"; if (searchkind.Length != 0 && this.textBox_SearchKeyWord.Text.Trim().Length != 0) { if (searchkind == "设备索引") { searchkind = "T_Base_Device_Error_Log.F_DeviceIndex"; } title = string.Format("{0}故障时间柱形图",searkey); searchstr = string.Format(" And {0} like '%{1}%'",searchkind,searkey ); } if (cbStopAlarm.Checked) { searchstr = string.Format("{0} And ( F_ErrorIndex != 2 and F_ErrorIndex != 41 )", searchstr); } int groupcount = 24; DateTime selectday=dtPickerStartDate.Value.Date;//选择的日期 DateTime taday=DateTime.Now.Date; int nowhour =DateTime.Now.Hour; if (taday == selectday) { groupcount = nowhour + 1; } else if (taday < selectday) { return; } string BeginTime = dtPickerStartDate.Value.ToString("yyyy-MM-dd HH:mm:ss"); string EndTime = dtPickerStartDate.Value.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss"); string sql = string.Format("SELECT * FROM T_Base_Device_Error_Log,T_Base_Device WHERE T_Base_Device_Error_Log.F_DeviceIndex= T_Base_Device.F_DeviceIndex and ((F_DateTime < '{0}' and F_End_DateTime >= '{0}') or (F_DateTime >= '{0}' and F_DateTime < '{1}')) {2} and F_WorkArea like '%{3}%' order by F_DateTime", BeginTime, EndTime, searchstr, CStaticClass.UserArea);//F_WorkArea like '%{0}%' and {1}", CStaticClass.UserArea ds = dbo.ExceSQL(sql); DataTable dt = ds.Tables[0];//取得当天相关故障记录 int count = dt.Rows.Count; DateTime bhour = Convert.ToDateTime(BeginTime);//这个小时的开始时间 DateTime ehour = Convert.ToDateTime(BeginTime).AddHours(1);//这个小时的结束时间 DataTable[] hourRecords = new DataTable[groupcount]; int[] minutes = new int[groupcount]; // string [] hours = new string[groupcount]; int [] hours = new int [groupcount]; int minvalue=60; double[] percent = new double[groupcount]; for (int i = 0; i < groupcount; i++)//循环查找当前一个小时 { hourRecords[i] = OneHourAlarmRecordsSort(dt, bhour, ehour); bhour = Convert.ToDateTime(bhour).AddHours(1); ehour = Convert.ToDateTime(ehour).AddHours(1); //hours[i] = string.Format("{0}",i + 1); hours[i] = i + 1; } for (int i = 0; i < groupcount; i++) { OneHourAlarmRecordsCombine(hourRecords[i], out minutes[i]); percent[i] = Convert.ToDouble((minvalue - minutes[i]) * 100 / 60); } //chart1.Series["Series1"].Points.Clear(); chart1.Series["Series1"].Points.DataBindXY(hours, minutes); //chart1.Series["Series3"].Points.Clear(); chart1.Series["Series3"].Label = "#VALY%"; chart1.Series["Series3"].Points.DataBindXY(hours, percent); } public DataTable OneHourAlarmRecordsSort(DataTable dt, DateTime HourBeginTime, DateTime HourEndTime) //20161121 {//掐头去尾操作 DataTable datatable = new DataTable(); datatable = dt.Clone(); int count = dt.Rows.Count; DateTime btime, etime; DataRow dr; for (int i = 0; i < count; i++) { btime = Convert.ToDateTime(dt.Rows[i]["F_DateTime"]); if (string.IsNullOrEmpty(dt.Rows[i]["F_End_DateTime"].ToString())) { etime = DateTime.Now; } else { etime = Convert.ToDateTime(dt.Rows[i]["F_End_DateTime"]); } if (btime >= HourEndTime) { break; } if (etime < HourBeginTime) { continue; } if (btime < HourBeginTime) { btime = HourBeginTime; } if (etime >= HourEndTime) { etime = HourEndTime; } dr = datatable.NewRow(); dr[0] = dt.Rows[i][0]; dr[1] = dt.Rows[i][1]; dr[2] = dt.Rows[i][2]; dr[3] = dt.Rows[i][3]; dr["F_DateTime"] = btime; dr["F_End_DateTime"] = etime; datatable.Rows.Add(dr); } return datatable; } public DataTable OneHourAlarmRecordsCombine(DataTable dt, out int minutes) //20161121 { DataTable datatable = new DataTable(); datatable = dt.Clone(); int count = dt.Rows.Count; DateTime lastbtime, lastetime, newbtime, newetime; DataRow dr; TimeSpan ts; int addseconds = 0; for (int i = 0; i < count; i++) { if (i == 0) { newbtime = Convert.ToDateTime(dt.Rows[i]["F_DateTime"]); newetime = Convert.ToDateTime(dt.Rows[i]["F_End_DateTime"]); dr = datatable.NewRow(); dr["F_DateTime"] = newbtime; dr["F_End_DateTime"] = newetime; datatable.Rows.Add(dr); ts = newetime - newbtime; addseconds += Convert.ToInt32(ts.TotalSeconds); } else { int newcount = datatable.Rows.Count - 1; lastbtime = Convert.ToDateTime(datatable.Rows[newcount]["F_DateTime"]); lastetime = Convert.ToDateTime(datatable.Rows[newcount]["F_End_DateTime"]); newbtime = Convert.ToDateTime(dt.Rows[i]["F_DateTime"]); newetime = Convert.ToDateTime(dt.Rows[i]["F_End_DateTime"]); if (newbtime < lastetime) { newbtime = lastetime; } if (newbtime < newetime) { dr = datatable.NewRow(); dr["F_DateTime"] = newbtime; dr["F_End_DateTime"] = newetime; datatable.Rows.Add(dr); ts = newetime - newbtime; addseconds += Convert.ToInt32(ts.TotalSeconds); } } } minutes = addseconds / 60; if (addseconds % 60 != 0) { minutes++; } return datatable; } private void btSearch_Click(object sender, EventArgs e) { SearchActivation(); } //private void comboBox_SearchKind_SelectedIndexChanged(object sender, EventArgs e) //{ // if (comboBox_SearchKind.Text.Trim().Length != 0) // { // if (comboBox_SearchKind.Text.Trim().ToString() == "设备索引") // { // string sql = "select F_DeviceIndex,F_DeviceName from T_Base_Device where F_DeviceKindIndex<=6 "; // DataView dwAllDeviceInfo = dbo.ExceSQL(sql).Tables[0].DefaultView; // } // } //} } }