/*******************************************************************************
* 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
}
}