using System; using System.Net; using System.Management; using System.Drawing; using System.Windows.Forms; using DevExpress.XtraTabbedMdi; using StackExchange.Redis; using ProjectBase.Controls; using ProjectBase.Data.Logs; using ProjectBase.Data.Redis; using ProjectBase.Data.BaseDAL; using ProjectBase.Util; using SIMDP.BLL; using SIMDP.Model; using SIMDP.View; using System.Reflection; namespace SIMDP.Project { public partial class MainForm : DevExpress.XtraBars.Ribbon.RibbonForm { //用来第一次创建动态菜单 private RibbonPageHelper ribbonHelper = null; private delegate void messageDelegate(); private NotifyWindow notifyWindow = null; SchedulerHelper task = new SchedulerHelper(); private RedisHelper redis = new RedisHelper(0); UserIdleStatusHelper activityMonitor = new UserIdleStatusHelper(300000);//获取用户空闲状态类 public MainForm() { InitializeComponent(); DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle("Office 2019 Colorful");//设置主题样式 } private void MainForm_Load(object sender, EventArgs e) { //ToDo:最小化托盘显示 this.notifyIcon1.Visible = true; this.ribbonControl.Minimized = true; task.Start(); GetIpMac(); this.label_Version.Caption = "当前版本号:" + System.Configuration.ConfigurationManager.AppSettings["Version"]; string defaultUser = System.Configuration.ConfigurationManager.AppSettings["DefaultUser"]; if (defaultUser != null && defaultUser != "") { SysEnvironment.CurrentLoginID = defaultUser; //默认登录用户 ////开启XX窗口 //FormCurrentTask form = new FormCurrentTask(); //form.MdiParent = this; //form.Show(); } else { LogIn(); } InitRibbonPage(); SysSubscribeEvent(); barButtonItemReset_ItemClick(this, null); // 刷卡登录界面 //FormSwipeToLogin form = new FormSwipeToLogin(); //form.Show(); //开启XX窗口 FormCurrentTask form = new FormCurrentTask(); form.MdiParent = this; form.Show(); //获取用户操作状态 activityMonitor.Start(); redis.Publish(SysEnvironment.UserOperateState, ""); } private void GetIpMac() { //获取本机的IP地址和MAC地址 IPAddress[] ipadrlist = Dns.GetHostAddresses(Dns.GetHostName()); string ip = null; foreach (IPAddress item in ipadrlist) { if (item.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { ip = SysEnvironment.Ip = item.ToString(); } } string mac = null; ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { if ((bool)mo["IPEnabled"] == true) { mac = SysEnvironment.Mac = mo["MacAddress"].ToString(); break; } } } /// /// 动态创建界面菜单对象 /// private void InitRibbonPage() { try { //20220307 记录当前用户名、groupId MoAuthoryUser user = BLLFactory.Instance.FindByID(SysEnvironment.CurrentLoginID); SysEnvironment.CurrentLoginName = user.UserName; SysEnvironment.CurrentLoginGroupId = user.GroupId; this.barStaticItem_User.Caption = string.Format("{0}", user.UserName); //动态创建界面菜单对象(防止重复构建) if (ribbonHelper == null) { ribbonHelper = new RibbonPageHelper(this, ref this.ribbonControl); ribbonHelper.AddPages(); } } catch (Exception ex) { DevExpress.XtraEditors.XtraMessageBox.Show("获取该用户权限失败。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); LogHelper.log.Error(string.Format("初始化界面菜单出现错误:{0}", ex.ToString())); } } private void xtraTabbedMdiManager1_MouseDown(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Right) return; DevExpress.XtraTab.ViewInfo.BaseTabHitInfo hi = xtraTabbedMdiManager1.CalcHitInfo(new Point(e.X, e.Y)); if (hi.HitTest == DevExpress.XtraTab.ViewInfo.XtraTabHitTest.PageHeader) { popupMenu1.ShowPopup(Cursor.Position); } } private void pop_CloseCurrent_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { XtraMdiTabPage page = xtraTabbedMdiManager1.SelectedPage; if (page != null && page.MdiChild != null) { page.MdiChild.Close(); } } private void pop_CloseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { foreach (Form form in this.MdiChildren) { form.Close(); if (form != null && !form.IsDisposed) { form.Dispose(); } } } private void pop_CloseOther_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { XtraMdiTabPage selectedPage = xtraTabbedMdiManager1.SelectedPage; Type currentType = selectedPage.MdiChild.GetType(); for (int i = xtraTabbedMdiManager1.Pages.Count - 1; i >= 0; i--) { XtraMdiTabPage page = xtraTabbedMdiManager1.Pages[i]; if (page != null && page.MdiChild != null) { Form form = page.MdiChild; if (form.GetType() != currentType) { form.Close(); if (form != null && !form.IsDisposed) { form.Dispose(); } } } } } /// /// 登录验证 /// private void LogIn() { Assembly asmb = Assembly.LoadFrom("SIMDP.View.dll"); Type type = asmb.GetType("SIMDP.View.FormLogIn"); // Type type = Type.GetType("SIMDP.View.FormLogIn"); FormLogIn logIn = ChildWinManagement.LoadMdiForm(this, type) as FormLogIn; this.xtraTabbedMdiManager1.Pages[0].ShowCloseButton = DevExpress.Utils.DefaultBoolean.False; logIn.myRefresh += new FormLogIn.refresh(InitRibbonPage); } /// /// 退出系统 /// /// /// private void barBtnItem_Quit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.Close(); } /// /// 重新登录 /// /// /// private void barBtnItem_ReLogIn_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { SysEnvironment.CurrentLoginID = null; SysEnvironment.passWordMD5 = null; this.barStaticItem_User.Caption = "欢迎登录"; pop_CloseAll_ItemClick(sender, e); this.ribbonControl.Pages.Clear(); ribbonHelper = null; LogIn(); } /// /// 修改密码 /// /// /// private void barBtnItem_EditPassWord_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { FormChangePassWord passWord = new FormChangePassWord(); passWord.ShowDialog(); if (passWord.DialogResult == DialogResult.OK) { barBtnItem_ReLogIn_ItemClick(sender, e); } } /// /// OPC重新连接 /// /// /// private void barButtonItemReset_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { try { PlcHelper.Instance.Connect(); //Thread.Sleep(5000); if (e != null) DevExpress.XtraEditors.XtraMessageBox.Show("重新连接设备"); } catch (Exception ex) { DevExpress.XtraEditors.XtraMessageBox.Show("重新连接设备失败\n" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); LogHelper.log.Error(string.Format("重新连接设备失败:{0}", ex.ToString())); } } /// /// OPC 断开 /// /// /// private void barButtonItemCancle_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { try { PlcHelper.Instance.Close(); DevExpress.XtraEditors.XtraMessageBox.Show("设备连接已断开"); } catch (Exception ex) { DevExpress.XtraEditors.XtraMessageBox.Show("设备连接断开失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); LogHelper.log.Error(string.Format("设备连接断开失败:{0}", ex.ToString())); } } /// /// 最小化托盘退出 /// /// /// < param name="e"> private void menu_Exit_Click(object sender, EventArgs e) { this.Close(); } /// /// 窗口大小发生变化时发生 /// /// /// < param name="e"> private void MainForm_Resize(object sender, EventArgs e) { //ToDo:窗口最小化到托盘 //if (this.WindowState == FormWindowState.Minimized) //{ // this.Visible = false; // this.notifyIcon1.Visible = true; //} } /// /// 托盘鼠标双击事件 /// /// /// < param name="e"> private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { this.Visible = true; this.WindowState = FormWindowState.Maximized; this.Show(); this.Activate(); } private void menu_Hide_Click(object sender, EventArgs e) { this.Hide(); } private void menu_Open_Click(object sender, EventArgs e) { notifyIcon1_MouseDoubleClick(sender, null); } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { if (DevExpress.XtraEditors.XtraMessageBox.Show("您确定要退出吗?", "新松智能制造数据平台", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { FormUserVerification form = new FormUserVerification(); //form.ShowDialog(); //if (form.DialogResult != DialogResult.OK) //{ // DevExpress.XtraEditors.XtraMessageBox.Show("用户验证失败。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); // e.Cancel = true; //} task.Stop(); redis.UnsubscribeAll(); } else { e.Cancel = true; } } /// /// 订阅系统提示消息 /// private void SysSubscribeEvent() { string channel = SysEnvironment.SystemMessage; redis.Subscribe(channel, new Action(InsertSysMessage)); string channel2 = SysEnvironment.UserOperateState; redis.Subscribe(channel2, new Action(RefreshUserState)); } public delegate void delegateResetVertify(); public static event delegateResetVertify eventUserIdle; /// /// 刷新用户操作状态 /// /// /// private void RefreshUserState(RedisChannel channel, RedisValue message) { if (InvokeRequired) { BeginInvoke(new Action(() => { RefreshUserState(channel,message); })); return; } if (activityMonitor.IsIdle) { this.barStaticItem_Idle.Caption = "空闲"; this.barStaticItem_Idle.ImageOptions.Image = Image.FromFile(Application.StartupPath + @"\Images\greenball.png"); if (eventUserIdle != null)//未绑定时不会分配内存(功能界面打开才绑定),所以必须校验非null eventUserIdle();//触发权限超时事件 } else { this.barStaticItem_Idle.Caption = "忙碌"; this.barStaticItem_Idle.ImageOptions.Image = Image.FromFile(Application.StartupPath + @"\Images\redball.png"); } } ///// ///// 刷新用户状态,如果空闲则关闭权限窗口 ///// //private void RefreshState() //{ // if (activityMonitor.IsIdle) // { // this.barStaticItem_Idle.Caption = "空闲"; // this.barStaticItem_Idle.ImageOptions.Image = Image.FromFile(Application.StartupPath + @"\Images\greenball.png"); // //close the UI that require authentication // foreach (Form form in this.MdiChildren) // { // if (form.GetType() == typeof(FormBarcodeManualEntry)) // { // form.Close(); // form.Dispose(); // Device.AlarmHelper.LogAndNotice("提示", 1, "当前用户无操作,已退出权限功能界面"); // } // } // } // else // { // this.barStaticItem_Idle.Caption = "忙碌"; // this.barStaticItem_Idle.ImageOptions.Image = Image.FromFile(Application.StartupPath + @"\Images\redball.png"); // } //} /// /// 发布时插入数据库 /// /// /// private void InsertSysMessage(RedisChannel channel, RedisValue message) { try { string[] arr = message.ToString().Split('|'); MoSystemNotice mo = new MoSystemNotice(); mo.NoticeTitle = arr[0]; mo.NoticeType = Convert.ToInt32(arr[1]); mo.NoticeContent = arr[2]; mo.NoticeTime = Convert.ToDateTime(arr[3]); mo.NoticeSign = Convert.ToBoolean(arr[4]); BLLFactory.Instance.Insert(mo); if (this.InvokeRequired) { messageDelegate mes = new messageDelegate(ShowSysMessage); this.Invoke(mes, null); } else { ShowSysMessage(); } } catch (Exception ex) { LogHelper.log.Error("显示订阅系统提示信息 出现错误" + ex); } } //显示系统消息提示框 private void ShowSysMessage() { if (notifyWindow == null || notifyWindow.IsDisposed) { notifyWindow = new NotifyWindow("系统提示信息", ""); notifyWindow.SetDimensions(600, 200); notifyWindow.WaitTime = 50; notifyWindow.Notify(); } else { notifyWindow.Activate(); notifyWindow.RefreshWindow(); return; } } } }