using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; using IntelligentControlForsx.Common; using WisdomClient; using WisdomClient.data; namespace IntelligentControlForsx.MyControls.agc { public partial class LineForm : Form { private string actualDataPoint; public string ActualDataPoint { set { actualDataPoint = value; } get { return actualDataPoint; } } private string setDataPoint; public string SetDataPoint { set { setDataPoint = value; } get { return setDataPoint; } } private string title; public string Title { set { title = value; } get { return title; } } private IList actualDatalist = new List(); private IList setDataList = new List(); private DateTime startTime; private DateTime endTime; private bool isFirstLoad = true; private int? interval = 300; /// /// 窗体初始化方法 /// /// 实发有功测点 /// 有功设定测点 /// 标题 public LineForm(string actualDataPoint, string setDataPoint, string title) { InitializeComponent(); this.ActualDataPoint = actualDataPoint; this.SetDataPoint = setDataPoint; this.title = title; lblTitle.Text = title; startTime = DateTime.Now.AddHours(-2); endTime = DateTime.Now; this.dtStartTime.CustomFormat = "yyyy-MM-dd HH:mm:ss"; this.dtStartTime.Format = DateTimePickerFormat.Custom; this.dtEndTime.CustomFormat = "yyyy-MM-dd HH:mm:ss"; this.dtEndTime.Format = DateTimePickerFormat.Custom; this.dtStartTime.Value = startTime; this.dtEndTime.Value = endTime; isFirstLoad = false; ckbFive.Checked = true; } private void LineForm_Load(object sender, EventArgs e) { chartData.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm"; chartData.Series[0].XValueType = ChartValueType.DateTime; Thread t = new Thread(BindFormThread); t.IsBackground = true; t.Start(); } public void BindFormThread() { this.chartData.BeginInvoke( (Action)delegate { BindDataToForm(); }); } private void chartData_GetToolTipText(object sender, ToolTipEventArgs e) { } private void BindDataToForm() { this.chartData.Series[0].Points.Clear(); this.chartData.Series[1].Points.Clear(); GetData(startTime, endTime); foreach (var td in actualDatalist) { DateTime dt = CommonMethod.ConvertIntDateTime(td.ts); this.chartData.Series[0].Points.AddXY(dt, td.doubleValue.Value); } foreach (var td in setDataList) { DateTime dt = CommonMethod.ConvertIntDateTime(td.ts); this.chartData.Series[1].Points.AddXY(dt, td.doubleValue.Value); } } private void GetData(DateTime startTime, DateTime endTime) { DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); TimeSpan sTime = startTime.Subtract(dtStart); TimeSpan eTime = endTime.Subtract(dtStart); long startTimeLong = long.Parse(sTime.Ticks.ToString().Substring(0, sTime.Ticks.ToString().Length - 4)); long endTimeLong = long.Parse(eTime.Ticks.ToString().Substring(0, eTime.Ticks.ToString().Length - 4)); if (interval == null) { List actualList = RestfulClient.findHistoryRawByTagName(actualDataPoint, startTimeLong, endTimeLong); List setList = RestfulClient.findHistoryRawByTagName(setDataPoint, startTimeLong, endTimeLong); actualDatalist = actualList; setDataList = setList; } else { List actualList = RestfulClient.findHistorySnapByTagName(actualDataPoint, startTimeLong, endTimeLong, interval.Value); List setList = RestfulClient.findHistorySnapByTagName(setDataPoint, startTimeLong, endTimeLong, interval.Value); actualDatalist = actualList; setDataList = setList; } } private void picClose_Click(object sender, EventArgs e) { this.Close(); } private void ckbOne_Click(object sender, EventArgs e) { bool oneMinute = ckbOne.Checked; ckbFive.Checked = false; ckbTen.Checked = false; ckbAll.Checked = false; ckbOne.Checked = true; if (ckbOne.Checked) { ckbOne.Enabled = false; ckbFive.Enabled = true; ckbTen.Enabled = true; ckbAll.Enabled = true; } interval = 60; if (!isFirstLoad) { DateTime sTime = dtStartTime.Value; DateTime eTime = dtEndTime.Value; startTime = sTime; endTime = eTime; Thread t = new Thread(BindFormThread); t.IsBackground = true; t.Start(); } } private void ckbFive_Click(object sender, EventArgs e) { bool fiveMinute = ckbFive.Checked; ckbOne.Checked = false; ckbTen.Checked = false; ckbAll.Checked = false; ckbFive.Checked = true; if (ckbFive.Checked) { ckbOne.Enabled = true; ckbFive.Enabled = false; ckbTen.Enabled = true; ckbAll.Enabled = true; } interval = 300; if (!isFirstLoad) { DateTime sTime = dtStartTime.Value; DateTime eTime = dtEndTime.Value; startTime = sTime; endTime = eTime; Thread t = new Thread(BindFormThread); t.IsBackground = true; t.Start(); } } private void ckbTen_Click(object sender, EventArgs e) { bool tenMinute = ckbTen.Checked; ckbOne.Checked = false; ckbFive.Checked = false; ckbAll.Checked = false; ckbTen.Checked = true; if (ckbTen.Checked) { ckbOne.Enabled = true; ckbFive.Enabled = true; ckbTen.Enabled = false; ckbAll.Enabled = true; } interval = 600; if (!isFirstLoad) { DateTime sTime = dtStartTime.Value; DateTime eTime = dtEndTime.Value; startTime = sTime; endTime = eTime; Thread t = new Thread(BindFormThread); t.IsBackground = true; t.Start(); } } private void ckbAll_Click(object sender, EventArgs e) { bool all = ckbAll.Checked; ckbOne.Checked = false; ckbFive.Checked = false; ckbAll.Checked = true; ckbTen.Checked = false; if (ckbAll.Checked) { ckbOne.Enabled = true; ckbFive.Enabled = true; ckbTen.Enabled = true; ckbAll.Enabled = false; } interval = null; if (!isFirstLoad) { DateTime sTime = dtStartTime.Value; DateTime eTime = dtEndTime.Value; startTime = sTime; endTime = eTime; Thread t = new Thread(BindFormThread); t.IsBackground = true; t.Start(); } } private void dtStartTime_ValueChanged(object sender, EventArgs e) { if (!isFirstLoad) { DateTime sTime = dtStartTime.Value; DateTime eTime = dtEndTime.Value; startTime = sTime; endTime = eTime; Thread t = new Thread(BindFormThread); t.IsBackground = true; t.Start(); } } private void dtEndTime_ValueChanged(object sender, EventArgs e) { if (!isFirstLoad) { DateTime sTime = dtStartTime.Value; DateTime eTime = dtEndTime.Value; startTime = sTime; endTime = eTime; Thread t = new Thread(BindFormThread); t.IsBackground = true; t.Start(); } } private void btnExport_Click(object sender, EventArgs e) { string path = SelectPath(); ExportToCSV(path, Title, actualDatalist, setDataList); MessageBox.Show("导出成功"); } private string SelectPath() //弹出一个选择目录的对话框 { FolderBrowserDialog path = new FolderBrowserDialog(); path.ShowDialog(); return path.SelectedPath; } private void ExportToCSV(string filePath, string fileName, IList actualList, IList setList) //filePath为保存到本地磁盘的位置 { string filePathOne = System.IO.Path.Combine(filePath, fileName + ".csv"); FileStream fs = System.IO.File.Create(filePathOne); StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8); string col_txt = ""; string row_txt = ""; col_txt = "实发有功,时间戳,有功设定,时间戳"; sw.WriteLine(col_txt);//写入更改 int index = 0; if (actualList.Count > setList.Count) index = actualList.Count; else index = setList.Count; for (int i = 0; i < index; i++) { row_txt = "";//容易漏写,造成数据的重复写入 if (actualList.Count > i) { DateTime dt = CommonMethod.ConvertIntDateTime(actualList[i].ts); row_txt = row_txt + actualList[i].getValue() + "," + dt.ToString("yyyy-MM-dd HH:mm:ss") + ","; } else { row_txt =row_txt + ", ,"; } if (setList.Count > i) { DateTime dt = CommonMethod.ConvertIntDateTime(setList[i].ts); row_txt = row_txt + setList[i].getValue() + "," + dt.ToString("yyyy-MM-dd HH:mm:ss") + ","; } else { row_txt = row_txt +", ,"; } sw.WriteLine(row_txt);//写入更改 } sw.Flush(); //此处必须有此操作 } } }