MainForm.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. using ProjectBase.Controls;
  5. using DevExpress.XtraTabbedMdi;
  6. using ProjectBase.Data.Logs;
  7. using SIMDP.Util;
  8. using System.Net;
  9. using System.Management;
  10. using SIMDP.BLL;
  11. using ProjectBase.Data.Redis;
  12. using StackExchange.Redis;
  13. using SIMDP.Model;
  14. using ProjectBase.Data.BaseDAL;
  15. using SIMDP.Project;
  16. namespace SIMDP
  17. {
  18. public partial class MainForm : DevExpress.XtraBars.Ribbon.RibbonForm
  19. {
  20. //用来第一次创建动态菜单
  21. private SIMDP.RibbonPageHelper.RibbonPageHelper ribbonHelper = null;
  22. private delegate void messageDelegate();
  23. private NotifyWindow notifyWindow = null;
  24. Scheduler task = new Scheduler();
  25. private RedisHelper redis = new RedisHelper(0);
  26. public MainForm()
  27. {
  28. InitializeComponent();
  29. }
  30. private void MainForm_Load(object sender, EventArgs e)
  31. {
  32. //ToDo:最小化托盘显示
  33. this.notifyIcon1.Visible = true;
  34. this.ribbonControl.Minimized = false;//菜单展开
  35. task.Schedule();
  36. GetIpMac();
  37. this.label_Version.Caption = "当前版本号:" + System.Configuration.ConfigurationManager.AppSettings["Version"];
  38. string defaultUser = System.Configuration.ConfigurationManager.AppSettings["DefaultUser"];
  39. if (defaultUser != null && defaultUser != "")
  40. {
  41. SysEnvironment.CurrentLoginID = defaultUser; ///默认登录用户
  42. //开启规则窗口
  43. //FormLogIn form = new FormLogIn();
  44. //form.MdiParent = this;
  45. //form.Show();
  46. //开启XX窗口
  47. //FormMonitorNode form = new FormMonitorNode();
  48. //form.MdiParent = this;
  49. //form.Show();
  50. LogIn();
  51. SysSubscribeEvent();
  52. barButtonItemReset_ItemClick(this, null);
  53. }
  54. else
  55. {
  56. LogIn();
  57. SysSubscribeEvent();
  58. barButtonItemReset_ItemClick(this, null);
  59. }
  60. //FormSwipeToLogin form = new FormSwipeToLogin();
  61. //form.Show();
  62. }
  63. private void GetIpMac()
  64. {
  65. //获取本机的IP地址和MAC地址
  66. IPAddress[] ipadrlist = Dns.GetHostAddresses(Dns.GetHostName());
  67. string ip = null;
  68. foreach (IPAddress item in ipadrlist)
  69. {
  70. if (item.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
  71. {
  72. ip = SysEnvironment.Ip = item.ToString();
  73. }
  74. }
  75. string mac = null;
  76. ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
  77. ManagementObjectCollection moc = mc.GetInstances();
  78. foreach (ManagementObject mo in moc)
  79. {
  80. if ((bool)mo["IPEnabled"] == true)
  81. {
  82. mac = SysEnvironment.Mac = mo["MacAddress"].ToString();
  83. break;
  84. }
  85. }
  86. }
  87. /// <summary>
  88. /// 动态创建界面菜单对象
  89. /// </summary>
  90. private void InitRibbonPage()
  91. {
  92. try
  93. {
  94. //BlAuthoryUser blUser = new BlAuthoryUser();
  95. //BlRoleRight blRoleRight = new BlRoleRight();
  96. //MoAuthoryUser user = BLLFactory<BlAuthoryUser>.Instance.FindByID(SysEnvironment.CurrentLoginID);
  97. this.barStaticItem_User.Caption = string.Format("{0},欢迎登录", SysEnvironment.CurrentLoginName);
  98. //动态创建界面菜单对象(防止重复构建)
  99. if (ribbonHelper == null)
  100. {
  101. ribbonHelper = new SIMDP.RibbonPageHelper.RibbonPageHelper(this, ref this.ribbonControl);
  102. ribbonHelper.AddPages();
  103. }
  104. }
  105. catch (Exception ex)
  106. {
  107. DevExpress.XtraEditors.XtraMessageBox.Show("获取该用户权限失败。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  108. LogHelper.log.Error(string.Format("初始化界面菜单出现错误:{0}", ex.ToString()));
  109. }
  110. }
  111. private void xtraTabbedMdiManager1_MouseDown(object sender, MouseEventArgs e)
  112. {
  113. if (e.Button != MouseButtons.Right)
  114. return;
  115. DevExpress.XtraTab.ViewInfo.BaseTabHitInfo hi = xtraTabbedMdiManager1.CalcHitInfo(new Point(e.X, e.Y));
  116. if (hi.HitTest == DevExpress.XtraTab.ViewInfo.XtraTabHitTest.PageHeader)
  117. {
  118. popupMenu1.ShowPopup(Cursor.Position);
  119. }
  120. }
  121. private void pop_CloseCurrent_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  122. {
  123. XtraMdiTabPage page = xtraTabbedMdiManager1.SelectedPage;
  124. if (page != null && page.MdiChild != null)
  125. {
  126. page.MdiChild.Close();
  127. }
  128. }
  129. private void pop_CloseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  130. {
  131. foreach (Form form in this.MdiChildren)
  132. {
  133. form.Close();
  134. if (form != null && !form.IsDisposed)
  135. {
  136. form.Dispose();
  137. }
  138. }
  139. }
  140. private void pop_CloseOther_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  141. {
  142. XtraMdiTabPage selectedPage = xtraTabbedMdiManager1.SelectedPage;
  143. Type currentType = selectedPage.MdiChild.GetType();
  144. for (int i = xtraTabbedMdiManager1.Pages.Count - 1; i >= 0; i--)
  145. {
  146. XtraMdiTabPage page = xtraTabbedMdiManager1.Pages[i];
  147. if (page != null && page.MdiChild != null)
  148. {
  149. Form form = page.MdiChild;
  150. if (form.GetType() != currentType)
  151. {
  152. form.Close();
  153. if (form != null && !form.IsDisposed)
  154. {
  155. form.Dispose();
  156. }
  157. }
  158. }
  159. }
  160. }
  161. /// <summary>
  162. /// 登录验证
  163. /// </summary>
  164. private void LogIn()
  165. {
  166. Type type = Type.GetType("SIMDP.FormLogIn");
  167. FormLogIn logIn = ChildWinManagement.LoadMdiForm(this, type) as FormLogIn;
  168. this.xtraTabbedMdiManager1.Pages[0].ShowCloseButton = DevExpress.Utils.DefaultBoolean.False;
  169. logIn.myRefresh += new FormLogIn.refresh(InitRibbonPage);
  170. }
  171. /// <summary>
  172. /// 退出系统
  173. /// </summary>
  174. /// <param name="sender"></param>
  175. /// <param name="e"></param>
  176. private void barBtnItem_Quit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  177. {
  178. this.Close();
  179. }
  180. /// <summary>
  181. /// 重新登录
  182. /// </summary>
  183. /// <param name="sender"></param>
  184. /// <param name="e"></param>
  185. private void barBtnItem_ReLogIn_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  186. {
  187. SysEnvironment.CurrentLoginID = null;
  188. SysEnvironment.passWordMD5 = null;
  189. this.barStaticItem_User.Caption = "欢迎登录";
  190. pop_CloseAll_ItemClick(sender, e);
  191. this.ribbonControl.Pages.Clear();
  192. ribbonHelper = null;
  193. LogIn();
  194. }
  195. /// <summary>
  196. /// 修改密码
  197. /// </summary>
  198. /// <param name="sender"></param>
  199. /// <param name="e"></param>
  200. private void barBtnItem_EditPassWord_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  201. {
  202. FormChangePassWord passWord = new FormChangePassWord();
  203. passWord.ShowDialog();
  204. if (passWord.DialogResult == DialogResult.OK)
  205. {
  206. barBtnItem_ReLogIn_ItemClick(sender,e);
  207. }
  208. }
  209. /// <summary>
  210. /// OPC重新连接
  211. /// </summary>
  212. /// <param name="sender"></param>
  213. /// <param name="e"></param>
  214. private void barButtonItemReset_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  215. {
  216. try
  217. {
  218. PlcHelper.Instance.Connect();
  219. //Thread.Sleep(5000);
  220. if (e != null)
  221. DevExpress.XtraEditors.XtraMessageBox.Show("OPC连接成功");
  222. }
  223. catch (Exception ex)
  224. {
  225. DevExpress.XtraEditors.XtraMessageBox.Show("OPC连接失败\n" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  226. LogHelper.log.Error(string.Format("OPC线程重启失败:{0}", ex.ToString()));
  227. }
  228. }
  229. /// <summary>
  230. /// OPC 断开
  231. /// </summary>
  232. /// <param name="sender"></param>
  233. /// <param name="e"></param>
  234. private void barButtonItemCancle_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  235. {
  236. try
  237. {
  238. PlcHelper.Instance.Close();
  239. DevExpress.XtraEditors.XtraMessageBox.Show("OPC连接已断开");
  240. }
  241. catch (Exception ex)
  242. {
  243. DevExpress.XtraEditors.XtraMessageBox.Show("OPC断开失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  244. LogHelper.log.Error(string.Format("OPC线程断开失败:{0}", ex.ToString()));
  245. }
  246. }
  247. /// <summary>
  248. /// 最小化托盘退出
  249. /// </summary>
  250. /// <param name = "sender" ></ param >
  251. /// < param name="e"></param>
  252. private void menu_Exit_Click(object sender, EventArgs e)
  253. {
  254. this.Close();
  255. }
  256. /// <summary>
  257. /// 窗口大小发生变化时发生
  258. /// </summary>
  259. /// <param name = "sender" ></ param >
  260. /// < param name="e"></param>
  261. private void MainForm_Resize(object sender, EventArgs e)
  262. {
  263. //ToDo:窗口最小化到托盘
  264. //if (this.WindowState == FormWindowState.Minimized)
  265. //{
  266. // this.Visible = false;
  267. // this.notifyIcon1.Visible = true;
  268. //}
  269. }
  270. /// <summary>
  271. /// 托盘鼠标双击事件
  272. /// </summary>
  273. /// <param name = "sender" ></ param >
  274. /// < param name="e"></param>
  275. private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
  276. {
  277. this.Visible = true;
  278. this.WindowState = FormWindowState.Maximized;
  279. this.Show();
  280. this.Activate();
  281. }
  282. private void menu_Hide_Click(object sender, EventArgs e)
  283. {
  284. this.Hide();
  285. }
  286. private void menu_Open_Click(object sender, EventArgs e)
  287. {
  288. notifyIcon1_MouseDoubleClick(sender, null);
  289. }
  290. private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
  291. {
  292. if (DevExpress.XtraEditors.XtraMessageBox.Show("您确定要退出吗?", "新松智能制造数据平台", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
  293. {
  294. //FormUserVerification form = new FormUserVerification();
  295. //form.ShowDialog();
  296. //if (form.DialogResult != DialogResult.OK)
  297. //{
  298. // DevExpress.XtraEditors.XtraMessageBox.Show("用户验证失败。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  299. // e.Cancel = true;
  300. //}
  301. //e.Cancel = true;
  302. task.Stop();
  303. //this.notifyIcon1.Visible = false;
  304. //this.Close();
  305. }
  306. else
  307. {
  308. e.Cancel = true;
  309. }
  310. }
  311. /// <summary>
  312. /// 订阅系统提示消息
  313. /// </summary>
  314. private void SysSubscribeEvent()
  315. {
  316. string channel = SysEnvironment.SystemMessage;
  317. redis.Subscribe(channel, new Action<RedisChannel, RedisValue>(InsertSysMessage));
  318. }
  319. /// <summary>
  320. /// 发布时插入数据库
  321. /// </summary>
  322. /// <param name="channel"></param>
  323. /// <param name="message"></param>
  324. private void InsertSysMessage(RedisChannel channel, RedisValue message)
  325. {
  326. try
  327. {
  328. string[] arr = message.ToString().Split('|');
  329. MoSystemNotice mo = new MoSystemNotice();
  330. mo.NoticeTitle = arr[0];
  331. mo.NoticeType = Convert.ToInt32(arr[1]);
  332. mo.NoticeContent = arr[2];
  333. mo.NoticeTime = Convert.ToDateTime(arr[3]);
  334. mo.NoticeSign = Convert.ToBoolean(arr[4]);
  335. BLLFactory<BlSystemNotice>.Instance.Insert(mo);
  336. if (this.InvokeRequired)
  337. {
  338. messageDelegate mes = new messageDelegate(ShowSysMessage);
  339. this.Invoke(mes, null);
  340. }
  341. else
  342. {
  343. ShowSysMessage();
  344. }
  345. }
  346. catch (Exception ex)
  347. {
  348. LogHelper.log.Error("显示订阅系统提示信息 出现错误" + ex);
  349. }
  350. }
  351. //显示系统消息提示框
  352. private void ShowSysMessage()
  353. {
  354. if (notifyWindow == null || notifyWindow.IsDisposed)
  355. {
  356. notifyWindow = new NotifyWindow("系统提示信息", "");
  357. notifyWindow.SetDimensions(600, 200);
  358. notifyWindow.WaitTime = 50;
  359. notifyWindow.Notify();
  360. }
  361. else
  362. {
  363. notifyWindow.Activate();
  364. notifyWindow.RefreshWindow();
  365. return;
  366. }
  367. }
  368. }
  369. }