using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using POSV.HttpApi; using POSV.Entity; using POSV.Utils; using POS.Language.Language; namespace POSV.Component { [ToolboxItem(true)] public partial class RegisterControlExt : BaseUserControl { private PollCode _pollCode = null; public RegisterControlExt() { InitializeComponent(); labelX5.Text = LangProxy.ToLang(labelX5.Text); labelX6.Text = LangProxy.ToLang(labelX6.Text); labelX2.Text = LangProxy.ToLang(labelX2.Text); lblStoreNo.Text = LangProxy.ToLang(lblStoreNo.Text); labelX4.Text = LangProxy.ToLang(labelX4.Text); lblStoreName.Text = LangProxy.ToLang(lblStoreName.Text); touchButtonX5.Text = LangProxy.ToLang(touchButtonX5.Text); touchButtonX2.Text = LangProxy.ToLang(touchButtonX2.Text); touchButtonX1.Text = LangProxy.ToLang(touchButtonX1.Text); txtTenantNo.WatermarkText = LangProxy.ToLang(txtTenantNo.WatermarkText); txtAuthCode.WatermarkText = LangProxy.ToLang(txtTenantNo.WatermarkText); this.lblStoreNo.Text = string.Empty; this.lblStoreName.Text = string.Empty; foreach (var item in this.tableLayoutPanel1.Controls) { var _btn = item as TouchButtonX; if (_btn != null) { //zhangy 2020-03-20 Edit 注释以下代码,原因是Win10触摸屏不兼容 //_btn.Click += _btn_Click; //_btn.DoubleClick += _btn_Click; //zhangy 2020-03-20 Add 支持Win10触摸屏不兼容 _btn.TouchClick += OnTouchClick; } } } private void OnTouchClick(object sender, Component.TouchEventArgs e) { var _btn = sender as TouchButtonX; if (_btn == null) { return; } switch (_btn.KeyCode) { case "清除": { var _txt = this.ActiveControl as NumericTextBox; if (_txt == null) { return; } InputSimulatorUtils.SendClear(_txt.Text.Length); } break; case "{BACKSPACE}": { InputSimulatorUtils.SendKey(KeyCodes.Map["back"]); } break; default: { if (KeyCodes.Map.ContainsKey(_btn.Text)) { InputSimulatorUtils.SendKey(KeyCodes.Map[_btn.Text]); } } break; } } //private void _btn_Click(object sender, EventArgs e) //{ // var _btn = sender as TouchButtonX; // if (_btn == null) // { // return; // } // switch (_btn.KeyCode) // { // case "清除": // { // var _txt = this.ActiveControl as NumericTextBox; // if (_txt == null) // { // return; // } // InputSimulatorUtils.SendClear(_txt.Text.Length); // } // break; // case "{BACKSPACE}": // { // InputSimulatorUtils.SendKey(KeyCodes.Map["back"]); // } // break; // default: // { // if (KeyCodes.Map.ContainsKey(_btn.Text)) // { // InputSimulatorUtils.SendKey(KeyCodes.Map[_btn.Text]); // } // } // break; // } //} protected override void OnLoad(EventArgs e) { SetStyle(ControlStyles.Selectable, true); base.OnLoad(e); if (this.DesignMode) return; this.txtTenantNo.Multiline = false; this.txtAuthCode.Multiline = false; this.lblStoreNo.Text = string.Empty; this.lblStoreName.Text = string.Empty; } public override bool Focused { get { if (this.ActiveControl == null) { this.ActiveControl = this.txtTenantNo; } return this.ActiveControl.Focused; } } protected override void OnResize(EventArgs e) { this.Visible = false; base.OnResize(e); this.Visible = true; } /// /// 调用开放平台获取门店注册信息 /// /// private void ValidatePollCode() { bool isSuccess = false; try { if (string.IsNullOrEmpty(txtTenantNo.Text.Trim())) { this.lblErrorMessage.Text = LangProxy.ToLang("请输入企业编码"); this.lblErrorMessage.Visible = true; //this.ShowMessage(this.lblInfo, "请输入企业编码", false); this.txtTenantNo.Focus(); return; } if (string.IsNullOrEmpty(txtAuthCode.Text.Trim())) { this.lblErrorMessage.Text = LangProxy.ToLang("请输入提取密码"); this.lblErrorMessage.Visible = true; //this.ShowMessage(this.lblInfo, "请输入提取密码", false); this.txtAuthCode.Focus(); return; } //调用业务系统开放平台 var response = PosApi.ValidatePollCode(txtTenantNo.Text.Trim(), txtAuthCode.Text.Trim()); //返回成功 if (response.Item1) { this._pollCode = response.Item3; this.lblStoreNo.Text = this._pollCode.Response.StoreNo; this.lblStoreName.Text = this._pollCode.Response.StoreName; this.lblErrorMessage.Text = LangProxy.ToLang("请点击立即注册"); this.lblErrorMessage.Visible = true; //this.ShowMessage(this.lblInfo, "门店编码和名称审核后,请点击立即注册", false); //this.ButtonOK.Visible = true; //this.ButtonOK.Focus(); isSuccess = true; } else { this.lblStoreNo.Text = string.Empty; this.lblStoreName.Text = string.Empty; //this.ButtonOK.Visible = false; this.lblErrorMessage.Text = response.Item2; this.lblErrorMessage.Visible = true; isSuccess = false; } } catch (Exception ex) { isSuccess = false; this._pollCode = null; LOGGER.Error(ex, "POS注册码验证异常"); //this.ShowMessage(this.lblInfo, "POS注册码验证异常", true); } finally { //门店POS注册码验证通过 if (isSuccess) { } } } /// /// 注册成功事件触发 /// public event RegistedEventHandler Registed; protected virtual void OnRegisted(RegistedEventArgs e) { Registed?.Invoke(this, e); } private void OnButtonOkClick(object sender, EventArgs e) { } private void OnInputEnterClick(object sender, EnterEventArg e) { ValidatePollCode(); } private void BtnValidatePollCode(object sender, EventArgs e) { } private void OnButtonOkTouchClick(object sender, TouchEventArgs e) { bool isSuccess = false; Authc newAuthc = null; try { if (this._pollCode != null) { var tenantNo = this.txtTenantNo.Text.Trim(); var authCode = this.txtAuthCode.Text.Trim(); if (!tenantNo.Equals(this._pollCode.TenantId) || !authCode.Equals(this._pollCode.AuthCode)) { //this.ShowMessage(this.lblInfo, "变更输入信息,请点击确认获取门店信息", true); return; } //this.ShowMessage(this.lblInfo, "提交认证请求......", false); newAuthc = new Authc(); newAuthc.Id = IdWorkerUtils.Instance.NextId(); //硬盘序列号 newAuthc.DiskSerialNumber = DeviceUtils.Instance.DiskID; newAuthc.CpuSerialNumber = DeviceUtils.Instance.CpuID; newAuthc.CompterName = DeviceUtils.Instance.ComputerName; newAuthc.MacAddress = DeviceUtils.Instance.MacAddress; var response = PosApi.PosRegister(newAuthc, this._pollCode); //POS注册成功 if (response.Item1) { //租户是否变更 var isTenantChanged = false; //门店是否变更 var isStoreChanged = false; lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { var _authc = db.Query().FirstOrDefault(); if (_authc != null) { var oldAuthc = _authc; //如果存在数据 newAuthc.Id = oldAuthc.Id; //租户是否变更 isTenantChanged = !(newAuthc.TenantId.Equals(oldAuthc.TenantId)); //门店是否变更 isStoreChanged = !(newAuthc.StoreId.Equals(oldAuthc.StoreId)); } //获取门店AppKey和AppSecret var business = db.Query("where apiType = @0", ApiType.Business.ToString()).FirstOrDefault(); //获取会员AppKey和AppSecret var cards = db.Query("where apiType = @0", ApiType.Card.ToString()).FirstOrDefault(); //获取外卖平台的AppKey和AppSecret var waimais = db.Query("where apiType = @0", ApiType.WaiMai.ToString()).FirstOrDefault(); using (var transaction = db.GetTransaction()) { db.Save(newAuthc); if (business != null) { business.TenantId = newAuthc.TenantId; business.ApiType = ApiType.Business.ToString(); business.AppKey = this._pollCode.Response.AppKey; business.AppSecret = this._pollCode.Response.AppSecret; db.Update(business); } if (cards != null && this._pollCode.CardAuth != null) { cards.TenantId = newAuthc.TenantId; cards.ApiType = ApiType.Card.ToString(); cards.AppKey = this._pollCode.CardAuth.AppKey; cards.AppSecret = this._pollCode.CardAuth.AppSecret; db.Update(cards); } if (waimais != null) { waimais.TenantId = newAuthc.TenantId; waimais.ApiType = ApiType.WaiMai.ToString(); waimais.AppKey = this._pollCode.Response.AppKey; waimais.AppSecret = this._pollCode.Response.AppSecret; db.Update(waimais); } transaction.Complete(); } } } //this.ShowMessage(this.lblInfo, response.Item2, false); //清理数据,初始化系统 InitUtils.Instance.Init(newAuthc.TenantId, newAuthc.StoreId, isTenantChanged, isStoreChanged); //刷新Http请求的AppKey,避免调用错误 OpenApiUtils.Instance.Refresh(); //清理输入的内容 this.txtTenantNo.Text = string.Empty; this.txtAuthCode.Text = string.Empty; //出发注册成功通知事件 this.OnRegisted(new RegistedEventArgs(newAuthc)); isSuccess = true; } else { //this.ShowMessage(this.lblInfo, response.Item2, true); isSuccess = false; } } else { isSuccess = false; } } catch (Exception ex) { isSuccess = false; LOGGER.Error(ex, "保存POS注册信息异常"); } finally { //POS注册成功,通知会员系统 if (isSuccess && newAuthc != null) { var mr = PosApi.MemberRegister(this._pollCode, newAuthc); LOGGER.Info("通知会员系统POS注册结果<{0},{1}>", mr.Item1, mr.Item2); } } } private void touchButtonX1_TouchClick(object sender, TouchEventArgs e) { ValidatePollCode(); } } }