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 >
/// < param name="e">
private void menu_Exit_Click(object sender, EventArgs e)
{
this.Close();
}
///
/// 窗口大小发生变化时发生
///
/// param >
/// < 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 >
/// < 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;
}
}
}
}