using DevComponents.DotNetBar.Controls; using DevComponents.DotNetBar.SuperGrid; using NLog; using POSV.Bean; using POSV.Card; using POSV.Component; using POSV.Helper; using POSV.Utils; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Reflection; using System.Text; using System.Windows.Forms; namespace POSV.Member { public partial class PointExchangeForm : BusinessForm { private static Logger logger = NLog.LogManager.GetCurrentClassLogger(); public int type = -1; public string schemeId = null;//兑换方案ID public string memberId = null;//会员ID public string cardNo = null;//会员卡号 public string giftDetailId = null;//礼品赠送ID public string typeName = null; public List schemeList = null; //礼品赠送列表 List listGift = null; public PointExchangeForm() { InitializeComponent(); this.controlBox.Text = "会员积分兑换"; this.controlBox.ShowApplicationVersion = false; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.DesignMode) return; this.Focus(); this.txtInput.Focus(); this.txtInput.SelectAll(); this.ActiveControl = this.txtInput; this.cmbCreType.SelectedIndexChanged += OnPalnSelectedIndexChanged; this.comboBoxGif.SelectedIndexChanged += OnGiftSelectedIndexChanged; } private void OnCloseTouchClick(object sender, EventArgs e) { //先关闭父窗体 if (this.Owner != null) { this.Owner.Close(); } //再关闭当前窗体 this.Close(); } 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 OnReadCardClick(object sender, EventArgs e) { var result = CardOperateUtils.Instance.ReadCardNo(); if (result.Item1) { this.txtInput.Text = result.Item2; //读卡成功,模拟回车事件 InputSimulatorUtils.SendKey(KeyCodes.Map["return"]); } else { result = CardOperateUtilsOther.Instance.ReadCardNo(); if (result.Item1) { this.txtInput.Text = result.Item2; //读卡成功,模拟回车事件 InputSimulatorUtils.SendKey(KeyCodes.Map["return"]); } else { this.ShowMessage(lblInfo, result.Item2); } } } private void SearchMessage() { var isVerify = InputVerify(); if (isVerify) { var voucherNo = this.txtInput.Text; //智能识别刷卡方式 var way = CardUtils.JudgeCardWay(Global.Instance.Worker.TenantId, voucherNo); if (way == MemberCardNoType.未知) { this.ShowMessage(this.lblInfo, "无法识别的卡号,请确认", true); return; } switch (way) { case MemberCardNoType.手机号: { CardInfoMessage("mobile"); } break; case MemberCardNoType.电子卡号: { CardInfoMessage("scanCode"); } break; case MemberCardNoType.真实卡号: { CardInfoMessage("cardNo"); } break; case MemberCardNoType.卡面号: { CardInfoMessage("surfaceNo"); } break; } } } /// /// 会员卡信息 /// private bool CardInfoMessage(string property) { bool result = false; try { var request = new MemberInfoQueryRequest(); request.Property = property; request.Keyword = this.txtInput.Text.Trim(); request.ShopNo = Global.Instance.Authc.StoreNo; request.PosNo = Global.Instance.Authc.PosNo; request.WorkerNo = Global.Instance.Worker.No; var response = CardUtils.MemberInfoQuery(request); //成功 if (response.Item1) { result = true; ShowMessage(this.lblInfo, response.Item2, false); MemberInfoQueryResponse memberInfoQueryResponse = response.Item3; lblMemerName.Text = memberInfoQueryResponse.Name; lblMemeberMobile.Text = memberInfoQueryResponse.Mobile; lblLinkPhone.Text = memberInfoQueryResponse.LinkPhone; switch (memberInfoQueryResponse.Sex) { case 0: lblSex.Text = "女"; break; case 1: lblSex.Text = "男"; break; default: lblSex.Text = "保密"; break; } lblBirthday.Text = memberInfoQueryResponse.Birthday; lblDescription.Text = memberInfoQueryResponse.Description; List list = memberInfoQueryResponse.CardList; foreach (MemberCard memberCard in list) { switch (memberCard.Status) { case 1: memberCard.CardStatus = "正常"; break; case 2: memberCard.CardStatus = "预售"; break; case 3: memberCard.CardStatus = "挂失"; break; case 4: memberCard.CardStatus = "冻结"; break; case 5: memberCard.CardStatus = "销户"; break; default: memberCard.CardStatus = "未知"; break; } } memberId = memberInfoQueryResponse.Id; cardListTable.PrimaryGrid.DataSource = list; } else { result = false; lblMemerName.Text = ""; lblMemeberMobile.Text = ""; lblLinkPhone.Text = ""; lblSex.Text = ""; lblBirthday.Text = ""; lblDescription.Text = ""; memberId = null; List list = new List(); cardListTable.PrimaryGrid.DataSource = list; ShowMessage(this.lblInfo, response.Item2, true); } } catch (Exception ex) { result = false; ShowMessage(this.lblInfo, "会员卡信息查询异常", true); LOGGER.Error(ex, "会员卡信息查询异常"); } return result; } /// /// 输入是否验证通过 /// private bool InputVerify() { if (string.IsNullOrEmpty(this.txtInput.Text.Trim())) { ShowMessage(this.lblInfo, "请输入卡号信息", false); return false; } return true; } private void OnTicketRowActivated(object sender, DevComponents.DotNetBar.SuperGrid.GridRowActivatedEventArgs e) { //切换会员卡的时候重置方案相关ID schemeId = null;//兑换方案ID cardNo = null;// 会员卡号 GridPanel grid = e.GridPanel; if (e.NewActiveRow != null) { //先清除其他表数据 GridRow row = e.NewActiveRow as GridRow; grid.SetSelected(e.NewActiveRow, false); grid.SetActiveRow(e.NewActiveRow); cardNo = row.Cells["cardNo"].Value.ToString(); string preAmount = row.Cells["totalAmount"].Value.ToString(); string perJifen = row.Cells["totalPoint"].Value.ToString(); this.preAmountTextBox.Text = preAmount;//兑换前余额 this.perJifenTextBox.Text = perJifen;//兑换前积分 try { var request = new PointExchangeSchemesRequest(); request.ShopNo = Global.Instance.Authc.StoreNo; request.PosNo = Global.Instance.Authc.PosNo; var response = CardUtils.PointExchangeSchemes(request); //成功 if (response.Item1) { schemeList = response.Item3.List; List temp_SchemeList = new List(); if (this.type > 0) { temp_SchemeList = schemeList.FindAll(x => x.Type.Equals(this.type)); } else { temp_SchemeList = schemeList; } this.cmbCreType.DisplayMember = "Name"; this.cmbCreType.ValueMember = "Id"; this.cmbCreType.DataSource = temp_SchemeList; if (temp_SchemeList != null && temp_SchemeList.Count > 0) { schemeId = temp_SchemeList[0].Id; var request1 = new PointExchangeSchemeDetailRequest(); request1.SchemeId = schemeId; request1.ShopNo = Global.Instance.Authc.StoreNo; request1.PosNo = Global.Instance.Authc.PosNo; var response1 = CardUtils.PointExchangeSchemeDetail(request1); if (response1.Item1) { //充值金额赠送方案 resetPlanDetail(response1.Item3.Data); } } else { schemeId = null; this.afterAmountTextBox.Text = StringUtils.GetString(StringUtils.GetDecimal(this.preAmountTextBox.Text));//兑换后余额 this.afterJifenTextBox.Text = StringUtils.GetString(StringUtils.GetDecimal(this.perJifenTextBox.Text));//兑换后积分 this.descriptionTextBox.Text = ""; this.comboBoxGif.DataSource = new List(); } } else { ShowMessage(this.lblInfo, "获取充值方案异常", true); } } catch (Exception ex) { ShowMessage(this.lblInfo, "获取充值方案异常", true); LOGGER.Error(ex, "获取充值方案异常"); } } } private void OnPalnSelectedIndexChanged(object sender, EventArgs e) { var obj = sender as ComboBoxEx; schemeId = StringUtils.GetString(obj.SelectedValue); var request1 = new PointExchangeSchemeDetailRequest(); request1.SchemeId = schemeId; request1.ShopNo = Global.Instance.Authc.StoreNo; request1.PosNo = Global.Instance.Authc.PosNo; var response1 = CardUtils.PointExchangeSchemeDetail(request1); if (response1.Item1) { //充值金额赠送方案 resetPlanDetail(response1.Item3.Data); } } public void resetPlanDetail(PointExchangeSchemeDetailResponse response) { if (response.Type == 1) { this.afterAmountTextBox.Text = StringUtils.GetString(StringUtils.GetDecimal(this.preAmountTextBox.Text) + StringUtils.GetDecimal(response.Worth));//兑换后余额 } else { this.afterAmountTextBox.Text = StringUtils.GetString(StringUtils.GetDecimal(this.preAmountTextBox.Text));//兑换后余额 } this.afterJifenTextBox.Text = StringUtils.GetString(StringUtils.GetDecimal(this.perJifenTextBox.Text) - StringUtils.GetDecimal(response.PointValue));//兑换后积分 this.descriptionTextBox.Text = response.Description; if (response.Type == 1) { typeName = "兑换现金"; } else if (response.Type == 2) { typeName = "兑换礼品"; } else if (response.Type == 3) { typeName = "兑换代金券"; } this.listGift = response.Gifts; if (listGift != null) { this.comboBoxGif.DisplayMember = string.Format("DisPlayName"); this.comboBoxGif.ValueMember = "Id"; this.comboBoxGif.DataSource = listGift; } else { this.comboBoxGif.DisplayMember = string.Format("DisPlayName"); this.comboBoxGif.ValueMember = "Id"; this.comboBoxGif.DataSource = new List(); } if (StringUtils.GetDecimal(this.afterJifenTextBox.Text) < 0) { ShowMessage(this.lblInfo, "积分值不足", false); } } private void OnGiftSelectedIndexChanged(object sender, EventArgs e) { var obj = sender as ComboBoxEx; giftDetailId = StringUtils.GetString(obj.SelectedValue); } private void BtnExchange(object sender, EventArgs e) { string passwd = string.IsNullOrEmpty(this.numericTextBox1.Text) ? "" : DesUtils.Encrypt(this.numericTextBox1.Text); if (cardNo == null || "".Equals(cardNo)) { ShowMessage(this.lblInfo, "请选择要兑换的卡", true); return; } if (this.schemeId == null || "".Equals(this.schemeId)) { ShowMessage(this.lblInfo, "请选择积分兑换方案", true); return; } if (passwd == null || "".Equals(passwd)) { ShowMessage(this.lblInfo, "请输入卡密码", true); return; } if (StringUtils.GetDecimal(this.afterJifenTextBox.Text) < 0) { ShowMessage(this.lblInfo, "积分值不足", true); return; } var request = new PointExchangeDoRequest(); request.SchemeId = this.schemeId; request.MemberId = this.memberId; request.Password = passwd; request.ShopNo = Global.Instance.Authc.StoreNo; request.PosNo = Global.Instance.Authc.PosNo; request.CardNo = this.cardNo; request.WorkerNo = Global.Instance.Worker.No; request.SourceSign = "pos"; var response = CardUtils.PointExchangeDo(request); if (response.Item1) { ShowMessage(this.lblInfo, "积分兑换成功", true); //打印积分兑换结果 PointExchangeDoResponse pointExchangeDoResponse = response.Item3.Data; //打印退款结果 this.ShowToastNotify(this, "开始打印"); pointExchangeDoResponse.Type = typeName; pointExchangeDoResponse.Description = this.descriptionTextBox.Text; //构建收银小票模版参数打印 var vars = CardHelper.BuilderPointExchangeVariable(pointExchangeDoResponse); //积分兑换打印份数 int ticketCount = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_CASHIER_EXRECHARGE_COUNT, 1); //打印延迟 int delaySecond = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_CASHIER_CARD_PRINT_DELAY, 1); Tuple result = CardHelper.PrinterTicket("积分兑换", vars, true, false, ticketCount, delaySecond); this.ShowToastNotify(this, string.Format("{0}", result.Item2)); this.numericTextBox1.Text = ""; //刷新页面 SearchMessage(); } else { ShowMessage(this.lblInfo, response.Item2, false); } } private void BtnExitClick(object sender, EventArgs e) { OnCloseTouchClick(sender, e); } private void cb_change_click(object sender, EventArgs e) { var obj = sender as CheckBoxX; var indexT = obj.Tag as string; if ("全部".Equals(indexT)) { type = -1; } if ("兑换礼品".Equals(indexT)) { type = 2; } if ("兑换卡余额".Equals(indexT)) { type = 1; } if ("兑换卡券".Equals(indexT)) { type = 3; } if (cardNo == null || "".Equals(cardNo)) { return; } if (schemeList==null) { schemeList = new List(); } List temp_SchemeList = new List(); if (this.type > 0) { temp_SchemeList = schemeList.FindAll(x => x.Type.Equals(this.type)); } else { temp_SchemeList = schemeList; } this.cmbCreType.DisplayMember = "Name"; this.cmbCreType.ValueMember = "Id"; this.cmbCreType.DataSource = temp_SchemeList; if (temp_SchemeList != null && temp_SchemeList.Count > 0) { schemeId = temp_SchemeList[0].Id; var request1 = new PointExchangeSchemeDetailRequest(); request1.SchemeId = schemeId; request1.ShopNo = Global.Instance.Authc.StoreNo; request1.PosNo = Global.Instance.Authc.PosNo; var response1 = CardUtils.PointExchangeSchemeDetail(request1); if (response1.Item1) { //充值金额赠送方案 resetPlanDetail(response1.Item3.Data); } else { ShowMessage(this.lblInfo, "获取兑换方案明细失败", true); } } else { schemeId = null; this.afterAmountTextBox.Text = StringUtils.GetString(StringUtils.GetDecimal(this.preAmountTextBox.Text));//兑换后余额 this.afterJifenTextBox.Text = StringUtils.GetString(StringUtils.GetDecimal(this.perJifenTextBox.Text));//兑换后积分 this.descriptionTextBox.Text = ""; this.comboBoxGif.DataSource = new List(); } } private void OnFinishedClick(object sender, EventArgs e) { SearchMessage(); } private void OnBtnCustomClick(object sender, EventArgs e) { var item = sender as NumericTextBox; NumericKeyboard.ShowKeyboard(this, item); } } }