聚水潭sku入库
This commit is contained in:
1 parent
2d35f4b861
commit
ccde645d98
17 files changed
+3090
-209
No files matched your search
+47
-47
@@ -98,6 +98,7 @@ namespace TemuKJD.ToolForms
|
||||
this.cmbMultiCookieName = new DevComponents.DotNetBar.Controls.ComboBoxEx();
|
||||
this.btnMultiLogin = new DevComponents.DotNetBar.PanelEx();
|
||||
this.btnDel = new DevComponents.DotNetBar.PanelEx();
|
||||
this.btnExportCookie = new DevComponents.DotNetBar.PanelEx();
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
this.txtWaitSeconds = new System.Windows.Forms.TextBox();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
@@ -119,7 +120,6 @@ namespace TemuKJD.ToolForms
|
||||
this.txtPageStart = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.btnCollectSupplier = new DevComponents.DotNetBar.PanelEx();
|
||||
this.line1 = new DevComponents.DotNetBar.Controls.Line();
|
||||
this.txtSupplierName = new System.Windows.Forms.TextBox();
|
||||
this.txtFilterSaleCount = new System.Windows.Forms.TextBox();
|
||||
this.btnRefreshCookie = new DevComponents.DotNetBar.PanelEx();
|
||||
@@ -127,7 +127,7 @@ namespace TemuKJD.ToolForms
|
||||
this.btnSaveCookie = new DevComponents.DotNetBar.PanelEx();
|
||||
this.btnImportCookie = new DevComponents.DotNetBar.PanelEx();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.btnExportCookie = new DevComponents.DotNetBar.PanelEx();
|
||||
this.line1 = new DevComponents.DotNetBar.Controls.Line();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
|
||||
this.splitContainer2.Panel1.SuspendLayout();
|
||||
this.splitContainer2.SuspendLayout();
|
||||
@@ -164,7 +164,7 @@ namespace TemuKJD.ToolForms
|
||||
this.splitContainer2.Panel1.Controls.Add(this.btnNext);
|
||||
this.splitContainer2.Panel1.Controls.Add(this.btnPrev);
|
||||
this.splitContainer2.Panel1.Controls.Add(this.txtAddress);
|
||||
this.splitContainer2.Size = new System.Drawing.Size(1390, 435);
|
||||
this.splitContainer2.Size = new System.Drawing.Size(1390, 437);
|
||||
this.splitContainer2.SplitterDistance = 26;
|
||||
this.splitContainer2.TabIndex = 6;
|
||||
//
|
||||
@@ -203,7 +203,7 @@ namespace TemuKJD.ToolForms
|
||||
//
|
||||
this.pbLoading.Anchor = System.Windows.Forms.AnchorStyles.None;
|
||||
this.pbLoading.Image = global::TemuKJD.Properties.Resources.loading_blue;
|
||||
this.pbLoading.Location = new System.Drawing.Point(673, 194);
|
||||
this.pbLoading.Location = new System.Drawing.Point(673, 195);
|
||||
this.pbLoading.Name = "pbLoading";
|
||||
this.pbLoading.Size = new System.Drawing.Size(50, 50);
|
||||
this.pbLoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||
@@ -249,7 +249,7 @@ namespace TemuKJD.ToolForms
|
||||
this.dgvProduct.Name = "dgvProduct";
|
||||
this.dgvProduct.ReadOnly = true;
|
||||
this.dgvProduct.RowTemplate.Height = 23;
|
||||
this.dgvProduct.Size = new System.Drawing.Size(1390, 434);
|
||||
this.dgvProduct.Size = new System.Drawing.Size(1390, 436);
|
||||
this.dgvProduct.TabIndex = 7;
|
||||
this.dgvProduct.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvProduct_CellContentClick);
|
||||
//
|
||||
@@ -406,7 +406,7 @@ namespace TemuKJD.ToolForms
|
||||
this.splitContainer1.Panel2.Controls.Add(this.label2);
|
||||
this.splitContainer1.Panel2.Controls.Add(this.line1);
|
||||
this.splitContainer1.Size = new System.Drawing.Size(1404, 561);
|
||||
this.splitContainer1.SplitterDistance = 471;
|
||||
this.splitContainer1.SplitterDistance = 473;
|
||||
this.splitContainer1.SplitterWidth = 3;
|
||||
this.splitContainer1.TabIndex = 4;
|
||||
//
|
||||
@@ -422,7 +422,7 @@ namespace TemuKJD.ToolForms
|
||||
this.ucTabControlMetro1.Name = "ucTabControlMetro1";
|
||||
this.ucTabControlMetro1.SelectedIndex = 0;
|
||||
this.ucTabControlMetro1.ShowCloseButton = false;
|
||||
this.ucTabControlMetro1.Size = new System.Drawing.Size(1404, 471);
|
||||
this.ucTabControlMetro1.Size = new System.Drawing.Size(1404, 473);
|
||||
this.ucTabControlMetro1.TabIndex = 462;
|
||||
this.ucTabControlMetro1.TabSelectColor = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255)))));
|
||||
this.ucTabControlMetro1.TabSelectTextColor = System.Drawing.Color.Gray;
|
||||
@@ -434,7 +434,7 @@ namespace TemuKJD.ToolForms
|
||||
this.tabPage1.Location = new System.Drawing.Point(4, 26);
|
||||
this.tabPage1.Name = "tabPage1";
|
||||
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabPage1.Size = new System.Drawing.Size(1396, 441);
|
||||
this.tabPage1.Size = new System.Drawing.Size(1396, 443);
|
||||
this.tabPage1.TabIndex = 0;
|
||||
this.tabPage1.Text = "商品页面";
|
||||
this.tabPage1.UseVisualStyleBackColor = true;
|
||||
@@ -446,7 +446,7 @@ namespace TemuKJD.ToolForms
|
||||
this.tabPage2.Location = new System.Drawing.Point(4, 26);
|
||||
this.tabPage2.Name = "tabPage2";
|
||||
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabPage2.Size = new System.Drawing.Size(1396, 440);
|
||||
this.tabPage2.Size = new System.Drawing.Size(1396, 442);
|
||||
this.tabPage2.TabIndex = 1;
|
||||
this.tabPage2.Text = "采集列表";
|
||||
this.tabPage2.UseVisualStyleBackColor = true;
|
||||
@@ -456,7 +456,7 @@ namespace TemuKJD.ToolForms
|
||||
this.tabPage3.Controls.Add(this.splitContainer3);
|
||||
this.tabPage3.Location = new System.Drawing.Point(4, 26);
|
||||
this.tabPage3.Name = "tabPage3";
|
||||
this.tabPage3.Size = new System.Drawing.Size(1396, 440);
|
||||
this.tabPage3.Size = new System.Drawing.Size(1396, 443);
|
||||
this.tabPage3.TabIndex = 2;
|
||||
this.tabPage3.Text = "下架SKU查询";
|
||||
this.tabPage3.UseVisualStyleBackColor = true;
|
||||
@@ -488,7 +488,7 @@ namespace TemuKJD.ToolForms
|
||||
//
|
||||
this.splitContainer3.Panel2.Controls.Add(this.pictureBox1);
|
||||
this.splitContainer3.Panel2.Controls.Add(this.dgvDownSku);
|
||||
this.splitContainer3.Size = new System.Drawing.Size(1396, 440);
|
||||
this.splitContainer3.Size = new System.Drawing.Size(1396, 443);
|
||||
this.splitContainer3.SplitterDistance = 82;
|
||||
this.splitContainer3.TabIndex = 0;
|
||||
//
|
||||
@@ -646,7 +646,7 @@ namespace TemuKJD.ToolForms
|
||||
//
|
||||
this.pictureBox1.Anchor = System.Windows.Forms.AnchorStyles.None;
|
||||
this.pictureBox1.Image = global::TemuKJD.Properties.Resources.loading_blue;
|
||||
this.pictureBox1.Location = new System.Drawing.Point(673, 152);
|
||||
this.pictureBox1.Location = new System.Drawing.Point(673, 153);
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.Size = new System.Drawing.Size(50, 50);
|
||||
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||
@@ -694,7 +694,7 @@ namespace TemuKJD.ToolForms
|
||||
this.dgvDownSku.Name = "dgvDownSku";
|
||||
this.dgvDownSku.ReadOnly = true;
|
||||
this.dgvDownSku.RowTemplate.Height = 23;
|
||||
this.dgvDownSku.Size = new System.Drawing.Size(1396, 354);
|
||||
this.dgvDownSku.Size = new System.Drawing.Size(1396, 357);
|
||||
this.dgvDownSku.TabIndex = 8;
|
||||
//
|
||||
// colDownSelect
|
||||
@@ -885,6 +885,31 @@ namespace TemuKJD.ToolForms
|
||||
this.btnDel.TabIndex = 409;
|
||||
this.btnDel.Text = "删";
|
||||
//
|
||||
// btnExportCookie
|
||||
//
|
||||
this.btnExportCookie.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnExportCookie.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
|
||||
this.btnExportCookie.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnExportCookie.DisabledBackColor = System.Drawing.Color.Empty;
|
||||
this.btnExportCookie.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||
this.btnExportCookie.Location = new System.Drawing.Point(227, 57);
|
||||
this.btnExportCookie.Name = "btnExportCookie";
|
||||
this.btnExportCookie.Size = new System.Drawing.Size(72, 25);
|
||||
this.btnExportCookie.Style.Alignment = System.Drawing.StringAlignment.Center;
|
||||
this.btnExportCookie.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255)))));
|
||||
this.btnExportCookie.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255)))));
|
||||
this.btnExportCookie.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder;
|
||||
this.btnExportCookie.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
|
||||
this.btnExportCookie.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None;
|
||||
this.btnExportCookie.Style.ForeColor.Color = System.Drawing.Color.White;
|
||||
this.btnExportCookie.Style.GradientAngle = 90;
|
||||
this.btnExportCookie.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center;
|
||||
this.btnExportCookie.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255)))));
|
||||
this.btnExportCookie.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255)))));
|
||||
this.btnExportCookie.TabIndex = 1063;
|
||||
this.btnExportCookie.Text = "导出cookie";
|
||||
this.btnExportCookie.Click += new System.EventHandler(this.btnExportCookie_Click);
|
||||
//
|
||||
// label7
|
||||
//
|
||||
this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
@@ -1219,17 +1244,6 @@ namespace TemuKJD.ToolForms
|
||||
this.btnCollectSupplier.Text = "采集供应商";
|
||||
this.btnCollectSupplier.Click += new System.EventHandler(this.btnCollectSupplier_Click);
|
||||
//
|
||||
// line1
|
||||
//
|
||||
this.line1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.line1.ForeColor = System.Drawing.SystemColors.AppWorkspace;
|
||||
this.line1.Location = new System.Drawing.Point(298, 7);
|
||||
this.line1.Name = "line1";
|
||||
this.line1.Size = new System.Drawing.Size(20, 74);
|
||||
this.line1.TabIndex = 790;
|
||||
this.line1.Text = "line1";
|
||||
this.line1.VerticalLine = true;
|
||||
//
|
||||
// txtSupplierName
|
||||
//
|
||||
this.txtSupplierName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
@@ -1346,30 +1360,16 @@ namespace TemuKJD.ToolForms
|
||||
this.label2.TabIndex = 789;
|
||||
this.label2.Text = "供应商";
|
||||
//
|
||||
// btnExportCookie
|
||||
// line1
|
||||
//
|
||||
this.btnExportCookie.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnExportCookie.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
|
||||
this.btnExportCookie.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnExportCookie.DisabledBackColor = System.Drawing.Color.Empty;
|
||||
this.btnExportCookie.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||
this.btnExportCookie.Location = new System.Drawing.Point(227, 57);
|
||||
this.btnExportCookie.Name = "btnExportCookie";
|
||||
this.btnExportCookie.Size = new System.Drawing.Size(72, 25);
|
||||
this.btnExportCookie.Style.Alignment = System.Drawing.StringAlignment.Center;
|
||||
this.btnExportCookie.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255)))));
|
||||
this.btnExportCookie.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255)))));
|
||||
this.btnExportCookie.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder;
|
||||
this.btnExportCookie.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
|
||||
this.btnExportCookie.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None;
|
||||
this.btnExportCookie.Style.ForeColor.Color = System.Drawing.Color.White;
|
||||
this.btnExportCookie.Style.GradientAngle = 90;
|
||||
this.btnExportCookie.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center;
|
||||
this.btnExportCookie.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255)))));
|
||||
this.btnExportCookie.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255)))));
|
||||
this.btnExportCookie.TabIndex = 1063;
|
||||
this.btnExportCookie.Text = "导出cookie";
|
||||
this.btnExportCookie.Click += new System.EventHandler(this.btnExportCookie_Click);
|
||||
this.line1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.line1.ForeColor = System.Drawing.SystemColors.AppWorkspace;
|
||||
this.line1.Location = new System.Drawing.Point(298, 7);
|
||||
this.line1.Name = "line1";
|
||||
this.line1.Size = new System.Drawing.Size(20, 74);
|
||||
this.line1.TabIndex = 790;
|
||||
this.line1.Text = "line1";
|
||||
this.line1.VerticalLine = true;
|
||||
//
|
||||
// GetJuShuitanProdForm
|
||||
//
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,892 @@
|
||||
using AllBase;
|
||||
using AllBase.Model.Result;
|
||||
using AllBase.Model.Result.JST;
|
||||
using AllBase.Model.Result.PDDResult;
|
||||
using CefSharp;
|
||||
using CefSharp.WinForms;
|
||||
using NaiBa.CefHelper;
|
||||
using NaiBa.CefHelper.Handler;
|
||||
using NaiBa.Util;
|
||||
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.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using TemuKJD.BaseForms;
|
||||
using TemuKJD.BLL;
|
||||
using TemuKJD.Extension;
|
||||
using TemuKJD.Helper;
|
||||
using TemuKJD.PDDForms.ProductSelectForms;
|
||||
using TemuKJD.WXForms.ProductForms;
|
||||
using Work;
|
||||
|
||||
namespace TemuKJD.ToolForms
|
||||
{
|
||||
public partial class GetJuShuitanProductSKUListForm : BaseForms.BaseForm
|
||||
{
|
||||
Dictionary<string, string> dicAfterSale = new Dictionary<string, string>();
|
||||
public CancellationTokenSource cancellationTokenSource { get; set; } = null;
|
||||
public CancellationTokenSource CancelReturn { get; set; } = null;
|
||||
string InitUrl = "https://sc.scm121.com/suppliersManage/suppliersList/onlineSuppliers";
|
||||
public ChromiumWebBrowser cefWebBrowser = null;
|
||||
private string currentUrl = "";
|
||||
private string currentGetSupplierListParamData = "";
|
||||
private string currentSupplierName = "";
|
||||
private string appVersion = "";
|
||||
private string currentSupplierId = "";
|
||||
int getDetailWait = 1;
|
||||
int pageStart = 1;
|
||||
int pageEnd = 9999;
|
||||
int filterSaleCountDays = 7;
|
||||
int filterSaleCount = 100;
|
||||
string platformType = "Pinduoduo";
|
||||
string jstPddShopId = "";
|
||||
ConcurrentList<JSTListProductSkuInfo> lstJSTListProductSkuInfo = new ConcurrentList<JSTListProductSkuInfo>();
|
||||
|
||||
public GetJuShuitanProductSKUListForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void GetJuShuitanProdForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
//this.ucTabControlMetro1.TabPages.Remove(tabPage3);
|
||||
|
||||
this.splitContainer1.SplitterDistance = 472;
|
||||
this.dgvProduct.AddSelectorColumn("colCheck");
|
||||
this.dgvProduct.AddImgColumn("colImg", "colImgUrl");
|
||||
|
||||
lstJSTListProductSkuInfo = NaiBa.Util.Helper.ConfigHelper.LoadConfig<ConcurrentList<JSTListProductSkuInfo>>("supplier_product_sku_list_" + MainForm.ProcessCount);
|
||||
if (lstJSTListProductSkuInfo == null)
|
||||
lstJSTListProductSkuInfo = new ConcurrentList<JSTListProductSkuInfo>();
|
||||
|
||||
pbLoading.Visible = true;
|
||||
Task.Run(() =>
|
||||
{
|
||||
int id = 0;
|
||||
foreach (var prod in lstJSTListProductSkuInfo)
|
||||
{
|
||||
id++;
|
||||
if (id % 50 == 0)
|
||||
Thread.Sleep(1);
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
var rowId = this.dgvProduct.Rows.Add(
|
||||
true,
|
||||
prod.coid,
|
||||
prod.supplierName,
|
||||
prod.itemSpuId,
|
||||
prod.itemName,
|
||||
prod.pic.ParseToString().Replace("https://", "http://"),
|
||||
DataGridViewExtension.defaultBitmap,
|
||||
prod.skuId,
|
||||
prod.color + ";" + prod.spec,
|
||||
prod.supplyPrice,
|
||||
prod.stock,
|
||||
"删除",
|
||||
prod.Msg
|
||||
);
|
||||
dgvProduct.Rows[rowId].Height = 60;
|
||||
|
||||
//if (chanceProductResult.dbProduct != null)
|
||||
//{
|
||||
// var dbProd = chanceProductResult.dbProduct;
|
||||
// var row = dgvChanceProduct.Rows[rowId];
|
||||
// row.Cells["colGoodsName"].Value = dbProd.product_name;
|
||||
// row.Cells["colCate"].Value = dbProd.cat_name;
|
||||
// row.Cells["colPrice"].Value = dbProd.price_text;
|
||||
//}
|
||||
}));
|
||||
}
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
pbLoading.Visible = false;
|
||||
}));
|
||||
});
|
||||
|
||||
InitCef();
|
||||
}
|
||||
|
||||
void InitCef()
|
||||
{
|
||||
if (cefWebBrowser == null)
|
||||
{
|
||||
cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(InitUrl, false);
|
||||
|
||||
CustomResourceRequestHandlerLocal resourceRequestHandler = new CustomResourceRequestHandlerLocal();
|
||||
resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete;
|
||||
resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad;
|
||||
cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler);
|
||||
var lifeSapnHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow);
|
||||
cefWebBrowser.LifeSpanHandler = lifeSapnHandler;
|
||||
cefWebBrowser.KeyboardHandler = new KeyboardHandler();
|
||||
cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd;
|
||||
cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged;
|
||||
cefWebBrowser.LoadError += CefWebBrowser_LoadError;
|
||||
cefWebBrowser.Dock = DockStyle.Fill;
|
||||
|
||||
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
splitContainer2.Panel2.Controls.Add(cefWebBrowser);
|
||||
//cefWebBrowser.Load(shopMainUrl);
|
||||
}));
|
||||
}
|
||||
|
||||
Task.Run(() =>
|
||||
{
|
||||
string serverCookie = "";
|
||||
var url = BaseClass.BuildPDDObjString("user/get_scm121_cookie");
|
||||
var data = UserLogin.GetSignaturex();
|
||||
var result = GetHtml.PostUtf8(url, data);
|
||||
if (!result.Contains("\"code\":200"))
|
||||
result = GetHtml.PostUtf8(url, data);
|
||||
|
||||
List<Cookie> cookieLst = new List<Cookie>();
|
||||
try
|
||||
{
|
||||
serverCookie = JsonHelper.SerializeObject(JsonHelper.JObjectParse(result)["cookie"]);
|
||||
cookieLst = JsonHelper.DeserializeJsonToList<CefSharp.Cookie>(serverCookie);
|
||||
if (cookieLst == null)
|
||||
cookieLst = new List<Cookie>();
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// cef138必须init后方可设置或删除cookie
|
||||
while (!cefWebBrowser.IsBrowserInitialized || !cefWebBrowser.GetBrowser().MainFrame.IsValid)
|
||||
Thread.Sleep(20);
|
||||
CEFBrowser.DeleteCookie(cefWebBrowser.GetCookieManager(null));
|
||||
|
||||
//cef 138 如果没有设置RequestContext 可能为空,直接getCookieManager
|
||||
//if (this.openType != EnumOpenType.login)
|
||||
{
|
||||
//var t = CEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), cefWebBrowser.GetCookieManager(null));
|
||||
foreach (var cook in cookieLst)
|
||||
{
|
||||
var t = CEFBrowser.SetCookieAsync(cook.Domain.Trim('.'), cook.Name + "=" + cook.Value + ";", cefWebBrowser.GetCookieManager(null));
|
||||
t.Wait(5000);
|
||||
}
|
||||
}
|
||||
cefWebBrowser.Load(InitUrl);
|
||||
});
|
||||
}
|
||||
private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request)
|
||||
{
|
||||
if (url.Contains("api/goods/buyer/supplier/goods/list"))
|
||||
{
|
||||
if (request.Headers.AllKeys.Contains("App-Version"))
|
||||
appVersion = request.Headers["App-Version"];
|
||||
Task.Run(() => { GetCurrentSupplierSearchData(postData, responseData, request); });
|
||||
}
|
||||
if (url.Contains("https://sc.scm121.com/api/goods/buyer/supplier/goods/skuList"))
|
||||
{
|
||||
if (request.Headers.AllKeys.Contains("App-Version"))
|
||||
appVersion = request.Headers["App-Version"];
|
||||
Task.Run(() => { GetCurrentSupplierSearchSkuData(postData, responseData, request); });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void GetCurrentSupplierSearchData(string postData, string responseData, IRequest request)
|
||||
{
|
||||
currentSupplierId = BaseRegex.GetStringJson(ref postData, "supplierId");
|
||||
currentSupplierName = BaseRegex.GetStringJson(ref responseData, "supplierName");
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
txtSupplierName.Text = currentSupplierName;
|
||||
}));
|
||||
}
|
||||
void GetCurrentSupplierSearchSkuData(string postData, string responseData, IRequest request)
|
||||
{
|
||||
currentGetSupplierListParamData = postData;
|
||||
//currentSupplierId = BaseRegex.GetStringJson(ref postData, "supplierId");
|
||||
//currentSupplierName = BaseRegex.GetStringJson(ref responseData, "supplierName");
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
//txtSupplierName.Text = currentSupplierName;
|
||||
}));
|
||||
}
|
||||
|
||||
private bool RequestHandler_BeforeResourceLoad(object sender, string url, string postData, IRequest request)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e)
|
||||
{
|
||||
if (this.Created && !this.Disposing && !this.IsDisposed)
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
currentUrl = e.Address;
|
||||
txtAddress.Text = e.Address;
|
||||
}));
|
||||
});
|
||||
}
|
||||
}
|
||||
private void CefWebBrowser_LoadError(object sender, CefSharp.LoadErrorEventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
private void btnImportCookie_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!txtCookie.Text.Contains("DISTRYBUTION_TOKEN"))
|
||||
{
|
||||
BaseMsgForm.ShowError("导入的cookie无效,请重新输入");
|
||||
return;
|
||||
}
|
||||
|
||||
Task.Run(() =>
|
||||
{
|
||||
var t = CEFBrowser.SetCookieAsync("scm121.com", txtCookie.Text, cefWebBrowser.GetCookieManager(null));
|
||||
t.Wait(5000);
|
||||
cefWebBrowser.Load(InitUrl);
|
||||
});
|
||||
}
|
||||
|
||||
private void btnSaveCookie_Click(object sender, EventArgs e)
|
||||
{
|
||||
List<Cookie> cookieList = CEFBrowser.GetCookieList(".scm121.com", cefWebBrowser.GetCookieManager(null));
|
||||
|
||||
var url = BaseClass.BuildPDDObjString("user/update_scm121_cookie");
|
||||
var data = UserLogin.GetSignaturex();
|
||||
data += "&cookie=" + GetHtml.UrlEncodeUtf8(JsonHelper.SerializeObject(cookieList));
|
||||
var result = GetHtml.PostUtf8(url, data);
|
||||
if (!result.Contains("\"code\":200"))
|
||||
result = GetHtml.PostUtf8(url, data);
|
||||
|
||||
if (result.Contains("\"code\":200"))
|
||||
BaseMsgForm.ShowInfo("保存成功");
|
||||
else
|
||||
BaseMsgForm.ShowInfo("保存失败,请重试");
|
||||
}
|
||||
|
||||
private void btnRefreshCookie_Click(object sender, EventArgs e)
|
||||
{
|
||||
//var result = GetHtml.PostUtf8("https://api.weixin.qq.com/shop/ec/basics/img/upload?access_token=100_Kn3u6mev0uip-WUPSgxXWHrHldjOP0Ewjw8n18LmGcq2pWbjn4BJukPkGZt0gzgJ1Hd6bRM2TXUDTEhwM7VULSl_P-pVHSVPHlE6ZvdXfD6djB1f2WEibY7jWaZLaD24cBUxLM-mSGxjR7i7IBBeAHDOHH&upload_type=http://img.alicdn.com/imgextra/i2/2215107627344/O1CN01eM6hZu247bV94MWKH_!!2215107627344.jpg&resp_type=1", "");
|
||||
InitCef();
|
||||
}
|
||||
|
||||
private void btnPrev_Click(object sender, EventArgs e)
|
||||
{
|
||||
cefWebBrowser.Back();
|
||||
}
|
||||
|
||||
private void btnNext_Click(object sender, EventArgs e)
|
||||
{
|
||||
cefWebBrowser.Forward();
|
||||
}
|
||||
|
||||
private void txtAddress_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Enter)
|
||||
{
|
||||
if (cefWebBrowser != null)
|
||||
{
|
||||
cefWebBrowser.Load(txtAddress.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void dgvProduct_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||||
{
|
||||
if (e.ColumnIndex < 0 || e.RowIndex < 0)
|
||||
return;
|
||||
string headerText = dgvProduct.Columns[e.ColumnIndex].HeaderText;
|
||||
var skuId = dgvProduct.Rows[e.RowIndex].Cells["colSkuId"].Value.ParseToString();
|
||||
var prodSku = lstJSTListProductSkuInfo.FirstOrDefault(p => p.skuId == skuId);
|
||||
var row = dgvProduct.Rows[e.RowIndex];
|
||||
|
||||
switch (headerText)
|
||||
{
|
||||
case "删除":
|
||||
//if (BaseMsgForm.ShowConfirm("确定删除商品吗?删除后不可恢复!").DialogResult == DialogResult.Cancel)
|
||||
// return;
|
||||
//DeleteProduct(dbId);
|
||||
dgvProduct.Rows.Remove(row);
|
||||
lstJSTListProductSkuInfo.Remove(prodSku);
|
||||
NaiBa.Util.Helper.ConfigHelper.SaveConfig("supplier_product_sku_list_" + MainForm.ProcessCount, lstJSTListProductSkuInfo);
|
||||
break;
|
||||
case "图片":
|
||||
var imgUrl = dgvProduct.Rows[e.RowIndex].Cells["colImgUrl"].Value.ParseToString().Replace("?imageView2/2/w/90/h/90", "");
|
||||
Dictionary<string, string> dic = new Dictionary<string, string>();
|
||||
dic[imgUrl] = imgUrl;
|
||||
ShowImgForm imgFrom = new ShowImgForm(imgUrl, dic);
|
||||
imgFrom.ShowDialog();
|
||||
break;
|
||||
case "":
|
||||
dgvProduct.Rows[e.RowIndex].Cells["colCheck"].Value = !(bool)dgvProduct.Rows[e.RowIndex].Cells["colCheck"].Value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void btnCollectSupplier_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(currentGetSupplierListParamData))
|
||||
{
|
||||
BaseMsgForm.ShowError("请在网页上选择要搜索的供应商商品列表页面");
|
||||
return;
|
||||
}
|
||||
if (dgvProduct.Rows.Count > 0)
|
||||
{
|
||||
if (BaseMsgForm.ShowConfirm("当前列表已有采集数据,是否重新采集?").DialogResult == DialogResult.Cancel)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this.pbLoading.Visible = true;
|
||||
dgvProduct.Rows.Clear();
|
||||
lstJSTListProductSkuInfo.Clear();
|
||||
if (cancellationTokenSource != null && cancellationTokenSource.IsCancellationRequested)
|
||||
cancellationTokenSource.Cancel();
|
||||
cancellationTokenSource = new CancellationTokenSource();
|
||||
Task.Run(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
GetSupplierGoodsSkuList();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
BaseMsgForm.ShowError(ex.Message);
|
||||
}
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
this.pbLoading.Visible = false;
|
||||
//this.statusBar.lblTaskStatus.Text = "正在删除...";
|
||||
}));
|
||||
}, cancellationTokenSource.Token);
|
||||
}
|
||||
|
||||
void GetSupplierGoodsSkuList()
|
||||
{
|
||||
List<Cookie> cookieList = CEFBrowser.GetCookieList(".scm121.com", cefWebBrowser.GetCookieManager(null));
|
||||
var shop = new ShopLoginInfo();
|
||||
shop.Cookies = JsonHelper.SerializeObject(cookieList);
|
||||
|
||||
var Jobj = JsonHelper.JObjectParse(currentGetSupplierListParamData);
|
||||
Jobj["pageSize"] = 300;
|
||||
int page = pageStart;
|
||||
while (page <= pageEnd)
|
||||
{
|
||||
if (cancellationTokenSource.IsCancellationRequested)
|
||||
break;
|
||||
|
||||
if (page % 20 == 19)
|
||||
NaiBa.Util.Helper.ConfigHelper.SaveConfig("supplier_product_sku_list_" + MainForm.ProcessCount, lstJSTListProductSkuInfo);
|
||||
|
||||
Jobj["pageNum"] = page;
|
||||
Jobj["searchType"] = 1;
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
this.statusBar.lblTaskStatus.Text = "正在采集第 " + page + " 页";
|
||||
}));
|
||||
Thread.Sleep(Randomx.GetId(1000, 2000));
|
||||
page++;
|
||||
|
||||
var lstRst = GetSkuLst(shop, Jobj, currentSupplierId);
|
||||
if (!lstRst.Contains("\"success\":true"))
|
||||
{
|
||||
var errMsg = BaseRegex.GetStringJson(ref lstRst, "message");
|
||||
if (string.IsNullOrEmpty(errMsg))
|
||||
errMsg = lstRst;
|
||||
BaseMsgForm.ShowError("查询错误:" + errMsg);
|
||||
return;
|
||||
}
|
||||
|
||||
List<JSTListProductSkuInfo> jstLst = new List<JSTListProductSkuInfo>();
|
||||
try
|
||||
{
|
||||
foreach (var jItem in JsonHelper.JObjectParse(lstRst)["data"])
|
||||
{
|
||||
JSTListProductSkuInfo jstProd = JsonHelper.DeserializeJsonToObject<JSTListProductSkuInfo>(JsonHelper.SerializeObject(jItem));
|
||||
jstLst.Add(jstProd);
|
||||
}
|
||||
if (jstLst.Count <= 0)
|
||||
break;
|
||||
|
||||
lstJSTListProductSkuInfo.AddRange(jstLst);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
this.statusBar.lblTaskStatus.Text = "发生错误 " + ex.Message;
|
||||
}));
|
||||
Thread.Sleep(2000);
|
||||
}
|
||||
|
||||
JObject JObjGetSupplierPrice = new JObject();
|
||||
JObjGetSupplierPrice["supplierCoId"] = Jobj["supplierCoId"].ParseToString();
|
||||
JObjGetSupplierPrice["idAndItemCodeVos"] = new JArray();
|
||||
foreach (var prodSku in jstLst)
|
||||
{
|
||||
var JObjSku = new JObject();
|
||||
JObjSku["itemCode"] = prodSku.itemCode;
|
||||
JObjSku["skuId"] = prodSku.skuId;
|
||||
(JObjGetSupplierPrice["idAndItemCodeVos"] as JArray).Add(JObjSku);
|
||||
}
|
||||
var lstRst2 = GetSkuPriceLst(shop, JObjGetSupplierPrice, currentSupplierId);
|
||||
if (!lstRst2.Contains("\"success\":true"))
|
||||
{
|
||||
var errMsg = BaseRegex.GetStringJson(ref lstRst2, "message");
|
||||
if (string.IsNullOrEmpty(errMsg))
|
||||
errMsg = lstRst2;
|
||||
BaseMsgForm.ShowError("查询错误:" + errMsg);
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
JArray skuArr = JsonHelper.JObjectParse(lstRst2)["data"] as JArray;
|
||||
foreach (var skuObj in skuArr)
|
||||
{
|
||||
var sku = jstLst.FirstOrDefault(s => s.skuId == skuObj["skuId"].ParseToString());
|
||||
if (sku != null)
|
||||
{
|
||||
sku.supplyPrice = skuObj["supplyPrice"].ParseToDecimal();
|
||||
sku.stock = skuObj["stock"].ParseToInt();
|
||||
sku.weight = skuObj["weight"].ParseToDecimal();
|
||||
sku.stockTime = skuObj["stockTime"].ParseToString().ParseToDateTime();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
this.statusBar.lblTaskStatus.Text = "发生错误 " + ex.Message;
|
||||
}));
|
||||
Thread.Sleep(2000);
|
||||
}
|
||||
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
foreach (var prodSku in jstLst)
|
||||
{
|
||||
prodSku.coid = Jobj["supplierCoId"].ParseToString();
|
||||
prodSku.supplierName = currentSupplierName;
|
||||
prodSku.supplierId = currentSupplierId;
|
||||
var id = dgvProduct.Rows.Add(
|
||||
true,
|
||||
prodSku.coid,
|
||||
prodSku.supplierName,
|
||||
prodSku.itemSpuId,
|
||||
prodSku.itemName,
|
||||
prodSku.pic.ParseToString().Replace("https://", "http://"),
|
||||
DataGridViewExtension.defaultBitmap,
|
||||
prodSku.skuId,
|
||||
prodSku.color + ";" + prodSku.spec,
|
||||
prodSku.supplyPrice,
|
||||
prodSku.stock,
|
||||
"删除",
|
||||
prodSku.Msg
|
||||
);
|
||||
dgvProduct.Rows[id].Height = 60;
|
||||
|
||||
}
|
||||
}));
|
||||
}
|
||||
NaiBa.Util.Helper.ConfigHelper.SaveConfig("supplier_product_sku_list_" + MainForm.ProcessCount, lstJSTListProductSkuInfo);
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
BaseMsgForm.ShowInfo("采集完成");
|
||||
}));
|
||||
}
|
||||
|
||||
private void txtPageStart_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
pageStart = txtPageStart.Text.Trim().ParseToInt();
|
||||
}
|
||||
|
||||
private void txtPageEnd_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
pageEnd = txtPageEnd.Text.Trim().ParseToInt();
|
||||
}
|
||||
|
||||
private void btnStopStop_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (cancellationTokenSource != null)
|
||||
cancellationTokenSource.Cancel();
|
||||
Task.Run(() =>
|
||||
{
|
||||
Thread.Sleep(3000);
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
if (cancellationTokenSource == null || cancellationTokenSource.IsCancellationRequested)
|
||||
pbLoading.Visible = false;
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
private void btnSaveDb_Click(object sender, EventArgs e)
|
||||
{
|
||||
//"&product_get_type=" + HttpUtility.UrlEncode("厂商直采", Encoding.UTF8);
|
||||
List<Cookie> cookieList = CEFBrowser.GetCookieList(".scm121.com", cefWebBrowser.GetCookieManager(null));
|
||||
var shop = new ShopLoginInfo();
|
||||
shop.Cookies = JsonHelper.SerializeObject(cookieList);
|
||||
|
||||
List<DataGridViewRow> rowLst = new List<DataGridViewRow>();
|
||||
rowLst.AddRange(dgvProduct.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["colCheck"].Value.ParseToBool() == true));
|
||||
|
||||
if (cancellationTokenSource != null && cancellationTokenSource.IsCancellationRequested)
|
||||
cancellationTokenSource.Cancel();
|
||||
cancellationTokenSource = new CancellationTokenSource();
|
||||
|
||||
this.pbLoading.Visible = true;
|
||||
var t = Task.Run(() =>
|
||||
{
|
||||
int success = 0;
|
||||
int total = rowLst.Count;
|
||||
foreach (var row in rowLst)
|
||||
{
|
||||
if (cancellationTokenSource.IsCancellationRequested)
|
||||
break;
|
||||
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
row.Cells["colMsg"].Value = "";
|
||||
}));
|
||||
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
this.statusBar.lblTaskStatus.Text = "正在入库表格第 " + (row.Index + 1) + " 行数据 成功 " + success + " 条";
|
||||
}));
|
||||
|
||||
var skuId = row.Cells["colSkuId"].Value.ParseToString();
|
||||
var prodSku = lstJSTListProductSkuInfo.FirstOrDefault(c => c.skuId == skuId);
|
||||
if (prodSku == null)
|
||||
continue;
|
||||
|
||||
if (!chkOverride.Checked && !prodSku.Msg.IsNullOrEmpty())
|
||||
{
|
||||
if (prodSku.Msg.Contains("已存在相同SkuId,跳过") || prodSku.Msg.Contains("商品Sku覆盖成功") || prodSku.Msg.Contains("商品Sku入库成功"))
|
||||
{
|
||||
//已存在相同SkuId,跳过
|
||||
//商品Sku覆盖成功!
|
||||
//商品Sku入库成功!
|
||||
prodSku.Msg = "已存在相同SkuId,跳过";
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
row.Cells["colMsg"].Value = prodSku.Msg;
|
||||
}));
|
||||
success++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
Thread.Sleep(25);
|
||||
if (row.Index % 20 == 0)
|
||||
NaiBa.Util.Helper.ConfigHelper.SaveConfig("supplier_product_sku_list_" + MainForm.ProcessCount, lstJSTListProductSkuInfo);
|
||||
|
||||
bool isExist = false;
|
||||
var existUrl = BaseClass.BuildPDDObjString("product/get_jst_sku_list");
|
||||
string existData = UserLogin.GetSignaturex() + "&search_skuId=" + prodSku.skuId;
|
||||
string html = GetHtml.PostUtf8(existUrl, existData);
|
||||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||||
html = GetHtml.PostUtf8(existUrl, existData);
|
||||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||||
{
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
row.Cells["colMsg"].Value = "入库失败,产品数据库连接失败";
|
||||
}));
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (html.Contains("\"data\":[") && !html.Contains("\"data\":[]"))
|
||||
isExist = true;
|
||||
}
|
||||
|
||||
//var SetPartnerSpuRst = "";
|
||||
var url = BaseClass.BuildPDDObjString("product/add_jst_sku");
|
||||
if (isExist)
|
||||
{
|
||||
if (chkOverride.Checked)
|
||||
{
|
||||
url = BaseClass.BuildPDDObjString("product/mdy_jst_sku");
|
||||
}
|
||||
else
|
||||
{
|
||||
//入库成功 已存在相同id商品
|
||||
prodSku.Msg = "已存在相同SkuId,跳过";
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
row.Cells["colMsg"].Value = prodSku.Msg;
|
||||
}));
|
||||
success++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
var data = Work.UserLogin.GetSignaturex() +
|
||||
"&coid=" + prodSku.coid +
|
||||
"&supplierId=" + prodSku.supplierId +
|
||||
"&supplierName=" + prodSku.supplierName +
|
||||
"&skuId=" + prodSku.skuId +
|
||||
"&itemSpuId=" + prodSku.itemSpuId +
|
||||
"&pic=" + prodSku.pic +
|
||||
"&itemName=" + HttpUtility.UrlEncode(prodSku.itemName, Encoding.UTF8) +
|
||||
"&styleCode=" + prodSku.styleCode +
|
||||
"&itemCode=" + prodSku.itemCode +
|
||||
"&color=" + HttpUtility.UrlEncode(prodSku.color, Encoding.UTF8) +
|
||||
"&spec=" + HttpUtility.UrlEncode(prodSku.spec, Encoding.UTF8) +
|
||||
"&salePrice=" + prodSku.salePrice +
|
||||
"&supplyPrice=" + prodSku.supplyPrice +
|
||||
"&stock=" + prodSku.stock +
|
||||
"&stockTime=" + prodSku.stockTime.ToString("yyyy-MM-dd HH:mm:ss") +
|
||||
"&weight=" + prodSku.weight;
|
||||
|
||||
html = GetHtml.PostUtf8(url, data);
|
||||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||||
html = GetHtml.PostUtf8(url, data);
|
||||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||||
{
|
||||
string msg = "商品Sku入库失败!请检查网络连接:" + BaseRegex.GetStringJson(ref html, "msg");
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
row.Cells["colMsg"].Value = msg;
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
success++;
|
||||
prodSku.Msg = "商品Sku入库成功!";
|
||||
if (url == BaseClass.BuildPDDObjString("product/mdy_jst_sku"))
|
||||
prodSku.Msg = "商品Sku覆盖成功!";
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
row.Cells["colMsg"].Value = prodSku.Msg;
|
||||
}));
|
||||
}
|
||||
}
|
||||
NaiBa.Util.Helper.ConfigHelper.SaveConfig("supplier_product_sku_list_" + MainForm.ProcessCount, lstJSTListProductSkuInfo);
|
||||
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
this.pbLoading.Visible = false;
|
||||
BaseMsgForm.ShowInfo("商品入库完毕!");
|
||||
}));
|
||||
}, cancellationTokenSource.Token);
|
||||
}
|
||||
|
||||
|
||||
public string GetGoodsLst(ShopLoginInfo shop, JObject searchDataObj)
|
||||
{
|
||||
string url = "https://sc.scm121.com/api/goods/buyer/supplier/goods/list";
|
||||
string referer = "https://sc.scm121.com/manage/goods/qualitySupplier/detail/" + searchDataObj["supplierId"] + "?showErpList=1";
|
||||
var lstRst = JSTHttpResponseBLL.JSTPostResponse(shop, url, JsonHelper.SerializeObject(searchDataObj), referer, appVersion);
|
||||
for (int i = 0; i < 3 && !lstRst.Contains("\"success\":true"); i++)
|
||||
{
|
||||
Thread.Sleep(Randomx.GetId(1000, 2000));
|
||||
lstRst = JSTHttpResponseBLL.JSTPostResponse(shop, url, JsonHelper.SerializeObject(searchDataObj), referer, appVersion);
|
||||
}
|
||||
return lstRst;
|
||||
}
|
||||
|
||||
public string GetSkuLst(ShopLoginInfo shop, JObject searchDataObj, string supplierId)
|
||||
{
|
||||
string url = "https://sc.scm121.com/api/goods/buyer/supplier/goods/skuList";
|
||||
string referer = "https://sc.scm121.com/manage/goods/qualitySupplier/detail/" + supplierId + "?showErpList=1";
|
||||
var lstRst = JSTHttpResponseBLL.JSTPostResponse(shop, url, JsonHelper.SerializeObject(searchDataObj), referer, appVersion);
|
||||
for (int i = 0; i < 3 && !lstRst.Contains("\"success\":true"); i++)
|
||||
{
|
||||
Thread.Sleep(Randomx.GetId(1000, 2000));
|
||||
lstRst = JSTHttpResponseBLL.JSTPostResponse(shop, url, JsonHelper.SerializeObject(searchDataObj), referer, appVersion);
|
||||
}
|
||||
return lstRst;
|
||||
}
|
||||
|
||||
public string GetSkuPriceLst(ShopLoginInfo shop, JObject searchDataObj, string supplierId)
|
||||
{
|
||||
string url = "https://sc.scm121.com/api/goods/buyer/supplier/asyncQuerySkuAdditional";
|
||||
string referer = "https://sc.scm121.com/manage/goods/qualitySupplier/detail/" + supplierId + "?showErpList=1";
|
||||
var lstRst = JSTHttpResponseBLL.JSTPostResponse(shop, url, JsonHelper.SerializeObject(searchDataObj), referer, appVersion);
|
||||
for (int i = 0; i < 3 && !lstRst.Contains("\"success\":true"); i++)
|
||||
{
|
||||
Thread.Sleep(Randomx.GetId(1000, 2000));
|
||||
lstRst = JSTHttpResponseBLL.JSTPostResponse(shop, url, JsonHelper.SerializeObject(searchDataObj), referer, appVersion);
|
||||
}
|
||||
return lstRst;
|
||||
}
|
||||
|
||||
public string GetHotLst(ShopLoginInfo shop, JObject searchDataObj)
|
||||
{
|
||||
string url = "https://sc.ttdahuo.com/api/goods/freshman/mall/goods/list";
|
||||
string referer = "https://sc.ttdahuo.com/findCooperation/newlywedZone";
|
||||
var lstRst = JSTHttpResponseBLL.JSTPostResponse(shop, url, JsonHelper.SerializeObject(searchDataObj), referer, appVersion);
|
||||
for (int i = 0; i < 3 && !lstRst.Contains("\"success\":true"); i++)
|
||||
{
|
||||
Thread.Sleep(Randomx.GetId(1000, 2000));
|
||||
lstRst = JSTHttpResponseBLL.JSTPostResponse(shop, url, JsonHelper.SerializeObject(searchDataObj), referer, appVersion);
|
||||
}
|
||||
return lstRst;
|
||||
}
|
||||
|
||||
public string GetPddBaseData(ShopLoginInfo shop, JSTListProductInfo jstLstProd)
|
||||
{
|
||||
string url = "https://sc.scm121.com/api/goods/goods/goGoodsPdd/queryBaseData?itemSpuId=" + jstLstProd.itemSpuId + "&shelvesType=DISTRIBUTION&originator=SUPPLIER&itemCoId=" + jstLstProd.itemCoId;
|
||||
string referer = "https://sc.scm121.com/manage/goods/qualitySupplier/detail/" + jstLstProd.supplierId + "?showErpList=1";
|
||||
var getDetailRst = JSTHttpResponseBLL.JSTGetResponse(shop, url, referer, appVersion);
|
||||
for (int i = 0; i< 3 && !getDetailRst.Contains("\"success\":true"); i++)
|
||||
{
|
||||
Thread.Sleep(Randomx.GetId(1000, 2000));
|
||||
getDetailRst = JSTHttpResponseBLL.JSTGetResponse(shop, url, referer, appVersion);
|
||||
}
|
||||
return getDetailRst;
|
||||
}
|
||||
|
||||
public string GetGoodsDetail(ShopLoginInfo shop, JSTListProductInfo jstLstProd)
|
||||
{
|
||||
string url = "https://sc.scm121.com/api/goods/goods/queryGoodsDetail";
|
||||
string referer = "https://sc.scm121.com/manage/goods/qualitySupplier/goodsDetail/" + jstLstProd.itemSpuId + "?itemCoId=" + jstLstProd.itemCoId + "&noBack=true";
|
||||
//data = @"{""itemSpuId"":""0A3A5CC4F524430A9F3D7640BD0D3029"",""itemCoId"":""11596521""}";
|
||||
string data = @"{""itemSpuId"":""" + jstLstProd.itemSpuId + @""",""itemCoId"":""" + jstLstProd.itemCoId + @"""}";
|
||||
|
||||
var detailRst = "";
|
||||
for (int i = 0; i < 3 && !detailRst.Contains("\"success\":true"); i++)
|
||||
{
|
||||
Thread.Sleep(Randomx.GetId(1000, 2000));
|
||||
detailRst = JSTHttpResponseBLL.JSTPostResponse(shop, url, data, referer, appVersion);
|
||||
}
|
||||
return detailRst;
|
||||
}
|
||||
|
||||
public string GetItemSpuInfo(ShopLoginInfo shop, JSTListProductInfo jstLstProd)
|
||||
{
|
||||
string url = "https://sc.scm121.com/api/goods/shelves/itemSpuShelves/getItemSpuInfo";
|
||||
string referer = "https://sc.scm121.com/manage/goods/qualitySupplier/goodsDetail/" + jstLstProd.itemSpuId + "?itemCoId=" + jstLstProd.itemCoId + "&noBack=true";
|
||||
string data = @"{""itemSpuId"":""" + jstLstProd.itemSpuId + @""",""itemCoId"":""" + jstLstProd.itemCoId + @"""}";
|
||||
data = @"{""id"":""" + jstLstProd.itemSpuId + @""",""platformType"":""Pinduoduo"",""shelvesType"":""DISTRIBUTION"",""companyType"":""SUPPLIER"",""itemCoId"":""" +
|
||||
jstLstProd.itemCoId + @"""}";
|
||||
|
||||
var detailRst = "";
|
||||
for (int i = 0; i < 3 && !detailRst.Contains("\"success\":true"); i++)
|
||||
{
|
||||
Thread.Sleep(Randomx.GetId(1000, 2000));
|
||||
detailRst = JSTHttpResponseBLL.JSTPostResponse(shop, url, data, referer, appVersion);
|
||||
}
|
||||
return detailRst;
|
||||
}
|
||||
|
||||
public string categoryForecastWithPlatform(ShopLoginInfo shop, JSTListProductInfo jstLstProd, string shopId)
|
||||
{
|
||||
string url = "https://sc.scm121.com/api/goods/platform/category/categoryForecastWithPlatform";
|
||||
string referer = "https://sc.scm121.com/manage/goods/qualitySupplier/goodsDetail/" + jstLstProd.itemSpuId + "?itemCoId=" + jstLstProd.itemCoId + "&noBack=true";
|
||||
string data = @"{""itemCoId"":""" + jstLstProd.coId + @""",""itemSpuId"":""" + jstLstProd.itemSpuId +
|
||||
@""",""shopId"":""" + shopId + @""",""shopType"":""Pinduoduo"",""itemName"":""" + jstLstProd.itemName + @"""}";
|
||||
|
||||
var detailRst = "";
|
||||
for (int i = 0; i < 3 && !detailRst.Contains("\"success\":true"); i++)
|
||||
{
|
||||
Thread.Sleep(Randomx.GetId(1000, 2000));
|
||||
detailRst = JSTHttpResponseBLL.JSTPostResponse(shop, url, data, referer, appVersion);
|
||||
}
|
||||
return detailRst;
|
||||
}
|
||||
|
||||
private void btnSearchTitle_Click(object sender, EventArgs e)
|
||||
{
|
||||
pbLoading.Visible = true;
|
||||
Task.Run(() =>
|
||||
{
|
||||
foreach (DataGridViewRow row in dgvProduct.Rows)
|
||||
{
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
|
||||
row.Visible = (row.Cells["colGoodsName"].Value.ParseToString().Contains(txtTitle.Text.Trim()) || txtTitle.Text.Trim() == "");
|
||||
if (row.Visible == false)
|
||||
row.Cells["colCheck"].Value = false;
|
||||
|
||||
}));
|
||||
}
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
pbLoading.Visible = false;
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
private void btnCancelSelect_Click(object sender, EventArgs e)
|
||||
{
|
||||
Task.Run(() => {
|
||||
|
||||
foreach(DataGridViewRow row in dgvProduct.Rows)
|
||||
{
|
||||
if (row.Cells["colMsg"].Value.ParseToString().Contains("入库成功") || row.Cells["colMsg"].Value.ParseToString().Contains("已存在相同id商品"))
|
||||
{
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
row.Cells["colcheck"].Value = false;
|
||||
}));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void txtWaitSeconds_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
getDetailWait = txtWaitSeconds.Text.ParseToInt();
|
||||
}
|
||||
|
||||
private void btnExportCookie_Click(object sender, EventArgs e)
|
||||
{
|
||||
List<Cookie> cookieList = CEFBrowser.GetCookieList(".scm121.com", cefWebBrowser.GetCookieManager(null));
|
||||
var shop = new ShopLoginInfo();
|
||||
shop.Cookies = JsonHelper.SerializeObject(cookieList);
|
||||
|
||||
List<CefSharp.Cookie> cooks = null;
|
||||
try { cooks = JsonHelper.DeserializeJsonToList<CefSharp.Cookie>(shop.Cookies); } catch (Exception ex) { }
|
||||
if (cooks == null)
|
||||
cooks = new List<CefSharp.Cookie>();
|
||||
|
||||
string cookJs = "";
|
||||
var keys = new string[] { "acw_tc", "DISTRYBUTION_TOKEN" };
|
||||
foreach (var shopCook in cooks)
|
||||
{
|
||||
var cookie = shopCook.Name + "=" + shopCook.Value;
|
||||
if (!keys.Any(k => cookie.StartsWith(k)))
|
||||
continue;
|
||||
cookJs += "\r\ndocument.cookie='" + cookie.Substring(0, Math.Max(0, cookie.IndexOf("="))) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';";
|
||||
}
|
||||
foreach (var shopCook in cooks)
|
||||
{
|
||||
var cookie = shopCook.Name + "=" + shopCook.Value;
|
||||
if (!keys.Any(k => cookie.StartsWith(k)))
|
||||
continue;
|
||||
cookJs += "\r\ndocument.cookie='" + cookie + "; domain=.scm121.com; expires=" +
|
||||
DateTime.Now.AddMonths(1).ToUniversalTime().ToString("ddd, dd MMM yyyy HH:mm:ss 'UTC'", new DateTimeFormatInfo()) + "; path=/';";
|
||||
}
|
||||
cookJs += "\r\nsetTimeout(() => { window.location.href='https://sc.scm121.com/suppliersManage/suppliersList/onlineSuppliers'; }, 200)";
|
||||
Clipboard.SetDataObject(cookJs);
|
||||
BaseMsgForm.ShowInfo("复制成功");
|
||||
}
|
||||
|
||||
|
||||
private void btnStop_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (CancelReturn != null)
|
||||
CancelReturn.Cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="colCheck.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colCoId.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colSupplierName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colProductId.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colGoodsName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colImgUrl.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colImg.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colSkuId.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colSkuName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colPrice.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colStock.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDel.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colMsg.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownSelect.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownSpuId.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownStyleCode.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownImgUrl.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownImg.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownItemName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="skuDownItemCode.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownColourSpec.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownSupplierName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownSupplyPrice.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownShelvesTime.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownLastOperator.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="colDownDrpItemStatus.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="dataGridViewLinkColumn1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="dataGridViewTextBoxColumn8.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
||||
Reference in new issue
Block a user