Files
KJD_WebService/TEMUKJD/VDianForms/VDianUploadProductForm.cs
T
2026-06-05 13:29:49 +08:00

1450 lines
68 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json;
using NaiBa.Util.Extension;
using System.Threading;
using AllBase;
using Work.CollectClass;
using AllBase.Helper;
using CefSharp.WinForms;
using NaiBa.CefHelper;
using CefSharp;
using AllBase.Model.Result;
using AllBase.Model.Param.VDianManage;
using AllBase.Model.Param.ToolsManage;
using Work.Api;
using TemuKJD.BaseForms;
using TemuKJD.BLL.VDian;
using CefSharp.Handler;
using TemuKJD.Extension;
using LittleCow.Model.Param.WeiDianManage;
using TemuKJD.WXForms.ProductForms;
using TemuKJD.PDDForms.ProductSelectForms;
using TemuKJD.BLL;
using AllBase.Model.Result.PDDResult;
using TemuKJD.VDianForms;
using Work;
namespace KJD.VDianForms
{
public partial class VDianUploadProductForm : BaseForm
{
public NaiBa.Util.ConcurrentList<TemuDBProductSelect> lstTemuDBProductSelect = new NaiBa.Util.ConcurrentList<TemuDBProductSelect>();
/// <summary>
/// 微店上货地址(使用getUa(); js方法获取ua算法)
/// </summary>
public static string vDianUploadUrl = "https://d.weidian.com/weidian-pc/weidian-loader/#/pc-vue-item/item/edit";
//public static string vDianUploadUrl = "https://d.weidian.com/weidian-pc/weidian-loader/#/pc-vue-micro-index/index";
//public static string vDianUploadUrl = "https://d.weidian.com/weidian-pc/pc-vue-item/#/item/edit";
//public static string vDianUploadUrl = "https://d.weidian.com/weidian-pc/pc-vue-item/#/item/listNew";
//public static string vDianUploadUrl = "https://d.weidian.com/weidian-pc/pc-vue-index/index.html";
public static Dictionary<string, string> sShopProductOnSaleCountDic = new Dictionary<string, string>();
public static Dictionary<string, string> sShopProductOffSaleCountDic = new Dictionary<string, string>();
public static Dictionary<string, string> sShopCpsRateDic = new Dictionary<string, string>();
//private WeiDianProductTable weiDianProductTable = new WeiDianProductTable();
//private ProductBLL productBLL = new ProductBLL();
private List<string> lstUpVDianShopId = new List<string>();
decimal addPercent = 30;
decimal addPrice = 10;
int threadCount = 1;
bool isRun = false;
bool isSetCPS = false;
decimal CPSPercent = 10;
/// <summary>
/// 当前正在上货的微店,同一微店同时只能上一件货
/// </summary>
private Dictionary<VDianShopLoginInfo, DateTime> dicCurrentVDian = new Dictionary<VDianShopLoginInfo, DateTime>();
private CheckBox chkSelectAll = null;
List<ChromiumWebBrowser> lstCef = new List<ChromiumWebBrowser>();
List<ChromiumWebBrowser> lstCefUsing = new List<ChromiumWebBrowser>();
int cefId = -1;
int labelClickTimes = 0;
public VDianUploadProductForm()
{
InitializeComponent();
}
#region 窗体事件
private void UploadProductForm_Load(object sender, EventArgs e)
{
chkSelectAll = dgvShop.Columns["colIsUpload"].AddHeaderCheckBox(HorizontalAlignment.Right, 0, 20, null, null, false);
chkSelectAll.Width = 13;
chkSelectAll.Height = 13;
chkSelectAll.CheckedChanged += chkSelectAll_CheckedChanged;
GlobalConfig.WeiDianUploadParam = NaiBa.Util.Helper.ConfigHelper.LoadConfig<WeiDianSettingParam>("vdian_upload_setting_param");
if (GlobalConfig.WeiDianUploadParam == null)
{
GlobalConfig.WeiDianUploadParam = new WeiDianSettingParam
{
AddPercent = "300",
AddPrice = "0",
IsSetCps = false,
CpsPercent = "10",
ThreadCount = "1",
};
}
lstTemuDBProductSelect = NaiBa.Util.Helper.ConfigHelper.LoadConfig<NaiBa.Util.ConcurrentList<TemuDBProductSelect>>("vdian_db_prod_upload_list");
if (lstTemuDBProductSelect == null)
lstTemuDBProductSelect = new NaiBa.Util.ConcurrentList<TemuDBProductSelect>();
LoadThreadCount();
LoadUploadQueue();
RefreshQueueCount();
this.VisibleChanged += UploadProductForm_VisibleChanged;
this.chkCPS.Checked = GlobalConfig.WeiDianUploadParam.IsSetCps;
this.txtCPSRate.Text = GlobalConfig.WeiDianUploadParam.CpsPercent;
this.txtPriceBase.Text = GlobalConfig.WeiDianUploadParam.AddPrice;
this.txtPriceRatio.Text = GlobalConfig.WeiDianUploadParam.AddPercent;
this.cmbThreadCount.SelectedIndexChanged -= cmbThreadCount_SelectedIndexChanged;
try
{
this.cmbThreadCount.SelectedValue = GlobalConfig.WeiDianUploadParam.ThreadCount.ParseToInt();
}
catch
{
}
this.cmbThreadCount.SelectedIndexChanged += cmbThreadCount_SelectedIndexChanged;
Task.Run(() =>
{
VDianShopListForm.GetServerVDian();
BtnRefreshShop_Click(null, null);
});
}
bool init = false;
private void UploadProductForm_VisibleChanged(object sender, EventArgs e)
{
if (Visible == true && !init)
{
init = true;
RefreshShop();
}
}
private void BtnImport_Click(object sender, EventArgs e)
{
WXSelectDBProdListForm.Instance.lstTemuDBProductSelect = this.lstTemuDBProductSelect;
//WXUserProdListForm.Instance.cmbSourceType.Items.Clear();
//WXUserProdListForm.Instance.cmbSourceType.Items.Add("厂商直采");
WXSelectDBProdListForm.Instance.lblRelation.Visible = true;
WXSelectDBProdListForm.Instance.cmbRelation.Visible = true;
WXSelectDBProdListForm.Instance.cmbRelation.Text = "否";
WXSelectDBProdListForm.Instance.SaveComplete -= dbProdList_SaveComplete;
WXSelectDBProdListForm.Instance.SaveComplete += dbProdList_SaveComplete;
WXSelectDBProdListForm.Instance.Show();
WXSelectDBProdListForm.Instance.BringToFront();
}
private void dbProdList_SaveComplete(object obj)
{
NaiBa.Util.Helper.ConfigHelper.SaveConfig("vdian_db_prod_upload_list", this.lstTemuDBProductSelect);
RefreshQueueCount();
}
private void BtnUpload_Click(object sender, EventArgs e)
{
if (lstTemuDBProductSelect.Count == 0)
{
BaseMsgForm.ShowError("上传队列不能为空");
return;
}
if (lstUpVDianShopId.Count == 0)
{
BaseMsgForm.ShowInfo("请选择要上货店铺");
return;
}
try
{
addPercent = Convert.ToDecimal(txtPriceRatio.Text);
addPrice = Convert.ToDecimal(txtPriceBase.Text);
threadCount = this.cmbThreadCount.SelectedValue.ParseToInt();
isSetCPS = chkCPS.Checked;
CPSPercent = Convert.ToDecimal(txtCPSRate.Text);
this.dgvProduct.Columns["colCPSResult"].Visible = isSetCPS;
GlobalConfig.WeiDianUploadParam.CpsPercent = CPSPercent.ToString();
GlobalConfig.WeiDianUploadParam.IsSetCps = isSetCPS;
GlobalConfig.WeiDianUploadParam.AddPercent = addPercent.ToString();
GlobalConfig.WeiDianUploadParam.AddPrice = addPrice.ToString();
GlobalConfig.WeiDianUploadParam.ThreadCount = threadCount.ToString();
NaiBa.Util.Helper.ConfigHelper.SaveConfig("vdian_upload_setting_param", GlobalConfig.WeiDianUploadParam);
}
catch
{
BaseMsgForm.ShowInfo("请输入正确的加价数据或推广金比例");
return;
}
this.btnUpload.Enabled = false;
int i = 0;
int total = lstTemuDBProductSelect.Count;
this.isRun = true;
Task.Run(() =>
{
List<Thread> threadList = new List<Thread>();
while (lstTemuDBProductSelect.Count > 0)
{
// 中断操作
if (!isRun)
break;
i++;
this.Invoke(new Action(() =>
{
this.statusBarUpload.lblTaskStatus.Text = "正在上货...";
this.statusBarUpload.pgbTaskProgress.Value = i;
this.statusBarUpload.pgbTaskProgress.Text = i + "/" + total;
this.statusBarUpload.pgbTaskProgress.Maximum = total;
}));
var pInfo = lstTemuDBProductSelect[0];
lstTemuDBProductSelect.Remove(pInfo);
//weiDianProductTable.Remove(new IdValueTypeEntity { Id = pInfo.ProductId, Type = pInfo.Platform });
Thread thread = new Thread(obj =>
{
try
{
var selectProd = obj as TemuDBProductSelect;
KJDDBProduct dbProd = selectProd.kjdDbProduct;
if (dbProd == null || dbProd.product_json.IsNullOrEmpty())
dbProd = PDDDBProdUploadForm.GetProductDetail(selectProd.out_product_Id.ToString());
DataGridViewRow row = null;
Invoke(new Action(() =>
{
var rowIndex = dgvProduct.Rows.Add(
selectProd?.from_shop_id,
"",
dbProd?.product_get_type_text,
selectProd?.spu_id,
selectProd?.product_name,
dbProd?.price_text,
dbProd?.sale_count,
"", //vDianProduct?.itemId,
"", //vDianProduct?.itemName,
"", //新价
selectProd?.status,
"",
"删除");
row = dgvProduct.Rows[rowIndex];
}));
if (dbProd == null || dbProd.id == 0)
{
if (dbProd?.id == 0)
{
selectProd.status = "已清除";
}
Invoke(new Action(() => { row.Cells["colUploadStatus"].Value = selectProd?.status; }));
return;
}
// 获取该商品是否已建立关联
{
var url = BaseClass.BuildPDDObjString("product/get_relation");
var data = UserLogin.GetSignaturex();
data += "&up_spu_id=" + dbProd?.spu_id;
data += "&index=" + Math.Abs((dbProd?.spu_id).GetHashCode()) % 128;
var result = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(result) || !result.Contains("\"code\":200"))
result = GetHtml.PostUtf8(url, data);
if (!result.Contains("\"data\":[]"))
{
Invoke(new Action(() => { row.Cells["colUploadStatus"].Value = "已存在关联"; }));
return;
}
}
#region 将聚水潭产品数据格式进行转换成pdd格式统一上传,匹配加密的spuCode和skuCoke
if (dbProd.product_get_type_text == "厂商直采" && dbProd.sku_secret_json != null && dbProd.sku_secret_json.Contains("goodsId"))
{
string convertRst = "";
var pProd = new PDDProdFormConverter().JstPddProdToPddConvert(out convertRst, dbProd);
if (!string.IsNullOrEmpty(convertRst))
{
selectProd.status = "未上传";
Invoke(new Action(() => { row.Cells["colUploadStatus"].Value = "商品查询错误 " + convertRst; }));
return;
}
}
#endregion
PDDProductInfo prodInfo = null;
prodInfo = JsonHelper.DeserializeJsonToObject<PDDProductInfo>(dbProd.product_json);
prodInfo.detail.galleries.RemoveAll(g => g.type == 6); // 视频暂时移除,以后再视情况加上
var prod = new ProductMappingImportParam()
{
From = "",
ProductId = selectProd.spu_id.ToString(),
RealProductId = selectProd.spu_id.ToString(),
ProductTitle = selectProd.product_name
};
ProductCollectBase product = new ProductCollectBase();
//if (prodInfo.Platform == (int)ShopPlatform.TaoBao)
//{
// prod.From = "淘宝";
// product = GetTaobaoProduct(prod);
//}
//else if (prodInfo.Platform == (int)ShopPlatform.PinDuoDuo)
//{
// prod.From = "拼多多";
// product = GetPinDuoDuoProduct(prod);
//}
//else if (prodInfo.Platform == (int)ShopPlatform.Alibaba)
//{
// prod.From = "阿里巴巴";
// product = GetAlibabaProduct(prod);
//}
product.out_goods_sn = dbProd.secret_spu_id;
if (string.IsNullOrEmpty(product.out_goods_sn))
product.out_goods_sn = "VD1" + dbProd.spu_id + "A";
product.saleCount = dbProd.sale_count.ParseToInt();
product.addPricePercent = GlobalConfig.WeiDianUploadParam.AddPercent.ParseToDecimal();
product.baseAddPrice = GlobalConfig.WeiDianUploadParam.AddPrice.ParseToDecimal();
product.express_price = 0;
product.name = dbProd.product_name;
product.Images = new List<string>(); // 主图
foreach(var img in prodInfo.detail.galleries.Where(g => g.type == 1).ToList())
{
product.Images.Add(img.url);
}
product.content = ""; // 详情图
foreach (var img in prodInfo.detail.galleries.Where(g => g.type == 2).ToList())
{
product.content += "<img src='" + img.url + "'>";
}
product.Prop = new List<KeyValueBase>(); // 属性
foreach (var propInfo in prodInfo.property.goods_properties)
{
foreach (var valueInfo in propInfo.values)
{
}
product.Prop.Add(new KeyValueBase()
{
Id = propInfo.ref_pid.ParseToString(),
Key = propInfo.name,
Value = string.Join(";", propInfo.values),
});
}
product.Props = new List<PropBase>();
if (prodInfo.detail.sku.Count > 0)
{
var spec1 = prodInfo.detail.sku[0].spec[0];
var pBase1 = new PropBase()
{
id = spec1.parent_id.ParseToLong(),
name = spec1.parent_name,
Values = new List<PropValueBase>(),
};
product.Props.Add(pBase1);
foreach(var sku in prodInfo.detail.sku)
{
if (pBase1.Values.Any(v => v.name == sku.spec[0].spec_name))
continue;
pBase1.Values.Add(new PropValueBase
{
id = sku.spec[0].spec_id.ParseToString(),
name = sku.spec[0].spec_name,
});
}
if (prodInfo.detail.sku[0].spec.Count > 1)
{
var spec2 = prodInfo.detail.sku[0].spec[1];
var pBase2 = new PropBase()
{
id = spec2.parent_id.ParseToLong(),
name = spec2.parent_name,
Values = new List<PropValueBase>(),
};
product.Props.Add(pBase2);
foreach (var sku in prodInfo.detail.sku)
{
if (pBase2.Values.Any(v => v.name == sku.spec[1].spec_name))
continue;
pBase2.Values.Add(new PropValueBase
{
id = sku.spec[1].spec_id.ParseToString(),
name = sku.spec[1].spec_name,
});
}
}
}
product.SkuMaps = new List<SkuMapBase>(); // sku
foreach(var skuInfo in prodInfo.detail.sku)
{
var skuMap = new SkuMapBase()
{
id = skuInfo.id.ParseToLong(),
price = skuInfo.price.ParseToDecimal() * 0.01m,
name = string.Join(";", skuInfo.spec.Select(s => s.spec_name).Take(2).ToList()),
number = skuInfo.quantity.ParseToInt() == 0 ? skuInfo.quantity_delta.ParseToInt() : skuInfo.quantity.ParseToInt(),
pinduoduo_image = skuInfo.thumb_url,
};
if (!product.SkuMaps.Any(s => s.name == skuMap.name))
product.SkuMaps.Add(skuMap);
}
VDianParam.VDianProductBase vDianProduct = null;
if (product != null && !string.IsNullOrEmpty(product.content) && (!string.IsNullOrEmpty(product.image) || product.Images.Count > 0))
{
// 确定待转换商品图片
prod.Image = !string.IsNullOrEmpty(product.image) ? product.image : product.Images[0];
if (prod.Image.StartsWith("https:"))
prod.Image = prod.Image.Substring(6);
else if (prod.Image.StartsWith("http:"))
prod.Image = prod.Image.Substring(5);
// 确定待转换商品标题
if (string.IsNullOrEmpty(prod.ProductTitle))
prod.ProductTitle = product.name;
var pre = txtPrefix.Text.Trim();
if (!string.IsNullOrEmpty(pre))
{
var leg = pre.Length;
if (prod.ProductTitle.Length > 60 - leg)
{
prod.ProductTitle = prod.ProductTitle.Substring(prod.ProductTitle.Length - (60 - leg));
}
prod.ProductTitle = pre + prod.ProductTitle;
}
// 新接口
//vDianProduct = UpLoadProductUseMutliApi(prod, product);
// 开箱小店和威武宝宝接口
//vDianProduct = UpLoadProductUseApi(prod, product);
// 模拟上传
if (vDianProduct == null)
{
Thread.Sleep(5000);
//vDianProduct = UpLoadProductUseApi(prod, product);
prod.MappingResult = "";
vDianProduct = UploadProductSim(prod, product);
if (prod.MappingResult.Contains("过于频繁,商品驳回") && vDianProduct != null)
{
//var shop = GlobalConfig.VDianShopLoginList.FirstOrDefault(s => s.ShopId == vDianProduct.shopId);
var dgvRow = dgvShop.Rows.Cast<DataGridViewRow>().FirstOrDefault(r => r.Cells["colShopId"].Value.ParseToString() == vDianProduct.shopId);
Invoke(new Action(() =>
{
if (dgvRow != null)
{
dgvRow.Cells["colIsUpload"].Value = false;
}
}));
}
}
if (!string.IsNullOrEmpty(prod.MappingResult))
{
prod.MappingResult = prod.MappingResult.Replace("转换失败", "上货失败");
}
}
else
{
if (string.IsNullOrEmpty(prod.MappingResult))
{
if (string.IsNullOrEmpty(product.image) && (product.Images == null || product.Images.Count == 0))
{
prod.MappingResult = "上货失败,未找到商品主图或详情图";
}
else if (string.IsNullOrEmpty(product.content) && !string.IsNullOrEmpty(product.name))
{
prod.MappingResult = "上货失败,未找到上家商品详情";
}
else if (string.IsNullOrEmpty(prod.MappingResult))
{
if (prod.From == "拼多多" || prod.From == "搜款网")
prod.MappingResult = "上货失败,可能不满足上货条件或拼多多Token失效";
else
prod.MappingResult = "上货失败,可能不满足上货条件";
}
}
prod.MappingResult = prod.MappingResult.Replace("转换失败", "上货失败");
}
if (prod.MappingResult.ParseToString().Contains("上货成功"))
{
var url = BaseClass.BuildPDDObjString("product/add_relation");
var data = UserLogin.GetSignaturex();
data += "&up_spu_id=" + dbProd?.spu_id;
data += "&index=" + Math.Abs((dbProd?.spu_id).GetHashCode()) % 128;
data += "&up_goods_name=" + dbProd?.product_name;
data += "&from_site=vd";
data += "&goods_id=" + vDianProduct?.itemId;
data += "&shop_id=" + vDianProduct?.shopId;
data += "&price_max=" + (vDianProduct.sku.Max(wd => wd.price.ParseToDecimal()) * 100).ParseToInt();
data += "&price_min=" + (vDianProduct.sku.Min(wd => wd.price.ParseToDecimal()) * 100).ParseToInt();
var result = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(result) || !result.Contains("\"code\":200"))
result = GetHtml.PostUtf8(url, data);
if (result.Contains("\"code\":200"))
{
prod.MappingResult += ",关联保存成功";
url = BaseClass.BuildPDDObjString("product/mdy_product");
data = UserLogin.GetSignaturex();
data += "&spu_id=" + dbProd?.spu_id;
data += "&is_relation=1";
result = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(result) || !result.Contains("\"code\":200"))
result = GetHtml.PostUtf8(url, data);
}
}
else
{
}
// 显示上货结果
var old_real_price = prodInfo.detail.sku?.Min(s => s.price.ParseToDecimal()) * 0.01m + "-" + prodInfo.detail.sku?.Max(s => s.price.ParseToDecimal()) * 0.01m;
var new_real_price = vDianProduct?.sku?.Min(wd => wd.price.ParseToDecimal()) + "-" + vDianProduct?.sku?.Max(wd => wd.price.ParseToDecimal());
Invoke(new Action(() =>
{
row.Cells["colUploadShopId"].Value = vDianProduct?.shopId;
row.Cells["colProductPlatform"].Value = dbProd?.product_get_type_text;
row.Cells["colProductId"].Value = dbProd?.spu_id;
row.Cells["colProductName"].Value = dbProd?.product_name;
row.Cells["colProductSaleCount"].Value = product?.saleCount;
row.Cells["colProductPrice"].Value = old_real_price;
row.Cells["colProductPriceNew"].Value = new_real_price;
row.Cells["colWeiDianProductId"].Value = vDianProduct?.itemId;
row.Cells["colWeiDianProductName"].Value = vDianProduct?.itemName;
row.Cells["colUploadStatus"].Value = prod?.MappingResult;
row.Cells["colCPSResult"].Value = prod?.CPSResult;
row.Cells["colUploadShop"].Value = vDianProduct?.shopName;
}));
}
catch (Exception ex)
{
}
finally
{
RefreshQueueCount();
NaiBa.Util.Helper.ConfigHelper.SaveConfig("vdian_db_prod_upload_list", this.lstTemuDBProductSelect);
}
});
Thread.Sleep(1500 + Randomx.GetId(1000));
Threadx.ThreadListWait(ref threadList, thread, threadCount, pInfo);
}
Threadx.ThreadListWait(ref threadList);
Invoke(new Action(() =>
{
btnUpload.Enabled = true;
if (isRun)
{
this.statusBarUpload.lblTaskStatus.Text = "上货完毕";
BaseMsgForm.ShowInfo("上货完成!");
}
else
{
this.statusBarUpload.lblTaskStatus.Text = "上货中断";
BaseMsgForm.ShowInfo("上货中断!");
}
isRun = false;
}));
});
}
private ProductCollectBase GetTaobaoProduct(ProductMappingImportParam prod)
{
ProductCollectBase proInfo = new ProductCollectBase
{
from_url = "https://item.taobao.com/item.htm?id=" + prod.RealProductId,
from_id = Convert.ToInt64(prod.RealProductId),
};
TaobaoMobileCollect goodsFromTaobaoInfo = new TaobaoMobileCollect(proInfo);
goodsFromTaobaoInfo.Get();
var product = goodsFromTaobaoInfo.Product;
if (goodsFromTaobaoInfo.IsDown)
prod.MappingResult = "转换失败,可能是商品已下架或商品不存在";
return product;
}
private ProductCollectBase GetPinDuoDuoProduct(ProductMappingImportParam prod)
{
TaobaoProductBase tp = new TaobaoProductBase();
tp.GoodsId = tp.FromId = Convert.ToInt64(prod.RealProductId);
tp.FromType = "拼多多";
PinduoduoProductCollect pinduoduoProductCollect = new PinduoduoProductCollect(Name, tp);
PinduoduoProductCollect.TempIds.Clear();
//PinduoduoProductCollect.ConPddTokenList = GlobalConfig.PinDuoDuoTokenList;
pinduoduoProductCollect.Get();
var product = pinduoduoProductCollect.pb;
// 如果无法获取拼多多商品信息了,提示重连
//if (pinduoduoProductCollect.IsNeedLogin)
prod.MappingResult = "转换失败,需要登录拼多多或登录Token!";
if (pinduoduoProductCollect.IsOnSale == false)
prod.MappingResult = "转换失败,可能是商品下架或商品不存在";
if (pinduoduoProductCollect.IsPresale == true)
prod.MappingResult = "转换失败,预售商品不能上货";
//if (pinduoduoProductCollect.IsResultError)
prod.MappingResult = "转换失败,可能是商品不存在或服务器出错";
return product;
}
private ProductCollectBase GetAlibabaProduct(ProductMappingImportParam prod)
{
ProductCollectBase proInfo = new ProductCollectBase
{
from_url = "https://detail.1688.com/offer/" + prod.RealProductId + ".html",
from_id = Convert.ToInt64(prod.RealProductId),
};
AlibabaProductGet goodsFrom1688Info = new AlibabaProductGet(proInfo);
goodsFrom1688Info.Get();
var product = goodsFrom1688Info.Product;
return product;
}
/// <summary>
/// 服务端获取的随机Api接口上传
/// </summary>
/// <param name="prod"></param>
/// <param name="product"></param>
/// <returns></returns>
private VDianParam.VDianProductBase UpLoadProductUseMutliApi(ProductMappingImportParam prod, ProductCollectBase product)
{
VDianParam.VDianProductBase vDianProduct = null;
var UpShopList = GlobalConfig.VDianShopLoginList.Where(s => lstUpVDianShopId.Contains(s.ShopId)).ToList();
#region 随机api接口 暂时注释
//if (UpShopList.Count > 0 && vDianProduct == null)
//{
// prod.MappingResult = null;
// var simUpShops = GlobalConfig.VDianShopLoginList.Where(v => v.UpGoodAuth == "认证成功").ToList();
// while (simUpShops.Count == 0)
// {
// Thread.Sleep(500);
// simUpShops = GlobalConfig.VDianShopLoginList.Where(v => v.UpGoodAuth == "认证成功").ToList();
// }
// var simVdianShop = simUpShops[Randomx.GetId(simUpShops.Count)];
// var canUpList = UpShopList.Where(v => !dicCurrentVDian.Keys.Contains(v)).ToList();
// while (canUpList.Count == 0)
// {
// Thread.Sleep(500);
// canUpList = UpShopList.Where(v => !dicCurrentVDian.Keys.Contains(v)).ToList();
// }
// var vDianShops = canUpList.Where(s => s.MainAuth == "认证成功").ToList();
// VDianShopLoginInfo vDianShop = null;
// if (vDianShops.Count > 0)
// {
// var id = Randomx.GetId(vDianShops.Count);
// vDianShop = vDianShops[id];
// }
// else
// {
// var id = Randomx.GetId(canUpList.Count);
// vDianShop = canUpList[id];
// }
// while (dicCurrentVDian.Keys.Contains(vDianShop))
// {
// Thread.Sleep(500);
// }
// dicCurrentVDian.Add(vDianShop, DateTime.Now);
// int retryApiTime = 0;
//retryApi:
// try
// {
// ProductMappingForm.GetMultiApiAccesstoken(vDianShop, this);
// if (//vDianShop.MultiAttrApiToken?.AppKey?.PropCountStatus == "ok"
// //&& vDianShop.MultiImgApiToken?.AppKey?.ImgsCountStatus == "ok"
// //&&
// vDianShop.MultiProductApiToken?.AppKey?.GoodsCountStatus == "ok")
// vDianProduct = new MappingVDianMultiApiBLL().ConvertProductToVDian(prod, product, vDianShop, this.addPercent, this.addPrice, true, simVdianShop);
// else
// {
// prod.MappingResult = "转换失败,error,未找到合适的转换接口";
// }
// ProductMappingForm.UpdateMultiApi(vDianShop);
// }
// catch (Exception ex)
// {
// }
// if (prod.MappingResult != null && prod.MappingResult.Contains("无效或已过期") && prod.MappingResult.Contains("access_token:"))
// {
// if (retryApiTime == 0)
// {
// prod.MappingResult = null;
// retryApiTime++;
// goto retryApi;
// }
// }
// if (prod.MappingResult != null && prod.MappingResult.Contains("长时间未登录"))
// {
// prod.MappingResult = prod.MappingResult.Insert(prod.MappingResult.IndexOf("长时间未登录"), vDianShop.ShopName);
// }
// Thread.Sleep(2000 + Randomx.GetId(2000));
// dicCurrentVDian.Remove(vDianShop);
//}
return vDianProduct;
#endregion
}
#region 微店模拟接口
private VDianParam.VDianProductBase UploadProductSim(ProductMappingImportParam prod, ProductCollectBase product)
{
VDianParam.VDianProductBase vDianProduct = null;
//var UpShopList = GlobalConfig.VDianShopLoginList.Where(s => lstUpVDianShopId.Contains(s.ShopId) && s.UpGoodAuth == "认证成功").ToList();
var UpShopList = GlobalConfig.VDianShopLoginList.Where(s => lstUpVDianShopId.Contains(s.ShopId) && s.LoginStatus == 1).ToList();
if (UpShopList.Count > 0 && vDianProduct == null)
{
var canUpList = UpShopList.Where(v => !dicCurrentVDian.Keys.Contains(v)).ToList();
while (canUpList.Count == 0)
{
Thread.Sleep(500);
canUpList = UpShopList.Where(v => !dicCurrentVDian.Keys.Contains(v)).ToList();
}
var vDianShop = canUpList[Randomx.GetId(canUpList.Count)];
while (dicCurrentVDian.Keys.Contains(vDianShop))
{
Thread.Sleep(500);
}
dicCurrentVDian.Add(vDianShop, DateTime.Now);
if (vDianProduct == null &&
(string.IsNullOrEmpty(prod.MappingResult) || prod.MappingResult.Contains("系统错误") || prod.MappingResult.Contains("频次超过上限")
|| prod.MappingResult.Contains("未找到合适的转换接口")))
{
Thread.Sleep(Randomx.GetId(2000, 4000));
vDianProduct = new VDianUpProdMappingBLL().ProductToVDianBySim(prod, product, vDianShop, this.addPercent, this.addPrice, GetVDianUaV2);
}
if (prod.MappingResult != null && prod.MappingResult.Contains("现在人太多了, 请稍后重试"))
{
prod.MappingResult = "调用太多了, 请稍后重试";
for (int i = 0; i < 25; i++)
{
if (!isRun)
break;
Thread.Sleep(1000);
}
}
Thread.Sleep(Randomx.GetId(2500, 4000));
if (vDianProduct != null)
{
prod.MappingResult = "店铺" + vDianShop.ShopName + "上货成功";
// 设置分成推广金
if (isSetCPS)
{
//SetCps(prod, vDianShop, vDianProduct);
}
}
if (vDianProduct == null)
{
vDianProduct = new VDianParam.VDianProductBase();
vDianProduct.shopName = vDianShop?.ShopName;
vDianProduct.shopId = vDianShop?.ShopId;
}
Thread.Sleep(Randomx.GetId(1500, 2500));
dicCurrentVDian.Remove(vDianShop);
dicCurrentVDian.Remove(vDianShop);
}
return vDianProduct;
}
public string GetVDianUa(VDianShopLoginInfo vDianShop)
{
while (lstCef.Count < 3)
{
var browser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false);
browser.KeyboardHandler = new KeyboardHandler();
Invoke(new Action(() =>
{
this.panel1.Controls.Add(browser);
}));
lstCef.Add(browser);
}
var notUseCefList = lstCef.Where(c => !lstCefUsing.Contains(c)).ToList();
while (notUseCefList.Count == 0)
{
Thread.Sleep(Randomx.GetId(250, 750));
notUseCefList = lstCef.Where(c => !lstCefUsing.Contains(c)).ToList();
}
var cefWebBrowser = notUseCefList[Randomx.GetId(notUseCefList.Count)];
while (lstCefUsing.Contains(cefWebBrowser))
{
Thread.Sleep(Randomx.GetId(250, 750));
}
lstCefUsing.Add(cefWebBrowser);
var vDianUa = "";
// 登录cef店铺为模拟上传计算ua值
var cookieManager = cefWebBrowser.RequestContext.GetCookieManager(null);
if (vDianShop != null)
{
var task = CEFBrowser.SetCookieAsync("weidian.com", vDianShop.Cookies, cookieManager);
task.Wait(2000);
Thread.Sleep(500);
}
cefWebBrowser.Load(vDianUploadUrl);
Thread.Sleep(Randomx.GetId(6000, 8000));
var t = cefWebBrowser.GetMainFrame().GetSourceAsync();
t.Wait(5000);
if (t.Result.Contains("进入微店"))
{
// 模拟登录
//ProductMappingVDianLoginForm.InputUserNameAndPassword(cefWebBrowser, vDianShop.Phone, vDianShop.Password);
//ProductMappingVDianLoginForm.ClickLogin(cefWebBrowser);
//ProductMappingVDianLoginForm.SelectShop(cefWebBrowser);
vDianShop.LoginStatus = 2;
Thread.Sleep(2000);
return "店铺掉线";
}
var response = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync("getUa();");
response.Wait(2000);
Thread.Sleep(500 + Randomx.GetId(1000));
vDianUa = response.Result?.Result?.ToString();
if (vDianUa == null)
vDianUa = "";
lstCefUsing.Remove(cefWebBrowser);
return vDianUa;
}
Dictionary<VDianShopLoginInfo, ChromiumWebBrowser> dicShopCef = new Dictionary<VDianShopLoginInfo, ChromiumWebBrowser>();
ChromiumWebBrowser currentCef = null;
public string GetVDianUaV2(VDianShopLoginInfo vDianShop)
{
Thread.Sleep(moreSleep * 1000);
if (!dicShopCef.Keys.Contains(vDianShop))
{
var browser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false);
browser.KeyboardHandler = new KeyboardHandler();
Invoke(new Action(() =>
{
this.panel1.Controls.Add(browser);
}));
dicShopCef[vDianShop] = browser;
}
var cefWebBrowser = dicShopCef[vDianShop];
currentCef = cefWebBrowser;
var vDianUa = "";
// 登录cef店铺为模拟上传计算ua值
var cookieManager = cefWebBrowser.RequestContext.GetCookieManager(null);
if (vDianShop != null)
{
var task = CEFBrowser.SetCookieAsync("weidian.com", vDianShop.Cookies, cookieManager);
task.Wait(2000);
//Thread.Sleep(500);
}
cefWebBrowser.Load(vDianUploadUrl);
Thread.Sleep(Randomx.GetId(6000, 8000));
var t = cefWebBrowser.GetMainFrame().GetSourceAsync();
t.Wait(5000);
//if (t.Result.Contains("进入微店"))
//{
// // 模拟登录
// //ProductMappingVDianLoginForm.InputUserNameAndPassword(cefWebBrowser, vDianShop.Phone, vDianShop.Password);
// //ProductMappingVDianLoginForm.ClickLogin(cefWebBrowser);
// //ProductMappingVDianLoginForm.SelectShop(cefWebBrowser);
// vDianShop.LoginStatus = 2;
// Thread.Sleep(2000);
// return "店铺掉线";
//}
var response = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync("getUa();");
response.Wait(2000);
Thread.Sleep(500 + Randomx.GetId(1000));
vDianUa = response.Result?.Result?.ToString();
if (vDianUa == null)
vDianUa = "";
return vDianUa;
}
#endregion
// api上货暂时注释
private VDianParam.VDianProductBase UpLoadProductUseApi(ProductMappingImportParam prod, ProductCollectBase product)
{
VDianParam.VDianProductBase vDianProduct = null;
//var UpShopList = GlobalConfig.VDianShopLoginList.Where(s => lstUpVDianShopId.Contains(s.ShopId));
//var canUpList = UpShopList.Where(v => !dicCurrentVDian.Keys.Contains(v)).ToList();
//while (canUpList.Count == 0)
//{
// Thread.Sleep(500);
// canUpList = UpShopList.Where(v => !dicCurrentVDian.Keys.Contains(v)).ToList();
//}
//var id = Randomx.GetId(canUpList.Count);
//var vDianShop = canUpList[id];
//// 实时更新微店token的状态
//foreach (var token in vDianShop.LstWdApiToken)
//{
// var newKey = ProductMappingVDianLoginForm.lstVDianAppKey.FirstOrDefault(k => k.AppKey == token.AppKey.AppKey);
// if (newKey != null)
// {
// if (newKey.GoodsCountStatus == "error" && newKey.ImgsCountStatus == "error" && newKey.PropCountStatus == "error")
// newKey.Status = "error";
// token.AppKey = newKey;
// }
//}
//dicCurrentVDian[vDianShop] = DateTime.Now;
//try
//{
// int retryApiTime = 0;
//retryApi:
// vDianProduct = new MappingVDianApiBLL().ConvertProductToVDian(prod, product, vDianShop, addPercent, addPrice, false, vDianShop);
// if (vDianProduct == null && prod.MappingResult != null && !prod.MappingResult.Contains("上限"))
// vDianProduct = new MappingVDianApiBLL().ConvertProductToVDian(prod, product, vDianShop, addPercent, addPrice, false, vDianShop);
// if (vDianProduct != null)
// {
// if (vDianProduct != null && !string.IsNullOrEmpty(vDianProduct.itemId))
// {
// prod.MappingResourceType = "Api";
// // 0上货缓存 1标题缓存 2标题搜索 3接口上货 4接口上货失败 5模拟上货 6微店群控接口上货
// MappingVDianApiBLL.UpDateMappingResultToStatistics("6");
// }
// prod.MappingResult = "店铺" + vDianShop.ShopName + "上货成功";
// // 设置分成推广金
// if (isSetCPS)
// {
// SetCps(prod, vDianShop, vDianProduct);
// }
// }
// if (prod.MappingResult != null && prod.MappingResult.Contains("无效或已过期") && prod.MappingResult.Contains("access_token:"))
// {
// prod.MappingResult = null;
// // 刷新已过期的token
// foreach (var token in vDianShop.LstWdApiToken)
// {
// var sVDianTokenApiUrl = ProductMappingVDianLoginForm.VDianUrl + "?" + BaseClass.ObjUrl + "weidian_token";
// var data = UserLogin.GetSignaturex() + "&act=reflesh_token&shop_id=" + vDianShop.ShopId + "&appkey=" + token.AppKey.AppKey;
// var refreshResult = GetHtml.PostUtf8(sVDianTokenApiUrl, data);
// if (refreshResult.StartsWith("ok,") && refreshResult.Length > 3)
// {
// token.ApiAccessToken = refreshResult.Substring(3);
// token.ApiAuth = "已授权";
// StartUp.SaveVDianShopLogin();
// }
// else
// {
// token.ApiAuth = "已过期";
// StartUp.SaveVDianShopLogin();
// }
// }
// if (!vDianShop.LstWdApiToken.All(t => t.ApiAuth == "已授权"))
// {
// prod.MappingResult = "店铺" + vDianShop.ShopName + "需要重新授权";
// vDianShop.ApiAuth = "未授权";
// }
// else if (retryApiTime == 0)
// {
// retryApiTime++;
// goto retryApi;
// }
// }
// if (prod.MappingResult != null && prod.MappingResult.Contains("长时间未登录"))
// {
// prod.MappingResult = prod.MappingResult.Insert(prod.MappingResult.IndexOf("长时间未登录"), vDianShop.ShopName);
// }
// Thread.Sleep(500 + Randomx.GetId(1000));
//}
//catch (Exception ex)
//{
//}
//dicCurrentVDian.Remove(vDianShop);
return vDianProduct;
}
private void SetCps(ProductMappingImportParam prod, VDianShopLoginInfo vDianShop, VDianParam.VDianProductBase vDianProduct)
{
//var CPSResultCode = new WeiDianProductBLL().UpdateCps(vDianProduct.itemId, vDianShop, this.CPSPercent.ToString());
//if (CPSResultCode.Contains("\"code\":0"))
// prod.CPSResult = "推广金设置成功";
//else if (CPSResultCode.Contains("供应商不存在"))
//{
// prod.CPSResult = "店铺未开通分成推广功能";
// //vDianShop.IsCPSable = "未开通";
//}
//else if (CPSResultCode.Contains("LOGIN ERROR"))
//{
// prod.CPSResult = "店铺未网页登录";
// //vDianShop.IsCPSable = "未登录";
//}
//else
//{
// var failMessage = AllBase.BaseRegex.GetStringJson(ref CPSResultCode, "message");
// if (string.IsNullOrEmpty(failMessage))
// failMessage = CPSResultCode;
// if (string.IsNullOrEmpty(failMessage))
// failMessage = "推广金设置失败";
// prod.CPSResult = failMessage;
// //vDianShop.IsCPSable = "发生错误";
//}
//prod.CPSResult = prod.CPSResult.Replace("CPS", "分成推广");
}
private void BtnClear_Click(object sender, EventArgs e)
{
ClearGood();
}
private void ClearGood()
{
if (BaseMsgForm.ShowConfirm("是否清理备用产品").DialogResult == DialogResult.OK)
{
//DataManageBLL.WeiDianUploadQueueList.Clear();
//weiDianProductTable.RemoveAll();
lstTemuDBProductSelect.Clear();
RefreshQueueCount();
NaiBa.Util.Helper.ConfigHelper.SaveConfig("vdian_db_prod_upload_list", this.lstTemuDBProductSelect);
}
}
private void BtnRefreshShop_Click(object sender, EventArgs e)
{
RefreshShop();
}
private void RefreshShop()
{
// 更新选中的上货店铺Id
lstUpVDianShopId = lstUpVDianShopId.Where(id => GlobalConfig.VDianShopLoginList.Any(s => s.ShopId == id && s.ApiAuth == "已授权")).ToList();
// 获取被删除的店铺
List<DataGridViewRow> dgvRowList = dgvShop.Rows.Cast<DataGridViewRow>().Where(row
=> !GlobalConfig.VDianShopLoginList.Any(s => s.ShopId == row.Cells["colShopId"]?.Value?.ToString())).ToList();
// 更新被删除的店铺列表
foreach (var row in dgvRowList)
{
dgvShop.Rows.Remove(row);
}
// 绑定其他店铺(含新导入的店铺)
foreach (VDianShopLoginInfo shopEntity in GlobalConfig.VDianShopLoginList)
{
BindShop(shopEntity);
}
}
private void BindShop(VDianShopLoginInfo shopEntity)
{
var row = dgvShop.Rows.Cast<DataGridViewRow>().FirstOrDefault(p => p.Cells.GetCellValueFromColumnName("colShopId").ParseToString() == shopEntity.ShopId);
if (row == null)
{
Invoke(new Action(() =>
{
this.dgvShop.Rows.Add(
0,
shopEntity.ShopId,
shopEntity.ShopName,
VDianUploadProductForm.sShopProductOnSaleCountDic.Keys.Contains(shopEntity.ShopId) ? VDianUploadProductForm.sShopProductOnSaleCountDic[shopEntity.ShopId] : "",
shopEntity.ApiAuth == "已授权" ? true : false,
false,
shopEntity.LoginStatus == 1 ? "在线" : "掉线",
string.Empty);
}));
}
else
{
row.Cells["colIsAuthorize"].Value = shopEntity.ApiAuth == "已授权" ? true : false;
row.Cells["colShopName"].Value = shopEntity.ShopName;
row.Cells["colIsUpload"].Value = lstUpVDianShopId.Contains(shopEntity.ShopId);
row.Cells["colProductCount"].Value =
VDianUploadProductForm.sShopProductOnSaleCountDic.Keys.Contains(shopEntity.ShopId) ? VDianUploadProductForm.sShopProductOnSaleCountDic[shopEntity.ShopId] : "";
}
}
private void DgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0)
return;
string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText;
long shopId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToLong();
switch (headerText)
{
case "店铺名称":
//NaiBa.Util.Helper.FileHelper.OpenUrl(string.Format("https://weidian.com/?userid=", shopId));
{
VDianLoginForm.IsRun = true;
var vDian = GlobalConfig.VDianShopLoginList.FirstOrDefault(v => v.ShopId == shopId.ParseToString());
if (vDian != null)
{
VDianLoginForm vDianLoginForm = new VDianLoginForm(vDian, "manage");
//vDianLoginForm.vDianManageUrl = string.Format("https://weidian.com/?userid=", shopId);
vDianLoginForm.WindowState = FormWindowState.Maximized;
vDianLoginForm.ShowDialog();
}
VDianLoginForm.IsRun = false;
}
break;
case "上货":
case "":
//if (dgvShop.Rows[e.RowIndex].Cells["colIsAuthorize"].Value.ParseToBool())
{
dgvShop.Rows[e.RowIndex].Cells["colIsUpload"].Value = !dgvShop.Rows[e.RowIndex].Cells["colIsUpload"].Value.ParseToBool();
if (dgvShop.Rows[e.RowIndex].Cells["colIsUpload"].Value.ParseToBool())
lstUpVDianShopId.Add(shopId.ToString());
else
lstUpVDianShopId.Remove(shopId.ToString());
}
//else
{
//BaseMsgForm.ShowInfo("店铺未授权");
}
break;
}
}
#endregion
#region 私有方法
private void LoadThreadCount()
{
Dictionary<int, int> dict = new Dictionary<int, int>();
dict.Add(1, 1);
dict.Add(2, 2);
dict.Add(3, 3);
dict.Add(5, 5);
dict.Add(8, 8);
dict.Add(10, 10);
dict.Add(15, 15);
dict.Add(20, 20);
//dict.Add(30, 30);
//dict.Add(50, 50);
this.cmbThreadCount.DataSource = new BindingSource(dict, null);
this.cmbThreadCount.DisplayMember = "Value";
this.cmbThreadCount.ValueMember = "Key";
this.cmbThreadCount.SelectedIndex = 7;
}
public void RefreshQueueCount(int addCount = 0)
{
this.Invoke(new Action(() =>
{
this.lblQueueCount.Text = (addCount + lstTemuDBProductSelect.Count).ParseToString() + " 个";
}));
}
private void LoadUploadQueue()
{
//Task.Run(new Action(() =>
//{
// List<IdValueTypeEntity> productQueueList = new WeiDianProductTable().GetList();
// for (int i = 0; i < productQueueList.Count; i++)
// {
// ProductInfo productInfoEntity = JsonConvert.DeserializeObject<ProductInfo>(productQueueList[i].Value);
// DataManageBLL.WeiDianUploadQueueList.Add(productInfoEntity);
// if (i % 5000 == 0)
// {
// RefreshQueueCount();
// }
// }
// RefreshQueueCount();
//}));
}
//private void SaveBatch(List<IdValueTypeEntity> dbList, List<ProductInfo> importList)
//{
// weiDianProductTable.Save(dbList);
// DataManageBLL.WeiDianUploadQueueList.AddRange(importList);
// dbList.Clear();
// importList.Clear();
//}
#endregion
private void cmbThreadCount_SelectedIndexChanged(object sender, EventArgs e)
{
threadCount = this.cmbThreadCount.SelectedValue.ParseToInt();
if (threadCount > 0)
{
GlobalConfig.WeiDianUploadParam.ThreadCount = threadCount.ToString();
NaiBa.Util.Helper.ConfigHelper.SaveConfig("vdian_upload_setting_param", GlobalConfig.WeiDianUploadParam);
}
}
private void dgvProduct_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0)
return;
string headerText = dgvProduct.Columns[e.ColumnIndex].HeaderText;
switch (headerText)
{
case "上家Id":
case "上家标题":
int platform = dgvProduct.Rows[e.RowIndex].Cells["colProductPlatform"].Value.ParseToInt();
long productId = dgvProduct.Rows[e.RowIndex].Cells["colProductId"].Value.ParseToLong();
switch (platform)
{
case (int)ShopPlatform.TaoBao:
//FileHelper.OpenUrl(string.Format(TaoBaoHelper.TaoBaoProductUrl, productId));
break;
case (int)ShopPlatform.PinDuoDuo:
//FileHelper.OpenUrl(string.Format(PinDuoDuoHelper.PinDuoDuoProductUrl, productId));
break;
case (int)ShopPlatform.Alibaba:
//FileHelper.OpenUrl(string.Format(AlibabaHelper.AlibabaProductUrl, productId));
break;
}
break;
case "微店标题":
long vDianProductId = dgvProduct.Rows[e.RowIndex].Cells["colWeiDianProductId"].Value.ParseToLong();
NaiBa.Util.Helper.FileHelper.OpenUrl(string.Format("https://weidian.com/item.html?itemID={0}", vDianProductId));
break;
case "操作":
dgvProduct.Rows.RemoveAt(e.RowIndex);
break;
case "上传店铺":
var shopId = dgvProduct.Rows[e.RowIndex].Cells["colUploadShopId"].Value.ParseToString();
if (!string.IsNullOrEmpty(shopId))
{
var vDian = GlobalConfig.VDianShopLoginList.FirstOrDefault(s => s.ShopId == shopId);
if (vDian != null)
{
VDianLoginForm.IsRun = true;
VDianLoginForm vDianLoginForm = new VDianLoginForm(vDian, "manage");
//vDianLoginForm.vDianManageUrl = string.Format("https://weidian.com/?userid=", shopId);
vDianLoginForm.WindowState = FormWindowState.Maximized;
vDianLoginForm.ShowDialog();
VDianLoginForm.IsRun = false;
}
}
break;
}
}
private void btnStop_Click(object sender, EventArgs e)
{
isRun = false;
}
private void btnClearUpload_Click(object sender, EventArgs e)
{
ClearUpload();
}
void ClearUpload()
{
dgvProduct.Rows.Clear();
}
private void btnGetProductCount_Click(object sender, EventArgs e)
{
GetShopProductCount();
}
void GetShopProductCount()
{
if (lstUpVDianShopId.Count == 0)
{
BaseMsgForm.ShowInfo("请选择要查询的店铺");
return;
}
this.btnGetProductCount.Enabled = false;
foreach (DataGridViewRow row in dgvShop.Rows)
{
row.Cells["colStatus"].Value = "";
}
Task.Run(() =>
{
var shopList = GlobalConfig.VDianShopLoginList.Where(s => s.ApiAuth == "已授权").ToList();
foreach (var vShop in shopList)
{
DataGridViewRow row = null;
Invoke(new Action(() =>
{
row = this.dgvShop.Rows.Cast<DataGridViewRow>().FirstOrDefault(r => r.Cells["colShopId"].Value.ToString() == vShop.ShopId);
if (row != null)
row.Cells["colStatus"].Value = "正在获取店铺商品数量";
}));
// 获取商品总数目
int totalNum = -1;
int page = 1;
string resultText = "";
var result = new WeiDianProductBLL().GetShopProductIds(vShop, page);
Thread.Sleep(1500);
if (!result.Contains("\"status_code\":0"))
result = new WeiDianProductBLL().GetShopProductIds(vShop, page);
if (result.Contains("\"status_code\":0"))
{
totalNum = AllBase.BaseRegex.GetIntJson(ref result, "total_num");
VDianUploadProductForm.sShopProductOnSaleCountDic[vShop.ShopId] = totalNum.ToString();
resultText = "商品数量获取成功";
}
else
{
if (result.Contains("频次超过上限")) // {"status":{"status_code":10005,"status_reason":"用户请求频次超过上限"}}
resultText = "商品数量获取失败,商品获取频次超过上限";
else
{
resultText = BaseRegex.GetMatchRegexString(result, "\"status_reason\":\"([\\s\\S]*?)\"");
if (string.IsNullOrEmpty(resultText))
resultText = result;
resultText = "商品数量获取失败," + resultText;
}
}
Invoke(new Action(() =>
{
if (row != null)
{
row.Cells["colProductCount"].Value = totalNum == -1 ? "" : totalNum.ToString();
row.Cells["colStatus"].Value = resultText;
}
}));
}
Invoke(new Action(() =>
{
btnGetProductCount.Enabled = true;
BaseMsgForm.ShowInfo("商品数量获取完成");
}));
});
}
private void linklblOpen_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
////FileHelper.OpenUrl("https://d.weidian.com/weidian-pc/pc-vue-fx/DistributionConfig.html");
//CPSIntoForm cf = new CPSIntoForm();
//cf.ShowDialog();
}
private void chkSelectAll_CheckedChanged(object sender, EventArgs e)
{
if (!chkSelectAll.Checked)
{
lstUpVDianShopId.Clear();
foreach (DataGridViewRow row in dgvShop.Rows)
{
row.Cells["colIsUpload"].Value = false;
}
}
else
{
lstUpVDianShopId.Clear();
//var list = GlobalConfig.VDianShopLoginList.Where(s => s.ApiAuth == "已授权").Select(ss => ss.ShopId);
//lstUpVDianShopId.AddRange(list);
lstUpVDianShopId.AddRange(GlobalConfig.VDianShopLoginList.Select(ss => ss.ShopId));
foreach (DataGridViewRow row in dgvShop.Rows)
{
if (lstUpVDianShopId.Any(l => l == row.Cells["colShopId"]?.Value?.ToString()))
row.Cells["colIsUpload"].Value = true;
}
}
}
private void labelX4_Click(object sender, EventArgs e)
{
labelClickTimes++;
if (labelClickTimes >= 6)
{
labelClickTimes = 0;
btnShowCef.Visible = true;
}
else
btnShowCef.Visible = false;
// 连续单击6次出现显示网页按钮
Task.Run(() =>
{
Thread.Sleep(5000);
if (labelClickTimes > 0)
{
labelClickTimes = 0;
}
});
}
private void btnShowCef_Click(object sender, EventArgs e)
{
//if (btnShowCef.Text == "显示网页")
//{
// cefId++;
// if (cefId >= lstCef.Count - 1)
// {
// cefId = lstCef.Count - 1;
// btnShowCef.Text = "隐藏网页";
// }
// if (cefId >= 0 && lstCef[cefId] != null)
// lstCef[cefId].BringToFront();
//}
//else
//{
// btnShowCef.Text = "显示网页";
// cefId = -1;
// foreach (var cefWebBrowser in lstCef)
// {
// if (cefWebBrowser != null)
// cefWebBrowser.SendToBack();
// }
//}
if (btnShowCef.Text == "显示网页")
{
btnShowCef.Text = "隐藏网页";
if (currentCef != null)
currentCef.BringToFront();
}
else
{
btnShowCef.Text = "显示网页";
foreach (var cefWebBrowser in dicShopCef.Values)
{
if (cefWebBrowser != null)
cefWebBrowser.SendToBack();
}
}
}
private void btnManageVDian_Click(object sender, EventArgs e)
{
VDianShopListForm vDianShopForm = new VDianShopListForm();
vDianShopForm.ShowDialog();
}
int moreSleep = 10;
private void txtSleep_TextChanged(object sender, EventArgs e)
{
moreSleep = txtSleep.Text.ParseToInt();
}
}
}