Login.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using System;
  2. using System.Windows.Forms;
  3. using System.Data;
  4. using UAS_MES.DataOperate;
  5. using UAS_MES.Entity;
  6. using UAS_MES.PublicMethod;
  7. using System.Security.Cryptography.X509Certificates;
  8. namespace UAS_MES
  9. {
  10. public partial class Login : Form
  11. {
  12. DataHelper dh;
  13. //用来保存combox中的数据库信息
  14. DataTable DbComboxData;
  15. //用来保存其他信息
  16. DataTable UserInf;
  17. //注销的时候会重新生成这边变量,所以需要用static
  18. static LogicHandler lgc;
  19. public Login()
  20. {
  21. InitializeComponent();
  22. }
  23. protected override void WndProc(ref Message m)
  24. {
  25. //拦截双击标题栏、移动窗体的系统消息
  26. if (m.Msg != 0xA3)
  27. {
  28. base.WndProc(ref m);
  29. }
  30. }
  31. private void Login_Load(object sender, EventArgs e)
  32. {
  33. ftpOperater ftp = new ftpOperater();
  34. //从FTP的配置文件读取的数据库信息,并且进行解密
  35. //SystemInf.DefaultDB = Encryption.DecryptStr((ftp.GetFileContent("db.config")));
  36. //设置默认数据库
  37. SystemInf.DefaultDB = Properties.Settings.Default.Properties["MES"].DefaultValue.ToString();
  38. dh = new DataHelper();
  39. //将账套的信息查询出来赋给下拉框
  40. DbComboxData = (DataTable)dh.ExecuteSql("select ms_pwd,ma_user,ma_address from master", "select");
  41. DB.DataSource = DbComboxData;
  42. DB.DisplayMember = "ma_user";
  43. DB.ValueMember = "ma_user";
  44. if (DbComboxData.Rows.Count > 0)
  45. {
  46. DB.Text = DbComboxData.Rows[0]["ma_user"].ToString();
  47. }
  48. //if (Properties.Settings.Default.LastLoginSob != null)
  49. //{
  50. // DB.SelectedValue = Properties.Settings.Default.LastLoginSob;
  51. //}
  52. //显示上次用户登录的用户名,将输入框定位到密码
  53. UserName.Text = Properties.Settings.Default.LastLoginUser;
  54. Source.Text = Properties.Settings.Default.LastLoginResource;
  55. if (UserName.Text != "")
  56. PassWord.Select();
  57. else
  58. UserName.Select();
  59. //本来static是不要实例化的,但是需要调用触发添加键值对的构造函数
  60. if (lgc == null)
  61. lgc = new LogicHandler();
  62. BaseUtil.SetFormCenter(this);
  63. try { CertImport(); }
  64. catch (Exception) { }
  65. }
  66. //点击登陆按钮的时候
  67. private void LoginButton_Click(object sender, EventArgs e)
  68. {
  69. if (DB.SelectedValue == null)
  70. BaseUtil.ShowError("请选择一个数据库!");
  71. //设置选中数据库的链接
  72. for (int i = 0; i < DbComboxData.Rows.Count; i++)
  73. {
  74. if (DB.SelectedValue.ToString() == DbComboxData.Rows[i]["ma_user"].ToString())
  75. {
  76. //设置屏幕的宽高信息
  77. SystemInf.ScreenWidth = Screen.PrimaryScreen.WorkingArea.Width;
  78. SystemInf.ScreenHeight = Screen.PrimaryScreen.WorkingArea.Height;
  79. SystemInf.ConnectionString = "Data Source=" + DbComboxData.Rows[i]["ma_address"] + ";User ID=" + DbComboxData.Rows[i]["ma_user"] + ";PassWord=" + DbComboxData.Rows[i]["ms_pwd"];
  80. Console.WriteLine(SystemInf.ConnectionString);
  81. DataHelper.DBConnectionString = SystemInf.ConnectionString;
  82. //重新执行一遍构造函数使得重置之后的链接字符串生效
  83. dh = new DataHelper();
  84. SystemInf.CurrentDB = DbComboxData.Rows[i]["ma_user"].ToString();
  85. }
  86. }
  87. string ErrorMessage = "";
  88. //验证用户名和密码
  89. if (LogicHandler.CheckUserLogin(UserName.Text, PassWord.Text, out ErrorMessage))
  90. {
  91. //验证岗位资源,通过验证开启主窗体
  92. if (LogicHandler.CheckUserAndSourcePassed(UserName.Text, Source.Text, out ErrorMessage))
  93. {
  94. this.Hide();
  95. SetInf();//设置User的全局变量
  96. LogManager.DoLog("登陆成功" + User.UserName + ",超级用户");
  97. Main dialog = new Main();
  98. dialog.ShowDialog();
  99. this.Close();
  100. }
  101. else
  102. MessageBox.Show(ErrorMessage);
  103. }
  104. else
  105. MessageBox.Show(ErrorMessage);
  106. }
  107. /// <summary>
  108. ///设置User类的全局变量,类似于Session
  109. /// </summary>
  110. private void SetInf()
  111. {
  112. //设置全局用户信息
  113. string[] field = { "em_code,em_depart,em_type,em_name,em_position,em_professname,em_type,ug_code,ug_name" };
  114. UserInf = dh.getFieldsDataByCondition("Employee left join cs$userresource on ur_emcode=em_code left join cs$usergroup on ug_code=ur_groupcode", field, "em_code='" + UserName.Text + "'");
  115. DataTable dt = dh.getFieldsDataByCondition("source", new string[] { "sc_stepcode", "sc_stepname", "sc_linecode" }, "sc_code='" + Source.Text + "'");
  116. //存在岗位资源则要求添加
  117. if (dt.Rows.Count > 0)
  118. {
  119. User.CurrentStepCode = dt.Rows[0]["sc_stepcode"].ToString();
  120. User.CurrentStepName = dt.Rows[0]["sc_stepname"].ToString();
  121. User.UserLineCode = dt.Rows[0]["sc_linecode"].ToString();
  122. }
  123. //通过Source表关联岗位资源编号查询出当前的执行工序
  124. User.UserSourceCode = Source.Text;
  125. User.UserCode = UserInf.Rows[0]["em_code"].ToString();
  126. User.UserDepartment = UserInf.Rows[0]["em_depart"].ToString();
  127. User.UserName = UserInf.Rows[0]["em_name"].ToString();
  128. User.UserPosition = UserInf.Rows[0]["em_position"].ToString();
  129. User.UserProfessName = UserInf.Rows[0]["em_professname"].ToString();
  130. User.UserAccountType = UserInf.Rows[0]["em_type"].ToString();
  131. User.UserGroupCode = UserInf.Rows[0]["ug_code"].ToString();
  132. User.UserGroup = UserInf.Rows[0]["ug_name"].ToString();
  133. User.UserAccountType = UserInf.Rows[0]["em_type"].ToString();
  134. //设置系统基础信息
  135. UserInf = (DataTable)dh.ExecuteSql("select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as systime from dual", "select");
  136. SystemInf.LoginTime = UserInf.Rows[0]["systime"].ToString();
  137. //记录在本地用户成功登录的用户名
  138. Properties.Settings.Default.LastLoginUser = UserName.Text;
  139. Properties.Settings.Default.LastLoginSob = DB.Text;
  140. Properties.Settings.Default.LastLoginResource = Source.Text;
  141. Properties.Settings.Default.Save();
  142. }
  143. private void ForGetPwd_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  144. {
  145. MessageBox.Show("请联系管理员修改密码");
  146. }
  147. //用Enter键调用登陆的点击事件
  148. private void Source_KeyDown(object sender, KeyEventArgs e)
  149. {
  150. if (e.KeyCode == Keys.Enter)
  151. LoginButton_Click(sender, e);
  152. }
  153. private void PassWord_KeyDown(object sender, KeyEventArgs e)
  154. {
  155. if (e.KeyCode == Keys.Enter)
  156. LoginButton_Click(sender, e);
  157. }
  158. /// <summary>
  159. /// 导入证书
  160. /// </summary>
  161. private void CertImport()
  162. {
  163. X509Certificate2 cert = new X509Certificate2(Application.StartupPath + @"\Cert\深圳市优软科技有限公司.pfx", "uasmes");
  164. if (cert != null)
  165. {
  166. var store2 = new X509Store(StoreName.My, StoreLocation.CurrentUser);
  167. store2.Open(OpenFlags.ReadWrite);
  168. if (!store2.Certificates.Contains(cert))
  169. {
  170. store2.Add(cert);
  171. }
  172. var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
  173. store.Open(OpenFlags.ReadWrite);
  174. if (!store.Certificates.Contains(cert))
  175. {
  176. store.Add(cert);
  177. }
  178. }
  179. }
  180. }
  181. }