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 lstTemuDBProductSelect = new NaiBa.Util.ConcurrentList(); /// /// 微店上货地址(使用getUa(); js方法获取ua算法) /// 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 sShopProductOnSaleCountDic = new Dictionary(); public static Dictionary sShopProductOffSaleCountDic = new Dictionary(); public static Dictionary sShopCpsRateDic = new Dictionary(); //private WeiDianProductTable weiDianProductTable = new WeiDianProductTable(); //private ProductBLL productBLL = new ProductBLL(); private List lstUpVDianShopId = new List(); decimal addPercent = 30; decimal addPrice = 10; int threadCount = 1; bool isRun = false; bool isSetCPS = false; decimal CPSPercent = 10; /// /// 当前正在上货的微店,同一微店同时只能上一件货 /// private Dictionary dicCurrentVDian = new Dictionary(); private CheckBox chkSelectAll = null; List lstCef = new List(); List lstCefUsing = new List(); 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("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>("vdian_db_prod_upload_list"); if (lstTemuDBProductSelect == null) lstTemuDBProductSelect = new NaiBa.Util.ConcurrentList(); 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 threadList = new List(); 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(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(); // 主图 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 += ""; } product.Prop = new List(); // 属性 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(); 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(), }; 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(), }; 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(); // 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().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; } /// /// 服务端获取的随机Api接口上传 /// /// /// /// 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 dicShopCef = new Dictionary(); 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 dgvRowList = dgvShop.Rows.Cast().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().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 dict = new Dictionary(); 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 productQueueList = new WeiDianProductTable().GetList(); // for (int i = 0; i < productQueueList.Count; i++) // { // ProductInfo productInfoEntity = JsonConvert.DeserializeObject(productQueueList[i].Value); // DataManageBLL.WeiDianUploadQueueList.Add(productInfoEntity); // if (i % 5000 == 0) // { // RefreshQueueCount(); // } // } // RefreshQueueCount(); //})); } //private void SaveBatch(List dbList, List 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().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(); } } }