宜昌华友成品
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.

263 lines
8.6 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 = "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();
}
}
}