Files
KJD_WebService/TEMUKJD/KJDForms/SalesCenterForms/SeckillingAndLimitedSalesForm.cs
T

1546 lines
71 KiB
C#

using AllBase;
using AllBase.Helper;
using AllBase.Model.Result;
using CefSharp.WinForms;
using TemuKJD.Extension;
using TemuKJD.Helper;
using TemuKJD.KJDForms.BaseForms;
using TemuKJD.KJDForms.ShopForms;
using NaiBa.CefHelper;
using NaiBa.CefHelper.Handler;
using NaiBa.Util.Extension;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TemuKJD.KJDForms.SalesCenterForms
{
public partial class SeckillingAndLimitedSalesForm : Form
{
public static List<string> CustomActivityNames { get; set; } = new List<string>();
public CancellationTokenSource cancellationTokenSource { get; set; } = null;
public CancellationTokenSource addActiveCancellationTokenSource { get; set; } = null;
public ChromiumWebBrowser webBrowser { get; set; } = null;
private CheckBox chkSelectAll = null;
private List<string> customActivityNamesTemp = null;
private List<string> lstShopId = new List<string>();
private string shop_stype = "2"; // 1一口价 2直降 3打折
private string campaign_start_time;
private string campaign_end_time;
// 每个活动商品数量
int eachActivityProductNum = 1;
// 每人限购
string userLimit = "1";
// 活动时间类型 // 按开始结束时间 或 按时间段
string timeSetType = "1";
// 活动库存售完后如何操作
string soldOutType = "1";
// 开始时间
DateTime startTime = new DateTime();
// 结束时间
DateTime endTime = new DateTime();
// (按时间段类型活动的)活动持续时间
int actDuration = 0;
// 预热提前天
string preDayStr = "";
// 预热提前小时
string pteHourStr = "";
// 取消订单时间
string cancelTime = "";
// 是否预热
bool isPreheat = false;
// 只设置一个或设设置指定sku
bool isSetSkuOption = false;
// 设置一个sku的类型(第一个,最后一个,价格最高,最低)
string skuOptionType = "";
// 批量设置自定义名称
bool isUseCustomActivityNames = false;
// 库存类型
string stockType = "";
// 库存数量
int stockValue = 1;
// 最低折扣
decimal maxDiscount = 0.95M;
// 最少降价金额
decimal minReducePrice = 1M;
// 普通sku折扣/降价
string strPrice = string.Empty;
// 最低sku折扣/降价
string strPriceMin = string.Empty;
/// <summary>
/// 普通sku换算后用于设置的折扣/降价
/// </summary>
string strSetPrice = string.Empty;
/// <summary>
/// 最低sku换算后用于设置的折扣/降价
/// </summary>
string strSetPriceMin = string.Empty;
/// <summary>
/// 搜索指定商品列表
/// </summary>
public List<string> LstSearthProductId { get; set; } = new List<string>();
public SeckillingAndLimitedSalesForm()
{
InitializeComponent();
}
private void SeckillingAndLimitedSalesForm_Load(object sender, EventArgs e)
{
this.ucTabControl1.TabPages.Clear();
CustomActivityNames = NaiBa.Util.Helper.ConfigHelper.LoadConfig<List<string>>("limited_sales_custom_names");
if (CustomActivityNames == null && FileBase.Exists("SetActiveNames.txt"))
{
var namesStr = FileBase.ReadAllText("SetActiveNames.txt");
CustomActivityNames = namesStr.Split(new string[] { "\r", "\n", "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
}
if (CustomActivityNames == null)
{
CustomActivityNames = new List<string>();
}
chkSelectAll = dgvShop.Columns["colSelect"].AddHeaderCheckBox(HorizontalAlignment.Center, 0, 0, null, null, false);
dgvShop.Columns["colSelect"].HeaderText = "";
chkSelectAll.Width = chkSelectAll.Height = 13;
chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged;
dtpStartTime.Value = DateTime.Now.Date;
dtpEndTime.Value = DateTime.Now.Date.AddDays(1).AddSeconds(-1);
if (cmbCancelTime.Items.Count > 1)
cmbCancelTime.SelectedIndex = 1;
for (int i = 0; i <= 10; i++)
{
cmbDays.Items.Add(i + "天");
}
cmbDays.SelectedIndex = 0;
cmbHours.Items.Add("0.25小时");
cmbHours.Items.Add("0.5小时");
cmbHours.Items.Add("1小时");
cmbHours.Items.Add("1.5小时");
cmbHours.Items.Add("2小时");
cmbHours.Items.Add("2.5小时");
cmbHours.Items.Add("3小时");
cmbHours.Items.Add("3.5小时");
for (int i = 4; i <= 12; i++)
{
cmbHours.Items.Add(i + "小时");
}
cmbHours.SelectedIndex = 0;
//设置限购数
for (int x = 1; x <= 20; x++)
{
cmbLimit.Items.Add(x);
}
cmbLimit.SelectedIndex = 0;
//设置一个活动多少产品
for (int a = 1; a <= 20; a++)
{
cmbSetPro.Items.Add(a);
}
cmbSetPro.SelectedIndex = 0;
nudStockValue.Text = "1"; //参与活动库存
txtSKUPriceMin.Text = "1"; //设置打折数
txtSKUPriceCommon.Text = "1";
cmbActCont.SelectedIndex = 3; //按时间段选择默认30分钟
this.cmbStockType.SelectedIndex = 1;
this.cmbSkuOptionType.SelectedIndex = 0;
rbNotPreheat_CheckedChanged(null, null);
}
private void SeckillingAndLimitedSalesForm_VisibleChanged(object sender, EventArgs e)
{
if (Visible == true)
RefreshShop();
}
private void chkSelectAll_CheckedChanged(object sender, EventArgs e)
{
if (!chkSelectAll.Checked)
{
lstShopId.Clear();
foreach (DataGridViewRow row in dgvShop.Rows)
{
row.Cells["colSelect"].Value = false;
}
}
else
{
lstShopId.Clear();
var list = GlobalConfig.ShopLoginList.Where(s => s.ApiAuthStatus == "授权成功" && s.LoginStatus == "登录成功").Select(ss => ss.ShopId);
lstShopId.AddRange(list);
foreach (DataGridViewRow row in dgvShop.Rows)
{
if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString()))
row.Cells["colSelect"].Value = true;
}
}
}
private void rbNotPreheat_CheckedChanged(object sender, EventArgs e)
{
if (!rbNotPreheat.Checked)
{
pnlPreheat.Visible = true;
pnlDiscount.Location = new Point(pnlDiscount.Location.X, pnlPreheat.Location.Y + pnlPreheat.Height + 5);
lblDiscount.Location = new Point(lblDiscount.Location.X, pnlPreheat.Location.Y + pnlPreheat.Height + 8);
flpPrice.Location = new Point(flpPrice.Location.X, pnlDiscount.Location.Y + pnlPreheat.Height);
}
else
{
pnlPreheat.Visible = false;
pnlDiscount.Location = new Point(pnlDiscount.Location.X, pnlPreheat.Location.Y + 5);
lblDiscount.Location = new Point(lblDiscount.Location.X, pnlPreheat.Location.Y + 8);
flpPrice.Location = new Point(flpPrice.Location.X, pnlDiscount.Location.Y + pnlDiscount.Height);
}
}
private void rbStartEndTime_CheckedChanged(object sender, EventArgs e)
{
if (rbStartEndTime.Checked)
{
dtpStartTime.Visible = true;
label1.Visible = true;
dtpEndTime.Visible = true;
this.panel7.Visible = false;
}
else
{
dtpStartTime.Visible = false;
label1.Visible = false;
dtpEndTime.Visible = false;
this.panel7.Visible = true;
}
}
private void btnRefreshShop_Click(object sender, EventArgs e)
{
RefreshShop();
}
private void RefreshShop()
{
// 更新选中的上货店铺Id
lstShopId = lstShopId.Where(id => GlobalConfig.ShopLoginList.Any(s => s.ShopId == id && s.LoginStatus == "已授权")).ToList();
// 获取被删除的店铺
List<DataGridViewRow> dgvRowList = dgvShop.Rows.Cast<DataGridViewRow>().Where(row
=> !GlobalConfig.ShopLoginList.Any(s => s.ShopId == row.Cells["colShopId"]?.Value?.ToString())).ToList();
// 更新被删除的店铺列表
foreach (var row in dgvRowList)
{
dgvShop.Rows.Remove(row);
}
// 绑定其他店铺(含新导入的店铺)
foreach (DouShopLoginInfo shopEntity in GlobalConfig.ShopLoginList)
{
BindShop(shopEntity);
}
}
private void BindShop(DouShopLoginInfo shopEntity)
{
if (shopEntity == null)
return;
bool canUse = shopEntity.ApiAuthStatus == "授权成功" && shopEntity.LoginStatus == "登录成功";
var row = dgvShop.Rows.Cast<DataGridViewRow>().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopId);
if (row == null)
{
this.dgvShop.Rows.Add(
lstShopId.Contains(shopEntity.ShopId) && canUse,
shopEntity.ShopId,
shopEntity.ShopAccount,
shopEntity.ApiAuthStatus,
shopEntity.LoginStatus,
canUse,
string.Empty
);
}
else
{
row.Cells["colSelect"].Value = lstShopId.Contains(shopEntity.ShopId) && canUse;
row.Cells["colShopName"].Value = shopEntity.ShopAccount;
row.Cells["colAuthStatus"].Value = shopEntity.ApiAuthStatus;
row.Cells["colLoginStatus"].Value = shopEntity.LoginStatus;
row.Cells["colCanUse"].Value = canUse;
}
}
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;
long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong();
string shopName = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ToString();
var shop = GlobalConfig.ShopLoginList.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();
if (dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool())
{
if (lstShopId.Any(p => p == shopId.ToString()))
lstShopId.RemoveAll(p => p == shopId.ToString());
lstShopId.Add(shopId.ToString());
}
else
lstShopId.RemoveAll(p => p == shopId.ToString());
if (dgvShop.Rows.Cast<DataGridViewRow>().All(r => r.Cells["colSelect"].Value.ParseToBool()))
chkSelectAll.Checked = true;
else
chkSelectAll.Checked = false;
}
else
{
BaseMsgForm.ShowInfo("店铺未授权或未登录!");
}
break;
}
}
private void btnGetProduct_Click(object sender, EventArgs e)
{
if (lstShopId.Count == 0)
{
BaseMsgForm.ShowInfo("请选择店铺!");
return;
}
LstSearthProductId = txtContainsId.Text.Split(new string[] { "\r", "\n", "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
campaign_start_time = dtpStartTime.Value.ToString("yyyy-MM-dd+HH:mm:ss");
campaign_end_time = dtpEndTime.Value.ToString("yyyy-MM-dd+HH:mm:ss");
if (rbTimePeriod.Checked)
{
var time = DateTime.Now;
var actDuration = cmbActCont.Text.Replace("小时", "").Replace("分钟", "").ParseToInt() * (cmbActCont.Text.Contains("小时") ? 60 : 1);
campaign_start_time = time.ToString("yyyy-MM-dd+HH:mm:ss");
campaign_end_time = time.AddMinutes(actDuration).ToString("yyyy-MM-dd+HH:mm:ss");
}
btnGetProduct.Enabled = false;
cancellationTokenSource = new CancellationTokenSource();
Task.Run(() =>
{
var lstShopIdTemp = new List<string>();
lstShopIdTemp.AddRange(lstShopId);
foreach (var shopId in lstShopIdTemp)
{
if (cancellationTokenSource.IsCancellationRequested)
break;
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
if (shop == null)
continue;
if (ShopListForm.Instance == null)
ShopListForm.Instance = new ShopListForm();
ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false);
if (shop.LoginStatus != "登录成功")
{
Invoke(new Action(() =>
{
var row = this.dgvShop.Rows.Cast<DataGridViewRow>().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopId);
if (row != null)
{
row.Cells["colLoginStatus"].Value = "未登录";
row.Cells["colCanUse"].Value = false;
}
}));
continue;
}
SeckillingAndLimitedSalesShopForm salesShopForm = null;
Invoke(new Action(() =>
{
var tab = this.ucTabControl1.TabPages.Cast<TabPage>().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopId);
if (tab == null)
{
tab = new TabPage();
tab.Name = "tab" + shop.ShopId;
tab.Text = shop.ShopAccount;
this.ucTabControl1.TabPages.Add(tab);
var SeckillingAndLimitedSalesShopForm = new SeckillingAndLimitedSalesShopForm(shop);
SeckillingAndLimitedSalesShopForm.SeckillingAndLimitedSalesForm = this;
SeckillingAndLimitedSalesShopForm.TopLevel = false;
SeckillingAndLimitedSalesShopForm.Left = 0;
SeckillingAndLimitedSalesShopForm.Top = 0;
SeckillingAndLimitedSalesShopForm.FormBorderStyle = FormBorderStyle.None;
SeckillingAndLimitedSalesShopForm.AutoSize = true;
SeckillingAndLimitedSalesShopForm.Dock = DockStyle.Fill;
SeckillingAndLimitedSalesShopForm.Show();
tab.Controls.Add(SeckillingAndLimitedSalesShopForm);
}
if (tab.Controls.Count > 0)
{
salesShopForm = tab.Controls[0] as SeckillingAndLimitedSalesShopForm;
this.ucTabControl1.SelectedTab = tab;
}
}));
if (salesShopForm != null)
{
salesShopForm.GetProduct();
}
}
Invoke(new Action(() =>
{
btnManageAct.Enabled = btnGetProduct.Enabled = btnSubAct.Enabled = btnMdyAct.Enabled = true;
}));
}, cancellationTokenSource.Token);
}
public void GetProductByCef(DouShopLoginInfo shop)
{
if (webBrowser == null)
{
Invoke(new Action(() =>
{
webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false);
webBrowser.KeyboardHandler = new KeyboardHandler();
webBrowser.Dock = DockStyle.Fill;
Helper.CustomResourceRequestHandlerLocal resourceRequestHandler = new Helper.CustomResourceRequestHandlerLocal();
resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadCompleteEvent;
webBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler);
webBrowser.LifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow);
webBrowser.SendToBack();
this.splitContainer1.Panel2.Controls.Add(webBrowser);
}));
}
while (webBrowser.Tag != null)
{
Thread.Sleep(Randomx.GetId(50, 100));
}
if (cancellationTokenSource.IsCancellationRequested)
return;
webBrowser.Tag = shop;
while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading)
continue;
var cookie = shop.Cookies;
CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null));
var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null));
t.Wait(2000);
Thread.Sleep(500);
var targetUrl = "https://fxg.jinritemai.com/ffa/g/list";
webBrowser.Load(targetUrl);
while (webBrowser.IsLoading)
{
Thread.Sleep(1000);
}
Thread.Sleep(3000);
while (webBrowser.Tag != null)
{
Thread.Sleep(Randomx.GetId(50, 100));
}
Thread.Sleep(3000);
}
private void RequestHandler_ResourceLoadCompleteEvent(object sender, string url, string postData, string responseData, CefSharp.IRequest iRequest)
{
// 商品列表界面
if (url.StartsWith("https://fxg.jinritemai.com/product/tproduct/list?page=0") && url.Contains("&pay_type="))
{
if (webBrowser.Tag != null)
{
var listUrl = url;
var referrerUrl = iRequest.ReferrerUrl;
var result = responseData;
Dictionary<string, string> headers = new Dictionary<string, string>();
foreach (var hk in iRequest.Headers.AllKeys)
{
headers[hk] = iRequest.Headers[hk];
}
var shop = webBrowser.Tag as DouShopLoginInfo;
var tab = this.ucTabControl1.TabPages.Cast<TabPage>().FirstOrDefault(t => t.Text == shop.ShopAccount && t.Name == "tab" + shop.ShopId);
var salesForm = tab.Controls[0] as SeckillingAndLimitedSalesShopForm;
Task.Run(() =>
{
var cookies = CEFBrowser.GetCookie("", webBrowser.RequestContext.GetCookieManager(null));
if (salesForm != null)
salesForm.GetProductSim(listUrl, referrerUrl, headers, "", campaign_start_time, campaign_end_time);
webBrowser.Tag = null;
Thread.Sleep(1000);
});
}
}
// 活动管理界面
else if (url.StartsWith("https://fxg.jinritemai.com/shop/promotion/listFlashWithTimeLimit?campaign_status=") && url.Contains("&shop_stype="))
{
if (webBrowser.Tag != null)
{
var listUrl = url;
var referrerUrl = iRequest.ReferrerUrl;
var result = responseData;
Dictionary<string, string> headers = new Dictionary<string, string>();
foreach (var hk in iRequest.Headers.AllKeys)
{
headers[hk] = iRequest.Headers[hk];
}
var shop = webBrowser.Tag as DouShopLoginInfo;
var tab = this.ucTabControl1.TabPages.Cast<TabPage>().FirstOrDefault(t => t.Text == shop.ShopAccount + "活动管理" && t.Name == "tab" + shop.ShopId + "Active");
var managerActiveForm = tab.Controls[0] as LimitedSalesManagerActiveForm;
Task.Run(() =>
{
var cookies = CEFBrowser.GetCookie("", webBrowser.RequestContext.GetCookieManager(null));
if (managerActiveForm != null)
managerActiveForm.GetActiveSim(listUrl, referrerUrl, headers, result);
webBrowser.Tag = null;
Thread.Sleep(1000);
});
}
}
}
private void lblTime_Click(object sender, EventArgs e)
{
if (this.webBrowser != null)
{
webBrowser.SendToBack();
}
}
private void lblTime_DoubleClick(object sender, EventArgs e)
{
if (this.webBrowser != null)
{
webBrowser.BringToFront();
}
}
private void btnSubAct_Click(object sender, EventArgs e)
{
lstShopId = dgvShop.Rows.Cast<DataGridViewRow>().Where(row
=> row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList();
if (lstShopId.Count <= 0)
{
BaseMsgForm.ShowInfo("请选择要设置的店铺!");
return;
}
var initResult = InitParams();
if (!initResult)
return;
addActiveCancellationTokenSource = new CancellationTokenSource();
btnGetProduct.Enabled = false;
btnSubAct.Enabled = false;
btnMdyAct.Enabled = false;
Task.Run(() =>
{
var lstShopIdTemp = new List<string>();
lstShopIdTemp.AddRange(lstShopId);
foreach (var shopId in lstShopIdTemp)
{
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
if (shop == null)
continue;
if (ucTabControl1.TabPages["tab" + shopId] != null && ucTabControl1.TabPages["tab" + shopId].Controls.Count > 0)
{
var salesForm = ucTabControl1.TabPages["tab" + shopId].Controls[0] as SeckillingAndLimitedSalesShopForm;
if (salesForm == null)
continue;
Invoke(new Action(() =>
{
salesForm.statusBar.lblTaskStatus.Text = "正在创建活动";
}));
List<string> productIdList = salesForm.LstProductId;
if (productIdList.Count == 0)
{
BaseMsgForm.ShowInfo("请选择店铺 " + shop.ShopAccount + " 参加活动的商品!");
continue;
}
else
{
var productList = salesForm.ProductList.Where(p => productIdList.Contains(p.product_id)).ToList();
AddOrMdyActivity(shop, productList, null, salesForm);
}
Invoke(new Action(() =>
{
if (addActiveCancellationTokenSource.IsCancellationRequested)
salesForm.statusBar.lblTaskStatus.Text = "活动创建中断";
else
salesForm.statusBar.lblTaskStatus.Text = "活动创建结束";
}));
}
}
Invoke(new Action(() =>
{
btnManageAct.Enabled = btnGetProduct.Enabled = btnSubAct.Enabled = btnMdyAct.Enabled = true;
}));
}, addActiveCancellationTokenSource.Token);
}
private void AddOrMdyActivity(DouShopLoginInfo shop, List<DouProductPromotionListInfo> productList, ActiveInfo active,
SeckillingAndLimitedSalesShopForm salesForm = null, LimitedSalesManagerActiveForm manageForm = null)
{
string activityName = "";
string pIdData = @"{""product_ids"":[";
List<string> pIdList = new List<string>();
int nameId = 1;
for (int i = 0; i < productList.Count; i++)
{
if (addActiveCancellationTokenSource.IsCancellationRequested)
break;
activityName = "";
if (active != null)
activityName = active.title;
DouProductPromotionListInfo info = productList[i];
string pid = info.product_id;
pIdList.Add(pid);
if ((i + 1) % eachActivityProductNum == 0 || i == productList.Count - 1)
{
string pIdStr = "\"" + string.Join("\",\"", pIdList) + "\"";
pIdData = pIdData + pIdStr.TrimEnd(',') + "]}";
pIdList.Clear();
string cookies = shop.Cookies;
string result = "";
if (salesForm != null)
result = salesForm.GetSkusByProductIds(pIdData, cookies);
else if (manageForm != null)
result = manageForm.GetSkusByProductIds(pIdData, cookies);
if (!result.Contains("\"st\":0"))
continue;
// 还原商品详情查询字段
pIdData = @"{""product_ids"":[";
// 设置活动名称
if (string.IsNullOrEmpty(activityName))
{
activityName = "限时限量" + nameId + "-" + DateTime.Now.ToString("MMddHHmmss");
nameId++;
if (isUseCustomActivityNames)
{
if (customActivityNamesTemp != null && customActivityNamesTemp.Count > 0)
{
activityName = customActivityNamesTemp[0];
customActivityNamesTemp.RemoveAt(0);
}
else
{
Invoke(new Action(() =>
{
if (salesForm != null)
salesForm.ShowVisitorMessage("活动创建失败,自定义名称数量不足!", pIdStr);
}));
break;
}
}
}
string postData = "{\"sub_stype\":\"0\",\"shop_stype\":\"" + shop_stype + "\",\"title\":\"" + activityName + "\",\"time_set_type\":\"" + timeSetType + "\",\"promotion_goods\":[";
JObject jObj = JObject.Parse(result);
foreach (JProperty jp in jObj["data"])
{
string errorMsg = "";
var id = jp.Name;
var productJson = "{\"product_id\":\"" + id + "\",\"title\":\"" + info.name + "\",\"cover\":\"" + info.img + "\",\"config_scope\":\"0\",\"promotion_skus\":[";
JArray arr = jp.Value as JArray;
// 处理指定sku下商品的逻辑
if (isSetSkuOption)
{
// 默认第一个
var objs = new List<JToken>() { arr.FirstOrDefault(o => o["stock"]?.ParseToInt() > 0) };
if (skuOptionType == "最后一个")
objs = new List<JToken>() { arr.LastOrDefault(o => o["stock"]?.ParseToInt() > 0) };
if (skuOptionType == "最贵")
objs = new List<JToken>() { arr.OrderBy(o => o["origin_price"]).LastOrDefault(o => o["stock"]?.ParseToInt() > 0) };
if (skuOptionType == "最便宜")
objs = new List<JToken>() { arr.OrderBy(o => o["origin_price"]).FirstOrDefault(o => o["stock"]?.ParseToInt() > 0) };
if (skuOptionType == "不设置最便宜")
{
objs = arr.OrderBy(o => o["origin_price"]).Skip(1).ToList();
}
if (skuOptionType == "不设置最贵")
{
objs = arr.OrderBy(o => o["origin_price"]).Take(objs.Count).ToList();
}
if (objs == null || objs.Count == 0)
{
errorMsg = "满足条件的商品库存为0";
pIdStr = pIdStr.Replace(id, "");
break;
}
foreach (var obj in objs)
{
int totalStock = obj["stock"].ParseToInt();
int origin_price = obj["origin_price"].ParseToInt();
var stockNum = totalStock;
if (stockType == "百分比库存")
{
stockNum = stockValue * totalStock / 100;
}
else if (stockType == "统一库存")
{
stockNum = stockValue;
}
if (stockNum > totalStock)
{
//stockNum = totalStock;
errorMsg = "商品Sku库存不足";
pIdStr = pIdStr.Replace(id, "");
break;
}
if (stockNum < 1)
stockNum = 1;
if (shop_stype == "1")
productJson = productJson + "{\"id\":\"" + obj["id"] + "\",\"camp_stock_num\":\"" + stockNum + "\",\"user_limit\":\"" + userLimit + "\",\"price\":\"" + strSetPrice + "\"},";
else
{
if (shop_stype == "2" && strSetPrice.ParseToDecimal() / origin_price < 1 - maxDiscount)
{
errorMsg = "商品优惠力度不足" + (maxDiscount * 10).ToString() + "折";
pIdStr = pIdStr.Replace(id, "");
break;
}
if (shop_stype == "3" && origin_price * (1 - strSetPrice.ParseToDecimal() / 100) < 100)
{
errorMsg = "商品优惠力度不足" + minReducePrice + "元";
pIdStr = pIdStr.Replace(id, "");
break;
}
productJson = productJson + "{\"id\":\"" + obj["id"] + "\",\"camp_stock_num\":\"" + stockNum + "\",\"user_limit\":\"" + userLimit + "\",\"price\":\"undefined\",\"shop_svalue\":\"" + strSetPrice + "\"},";
}
}
}
else
{
bool isSetMin = false;
var minPrice = arr.Where(s => s["stock"].ParseToInt() > 0).Min(s => s["origin_price"]?.ParseToInt());
if (minPrice == null)
{
errorMsg = "商品库存为0";
pIdStr = pIdStr.Replace("\"" + id + "\"", "");
}
foreach (JObject obj in arr)
{
int totalStock = obj["stock"].ParseToInt();
int origin_price = obj["origin_price"].ParseToInt();
if (totalStock > 0)
{
var stockNum = totalStock;
if (stockType == "百分比库存")
{
stockNum = stockValue * totalStock / 100;
}
else if (stockType == "统一库存")
{
stockNum = stockValue;
}
if (stockNum > totalStock)
{
//stockNum = totalStock;
errorMsg = "商品Sku库存不足";
pIdStr = pIdStr.Replace(id, "");
break;
}
if (stockNum < 1)
stockNum = 1;
if (shop_stype != "1" && !isSetMin && obj["origin_price"].ParseToInt() == minPrice)
{
if (shop_stype == "2" && strSetPriceMin.ParseToDecimal() / origin_price < 1 - maxDiscount)
{
errorMsg = "商品优惠力度不足" + (maxDiscount * 10).ToString() + "折";
pIdStr = pIdStr.Replace(id, "");
break;
}
if (shop_stype == "3" && origin_price * (1 - strSetPriceMin.ParseToDecimal() / 100) < 100)
{
errorMsg = "商品优惠力度不足" + minReducePrice + "元";
pIdStr = pIdStr.Replace(id, "");
break;
}
productJson = productJson + "{\"id\":\"" + obj["id"] + "\",\"camp_stock_num\":\"" + stockNum + "\",\"user_limit\":\"" + userLimit + "\",\"price\":\"undefined\",\"shop_svalue\":\"" + strSetPriceMin + "\"},";
isSetMin = true;
}
else
{
if (shop_stype == "1")
productJson = productJson + "{\"id\":\"" + obj["id"] + "\",\"camp_stock_num\":\"" + stockNum + "\",\"user_limit\":\"" + userLimit + "\",\"price\":\"" + strSetPrice + "\"},";
else
{
if (shop_stype == "2" && strSetPrice.ParseToDecimal() / origin_price < 1 - maxDiscount)
{
errorMsg = "商品优惠力度不足" + (maxDiscount * 10).ToString() + "折";
pIdStr = pIdStr.Replace(id, "");
break;
}
if (shop_stype == "3" && origin_price * (1 - strSetPrice.ParseToDecimal() / 100) < 100)
{
errorMsg = "商品优惠力度不足" + minReducePrice + "元";
pIdStr = pIdStr.Replace(id, "");
break;
}
productJson = productJson + "{\"id\":\"" + obj["id"] + "\",\"camp_stock_num\":\"" + stockNum + "\",\"user_limit\":\"" + userLimit + "\",\"price\":\"undefined\",\"shop_svalue\":\"" + strSetPrice + "\"},";
}
}
}
}
}
if (errorMsg == "")
{
// 结束sku列表
postData = postData + productJson.TrimEnd(',') + "]},";
}
else
{
if (salesForm != null)
salesForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + errorMsg, id, true);
else if (manageForm != null)
manageForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + errorMsg, active?.campaign_id);
}
}
if (pIdStr.Trim(',') == "")
{
Invoke(new Action(() =>
{
if (salesForm != null)
salesForm.ShowVisitorMessage(activityName + "活动创建失败!原因:没有满足设置条件的商品", pIdStr);
else if (manageForm != null)
manageForm.ShowVisitorMessage(activityName + "活动创建失败!原因:没有满足设置条件的商品", active?.campaign_id);
}));
Thread.Sleep(Randomx.GetId(1500, 3500));
}
else
{
DateTime begin_time = startTime;
DateTime end_time = endTime;
if (timeSetType != "0")
{
begin_time = DateTime.Now;
end_time = begin_time.AddMinutes(actDuration);
}
var pre_begin_time = begin_time;
if (isPreheat)
{
var day = preDayStr.Replace("天", "").ParseToInt();
var hour = pteHourStr.Replace("小时", "").ParseToDouble();
if (day > 0)
pre_begin_time = pre_begin_time.AddDays(-day);
if (hour > 0)
pre_begin_time = pre_begin_time.AddHours(-hour);
}
postData = postData.TrimEnd(',') + "],\"order_expire_time\":\"" + cancelTime.Replace("分钟", "").ParseToInt() * 60 + "\",\"pre_begin_time\":\"" + pre_begin_time.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"begin_time\":\"" + begin_time.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"end_time\":\"" + end_time.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"sold_out_type\":\"" + soldOutType + "\",\"create_action_type\":\"0\"}";
string checkPro = "";
for (int times = 0; !checkPro.Contains("{\"st\":0,\"msg\"") && !checkPro.Contains("Gateway Timeout") && times < 3; times++)
{
if (salesForm != null)
checkPro = salesForm.checkFlashAndGoods(postData, cookies);
else if (manageForm != null)
checkPro = manageForm.checkFlashAndGoods(postData, cookies);
}
if (checkPro == "" || checkPro.Contains("Gateway Timeout") || checkPro.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,"))
{
string createPro = "";
if (salesForm != null)
{
createPro = salesForm.createFlashAndGoods(postData, cookies);
for (int times = 0; times < 2 && (!createPro.Contains("{\"st\":0,\"msg\"") || createPro.Contains("系统内部错误")); times++)
{
checkPro = salesForm.checkFlashAndGoods(postData, cookies);
if (checkPro.Contains("已参加同时段"))
{
createPro = "{\"st\":0,\"msg\":\"\",\"code\":0,";
break;
}
else
createPro = salesForm.createFlashAndGoods(postData, cookies);
}
// 如果商品sku过多导致失败则分开建相同名称的活动
if (createPro.Contains("Gateway Timeout") || createPro.Contains("系统内部错误"))
{
JObject parentObj = JObject.Parse(postData);
var goodsArr = parentObj["promotion_goods"];
JArray goodsJArr = new JArray();
foreach (JObject prodObj in goodsArr)
{
goodsJArr.Add(prodObj);
if (goodsJArr.Count() >= 10 || goodsArr.LastOrDefault() == prodObj)
{
parentObj["promotion_goods"] = goodsJArr;
goodsJArr = new JArray();
createPro = "";
for (int num = 0; num < 3 && !createPro.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,"); num++)
{
checkPro = salesForm.checkFlashAndGoods(JsonHelper.SerializeObject(parentObj), cookies);
if (checkPro.Contains("已参加同时段"))
{
createPro = "{\"st\":0,\"msg\":\"\",\"code\":0,";
break;
}
createPro = salesForm.createFlashAndGoods(JsonHelper.SerializeObject(parentObj), cookies);
}
if (!createPro.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,"))
break;
}
}
}
}
else if (manageForm != null)
{
createPro = manageForm.createFlashAndGoods(postData, cookies);
if (!createPro.Contains("{\"st\":0,\"msg\""))
createPro = manageForm.createFlashAndGoods(postData, cookies);
if (!createPro.Contains("{\"st\":0,\"msg\""))
createPro = manageForm.createFlashAndGoods(postData, cookies);
}
if (createPro.Contains("{\"st\":0,\"msg\":\"\",\"code\":0,"))
{
Invoke(new Action(() =>
{
if (salesForm != null)
salesForm.ShowVisitorMessage("活动 " + activityName + " 创建成功!", pIdStr);
else if (manageForm != null)
manageForm.ShowVisitorMessage("活动 " + activityName + " 修改成功!", active?.campaign_id);
}));
}
else
{
if (createPro.Contains("Gateway Timeout"))
createPro = "{\"msg\":\"接口调用超时\"}";
Invoke(new Action(() =>
{
if (salesForm != null)
salesForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + BaseRegex.GetStringJson(ref createPro, "msg"), pIdStr);
else if (manageForm != null)
manageForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + BaseRegex.GetStringJson(ref createPro, "msg"), active?.campaign_id);
}));
}
}
else
{
Invoke(new Action(() =>
{
if (salesForm != null)
salesForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + BaseRegex.GetStringJson(ref checkPro, "msg"), pIdStr);
else if (manageForm != null)
manageForm.ShowVisitorMessage(activityName + "活动创建失败!原因:" + BaseRegex.GetStringJson(ref checkPro, "msg"), active?.campaign_id);
}));
}
Thread.Sleep(Randomx.GetId(1500, 3500));
}
}
//var tab1 = this.ucTabControl1.TabPages.Cast<TabPage>().FirstOrDefault(t => t.Text == shop.ShopName + "活动管理" && t.Name == "tab" + shop.ShopId + "Active");
//if (tab1 != null)
//{
// LimitedSalesManagerActiveForm actForm = tab1.Controls[0] as LimitedSalesManagerActiveForm;
// actForm.activeList.Clear();
//}
}
}
private bool InitParams(bool isModify = false)
{
customActivityNamesTemp = new List<string>();
//活动名称
if (chkSetName.Checked && !isModify)
{
customActivityNamesTemp.AddRange(CustomActivityNames);
if (customActivityNamesTemp.Count == 0)
{
BaseMsgForm.ShowInfo("请设置自定义活动名称!");
return false;
}
}
// 每个活动商品数量
eachActivityProductNum = cmbSetPro.Text.ParseToInt();
if (isModify)
eachActivityProductNum = 20;
// 每人限购
userLimit = cmbLimit.Text;
// 活动时间类型
timeSetType = rbTimePeriod.Checked ? "1" : "0"; // 按开始结束时间 或 按时间段
// 活动库存售完后如何操作
soldOutType = rbSoldOut.Checked ? "1" : "0";
// 开始时间
startTime = dtpStartTime.Value;
// 结束时间
endTime = dtpEndTime.Value;
// (按时间段类型活动的)活动持续时间
actDuration = cmbActCont.Text.Replace("小时", "").Replace("分钟", "").ParseToInt() * (cmbActCont.Text.Contains("小时") ? 60 : 1);
// 预热提前天
preDayStr = cmbDays.Text.Trim();
// 预热提前小时
pteHourStr = cmbHours.Text.Trim();
// 取消订单时间
cancelTime = cmbCancelTime.Text.Trim();
// 是否预热
isPreheat = rbPreheat.Checked;
// 只设置一个sku
isSetSkuOption = chkSetSkuOption.Checked;
// 设置一个sku的类型(第一个,最后一个,价格最高,最低)
skuOptionType = this.cmbSkuOptionType.Text;
// 批量设置自定义名称
isUseCustomActivityNames = chkSetName.Checked;
// 库存类型
stockType = this.cmbStockType.Text;
// 库存数量
stockValue = nudStockValue.Text.ParseToInt();
// 最低折扣
maxDiscount = 0.95M;
// 最少降价金额
minReducePrice = 1M;
// 普通sku折扣/降价
strPrice = string.Empty;
// 最低sku折扣/降价
strPriceMin = string.Empty;
if (rbBuyoutPrice.Checked || isSetSkuOption)
{
strPrice = txtSKUPriceCommon.Text.Trim();
if (strPrice == string.Empty || !BaseRegex.IsNumber(strPrice))
{
BaseMsgForm.ShowError("请认真填写一口价的优惠数值!");
txtSKUPriceCommon.Focus();
return false;
}
//判断打折的数字是否正确
if (rbDiscount.Checked)
{
if (strPrice.Length > 3 || strPrice.EndsWith(".") || strPrice.ParseToDecimal() > 9.5M || strPrice.ParseToDecimal() < 0.1M)
{
BaseMsgForm.ShowError("参加活动的商品打折数必须在0.1-9.5之间,且小数点后只能有一位!");
return false;
}
}
else if (rbReducePrice.Checked)
{
if (strPrice.ParseToDecimal() < 1M)
{
BaseMsgForm.ShowError("参加活动的商品优惠金额最少1元!");
return false;
}
}
}
else
{
strPriceMin = txtSKUPriceMin.Text.Trim();
strPrice = txtSKUPriceCommon.Text.Trim();
if (strPrice == string.Empty || !BaseRegex.IsNumber(strPrice) || strPriceMin == string.Empty || !BaseRegex.IsNumber(strPriceMin))
{
BaseMsgForm.ShowInfo("请认真填写活动的优惠数值!");
return false;
}
//判断打折的数字是否正确
if (rbDiscount.Checked)
{
if (strPrice.Length > 3 || strPrice.EndsWith(".") || strPriceMin.Length > 3 || strPriceMin.EndsWith(".")
|| strPrice.ParseToDecimal() > 9.5M || strPrice.ParseToDecimal() < 0.1M || strPriceMin.ParseToDecimal() > 9.5M || strPriceMin.ParseToDecimal() < 0.1M)
{
BaseMsgForm.ShowInfo("参加活动的商品打折数必须在0-10之间,且小数点后只能有一位!");
return false;
}
}
else if (rbReducePrice.Checked)
{
if (strPrice.ParseToDecimal() < 1M)
{
BaseMsgForm.ShowError("参加活动的商品优惠金额最少1元!");
return false;
}
}
}
if (isSetSkuOption || shop_stype == "1")
{
if (shop_stype == "3")
strSetPrice = (strPrice.ParseToDouble() * 10).ToString(); //打折精确到小数点后一位(0-10之间)
else
strSetPrice = (strPrice.ParseToDouble() * 100).ToString(); //一口价、直降精确到小数点后两位(0-原价之间)
}
else
{
if (shop_stype == "3")
{
strSetPrice = (strPrice.ParseToDouble() * 10).ToString(); //打折精确到小数点后一位(0-10之间)
strSetPriceMin = (strPriceMin.ParseToDouble() * 10).ToString();
}
else if (shop_stype == "2")
{
strSetPrice = (strPrice.ParseToDouble() * 100).ToString(); //直降精确到小数点后两位(0-原价之间)
strSetPriceMin = (strPriceMin.ParseToDouble() * 100).ToString();
}
}
return true;
}
private void btnClear_Click(object sender, EventArgs e)
{
if (BaseMsgForm.ShowConfirm("确定要清空结果吗?清空后需要重新获取!").DialogResult == DialogResult.OK)
{
foreach (TabPage tp in ucTabControl1.TabPages)
{
if (tp.Controls.Count > 0)
{
if (tp.Text.Contains("活动管理"))
{
var managerActiveForm = tp.Controls[0] as LimitedSalesManagerActiveForm;
if (managerActiveForm != null)
managerActiveForm.ClearData();
}
else
{
var salesForm = tp.Controls[0] as SeckillingAndLimitedSalesShopForm;
if (salesForm != null)
salesForm.ClearData();
}
}
}
}
}
private void btnStopGetProduct_Click(object sender, EventArgs e)
{
if (cancellationTokenSource != null)
cancellationTokenSource.Cancel();
if (addActiveCancellationTokenSource != null)
addActiveCancellationTokenSource.Cancel();
webBrowser.Tag = null;
Task.Run(() =>
{
Thread.Sleep(10000);
if (cancellationTokenSource == null || cancellationTokenSource.IsCancellationRequested)
{
Invoke(new Action(() =>
{
btnGetProduct.Enabled = btnSubAct.Enabled = btnMdyAct.Enabled = btnManageAct.Enabled = true;
}));
}
});
}
private void rbDiscount_Click(object sender, EventArgs e)
{
if (shop_stype == "3" && rbDiscount.Checked)
return;
if (chkSetSkuOption.Checked)
{
pnlSkuPriceMin.Visible = false;
}
else
{
pnlSkuPriceMin.Visible = true;
}
this.lblSKUPriceMin2.Text = "打";
this.lblSKUPriceMin3.Text = "折";
this.lblSKUPriceCommon2.Text = "打";
this.lblSKUPriceCommon3.Text = "折";
this.txtSKUPriceMin.Text = "9";
this.txtSKUPriceCommon.Text = "9.5";
shop_stype = "3";
this.rbDiscount.Checked = true;
}
private void rbReducePrice_Click(object sender, EventArgs e)
{
if (shop_stype == "2" && rbReducePrice.Checked)
return;
if (chkSetSkuOption.Checked)
{
pnlSkuPriceMin.Visible = false;
}
else
{
pnlSkuPriceMin.Visible = true;
}
this.lblSKUPriceMin2.Text = "减";
this.lblSKUPriceMin3.Text = "元";
this.lblSKUPriceCommon2.Text = "减";
this.lblSKUPriceCommon3.Text = "元";
this.txtSKUPriceMin.Text = "1";
this.txtSKUPriceCommon.Text = "1";
shop_stype = "2";
this.rbReducePrice.Checked = true;
}
private void rbBuyoutPrice_Click(object sender, EventArgs e)
{
if (shop_stype == "1" && rbBuyoutPrice.Checked)
return;
if (BaseMsgForm.ShowConfirm("确定所有商品的价格都按照统一的价格来设置?建议谨慎操作!").DialogResult == DialogResult.OK)
{
this.txtSKUPriceCommon.Text = "100";
this.lblSKUPriceCommon2.Text = "";
this.lblSKUPriceCommon3.Text = "元";
shop_stype = "1";
pnlSkuPriceMin.Visible = false;
this.rbBuyoutPrice.Checked = true;
}
else
{
if (shop_stype == "2")
rbReducePrice_Click(sender, e);
else
rbDiscount_Click(sender, e);
}
}
private void btnManageAct_Click(object sender, EventArgs e)
{
if (lstShopId.Count == 0)
{
BaseMsgForm.ShowInfo("请选择店铺!");
return;
}
btnGetProduct.Enabled = false;
cancellationTokenSource = new CancellationTokenSource();
Task.Run(() =>
{
foreach (var shopId in lstShopId)
{
if (cancellationTokenSource.IsCancellationRequested)
break;
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
if (shop == null)
continue;
if (ShopListForm.Instance == null)
ShopListForm.Instance = new ShopListForm();
ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false);
if (shop.LoginStatus != "登录成功")
{
Invoke(new Action(() =>
{
var row = this.dgvShop.Rows.Cast<DataGridViewRow>().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == shop.ShopId);
if (row != null)
{
row.Cells["colLoginStatus"].Value = "未登录";
row.Cells["colCanUse"].Value = false;
}
}));
continue;
}
LimitedSalesManagerActiveForm managerActiveForm = null;
Invoke(new Action(() =>
{
var tab = this.ucTabControl1.TabPages.Cast<TabPage>().FirstOrDefault(t => t.Text == shop.ShopAccount + "活动管理" && t.Name == "tab" + shop.ShopId + "Active");
if (tab == null)
{
tab = new TabPage();
tab.Name = "tab" + shop.ShopId + "Active";
tab.Text = shop.ShopAccount + "活动管理";
this.ucTabControl1.TabPages.Add(tab);
var limitedSalesManagerActiveForm = new LimitedSalesManagerActiveForm(shop);
limitedSalesManagerActiveForm.seckillingAndLimitedSalesForm = this;
limitedSalesManagerActiveForm.TopLevel = false;
limitedSalesManagerActiveForm.Left = 0;
limitedSalesManagerActiveForm.Top = 0;
limitedSalesManagerActiveForm.FormBorderStyle = FormBorderStyle.None;
limitedSalesManagerActiveForm.AutoSize = true;
limitedSalesManagerActiveForm.Dock = DockStyle.Fill;
limitedSalesManagerActiveForm.Show();
tab.Controls.Add(limitedSalesManagerActiveForm);
}
if (tab.Controls.Count > 0)
{
managerActiveForm = tab.Controls[0] as LimitedSalesManagerActiveForm;
this.ucTabControl1.SelectedTab = tab;
}
}));
if (managerActiveForm != null)
{
managerActiveForm.GetActive();
}
}
Invoke(new Action(() => { btnGetProduct.Enabled = true; }));
}, cancellationTokenSource.Token);
}
public void GetActiveByCef(DouShopLoginInfo shop)
{
if (webBrowser == null)
{
Invoke(new Action(() =>
{
webBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false);
webBrowser.KeyboardHandler = new KeyboardHandler();
webBrowser.Dock = DockStyle.Fill;
CustomResourceRequestHandlerLocal resourceRequestHandler = new CustomResourceRequestHandlerLocal();
resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadCompleteEvent;
webBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler);
webBrowser.LifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow);
webBrowser.SendToBack();
splitContainer4.Panel1.Controls.Add(webBrowser);
}));
}
while (webBrowser.Tag != null)
{
Thread.Sleep(Randomx.GetId(50, 100));
}
if (cancellationTokenSource.IsCancellationRequested)
return;
webBrowser.Tag = shop;
while (!webBrowser.IsBrowserInitialized || webBrowser.IsLoading)
continue;
var cookie = shop.Cookies;
CEFBrowser.DeleteCookie(webBrowser.RequestContext.GetCookieManager(null));
var t = CEFBrowser.SetCookieAsync("jinritemai.com", cookie, webBrowser.RequestContext.GetCookieManager(null));
t.Wait(2000);
Thread.Sleep(500);
var targetUrl = "https://fxg.jinritemai.com/market/center/tools/limitsales";
webBrowser.Load(targetUrl);
while (webBrowser.IsLoading)
{
Thread.Sleep(1000);
}
Thread.Sleep(3000);
while (webBrowser.Tag != null)
{
Thread.Sleep(Randomx.GetId(50, 100));
}
Thread.Sleep(3000);
}
private void chkSetName_CheckedChanged(object sender, EventArgs e)
{
}
private void chkSetOneSku_CheckedChanged(object sender, EventArgs e)
{
if (rbBuyoutPrice.Checked)
return;
if (chkSetSkuOption.Checked)
{
pnlSkuPriceMin.Visible = false;
}
else
{
pnlSkuPriceMin.Visible = true;
}
}
private void btnSetName_Click(object sender, EventArgs e)
{
LimitedSalesActivityNameForm customNameForm = new LimitedSalesActivityNameForm();
customNameForm.ShowDialog();
}
private void cmbStockType_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbStockType.Text == "全部库存")
{
nudStockValue.Enabled = false;
nudStockValue.Value = 100;
nudStockValue.Width = 48;
lblPercentSign.Visible = true;
}
else if (cmbStockType.Text == "百分比库存")
{
nudStockValue.Enabled = true;
nudStockValue.Maximum = 100m;
nudStockValue.Minimum = 1m;
nudStockValue.Increment = 1m;
nudStockValue.DecimalPlaces = 0;
nudStockValue.Value = 50m;
nudStockValue.Width = 48;
lblPercentSign.Visible = true;
}
else if (cmbStockType.Text == "统一库存")
{
nudStockValue.Enabled = true;
nudStockValue.Maximum = 10000m;
nudStockValue.Minimum = 1m;
nudStockValue.Increment = 1m;
nudStockValue.DecimalPlaces = 0;
nudStockValue.Value = 100m;
nudStockValue.Width = 65;
lblPercentSign.Visible = false;
}
}
private void btnCancelGet_Click(object sender, EventArgs e)
{
if (cancellationTokenSource != null)
cancellationTokenSource.Cancel();
if (addActiveCancellationTokenSource != null)
addActiveCancellationTokenSource.Cancel();
webBrowser.Tag = null;
Task.Run(() =>
{
Thread.Sleep(10000);
if (cancellationTokenSource == null || cancellationTokenSource.IsCancellationRequested)
{
Invoke(new Action(() =>
{
btnGetProduct.Enabled = btnSubAct.Enabled = btnMdyAct.Enabled = btnManageAct.Enabled = true;
}));
}
});
}
private void btnMdyAct_Click(object sender, EventArgs e)
{
//https://fxg.jinritemai.com/byteshop/promotion/detailFlashAndGoods?campaign_id=7129422311865811232&filter_unable_product=0&_bid=ecom_market_shop&appid=1&_=1660017441378&_signature=_02B4Z6wo00d01iVfrVQAAIDDRlVtPWgRUO4lW6nAAOu0sAsG56mTgW-GugrVNIvOFK.nRZ2WI7FAQvOEAM7Akj1ERBjJAOPHQWw72Qx1eAqWHCS9zJ6RFjCyrannBvRvfpJr6aNhuwjX.UjXab
if (lstShopId.Count <= 0)
{
BaseMsgForm.ShowInfo("请选择要修改活动的店铺!");
return;
}
var initResult = InitParams(true);
if (!initResult)
return;
addActiveCancellationTokenSource = new CancellationTokenSource();
btnGetProduct.Enabled = false;
btnSubAct.Enabled = false;
btnMdyAct.Enabled = false;
Task.Run(() =>
{
var lstShopIdTemp = new List<string>();
lstShopIdTemp.AddRange(lstShopId);
foreach (var shopId in lstShopIdTemp)
{
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
if (shop == null)
continue;
if (ucTabControl1.TabPages["tab" + shopId + "Active"] != null && ucTabControl1.TabPages["tab" + shopId + "Active"].Controls.Count > 0)
{
var manageForm = ucTabControl1.TabPages["tab" + shopId + "Active"].Controls[0] as LimitedSalesManagerActiveForm;
if (manageForm == null)
continue;
Invoke(new Action(() =>
{
manageForm.statusBar.lblTaskStatus.Text = "正在修改活动";
}));
List<ActiveInfo> activityList = manageForm.activeList.Where(a => manageForm.lstActiveId.Contains(a.campaign_id)).ToList();
if (activityList.Count == 0)
{
BaseMsgForm.ShowInfo("请选择店铺 " + shop.ShopAccount + " 要修改的活动!");
continue;
}
else
{
foreach (ActiveInfo activity in activityList)
{
List<DouProductPromotionListInfo> productList = new List<DouProductPromotionListInfo>();
var activity_product_result = manageForm.GetProductByActivityId(activity.campaign_id, shop.Cookies);
if (activity_product_result.Contains("\"st\":0,\"msg\":\"\""))
{
JObject obj = JObject.Parse(activity_product_result);
JArray arr = obj["data"]?["promotion_goods"] as JArray;
if (arr != null)
{
foreach (JObject token in arr)
{
var tokenStr = token.ToString();
DouProductPromotionListInfo douProduct = new DouProductPromotionListInfo();
douProduct.product_id = BaseRegex.GetStringJson(ref tokenStr, "product_id");
douProduct.name = BaseRegex.GetStringJson(ref tokenStr, "title");
douProduct.img = BaseRegex.GetStringJson(ref tokenStr, "cover");
productList.Add(douProduct);
}
}
}
manageForm.DelActive(activity.campaign_id.ParseToLong(), false);
AddOrMdyActivity(shop, productList, activity, null, manageForm);
}
}
Invoke(new Action(() =>
{
if (addActiveCancellationTokenSource.IsCancellationRequested)
manageForm.statusBar.lblTaskStatus.Text = "活动修改中断";
else
manageForm.statusBar.lblTaskStatus.Text = "活动修改结束";
}));
}
}
Invoke(new Action(() =>
{
btnManageAct.Enabled = btnGetProduct.Enabled = btnSubAct.Enabled = btnMdyAct.Enabled = true;
}));
}, addActiveCancellationTokenSource.Token);
}
}
}