You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

367 lines
12 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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.Utils;
using POSV.Entity;
using NPoco;
using POSV.HttpApi;
using POS.Language.Language;
namespace POSV.Component
{
[ToolboxItem(true)]
public partial class RegisterControl : BaseUserControl
{
private PollCode _pollCode = null;
public RegisterControl()
{
InitializeComponent();
//注册键盘事件
this.keyboardX1.TouchAfter += OnKeyboartTouchAfter;
this.lblStoreNo.Text = string.Empty;
this.lblStoreName.Text = string.Empty;
}
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 OnPaint(PaintEventArgs e)
//{
// base.OnPaint(e);
// //if (Focused)
// //{
// // Rectangle rect = ClientRectangle;
// // rect.Inflate(-1 , -1);
// // ControlPaint.DrawBorder(
// // e.Graphics , ClientRectangle ,
// // Color.White ,
// // ButtonBorderStyle.Dashed);
// //}
//}
protected override void OnResize(EventArgs e)
{
this.Visible = false;
base.OnResize(e);
this.Visible = true;
}
private void OnKeyboartTouchAfter(object sender , KeyboardEventArgs e)
{
switch (e.KeyCode)
{
case "clear":
//如果当前焦点控件是输入框
if (this.ActiveControl is NumericTextBox)
{
var activeControl = this.ActiveControl as NumericTextBox;
activeControl.Text = string.Empty;
}
break;
case "accept":
//验证通过
{
ValidatePollCode();
}
break;
default:
{
InputSimulatorUtils.SendKey(KeyCodes.Map[e.KeyCode]);
}
break;
}
}
/// <summary>
/// 调用开放平台获取门店注册信息
/// </summary>
/// <returns></returns>
private void ValidatePollCode()
{
bool isSuccess = false;
try
{
if (string.IsNullOrEmpty(txtTenantNo.Text.Trim()))
{
this.ShowMessage(this.lblInfo , LangProxy.ToLang("请输入企业编码") , false);
this.txtTenantNo.Focus();
return;
}
if (string.IsNullOrEmpty(txtAuthCode.Text.Trim()))
{
this.ShowMessage(this.lblInfo , LangProxy.ToLang("请输入提取密码") , 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.storePanel.Visible = true;
this.ShowMessage(this.lblInfo , LangProxy.ToLang("门店编码和名称审核后,请点击立即注册") , false);
this.ButtonOK.Visible = true;
this.ButtonOK.Focus();
isSuccess = true;
}
else
{
this.storePanel.Visible = false;
this.ButtonOK.Visible = false;
this.ShowMessage(this.lblInfo , response.Item2 , true);
isSuccess = false;
}
}
catch (Exception ex)
{
isSuccess = false;
this._pollCode = null;
LOGGER.Error(ex , "POS注册码验证异常");
this.ShowMessage(this.lblInfo , LangProxy.ToLang("POS注册码验证异常") , true);
}
finally
{
//门店POS注册码验证通过
if (isSuccess)
{
}
}
}
/// <summary>
/// 注册成功事件触发
/// </summary>
public event RegistedEventHandler Registed;
protected virtual void OnRegisted(RegistedEventArgs e)
{
Registed?.Invoke(this , e);
}
private void OnButtonOkClick(object sender , EventArgs 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 , LangProxy.ToLang("变更输入信息,请点击确认获取门店信息") , true);
return;
}
this.ShowMessage(this.lblInfo , LangProxy.ToLang("提交认证请求......") , 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<Authc>().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<Apis>("where apiType = @0" , ApiType.Business.ToString()).FirstOrDefault();
//获取会员AppKey和AppSecret
var cards = db.Query<Apis>("where apiType = @0" , ApiType.Card.ToString()).FirstOrDefault();
//获取外卖平台的AppKey和AppSecret
var waimais = db.Query<Apis>("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 OnInputEnterClick(object sender , EnterEventArg e)
{
ValidatePollCode();
}
}
public delegate void RegistedEventHandler(object sender , RegistedEventArgs e);
public class RegistedEventArgs : EventArgs
{
public readonly Authc Authc;
public RegistedEventArgs(Authc authc)
{
this.Authc = authc;
}
}
}