using JwKdsV.Core; using JwKdsV.Core.HttpApi; using JwKdsV.Core.Utils; using JwKdsV.Entity.Common; using JwKdsV.Entity.Tenant; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace JwKdsV { public partial class LoginForm : BaseForm { public LoginForm() { InitializeComponent(); this.Text = string.Format("巨为厨显({0})", Application.ProductVersion); KeyboardUtils.Instance.RegisterHook(this.AppHookKeyDown); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.DesignMode) return; logger.Info("启动KDS登录窗口"); logger.Info("当前KDS版本:{0}", Application.ProductVersion); //登录信息panel放在屏幕中间 this.loginPanel.Location = new Point((this.Width - this.loginPanel.Width) / 2, (this.Height - this.loginPanel.Height) / 2); //注册虚拟键盘事件 this.loginKeyboardX1.LoginKeyboardButtonClick += LoginKeyboardX1_LoginKeyboardButtonClick; ; this.txtUserName.Focus(); //清空提示信息 infoLabel.Text = string.Empty; //初始化门店信息 InitGlobalStoreInfo(); //显示门店信息 if (Global.Instance.StoreInfo != null) { this.storeNoLabel.Text = Global.Instance.StoreInfo.StoreNo; this.storeNameLabel.Text = Global.Instance.StoreInfo.StoreName; this.kdsNoLabel.Text = Global.Instance.StoreInfo.PosNo; } Task.Factory.StartNew(() => { CheckNewVersion(); //var client = MqttClientUtils.Instance; }); } private void CheckNewVersion() { try { //联机模式下,下载数据 if (Global.Instance.Online) { string autoUpdateFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"AutoUpdater.exe"); bool isNewAutoUpdate = false; //当前内嵌自动更新的版本 string newAutoUpdateVersion = Properties.Resources.AutoUpdateVersion; if (!File.Exists(autoUpdateFilePath)) { isNewAutoUpdate = true; } else { logger.Info("AutoUpdate Version:{0}", newAutoUpdateVersion); FileVersionInfo info = FileVersionInfo.GetVersionInfo(autoUpdateFilePath); //检测版本 Version oldVersion = new Version(info.ProductVersion); Version newVersion = new Version(newAutoUpdateVersion); if (newVersion > oldVersion) { File.Delete(autoUpdateFilePath); isNewAutoUpdate = true; } } if (isNewAutoUpdate) { string installerPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AutoUpdater.exe"); File.WriteAllBytes(installerPath, Properties.Resources.AutoUpdater); } //有自动更新程序 if (File.Exists(autoUpdateFilePath) && Global.Instance.StoreInfo != null) { //args = new string[] { "373001" , "00008" , "cy2" , "1", "x86" , "1.0.0" , "POSV.exe" }; //判断是否有新版本发布 string tenantId = Global.Instance.StoreInfo.TenantId; string posNo = Global.Instance.StoreInfo.PosNo; string appSign = Constant.APP_SIGN; string versionType = "1"; string terminalType = Constant.TERMINAL_TYPE; string versionNum = Application.ProductVersion; string starter = Application.ProductName + ".exe"; string arguments = (tenantId + " " + posNo + " " + appSign + " " + versionType + " " + terminalType + " " + versionNum + " " + starter); System.Diagnostics.Process.Start("AutoUpdater.exe", arguments); } } } catch (Exception ex) { logger.Error(ex, "检测新版本出现异常....."); } } protected override void AppHookKeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.Enter: this.OnEnterClick(sender, e); break; case Keys.Escape: //this.OnCloseClick(sender, e); break; } } /// /// 初始化storeInfo /// private void InitGlobalStoreInfo() { Authc authc; using (var db = Global.Instance.OpenDataBase) { authc = db.FirstOrDefault(""); } if (authc != null) { StoreInfo store = new StoreInfo(); store.PosNo = authc.PosNo; store.StoreId = authc.StoreId; store.StoreNo = authc.StoreNo; store.StoreName = authc.StoreName; store.TenantId = authc.TenantId; Global.Instance.StoreInfo = store; } else { logger.Error("未获取Authc,组装Global.StoreInfo失败"); } } private void LoginKeyboardX1_LoginKeyboardButtonClick(object sender, Component.LoginKeyboardEventArgs e) { var keyCode = e.Key; switch (keyCode) { case "clear": this.ActiveControl.Text = ""; break; default: InputSimulatorUtils.SendKey(KeyCodes.Map[keyCode]); break; } } /// /// 登录前校验 /// /// private bool ValidBeforeLogin() { if (string.IsNullOrEmpty(this.txtUserName.Text)) { this.txtUserName.Focus(); return false; } else { this.txtUserPwd.Focus(); } if (string.IsNullOrEmpty(this.txtUserPwd.Text)) { this.txtUserPwd.Focus(); return false; } return true; } protected override void OnFormClosing(FormClosingEventArgs e) { base.OnFormClosing(e); KeyboardUtils.Instance.UnRegisterHook(this.AppHookKeyDown); } /// /// 登录 /// /// /// protected override void OnEnterClick(object sender, EventArgs e) { if (!ValidBeforeLogin()) return; //用户名长度5位,默认前补零 var userName = this.txtUserName.Text.PadLeft(5, '0'); if (HttpClientUtils.IsAvailable(ApiType.Business)) { //在线登录 var loginRes = LoginApi.OperatorLogin(userName, this.txtUserPwd.Text); if (loginRes.Status == 1) { loginRes.Data.WorkerOnlineLogin = true; Global.Instance.Worker = loginRes.Data; Global.Instance.Worker.TenantId = Global.Instance.StoreInfo.TenantId; this.DialogResult = DialogResult.OK; this.Close(); } else { ShowMessage(this.infoLabel, loginRes.Message, true); } } else { //离线登录、数据库登录 var loginRes = LoginApi.OperatorLoginByDb(userName, this.txtUserPwd.Text); if (loginRes.Item1) { //离线登录确认 var confirm = new LoginOffLineConfirmForm(loginRes.Item3); KeyboardUtils.Instance.UnRegisterHook(this.AppHookKeyDown); if (confirm.ShowDialog() == DialogResult.OK) { Global.Instance.Worker = loginRes.Item3; Global.Instance.Worker.WorkerOnlineLogin = false; this.DialogResult = DialogResult.OK; this.Close(); } else { KeyboardUtils.Instance.RegisterHook(this.AppHookKeyDown); } } else { ShowMessage(this.infoLabel, loginRes.Item2, true); } } } private void SystemInitClick(object sender, EventArgs e) { TenantResetForm resetForm = new TenantResetForm(); resetForm.ShowDialog(); } } }