|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using DevComponents.DotNetBar;
|
|
|
|
|
using DevComponents.DotNetBar.Controls;
|
|
|
|
|
using POSV.Bean;
|
|
|
|
|
using POSV.Card;
|
|
|
|
|
using POSV.Component;
|
|
|
|
|
using POSV.Utils;
|
|
|
|
|
using POSV.Helper;
|
|
|
|
|
using POS.Language.Language;
|
|
|
|
|
|
|
|
|
|
namespace POSV.Member
|
|
|
|
|
{
|
|
|
|
|
public partial class CardOpenForm : BusinessForm
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 会员卡开户响应信息
|
|
|
|
|
/// </summary>
|
|
|
|
|
private String cardOpenNo;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 会员卡参数配置规则
|
|
|
|
|
/// </summary>
|
|
|
|
|
private MemberCardItem _currentCardItem = null;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 当前读卡的方式
|
|
|
|
|
/// </summary>
|
|
|
|
|
private MemberCardReadType _currentReadCardType = MemberCardReadType.手机号码;
|
|
|
|
|
|
|
|
|
|
public CardOpenForm()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
|
|
|
|
this.controlBox.WindowMoveClick += OnWindowMoveClick;
|
|
|
|
|
|
|
|
|
|
this.Text = LangProxy.ToLang("会员卡开户");
|
|
|
|
|
this.controlBox.Text = LangProxy.ToLang("会员卡开户");
|
|
|
|
|
this.controlBox.ShowApplicationVersion = false;
|
|
|
|
|
|
|
|
|
|
//半角输入
|
|
|
|
|
this.ImeMode = ImeMode.OnHalf;
|
|
|
|
|
|
|
|
|
|
var _password = Global.Instance.GlobalConfigStringValue(ConfigConstant.CONFIG_CASHIER_PREINSTALLPASSWORD);
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(_password))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.txtCardPasswd.Text = _password;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
base.OnLoad(e);
|
|
|
|
|
|
|
|
|
|
SetStyle(ControlStyles.Selectable, true);
|
|
|
|
|
|
|
|
|
|
//会员卡号
|
|
|
|
|
this.txtCardNo.Multiline = false;
|
|
|
|
|
this.txtCardNo.Focus();
|
|
|
|
|
this.txtCardNo.Select();
|
|
|
|
|
|
|
|
|
|
//会员规则
|
|
|
|
|
this._currentCardItem = JsonUtils.Deserialize<MemberCardItem>(Global.Instance.GlobalConfigStringValue(ConfigConstant.CASHIER_MEMBER_CARD));
|
|
|
|
|
//支持的读卡方式,开户环节将手机号和电子卡合并理解为一种介质方式,介质卡为第二种方式
|
|
|
|
|
this.panelReadCardType.Visible = (this._currentCardItem.ListReader.Count > 2);
|
|
|
|
|
|
|
|
|
|
//是否开启多种支付方式
|
|
|
|
|
this.radioButtonMobile.Visible = this._currentCardItem.ListReader.Contains(MemberCardReadType.手机号码) || this._currentCardItem.ListReader.Contains(MemberCardReadType.电子卡);
|
|
|
|
|
this.radioButtonCardNo.Visible = this._currentCardItem.ListReader.Contains(MemberCardReadType.磁条卡或IC卡);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_ALLOW_MEMBER_DEFAULTENTITYCARD, false))
|
|
|
|
|
{
|
|
|
|
|
this._currentCardItem.DefaultType = MemberCardReadType.磁条卡或IC卡;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//不允许手机号开户
|
|
|
|
|
if (Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_ALLOW_MEMBER_NOCELLPHONESALLOWEDOPENANACCOUNT, false))
|
|
|
|
|
{
|
|
|
|
|
this._currentCardItem.DefaultType = MemberCardReadType.磁条卡或IC卡;
|
|
|
|
|
this.radioButtonMobile.Visible = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//默认选择的读卡方式
|
|
|
|
|
switch (this._currentCardItem.DefaultType)
|
|
|
|
|
{
|
|
|
|
|
case MemberCardReadType.手机号码:
|
|
|
|
|
case MemberCardReadType.电子卡:
|
|
|
|
|
this.radioButtonMobile.Checked = true;
|
|
|
|
|
break;
|
|
|
|
|
case MemberCardReadType.磁条卡或IC卡:
|
|
|
|
|
this.radioButtonCardNo.Checked = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//加载证件类型
|
|
|
|
|
LoadCreTypeList();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void LoadCreTypeList()
|
|
|
|
|
{
|
|
|
|
|
Task.Factory.StartNew(() =>
|
|
|
|
|
{
|
|
|
|
|
var lists = CardUtils.CreTypeList();
|
|
|
|
|
return lists;
|
|
|
|
|
}).ContinueWith(task =>
|
|
|
|
|
{
|
|
|
|
|
if (task.IsFaulted)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Error(task.Exception?.GetBaseException(), "加载证件类型异常");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.Invoke(new Action(() =>
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
var result = task.Result;
|
|
|
|
|
|
|
|
|
|
if (result.Item1)
|
|
|
|
|
{
|
|
|
|
|
this.cmbCreType.Items.Clear();
|
|
|
|
|
this.cmbCreType.Items.AddRange(result.Item3.ToArray());
|
|
|
|
|
|
|
|
|
|
this.cmbCreType.SelectedIndex = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 输入是否验证通过
|
|
|
|
|
/// </summary>
|
|
|
|
|
private bool InputVerify()
|
|
|
|
|
{
|
|
|
|
|
switch (this._currentReadCardType)
|
|
|
|
|
{
|
|
|
|
|
case MemberCardReadType.手机号码:
|
|
|
|
|
case MemberCardReadType.电子卡:
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtMobile.Text.Trim()))
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, LangProxy.ToLang("请输入手机号码"), false);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!StringUtils.IsMobilePhone(this.txtMobile.Text.Trim()))
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, LangProxy.ToLang("请输入合法的手机号"), false);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtCardNo.Text.Trim()))
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, LangProxy.ToLang("请输入手机号码"), false);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MemberCardReadType.磁条卡或IC卡:
|
|
|
|
|
{
|
|
|
|
|
if (!Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_ALLOW_MEMBER_NOCELLPHONENUMBERISALLOWED, false))
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtMobile.Text.Trim()))
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, LangProxy.ToLang("请输入手机号码"), false);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!StringUtils.IsMobilePhone(this.txtMobile.Text.Trim()))
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, LangProxy.ToLang("请输入合法的手机号"), false);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtCardNo.Text.Trim()))
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, LangProxy.ToLang("请刷卡或挥卡"), false);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtCardPasswd.Text.Trim()) || this.txtCardPasswd.Text.Trim().Length != 6)
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, LangProxy.ToLang("请设置六位会员密码"), true);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (string.IsNullOrEmpty(txtMemberName.Text.Trim() == "" ? "默认开户人" : txtMemberName.Text.Trim()))
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, LangProxy.ToLang("请输入会员姓名"), false);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void OnFinishedClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (!OpenanAccountVerify())
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
var isVerify = InputVerify();
|
|
|
|
|
if (isVerify)
|
|
|
|
|
{
|
|
|
|
|
var button = sender as ButtonX;
|
|
|
|
|
bool newMember = false;
|
|
|
|
|
|
|
|
|
|
var property = "mobile";
|
|
|
|
|
|
|
|
|
|
string realCardNo = txtCardNo.Text.Trim();
|
|
|
|
|
|
|
|
|
|
switch (this._currentReadCardType)
|
|
|
|
|
{
|
|
|
|
|
case MemberCardReadType.手机号码:
|
|
|
|
|
case MemberCardReadType.电子卡:
|
|
|
|
|
{
|
|
|
|
|
property = "mobile";
|
|
|
|
|
|
|
|
|
|
newMember = NewMemberElecCard();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MemberCardReadType.磁条卡或IC卡:
|
|
|
|
|
{
|
|
|
|
|
property = "cardNo";
|
|
|
|
|
|
|
|
|
|
//判断卡面号还是巨为生成的卡号
|
|
|
|
|
var cardWay = CardUtils.JudgeCardWay(Global.Instance.Worker.TenantId, realCardNo);
|
|
|
|
|
if (cardWay == MemberCardNoType.卡面号)
|
|
|
|
|
{
|
|
|
|
|
var res = CardUtils.QueryRealCardNo(realCardNo);
|
|
|
|
|
if (res.Item1)
|
|
|
|
|
{
|
|
|
|
|
var data = res.Item3;
|
|
|
|
|
realCardNo = data.CardNo;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, res.Item2, false);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
newMember = NewMemberCard(realCardNo);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (newMember)
|
|
|
|
|
{
|
|
|
|
|
var request = new MemberInfoQueryRequest();
|
|
|
|
|
|
|
|
|
|
request.Property = property;
|
|
|
|
|
request.Keyword = realCardNo;
|
|
|
|
|
request.ShopNo = Global.Instance.Authc.StoreNo;
|
|
|
|
|
request.WorkerNo = Global.Instance.Worker.No;
|
|
|
|
|
request.PosNo = Global.Instance.Authc.PosNo;
|
|
|
|
|
|
|
|
|
|
var resp = CardUtils.MemberInfoQuery(request);
|
|
|
|
|
|
|
|
|
|
//会员卡获取成功
|
|
|
|
|
if (resp.Item1)
|
|
|
|
|
{
|
|
|
|
|
//this.OnAcceptButtonClick(new TransparentEventArgs(TransparentAction.Accept , "accept" , resp.Item3));
|
|
|
|
|
|
|
|
|
|
//this.OnEscapeClick(this.ButtonCancel , EventArgs.Empty);
|
|
|
|
|
//打印开户信息
|
|
|
|
|
this.ShowToastNotify(this, LangProxy.ToLang("开始打印"));
|
|
|
|
|
string printOpenNo = cardOpenNo;
|
|
|
|
|
MemberInfoQueryResponse memberInfoQueryResponse = resp.Item3;
|
|
|
|
|
if (memberInfoQueryResponse.CardList != null && memberInfoQueryResponse.CardList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
List<MemberCard> nowList = memberInfoQueryResponse.CardList.FindAll(x => cardOpenNo.Equals(x.CardNo));
|
|
|
|
|
if (nowList != null && nowList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
MemberCard memberCard = nowList[0];
|
|
|
|
|
if (!string.IsNullOrEmpty(memberCard.FaceNo))
|
|
|
|
|
{
|
|
|
|
|
printOpenNo = memberCard.FaceNo;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//构建收银小票模版参数打印
|
|
|
|
|
var vars = CardHelper.BuilderCardOpenCardVariable(resp.Item3, printOpenNo);
|
|
|
|
|
//卡开户打印份数
|
|
|
|
|
int ticketCount = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_CASHIER_OPENCARD_COUNT, 1);
|
|
|
|
|
//打印延迟
|
|
|
|
|
int delaySecond = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_CASHIER_CARD_PRINT_DELAY, 1);
|
|
|
|
|
Tuple<bool, string> result = CardHelper.PrinterTicket("会员卡开户", vars, true, false, ticketCount, delaySecond);
|
|
|
|
|
|
|
|
|
|
//打开提示界面
|
|
|
|
|
var form = new CardOpenResultForm(memberInfoQueryResponse.Name, cardOpenNo, memberInfoQueryResponse.Mobile, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
form.OnRechargeClick += Form_OnRechargeClick;
|
|
|
|
|
form.ShowDialog();
|
|
|
|
|
//先关闭父窗体
|
|
|
|
|
if (this.Owner != null)
|
|
|
|
|
{
|
|
|
|
|
this.Owner.Close();
|
|
|
|
|
}
|
|
|
|
|
//再关闭当前窗体
|
|
|
|
|
this.Close();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, resp.Item2, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Form_OnRechargeClick(object sender, NotifyEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
OnRechargeClick?.Invoke(sender, new NotifyEventArgs(NotifyAction.Notify, "memberRecharge", e.Data));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 是否允许手机开户验证
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private bool OpenanAccountVerify()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
var _OpenanAccount = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_ALLOW_MEMBER_NOCELLPHONESALLOWEDOPENANACCOUNT,false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (_OpenanAccount)
|
|
|
|
|
{
|
|
|
|
|
if (radioButtonMobile.Checked)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this,"不允许手机号开户");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 电子会员卡开户
|
|
|
|
|
/// </summary>
|
|
|
|
|
private bool NewMemberElecCard()
|
|
|
|
|
{
|
|
|
|
|
bool isSuccess = true;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var request = new CardElecOpenRequest();
|
|
|
|
|
|
|
|
|
|
request.ShopNo = Global.Instance.Authc.StoreNo;
|
|
|
|
|
request.WorkerNo = Global.Instance.Worker.No;
|
|
|
|
|
request.PosNo = Global.Instance.Authc.PosNo;
|
|
|
|
|
|
|
|
|
|
request.Name = txtMemberName.Text.Trim() == "" ? "默认开户人" : txtMemberName.Text.Trim();
|
|
|
|
|
request.Passwd = txtCardPasswd.Text.Trim();
|
|
|
|
|
request.Mobile = txtMobile.Text.Trim();
|
|
|
|
|
|
|
|
|
|
request.Birthday = txtBirthday.Value.ToString("yyyy-MM-dd");
|
|
|
|
|
request.Description = txtDescription.Text;
|
|
|
|
|
|
|
|
|
|
request.Sex = checkBoxX1.Checked ? "1" : "0";
|
|
|
|
|
|
|
|
|
|
//来源-门店
|
|
|
|
|
request.SourceNo = "01";
|
|
|
|
|
//会员类型-个人
|
|
|
|
|
request.MemberTypeNo = "01";
|
|
|
|
|
|
|
|
|
|
var creType = cmbCreType.SelectedItem as CreTypeListResponse;
|
|
|
|
|
request.CreTypeNo = creType == null ? "" : creType.No;
|
|
|
|
|
request.CreNo = this.txtCreNo.Text.Trim();
|
|
|
|
|
|
|
|
|
|
var result = CardUtils.CardElecOpen(request);
|
|
|
|
|
|
|
|
|
|
if (result.Item1)
|
|
|
|
|
{
|
|
|
|
|
isSuccess = true;
|
|
|
|
|
CardElecOpenResponse cardElecOpenResponse = result.Item3;
|
|
|
|
|
cardOpenNo = cardElecOpenResponse.CardNo;
|
|
|
|
|
ShowMessage(this.lblInfo, result.Item2, false);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
isSuccess = false;
|
|
|
|
|
|
|
|
|
|
ShowMessage(this.lblInfo, result.Item2, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
isSuccess = false;
|
|
|
|
|
|
|
|
|
|
LOGGER.Error(ex, "电子会员卡开户异常");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return isSuccess;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 会员卡开户
|
|
|
|
|
/// </summary>
|
|
|
|
|
private bool NewMemberCard(string cardNo)
|
|
|
|
|
{
|
|
|
|
|
bool isSuccess = true;
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var request = new CardOpenRequest();
|
|
|
|
|
|
|
|
|
|
request.ShopNo = Global.Instance.Authc.StoreNo;
|
|
|
|
|
request.WorkerNo = Global.Instance.Worker.No;
|
|
|
|
|
request.PosNo = Global.Instance.Authc.PosNo;
|
|
|
|
|
|
|
|
|
|
request.CardNo = cardNo;
|
|
|
|
|
request.Name = txtMemberName.Text.Trim() == "" ? "默认开户人" : txtMemberName.Text.Trim();
|
|
|
|
|
request.Passwd = txtCardPasswd.Text.Trim();
|
|
|
|
|
request.Mobile = txtMobile.Text.Trim();
|
|
|
|
|
request.Birthday = txtBirthday.Text.Trim();
|
|
|
|
|
|
|
|
|
|
request.Description = txtDescription.Text;
|
|
|
|
|
|
|
|
|
|
request.Sex = checkBoxX1.Checked ? "1" : "0";
|
|
|
|
|
|
|
|
|
|
//来源-门店
|
|
|
|
|
request.SourceNo = "01";
|
|
|
|
|
|
|
|
|
|
//会员类型-个人
|
|
|
|
|
request.MemberTypeNo = "01";
|
|
|
|
|
|
|
|
|
|
var creType = cmbCreType.SelectedItem as CreTypeListResponse;
|
|
|
|
|
request.CreTypeNo = creType == null ? "" : creType.No;
|
|
|
|
|
request.CreNo = this.txtCreNo.Text.Trim();
|
|
|
|
|
|
|
|
|
|
var response = CardUtils.CardOpen(request);
|
|
|
|
|
|
|
|
|
|
//成功
|
|
|
|
|
if (response.Item1)
|
|
|
|
|
{
|
|
|
|
|
isSuccess = true;
|
|
|
|
|
CardOpenResponse cardOpenResponse = response.Item3;
|
|
|
|
|
cardOpenNo = cardOpenResponse.CardNo;
|
|
|
|
|
ShowMessage(this.lblInfo, response.Item2, false);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
isSuccess = false;
|
|
|
|
|
|
|
|
|
|
ShowMessage(this.lblInfo, response.Item2, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
isSuccess = false;
|
|
|
|
|
|
|
|
|
|
ShowMessage(this.lblInfo, LangProxy.ToLang("会员卡开户异常"), true);
|
|
|
|
|
|
|
|
|
|
LOGGER.Error(ex, "会员卡开户异常");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return isSuccess;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnCloseTouchClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
//先关闭父窗体
|
|
|
|
|
if (this.Owner != null)
|
|
|
|
|
{
|
|
|
|
|
this.Owner.Close();
|
|
|
|
|
}
|
|
|
|
|
//再关闭当前窗体
|
|
|
|
|
this.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void OnEscapeClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
OnCloseTouchClick(sender, e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnControlBoxCloseClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
OnCloseTouchClick(sender, e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnSelectTypeCheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CheckBoxX item = (CheckBoxX)sender;
|
|
|
|
|
Enum.TryParse(item.Tag.ToString(), out this._currentReadCardType);
|
|
|
|
|
|
|
|
|
|
//默认不允许键盘输入卡号
|
|
|
|
|
bool allowInputCardNo = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_ALLOW_INPUT_CARDNO, true);
|
|
|
|
|
|
|
|
|
|
switch (this._currentReadCardType)
|
|
|
|
|
{
|
|
|
|
|
case MemberCardReadType.手机号码:
|
|
|
|
|
case MemberCardReadType.电子卡:
|
|
|
|
|
{
|
|
|
|
|
this.ShowMessage(this.lblInfo, LangProxy.ToLang("请输入11位手机号码"));
|
|
|
|
|
|
|
|
|
|
this.txtCardNo.ReadOnly = false;
|
|
|
|
|
|
|
|
|
|
this.lblCardNo.Text = LangProxy.ToLang("手机号码:");
|
|
|
|
|
this.txtCardNo.WatermarkText = LangProxy.ToLang("请输入手机号码");
|
|
|
|
|
|
|
|
|
|
this.txtCardNo.MaxLength = 11;
|
|
|
|
|
this.txtCardNo.Multiline = false;
|
|
|
|
|
|
|
|
|
|
this.txtMobile.Enabled = false;
|
|
|
|
|
|
|
|
|
|
this.ButtonReadCard.Enabled = false;
|
|
|
|
|
this.ButtonWeixinOpen.Enabled = false;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MemberCardReadType.磁条卡或IC卡:
|
|
|
|
|
{
|
|
|
|
|
this.ShowMessage(this.lblInfo, LangProxy.ToLang("请刷卡或挥卡"));
|
|
|
|
|
|
|
|
|
|
this.txtCardNo.ReadOnly = false;
|
|
|
|
|
|
|
|
|
|
this.lblCardNo.Text = LangProxy.ToLang("会员卡号:");
|
|
|
|
|
|
|
|
|
|
this.txtCardNo.MaxLength = 20;
|
|
|
|
|
this.txtCardNo.Multiline = false;
|
|
|
|
|
this.txtCardNo.WatermarkText = LangProxy.ToLang("请刷卡或者输入卡号");
|
|
|
|
|
|
|
|
|
|
this.txtMobile.Enabled = true;
|
|
|
|
|
|
|
|
|
|
this.ButtonReadCard.Enabled = true;
|
|
|
|
|
this.ButtonWeixinOpen.Enabled = false;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.txtCardNo.Multiline = false;
|
|
|
|
|
this.txtCardNo.Focus();
|
|
|
|
|
this.txtCardNo.SelectAll();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnWindowMoveClick(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
WindowsAPI.MoveWindows(this.Handle);
|
|
|
|
|
|
|
|
|
|
this.txtCardNo.Multiline = false;
|
|
|
|
|
this.txtCardNo.Focus();
|
|
|
|
|
this.txtCardNo.SelectAll();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnControlBoxKeyboardClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
KeyboardType keyboardType = KeyboardType.英文;
|
|
|
|
|
Type type = this.ActiveControl.GetType();
|
|
|
|
|
PropertyInfo pinfo = type.GetProperty("Keyboard");
|
|
|
|
|
if (pinfo != null)
|
|
|
|
|
{
|
|
|
|
|
keyboardType = (KeyboardType)pinfo.GetValue(this.ActiveControl, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var keyboard = Application.OpenForms["VirtualKeyboard"];
|
|
|
|
|
if (keyboard == null)
|
|
|
|
|
{
|
|
|
|
|
keyboard = new VirtualKeyboard(keyboardType);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
((VirtualKeyboard)keyboard).ShowVirtualKeyboard(this, keyboardType);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Error(ex, "打开屏幕键盘异常");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnCardNoValueChanged(object sender, EnterEventArg e)
|
|
|
|
|
{
|
|
|
|
|
switch (this._currentReadCardType)
|
|
|
|
|
{
|
|
|
|
|
case MemberCardReadType.手机号码:
|
|
|
|
|
case MemberCardReadType.电子卡:
|
|
|
|
|
{
|
|
|
|
|
this.txtMobile.Text = this.txtCardNo.Text;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MemberCardReadType.磁条卡或IC卡:
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 读卡
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void OnReadCardTouchClick(object sender, TouchEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var result = CardOperateUtils.Instance.ReadCardNo();
|
|
|
|
|
if (result.Item1)
|
|
|
|
|
{
|
|
|
|
|
this.txtCardNo.Text = result.Item2;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result = CardOperateUtilsOther.Instance.ReadCardNo();
|
|
|
|
|
if (result.Item1)
|
|
|
|
|
{
|
|
|
|
|
this.txtCardNo.Text = result.Item2;
|
|
|
|
|
//读卡成功,模拟回车事件
|
|
|
|
|
InputSimulatorUtils.SendKey(KeyCodes.Map["return"]);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.ShowMessage(lblInfo, result.Item2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LOGGER.Error(ex, "读卡异常");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnCardNoEnterClick(object sender, EnterEventArg e)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtCardNo.Text.Trim()))
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, LangProxy.ToLang("请输入卡号或手机号"), true);
|
|
|
|
|
this.txtCardNo.SelectAll();
|
|
|
|
|
this.txtCardNo.Focus();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
this.txtCardPasswd.SelectAll();
|
|
|
|
|
this.txtCardPasswd.Focus();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnOrgPayPwdEnterClick(object sender, EnterEventArg e)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtCardPasswd.Text.Trim()))
|
|
|
|
|
{
|
|
|
|
|
ShowMessage(this.lblInfo, LangProxy.ToLang("请设置密码"), true);
|
|
|
|
|
this.txtCardPasswd.SelectAll();
|
|
|
|
|
this.txtCardPasswd.Focus();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
this.txtMemberName.SelectAll();
|
|
|
|
|
this.txtMemberName.Focus();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public event NofityEventHandler OnRechargeClick;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|