Files
KJD/TEMUKJD/KJDForms/SalesCenterForms/MarketingActivityForm.cs
T
2025-12-26 09:53:29 +08:00

1409 lines
64 KiB
C#
Raw 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.Param.SalesManage;
using AllBase.Model.Result;
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;
using TemuKJD.Extension;
using TemuKJD.BaseForms;
using TemuKJD.KJDForms.ShopForms;
using TemuKJD.BLL;
namespace TemuKJD.KJDForms.SalesCenterForms
{
public partial class MarketingActivityForm : LRBaseForm
{
public static MarketingActivityForm ActInstance { get; set; } = null;
/// <summary>
/// 单品参加活动时的单品id
/// </summary>
public ShopLoginInfo soloActivityShop { get; set; } = null;
public WarehouseProductSubOrderInfo soloActivityProduct { get; set; } = null;
private CheckBox chkSelectAll = null;
public CancellationTokenSource cancellationTokenSource { get; set; } = null;
public List<TemuActivityThematicInfo> lstActivityThematic { get; set; } = new List<TemuActivityThematicInfo>();
public List<string> lstShopIdSelect = new List<string>();
public List<string> lstActivityThematicIdSelect = new List<string>();
public List<int> lstDiscount = new List<int>() { 60, 70, 80, 85 };
public Dictionary<string, List<WarehouseProductSubOrderInfo>> dicNoSaleProd = new Dictionary<string, List<WarehouseProductSubOrderInfo>>();
public MarketingActivityForm()
{
InitializeComponent();
}
public MarketingActivityForm(ShopLoginInfo shop, WarehouseProductSubOrderInfo prod)
{
InitializeComponent();
if(shop != null && prod != null)
{
this.soloActivityShop = shop;
this.soloActivityProduct = prod;
ActInstance = this;
this.MaximizeBox = true;
this.Size = new Size(1400, 850);
RefreshSoloActivityCtrl();
}
}
/// <summary>
/// 刷新单品活动控件显示
/// </summary>
public void RefreshSoloActivityCtrl()
{
if (this.soloActivityProduct == null || this.soloActivityShop == null)
return;
var prod = soloActivityProduct;
chkFullShop.Visible = false;
chkNoSaleProd.Visible = false;
chkSoloActivityProduct.Visible = true;
chkSoloActivityProduct.Location = chkFullShop.Location;
chkSoloActivityProduct.Text = "报名单品活动 " + (prod.productName.Length > 60 ? prod.productName.Substring(0, 60) + "……" : prod.productName);
this.dgvProduct.Rows.Clear();
}
private void MarketingActivityForm_Load(object sender, EventArgs e)
{
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;
this.dgvActivity.AddSelectorColumn("colCheckActivity");
this.dgvProduct.AddSelectorColumn("colCheckProduct");
this.actDiscount60.chkSignActivity.CheckedChanged += ChkSignActivity_CheckedChanged;
this.actDiscount70.chkSignActivity.CheckedChanged += ChkSignActivity_CheckedChanged;
this.actDiscount80.chkSignActivity.CheckedChanged += ChkSignActivity_CheckedChanged;
this.actDiscount85.chkSignActivity.CheckedChanged += ChkSignActivity_CheckedChanged;
}
private void ChkSignActivity_CheckedChanged(object sender, EventArgs e)
{
foreach(DataGridViewRow row in dgvActivity.Rows)
{
SetRowCheck(row);
}
}
void SetRowCheck(DataGridViewRow row)
{
try
{
var activityThematicName = row.Cells["colActivityThematicName"].Value.ToString();
if (activityThematicName == "官方大促")
{
}
if (row.Cells["colDiscountTenth"].Value.ParseToInt() > 0)
{
int discount = this.GetNearDiscount(row.Cells["colDiscountTenth"].Value.ParseToInt());
var discountCtrl = this.actDiscount60;
if (discount == 70)
discountCtrl = this.actDiscount70;
if (discount == 80)
discountCtrl = this.actDiscount80;
if (discount == 85)
discountCtrl = this.actDiscount85;
row.Cells["colCheckActivity"].Value = discountCtrl.chkSignActivity.Checked;
}
else
{
row.Cells["colCheckActivity"].Value = false;
}
}
catch (Exception ex)
{
BaseMsgForm.ShowError("选择活动失败" + ex.Message);
}
}
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.ShopLoginList.Where(s => s.LoginStatus2 == "国际版在线").Select(ss => ss.ShopId);
foreach (DataGridViewRow row in dgvShop.Rows)
{
if (list.Any(l => l == row.Cells["colShopId"]?.Value?.ToString()))
row.Cells["colSelect"].Value = true;
}
}
}
private void MarketingActivityForm_VisibleChanged(object sender, EventArgs e)
{
if (this.Visible)
FiltShop();
}
private void btnRefreshShop_Click(object sender, EventArgs e)
{
pbShopLoading.Visible = true;
Task.Run(() =>
{
ShopListForm.UpdateShop();
Invoke(new Action(() =>
{
FiltShop();
pbShopLoading.Visible = false;
}));
});
}
private void btnSearchShop_Click(object sender, EventArgs e)
{
FiltShop();
}
private void FiltShop()
{
// 店铺Id
var selectIds = dgvShop.Rows.Cast<DataGridViewRow>().Where(row
=> row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colShopId"]?.Value.ToString()).ToList();
var shopLst = GlobalConfig.ShopLoginList.ToList();
if (!string.IsNullOrWhiteSpace(txtShopId.Text.Trim()))
{
shopLst = shopLst.Where(s => ("," + txtShopId.Text.Trim() + ",").Contains("," + s.ShopId + ",") || s.ShopId.Contains(txtShopId.Text.Trim())).ToList();
}
if (!string.IsNullOrWhiteSpace(txtShopName.Text.Trim()))
{
shopLst = shopLst.Where(s => ("," + txtShopName.Text.Trim() + ",").Contains("," + s.ShopAccount + ",") || s.ShopAccount.ToLower().Contains(txtShopName.Text.Trim().ToLower())).ToList();
}
if (!string.IsNullOrWhiteSpace(txtNotes.Text.Trim()))
{
shopLst = shopLst.Where(s => ("," + txtNotes.Text.Trim() + ",").Contains("," + s.Notes + ",") || s.Notes.ToLower().Contains(txtNotes.Text.Trim().ToLower())).ToList();
}
// 获取被删除的店铺
List<DataGridViewRow> dgvRowList = dgvShop.Rows.Cast<DataGridViewRow>().Where(row
=> !shopLst.Any(s => s.ShopId == row.Cells["colShopId"]?.Value?.ToString())).ToList();
// 更新被删除的店铺列表
foreach (var row in dgvRowList)
{
dgvShop.Rows.Remove(row);
}
// 绑定其他店铺(含新导入的店铺)
foreach (ShopLoginInfo shopEntity in shopLst)
{
if (!string.IsNullOrEmpty(shopEntity.ShopId))
BindShop(shopEntity, selectIds);
}
}
private void btnEmpty_Click(object sender, EventArgs e)
{
txtNotes.Text = txtShopId.Text = txtShopName.Text = "";
FiltShop();
}
private void BindShop(ShopLoginInfo shopEntity, List<string> selectShopId = null)
{
if (shopEntity == null)
return;
if (selectShopId == null)
selectShopId = new List<string>();
bool canUse = shopEntity.LoginStatus2 == "国际版在线";
var row = dgvShop.Rows.Cast<DataGridViewRow>().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopId);
if (row == null)
{
int id = this.dgvShop.Rows.Add(
selectShopId.Contains(shopEntity.ShopId) && canUse,
shopEntity.LoginName,
shopEntity.ShopId,
shopEntity.ShopAccount,
shopEntity.Notes,
canUse ? "在线" : "掉线",
canUse,
string.Empty
);
row = dgvShop.Rows[id];
DisplayLoginStatus(row, canUse);
}
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["colCanUse"].Value = canUse;
DisplayLoginStatus(row, canUse);
}
if (soloActivityShop != null && row != null)
{
if (row.Cells["colShopId"].Value.ParseToString() == soloActivityShop.ShopId)
{
row.Visible = true;
row.Cells["colSelect"].Value = row.Cells["colCanUse"].Value;
}
else
{
row.Visible = false;
row.Cells["colSelect"].Value = false;
}
}
}
private void DisplayLoginStatus(DataGridViewRow row, bool canUse)
{
(row.Cells["colLoginStatus"] as DataGridViewLinkCell).Style.ForeColor = canUse ? Color.Green : Color.Red;
(row.Cells["colLoginStatus"] as DataGridViewLinkCell).LinkColor = canUse ? Color.Green : Color.Red;
(row.Cells["colLoginStatus"] as DataGridViewLinkCell).ActiveLinkColor = canUse ? Color.LightGreen : Color.OrangeRed;
(row.Cells["colLoginStatus"] as DataGridViewLinkCell).VisitedLinkColor = canUse ? Color.DarkGreen : Color.DarkRed;
}
private void dgvShop_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0)
return;
string columnName = dgvShop.Columns[e.ColumnIndex].Name;
switch (columnName)
{
case "colSelect":
dgvShop.CellContentClick -= dgvShop_CellContentClick;
dgvShop_CellContentClick(sender, e);
break;
default:
dgvShop.CellContentClick -= dgvShop_CellContentClick;
dgvShop.CellContentClick += dgvShop_CellContentClick;
break;
}
}
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 shopAccount = dgvShop.Rows[e.RowIndex].Cells["colShopName"].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.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("店铺国际版未登录!");
}
break;
case "colLoginStatus":
{
ShopListForm.Instance.CheckShopLogin(new ShopLoginInfo[] { shop }, false);
if (shop.LoginStatus2 == "国际版在线")
{
ShopLoginForm adminLoginForm = new ShopLoginForm(shop);
adminLoginForm.openType = EnumOpenType.manage;
adminLoginForm.WindowState = FormWindowState.Maximized;
adminLoginForm.InitUrl = "https://agentseller.temu.com";
adminLoginForm.Show();
}
else
{
ShopLoginForm shopLoginForm = new ShopLoginForm(shop);
shopLoginForm.openType = EnumOpenType.login;
shopLoginForm.ShowDialog();
FiltShop();
}
}
break;
}
}
private void dgvActivity_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0)
return;
string headerText = dgvActivity.Columns[e.ColumnIndex].HeaderText;
string columnName = dgvActivity.Columns[e.ColumnIndex].Name;
long activityId = dgvActivity.Rows[e.RowIndex].Cells["colActivityThematicId"].Value.ParseToLong();
var activity = lstActivityThematic.FirstOrDefault(s => s.activityThematicId == activityId);
var row = dgvActivity.Rows[e.RowIndex];
switch (columnName)
{
case "colCheckActivity":
row.Cells["colCheckActivity"].Value = !row.Cells["colCheckActivity"].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;
break;
}
}
private void chkFullShop_CheckedChanged(object sender, EventArgs e)
{
if (chkFullShop.Checked)
chkNoSaleProd.Checked = false;
else
chkNoSaleProd.Checked = true;
}
private void chkNoSaleProd_CheckedChanged(object sender, EventArgs e)
{
if (chkNoSaleProd.Checked)
{
chkFullShop.Checked = false;
panel2.Visible = true;
}
else
{
chkFullShop.Checked = true;
panel2.Visible = false;
}
}
private void btnSearchActivity_Click(object sender, EventArgs e)
{
var 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;
}
#region 重置控件
lstActivityThematic.Clear();
dgvActivity.Rows.Clear();
var dgvRows = this.dgvShop.Rows.Cast<DataGridViewRow>();
foreach (var row in dgvRows)
{
row.Cells["colMessage"].Value = "";
}
ucGroupBoxEx2.Enabled = false;
ucGroupBoxEx3.Enabled = false;
cancellationTokenSource = new CancellationTokenSource();
#endregion
Task.Run(() =>
{
lstShopIdSelect.Clear();
lstShopIdSelect.AddRange(lstShopId);
int i = 0;
foreach (var shopId in lstShopIdSelect)
{
if (lstActivityThematic.Count > 0)
break;
this.Invoke(new Action(() =>
{
this.statusBar.lblTaskStatus.Text = "正在查询活动...";
this.statusBar.pgbTaskProgress.Maximum = lstShopIdSelect.Count;
this.statusBar.UpdateProgressBar(i + 1);
i++;
}));
if (cancellationTokenSource.IsCancellationRequested)
break;
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
if (shop == null)
continue;
#region 检测登录
if (!CheckLogin(shop))
continue;
#endregion
Invoke(new Action(() =>
{
var rows = this.dgvShop.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colShopId"].Value.ToString() == shop.ShopId);
foreach (var row in rows)
{
row.Cells["colMessage"].Value = "正在查询";
}
}));
int page = 1;
int totalPage = 1;
bool isError = false;
string errMsg = "";
while (page <= totalPage)
{
if (cancellationTokenSource.IsCancellationRequested)
break;
int tryCount = 0;
tryAgain:
Thread.Sleep(100 + Randomx.GetId(200));
string jsonRst = GetActivityList(shop);
if (jsonRst.Contains("指定的值含有无效的控制字符"))
{
Invoke(new Action(() =>
{
var rows = this.dgvShop.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colShopLoginName"].Value.ToString() == shop.LoginName);
foreach (var row in rows)
{
row.Cells["colMessage"].Value = "店铺掉线";
row.Cells["colLoginStatus"].Value = "掉线";
row.Cells["colCanUse"].Value = false;
DisplayLoginStatus(row, false);
}
}));
errMsg = "店铺可能已掉线,指定的值含有无效的控制字符";
isError = true;
break;
}
if (jsonRst.Contains("当前操作人数太多,请稍后重试") && tryCount < 5)
{
tryCount++;
Thread.Sleep(Randomx.GetId(5000, 7000));
goto tryAgain;
}
if (!jsonRst.Contains("\"success\":true"))
{
isError = true;
string sErr = BaseRegex.GetStringJson(ref jsonRst, "errorMsg");
if (!string.IsNullOrWhiteSpace(sErr) && !errMsg.Contains(sErr))
errMsg += sErr + " ";
page++;
continue;
}
if (jsonRst.Contains("\"success\":true"))
{
var jArr = new JArray();
try
{
var jObj = JObject.Parse(jsonRst);
jArr = jObj["result"]?["activityList"] as JArray;
if (jArr == null)
jArr = new JArray();
foreach (var item in jArr)
{
string sItem = item.ToString();
TemuActivityInfo pActivity = JsonHelper.DeserializeJsonToObject<TemuActivityInfo>(sItem); // 反序列化得到类
//if (pActivity == null || pActivity.activityName != "大促进阶-限时活动")
// continue;
if (pActivity.activityType == 51 || pActivity.activityName == "跨店满减") // 51 跨店满减平台补贴活动直接跳过
continue;
if (pActivity.benefitLabelName.Contains("平台补贴"))
continue;
if (pActivity.activityType == 52)
{
}
if (pActivity.thematicList.Count == 0)
{
pActivity.thematicList.Add(new TemuActivityThematicInfo()
{
activityType = pActivity.activityType, // 一级活动类型
activityTypeName = pActivity.activityName, // 一级活动名称
activityLabelDesc = pActivity.activityLabelDesc,
activityLabelList = new List<TemuActivityLabelInfo>(),
activityLabelTag = pActivity.activityLabelTag,
activityThematicContent = pActivity.activityContent,
activityThematicId = pActivity.activityType,
activityThematicName = pActivity.activityName,
benefitLabelName = pActivity.benefitLabelName,
canEnrollTotal = null,
discount = "",
durationDays = 0,
endTime = pActivity.sessionEndTime,
startTime = pActivity.sessionStartTime,
enrollDeadLine = null,
enrolledCount = null,
enrollSource = null,
enrollStartAt = null,
salePromotionLabel = null,
sites = new List<TemuActivitySiteInfo>(),
});
}
foreach (var pActThematic in pActivity.thematicList)
{
pActThematic.activityType = pActivity.activityType;
pActThematic.activityTypeName = pActivity.activityName;
lstActivityThematic.Add(pActThematic);
string name = pActThematic.activityThematicName;
pActThematic.discount = BaseRegex.GetMatchRegexString(ref name, "(\\d{1,3}(\\.?\\d?)折)").ParseToString();
pActThematic.discount = pActThematic.discount.Replace("折", "").Replace(".","");
pActThematic.discount = string.IsNullOrWhiteSpace(pActThematic.discount) ? "" : pActThematic.discount;
if (pActThematic.discount.Length == 1)
pActThematic.discount += "0"; // 补0
}
}
}
catch (Exception ex) { BaseMsgForm.ShowError(ex.Message); }
int total = BaseRegex.GetStringJson(ref jsonRst, "total").ParseToInt();
totalPage = Math.Ceiling(total / 10.0).ParseToInt();
}
page++;
}
Invoke(new Action(() =>
{
var rows = this.dgvShop.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colShopId"].Value.ToString() == shop.ShopId);
if (!isError)
{
foreach (var row in rows)
{
row.Cells["colMessage"].Value = "已查询";
}
}
else
{
foreach (var row in rows)
{
row.Cells["colMessage"].Value = "查询失败 " + errMsg;
}
}
}));
}
foreach (var actInfo in lstActivityThematic)
{
string sActivityTime = "-";
if (actInfo.startTime.ParseToLong() > 0 && actInfo.endTime.ParseToLong() > 0)
{
sActivityTime = BaseClass.StampToDateTime((int)(actInfo.startTime.ParseToLong() / 1000)).ToString("yyyy/MM/dd HH:mm:ss") + "~" +
BaseClass.StampToDateTime((int)(actInfo.endTime.ParseToLong() / 1000)).ToString("yyyy/MM/dd HH:mm:ss") + "(" +
(actInfo.durationDays > 0 ? actInfo.durationDays + "天" : "长期") + ")";
}
string sActivityRemaining = "-";
TimeSpan timeRemaining = BaseClass.StampToDateTime((int)(actInfo.enrollDeadLine.ParseToLong() / 1000)) - DateTime.Now;
if (timeRemaining.TotalSeconds > 0)
{
if (timeRemaining.Days >= 1)
sActivityRemaining = timeRemaining.Days + "天后截止";
else if (timeRemaining.Hours >= 1)
sActivityRemaining = timeRemaining.Hours + "小时后截止";
else if (timeRemaining.Minutes >= 1)
sActivityRemaining = timeRemaining.Minutes + "分钟后截止";
else
sActivityRemaining = timeRemaining.Seconds + "秒后截止";
}
Invoke(new Action(() =>
{
int rowId = this.dgvActivity.Rows.Add(
false,
actInfo.activityType,
actInfo.activityTypeName,
actInfo.activityThematicId,
actInfo.activityThematicName,
sActivityTime,
sActivityRemaining,
actInfo.discount,
string.IsNullOrEmpty(actInfo.discount)? "-" : actInfo.discount.TrimEnd('0') + "折"
);
dgvActivity.Rows[rowId].Height = 40;
}));
}
//进详情页查询折扣比例信息,因部分活动可能无符合条件商品,查询可能速度较慢
if(chkGetDiscount.Checked)
GetDiscount();
//设置当前快捷选中的活动
ChkSignActivity_CheckedChanged(null, null);
Invoke(new Action(() =>
{
ucGroupBoxEx2.Enabled = true;
ucGroupBoxEx3.Enabled = true;
string sRst = "查询结束!";
if (cancellationTokenSource.IsCancellationRequested)
sRst = "已取消查询!";
BaseMsgForm.ShowInfo(sRst);
this.statusBar.lblTaskStatus.Text = sRst;
}));
}, cancellationTokenSource.Token);
}
// 查询活动折扣
void GetDiscount()
{
foreach (var shopId in lstShopIdSelect)
{
if (cancellationTokenSource.IsCancellationRequested)
break;
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
if (shop == null)
continue;
shop.LastRefreshDate = "";
}
int i = 0;
// 查询所有活动是否有店铺可以报名,可报名的才显示
foreach (var actInfo in lstActivityThematic)
{
this.Invoke(new Action(() =>
{
this.statusBar.lblTaskStatus.Text = "正在查询活动折扣" + (i + 1) + "...";
this.statusBar.pgbTaskProgress.Maximum = lstActivityThematic.Count;
this.statusBar.UpdateProgressBar(i + 1);
i++;
}));
if (cancellationTokenSource.IsCancellationRequested)
break;
if (actInfo == null)
continue;
var actRow = this.dgvActivity.Rows.Cast<DataGridViewRow>()
.FirstOrDefault(r => r.Cells["colActivityThematicId"].Value.ParseToLong() == actInfo.activityThematicId);
if (actRow == null)
continue;
if (!string.IsNullOrWhiteSpace(actInfo.discount))
{
this.Invoke(new Action(() =>
{
actRow.Cells["colActivityMsg"].Value = "折扣查询成功";
}));
continue;
}
this.Invoke(new Action(() =>
{
actRow.Cells["colActivityMsg"].Value = "正在查询折扣...";
}));
foreach (var shopId in lstShopIdSelect)
{
if (cancellationTokenSource.IsCancellationRequested)
break;
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
if (shop == null)
continue;
var shopRow = this.dgvShop.Rows.Cast<DataGridViewRow>()
.FirstOrDefault(r => r.Cells["colShopId"].Value.ParseToString() == shop.ShopId);
if (shopRow == null)
continue;
Invoke(new Action(() =>
{
shopRow.Cells["colMessage"].Value = "查询折扣,活动:" + actInfo.activityThematicName;
}));
#region 检测登录
if (shop.LastRefreshDate == "")
{
if (!CheckLogin(shop))
continue;
}
#endregion
int tryCount = 0;
tryAgain:
Thread.Sleep(100 + Randomx.GetId(200));
string jsonRst = GetActivityMatch(shop, actInfo.activityType, actInfo.activityThematicId);
if (jsonRst.Contains("指定的值含有无效的控制字符") || jsonRst.Contains("login") || jsonRst.Contains("Login"))
{
Invoke(new Action(() =>
{
var shopRows = this.dgvShop.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colShopLoginName"].Value.ToString() == shop.LoginName);
foreach (var r in shopRows)
{
r.Cells["colMessage"].Value = "店铺掉线";
r.Cells["colLoginStatus"].Value = "掉线";
r.Cells["colCanUse"].Value = false;
DisplayLoginStatus(r, false);
}
}));
continue;
}
if ((jsonRst.Contains("当前操作人数太多,请稍后重试") || jsonRst.Contains("too quickly")) && tryCount < 5)
{
tryCount++;
Thread.Sleep(Randomx.GetId(5000, 7000));
goto tryAgain;
}
if (!jsonRst.Contains("\"success\":true"))
{
//isError = true;
//string sErr = BaseRegex.GetStringJson(ref jsonRst, "errorMsg");
//if (!string.IsNullOrWhiteSpace(sErr) && !errMsg.Contains(sErr))
// errMsg += sErr + " ";
//page++;
string sErr = BaseRegex.GetStringJson(ref jsonRst, "errorMsg");
if (string.IsNullOrEmpty(sErr))
sErr = BaseRegex.GetStringJson(ref jsonRst, "error_msg");
if (string.IsNullOrEmpty(sErr))
sErr = jsonRst;
Invoke(new Action(() =>
{
actRow.Cells["colActivityMsg"].Value = sErr;
shopRow.Cells["colMessage"].Value = "";
}));
continue;
}
if (jsonRst.Contains("\"success\":true"))
{
var jArr = new JArray();
try
{
var jObj = JObject.Parse(jsonRst);
jArr = jObj["result"]?["matchList"] as JArray;
if (jArr == null)
jArr = new JArray();
}
catch (Exception ex) { BaseMsgForm.ShowError(ex.Message); }
if (jArr.Count() == 0)
{
Invoke(new Action(() =>
{
shopRow.Cells["colMessage"].Value = "";
}));
continue;
}
try
{
var skuObj = jArr[0]["skcList"][0]["skuList"][0];
var suggestActivityPrice = skuObj["suggestActivityPrice"].ParseToInt();
var dailyPrice = skuObj["dailyPrice"].ParseToInt();
var discount = suggestActivityPrice * 100.0 / dailyPrice;
actInfo.discount = Math.Round(discount) + "";
if (actInfo.discount.Length == 1)
actInfo.discount += "0"; // 补0
Invoke(new Action(() =>
{
actRow.Cells["colDiscountTenth"].Value = actInfo.discount;
actRow.Cells["colDiscount"].Value = string.IsNullOrEmpty(actInfo.discount) ? "-" : actInfo.discount.TrimEnd('0') + "折";
actRow.Cells["colActivityMsg"].Value = "折扣查询成功";
shopRow.Cells["colMessage"].Value = "";
}));
break;
}
catch (Exception ex) { BaseMsgForm.ShowError(ex.Message); }
}
}
if(string.IsNullOrEmpty(actInfo.discount) && !cancellationTokenSource.IsCancellationRequested)
{
this.Invoke(new Action(() =>
{
actRow.Cells["colActivityMsg"].Value = "没有活动可用商品,折扣查询失败";
}));
}
}
}
int GetNearDiscount(int discount)
{
if (lstDiscount.Count <= 0)
return 100;
if (discount < lstDiscount.First())
return lstDiscount.First();
if (discount >= lstDiscount.Last())
return lstDiscount.Last();
for (int i = 0; i < lstDiscount.Count - 1; i++)
{
if (discount >= lstDiscount[i] && discount < lstDiscount[i + 1])
return lstDiscount[i];
}
return lstDiscount.Last();
}
private void btnSignActivity_Click(object sender, EventArgs e)
{
var 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 lstActivityId = dgvActivity.Rows.Cast<DataGridViewRow>().Where(row
=> row.Cells["colCheckActivity"]?.Value.ParseToBool() == true)
.Select(r => r.Cells["colActivityThematicId"]?.Value.ToString()).ToList();
if (lstActivityId.Count == 0)
{
BaseMsgForm.ShowInfo("请选择活动!");
return;
}
#region 重置控件数据
dgvProduct.Rows.Clear();
var shopRows = this.dgvShop.Rows.Cast<DataGridViewRow>();
foreach (var r in shopRows)
{
r.Cells["colMessage"].Value = "";
}
ucGroupBoxEx2.Enabled = false;
ucGroupBoxEx3.Enabled = false;
cancellationTokenSource = new CancellationTokenSource();
lstShopIdSelect.Clear();
lstShopIdSelect.AddRange(lstShopId);
lstActivityThematicIdSelect.Clear();
lstActivityThematicIdSelect.AddRange(lstActivityId);
#endregion
Task.Run(() =>
{
//报名活动
SignActivity();
Invoke(new Action(() =>
{
ucGroupBoxEx2.Enabled = true;
ucGroupBoxEx3.Enabled = true;
string sRst = "已完成活动报名!";
if (cancellationTokenSource.IsCancellationRequested)
sRst = "已取消活动报名!";
BaseMsgForm.ShowInfo(sRst);
this.statusBar.lblTaskStatus.Text = sRst;
}));
},cancellationTokenSource.Token);
}
/// <summary>
/// 查询店铺未出单商品,返回商品id列表
/// </summary>
public List<string> GetNoSaleProd(string shopId)
{
int onSaleDays = 0;
int onSaleDays2 = 9999;
int saleCount = 0;
string days = "7";
//int i = 0;
//foreach (var shopId in lstShopIdSelect)
//{
this.Invoke(new Action(() =>
{
days = cmbDays.Text;
onSaleDays = numOnSaleDays.Value.ParseToInt();
onSaleDays2 = numOnSaleDays2.Value.ParseToInt();
saleCount = numSaleCount.Value.ParseToInt();
this.statusBar.lblTaskStatus.Text = "正在查询无销量商品...";
this.statusBar.pgbTaskProgress.Maximum = lstShopIdSelect.Count;
//this.statusBar.UpdateProgressBar(i + 1);
//i++;
}));
if (cancellationTokenSource.IsCancellationRequested)
return new List<string>();
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
if (shop == null)
return new List<string>();
var shopRow = this.dgvShop.Rows.Cast<DataGridViewRow>()
.FirstOrDefault(r => r.Cells["colShopId"].Value.ParseToString() == shop.ShopId);
if (shopRow == null)
return new List<string>();
if (!CheckLogin(shop))
return new List<string>();
Invoke(new Action(() =>
{
shopRow.Cells["colMessage"].Value = "正在查询无销量商品";
}));
this.dicNoSaleProd[shop.ShopId] = new List<WarehouseProductSubOrderInfo>();
int page = 0;
int totalPage = 1;
while (page < totalPage)
{
page++;
string jsonRst = GetNoSaleProd(shop, days, onSaleDays, onSaleDays2, saleCount, page);
if (!jsonRst.Contains("\"success\":true"))
{
string sErr = BaseRegex.GetStringJson(ref jsonRst, "errorMsg");
if (string.IsNullOrEmpty(sErr))
sErr = BaseRegex.GetStringJson(ref jsonRst, "error_msg");
if (string.IsNullOrEmpty(sErr))
sErr = jsonRst;
Invoke(new Action(() =>
{
shopRow.Cells["colMessage"].Value = sErr;
}));
break;
}
var jArr = new JArray();
try
{
var jObj = JObject.Parse(jsonRst);
jArr = jObj["result"]["subOrderList"] as JArray;
if (jArr == null)
jArr = new JArray();
foreach (var item in jArr)
{
string sItem = item.ToString();
WarehouseProductSubOrderInfo sInfo = JsonHelper.DeserializeJsonToObject<WarehouseProductSubOrderInfo>(sItem); // 反序列化得到类
if (sInfo != null)
{
this.dicNoSaleProd[shop.ShopId].Add(sInfo);
}
}
}
catch (Exception ex)
{
BaseMsgForm.ShowError(ex.Message);
}
int total = BaseRegex.GetStringJson(ref jsonRst, "total").ParseToInt();
totalPage = Math.Ceiling(total / 40.0).ParseToInt();
}
//}
try
{
return this.dicNoSaleProd[shop.ShopId].Select(p => p.productId.ParseToString()).ToList();
}
catch
{
return new List<string>();
}
}
public void SignActivity()
{
int i = 0;
foreach (var shopId in lstShopIdSelect)
{
List<string> noSaleProdIdLst = new List<string>();
if (chkNoSaleProd.Checked)
noSaleProdIdLst.AddRange(GetNoSaleProd(shopId));
this.Invoke(new Action(() =>
{
this.statusBar.lblTaskStatus.Text = "正在报名活动商品...";
this.statusBar.pgbTaskProgress.Maximum = lstShopIdSelect.Count;
this.statusBar.UpdateProgressBar(i + 1);
i++;
}));
if (cancellationTokenSource.IsCancellationRequested)
break;
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
if (shop == null)
continue;
var shopRow = this.dgvShop.Rows.Cast<DataGridViewRow>()
.FirstOrDefault(r => r.Cells["colShopId"].Value.ParseToString() == shop.ShopId);
if (shopRow == null)
continue;
if (!CheckLogin(shop))
continue;
foreach (var activityId in lstActivityThematicIdSelect)
{
var activity = lstActivityThematic.FirstOrDefault(a => a.activityThematicId.ParseToString() == activityId);
if (activity == null)
continue;
var actRow = this.dgvActivity.Rows.Cast<DataGridViewRow>()
.FirstOrDefault(r => r.Cells["colActivityThematicId"].Value.ParseToLong() == activity.activityThematicId);
if (actRow == null)
continue;
int tryCount = 0;
string searchScrollContext = "";
tryAgain:
Thread.Sleep(100 + Randomx.GetId(200));
if (chkNoSaleProd.Checked && noSaleProdIdLst.Count == 0)
{
noSaleProdIdLst.Add("123");
}
if (soloActivityShop != null && soloActivityProduct != null)
{
noSaleProdIdLst.Clear();
noSaleProdIdLst.Add(soloActivityProduct.productId.ToString());
}
var jsonRst = GetActivityMatch(shop, activity.activityType, activity.activityThematicId, searchScrollContext, string.Join(", ", noSaleProdIdLst));
if (jsonRst.Contains("指定的值含有无效的控制字符") || jsonRst.Contains("login") || jsonRst.Contains("Login"))
{
Invoke(new Action(() =>
{
var shopRows = this.dgvShop.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colShopLoginName"].Value.ToString() == shop.LoginName);
foreach (var r in shopRows)
{
r.Cells["colMessage"].Value = "店铺掉线";
r.Cells["colLoginStatus"].Value = "掉线";
r.Cells["colCanUse"].Value = false;
DisplayLoginStatus(r, false);
}
}));
continue;
}
if ((jsonRst.Contains("当前操作人数太多,请稍后重试") || jsonRst.Contains("too quickly")) && tryCount < 5)
{
tryCount++;
Thread.Sleep(Randomx.GetId(5000, 7000));
goto tryAgain;
}
if (!jsonRst.Contains("\"success\":true"))
{
string sErr = BaseRegex.GetStringJson(ref jsonRst, "errorMsg");
if (string.IsNullOrEmpty(sErr))
sErr = BaseRegex.GetStringJson(ref jsonRst, "error_msg");
if (string.IsNullOrEmpty(sErr))
sErr = jsonRst;
Invoke(new Action(() =>
{
actRow.Cells["colActivityMsg"].Value = sErr;
shopRow.Cells["colMessage"].Value = sErr;
}));
continue;
}
var jArr = new JArray();
try
{
var jObj = JObject.Parse(jsonRst);
jArr = jObj["result"]?["matchList"] as JArray;
if (jArr == null)
jArr = new JArray();
}
catch (Exception ex) { BaseMsgForm.ShowError(ex.Message); }
int stillCount = BaseRegex.GetIntJson(ref jsonRst, "stillCount");
this.Invoke(new Action(() =>
{
this.statusBar.lblTaskStatus.Text = "正在报名活动商品... 剩余 " + stillCount + " 件";
}));
searchScrollContext = BaseRegex.GetStringJson(ref jsonRst, "searchScrollContext");
if (jArr.Count() == 0 && stillCount > 0 && tryCount < 5)
{
tryCount++;
goto tryAgain;
}
if (jArr.Count() == 0 && stillCount == 0)
{
if (soloActivityShop != null && soloActivityProduct != null)
{
Invoke(new Action(() =>
{
int rowId = dgvProduct.Rows.Add(
false,
shop.ShopId,
shop.ShopAccount,
activity.activityThematicId,
activity.activityThematicName,
null,//prod.pictureUrl,
"--", //prod.productName,
"--", //prod.productId,
"--", //prod.skcList.FirstOrDefault()?.skcId,
"--", //prod.skcList.FirstOrDefault()?.extCode,
activity.discount.Trim('0') + "折",
"--", //prod.suggestActivityStock,
"--", //prod.targetActivityStock,
activity.discount.Trim('0') + "折",
"--", //inventory
"商品 " + soloActivityProduct.productSkcId + " 不符合报名条件"
);
dgvProduct.Rows[rowId].Height = 30;
}));
}
continue;
}
try
{
string str = JsonHelper.SerializeObject(jArr);
var prodLst = JsonHelper.DeserializeJsonToList<TemuActivityMatchProductInfo>(str);
var prodSubmitRows = new List<DataGridViewRow>();
TemuActivityParam activityParam = new TemuActivityParam();
activityParam.activityType = activity.activityType;
// 相同的是主活动,不需要activityThematicId就可以报名。
if (activity.activityThematicId != activity.activityType)
activityParam.activityThematicId = activity.activityThematicId;
activityParam.productList = new List<ActProductListItem>();
foreach (var prod in prodLst)
{
int discount = this.GetNearDiscount(activity.discount.ParseToInt());
var discountCtrl = this.actDiscount60;
if (discount == 70)
discountCtrl = this.actDiscount70;
if (discount == 80)
discountCtrl = this.actDiscount80;
if (discount == 85)
discountCtrl = this.actDiscount85;
// 如果是默认库存或者库存小于推荐值,使用推荐库存
int inventory = discountCtrl.Inventory;
//if (inventory < prod.suggestActivityStock || discountCtrl.IsDefaultInventory)
// inventory = prod.suggestActivityStock.ParseToInt();
if (inventory < prod.targetActivityStock || discountCtrl.IsDefaultInventory)
inventory = prod.targetActivityStock.ParseToInt();
Invoke(new Action(() =>
{
int rowId = dgvProduct.Rows.Add(
true,
shop.ShopId,
shop.ShopAccount,
activity.activityThematicId,
activity.activityThematicName,
null,//prod.pictureUrl,
prod.productName,
prod.productId,
prod.skcList.FirstOrDefault()?.skcId,
prod.skcList.FirstOrDefault()?.extCode,
activity.discount.Trim('0') + "折",
prod.suggestActivityStock,
prod.targetActivityStock,
activity.discount.Trim('0') + "折",
inventory
);
dgvProduct.Rows[rowId].Height = 30;
// 过低的报名数量则不参与活动
if (!discountCtrl.IsDefaultInventory && chkIfLowCancel.Checked && discountCtrl.Inventory < prod.targetActivityStock)
{
}
else
prodSubmitRows.Add(dgvProduct.Rows[rowId]);
}));
if (!discountCtrl.IsDefaultInventory && chkIfLowCancel.Checked && discountCtrl.Inventory < prod.targetActivityStock)
{
continue;
}
ActProductListItem activityProditem = new ActProductListItem();
activityProditem.productId = prod.productId;
activityProditem.activityStock = inventory;
activityProditem.skcList = new List<ActSkcListItem>();
activityProditem.sessionIds = prod.suggestEnrollSessionIdList;
ActSkcListItem actSkcListItem = new ActSkcListItem();
actSkcListItem.skcId = prod.skcList.FirstOrDefault()?.skcId;
actSkcListItem.skuList = new List<ActSkuListItem>();
foreach (var skuInfo in prod.skcList.FirstOrDefault()?.skuList)
{
actSkcListItem.skuList.Add(new ActSkuListItem
{
activityPrice = skuInfo.suggestActivityPrice,
skuId = skuInfo.skuId,
});
}
activityProditem.skcList.Add(actSkcListItem);
activityParam.productList.Add(activityProditem);
}
string data = JsonHelper.SerializeObject(activityParam);
string submitRst = "";
Thread.Sleep(Randomx.GetId(3000, 6000));
submitRst = SubmitActivity(shop, activityParam.activityType, activityParam.activityThematicId, data);
for (int j = 0; j < 4 && (jsonRst.Contains("当前操作人数太多,请稍后重试") || jsonRst.Contains("too quickly")); j++)
{
Thread.Sleep(Randomx.GetId(6000, 10000));
submitRst = SubmitActivity(shop, activityParam.activityType, activityParam.activityThematicId, data);
}
if (!submitRst.Contains("\"success\":true"))
{
string sSubmitErr = BaseRegex.GetStringJson(ref submitRst, "errorMsg");
if (string.IsNullOrEmpty(sSubmitErr))
sSubmitErr = BaseRegex.GetStringJson(ref submitRst, "error_msg");
if (string.IsNullOrEmpty(sSubmitErr))
sSubmitErr = jsonRst;
Invoke(new Action(() =>
{
foreach(var submitRow in prodSubmitRows)
{
submitRow.Cells["colMsg"].Value = sSubmitErr;
}
}));
continue;
}
Invoke(new Action(() =>
{
foreach (var submitRow in prodSubmitRows)
{
submitRow.Cells["colMsg"].Value = "提交活动成功";
}
}));
// 如果提交成功且还有更多商品可报名,继续重复报名(已报名商品不会出现在搜索结果列表)
if (submitRst.Contains("\"success\":true") && jsonRst.Contains("\"hasMore\":true"))
{
tryCount = 0;
goto tryAgain;
}
}
catch (Exception ex) { BaseMsgForm.ShowError(ex.Message); }
}
}
}
public bool CheckLogin(ShopLoginInfo shop)
{
if (shop.LoginStatus2 != "国际版在线")
{
return false;
}
if (ShopListForm.Instance == null) ShopListForm.Instance = new ShopListForm();
ShopListForm.Instance.CheckShopLogin(new string[] { shop.LoginName }, false);
if (shop.LoginStatus2 != "国际版在线")
{
Invoke(new Action(() =>
{
var rows = this.dgvShop.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colShopLoginName"].Value.ToString() == shop.LoginName);
foreach (var row in rows)
{
row.Cells["colMessage"].Value = "店铺掉线";
row.Cells["colLoginStatus"].Value = "掉线";
row.Cells["colCanUse"].Value = false;
DisplayLoginStatus(row, false);
}
}));
return false;
}
return true;
}
private void btnStop_Click(object sender, EventArgs e)
{
if (cancellationTokenSource != null)
cancellationTokenSource.Cancel();
}
/// <summary>
/// 获取活动列表
/// </summary>
/// <param name="shop"></param>
/// <returns></returns>
private string GetActivityList(ShopLoginInfo shop)
{
string url = "https://agentseller.temu.com/api/kiana/gamblers/marketing/enroll/activity/list";
string body;
body = @"{""needCanEnrollCnt"":true}";
string refere = "https://agentseller.temu.com/activity/marketing-activity";
return HttpResponseBLL.PostResponse2(shop, url, body, refere);
}
/// <summary>
/// 获取符合店铺的活动
/// </summary>
/// <param name="shop"></param>
/// <param name="thematicId"></param>
/// <param name="spuIds">多个用逗号隔开</param>
/// <returns></returns>
private string GetActivityMatch(ShopLoginInfo shop,int? activityType, long? thematicId, string searchScrollContext = "", string spuIds="")
{
string url = "https://agentseller.temu.com/api/kiana/gamblers/marketing/enroll/scroll/match";
string body;
body = "{\"activityType\":" + activityType;
if (thematicId != activityType)
body += ",\"activityThematicId\":" + thematicId;
body += ",\"rowCount\":50";
if (!string.IsNullOrWhiteSpace(searchScrollContext))
body += ",\"searchScrollContext\":\"" + searchScrollContext + "\"";
if (!string.IsNullOrWhiteSpace(spuIds))
body += ",\"productIds\":[" + spuIds + "],\"productSkcExtCodes\":[]";
body += "}";
//if (!string.IsNullOrWhiteSpace(spuIds))
//{
// body = "{\"activityType\":" + activityType;
// if (thematicId != activityType)
// body += ",\"activityThematicId\":" + thematicId;
// body += ",\"rowCount\":50,\"productIds\":[" + spuIds + "],\"productSkcExtCodes\":[]}";
//}
string refere = "https://agentseller.temu.com/activity/marketing-activity/detail-new?type=" + activityType;
if (thematicId != activityType)
refere += "&thematicId=" + thematicId;
return HttpResponseBLL.PostResponse2(shop, url, body, refere);
}
/// <summary>
/// 提交活动报名
/// </summary>
/// <param name="shop"></param>
/// <param name="thematicId"></param>
/// <param name="_body"></param>
/// <returns></returns>
private string SubmitActivity(ShopLoginInfo shop, int? activityType, long? thematicId, string _body)
{
string url = "https://agentseller.temu.com/api/kiana/gamblers/marketing/enroll/submit";
string body;
body = _body;
string refere = "https://agentseller.temu.com/activity/marketing-activity/detail-new?type=" + activityType;
if (thematicId != activityType)
refere += "&thematicId=" + thematicId;
return HttpResponseBLL.PostResponse2(shop, url, body, refere);
}
/// <summary>
///
/// </summary>
/// <param name="shop"></param>
/// <param name="onSalesDays">加入站点天数</param>
/// <param name="page"></param>
/// <returns></returns>
private string GetNoSaleProd(ShopLoginInfo shop, string days, int onSalesDays, int onSalesDays2, int saleCount = 0, int page=1)
{
string url = "https://agentseller.temu.com/mms/venom/api/supplier/sales/management/listWarehouse";
string body;
if (days == "7")
body = @"{""pageNo"":" + page + @",""pageSize"":40,""isLack"":0,""selectStatusList"":[12],""priceAdjustRecentDays"":7,
""sevenDaysSaleVolumMin"":0, ""sevenDaysSaleVolumMax"":" + saleCount + @",""onSalesDurationOfflineGte"":" + onSalesDays + @",""onSalesDurationOfflineLte"":" + onSalesDays2 + "}";
else
body = @"{""pageNo"":" + page + @",""pageSize"":40,""isLack"":0,""selectStatusList"":[12],""priceAdjustRecentDays"":7,
""thirtyDaysSaleVolumMin"":0, ""thirtyDaysSaleVolumMax"":" + saleCount + @",""onSalesDurationOfflineGte"":" + onSalesDays + @",""onSalesDurationOfflineLte"":"+ onSalesDays2 + "}";
string refere = "https://agentseller.temu.com/stock/fully-mgt/sale-manage/main";
return HttpResponseBLL.PostResponse2(shop, url, body, refere);
}
private void MarketingActivityForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.soloActivityProduct != null && this.soloActivityShop != null)
{
this.Visible = false;
// 隐藏窗口但不从任务栏中移除
this.Hide();
// 阻止窗口关闭
e.Cancel = true;
}
}
}
}