|
|
|
|
using DevComponents.DotNetBar;
|
|
|
|
|
using DevComponents.DotNetBar.Controls;
|
|
|
|
|
using POSV.Bean;
|
|
|
|
|
using POSV.Card;
|
|
|
|
|
using POSV.Component;
|
|
|
|
|
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 MemberHistoryForm : BusinessForm
|
|
|
|
|
{
|
|
|
|
|
public int queryType = -1;
|
|
|
|
|
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
|
|
|
|
|
|
string property = "";
|
|
|
|
|
string keyword = "";
|
|
|
|
|
|
|
|
|
|
private bool isAllStore = false;
|
|
|
|
|
|
|
|
|
|
public MemberHistoryForm()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
base.OnLoad(e);
|
|
|
|
|
|
|
|
|
|
if (this.DesignMode) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DefaultGridStyle.setDefaultGridStyle(this.historyListTable);
|
|
|
|
|
|
|
|
|
|
this.startPicker.Value = DateTime.Now.Date;
|
|
|
|
|
this.endPicker.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
|
|
|
|
|
this.checkBoxX1.Checked = true;
|
|
|
|
|
this.Focus();
|
|
|
|
|
this.txtInput.Focus();
|
|
|
|
|
this.txtInput.SelectAll();
|
|
|
|
|
this.ActiveControl = this.txtInput;
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 退出按钮
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void BtnExitClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
//先关闭父窗体
|
|
|
|
|
if (this.Owner != null)
|
|
|
|
|
{
|
|
|
|
|
this.Owner.Close();
|
|
|
|
|
}
|
|
|
|
|
//再关闭当前窗体
|
|
|
|
|
this.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void BtnTimeClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var obj = sender as ButtonX;
|
|
|
|
|
var typeStr = obj.Tag as string;
|
|
|
|
|
var type = (ReportQuickDate)Enum.Parse(typeof(ReportQuickDate), typeStr);
|
|
|
|
|
var res = DateTimeUtils.CalculateBusinessPlanDate(type, this.startPicker.Value, this.endPicker.Value);
|
|
|
|
|
this.startPicker.Value = res.Item1;
|
|
|
|
|
this.endPicker.Value = res.Item2;
|
|
|
|
|
|
|
|
|
|
//获得当前页
|
|
|
|
|
int cur = pagerControl1.CurrentPage;
|
|
|
|
|
//获得每页显示的记录数
|
|
|
|
|
int rows = pagerControl1.RowsPerPage;
|
|
|
|
|
MemberHistoryRecord(cur, rows);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void CbChangeClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var obj = sender as CheckBoxX;
|
|
|
|
|
var indexT = obj.Tag as string;
|
|
|
|
|
if ("全部".Equals(indexT))
|
|
|
|
|
{
|
|
|
|
|
queryType = -1;
|
|
|
|
|
}
|
|
|
|
|
if ("开户".Equals(indexT))
|
|
|
|
|
{
|
|
|
|
|
queryType = 0;
|
|
|
|
|
}
|
|
|
|
|
if ("充值".Equals(indexT))
|
|
|
|
|
{
|
|
|
|
|
queryType = 1;
|
|
|
|
|
}
|
|
|
|
|
if ("消费".Equals(indexT))
|
|
|
|
|
{
|
|
|
|
|
queryType = 2;
|
|
|
|
|
}
|
|
|
|
|
if ("退卡".Equals(indexT))
|
|
|
|
|
{
|
|
|
|
|
queryType = 3;
|
|
|
|
|
}
|
|
|
|
|
if ("修改密码".Equals(indexT))
|
|
|
|
|
{
|
|
|
|
|
queryType = 4;
|
|
|
|
|
}
|
|
|
|
|
if ("挂失*解挂".Equals(indexT))
|
|
|
|
|
{
|
|
|
|
|
queryType = 5;
|
|
|
|
|
}
|
|
|
|
|
if ("资料变更".Equals(indexT))
|
|
|
|
|
{
|
|
|
|
|
queryType = 15;
|
|
|
|
|
}
|
|
|
|
|
this.txtInput.Focus();
|
|
|
|
|
this.txtInput.SelectAll();
|
|
|
|
|
//获得当前页
|
|
|
|
|
int cur = pagerControl1.CurrentPage;
|
|
|
|
|
//获得每页显示的记录数
|
|
|
|
|
int rows = pagerControl1.RowsPerPage;
|
|
|
|
|
MemberHistoryRecord(cur, rows);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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 BtnQueryClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
isAllStore = false;
|
|
|
|
|
|
|
|
|
|
DoQuery();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 输入是否验证通过
|
|
|
|
|
/// </summary>
|
|
|
|
|
private bool InputVerify()
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtInput.Text.Trim()))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void DoQuery()
|
|
|
|
|
{
|
|
|
|
|
var isVerify = InputVerify();
|
|
|
|
|
|
|
|
|
|
if (isVerify)
|
|
|
|
|
{
|
|
|
|
|
var voucherNo = this.txtInput.Text;
|
|
|
|
|
//智能识别刷卡方式
|
|
|
|
|
var way = CardUtils.JudgeCardWay(Global.Instance.Worker.TenantId, voucherNo);
|
|
|
|
|
if (way == MemberCardNoType.未知)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, "无法识别的卡号,请确认");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
switch (way)
|
|
|
|
|
{
|
|
|
|
|
case MemberCardNoType.手机号:
|
|
|
|
|
{
|
|
|
|
|
property = "mobile";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MemberCardNoType.电子卡号:
|
|
|
|
|
{
|
|
|
|
|
property = "scanCode";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MemberCardNoType.真实卡号:
|
|
|
|
|
{
|
|
|
|
|
property = "cardNo";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MemberCardNoType.卡面号:
|
|
|
|
|
{
|
|
|
|
|
property = "surfaceNo";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
keyword = this.txtInput.Text.Trim();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
property = string.Empty;
|
|
|
|
|
keyword = string.Empty;
|
|
|
|
|
}
|
|
|
|
|
//获得当前页
|
|
|
|
|
int cur = pagerControl1.CurrentPage;
|
|
|
|
|
//获得每页显示的记录数
|
|
|
|
|
int rows = pagerControl1.RowsPerPage;
|
|
|
|
|
MemberHistoryRecord(cur, rows);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void MemberHistoryRecord(int PageNum, int pageSize)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var request = new MemberHistoryRecordRequest();
|
|
|
|
|
request.StartTime = this.startPicker.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
request.EndTime = this.endPicker.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
request.PageNum = PageNum;
|
|
|
|
|
request.PageSize = pageSize;
|
|
|
|
|
request.Keyword = keyword;
|
|
|
|
|
request.Property = property;
|
|
|
|
|
request.Type = queryType;
|
|
|
|
|
|
|
|
|
|
request.ShopNo = Global.Instance.Authc.StoreNo;
|
|
|
|
|
if (this.isAllStore)
|
|
|
|
|
{
|
|
|
|
|
request.ShopNo = "";
|
|
|
|
|
}
|
|
|
|
|
request.PosNo = Global.Instance.Authc.PosNo;
|
|
|
|
|
request.WorkerNo = Global.Instance.Worker.No;
|
|
|
|
|
request.SourceSign = "pos";
|
|
|
|
|
var response = CardUtils.MemberHistoryRecord(request);
|
|
|
|
|
|
|
|
|
|
//成功
|
|
|
|
|
if (response.Item1)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
this.ShowToastNotify(this, response.Item2);
|
|
|
|
|
List<MemberHistoryRecordResponse> cardPointChangeResponse = response.Item3.List;
|
|
|
|
|
this.pagerControl1.TotalPage = response.Item3.PageCount;
|
|
|
|
|
this.pagerControl1.CurrentPage = response.Item3.PageNum;
|
|
|
|
|
this.pagerControl1.RecordCount = response.Item3.TotalCount;
|
|
|
|
|
this.pagerControl1.RowsPerPage = response.Item3.PageSize;
|
|
|
|
|
historyListTable.PrimaryGrid.DataSource = cardPointChangeResponse;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
List<CardPointChangeResponse> list = new List<CardPointChangeResponse>();
|
|
|
|
|
historyListTable.PrimaryGrid.DataSource = list;
|
|
|
|
|
this.ShowToastNotify(this, response.Item2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, "会员操作记录获取异常");
|
|
|
|
|
|
|
|
|
|
LOGGER.Error(ex, "会员操作记录获取异常");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 读卡
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
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.ShowToastNotify(this, result.Item2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnFinishedClick(object sender, Component.EnterEventArg e)
|
|
|
|
|
{
|
|
|
|
|
var isVerify = InputVerify();
|
|
|
|
|
if (isVerify)
|
|
|
|
|
{
|
|
|
|
|
var voucherNo = this.txtInput.Text;
|
|
|
|
|
//智能识别刷卡方式
|
|
|
|
|
var way = CardUtils.JudgeCardWay(Global.Instance.Worker.TenantId, voucherNo);
|
|
|
|
|
if (way == MemberCardNoType.未知)
|
|
|
|
|
{
|
|
|
|
|
this.ShowToastNotify(this, "无法识别的卡号,请确认");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
switch (way)
|
|
|
|
|
{
|
|
|
|
|
case MemberCardNoType.手机号:
|
|
|
|
|
{
|
|
|
|
|
property = "mobile";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MemberCardNoType.电子卡号:
|
|
|
|
|
{
|
|
|
|
|
property = "scanCode";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MemberCardNoType.真实卡号:
|
|
|
|
|
{
|
|
|
|
|
property = "cardNo";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MemberCardNoType.卡面号:
|
|
|
|
|
{
|
|
|
|
|
property = "surfaceNo";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
keyword = this.txtInput.Text.Trim();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
property = string.Empty;
|
|
|
|
|
keyword = string.Empty;
|
|
|
|
|
}
|
|
|
|
|
//获得当前页
|
|
|
|
|
int cur = pagerControl1.CurrentPage;
|
|
|
|
|
//获得每页显示的记录数
|
|
|
|
|
int rows = pagerControl1.RowsPerPage;
|
|
|
|
|
MemberHistoryRecord(cur, rows);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnQueryPageChangeWithObject(object obj)
|
|
|
|
|
{
|
|
|
|
|
//获得当前页
|
|
|
|
|
int cur = pagerControl1.CurrentPage;
|
|
|
|
|
//获得每页显示的记录数
|
|
|
|
|
int rows = pagerControl1.RowsPerPage;
|
|
|
|
|
|
|
|
|
|
PagerControl pager = obj as PagerControl;
|
|
|
|
|
if (pager != null)
|
|
|
|
|
{
|
|
|
|
|
MemberHistoryRecord(cur, rows);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void BtnQueryAllClick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
isAllStore = true;
|
|
|
|
|
|
|
|
|
|
DoQuery();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|