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. Console.WriteLine("TestContent");
  34. ftpOperater ftp = new ftpOperater();
  35. //从FTP的配置文件读取的数据库信息,并且进行解密
  36. //SystemInf.DefaultDB = Encryption.DecryptStr((ftp.GetFileContent("db.config")));
  37. //设置默认数据库
  38. SystemInf.DefaultDB = Properties.Settings.Default.Properties["DefaultDB"].DefaultValue.ToString();
  39. dh = new DataHelper();
  40. //将账套的信息查询出来赋给下拉框
  41. DbComboxData = (DataTable)dh.ExecuteSql("select ms_pwd,ma_user,ma_address from master", "select");
  42. DB.DataSource = DbComboxData;
  43. DB.DisplayMember = "ma_user";
  44. DB.ValueMember = "ma_user";
  45. if (DbComboxData.Rows.Count > 0)
  46. {
  47. DB.Text = DbComboxData.Rows[0]["ma_user"].ToString();
  48. }
  49. //if (Properties.Settings.Default.LastLoginSob != null)
  50. //{
  51. // DB.SelectedValue = Properties.Settings.Default.LastLoginSob;
  52. //}
  53. //显示上次用户登录的用户名,将输入框定位到密码
  54. UserName.Text = Properties.Settings.Default.LastLoginUser;
  55. Source.Text = Properties.Settings.Default.LastLoginResource;
  56. if (UserName.Text != "")
  57. PassWord.Select();
  58. else
  59. UserName.Select();
  60. //本来static是不要实例化的,但是需要调用触发添加键值对的构造函数
  61. if (lgc == null)
  62. lgc = new LogicHandler();
  63. BaseUtil.SetFormCenter(this);
  64. try { CertImport(); }
  65. catch (Exception) { }
  66. }
  67. //点击登陆按钮的时候
  68. private void LoginButton_Click(object sender, EventArgs e)
  69. {
  70. if (DB.SelectedValue == null)
  71. BaseUtil.ShowError("请选择一个数据库!");
  72. //设置选中数据库的链接
  73. for (int i = 0; i < DbComboxData.Rows.Count; i++)
  74. {
  75. if (DB.SelectedValue.ToString() == DbComboxData.Rows[i]["ma_user"].ToString())
  76. {
  77. //设置屏幕的宽高信息
  78. SystemInf.ScreenWidth = Screen.PrimaryScreen.WorkingArea.Width;
  79. SystemInf.ScreenHeight = Screen.PrimaryScreen.WorkingArea.Height;
  80. SystemInf.ConnectionString = "Data Source=" + DbComboxData.Rows[i]["ma_address"] + ";User ID=" + DbComboxData.Rows[i]["ma_user"] + ";PassWord=" + DbComboxData.Rows[i]["ms_pwd"];
  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. }