You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
278 lines
9.1 KiB
278 lines
9.1 KiB
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;
|
|
|
|
// }
|
|
// }
|
|
|
|
|
|
//}
|
|
}
|
|
}
|