Merge branch 'main' of http://git.ts.e57.cn/chfei/29WxOrder
This commit is contained in:
commit
82165f25a8
11 files changed
+269
-127
No files matched your search
@@ -141,57 +141,75 @@ namespace Work._29Tools.Forms.UserForms
|
||||
}
|
||||
|
||||
private List<user_payment_record> paymentList;
|
||||
public async void GetBalanceList()
|
||||
private string GetBalanceFilters()
|
||||
{
|
||||
int pageCount = 1;
|
||||
int pageSize = 50;
|
||||
var data3 = "&user_name_in=" + BaseClass.UserName;
|
||||
data3 += "&create_time_begin=" + dtpTimeBegin.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
data3 += "&create_time_end=" + dtpTimeEnd.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
if (cmbType.Text == "充值")
|
||||
data3 += "&type_in=1,30";
|
||||
else if (cmbType.Text == "管理员充值")
|
||||
data3 += "&type_in=1";
|
||||
else if (cmbType.Text == "支付宝充值")
|
||||
data3 += "&type_in=30";
|
||||
else if (cmbType.Text == "礼物单支出/礼物单退费")
|
||||
data3 += "&type_in=16,34";
|
||||
else if (cmbType.Text == "拍单扣除/作废返还")
|
||||
data3 += "&type_in=20,23";
|
||||
else if (cmbType.Text == "超重扣费支出")
|
||||
data3 += "&type_in=24,28,33,37,41";
|
||||
else if (cmbType.Text == "退货包裹扣费支出/返还")
|
||||
data3 += "&type_in=26,38";
|
||||
else if (cmbType.Text == "额外包裹扣费支出/返还")
|
||||
data3 += "&type_in=35,36";
|
||||
else if (cmbType.Text == "云仓退货扣费支出")
|
||||
data3 += "&type_in=31";
|
||||
if (!string.IsNullOrEmpty(txtOutOrderId.Text.Trim()))
|
||||
data3 += "&order_id_in=" + txtOutOrderId.Text.Trim();
|
||||
if (!string.IsNullOrEmpty(txtShopOrderNo.Text.Trim()))
|
||||
data3 += "&remark_fulltext=" + txtShopOrderNo.Text.Trim();
|
||||
return data3;
|
||||
}
|
||||
|
||||
private static List<user_payment_record> ReadBalancePage(string filters, int page, int pageSize, out int count, out decimal seconds)
|
||||
{
|
||||
var url = BaseClass.Build29WxObjString("user/get_user_balance");
|
||||
var data = UserLogin.GetSignaturex() + filters + "&page=" + page + "&page_size=" + pageSize;
|
||||
var html = GetHtml.PostUtf8(url, data);
|
||||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||||
html = GetHtml.PostUtf8(url, data);
|
||||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||||
throw new InvalidOperationException($"第 {page} 页查询失败:" + (string.IsNullOrEmpty(html) ? "服务器无响应" : BaseRegex.GetStringJsonByRegs(ref html, html, "msg")));
|
||||
|
||||
var result = JObject.Parse(html);
|
||||
count = (int)result["count"];
|
||||
seconds = BaseRegex.GetDecimalJson(ref html, "seconds");
|
||||
return JsonConvert.DeserializeObject<List<user_payment_record>>(result["data"]?.ToString() ?? "null") ?? throw new InvalidOperationException($"第 {page} 页缺少消费记录");
|
||||
}
|
||||
|
||||
public void GetBalanceList()
|
||||
{
|
||||
int page = 1, pageSize = 50;
|
||||
string filters = null;
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
this.dgvPayment.Rows.Clear();
|
||||
}));
|
||||
var url3 = BaseClass.Build29WxObjString("user/get_user_balance");
|
||||
var data3 = UserLogin.GetSignaturex();
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
data3 += "&user_name_in=" + BaseClass.UserName;
|
||||
data3 += "&create_time_begin=" + dtpTimeBegin.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
data3 += "&create_time_end=" + dtpTimeEnd.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
if (cmbType.Text == "充值")
|
||||
data3 += "&type_in=1,30";
|
||||
else if (cmbType.Text == "管理员充值")
|
||||
data3 += "&type_in=1";
|
||||
else if (cmbType.Text == "支付宝充值")
|
||||
data3 += "&type_in=30";
|
||||
else if (cmbType.Text == "礼物单支出/礼物单退费")
|
||||
data3 += "&type_in=16,34";
|
||||
else if (cmbType.Text == "拍单扣除/作废返还")
|
||||
data3 += "&type_in=20,23";
|
||||
else if (cmbType.Text == "超重扣费支出")
|
||||
data3 += "&type_in=24,28,33,37,41";
|
||||
else if (cmbType.Text == "退货包裹扣费支出/返还")
|
||||
data3 += "&type_in=26,38";
|
||||
else if (cmbType.Text == "额外包裹扣费支出/返还")
|
||||
data3 += "&type_in=35,36";
|
||||
else if (cmbType.Text == "云仓退货扣费支出")
|
||||
data3 += "&type_in=31";
|
||||
if (!string.IsNullOrEmpty(txtOutOrderId.Text.Trim()))
|
||||
data3 += "&order_id_in=" + txtOutOrderId.Text.Trim();
|
||||
if (!string.IsNullOrEmpty(txtShopOrderNo.Text.Trim()))
|
||||
data3 += "&remark_fulltext=" + txtShopOrderNo.Text.Trim();
|
||||
data3 += "&page=" + ucSplitPage1.CurrentPage;
|
||||
data3 += "&page_size=" + ucSplitPage1.PageSize;
|
||||
paymentList = null;
|
||||
filters = GetBalanceFilters();
|
||||
page = ucSplitPage1.CurrentPage;
|
||||
pageSize = ucSplitPage1.PageSize;
|
||||
}));
|
||||
var html3 = GetHtml.PostUtf8(url3, data3);
|
||||
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
|
||||
html3 = GetHtml.PostUtf8(url3, data3);
|
||||
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
|
||||
int count;
|
||||
decimal seconds;
|
||||
try
|
||||
{
|
||||
BaseMsgForm.ShowError("查询失败:" + BaseRegex.GetStringJsonByRegs(ref html3, html3, "msg"));
|
||||
paymentList = ReadBalancePage(filters, page, pageSize, out count, out seconds);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
BaseMsgForm.ShowError("查询失败:" + ex.Message);
|
||||
return;
|
||||
}
|
||||
paymentList = new List<user_payment_record>();
|
||||
paymentList = JsonHelper.DeserializeJsonToList<user_payment_record>(JsonHelper.JObjectParse(html3)["data"].ParseToString());
|
||||
foreach (var payment in paymentList)
|
||||
{
|
||||
if (!this.Created)
|
||||
@@ -210,12 +228,11 @@ namespace Work._29Tools.Forms.UserForms
|
||||
this.dgvPayment.Rows[rowIndex].Height = 60;
|
||||
}));
|
||||
}
|
||||
int count = BaseRegex.GetIntJson(ref html3, "count");
|
||||
pageCount = Math.Ceiling(1.0 * count / pageSize).ParseToInt();
|
||||
int pageCount = Math.Ceiling(1.0 * count / pageSize).ParseToInt();
|
||||
pageCount = Math.Max(pageCount, 1);
|
||||
ucSplitPage1.TotalPage = pageCount;
|
||||
#if DEBUG
|
||||
Invoke(new Action(() => { statusBarUserControl1.lblTaskStatus.Text = BaseRegex.GetDecimalJson(ref html3, "seconds") + "秒"; }));
|
||||
Invoke(new Action(() => { statusBarUserControl1.lblTaskStatus.Text = seconds + "秒"; }));
|
||||
#endif
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
@@ -275,7 +292,20 @@ namespace Work._29Tools.Forms.UserForms
|
||||
|
||||
private void exportRecord_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
if (paymentList != null)
|
||||
var menu = new ContextMenuStrip();
|
||||
menu.Items.Add("导出当页", null, async (s, args) => await ExportRecords(false)).Enabled = paymentList != null;
|
||||
menu.Items.Add("导出全部", null, async (s, args) => await ExportRecords(true));
|
||||
menu.Closed += (s, args) => BeginInvoke(new Action(menu.Dispose));
|
||||
menu.Show(exportRecord, 0, exportRecord.Height);
|
||||
}
|
||||
|
||||
private async Task ExportRecords(bool allPages)
|
||||
{
|
||||
var records = paymentList;
|
||||
var filters = GetBalanceFilters();
|
||||
int pageSize = ucSplitPage1.PageSize;
|
||||
exportRecord.Enabled = false;
|
||||
try
|
||||
{
|
||||
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
|
||||
{
|
||||
@@ -285,40 +315,86 @@ namespace Work._29Tools.Forms.UserForms
|
||||
saveFileDialog.RestoreDirectory = true;
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine("类型,订单ID,金额,余额,创建时间,备注");
|
||||
|
||||
foreach (var item in paymentList)
|
||||
if (allPages)
|
||||
{
|
||||
//var rowIndex = this.dgvPayment.Rows.Add(
|
||||
// false,
|
||||
// ((EnumOrderPaymentType)payment.type.ParseToInt()).ParseToString(),
|
||||
// item.order_id,
|
||||
// item.amount,
|
||||
// item.balance,
|
||||
// item.create_time.ToString("yyyy-MM-dd HH:mm:ss"),
|
||||
// item.remark
|
||||
//);
|
||||
string type = "未知";
|
||||
if (item.type.HasValue)
|
||||
{
|
||||
if (Enum.TryParse<EnumOrderPaymentType>(item.type.Value.ToString(), out EnumOrderPaymentType v))
|
||||
{
|
||||
type = v.ToString();
|
||||
}
|
||||
}
|
||||
statusBarUserControl1.pgbTaskProgress.Maximum = 100;
|
||||
statusBarUserControl1.InitProgressBar();
|
||||
statusBarUserControl1.UpdateProgressBarStatus("正在读取第 1 页…");
|
||||
records = await ReadAllBalancePages(filters, pageSize);
|
||||
statusBarUserControl1.UpdateProgressBarStatus($"正在保存 {records.Count} 条记录…");
|
||||
}
|
||||
|
||||
|
||||
sb.AppendLine($"{type},{item.order_id},{item.amount},{item.balance},{item.create_time.ToString("yyyy-MM-dd HH:mm:ss")},{item.remark}");
|
||||
var fileName = saveFileDialog.FileName;
|
||||
await Task.Run(() => SaveBalanceRecords(fileName, records));
|
||||
if (allPages && !IsDisposed)
|
||||
{
|
||||
statusBarUserControl1.UpdateProgressBar(100);
|
||||
statusBarUserControl1.FinishProgressBar($"导出完成,共 {records.Count} 条记录");
|
||||
}
|
||||
File.WriteAllText(saveFileDialog.FileName, sb.ToString(), Encoding.UTF8);
|
||||
MessageBox.Show("导出成功");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (allPages && !IsDisposed)
|
||||
statusBarUserControl1.UpdateProgressBarStatus("导出失败:" + ex.Message);
|
||||
BaseMsgForm.ShowError("导出失败:" + ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (!IsDisposed)
|
||||
exportRecord.Enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private static void SaveBalanceRecords(string fileName, List<user_payment_record> records)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine("类型,订单ID,金额,余额,创建时间,备注");
|
||||
|
||||
foreach (var item in records)
|
||||
{
|
||||
string type = "未知";
|
||||
if (item.type.HasValue)
|
||||
{
|
||||
if (Enum.TryParse<EnumOrderPaymentType>(item.type.Value.ToString(), out EnumOrderPaymentType v))
|
||||
{
|
||||
type = v.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sb.AppendLine($"{type},{item.order_id},{item.amount},{item.balance},{item.create_time.ToString("yyyy-MM-dd HH:mm:ss")},{item.remark}");
|
||||
}
|
||||
File.WriteAllText(fileName, sb.ToString(), Encoding.UTF8);
|
||||
}
|
||||
|
||||
private async Task<List<user_payment_record>> ReadAllBalancePages(string filters, int pageSize)
|
||||
{
|
||||
var records = new List<user_payment_record>();
|
||||
int expectedCount = 0;
|
||||
for (int page = 1; ; page++)
|
||||
{
|
||||
int count = 0;
|
||||
var batch = await Task.Run(() => ReadBalancePage(filters, page, pageSize, out count, out _));
|
||||
if (page == 1)
|
||||
expectedCount = count;
|
||||
if (count != expectedCount || batch.Count != Math.Min(pageSize, expectedCount - records.Count))
|
||||
throw new InvalidOperationException($"第 {page} 页记录数有变化,请重新导出。");
|
||||
|
||||
records.AddRange(batch);
|
||||
int totalPages = Math.Max(1, (int)Math.Ceiling((double)expectedCount / pageSize));
|
||||
statusBarUserControl1.UpdateProgressBar((int)(99L * page / totalPages));
|
||||
statusBarUserControl1.UpdateProgressBarStatus($"已读取 {page}/{totalPages} 页,共 {records.Count}/{expectedCount} 条");
|
||||
if (records.Count == expectedCount)
|
||||
{
|
||||
Debug.Assert(page == totalPages);
|
||||
return records;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task GetUserAmountSummary()
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user