123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484 |
- 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;
- }
- }
- }
- /// <summary>
- /// 动态创建界面菜单对象
- /// </summary>
- private void InitRibbonPage()
- {
- try
- {
- //20220307 记录当前用户名、groupId
- MoAuthoryUser user = BLLFactory<BlAuthoryUser>.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();
- }
- }
- }
- }
- }
- /// <summary>
- /// 登录验证
- /// </summary>
- 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);
- }
- /// <summary>
- /// 退出系统
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void barBtnItem_Quit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
- {
- this.Close();
- }
- /// <summary>
- /// 重新登录
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- 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();
- }
- /// <summary>
- /// 修改密码
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- 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);
- }
- }
- /// <summary>
- /// OPC重新连接
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- 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()));
- }
- }
- /// <summary>
- /// OPC 断开
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- 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()));
- }
- }
- /// <summary>
- /// 最小化托盘退出
- /// </summary>
- /// <param name = "sender" ></ param >
- /// < param name="e"></param>
- private void menu_Exit_Click(object sender, EventArgs e)
- {
- this.Close();
- }
- /// <summary>
- /// 窗口大小发生变化时发生
- /// </summary>
- /// <param name = "sender" ></ param >
- /// < param name="e"></param>
- private void MainForm_Resize(object sender, EventArgs e)
- {
- //ToDo:窗口最小化到托盘
- //if (this.WindowState == FormWindowState.Minimized)
- //{
- // this.Visible = false;
- // this.notifyIcon1.Visible = true;
- //}
- }
- /// <summary>
- /// 托盘鼠标双击事件
- /// </summary>
- /// <param name = "sender" ></ param >
- /// < param name="e"></param>
- 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;
- }
- }
- /// <summary>
- /// 订阅系统提示消息
- /// </summary>
- private void SysSubscribeEvent()
- {
- string channel = SysEnvironment.SystemMessage;
- redis.Subscribe(channel, new Action<RedisChannel, RedisValue>(InsertSysMessage));
- string channel2 = SysEnvironment.UserOperateState;
- redis.Subscribe(channel2, new Action<RedisChannel, RedisValue>(RefreshUserState));
- }
- public delegate void delegateResetVertify();
- public static event delegateResetVertify eventUserIdle;
- /// <summary>
- /// 刷新用户操作状态
- /// </summary>
- /// <param name="channel"></param>
- /// <param name="message"></param>
- 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");
- }
- }
- ///// <summary>
- ///// 刷新用户状态,如果空闲则关闭权限窗口
- ///// </summary>
- //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");
- // }
- //}
- /// <summary>
- /// 发布时插入数据库
- /// </summary>
- /// <param name="channel"></param>
- /// <param name="message"></param>
- 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<BlSystemNotice>.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;
- }
- }
- }
- }
|