using DevComponents.DotNetBar.SuperGrid; using NLog; using POS.Language.Language; using POSV.Bean; using POSV.Card; using POSV.Component; using POSV.Entity; 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 CardAccountDestroyForm : BusinessForm { public string cardNo = null; private static Logger logger = NLog.LogManager.GetCurrentClassLogger(); public CardAccountDestroyForm() { InitializeComponent(); this.controlBox.Text = LangProxy.ToLang( "会员退款余额"); this.controlBox.ShowApplicationVersion = false; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.DesignMode) return; DefaultGridStyle.setDefaultGridStyle(this.cardListTable); this.Focus(); this.txtInput.Focus(); this.txtInput.SelectAll(); this.ActiveControl = this.txtInput; } 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 OnFinishedClick(object sender, EventArgs e) { SearchMessage(); } public 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, LangProxy.ToLang("无法识别的卡号,请确认"), 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 InputVerify() { if (string.IsNullOrEmpty(this.txtInput.Text.Trim())) { ShowMessage(this.lblInfo, LangProxy.ToLang("请输入卡号信息"), false); return false; } return true; } /// /// 会员卡信息 /// 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 = LangProxy.ToLang("女"); break; case 1: lblSex.Text = LangProxy.ToLang("男"); break; default: lblSex.Text = LangProxy.ToLang("保密"); 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 = LangProxy.ToLang("正常"); break; case 2: memberCard.CardStatus = LangProxy.ToLang("预售"); break; case 3: memberCard.CardStatus = LangProxy.ToLang("挂失"); break; case 4: memberCard.CardStatus = LangProxy.ToLang("冻结"); break; case 5: memberCard.CardStatus = LangProxy.ToLang("销户"); break; default: memberCard.CardStatus = LangProxy.ToLang("未知"); break; } } cardListTable.PrimaryGrid.DataSource = list; } else { result = false; lblMemerName.Text = ""; lblMemeberMobile.Text = ""; lblLinkPhone.Text = ""; lblSex.Text = ""; lblBirthday.Text = ""; lblDescription.Text = ""; List list = new List(); cardListTable.PrimaryGrid.DataSource = list; ShowMessage(this.lblInfo, response.Item2, true); } } catch (Exception ex) { result = false; ShowMessage(this.lblInfo, LangProxy.ToLang("会员卡信息查询异常"), true); LOGGER.Error(ex, "会员卡信息查询异常"); } return result; } private void btn_exit_Click(object sender, EventArgs e) { //先关闭父窗体 if (this.Owner != null) { this.Owner.Close(); } //再关闭当前窗体 this.Close(); } private void BtnDestroy(object sender, EventArgs e) { string passwd = string.IsNullOrEmpty(this.numericTextBox1.Text) ? "" : DesUtils.Encrypt(this.numericTextBox1.Text); try { var request = new CardAccountDestroyRequest(); request.CardNo = cardNo; request.Passwd = passwd; request.Type = 0; request.ShopNo = Global.Instance.Authc.StoreNo; request.PosNo = Global.Instance.Authc.PosNo; request.WorkerNo = Global.Instance.Worker.No; request.SourceSign = "pos"; var response = CardUtils.CardAccountDestroy(request); //成功 if (response.Item1) { ShowMessage(this.lblInfo, response.Item2, false); //保存退款余额信息 CardAccountDestroy entity = new CardAccountDestroy(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.CardNo = cardNo; entity.PlanName = Global.Instance.BusinessPlanLog.Name; entity.PlanNo = Global.Instance.BusinessPlanLog.No; entity.PosNo = Global.Instance.Authc.PosNo; entity.StoreId = Global.Instance.BusinessPlanLog.StoreId; entity.StoreName = Global.Instance.Authc.StoreName; entity.StoreNo = Global.Instance.BusinessPlanLog.StoreNo; entity.DebitMoney = response.Item3.Data.DebitMoney; entity.RefundMoney = response.Item3.Data.RefundMoney; entity.PayNo ="01"; entity.PayName ="人民币"; entity.TenantId = Global.Instance.BusinessPlanLog.TenantId; entity.WorkerId = Global.Instance.BusinessPlanLog.WorkerId; entity.WorkerName = Global.Instance.BusinessPlanLog.WorkerName; entity.WorkerNo = Global.Instance.BusinessPlanLog.WorkerNo; saveCardRecharge(entity); CardAccountDestroyResponse cardAccountDestroyResponse = response.Item3.Data; //打印退款结果 this.ShowToastNotify(this, "开始打印"); //构建收银小票模版参数打印 var vars = CardHelper.BuilderAccountDestroyVariable(response.Item3.Data); //退卡余额打印份数 int ticketCount = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_CASHIER_BACKCARD_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, true); } } catch (Exception ex) { ShowMessage(this.lblInfo, LangProxy.ToLang("退卡余额信息查询异常"), true); LOGGER.Error(ex, "退卡余额信息查询异常"); } } private void OnTicketRowActivated(object sender, DevComponents.DotNetBar.SuperGrid.GridRowActivatedEventArgs e) { //卡号 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(); } CardCheckAccountDestroyMessage(cardNo); } /// /// 销户前校验 /// private void CardCheckAccountDestroyMessage(string cardNo) { if (cardNo==null || "".Equals(cardNo)) { ShowMessage(this.lblInfo, LangProxy.ToLang("请选择要退的卡"), true); return; } try { var request = new CardCheckAccountDestroyRequest(); request.CardNo = cardNo; request.ShopNo = Global.Instance.Authc.StoreNo; request.PosNo = Global.Instance.Authc.PosNo; request.WorkerNo = Global.Instance.Worker.No; request.SourceSign = "pos"; var response = CardUtils.CardCheckAccountDestroy(request); //成功 if (response.Item1) { ShowMessage(this.lblInfo, response.Item2, false); CardCheckAccountDestroyResponse cardCheckAccountDestroyResponse = response.Item3.Data; this.globalAmountTextBox.Text = String.Format("{0}", cardCheckAccountDestroyResponse.GlobalAmount); this.giftAmountTextBox.Text = String.Format("{0}", cardCheckAccountDestroyResponse.GiftAmount); this.debitMoneyTextBox.Text = String.Format("{0}", cardCheckAccountDestroyResponse.DebitMoney); this.refundMoneyTextBox.Text = String.Format("{0}", cardCheckAccountDestroyResponse.RefundMoney); } else { ShowMessage(this.lblInfo, response.Item2, true); this.globalAmountTextBox.Text = String.Format("{0}", 0.00M); this.giftAmountTextBox.Text = String.Format("{0}", 0.00M); this.debitMoneyTextBox.Text = String.Format("{0}", 0.00M); this.refundMoneyTextBox.Text = String.Format("{0}", 0.00M); } } catch (Exception ex) { ShowMessage(this.lblInfo, LangProxy.ToLang("退卡余额信息查询异常"), true); LOGGER.Error(ex, "退卡余额信息查询异常"); } } private void OnBtnCustomClick(object sender, EventArgs e) { var item = sender as NumericTextBox; NumericKeyboard.ShowKeyboard(this, item); } public void saveCardRecharge(CardAccountDestroy entity) { try { lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var transaction = db.GetTransaction()) { logger.Info("保存退卡余额订单......开始"); // 保存主单数据 db.Save(entity); transaction.Complete(); logger.Info("保存退卡余额订单......成功"); } } } } catch (Exception ex) { LOGGER.Error(ex); } } } }