using DevComponents.DotNetBar.Controls; using PLC_Communication; using PLCConnector; using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Terminal; using Excel = Microsoft.Office.Interop.Excel; namespace centralController { public partial class centralController : Form { /// /// 窗体初始化 /// public centralController() { InitializeComponent(); if (Monitor.Monitor.ins == null) { Monitor.Monitor.ins = new Monitor.Monitor(flowLayoutPanel1.Handle); Monitor.Monitor.ins.Start(); } //进度条测试 Task.Factory.StartNew(() => { int temp = 0; while (true) { if (temp != Monitor.Monitor.initializeState) { temp = Monitor.Monitor.initializeState; progressBar1.Invoke(new Action(() => { progressBar1.Value = temp * 20; })); } if (temp == 5) { dataGridViewX1.Invoke(new Action(() => { RefreshRecords(null, null); })); break; } Thread.Sleep(300); } }); //定时器,定时更新停车记录 System.Windows.Forms.Timer recordsTimer = new System.Windows.Forms.Timer(); recordsTimer.Interval = 5000; recordsTimer.Tick += new EventHandler(RefreshRecords); recordsTimer.Start(); //定时器,定时更新提示信息 System.Windows.Forms.Timer NoteTimer = new System.Windows.Forms.Timer(); NoteTimer.Interval = 1000; NoteTimer.Tick += new EventHandler(UpdateText); NoteTimer.Start(); //定时器,定时更新系统时间与剩余车位数 System.Windows.Forms.Timer freeSpaceTimer = new System.Windows.Forms.Timer(); freeSpaceTimer.Interval = 1000; freeSpaceTimer.Tick += new EventHandler(UpdateFreeSpace); freeSpaceTimer.Start(); UpdateBasicInfo(); tbx_notification.Text = ""; } #region 测试 /// /// 获取号牌测试 /// /// /// private void button1_Click(object sender, EventArgs e) { string ip = textBox1.Text; IPAddress temp; if (IPAddress.TryParse(ip, out temp)) { string license = ""; Task.Factory.StartNew(() => { license = Monitor.Monitor.numMachineLinker.GetLicensePlate(1); if (textBox2.InvokeRequired) { textBox2.Invoke(new Action(() => { textBox2.Text = license; })); } else { textBox2.Text = license; } }); } } #endregion #region 系统 /// /// 结束按钮 /// /// /// private void btn_exit_Click(object sender, EventArgs e) { //DialogResult result = MessageBox.Show("确定退出系统吗?", "温馨提示", MessageBoxButtons.OKCancel); //if (result.Equals(DialogResult.OK)) //{ // Monitor.Monitor.ins.Stop(); // Close(); //} Close(); } #endregion #region 文件 /// /// 打开日志 /// /// /// private void btn_openFile_Click(object sender, EventArgs e) { } /// /// 刷新停车记录按钮 /// /// /// private void btn_refreshRecords_Click(object sender, EventArgs e) { RefreshRecords(null, null); } /// /// 导出停车记录按钮 /// /// /// private void btn_exportRecords_Click(object sender, EventArgs e) { Export(dataGridViewX1, Directory.GetCurrentDirectory() + "\\"); Console.WriteLine(Directory.GetCurrentDirectory() + "\\"); } /// /// 显示与设置收费策略 /// /// /// private void btn_setScheme_Click(object sender, EventArgs e) { Form_paymentScheme form_PaymentScheme = new Form_paymentScheme(); form_PaymentScheme.ShowDialog(); } #endregion #region 视图 /// /// 车位视图 /// /// /// private void btn_parkingSpace_Click(object sender, EventArgs e) { if (bar_mainWin.Visible == false) { bar_mainWin.Visible = true; } if (dci_ParkingSpace.Visible == false) { dci_ParkingSpace.Visible = true; } } /// /// 显示号牌机视图 /// /// /// private void btn_numMachine_Click(object sender, EventArgs e) { if (bar_mainWin.Visible == false) { bar_mainWin.Visible = true; } if (dci_NumMachine.Visible == false) { dci_NumMachine.Visible = true; } } /// /// 支付视图 /// /// /// private void btn_payment_Click(object sender, EventArgs e) { if (bar_mainWin.Visible == false) { bar_mainWin.Visible = true; } if (dci_payment.Visible == false) { dci_payment.Visible = true; } } /// /// 显示测试选项卡 /// /// /// private void btn_test_Click(object sender, EventArgs e) { if (bar_mainWin.Visible == false) { bar_mainWin.Visible = true; } if (dci_Test.Visible == false) { dci_Test.Visible = true; } } /// /// 终端视图 /// /// /// private void btn_terminals_Click(object sender, EventArgs e) { if (bar_side.Visible == false) { bar_side.Visible = true; } if (dci_terminal.Visible == false) { dci_terminal.Visible = true; } } /// /// 停取记录 /// /// /// private void btn_records_Click(object sender, EventArgs e) { if (bar_bottom.Visible == false) { bar_bottom.Visible = true; } if (dci_ParkingRecords.Visible == false) { dci_ParkingRecords.Visible = true; } } #endregion #region 设备 /// /// 手动连接PLC /// /// /// private void btn_linkPLC_Click(object sender, EventArgs e) { if (!Monitor.Monitor.PLC.isConnected) { Monitor.Monitor.PLC.PLCConnect(); } } /// /// PLC数据调试工具 /// /// /// private void btn_PLCConf_Click(object sender, EventArgs e) { FormPLCConf formPLCConf = new FormPLCConf(); formPLCConf.Show(); } /// /// 启动号牌机调试工具 /// /// /// private void btn_numMachineConf_Click(object sender, EventArgs e) { FormModbus form = new FormModbus(); form.Show(); } #endregion /// /// 定时更新提示信息 /// /// /// private void UpdateText(object sender, EventArgs e) { tbx_notification.Text = Monitor.Monitor.GetNotification(); tbx_notification.ScrollToCaret(); } /// /// 定时更新时间与空闲车位显示 /// /// /// private void UpdateFreeSpace(object sender, EventArgs e) { string currentTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string freeSpace = "剩余车位:" + Monitor.Monitor.GetFreeSpaceCount(); string bookableSpace = "可预约车位:" + Monitor.Monitor.GetBookableSpaceCount(); lbx_freeSpace.Text = currentTime + "\r\n" + freeSpace + " " + bookableSpace; } /// /// 刷新停车记录显示 /// /// private void RefreshRecords(object data, EventArgs e) { dataGridViewX1.Rows.Clear(); List list = Monitor.Monitor.GetParkingRecords(); List.Enumerator listEnumer = list.GetEnumerator(); while (listEnumer.MoveNext()) { dataGridViewX1.Rows.Add(listEnumer.Current); } } /// /// 导出excel文件 /// /// /// 绝对路径,"D:\\abc\\xxx.xls" private void Export(DataGridViewX dataGridView1, string path) { try { if (dataGridView1.Rows.Count == 0) { return; } Excel.Application excel = new Excel.Application(); excel.Visible = false; Excel.Workbook workbook = excel.Workbooks.Add(true); Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1]; for (int i = 0; i < dataGridView1.Columns.Count; i++) { if (dataGridView1.Columns[i].Visible == true) { worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText; } } for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { System.Windows.Forms.Application.DoEvents(); for (int j = 0; j < dataGridView1.Columns.Count; j++) { if (dataGridView1.Columns[j].Visible == true) { if (dataGridView1[j, i].ValueType == typeof(string)) { worksheet.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString(); } else { worksheet.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString(); } } } } //设置禁止弹出保存和覆盖的询问提示框 excel.DisplayAlerts = false; excel.AlertBeforeOverwriting = false; worksheet.Cells.Columns.AutoFit(); //保存写入的数据,这里还没有保存到磁盘 workbook.Saved = true; if (Directory.Exists(path)) { //设置新建文件路径及名称 string savePath = path + DateTime.Now.ToString("yyyy-MM-dd") + "停车记录.xls"; //创建文件 FileStream file = new FileStream(savePath, FileMode.CreateNew); //关闭释放流,不然没办法写入数据 file.Close(); file.Dispose(); //保存到指定的路径 workbook.SaveCopyAs(savePath); } workbook.Close(false, Type.Missing, Type.Missing); //确保Excel进程关闭 excel.Quit(); //释放 COM 对象 Marshal.ReleaseComObject(worksheet); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(excel); excel = null; worksheet = null; workbook = null; GC.Collect();//如果不使用这条语,excel会无法正常退出 } catch (Exception e) { Console.WriteLine("导出excel文件异常," + e.Message); } } /// /// 更新基本信息 /// private void UpdateBasicInfo() { //string sysInfo = Monitor.Monitor.GetSysInfo(); //tbx_sysInfo.Text = sysInfo; //tbx_sysInfo.ScrollToCaret(); } /// /// 动态调整号牌机界面 /// /// /// private void flowLayoutPanel1_Resize(object sender, EventArgs e) { Control.ControlCollection flpCC = flowLayoutPanel1.Controls; try { for (int i = 0; i < flpCC.Count; i++) { flpCC[i].Width = (int)(flowLayoutPanel1.Width * 0.3); flpCC[i].Height = (int)(flowLayoutPanel1.Height * 0.49); Console.WriteLine("flp::" + flowLayoutPanel1.Width + "," + flowLayoutPanel1.Height); //Console.WriteLine("tlp--"+flpCC[i].Width + "," + flpCC[i].Height); Control.ControlCollection tlpCC = flpCC[i].Controls; if (tlpCC.Count == 2) { tlpCC[0].Width = flpCC[i].Width - 5; tlpCC[0].Height = (int)(flpCC[i].Height * 0.79); tlpCC[1].Width = flpCC[i].Width - 5; tlpCC[1].Height = (int)(flpCC[i].Height * 0.19); //Console.WriteLine(tlpCC[0].Width + "," + tlpCC[0].Height); //Console.WriteLine(tlpCC[1].Width + "," + tlpCC[1].Height); } } } catch (Exception ex) { Console.WriteLine(ex.Message); } } /// /// 右上角关闭函数 /// /// /// private void centralController_FormClosing(object sender, FormClosingEventArgs e) { DialogResult result = MessageBox.Show("确定退出系统吗?", "温馨提示", MessageBoxButtons.OKCancel); if (result.Equals(DialogResult.OK)) { Monitor.Monitor.ins.Stop(); } else { e.Cancel = true; } } private void btn_sysInfo_Click(object sender, EventArgs e) { FormSysInfo sysInfo = new FormSysInfo(Monitor.Monitor.GetSysInfo()); sysInfo.ShowDialog(); } private void shortcut_sysInfo_Click(object sender, EventArgs e) { FormSysInfo sysInfo = new FormSysInfo(Monitor.Monitor.GetSysInfo()); sysInfo.ShowDialog(); } private void btn_advertUpdate_Click(object sender, EventArgs e) { if (Monitor.Monitor.advertMgr != null) { if (Monitor.Monitor.advertMgr.UpdateAdvert()) MessageBox.Show("更新成功","提示"); else MessageBox.Show("更新失败,请稍后重试", "提示"); } } private void shortcut_close_Click(object sender, EventArgs e) { Close(); } } }