851 lines
39 KiB
C#
851 lines
39 KiB
C#
using AllBase;
|
||
using AllBase.Helper;
|
||
using AllBase.Model.Config;
|
||
using AllBase.Model.Param.WXParam;
|
||
using AllBase.Model.Result;
|
||
using AllBase.Model.Result.PDDResult;
|
||
using AllBase.Model.Result.WXResult;
|
||
using CefSharp;
|
||
using CefSharp.WinForms;
|
||
using NaiBa.CefHelper;
|
||
using NaiBa.CefHelper.Handler;
|
||
using NaiBa.Util;
|
||
using NaiBa.Util.Extension;
|
||
using Newtonsoft.Json;
|
||
using Newtonsoft.Json.Linq;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Net.Http;
|
||
using System.Text;
|
||
using System.Text.RegularExpressions;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using TemuKJD.BaseForms;
|
||
using TemuKJD.BLL;
|
||
using TemuKJD.Extension;
|
||
using TemuKJD.Helper;
|
||
using TemuKJD.PDDForms.ProductSelectForms;
|
||
using TemuKJD.ToolForms;
|
||
using TemuKJD.WXForms.ShopForms;
|
||
using Work;
|
||
using static TemuKJD.WXForms.ShopForms.WXTaxManage;
|
||
|
||
namespace TemuKJD.WXForms.ShopForms
|
||
{
|
||
public partial class WXTaxManage : BaseForm
|
||
{
|
||
public CancellationTokenSource cancellationTokenSource { get; set; } = null;
|
||
public bool IsLoadComplate { get; set; } = false;
|
||
CheckBox chkSelectAll = null;
|
||
|
||
ConcurrentList<WxTaxMoneyInfo> lstWxTaxMoneyInfo = new ConcurrentList<WxTaxMoneyInfo>();
|
||
|
||
public WXTaxManage()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
|
||
private void UserSelectDbProductForm_Load(object sender, EventArgs e)
|
||
{
|
||
this.splitContainer1.Dock = DockStyle.Fill;
|
||
|
||
chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false);
|
||
dgvShop.Columns["colSelect"].HeaderText = "";
|
||
chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged;
|
||
|
||
this.dgvTaxMoney.AddSelectorColumn("colCheck");
|
||
//dgvTaxMoney.AddImgColumn("colLiveObjectImg", "colLiveObjectImgUrl");
|
||
//dgvTaxMoney.AddImgColumn("colDgvProdImg", "colDgvProdImgUrl");
|
||
|
||
dtpTimeBegin.Value = DateTime.Now.Date.AddDays(-7);
|
||
dtpTimeEnd.Value = DateTime.Now.Date.AddDays(1).AddSeconds(-1);
|
||
IsLoadComplate = true;
|
||
}
|
||
|
||
private void chkSelectAll_CheckedChanged(object sender, EventArgs e)
|
||
{
|
||
if (!chkSelectAll.Checked)
|
||
{
|
||
foreach (DataGridViewRow row in dgvShop.Rows)
|
||
{
|
||
row.Cells["colSelect"].Value = false;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//var list = GlobalConfig.ValidShopLoginList.Where(s => s.LoginStatus == "登录成功").Select(ss => ss.ShopId);
|
||
foreach (DataGridViewRow row in dgvShop.Rows)
|
||
{
|
||
//if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString()))
|
||
if (row.Visible == true)
|
||
row.Cells["colSelect"].Value = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
private void btnRefreshShop_Click(object sender, EventArgs e)
|
||
{
|
||
pbLoadingShop.Visible = true;
|
||
RefreshShopLogin();
|
||
}
|
||
|
||
private void UserSelectDbProductForm_VisibleChanged(object sender, EventArgs e)
|
||
{
|
||
if (Visible == true)
|
||
{
|
||
RefreshShopLogin();
|
||
}
|
||
}
|
||
|
||
private void RefreshShopLogin()
|
||
{
|
||
// 店铺Id
|
||
var selectIds = dgvShop.Rows.Cast<DataGridViewRow>().Where(row
|
||
=> row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList();
|
||
// 获取被删除的店铺
|
||
List<DataGridViewRow> dgvRowList = dgvShop.Rows.Cast<DataGridViewRow>().Where(row
|
||
=> !GlobalConfig.ValidShopLoginList.Any(s => s.ShopId == row.Cells["colShopId"]?.Value?.ToString())).ToList();
|
||
// 更新被删除的店铺列表
|
||
foreach (var row in dgvRowList)
|
||
{
|
||
dgvShop.Rows.Remove(row);
|
||
}
|
||
// 绑定其他店铺(含新导入的店铺)
|
||
foreach (ShopLoginInfo shopEntity in GlobalConfig.ValidShopLoginList)
|
||
{
|
||
if (!string.IsNullOrEmpty(shopEntity.ShopId))
|
||
BindShop(shopEntity, selectIds);
|
||
}
|
||
cmbFilterShopNotes.Items.Clear();
|
||
foreach (var note in GlobalConfig.ValidShopLoginList.Select(s => s.Notes).Where(s => !s.IsNullOrEmpty()).Distinct())
|
||
{
|
||
cmbFilterShopNotes.Items.Add(note);
|
||
}
|
||
cmbFilterShopGroup.Items.Clear();
|
||
foreach (var group in GlobalConfig.ValidShopLoginList.Select(s => s.GroupName).Where(s => !s.IsNullOrEmpty()).Distinct())
|
||
{
|
||
cmbFilterShopGroup.Items.Add(group);
|
||
}
|
||
pbLoadingShop.Visible = false;
|
||
}
|
||
|
||
private void BindShop(ShopLoginInfo shopEntity, List<string> selectShopId = null, string msg = "")
|
||
{
|
||
if (shopEntity == null)
|
||
return;
|
||
if (shopEntity.is_point_shop_expire)
|
||
return;
|
||
if (selectShopId == null)
|
||
selectShopId = new List<string>();
|
||
|
||
bool canUse = shopEntity.LoginStatus == "登录成功";
|
||
//canUse = true; // 内部库不需要校验登录状态
|
||
var row = dgvShop.Rows.Cast<DataGridViewRow>().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopId);
|
||
var day = DateTime.Now.ToString("yyyyMMdd").ParseToInt();
|
||
if (row == null)
|
||
{
|
||
this.dgvShop.Rows.Add(
|
||
false, //dgvShop.Rows.Count == 0 ? true : (selectShopId.Contains(shopEntity.ShopId) && canUse),
|
||
shopEntity.LoginName,
|
||
shopEntity.ShopId,
|
||
shopEntity.ShopAccount,
|
||
shopEntity.Notes,
|
||
shopEntity.GroupName,
|
||
"选择商品",
|
||
canUse ? "在线" : "掉线",
|
||
GlobalConfig.lstWxShopAuthInfo.FirstOrDefault(sa => sa.ShopId == shopEntity.ShopId)?.ExpiresTime > DateTime.Now.AddMinutes(5) ? "可用" : "过期",
|
||
canUse,
|
||
GlobalConfig.dicWxShopUploadInfo.ContainsKey(shopEntity.ShopId) ? GlobalConfig.dicWxShopUploadInfo[shopEntity.ShopId].DicDayUploadCount[day] : 0,
|
||
GlobalConfig.dicWxShopUploadInfo.ContainsKey(shopEntity.ShopId) ? GlobalConfig.dicWxShopUploadInfo[shopEntity.ShopId].OnSaleCount : 0,
|
||
shopEntity.AddProductRemaining,
|
||
msg
|
||
);
|
||
}
|
||
else
|
||
{
|
||
row.Cells["colSelect"].Value = selectShopId.Contains(shopEntity.ShopId) && canUse;
|
||
row.Cells["colShopLoginName"].Value = shopEntity.LoginName;
|
||
row.Cells["colShopName"].Value = shopEntity.ShopAccount;
|
||
row.Cells["colShopNotes"].Value = shopEntity.Notes;
|
||
row.Cells["colLoginStatus"].Value = canUse ? "在线" : "掉线";
|
||
row.Cells["colLoginStatus"].Style.ForeColor = canUse ? Color.Green : Color.Red;
|
||
row.Cells["colCanUse"].Value = canUse;
|
||
row.Cells["colApi"].Value = GlobalConfig.lstWxShopAuthInfo.FirstOrDefault(sa => sa.ShopId == shopEntity.ShopId)?.ExpiresTime > DateTime.Now.AddMinutes(5) ? "可用" : "过期";
|
||
row.Cells["colRemaining"].Value = shopEntity.AddProductRemaining;
|
||
row.Cells["colUploadCount"].Value = GlobalConfig.dicWxShopUploadInfo.ContainsKey(shopEntity.ShopId) ? GlobalConfig.dicWxShopUploadInfo[shopEntity.ShopId].DicDayUploadCount[day] : 0;
|
||
row.Cells["colOnSaleNum"].Value = GlobalConfig.dicWxShopUploadInfo.ContainsKey(shopEntity.ShopId) ? GlobalConfig.dicWxShopUploadInfo[shopEntity.ShopId].OnSaleCount : 0;
|
||
row.Cells["colMessage"].Value = msg;
|
||
}
|
||
|
||
displayAuthStatus(shopEntity);
|
||
}
|
||
|
||
void displayAuthStatus(ShopLoginInfo shop)
|
||
{
|
||
var rows = this.dgvShop.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colShopId"].Value.ParseToString() == shop?.ShopId);
|
||
foreach (var row in rows)
|
||
{
|
||
bool canUse = row.Cells["colLoginStatus"].Value.ParseToString() == "在线";
|
||
(row.Cells["colLoginStatus"] as DataGridViewLinkCell).Style.ForeColor = canUse ? Color.Blue : Color.Red;
|
||
(row.Cells["colLoginStatus"] as DataGridViewLinkCell).LinkColor = canUse ? Color.Blue : Color.Red;
|
||
(row.Cells["colLoginStatus"] as DataGridViewLinkCell).ActiveLinkColor = canUse ? Color.LightBlue : Color.OrangeRed;
|
||
(row.Cells["colLoginStatus"] as DataGridViewLinkCell).VisitedLinkColor = canUse ? Color.DarkBlue : Color.DarkRed;
|
||
canUse = row.Cells["colApi"].Value.ParseToString() == "可用";
|
||
(row.Cells["colApi"] as DataGridViewLinkCell).Style.ForeColor = canUse ? Color.Blue : Color.Red;
|
||
(row.Cells["colApi"] as DataGridViewLinkCell).LinkColor = canUse ? Color.Blue : Color.Red;
|
||
(row.Cells["colApi"] as DataGridViewLinkCell).ActiveLinkColor = canUse ? Color.LightBlue : Color.OrangeRed;
|
||
(row.Cells["colApi"] as DataGridViewLinkCell).VisitedLinkColor = canUse ? Color.DarkBlue : Color.DarkRed;
|
||
}
|
||
}
|
||
|
||
|
||
private void dgvShop_CellClick(object sender, DataGridViewCellEventArgs e)
|
||
{
|
||
//if (e.ColumnIndex < 0 || e.RowIndex < 0)
|
||
// return;
|
||
//string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText;
|
||
//string columnName = dgvShop.Columns[e.ColumnIndex].Name;
|
||
//string shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToString();
|
||
//string shopAccount = dgvShop.Rows[e.RowIndex].Cells["colShopName"].Value.ToString();
|
||
//var shop = GlobalConfig.ValidShopLoginList.FirstOrDefault(s => s.ShopId == shopId.ToString());
|
||
//var row = dgvShop.Rows[e.RowIndex];
|
||
//foreach(DataGridViewRow r in dgvShop.Rows)
|
||
//{
|
||
// if (r == row)
|
||
// continue;
|
||
// if (r.Cells["colSelect"].Value.ParseToBool() == true)
|
||
// r.Cells["colSelect"].Value = false;
|
||
//}
|
||
//row.Cells["colSelect"].Value = true;
|
||
}
|
||
|
||
|
||
private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||
{
|
||
if (e.ColumnIndex < 0 || e.RowIndex < 0)
|
||
return;
|
||
string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText;
|
||
string columnName = dgvShop.Columns[e.ColumnIndex].Name;
|
||
string shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToString();
|
||
string shopAccount = dgvShop.Rows[e.RowIndex].Cells["colShopName"].Value.ToString();
|
||
var shop = GlobalConfig.ValidShopLoginList.FirstOrDefault(s => s.ShopId == shopId.ToString());
|
||
var row = dgvShop.Rows[e.RowIndex];
|
||
|
||
switch (columnName)
|
||
{
|
||
case "colSelect":
|
||
////if (row.Cells["colCanUse"].Value.ParseToBool())
|
||
//{
|
||
// row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool();
|
||
|
||
// chkSelectAll.CheckedChanged -= chkSelectAll_CheckedChanged;
|
||
// if (dgvShop.Rows.Cast<DataGridViewRow>().All(r => r.Cells["colSelect"].Value.ParseToBool()))
|
||
// chkSelectAll.Checked = true;
|
||
// else
|
||
// chkSelectAll.Checked = false;
|
||
// chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged;
|
||
//}
|
||
////else
|
||
////{
|
||
//// //BaseMsgForm.ShowInfo("店铺未登录!");
|
||
////}
|
||
|
||
//dicCheckedShopId[row.Cells["colShopId"].Value.ParseToString()] = row.Cells["colSelect"].Value.ParseToBool();
|
||
row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool();
|
||
break;
|
||
case "colLoginStatus":
|
||
{
|
||
if (WXShopListForm.Instance == null)
|
||
WXShopListForm.Instance = new WXShopListForm();
|
||
WXShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false);
|
||
WXShopLoginForm shopLoginForm = new WXShopLoginForm(shop);
|
||
//shopLoginForm.prodUserSelectForm = this;
|
||
if (shop.LoginStatus != "登录成功")
|
||
{
|
||
shopLoginForm.openType = EnumOpenType.login;
|
||
shopLoginForm.ShowDialog();
|
||
RefreshShopLogin();
|
||
}
|
||
else
|
||
{
|
||
shopLoginForm.openType = EnumOpenType.manage;
|
||
shopLoginForm.WindowState = FormWindowState.Maximized;
|
||
shopLoginForm.Show();
|
||
}
|
||
}
|
||
break;
|
||
case "colApi":
|
||
{
|
||
WXShopLoginForm shopLoginForm = new WXShopLoginForm(shop);
|
||
shopLoginForm.openType = EnumOpenType.manage;
|
||
shopLoginForm.WindowState = FormWindowState.Maximized;
|
||
shopLoginForm.InitUrl = "https://store.weixin.qq.com/shop/servicemarket/detail?serviceId=3984039898079707139";
|
||
shopLoginForm.Show();
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
private void btnStop_Click(object sender, EventArgs e)
|
||
{
|
||
if (this.cancellationTokenSource != null)
|
||
this.cancellationTokenSource.Cancel();
|
||
}
|
||
|
||
private void btnSearchOrderLst_Click(object sender, EventArgs e)
|
||
{
|
||
var selectRows = dgvShop.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colSelect"].Value.ParseToBool() == true).ToList();
|
||
if (selectRows.Count == 0)
|
||
{
|
||
BaseMsgForm.ShowError("请选择店铺");
|
||
return;
|
||
}
|
||
pictureBox1.Visible = true;
|
||
|
||
this.btnExport.Enabled = false;
|
||
this.btnSearch.Enabled = false;
|
||
Task.Run(() => {
|
||
Thread.Sleep(5000);
|
||
Invoke(new Action(() =>
|
||
{
|
||
this.btnExport.Enabled = true;
|
||
this.btnSearch.Enabled = true;
|
||
}));
|
||
});
|
||
|
||
dgvTaxMoney.Rows.Clear();
|
||
lstWxTaxMoneyInfo.Clear();
|
||
|
||
var createTimeBegin = 0;
|
||
if (chkTimeBegin.Checked)
|
||
createTimeBegin = BaseClass.DateTimeToTimestampSeconds(dtpTimeBegin.Value.Date);
|
||
var createTimeEnd = BaseClass.DateTimeToTimestampSeconds(DateTime.Now.Date.AddDays(1).AddSeconds(-1));
|
||
if (chkTimeEnd.Checked)
|
||
createTimeEnd = BaseClass.DateTimeToTimestampSeconds(dtpTimeEnd.Value.Date.AddDays(1).AddSeconds(-1));
|
||
|
||
enumOrderSettleState orderSettleState = enumOrderSettleState.全部;
|
||
if (cmbOrderSettleState.Text == "无需结算")
|
||
orderSettleState = enumOrderSettleState.无需结算;
|
||
if (cmbOrderSettleState.Text == "已结算")
|
||
orderSettleState = enumOrderSettleState.已结算;
|
||
if (cmbOrderSettleState.Text == "待结算")
|
||
orderSettleState = enumOrderSettleState.待结算;
|
||
if (cmbOrderSettleState.Text == "部分结算")
|
||
orderSettleState = enumOrderSettleState.部分结算;
|
||
|
||
enumSearchOrderState orderState = enumSearchOrderState.全部;
|
||
if (cmbOrderState.Text == "已完成")
|
||
orderState = enumSearchOrderState.已完成;
|
||
if (cmbOrderState.Text == "已取消")
|
||
orderState = enumSearchOrderState.已取消;
|
||
if (cmbOrderState.Text == "已发货")
|
||
orderState = enumSearchOrderState.已发货;
|
||
if (cmbOrderState.Text == "待发货")
|
||
orderState = enumSearchOrderState.待发货;
|
||
|
||
enumOrderPayMethod orderPayMethod = enumOrderPayMethod.全部;
|
||
if (cmbOrderPayMethod.Text == "微信支付")
|
||
orderPayMethod = enumOrderPayMethod.微信支付;
|
||
if (cmbOrderPayMethod.Text == "先付后用")
|
||
orderPayMethod = enumOrderPayMethod.先付后用;
|
||
|
||
if (cancellationTokenSource != null)
|
||
cancellationTokenSource.Cancel();
|
||
cancellationTokenSource = new CancellationTokenSource();
|
||
|
||
Task.Run(() =>
|
||
{
|
||
int num = 0;
|
||
foreach (var row in selectRows)
|
||
{
|
||
num++;
|
||
Invoke(new Action(() =>
|
||
{
|
||
this.statusBar.lblTaskStatus.Text = "店铺订单流水查询 第 " + num + " 个店铺,共 " + selectRows.Count + " 个店铺";
|
||
row.Cells["colMessage"].Value = "";
|
||
}));
|
||
if (this.cancellationTokenSource.IsCancellationRequested)
|
||
break;
|
||
|
||
var shopId = row.Cells["colShopId"].Value.ParseToString();
|
||
var shop = GlobalConfig.ValidShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
|
||
|
||
if (shop != null)
|
||
{
|
||
// 短视频带货
|
||
//if (chkFeed.Checked)
|
||
{
|
||
|
||
int page = 0;
|
||
int pageSize = 20;
|
||
|
||
while (true)
|
||
{
|
||
if (this.cancellationTokenSource.IsCancellationRequested)
|
||
break;
|
||
page++;
|
||
var getTaxMoneyRst = WXTaxBLL.getListOrderFlow(shop, page, orderSettleState.ParseToInt(), orderState.ParseToInt(), orderPayMethod.ParseToInt(), createTimeBegin, createTimeEnd);
|
||
Thread.Sleep(Randomx.GetId(300, 600));
|
||
|
||
if (!getTaxMoneyRst.ParseToString().Contains("\"code\":0"))
|
||
{
|
||
var error = BaseRegex.GetStringJsonByRegs(ref getTaxMoneyRst, getTaxMoneyRst, "errmsg");
|
||
if (error.ParseToString().Contains("biz magic invalid"))
|
||
{
|
||
shop.LoginStatus = "未登录";
|
||
var selectIds = dgvShop.Rows.Cast<DataGridViewRow>().Where(r
|
||
=> r.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList();
|
||
Invoke(new Action(() => { BindShop(shop, selectIds, "店铺掉线"); }));
|
||
error = "店铺掉线";
|
||
}
|
||
Invoke(new Action(() =>
|
||
{
|
||
row.Cells["colMessage"].Value = "店铺流水查询失败 " + error;
|
||
}));
|
||
break;
|
||
}
|
||
|
||
var wxTaxMoneyList = JsonHelper.DeserializeJsonToList<WxTaxMoneyInfo>(JsonHelper.JObjectParse(getTaxMoneyRst)["dataList"].ParseToString());
|
||
if (wxTaxMoneyList == null)
|
||
wxTaxMoneyList = new List<WxTaxMoneyInfo>();
|
||
this.lstWxTaxMoneyInfo.AddRange(wxTaxMoneyList);
|
||
foreach (var tax in wxTaxMoneyList)
|
||
{
|
||
Invoke(new Action(() =>
|
||
{
|
||
//if (prod.spuMonthSales.ParseToInt() >= txtSaleCount.Text.Trim().ParseToInt() &&
|
||
// !dgvDaRenProd.Rows.Cast<DataGridViewRow>().Any(r => r.Cells["colTalentSpuId"].Value.ParseToString() == prod.spuId))
|
||
{
|
||
var rowIndex = dgvTaxMoney.Rows.Add(
|
||
true,
|
||
shop.ShopId,
|
||
shop.ShopAccount,
|
||
"登录",
|
||
"进店",
|
||
tax.orderId, // 订单号
|
||
BaseClass.StampToDateTime(tax.orderCreateTime.ParseToInt()).ToString("yyyy年MM月dd日 HH:mm:ss"),
|
||
(enumRstOrderState)tax.orderState,
|
||
(enumOrderSettleState)tax.orderSettleState,
|
||
tax.buyerPaidAmount.IsNullOrZero() ? "-" : "¥" + (tax.buyerPaidAmount * 0.01m).ParseToDecimal().ToString("0.00"),
|
||
tax.mchReceivedAmount.IsNullOrZero() ? "-" : "¥" + (tax.mchReceivedAmount * 0.01m).ParseToDecimal().ToString("0.00"),
|
||
tax.platformCommissionAmount.IsNullOrZero() ? "-" : "-¥" + (tax.platformCommissionAmount * 0.01m).ParseToDecimal().ToString("0.00"),
|
||
tax.buyerRefundAmount.IsNullOrZero() ? "-" : "-¥" + (tax.buyerRefundAmount * 0.01m).ParseToDecimal().ToString("0.00"),
|
||
tax.otherExpenseAmount.IsNullOrZero() ? "-" : "-¥" + (tax.otherExpenseAmount * 0.01m).ParseToDecimal().ToString("0.00"),
|
||
tax.mchSettleAmount.IsNullOrZero() ? "-" : "¥" + (tax.mchSettleAmount * 0.01m).ParseToDecimal().ToString("0.00"),
|
||
shop.ShopAccount
|
||
);
|
||
dgvTaxMoney.Rows[rowIndex].Height = 60;
|
||
}
|
||
}));
|
||
}
|
||
|
||
var total = BaseRegex.GetIntJson(ref getTaxMoneyRst, "totalCount").ParseToInt();
|
||
var totalPage = Math.Ceiling(total * 1m / pageSize).ParseToInt();
|
||
if (page >= totalPage)
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
Invoke(new Action(() =>
|
||
{
|
||
pictureBox1.Visible = false;
|
||
if (cancellationTokenSource.IsCancellationRequested)
|
||
{
|
||
this.statusBar.lblTaskStatus.Text += " 查询操作中断";
|
||
BaseMsgForm.ShowInfo("查询操作中断");
|
||
}
|
||
else
|
||
{
|
||
this.statusBar.lblTaskStatus.Text += " 查询操作结束";
|
||
BaseMsgForm.ShowInfo("查询操作结束");
|
||
}
|
||
}));
|
||
}, cancellationTokenSource.Token);
|
||
}
|
||
|
||
private void btnClearFilter_Click(object sender, EventArgs e)
|
||
{
|
||
}
|
||
|
||
private void btnFilterShop_Click(object sender, EventArgs e)
|
||
{
|
||
string notes = cmbFilterShopNotes.Text.Trim().Trim(';');
|
||
if (notes == "全部")
|
||
notes = "";
|
||
List<string> notesLst = notes.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
||
|
||
string group = cmbFilterShopGroup.Text.Trim().Trim(';');
|
||
if (group == "全部")
|
||
group = "";
|
||
List<string> groupLst = group.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
||
|
||
foreach (DataGridViewRow row in dgvShop.Rows)
|
||
{
|
||
if (!row.Cells["colShopName"].Value.ParseToString().Contains(txtFilterShopName.Text.Trim()))
|
||
{
|
||
row.Visible = false;
|
||
row.Cells["colSelect"].Value = false;
|
||
continue;
|
||
}
|
||
if (!string.IsNullOrWhiteSpace(notes) && !notesLst.Contains(row.Cells["colShopNotes"].Value.ParseToString()))
|
||
{
|
||
row.Visible = false;
|
||
row.Cells["colSelect"].Value = false;
|
||
continue;
|
||
}
|
||
if (!string.IsNullOrWhiteSpace(group) && !groupLst.Contains(row.Cells["colGroup"].Value.ParseToString()))
|
||
{
|
||
row.Visible = false;
|
||
row.Cells["colSelect"].Value = false;
|
||
continue;
|
||
}
|
||
row.Visible = true;
|
||
}
|
||
}
|
||
|
||
private void btnEmptyShop_Click(object sender, EventArgs e)
|
||
{
|
||
txtFilterShopName.Text = "";
|
||
cmbFilterShopNotes.Text = "全部";
|
||
cmbFilterShopGroup.Text = "全部";
|
||
btnFilterShop_Click(null, null);
|
||
}
|
||
|
||
private void btnReverse_Click(object sender, EventArgs e)
|
||
{
|
||
foreach (DataGridViewRow row in dgvShop.Rows)
|
||
{
|
||
if (row.Visible == true)
|
||
row.Cells["colSelect"].Value = !row.Cells["colSelect"].Value.ParseToBool();
|
||
}
|
||
}
|
||
|
||
private void btnAddSelect_Click(object sender, EventArgs e)
|
||
{
|
||
string notes = cmbFilterShopNotes.Text.Trim().Trim(';');
|
||
if (notes == "全部")
|
||
notes = "";
|
||
List<string> notesLst = notes.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
||
|
||
string group = cmbFilterShopGroup.Text.Trim().Trim(';');
|
||
if (group == "全部")
|
||
group = "";
|
||
List<string> groupLst = group.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
||
|
||
foreach (DataGridViewRow row in dgvShop.Rows)
|
||
{
|
||
if (row.Visible == false)
|
||
continue;
|
||
|
||
if (!row.Cells["colShopName"].Value.ParseToString().Contains(txtFilterShopName.Text.Trim()))
|
||
continue;
|
||
if (!string.IsNullOrWhiteSpace(notes) && !notesLst.Contains(row.Cells["colShopNotes"].Value.ParseToString()))
|
||
continue;
|
||
if (!string.IsNullOrWhiteSpace(group) && !groupLst.Contains(row.Cells["colGroup"].Value.ParseToString()))
|
||
continue;
|
||
|
||
row.Cells["colSelect"].Value = true;
|
||
}
|
||
}
|
||
|
||
private void btnAddUnSelect_Click(object sender, EventArgs e)
|
||
{
|
||
string notes = cmbFilterShopNotes.Text.Trim().Trim(';');
|
||
if (notes == "全部")
|
||
notes = "";
|
||
List<string> notesLst = notes.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
||
|
||
string group = cmbFilterShopGroup.Text.Trim().Trim(';');
|
||
if (group == "全部")
|
||
group = "";
|
||
List<string> groupLst = group.Split(new string[] { ";", ";", ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
||
|
||
foreach (DataGridViewRow row in dgvShop.Rows)
|
||
{
|
||
if (row.Visible == false)
|
||
continue;
|
||
|
||
if (!row.Cells["colShopName"].Value.ParseToString().Contains(txtFilterShopName.Text.Trim()))
|
||
continue;
|
||
if (!string.IsNullOrWhiteSpace(notes) && !notesLst.Contains(row.Cells["colShopNotes"].Value.ParseToString()))
|
||
continue;
|
||
if (!string.IsNullOrWhiteSpace(group) && !groupLst.Contains(row.Cells["colGroup"].Value.ParseToString()))
|
||
continue;
|
||
|
||
row.Cells["colSelect"].Value = false;
|
||
}
|
||
}
|
||
|
||
private void btnSelectOnline_Click(object sender, EventArgs e)
|
||
{
|
||
foreach (DataGridViewRow row in dgvShop.Rows)
|
||
{
|
||
if (row.Visible == true)
|
||
{
|
||
if (row.Cells["colLoginStatus"].Value.ParseToString() == "在线")
|
||
{
|
||
row.Cells["colSelect"].Value = true;
|
||
}
|
||
else
|
||
{
|
||
row.Cells["colSelect"].Value = false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private void btnSelectOffline_Click(object sender, EventArgs e)
|
||
{
|
||
foreach (DataGridViewRow row in dgvShop.Rows)
|
||
{
|
||
if (row.Visible == true)
|
||
{
|
||
if (row.Cells["colLoginStatus"].Value.ParseToString() != "在线")
|
||
{
|
||
row.Cells["colSelect"].Value = true;
|
||
}
|
||
else
|
||
{
|
||
row.Cells["colSelect"].Value = false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private void btnExportCSV_Click(object sender, EventArgs e)
|
||
{
|
||
var selectRows = dgvShop.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colSelect"].Value.ParseToBool() == true).ToList();
|
||
if (selectRows.Count == 0)
|
||
{
|
||
BaseMsgForm.ShowError("请选择店铺");
|
||
return;
|
||
}
|
||
|
||
var selectTaxRows = dgvTaxMoney.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colCheck"].Value.ParseToBool() == true).ToList();
|
||
if (selectTaxRows.Count == 0)
|
||
{
|
||
BaseMsgForm.ShowError("请选择要导出的流水");
|
||
return;
|
||
}
|
||
|
||
SaveFileDialog dialog = new SaveFileDialog();
|
||
dialog.Title = "保存文件...";
|
||
dialog.Filter = "CSV文件 (*.csv)|*.csv|All files (*.*)|*.*";
|
||
dialog.RestoreDirectory = true;
|
||
|
||
dialog.FileName = "用户 " + BaseClass.NickName + DateTime.Now.ToString(" 订单流水yyyyMMddHHmmss") + ".csv";
|
||
if (dialog.ShowDialog() != DialogResult.OK)
|
||
return;
|
||
var path = dialog.FileName;
|
||
|
||
//FolderBrowserDialog dialog = new FolderBrowserDialog();
|
||
//if (dialog.ShowDialog() != DialogResult.OK)
|
||
// return;
|
||
|
||
//var path = dialog.SelectedPath;
|
||
//string fileName = path + "\\用户 " + base + DateTime.Now.ToString("订单流水yyyyMMddHHmmss") + ".csv";
|
||
|
||
pictureBox1.Visible = true;
|
||
|
||
this.btnExport.Enabled = false;
|
||
this.btnSearch.Enabled = false;
|
||
Task.Run(() => {
|
||
Thread.Sleep(5000);
|
||
Invoke(new Action(() =>
|
||
{
|
||
this.btnExport.Enabled = true;
|
||
this.btnSearch.Enabled = true;
|
||
}));
|
||
});
|
||
|
||
Task.Run(() =>
|
||
{
|
||
int num = 0;
|
||
foreach (var row in selectRows)
|
||
{
|
||
num++;
|
||
Invoke(new Action(() =>
|
||
{
|
||
this.statusBar.lblTaskStatus.Text = "正在导出 第 " + num + " 个店铺,共 " + selectRows.Count + " 个店铺";
|
||
row.Cells["colMessage"].Value = "";
|
||
}));
|
||
if (this.cancellationTokenSource.IsCancellationRequested)
|
||
break;
|
||
|
||
var shopId = row.Cells["colShopId"].Value.ParseToString();
|
||
var shop = GlobalConfig.ValidShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
|
||
|
||
if (shop != null)
|
||
{
|
||
var rows = dgvTaxMoney.Rows.Cast<DataGridViewRow>()
|
||
.Where(r => r.Cells["colDgvTaxShopId"].Value.ParseToString() == shop.ShopId && r.Cells["colCheck"].Value.ParseToBool() == true).ToList();
|
||
var rst = OutExcel.SaveFile(path, num == 1, true, rows, "", "登录", "进店", "店铺");
|
||
}
|
||
}
|
||
|
||
Invoke(new Action(() =>
|
||
{
|
||
pictureBox1.Visible = false;
|
||
if (cancellationTokenSource.IsCancellationRequested)
|
||
{
|
||
this.statusBar.lblTaskStatus.Text += " 导出操作中断";
|
||
BaseMsgForm.ShowInfo("导出操作中断");
|
||
}
|
||
else
|
||
{
|
||
this.statusBar.lblTaskStatus.Text += " 导出操作结束";
|
||
BaseMsgForm.ShowInfo("导出操作结束");
|
||
}
|
||
}));
|
||
}, cancellationTokenSource.Token);
|
||
}
|
||
|
||
private void dgvDaRenProd_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||
{
|
||
if (e.ColumnIndex < 0 || e.RowIndex < 0)
|
||
return;
|
||
string headerText = dgvTaxMoney.Columns[e.ColumnIndex].HeaderText;
|
||
var shopId = dgvTaxMoney.Rows[e.RowIndex].Cells["colDgvTaxShopId"].Value.ParseToString();
|
||
var shop = GlobalConfig.ValidShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
|
||
|
||
switch (headerText)
|
||
{
|
||
case "删除":
|
||
break;
|
||
case "登录":
|
||
{
|
||
WXShopLoginForm shopLoginForm = new WXShopLoginForm(shop);
|
||
shopLoginForm.openType = EnumOpenType.login;
|
||
shopLoginForm.ShowDialog();
|
||
RefreshShopLogin();
|
||
}
|
||
break;
|
||
case "进店":
|
||
{
|
||
WXShopLoginForm shopLoginForm = new WXShopLoginForm(shop);
|
||
WXShopListForm.Instance.CheckShopLogin(new ShopLoginInfo[] { shop }, false);
|
||
if (shop.LoginStatus == "登录成功")
|
||
{
|
||
shopLoginForm.openType = EnumOpenType.manage;
|
||
shopLoginForm.WindowState = FormWindowState.Maximized;
|
||
shopLoginForm.InitUrl = "https://store.weixin.qq.com/shop/home";
|
||
shopLoginForm.Show();
|
||
}
|
||
else
|
||
{
|
||
shopLoginForm.openType = EnumOpenType.login;
|
||
shopLoginForm.ShowDialog();
|
||
RefreshShopLogin();
|
||
}
|
||
}
|
||
break;
|
||
//case "商品图片":
|
||
// {
|
||
// ShowImgForm imgFrom = new ShowImgForm(dgvTaxMoney.Rows[e.RowIndex].Cells["colDgvProdImgUrl"].Value.ParseToString());
|
||
// imgFrom.ShowDialog();
|
||
// break;
|
||
// }
|
||
//case "带货题图":
|
||
// {
|
||
// ShowImgForm imgFrom = new ShowImgForm(dgvTaxMoney.Rows[e.RowIndex].Cells["colLiveObjectImgUrl"].Value.ParseToString());
|
||
// imgFrom.ShowDialog();
|
||
// break;
|
||
// }
|
||
case "":
|
||
dgvTaxMoney.Rows[e.RowIndex].Cells["colCheck"].Value = !(bool)dgvTaxMoney.Rows[e.RowIndex].Cells["colCheck"].Value;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
public enum enumOrderSettleState
|
||
{
|
||
全部 = 0,
|
||
待结算 = 1,
|
||
无需结算 = 2,
|
||
已结算 = 60,
|
||
部分结算 = 100,
|
||
}
|
||
public enum enumSearchOrderState
|
||
{
|
||
全部 = 0,
|
||
待发货 = 20,
|
||
已发货 = 30,
|
||
已完成 = 100,
|
||
已取消 = 250,
|
||
}
|
||
public enum enumRstOrderState
|
||
{
|
||
全部 = 0,
|
||
礼物待收下 = 12,
|
||
待发货 = 20,
|
||
已发货 = 30,
|
||
已完成 = 100,
|
||
已取消 = 200,
|
||
}
|
||
public enum enumOrderPayMethod
|
||
{
|
||
全部 = 0,
|
||
微信支付 = 1,
|
||
先付后用 = 3,
|
||
}
|
||
}
|
||
|
||
public class WXTaxBLL
|
||
{
|
||
/// <summary>
|
||
///
|
||
/// </summary>
|
||
/// <param name="shop"></param>
|
||
/// <param name="orderSettleState">结算状态 0全部 1待结算 2无需结算 60已结算 100部分结算</param>
|
||
/// <param name="orderState">订单状态 0全部 20待发货 30已发货 100已完成 250已取消</param>
|
||
/// <param name="orderPayMethod">支付方式 0全部 1微信支付 3先用后付</param>
|
||
/// <param name="createTimeBegin">开始时间</param>
|
||
/// <param name="createTimeEnd">结束时间</param>
|
||
/// <param name="page"></param>
|
||
/// <param name="pageSize"></param>
|
||
/// <returns></returns>
|
||
public static string getListOrderFlow(ShopLoginInfo shop, int page = 1, int orderSettleState = 60, int orderState = 100, int orderPayMethod = 1,
|
||
int createTimeBegin = 0, int createTimeEnd = 0, int pageSize = 20)
|
||
{
|
||
if (createTimeEnd == 0)
|
||
createTimeEnd = BaseClass.DateTimeToTimestampSeconds(DateTime.Now.Date.AddDays(1).AddSeconds(-1));
|
||
|
||
pageSize = 20;
|
||
var offset = Math.Max(page - 1, 0) * pageSize;
|
||
|
||
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradefunds/cgi/listOrderFlow?token=&lang=zh_CN";
|
||
string body = @"{""orderSettleState"":" + orderSettleState + @",""orderState"":" + orderState + @",""orderPayMethod"":" + orderPayMethod +
|
||
@",""createTimeBegin"":""" + createTimeBegin + @""",""createTimeEnd"":""" + createTimeEnd + @""",""paginationInfo"":{""limit"":20,""offset"":" + offset + "}}";
|
||
string referer = "https://store.weixin.qq.com/shop/funds/moneyManage?section=3";
|
||
var result = WXHttpResponseBLL.WeiXinPostResponse(shop, url, body, referer);
|
||
return result;
|
||
}
|
||
}
|
||
|
||
public class WXAddFinderParam
|
||
{
|
||
public string ContactPerson { get; set; }
|
||
public string WxNumber { get; set; }
|
||
public string Mobile { get; set; }
|
||
public string Explain { get; set; }
|
||
}
|
||
|
||
public class WXProdIdWithListingTime
|
||
{
|
||
public string spuId { get; set; } // "10000538960743"
|
||
public string productName { get; set; } // "点教英语 《高中英语听力精听训练》强化版"
|
||
public int? listingTime { get; set; } // 1773912220
|
||
public int? soldNum { get; set; }
|
||
}
|
||
}
|