Files
KJD/TEMUKJD/WXForms/ShopForms/WXOemAccountBalanceForm.cs
2026-09-24 10:28:23 +08:00

534 lines
24 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using AllBase;
using AllBase.Helper;
using AllBase.Model.DBModel;
using AllBase.Model.Result;
using CefSharp;
using CefSharp.WinForms;
using DevComponents.WinForms.Drawing;
using NaiBa.CefHelper;
using NaiBa.Util.Extension;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SQLite;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Security.Policy;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using TemuKJD.BaseForms;
using TemuKJD.BLL;
using TemuKJD.Extension;
using Work;
namespace Work._29Tools.Forms.UserForms
{
public partial class WXOemAccountBalanceForm : BaseGeneralForm
{
// (拍单后)回调函数,更新拍单余额
private Action updateBalanceAction = null;
public static List<UserSubAccountInfo> AllUsers { get; set; } = new List<UserSubAccountInfo>();
CancellationTokenSource cancellationTokenSource = null;
public WXOemAccountBalanceForm()
{
InitializeComponent();
}
private async void WXGetTopUpQrCode_Load(object sender, EventArgs e)
{
var chkAll = this.dgvPayment.AddSelectorColumn("colCheck");
chkAll.Click += ChkAll_Click;
this.dgvUser.AddSelectorColumn("colSelect");
this.dtpTimeBegin.Value = DateTime.Now.Date.AddMonths(-3);
this.dtpTimeEnd.Value = DateTime.Now.Date.AddDays(1).AddSeconds(-1);
ucSplitPage1.cmbPageSize.Items.Remove("5000");
pictureBox2.Visible = true;
await Task.Run(() => { GetBalanceList(); });
pictureBox2.Visible = false;
#if DEBUG
this.colOmeAmount.Visible = true;
#endif
}
private void ChkAll_Click(object sender, EventArgs e)
{
this.dgvPayment.CellValueChanged -= this.dgvPayment_CellValueChanged;
this.GetProfit();
this.dgvPayment.CellValueChanged += this.dgvPayment_CellValueChanged;
}
private void btnBalanceTopUp_Click(object sender, EventArgs e)
{
}
public async void GetBalanceList()
{
Invoke(new Action(() =>
{
this.dgvPayment.Rows.Clear();
dgvPayment.CellValueChanged -= dgvPayment_CellValueChanged;
}));
if (string.IsNullOrEmpty(BaseClass.OemId))
{
BaseMsgForm.ShowError("没有权限!");
return;
}
string url = BaseClass.BuildObjString("user/get_all_user");
StringBuilder data = new StringBuilder();
data.Append(UserLogin.GetSignaturex());
// 查账户
//data.Append("&group_id=3");
data.Append("&oem_id=" + BaseClass.OemId);
string html = GetHtml.PostUtf8(url, data.ToString());
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
html = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
{
BaseMsgForm.ShowError("查询失败:" + BaseRegex.GetStringJsonByRegs(ref html, html, "msg"));
return;
}
var userObj = JObject.Parse(html);
var oemUserNames = "";
foreach (JObject obj in userObj["data"])
{
string oStr = JsonHelper.SerializeObject(obj);
//UserSubAccountInfo user = new UserSubAccountInfo();
//user.id = BaseRegex.GetIntJson(ref oStr, "id");
//user.user_name = BaseRegex.GetStringJson(ref oStr, "user_name");
var userName = BaseRegex.GetStringJson(ref oStr, "user_name");
if (txtUserName.Text.Trim().IsNullOrEmpty() || txtUserName.Text.Contains(userName))
oemUserNames += userName + ",";
}
oemUserNames = oemUserNames.Trim(',');
if (string.IsNullOrEmpty(oemUserNames))
return;
if (cancellationTokenSource != null)
cancellationTokenSource.Cancel();
cancellationTokenSource = new CancellationTokenSource();
await Task.Run(() =>
{
var cancellationToken = cancellationTokenSource.Token;
int pageCount = 1;
int pageSize = 50;
var url3 = BaseClass.BuildWXObjString("user/get_user_balance");
var data3 = UserLogin.GetSignaturex();
Invoke(new Action(() =>
{
data3 += "&user_name_in=" + oemUserNames;
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";
else if(cmbType.Text == "退货包裹扣费支出")
data3 += "&type_in=26";
else if (cmbType.Text == "云仓退货扣费支出")
data3 += "&type_in=31";
else if (cmbType.Text == "同步物流")
data3 += "&type_in=55";
else if (!string.IsNullOrEmpty(cmbType.Text))
data3 += "&type_in=" + cmbType.Text;
data3 += "&page=" + ucSplitPage1.CurrentPage;
data3 += "&page_size=" + ucSplitPage1.PageSize;
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"))
{
BaseMsgForm.ShowError("查询失败:" + BaseRegex.GetStringJsonByRegs(ref html3, html3, "msg"));
return;
}
List<user_payment_record> paymentList = new List<user_payment_record>();
paymentList = JsonHelper.DeserializeJsonToList<user_payment_record>(JsonHelper.JObjectParse(html3)["data"].ParseToString());
Invoke(new Action(() =>
{
this.dgvPayment.Rows.Clear();
dgvPayment.CellValueChanged -= dgvPayment_CellValueChanged;
}));
foreach (var payment in paymentList)
{
if (cancellationToken.IsCancellationRequested)
return;
Invoke(new Action(() =>
{
var rowIndex = this.dgvPayment.Rows.Add(
true,
((EnumOrderPaymentType)payment.type.ParseToInt()).ParseToString(),
payment.user_name,
payment.order_id,
payment.amount,
payment.oem_amount,
payment.balance,
payment.create_time.ToString("yyyy-MM-dd HH:mm:ss"),
payment.remark
);
this.dgvPayment.Rows[rowIndex].Height = 60;
}));
}
int count = BaseRegex.GetIntJson(ref html3, "count");
pageCount = Math.Ceiling(1.0 * count / pageSize).ParseToInt();
pageCount = Math.Max(pageCount, 1);
ucSplitPage1.TotalPage = pageCount;
}, cancellationTokenSource.Token);
Invoke(new Action(() =>
{
GetProfit();
dgvPayment.CellValueChanged += dgvPayment_CellValueChanged;
}));
}
public async Task GetAllBalanceList()
{
Invoke(new Action(() =>
{
this.dgvPayment.Rows.Clear();
dgvPayment.CellValueChanged -= dgvPayment_CellValueChanged;
}));
await Task.Run(() =>
{
int pageCount = 1;
int pageSize = 50;
var url3 = BaseClass.BuildWXObjString("user/get_user_balance");
var data3 = UserLogin.GetSignaturex();
Invoke(new Action(() =>
{
if (!string.IsNullOrEmpty(txtUserName.Text.Trim()))
data3 += "&user_name_in=" + txtUserName.Text.Trim();
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";
else if (cmbType.Text == "退货包裹扣费支出")
data3 += "&type_in=26";
else if (cmbType.Text == "云仓退货扣费支出")
data3 += "&type_in=31";
else if (!string.IsNullOrEmpty(cmbType.Text))
data3 += "&type_in=" + cmbType.Text;
//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;
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"))
{
BaseMsgForm.ShowError("查询失败:" + BaseRegex.GetStringJsonByRegs(ref html3, html3, "msg"));
return;
}
List<user_payment_record> paymentList = new List<user_payment_record>();
paymentList = JsonHelper.DeserializeJsonToList<user_payment_record>(JsonHelper.JObjectParse(html3)["data"].ParseToString());
foreach (var payment in paymentList)
{
Invoke(new Action(() =>
{
var rowIndex = this.dgvPayment.Rows.Add(
true,
((EnumOrderPaymentType)payment.type.ParseToInt()).ParseToString(),
payment.user_name,
payment.order_id,
payment.amount,
payment.oem_amount,
payment.balance,
payment.create_time.ToString("yyyy-MM-dd HH:mm:ss"),
payment.remark
);
var row = this.dgvPayment.Rows[rowIndex];
row.Height = 60;
var rowExists = dgvPayment.Rows.Cast<DataGridViewRow>()
.Where(r => r.Cells["colOrderId"].Value.ParseToString() == payment.order_id && r.Cells["colType"].Value.ParseToString() == "中转仓作废返还收入").ToList();
if (rowExists.Count > 1)
{
var c = Color.FromArgb(Randomx.GetId(127, 200), Randomx.GetId(127, 200), Randomx.GetId(127, 200));
foreach (var rowExist in rowExists)
{
rowExist.Cells["colOrderId"].Style.BackColor = c;
}
}
}));
}
int count = BaseRegex.GetIntJson(ref html3, "count");
pageCount = Math.Ceiling(1.0 * count / pageSize).ParseToInt();
pageCount = Math.Max(pageCount, 1);
ucSplitPage1.TotalPage = pageCount;
});
Invoke(new Action(() =>
{
GetProfit();
dgvPayment.CellValueChanged += dgvPayment_CellValueChanged;
}));
}
private async void btnSearch_Click(object sender, EventArgs e)
{
if (cancellationTokenSource != null)
cancellationTokenSource.Cancel();
if (this.ucSplitPage1.CurrentPage != 1)
this.ucSplitPage1.CurrentPage = 1;
pictureBox2.Visible = true;
btnSearch.Enabled = false;
await Task.Run(() =>
{
Task.Run(() =>
{
Thread.Sleep(500);
Invoke(new Action(() => { btnSearch.Enabled = true; }));
});
GetBalanceList();
});
pictureBox2.Visible = false;
}
private async void ucSplitPage1_PageChange(object obj)
{
pictureBox2.Visible = true;
await Task.Run(() => { GetBalanceList(); });
pictureBox2.Visible = false;
}
private void btnGetUser_Click(object sender, EventArgs e)
{
GetUser();
}
private void GetUser()
{
if (BaseClass.OemId.IsNullOrEmpty() || BaseClass.IsOemOwner == false)
return;
Invoke(new Action(() =>
{
dgvUser.Rows.Clear();
AllUsers.Clear();
}));
string url = BaseClass.BuildObjString("user/get_all_user");
StringBuilder data = new StringBuilder();
data.Append(UserLogin.GetSignaturex());
Invoke(new Action(() =>
{
// 账户类型
if (cmbGroup.Text == "主账户")
data.Append("&group_id=3");
else if (cmbGroup.Text == "客服")
data.Append("&group_id=4");
data.Append("&oem_id=" + BaseClass.OemId);
if (!string.IsNullOrWhiteSpace(txtSearch.Text))
data.Append("&search=" + txtSearch.Text.Replace("'", "'"));
}));
string html = GetHtml.PostUtf8(url, data.ToString());
if (string.IsNullOrEmpty(html))
return;
if (html.Contains("\"data\""))
{
var userObj = Newtonsoft.Json.Linq.JObject.Parse(html);
foreach (Newtonsoft.Json.Linq.JObject obj in userObj["data"])
{
string oStr = JsonHelper.SerializeObject(obj);
UserSubAccountInfo user = new UserSubAccountInfo();
user.id = BaseRegex.GetIntJson(ref oStr, "id");
user.user_name = BaseRegex.GetStringJson(ref oStr, "user_name");
user.nick_name = BaseRegex.GetStringJson(ref oStr, "nick_name");
user.mobile = BaseRegex.GetStringJson(ref oStr, "mobile");
user.group_id = BaseRegex.GetStringJson(ref oStr, "group_id");
user.shop_count = BaseRegex.GetIntJson(ref oStr, "shop_count");
user.company_name = BaseRegex.GetStringJson(ref oStr, "company_name");
user.sa_level = BaseRegex.GetIntJson(ref oStr, "sa_level");
user.authority = BaseRegex.GetStringJson(ref oStr, "authority");
user.points = BaseRegex.GetIntJson(ref oStr, "points");
user.balance = BaseRegex.GetDecimalJson(ref oStr, "balance");
user.shop_points_per_month = BaseRegex.GetIntJson(ref oStr, "shop_points_per_month");
user.postage_per_order = BaseRegex.GetDecimalJson(ref oStr, "postage_per_order");
user.refund_postage_per_order = BaseRegex.GetDecimalJson(ref oStr, "refund_postage_per_order");
user.gift_oem_amount_per_order = BaseRegex.GetDecimalJson(ref oStr, "gift_oem_amount_per_order");
user.oem_id = BaseRegex.GetStringJson(ref oStr, "oem_id");
user.oem_name = BaseRegex.GetStringJson(ref oStr, "oem_name");
var parent_user_name = BaseRegex.GetStringJson(ref oStr, "parent_user_name");
AllUsers.Add(user);
dgvUser.Rows.Add(
false,
user.id,
user.nick_name,
user.user_name,
parent_user_name,
user.group_id,
user.group_name,
user.company_name,
user.shop_count,
user.sa_level,
user.sa_level_name /*+ (user.group_id == "4" ? "(客服)" : "")*/,
user.authority,
user.oem_id,
user.oem_name,
(user.authority.Contains("充值用户") && user.group_id == "3") ? (int?)user.points : null,
(user.authority.Contains("充值用户") && user.group_id == "3") ? "+" : null,
(user.authority.Contains("充值用户") && user.group_id == "3") ? (int?)user.shop_points_per_month : null,
(user.authority.Contains("充值用户") && user.group_id == "3") ? "改" : null,
user.balance.ParseToDecimal(),
"+",
Math.Max(2.2m, user.postage_per_order.ParseToDecimal()),
(user.group_id == "3") ? "改" : null,
Math.Max(2.5m, user.refund_postage_per_order.ParseToDecimal()),
(user.group_id == "3") ? "改" : null,
Math.Max(2.5m, user.gift_oem_amount_per_order.ParseToDecimal()),
(user.group_id == "3") ? "改" : null,
user.group_id == "3" ? "添加店铺" : "",
"编辑",
"删除");
}
}
}
void GetProfit()
{
//foreach (var row in dgvPayment.Rows.Cast<DataGridViewRow>().ToList())
//{
// if (row.Cells["colCheck"].Value.ParseToBool() == false)
// continue;
// if (row.Cells[""].Value.ParseToString() == "中转仓扣费支出")
// {
// }
//}
var checkRows = dgvPayment.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colCheck"].Value.ParseToBool() == true).ToList();
lblPostageTotal.Text = checkRows
.Where(r => r.Cells["colType"].Value.ParseToString() == EnumOrderPaymentType.中转仓扣费支出.ParseToString())
.Sum(r => r.Cells["colAmount"].Value.ParseToDecimal()).ToString();
lblPostageReturnTotal.Text = checkRows
.Where(r => r.Cells["colType"].Value.ParseToString() == EnumOrderPaymentType.中转仓作废返还收入.ParseToString())
.Sum(r => r.Cells["colAmount"].Value.ParseToDecimal()).ToString();
lblPostageWeightTotal.Text = checkRows
.Where(r => r.Cells["colType"].Value.ParseToString() == EnumOrderPaymentType.中转仓超重支出.ParseToString())
.Sum(r => r.Cells["colAmount"].Value.ParseToDecimal()).ToString();
lblPostageNotReturnCnt.Text = (checkRows
.Where(r => r.Cells["colType"].Value.ParseToString() == EnumOrderPaymentType.中转仓扣费支出.ParseToString()).Count() - checkRows
.Where(r => r.Cells["colType"].Value.ParseToString() == EnumOrderPaymentType.中转仓作废返还收入.ParseToString()).Count()).ToString();
lblProfit.Text = (lblPostageTotal.Text.ParseToDecimal() - lblPostageReturnTotal.Text.ParseToDecimal() - lblPostageNotReturnCnt.Text.ParseToInt() * 2.2m).ToString();
}
private void btnSearchShop_Click(object sender, EventArgs e)
{
pnlGetUser.Visible = true;
GetUser();
}
private void btnClose_Click(object sender, EventArgs e)
{
this.pnlGetUser.Visible = false;
}
private void btnOk_Click(object sender, EventArgs e)
{
var ids = dgvUser.Rows.Cast<DataGridViewRow>()
.Where(r => r.Cells["colSelect"].Value.ParseToBool() == true)
.Select(r => r.Cells["mobileColumn"].Value.ParseToString());
this.txtUserName.Text = string.Join(",", ids);
this.pnlGetUser.Visible = false;
}
private void dgvUser_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0)
return;
var row = dgvUser.Rows[e.RowIndex];
string headerText = dgvUser.Columns[e.ColumnIndex].HeaderText;
string columnName = dgvUser.Columns[e.ColumnIndex].Name;
switch (headerText)
{
case "":
dgvUser.Rows[e.RowIndex].Cells["colSelect"].Value = !(bool)dgvUser.Rows[e.RowIndex].Cells["colSelect"].Value;
break;
default:
break;
}
}
private void dgvPayment_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0)
return;
var row = dgvPayment.Rows[e.RowIndex];
string headerText = dgvPayment.Columns[e.ColumnIndex].HeaderText;
string columnName = dgvPayment.Columns[e.ColumnIndex].Name;
switch (headerText)
{
case "":
dgvPayment.Rows[e.RowIndex].Cells["colCheck"].Value = !(bool)dgvPayment.Rows[e.RowIndex].Cells["colCheck"].Value;
break;
default:
break;
}
}
private void btnClearFilter_Click(object sender, EventArgs e)
{
cmbGroup.Text = "全部";
this.txtSearch.Text = "";
}
private void dgvPayment_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
{
GetProfit();
}
}
}
}