private void loginWork() { //首先检查数据库连接 if (LoginDAL.CheckDBConnection() != 0) { MessageBox.Show("连接失败,请检查网络连接!", "错误", MessageBoxButton.OK, MessageBoxImage.Error); btnLogin.Content = "登录失败"; return; } //获取全国的风机数量 int pointNum = FanPointDAL.GetAllPoints().Count; labPointNum.Content = pointNum + " 台"; //获取全国风场数量 int windFieldNum = AllWindFieldDAL.GetWindFieldNumber(); labWindFieldNumber.Content = windFieldNum + "个"; //获取全国的公司数量 int companyNum = AllWindFieldDAL.GetCompanyNumber(); labCompanyNumber.Content = companyNum + " 家"; initEvent(); //加载地图 int ErrorTimeSpanMin = 30;//为保证账户安全,设置多次登录错误后的用户需要等待的时间 if (cbxUserName.Text == "用户名" || pwx.Password == "*#*#*#") { MessageBox.Show("用户名或密码有误,请重新输入!", "错误", MessageBoxButton.OK, MessageBoxImage.Error); cbxUserName.Focus(); return; } User user = LoginDAL.GetAccountByUserName(cbxUserName.Text);//获取当前的用户信息 if (user == null) { MessageBox.Show("不存在此用户!", "错误", MessageBoxButton.OK, MessageBoxImage.Error); cbxUserName.Focus(); return; } else { //如果距离上次登录成功已经超过30分钟,则将登录错误次数清零 if (user.LoginTime != null) { DateTime dt = LoginDAL.GetServerTime(); //获取服务器当前时间 TimeSpan ts = dt - (DateTime)user.LoginTime; //获取当前用户最新的上一次登录的时间 if (ts.TotalMinutes >= ErrorTimeSpanMin) //如果用户长时间没登录过,则将以前的登录错误次数清零 { LoginDAL.ResetErrorTimesByUserName(user.UserName); //登录错误次数清零 user.ErrorTimes = 0; //本地记录的登录错误次数清零 } else if (user.ErrorTimes >= 3) //如果登录错误次数超过了3次,则禁止用户在 ErrorTimeSpanMin 时间内登录(单位/分钟) { MessageBox.Show("登录失败次数过多,请 " + Math.Ceiling(ErrorTimeSpanMin - ts.TotalMinutes) + " 分钟后重试!", "警告", MessageBoxButton.OK, MessageBoxImage.Warning); return; } } } string passWord = LoginDAL.GetMD5(pwx.Password);//获取加密后的密码 if (passWord != user.Password) { LoginDAL.UpdateErrorTimesByUserName(user.UserName); //登录错误次数+1 LoginDAL.UpdateLoginTimeByUserName(user.UserName); //更新登录时间 MessageBox.Show("密码不正确,请重新输入!", "错误", MessageBoxButton.OK, MessageBoxImage.Error); pwx.Focus(); return; } if ((cbxUserName.Text == user.UserName) && (passWord == user.Password)) { //登录成功 XMLDAL.UpdateUser(cbxUserName.Text, pwx.Password); //将登录成功的用户信息更新到配置文件里 LoginDAL.UpdateLoginTimeByUserName(user.UserName); //更新登录时间 LoginDAL.ResetErrorTimesByUserName(user.UserName); //登录错误次数清零 LoginGrid.Visibility = Visibility.Hidden; MainGrid.Visibility = Visibility.Visible; } else { LoginDAL.UpdateErrorTimesByUserName(user.UserName); //登录错误次数+1 LoginDAL.UpdateLoginTimeByUserName(user.UserName); //更新登录时间 MessageBox.Show("登录失败,请重试!", "错误", MessageBoxButton.OK, MessageBoxImage.Error); return; } }