/******************************************************************************* * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential * 类的信息: * 1.程序名称:F_SYS_0101.cs * 2.功能描述:系统登录主界面 * 编辑履历: * 作者 日期 版本 修改内容 * 张国印 2014/08/27 1.00 新建 *******************************************************************************/ using System; using System.IO; using System.Reflection; using System.Windows.Forms; using Dongke.IBOSS.PRD.Basics.BaseControls; using Dongke.IBOSS.PRD.Basics.BaseResources; using Dongke.IBOSS.PRD.Basics.Library; using Dongke.IBOSS.PRD.Client.CommonModule; using Dongke.IBOSS.PRD.Client.DataModels; using Dongke.IBOSS.PRD.WCF.DataModels; using Dongke.IBOSS.PRD.WCF.Proxys; using Dongke.IBOSS.PRD.WCF.Proxys.DKIBOSSPRDService; namespace Dongke.IBOSS.PRD.Client { /// /// 系统登录页面 /// public partial class F_SYS_0101 : FormBase { #region 成员变量 // 帐套 private string _accountCode; // 用户 private string _userCode; // 密码 private string _password; // 配置文件的全路径 private string _iniFilePath = LocalPath.RootPath + Constant.INI_FILE_NAME; private string _localiniFilePath = AppDomain.CurrentDomain.BaseDirectory + Constant.INI_FILE_NAME; // 用户登录信息 private LoginRequestEntity _requestEntity = null; #endregion #region 构造函数 /// /// 构造函数 /// public F_SYS_0101() { InitializeComponent(); this.SetFromTitleInfo(); } #endregion #region /// /// 获取或设置密码 /// public string Password { get { return this.txtPassword.Text; } set { this.txtPassword.Text = value; } } /// /// 切换用户 /// public bool IsChangedUser { get; set; } #endregion #region 事件处理 /// /// 窗体加载事件 /// /// /// private void F_SYS_0101_Shown(object sender, EventArgs e) { try { // 存在该文件,直接读取该文件,否则不读取 if (File.Exists(_localiniFilePath)) { this.txtAccount.Text = Utility.ReadIniFile(Constant.INI_SECTION_SETTINGS, Constant.INI_KEY_ACCOUNT_CODE, this._localiniFilePath); this.txtUserCode.Text = Utility.ReadIniFile(Constant.INI_SECTION_SETTINGS, Constant.INI_KEY_USER_CODE, this._localiniFilePath); } else if (File.Exists(this._iniFilePath)) { //this.txtAccount.Text = Utility.ReadIniFile(Constant.INI_SECTION_SETTINGS, // Constant.INI_KEY_ACCOUNT_CODE, this._iniFilePath); //this.txtUserCode.Text = Utility.ReadIniFile(Constant.INI_SECTION_SETTINGS, // Constant.INI_KEY_USER_CODE, this._iniFilePath); File.Copy(this._iniFilePath, _localiniFilePath); this.txtAccount.Text = Utility.ReadIniFile(Constant.INI_SECTION_SETTINGS, Constant.INI_KEY_ACCOUNT_CODE, this._localiniFilePath); this.txtUserCode.Text = Utility.ReadIniFile(Constant.INI_SECTION_SETTINGS, Constant.INI_KEY_USER_CODE, this._localiniFilePath); } // 激活窗体 this.ActivateForm(); // 设置焦点 if (string.IsNullOrEmpty(this.txtAccount.Text)) { this.txtAccount.Focus(); } else if (string.IsNullOrEmpty(this.txtUserCode.Text)) { this.txtUserCode.Focus(); } else { if (this.IsChangedUser) { this.txtUserCode.Focus(); this.txtUserCode.SelectAll(); return; } this.txtPassword.Focus(); } if (!string.IsNullOrWhiteSpace(this.txtPassword.Text)) { this.btnLogin_Click(null, null); } } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 登录按钮 /// /// /// private void btnLogin_Click(object sender, EventArgs e) { this._accountCode = this.txtAccount.Text.Trim(); this._userCode = this.txtUserCode.Text.Trim(); this._password = this.txtPassword.Text; // 画面有为输入的必输项目 if (!this.IsInputValid()) { return; } try { // 判断是否设置Web服务器地址,未进行配置,则提示 string ipAddress = null; string serverPort = null; if (File.Exists(_localiniFilePath)) { ipAddress = Utility.ReadIniFile(Constant.INI_SECTION_NET, Constant.INI_KEY_IP, this._localiniFilePath); serverPort = Utility.ReadIniFile(Constant.INI_SECTION_NET, Constant.INI_KEY_PORT, this._localiniFilePath); } else if (File.Exists(this._iniFilePath)) { ipAddress = Utility.ReadIniFile(Constant.INI_SECTION_NET, Constant.INI_KEY_IP, this._iniFilePath); serverPort = Utility.ReadIniFile(Constant.INI_SECTION_NET, Constant.INI_KEY_PORT, this._iniFilePath); } if (string.IsNullOrWhiteSpace(ipAddress) || string.IsNullOrWhiteSpace(serverPort)) { MessageBox.Show(Messages.MSG_SYS_W001, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); return; } // 设定静态常量中的web服务地址 ProxySettings.ResetRemoteAddress(ipAddress, serverPort); // 将密码进行MD5加密 this._password = Encryption.GetMD5String(this.txtPassword.Text); this._requestEntity = new LoginRequestEntity(); this._requestEntity.AccountCode = this._accountCode; this._requestEntity.UserCode = this._userCode; this._requestEntity.Password = this._password; this._requestEntity.IPAddress = SystemAPI.IPAddress; this._requestEntity.MACAddress = SystemAPI.MacAddress; this._requestEntity.ComputerName = SystemAPI.ComputerName; LoginResultEntity result = (LoginResultEntity)DoAsync(new BaseAsyncMethod(() => { return DKIBOSSPRDProxy.Service.DoLogin(this._requestEntity); })); // 登录认证失败 if (result == null) { MessageBox.Show(Messages.MSG_SYS_W002, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); return; } // 根据状态进行登录处理 this.LoginCheck(result); } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), MethodBase.GetCurrentMethod().Name, this.Text, ex); } } /// /// 系统设置按钮,打开系统设置页面 /// /// /// private void btnSetting_Click(object sender, EventArgs e) { try { F_SYS_0102 frmSYS0102 = new F_SYS_0102(); frmSYS0102.ShowDialog(); } catch (Exception ex) { // 对异常进行共通处理 ExceptionManager.HandleEventException(this.ToString(), MethodBase.GetCurrentMethod().Name, this.Text, ex); } } #endregion #region 私有方法 /// /// 设置窗体按钮的文本信息 /// private void SetFromTitleInfo() { this.Text = FormTitles.F_SYS_0101; this.btnLogin.Text = ButtonText.BTN_LOGIN; this.btnSetting.Text = ButtonText.BTN_SETTING; } /// /// 检查页面的输入项目 /// /// /// /// True 为验证通过 False 为验证不通过 private bool IsInputValid() { // 帐套未输入值 if (string.IsNullOrEmpty(this._accountCode)) { MessageBox.Show(string.Format(Messages.MSG_CMN_W005, "帐套"), Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.txtAccount.Focus(); return false; } // 用户名未输入值 else if (string.IsNullOrEmpty(this._userCode)) { MessageBox.Show(string.Format(Messages.MSG_CMN_W005, "用户"), Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.txtUserCode.Focus(); return false; } // 用户密码未输入值 else if (string.IsNullOrEmpty(this._password)) { MessageBox.Show(string.Format(Messages.MSG_CMN_W005, "密码"), Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.txtPassword.Focus(); return false; } else { return true; } } /// /// 根据传入的参数值,判断登录状态 /// /// /// 0:登录成功 /// 1:帐套不存在 /// 2:该帐套不存在该用户 /// 3:用户密码不正确 /// 4:MAC地址错误 /// 5:登录时间错误 /// 6:用户停用 /// 7:用户被锁死 /// 8:此用户不能在移动端登录 /// 9:此用户不能在PC端登录 /// 10:服务器日期错误 /// 11:没有找到加服务器密锁 /// 12:服务器加密锁不是东科的加密锁 /// 13:读取服务器锁内客户编码内容失败 /// 21:没有找到license文件 /// 22:license文件损坏 /// 23:license文件内容不正确 /// 31:服务器加密锁的内容和license文件的内容不相符 /// 32:临时的License已经过期 /// 41:打开客户端加密锁失败 /// 42:没有找到客户端加密锁 /// 43:客户端加密锁不是东科的加密锁 /// 44:读取加密锁信息失败(硬件损坏、管理密码错误等) /// 45:加密锁的内容和license内容不一致 /// private void LoginCheck(LoginResultEntity userEntity) { switch (userEntity.LoginStatus) { case -1: // 其他状态提示 MessageBox.Show(userEntity.LoginMessage, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_IS_SUCCESS: // 登录认证成功 this.SaveUserSettings(); this.ConvertUserLogInInfo(userEntity); Program.IsLogin = true; this.DialogResult = DialogResult.OK; this.Close(); break; case Constant.LOGIN_ACCOUNT_NOT_EXIST: // 帐套不存在 MessageBox.Show(string.Format(Messages.MSG_CMN_W002, "帐套"), Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.txtAccount.Focus(); this.txtAccount.SelectAll(); break; case Constant.LOGIN_USER_NOT_EXIST: // 用户不存在 MessageBox.Show(string.Format(Messages.MSG_CMN_W002, "用户"), Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.txtUserCode.Focus(); this.txtUserCode.SelectAll(); break; case Constant.LOGIN_PASSORD_ERROR: // 密码错误 MessageBox.Show(string.Format(Messages.MSG_CMN_W003, "用户密码"), Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.txtPassword.Focus(); this.txtPassword.SelectAll(); break; case Constant.LOGIN_MAC_ERROR: // MAC地址错误 MessageBox.Show(Messages.MSG_SYS_W004, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_DATETIME_ERROR: // 登录时间段错误 MessageBox.Show(Messages.MSG_SYS_W005, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_USER_DISABLE: // 用户为停用用户 MessageBox.Show(Messages.MSG_SYS_W006, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_USER_IS_LOCK: // 用户被锁死 MessageBox.Show(Messages.MSG_SYS_W007, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_USER_NOT_IN_SMART: // 此用户不能在移动端登录 MessageBox.Show(Messages.MSG_SYS_W022, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_USER_NOT_IN_PC: // 此用户不能在PC端登录 MessageBox.Show(Messages.MSG_SYS_W023, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_USER_SYSTEMDATE_ERROR: // 服务器日期错误 MessageBox.Show(Messages.MSG_SYS_W024, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_NOT_ENCRYPTION_LOCK: // 没有找到加密锁 MessageBox.Show(Messages.MSG_SYS_W008, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_NOT_DONGKE_ENCRYPTION_LOCK: // 加密锁不是东科的加密锁 MessageBox.Show(Messages.MSG_SYS_W009, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_ENCRYPTION_LOCK_CUSTOMER_ERROR: // 读取锁内客户编码内容失败 MessageBox.Show(Messages.MSG_SYS_W010, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_NOT_LICENSE: // 没有找到license文件 MessageBox.Show(Messages.MSG_SYS_W011, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_LICENSE_ERROR: // license文件损坏 MessageBox.Show(Messages.MSG_SYS_W012, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_LICENSE_CONTENT_ERROR: // license文件内容不正确 MessageBox.Show(Messages.MSG_SYS_W013, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_LICENSE_ENCRYPTION_LOCK_ERROR: // 加密锁的内容和license文件的内容不相符 MessageBox.Show(Messages.MSG_SYS_W014, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_LICENSE_BE_OVERDUE: // 临时的License已经过期 MessageBox.Show(Messages.MSG_SYS_W015, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_CLENT_ENCRYPTION_LOCK_ERROR: // 打开客户端加密锁失败 MessageBox.Show(Messages.MSG_SYS_W016, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_CLENT_NOT_ENCRYPTION_LOCK: // 没有找到客户端加密锁 MessageBox.Show(Messages.MSG_SYS_W017, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_CLENT_NOT_DONGKE_ENCRYPTION_LOCK: // 客户端加密锁不是东科的加密锁 MessageBox.Show(Messages.MSG_SYS_W018, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_CLENT_ENCRYPTION_LOCK_DAMAGE: // 读取加密锁信息失败(硬件损坏、管理密码错误等) MessageBox.Show(Messages.MSG_SYS_W019, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; case Constant.LOGIN_CLENT_LICENSE_ENCRYPTION_LOCK_ERROR: // 加密锁的内容和license内容不一致 MessageBox.Show(Messages.MSG_SYS_W020, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); this.btnLogin.Focus(); break; default: // 登录失败 MessageBox.Show(Messages.MSG_SYS_W002, Messages.MSG_TITLE_W01, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); break; } } /// /// 将用户信息保存到配置文件 /// private void SaveUserSettings() { if (!File.Exists(_localiniFilePath)) { File.Create(this._localiniFilePath).Close(); } // 保存业务系统配置 Utility.WriteIniFile(Constant.INI_SECTION_SETTINGS, Constant.INI_KEY_ACCOUNT_CODE, this._accountCode, this._localiniFilePath); Utility.WriteIniFile(Constant.INI_SECTION_SETTINGS, Constant.INI_KEY_USER_CODE, this._userCode, this._localiniFilePath); //{ // // 文件夹不存在的情况下创建文件夹 // if (!Directory.Exists(LocalPath.RootPath)) // { // Directory.CreateDirectory(LocalPath.RootPath); // } // // 存在该文件,更改文件 // if (!File.Exists(this._iniFilePath)) // { // File.Create(this._iniFilePath).Close(); // } // // 保存业务系统配置 // Utility.WriteIniFile(Constant.INI_SECTION_SETTINGS, Constant.INI_KEY_ACCOUNT_CODE, // this._accountCode, this._iniFilePath); // Utility.WriteIniFile(Constant.INI_SECTION_SETTINGS, Constant.INI_KEY_USER_CODE, // this._userCode, this._iniFilePath); //} } /// /// 数据实体转换,将WCF端的用户信息保存到本地实体中 /// /// public void ConvertUserLogInInfo(LoginResultEntity loginResultEntity) { Dongke.IBOSS.PRD.Client.DataModels.UserEntity userEntity = new Dongke.IBOSS.PRD.Client.DataModels.UserEntity(); DataConvert.Convert(loginResultEntity.CurrentUserEntity, userEntity); LogInUserInfo tempUser = new LogInUserInfo(userEntity, loginResultEntity.LicenseInfo, loginResultEntity.SysParameter); LogInUserInfo.LoginMessage = loginResultEntity.LoginMessage; this._requestEntity.SessionKey = loginResultEntity.CurrentUserEntity.SessionKey; ProxySettings.LoginUserInfo = this._requestEntity; ProxySettings.IPPostName = loginResultEntity.CurrentUserEntity.Remarks; GridSettingManager.AccountCode = ProxySettings.LoginUserInfo.AccountCode; GridSettingManager.UserCode = ProxySettings.LoginUserInfo.UserCode; } #endregion } }