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

1367 lines
67 KiB
C#

using AllBase;
using AllBase.Model.Result;
using AllBase.Model.Result._1688;
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.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
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.UserControls;
using TemuKJD.WXForms.ProductForms;
using Work;
namespace TemuKJD.ToolForms
{
public partial class Get1688ProductForm : BaseForms.BaseForm
{
/// <summary>
/// 是否是普通商品采集授权用户
/// </summary>
public bool IsAuthorityUser { get; set; } = false;
List<CefSharp.Cookie> lst1688cookie = null;
public bool isGetProdLst = false;
Dictionary<string, string> dicAfterSale = new Dictionary<string, string>();
public CancellationTokenSource cancellationTokenSource { get; set; } = null;
public CancellationTokenSource CancelReturn { get; set; } = null;
//string InitUrl = "https://air.1688.com/app/channel-fe/search/index.html?spm=a260k.home2025.centralDoor.dyjdf.51c435972rph5F#/result?topOfferIds=673868452000";
//string InitUrl = "https://air.1688.com/app/channel-fe/search/index.html?spm=a260k.home2025.centralDoor.dyjdf.51c435972rph5F#/result";
string InitUrl = "https://air.1688.com/app/channel-fe/search/index.html?spm=a21vf6.home.0.0#/result";
public ChromiumWebBrowser cefWebBrowser = null;
private string currentUrl = "";
private string currentGet1688ListParamData = "";
private string currentGet1688ListProductData = "";
private string appVersion = "";
//private string currentSupplierId = "";
int getDetailWait = 5;
int pageStart = 1;
int pageEnd = 9999;
ConcurrentList<_1688OneProductListInfo> lst1688OneProductListInfo = new ConcurrentList<_1688OneProductListInfo>();
public Get1688ProductForm()
{
InitializeComponent();
}
private void GetJuShuitanProdForm_Load(object sender, EventArgs e)
{
if(IsAuthorityUser)
{
this.ucTabControlMetro1.TabPages.RemoveAt(2);
}
this.splitContainer1.SplitterDistance = 472;
this.dgvProduct.AddSelectorColumn("colCheck");
this.dgvProduct.AddImgColumn("colImg", "colImgUrl");
lst1688cookie = NaiBa.Util.Helper.ConfigHelper.LoadConfig<List<Cookie>>("1688_cookies");
if (lst1688cookie == null)
lst1688cookie = new List<Cookie>();
lst1688OneProductListInfo = NaiBa.Util.Helper.ConfigHelper.LoadConfig<ConcurrentList<_1688OneProductListInfo>>("1688_product_list_" + MainForm.ProcessCount);
if (lst1688OneProductListInfo == null)
lst1688OneProductListInfo = new ConcurrentList<_1688OneProductListInfo>();
var _1688AddressForm = new GetAddressForm() { AddressType = "1688" };
_1688AddressForm.cmbType.Enabled = false;
_1688AddressForm.cmbTypeFilter.Enabled = false;
_1688AddressForm.TopLevel = false;
_1688AddressForm.FormBorderStyle = FormBorderStyle.None;
_1688AddressForm.Dock = DockStyle.Fill;
this.panel1.Controls.Add(_1688AddressForm);
_1688AddressForm.Show();
pbLoading.Visible = true;
Task.Run(() =>
{
int id = 0;
foreach (var prod in lst1688OneProductListInfo)
{
id++;
if (id % 50 == 0)
Thread.Sleep(1);
Invoke(new Action(() =>
{
var rowId = this.dgvProduct.Rows.Add(
true,
prod.sellerId,
prod.memberInfo.companyName,
prod.offerId,
prod.title,
prod?.dbProduct?.cat_name != null ? prod?.dbProduct?.cat_name : prod?.dbProduct?.cat_id,
prod.offerPic.ParseToString().Replace("https://", "http://"),
DataGridViewExtension.defaultBitmap,
//"", //prod.skuId,
//"", //prod.color + ";" + prod.spec,
prod?.dbProduct?.price_text == null ? prod?.dbProduct?.price_text : prod.price.ParseToString(),
"", //prod.stock,
prod.saleInfo.blurDfSales,
prod.saleInfo.blurDfSales7d,
prod.fullfillInfo.pickupRate48H,
prod.proxyAdvice.outDistributeCnt,
TemuKJD.Properties.Resources.wang_wang_icon,
"删除",
prod.getProductMsg
); ;
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
//{
//}
List<Cookie> cookieLst = lst1688cookie;
// 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)
{
}
public string currentDetailData = "";
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(() => { GetCurrent1688SearchData(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); });
//}
if (url.Contains("https://h5api.m.1688.com/h5/mtop.alibaba.1688.distribution.buyer.selection.search"))
{
Task.Run(() => { GetCurrent1688SearchData(postData, responseData, request); });
}
//if (url.Contains("https://detail.1688.com/offer/"))
//{
// Task.Run(() => { currentDetailData = responseData; });
//}
if (url.Contains("https://detail.1688.com/offer/"))
{
var dataTmp = responseData;
if (dataTmp.Contains("specId"))
Task.Run(() => { currentDetailData = dataTmp; });
}
if (responseData.Contains("赛龙宠物"))
{
}
}
void GetCurrent1688SearchData(string postData, string responseData, IRequest request)
{
currentGet1688ListParamData = GetHtml.UrlDecode(postData.Replace("data=", ""));
currentGet1688ListProductData = responseData;
if (isGetProdLst)
{
}
}
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("_tb_token_"))
{
BaseMsgForm.ShowError("导入的cookie无效,请重新输入");
return;
}
Task.Run(() =>
{
var t = CEFBrowser.SetCookieAsync(".1688.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(".1688.com", cefWebBrowser.GetCookieManager(null));
NaiBa.Util.Helper.ConfigHelper.SaveConfig("1688_cookies", cookieList);
BaseMsgForm.ShowInfo("保存成功");
}
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 prodId = dgvProduct.Rows[e.RowIndex].Cells["colProductId"].Value.ParseToString();
var prod = lst1688OneProductListInfo.FirstOrDefault(p => p.offerId.ParseToString() == prodId);
var row = dgvProduct.Rows[e.RowIndex];
switch (headerText)
{
case "删除":
//if (BaseMsgForm.ShowConfirm("确定删除商品吗?删除后不可恢复!").DialogResult == DialogResult.Cancel)
// return;
//DeleteProduct(dbId);
dgvProduct.Rows.Remove(row);
lst1688OneProductListInfo.Remove(prod);
NaiBa.Util.Helper.ConfigHelper.SaveConfig("1688_product_list_" + MainForm.ProcessCount, lst1688OneProductListInfo);
break;
case "图片":
var imgUrl = dgvProduct.Rows[e.RowIndex].Cells["colImgUrl"].Value.ParseToString();
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;
case "旺旺聊天":
//https://air.1688.com/app/ocms-fusion-components-1688/def_cbu_web_im/index.html?touid=cnalichn%E8%B5%9B%E9%BE%99%E5%AE%A0%E7%89%A9&siteid=cnalichn&status=1&portalId=&gid=&offerId=757406440159#/
var url = "https://air.1688.com/app/ocms-fusion-components-1688/def_cbu_web_im/index.html?touid=cnalichn" + prod.memberInfo.companyName +
"&siteid=cnalichn&status=1&portalId=&gid=&offerId=" + prod.offerId + "#/";
//WebForm
url = "https://detail.1688.com/offer/" + prod.offerId + ".html?spm=a21vf6.result.0.0.5a8a12ffMLgKMw&fxcv=2&sk=consign";
List<Cookie> cookieList = CEFBrowser.GetCookieList(".1688.com", cefWebBrowser.GetCookieManager(null));
var shop = new ShopLoginInfo();
shop.Cookies = JsonHelper.SerializeObject(cookieList);
if (WebForm.instance != null)
{
WebForm.instance.InitUrl = url;
WebForm.instance.Show();
WebForm.instance.initCefAndMainShop();
}
else
{
WebForm webForm = new WebForm(shop, url);
webForm.Show();
}
Task.Run(() =>
{
Thread.Sleep(Randomx.GetId(1000, 2000));
WebForm.instance.ClickWangwang();
});
break;
default:
break;
}
}
private void btnCollectSupplier_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(currentGet1688ListParamData) || string.IsNullOrEmpty(currentGet1688ListProductData))
{
BaseMsgForm.ShowError("请在网页上选择一件代发商品列表页面");
return;
}
if (dgvProduct.Rows.Count > 0)
{
if (BaseMsgForm.ShowConfirm("当前列表已有采集数据,是否重新采集?").DialogResult == DialogResult.Cancel)
{
return;
}
}
dgvProduct.BringToFront();
this.pbLoading.BringToFront();
this.pbLoading.Visible = true;
dgvProduct.Rows.Clear();
lst1688OneProductListInfo.Clear();
if (cancellationTokenSource != null && cancellationTokenSource.IsCancellationRequested)
cancellationTokenSource.Cancel();
cancellationTokenSource = new CancellationTokenSource();
Task.Run(() =>
{
try
{
Get1688GoodsList();
}
catch (Exception ex)
{
BaseMsgForm.ShowError(ex.Message);
}
Invoke(new Action(() =>
{
this.pbLoading.Visible = false;
//this.statusBar.lblTaskStatus.Text = "正在删除...";
}));
}, cancellationTokenSource.Token);
}
void Get1688GoodsList()
{
List<Cookie> cookieList = CEFBrowser.GetCookieList(".1688.com", cefWebBrowser.GetCookieManager(null));
var shop = new ShopLoginInfo();
shop.Cookies = JsonHelper.SerializeObject(cookieList);
int totalPage = 99999999;
var JobjStr = JsonHelper.JObjectParse(currentGet1688ListParamData)["sceneSearchParamStr"].ParseToString();
var Jobj = JsonHelper.JObjectParse(JobjStr);
pageStart = Jobj["pageIndex"].ParseToInt();
int page = pageStart;
while (page < pageEnd && page < totalPage)
{
if (cancellationTokenSource.IsCancellationRequested)
break;
JobjStr = JsonHelper.JObjectParse(currentGet1688ListParamData)["sceneSearchParamStr"].ParseToString();
Jobj = JsonHelper.JObjectParse(JobjStr);
page = Jobj["pageIndex"].ParseToInt();
totalPage = BaseRegex.GetIntJson(ref currentGet1688ListProductData, "totalPage");
if (page % 10 == 9)
NaiBa.Util.Helper.ConfigHelper.SaveConfig("1688_product_list_" + MainForm.ProcessCount, lst1688OneProductListInfo);
//Jobj["pageNum"] = page;
Invoke(new Action(() =>
{
this.statusBar.lblTaskStatus.Text = "正在采集第 " + page + " 页";
}));
Thread.Sleep(Randomx.GetId(100, 200));
List<_1688OneProductListInfo> _1688Lst = new List<_1688OneProductListInfo>();
try
{
foreach (var jItem in JsonHelper.JObjectParse(currentGet1688ListProductData)["data"]["data"])
{
_1688OneProductListInfo _1688Prod = JsonHelper.DeserializeJsonToObject<_1688OneProductListInfo>(JsonHelper.SerializeObject(jItem));
_1688Prod._1688ProductJson = JsonHelper.SerializeObject(jItem);
_1688Prod.dbProduct = new KJDDBProduct();
_1688Prod.dbProduct.from_shop_id = _1688Prod.sellerId.ParseToString();
_1688Prod.dbProduct.from_shop_name = _1688Prod.memberInfo.companyName;
//_1688Prod.dbProduct.offline_supplier_id = "";
//_1688Prod.dbProduct.offline_supplier_name = "";
_1688Prod.dbProduct.spu_id = _1688Prod.offerId.ParseToString();
_1688Prod.dbProduct.skc_id = "";
_1688Prod.dbProduct.price_text = _1688Prod.price.ParseToString();
//_1688Prod.dbProduct.main_cat_id = "";
//_1688Prod.dbProduct.main_cat_name = "";
//_1688Prod.dbProduct.cat_id = "";
//_1688Prod.dbProduct.cat_name = "";
//_1688Prod.dbProduct.ext_code = "";
_1688Prod.dbProduct.product_name = _1688Prod.title;
_1688Prod.dbProduct.product_json = "";
_1688Prod.dbProduct.size_json = "{}";
_1688Prod.dbProduct.main_img = _1688Prod.offerPic;
_1688Prod.dbProduct.sale_count = _1688Prod.saleInfo.dfSales;
_1688Prod.dbProduct.sale_count_text = _1688Prod.saleInfo.blurDfSales;
_1688Prod.dbProduct.product_get_type_text = "1688厂家";
_1688Lst.Add(_1688Prod);
}
if (_1688Lst.Count <= 0)
break;
//_1688Lst = _1688Lst.Where(p => !lst1688OneProductListInfo.Any(pr => pr.offerId == p.offerId)).ToList();
lst1688OneProductListInfo.AddRange(_1688Lst);
}
catch (Exception ex)
{
Invoke(new Action(() =>
{
this.statusBar.lblTaskStatus.Text = "发生错误 " + ex.Message;
}));
Thread.Sleep(2000);
}
Invoke(new Action(() =>
{
foreach (var prod in _1688Lst)
{
var id = dgvProduct.Rows.Add(
true,
prod.sellerId,
prod.memberInfo.companyName,
prod.offerId,
prod.title,
prod?.dbProduct?.cat_name != null ? prod?.dbProduct?.cat_name : prod?.dbProduct?.cat_id,
prod.offerPic.ParseToString().Replace("https://", "http://"),
DataGridViewExtension.defaultBitmap,
//"", //prod.skuId,
//"", //prod.color + ";" + prod.spec,
prod?.dbProduct?.price_text == null ? prod?.dbProduct?.price_text : prod.price.ParseToString(),
"", //prod.stock,
prod.saleInfo.blurDfSales,
prod.saleInfo.blurDfSales7d,
prod.fullfillInfo.pickupRate48H,
prod.proxyAdvice.outDistributeCnt,
TemuKJD.Properties.Resources.wang_wang_icon,
"删除",
prod.getProductMsg
);
dgvProduct.Rows[id].Height = 60;
}
}));
var jsStr = "window.scrollTo(0, document.body.scrollHeight); " +
"document.getElementsByClassName('ant-pagination-item-link')[document.getElementsByClassName('ant-pagination-item-link').length - 1].click();";
var response = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr);
response.Wait(2000);
Thread.Sleep(Randomx.GetId(3000, 5000));
}
NaiBa.Util.Helper.ConfigHelper.SaveConfig("1688_product_list_" + MainForm.ProcessCount, lst1688OneProductListInfo);
Invoke(new Action(() =>
{
BaseMsgForm.ShowInfo("采集完成");
}));
}
private void btnGetDetail_Click(object sender, EventArgs e)
{
this.pbLoading.Visible = true;
List<Cookie> cookieList = CEFBrowser.GetCookieList(".1688.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(rowLst.Count == 0)
{
BaseMsgForm.ShowError("请选择要采集详情的商品");
return;
}
dgvProduct.BringToFront();
pbLoading.BringToFront();
if (cancellationTokenSource != null)
cancellationTokenSource.Cancel();
cancellationTokenSource = new CancellationTokenSource();
Task.Run(() =>
{
foreach (var row in rowLst)
{
if (cancellationTokenSource.IsCancellationRequested)
break;
if (row.Index % 20 == 0)
NaiBa.Util.Helper.ConfigHelper.SaveConfig("1688_product_list_" + MainForm.ProcessCount, lst1688OneProductListInfo);
Invoke(new Action(() =>
{
this.statusBar.lblTaskStatus.Text = "正在采集表格第 " + (row.Index + 1) + " 行详情数据";
}));
var prodId = row.Cells["colProductId"].Value.ParseToString();
var prod = lst1688OneProductListInfo.FirstOrDefault(c => c.offerId.ParseToString() == prodId);
if (chkSkip.Checked)
{
// 不存在或已经采集过
if (prod == null || prod?.dbProduct?.product_json?.ParseToString().Length > 10)
continue;
if (prod.getProductMsg == "商品已存在,跳过详情采集")
continue;
if (prod.getProductMsg.ParseToString().Contains("入库成功") || prod.getProductMsg.ParseToString().Contains("已存在相同id商品"))
continue;
bool isExist = false;
var existUrl = BaseClass.BuildPDDObjString("product/get_product_spu_id_list");
string existData = UserLogin.GetSignaturex() + "&search_spu_ids=" + prod.offerId;
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"))
{
prod.getProductMsg = "采集详情失败,产品数据库连接失败";
try { row.Cells["colMsg"].Value = prod.getProductMsg; } catch { }
continue;
}
else
{
if (html.Contains("\"data\":[") && !html.Contains("\"data\":[]"))
isExist = true;
}
prod.getProductMsg = "商品已存在,跳过详情采集";
if (isExist)
{
try { row.Cells["colMsg"].Value = prod.getProductMsg; } catch { }
continue;
}
}
Thread.Sleep(Randomx.GetId(500, 1500));
if (this.IsAuthorityUser)
Thread.Sleep(1000);
// 采集商品详情
currentDetailData = "";
//var get1688DetailRst = Get1688DetailData(shop, prod);
string url = "https://detail.1688.com/offer/" + prod.offerId + ".html?fxcv=2&sk=consign";
//string url = "https://detail.1688.com/offer/" + prod.offerId + ".html";
this.cefWebBrowser.Load(url);
// 额外休眠
Thread.Sleep(Math.Max(3, getDetailWait) * 1000);
for (int i = 0; i < 20; i++)
{
if (string.IsNullOrEmpty(currentDetailData))
{
Thread.Sleep(500);
}
}
string get1688DetailRst = currentDetailData;
//Invoke(new Action(() => { this.ucTabControlMetro1.SelectedIndex = 0; }));
if (!get1688DetailRst.Contains("\"success\":true") && !get1688DetailRst.Contains("\"specId\":\""))
{
if (get1688DetailRst.Contains("___tmd___") || get1688DetailRst.Contains("___TMD___"))
{
//Invoke(new Action(() => { this.ucTabControlMetro1.SelectedIndex = 0; }));
Thread.Sleep(5000);
}
var errMsg = BaseRegex.GetStringJson(ref get1688DetailRst, "message");
if (string.IsNullOrEmpty(errMsg))
errMsg = get1688DetailRst;
if (errMsg.Length > 500)
errMsg = errMsg.Substring(0, 500);
prod.getProductMsg = "采集失败 " + errMsg;
Invoke(new Action(() =>
{
try { row.Cells["colMsg"].Value = prod.getProductMsg; } catch { }
}));
continue;
}
try
{
_1688ClientProductInfo _1688ProdDetail = new _1688ClientProductInfo();
// 视频
var videoStrs = BaseRegex.GetJsonObjStrJson(ref get1688DetailRst, "video");
_1688ProdDetail.video = JsonHelper.DeserializeJsonToObjectNullable<_1688video>(videoStrs.FirstOrDefault());
// 主图详情图
var mainImgStrs = BaseRegex.GetJsonArrStrJson(ref get1688DetailRst, "mainImage");
_1688ProdDetail.mainImage = JsonHelper.DeserializeJsonToListNullable<string>(mainImgStrs.FirstOrDefault());
var detailImgStrs = BaseRegex.GetJsonArrStrJson(ref get1688DetailRst, "offerImgList");
_1688ProdDetail.offerImgList = JsonHelper.DeserializeJsonToListNullable<string>(detailImgStrs.FirstOrDefault());
var skuModelRst = BaseRegex.GetJsonObjStrJson(ref get1688DetailRst, "skuModel");
_1688ProdDetail.skuModel = JsonHelper.DeserializeJsonToObjectNullable<_1688skuModel>(skuModelRst.FirstOrDefault());
var offerBaseInfoRst = BaseRegex.GetJsonObjStrJson(ref get1688DetailRst, "offerBaseInfo");
_1688ProdDetail.offerBaseInfo = JsonHelper.DeserializeJsonToObjectNullable<_1688offerBaseInfo>(offerBaseInfoRst.FirstOrDefault());
var tempModelRst = BaseRegex.GetJsonObjStrJson(ref get1688DetailRst, "tempModel");
_1688ProdDetail.tempModel = JsonHelper.DeserializeJsonToObjectNullable<_1688tempModel>(tempModelRst.FirstOrDefault());
var offerDetailRst = BaseRegex.GetJsonObjStrJson(ref get1688DetailRst, "offerDetail");
if (offerDetailRst.Count == 0)
{
var get1688DetailRstTmp = Regex.Unescape(get1688DetailRst);
offerDetailRst = BaseRegex.GetJsonObjStrJson(ref get1688DetailRstTmp, "offerDetail");
}
_1688ProdDetail.offerDetail = JsonHelper.DeserializeJsonToObjectNullable<_1688offerDetail>(offerDetailRst.FirstOrDefault());
if (_1688ProdDetail.offerDetail == null)
{
//var offerDomainRst = BaseRegex.GetJsonObjStrJson(ref get1688DetailRst, "offerDomain", 1);
//var offerDomainStr = offerDomainRst.FirstOrDefault();
//if (offerDomainStr.Contains("\\\""))
// offerDomainStr = Regex.Unescape(offerDomainRst.FirstOrDefault());
//if (!string.IsNullOrEmpty(offerDomainStr))
//{
// _1688ProdDetail.offerDetail = new _1688offerDetail();
//}
}
_1688ProdDetail.postFeeValue = BaseRegex.GetDecimalJson(ref get1688DetailRst, "postFeeValue");
if (_1688ProdDetail.offerDetail == null || _1688ProdDetail.offerDetail.featureAttributes == null ||
_1688ProdDetail.offerDetail.featureAttributes.Count == 0 ||
_1688ProdDetail.mainImage == null || _1688ProdDetail.mainImage.Count == 0 || _1688ProdDetail.offerImgList == null ||
_1688ProdDetail.skuModel == null || _1688ProdDetail.skuModel.skuInfoMap == null || _1688ProdDetail.skuModel.skuInfoMap.Count == 0 ||
_1688ProdDetail.skuModel.skuProps == null || _1688ProdDetail.skuModel.skuProps.Count == 0)
{
prod.getProductMsg = "解析1688商品详情失败,丢失商品信息";
Invoke(new Action(() =>
{
try { row.Cells["colMsg"].Value = prod.getProductMsg; } catch { }
}));
continue;
}
if (_1688ProdDetail.offerBaseInfo == null || _1688ProdDetail.tempModel == null)
{
prod.getProductMsg = "解析1688商品详情失败,丢失基础信息";
Invoke(new Action(() =>
{
try { row.Cells["colMsg"].Value = prod.getProductMsg; } catch { }
}));
continue;
}
var prodDataJson = JsonHelper.SerializeObject(_1688ProdDetail);
prod.dbProduct.cat_id = _1688ProdDetail.offerDetail.leafCategoryId.ParseToString();
// 获取属性
if (prod.dbProduct.cat_id.IsNullOrEmpty())
prod.dbProduct.cat_id = "1";
prod.dbProduct.cat_name = _1688ProdDetail.offerDetail.leafCategoryName;
prod.dbProduct.main_cat_id = _1688ProdDetail.offerDetail.topCategoryId.ParseToString();
var priceMin = _1688ProdDetail.skuModel.skuInfoMap.Values.Min(x => x.discountPrice.ParseToDecimal());
if (priceMin == 0)
priceMin = _1688ProdDetail.skuModel.skuInfoMap.Values.Min(x => x.price.ParseToDecimal());
var priceMax = _1688ProdDetail.skuModel.skuInfoMap.Values.Max(x => x.discountPrice.ParseToDecimal());
if (priceMax == 0)
priceMax = _1688ProdDetail.skuModel.skuInfoMap.Values.Max(x => x.price.ParseToDecimal());
priceMin += _1688ProdDetail.postFeeValue == null ? 0 : _1688ProdDetail.postFeeValue.ParseToDecimal();
priceMax += _1688ProdDetail.postFeeValue == null ? 0 : _1688ProdDetail.postFeeValue.ParseToDecimal();
prod.dbProduct.price_text = priceMin + "-" + priceMax;
prod.dbProduct.product_json = "{\"_1688DetailData\":" + prodDataJson + ",\"_1688ListProd\":" + prod._1688ProductJson + "}";
prod.getProductMsg = "采集成功";
MainForm.instance.Invoke(new Action(() =>
{
row.Cells["colMsg"].Value = prod.getProductMsg;
row.Cells["colCate"].Value = prod.dbProduct.cat_name.IsNullOrEmpty() ? prod.dbProduct.cat_id : prod.dbProduct.cat_name;
row.Cells["colPrice"].Value = prod.dbProduct.price_text;
}));
}
catch (Exception ex)
{
prod.getProductMsg = "解析1688商品详情失败 " + ex.Message;
Invoke(new Action(() =>
{
try { row.Cells["colMsg"].Value = prod.getProductMsg; } catch { }
}));
continue;
}
}
NaiBa.Util.Helper.ConfigHelper.SaveConfig("1688_product_list_" + MainForm.ProcessCount, lst1688OneProductListInfo);
Invoke(new Action(() =>
{
BaseMsgForm.ShowInfo("采集完成");
this.pbLoading.Visible = false;
}));
}, cancellationTokenSource.Token);
}
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)
{
if (btnSaveDb.Text == "采集商品入库")
{
dgvProduct.BringToFront();
pbLoading.BringToFront();
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 prodId = row.Cells["colProductId"].Value.ParseToString();
var prod = lst1688OneProductListInfo.FirstOrDefault(c => c.offerId.ParseToString() == prodId);
if (prod == null || prod.dbProduct == null || prod.dbProduct.product_json.Length < 10)
continue;
var dbProd = prod.dbProduct;
if (!chkOverride.Checked && !prod.getProductMsg.IsNullOrEmpty())
{
if (prod.getProductMsg.Contains("已存在相同Id商品") || prod.getProductMsg.Contains("商品覆盖成功") || prod.getProductMsg.Contains("商品入库成功"))
{
//已存在相同Id商品,跳过
//商品覆盖成功!
//商品入库成功!
prod.getProductMsg = "已存在相同Id商品,跳过";
Invoke(new Action(() =>
{
row.Cells["colMsg"].Value = prod.getProductMsg;
}));
success++;
continue;
}
}
Thread.Sleep(25);
if (this.IsAuthorityUser)
Thread.Sleep(1000);
if (row.Index % 20 == 0)
NaiBa.Util.Helper.ConfigHelper.SaveConfig("1688_product_list_" + MainForm.ProcessCount, lst1688OneProductListInfo);
// 商品采集权限用户采集的数据加上用户前缀(商品前缀显示给用户的时候隐藏)
string collectAuthorityTag = "";
if (IsAuthorityUser)
collectAuthorityTag = "-" + BaseClass.UserName;
bool isExist = false;
var existUrl = BaseClass.BuildPDDObjString("product/get_product_spu_id_list");
string existData = UserLogin.GetSignaturex() + "&search_spu_ids=" + prod.offerId + collectAuthorityTag;
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_product");
if (isExist)
{
if (chkOverride.Checked)
{
url = BaseClass.BuildPDDObjString("product/mdy_product");
}
else
{
//入库成功 已存在相同id商品
prod.getProductMsg = "已存在相同id商品,跳过";
Invoke(new Action(() =>
{
row.Cells["colMsg"].Value = prod.getProductMsg;
}));
success++;
continue;
}
}
var data = Work.UserLogin.GetSignaturex() +
"&from_shop_id=" + prod.dbProduct.from_shop_id +
"&from_shop_name=" + prod.dbProduct.from_shop_name +
//"&offline_supplier_id=" + prod.dbProduct.offline_supplier_id +
//"&offline_supplier_name=" + prod.dbProduct.offline_supplier_name +
"&spu_id=" + prod.dbProduct.spu_id.ParseToString() + collectAuthorityTag +
"&skc_id=" + prod.dbProduct.skc_id.ParseToString() +
"&price_text=" + prod.dbProduct.price_text +
"&ext_code=" + HttpUtility.UrlEncode(prod.dbProduct.ext_code, Encoding.UTF8) +
"&product_name=" + HttpUtility.UrlEncode(prod.dbProduct.product_name, Encoding.UTF8) +
"&product_json=" + HttpUtility.UrlEncode(dbProd.product_json, Encoding.UTF8) +
"&size_json=" + HttpUtility.UrlEncode(dbProd.size_json, Encoding.UTF8) +
"&sale_count=" + dbProd.sale_count +
"&sale_count_text=" + HttpUtility.UrlEncode(dbProd.sale_count_text, Encoding.UTF8) +
"&main_img=" + HttpUtility.UrlEncode(dbProd.main_img, Encoding.UTF8) +
"&wx_safe_status=" + HttpUtility.UrlEncode("未校验", Encoding.UTF8) +
"&product_get_type=" + HttpUtility.UrlEncode("1688厂家", Encoding.UTF8);
if (IsAuthorityUser)
{
data += "&add_user_name=" + BaseClass.UserName;
data += "&group=用户" + BaseClass.UserName;
}
if (!isExist)
{
data += "&main_cat_id=" + prod.dbProduct.main_cat_id +
"&main_cat_name=" + HttpUtility.UrlEncode(prod.dbProduct.main_cat_name.ParseToString(), Encoding.UTF8) +
"&cat_id=" + prod.dbProduct.cat_id +
"&cat_name=" + HttpUtility.UrlEncode((prod.dbProduct.cat_name ?? prod.dbProduct.cat_name).ParseToString(), Encoding.UTF8);
}
if (1 == 1)
{
//1688没有分销,但是聚水潭上货条件要判断1是否类目识别 2是否服务端加密 3是否分销
//作为1688和聚水潭一致的上货必备条件,此处1688分销直接设置为1
prod.dbProduct.distribution_set = 1;
data += "&distribution_set=1";
}
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 = "商品入库失败!请检查网络连接:" + BaseRegex.GetStringJson(ref html, "msg");
Invoke(new Action(() =>
{
row.Cells["colMsg"].Value = msg;
}));
}
else
{
success++;
prod.getProductMsg = "商品入库成功!";
if (url == BaseClass.BuildPDDObjString("product/mdy_product"))
prod.getProductMsg = "商品覆盖成功!";
Invoke(new Action(() =>
{
row.Cells["colMsg"].Value = prod.getProductMsg;
}));
}
}
NaiBa.Util.Helper.ConfigHelper.SaveConfig("1688_product_list_" + MainForm.ProcessCount, lst1688OneProductListInfo);
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 GetProdLst(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 Get1688DetailData(ShopLoginInfo shop, _1688OneProductListInfo _1688prod)
{
//string url = "https://detail.1688.com/offer/1024976470101.html?spm=a21vf6.result.0.0.30b812ff1rz1M0&fxcv=2&sk=consign";
string url = "https://detail.1688.com/offer/" + _1688prod.offerId + ".html?fxcv=2&sk=consign";
this.cefWebBrowser.Load(url);
//url = "https://detail.1688.com/offer/" + _1688prod.offerId + ".html?spm=a21vf6.result.0.0.30b812fftV88TJ&fxcv=2&sk=consign";
string referer = "";
var getDetailRst = _1688HttpResponseBLL._1688GetResponse(shop, url, referer, appVersion);
for (int i = 0; i< 3 && !getDetailRst.Contains("\"success\":true"); i++)
{
Thread.Sleep(Randomx.GetId(1000, 2000));
getDetailRst = _1688HttpResponseBLL._1688GetResponse(shop, url, referer, appVersion);
}
return getDetailRst;
}
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(".1688.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=.1688.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='" + InitUrl + "'; }, 200)";
Clipboard.SetDataObject(cookJs);
BaseMsgForm.ShowInfo("复制成功");
}
private void ucTabControlMetro1_SelectedIndexChanged(object sender, EventArgs e)
{
}
public static void Out1688ProductImport(bool isCollectAuthorityUser, StatusBarUserControl statusBar, PictureBox pbLoading)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Multiselect = true;
// 设置过滤条件,只显示文本文件
openFileDialog.Filter = "文本文件 (*.txt)|*.txt|All files (*.*)|*.*";
// 显示对话框并获取结果
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
//dgvOut1688Prod.BringToFront();
//pbLoading.BringToFront();
var filePathLst = openFileDialog.FileNames.ToList();
//dgvOut1688Prod.Rows.Clear();
//pbLoading.Visible = true;
statusBar.pgbTaskProgress.Maximum = filePathLst.Count;
statusBar.UpdateProgressBar(0);
Task.Run(() =>
{
int successNum = 0;
int failedNum = 0;
foreach (var path in filePathLst)
{
string content = "";
string rst = "";
try
{
using (StreamReader sr = new StreamReader(path))
{
content = sr.ReadToEnd();
}
rst = Out1688ProdImportOne(isCollectAuthorityUser, path, content);
Thread.Sleep(100);
if (isCollectAuthorityUser)
Thread.Sleep(1000);
}
catch (Exception ex)
{
rst = ex.Message;
}
if (string.IsNullOrEmpty(rst) || rst.Contains("成功"))
successNum++;
else
failedNum++;
statusBar.Invoke(new Action(() =>
{
statusBar.UpdateProgressBar(statusBar.pgbTaskProgress.Value + 1);
statusBar.lblTaskStatus.Text = "正在导入 成功" + successNum + " 失败" + failedNum;
}));
}
statusBar.Invoke(new Action(() =>
{
pbLoading.Visible = false;
statusBar.lblTaskStatus.Text = "导入完成 成功" + successNum + " 失败" + failedNum;
BaseMsgForm.ShowInfo("导入完成!");
}));
});
}
}
public static string Out1688ProdImportOne(bool isAuthorityUser, string filePath, string content)
{
//DataGridViewRow row = null;
//Invoke(new Action(() =>
//{
// var index = dgvOut1688Prod.Rows.Add(false, filePath);
// row = dgvOut1688Prod.Rows[index];
// row.Height = 60;
//}));
try
{
if (string.IsNullOrEmpty(content) || content.Length < 10)
return "商品数据为空";
KJDDBProduct dbProd = new KJDDBProduct();
dbProd.product_get_type_text = "1688外部数据";
dbProd.product_json = content;
dbProd.size_json = "{}";
_1688OutProductInfo outProd = JsonHelper.DeserializeJsonToObject<_1688OutProductInfo>(content);
string convertRst = "";
var prodInfo = new PDDProdFormConverter()._1688OutToPddConvert(out convertRst, dbProd);
if (!string.IsNullOrEmpty(convertRst))
return convertRst;
Thread.Sleep(25);
// 商品采集权限用户采集的数据加上用户前缀(商品前缀显示给用户的时候隐藏)
string collectAuthorityTag = "";
if (isAuthorityUser)
collectAuthorityTag = "-" + BaseClass.UserName;
bool isExist = false;
var existUrl = BaseClass.BuildPDDObjString("product/get_product_spu_id_list");
string existData = UserLogin.GetSignaturex() + "&search_spu_ids=" + outProd.productId + collectAuthorityTag;
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["colOutMsg"].Value = "入库失败,产品数据库连接失败";
//}));
return "入库失败,产品数据库连接失败";
}
else
{
if (html.Contains("\"data\":[") && !html.Contains("\"data\":[]"))
isExist = true;
}
var priceMin = (prodInfo.detail.sku?.Min(x => x.multi_price)).ParseToInt() * 0.01m;
var priceMax = (prodInfo.detail.sku?.Max(x => x.multi_price)).ParseToInt() * 0.01m;
//Invoke(new Action(() =>
//{
// row.Cells["colOutSupplierId"].Value = (string.IsNullOrEmpty(outProd.shopId) ? outProd.shopName : outProd.shopId);
// row.Cells["colOutSupplierName"].Value = outProd.shopName;
// row.Cells["colOutGoodsId"].Value = prodInfo.detail.goods_id.ParseToString();
// row.Cells["colOutGoodsName"].Value = prodInfo.detail.goods_name;
// row.Cells["colOutCat"].Value = outProd.categoryName;
// row.Cells["colOutImgUrl"].Value = prodInfo.detail.image_url;
// row.Cells["colOutPrice"].Value = priceMin + "-" + priceMax;
//}));
//var SetPartnerSpuRst = "";
var url = BaseClass.BuildPDDObjString("product/add_product");
if (isExist)
{
//if (chkOverride.Checked)
//{
url = BaseClass.BuildPDDObjString("product/mdy_product");
//}
//else
//{
// //入库成功 已存在相同id商品
// Invoke(new Action(() =>
// {
// row.Cells["colOutMsg"].Value = "已存在相同商品Id,跳过";
// }));
// return "";
//}
}
if (outProd.minOrderQuaitity.ParseToInt() > 1)
{
//Invoke(new Action(() =>
//{
// row.Cells["colOutMsg"].Value = "起批数量超过1,跳过";
//}));
//return "起批数量超过1,跳过";
}
string from_shop_id = (string.IsNullOrEmpty(outProd.shopId) ? outProd.shopName : outProd.shopId);
var data = Work.UserLogin.GetSignaturex() +
"&from_shop_id=" + from_shop_id +
"&from_shop_name=" + outProd.shopName +
//"&offline_supplier_id=" + prod.dbProduct.offline_supplier_id +
//"&offline_supplier_name=" + prod.dbProduct.offline_supplier_name +
"&spu_id=" + prodInfo.detail.goods_id.ParseToString() + collectAuthorityTag +
"&skc_id=" + prodInfo.detail.goods_id.ParseToString() +
"&price_text=" + priceMin + "-" + priceMax +
"&ext_code=" + HttpUtility.UrlEncode(prodInfo.detail.out_goods_sn, Encoding.UTF8) +
"&product_name=" + HttpUtility.UrlEncode(prodInfo.detail.goods_name, Encoding.UTF8) +
"&product_json=" + HttpUtility.UrlEncode(content, Encoding.UTF8) +
"&size_json=" + HttpUtility.UrlEncode(dbProd.size_json, Encoding.UTF8) +
"&sale_count=" + dbProd.sale_count +
"&sale_count_text=" + HttpUtility.UrlEncode(dbProd.sale_count_text, Encoding.UTF8) +
"&main_img=" + HttpUtility.UrlEncode(prodInfo.detail.image_url, Encoding.UTF8) +
"&wx_safe_status=" + HttpUtility.UrlEncode("未校验", Encoding.UTF8) +
"&product_get_type=" + HttpUtility.UrlEncode("1688外部数据", Encoding.UTF8);
if (isAuthorityUser)
{
data += "&add_user_name=" + BaseClass.UserName;
data += "&group=用户" + BaseClass.UserName;
}
if (!isExist)
{
data += "&main_cat_id=" + "" +
"&main_cat_name=" + "" +
"&cat_id=" + outProd.categoryId +
"&cat_name=" + HttpUtility.UrlEncode(outProd.categoryName, Encoding.UTF8);
}
if (1 == 1)
{
//1688没有分销,但是聚水潭上货条件要判断1是否类目识别 2是否服务端加密 3是否分销
//作为1688和聚水潭一致的上货必备条件,此处1688分销直接设置为1
//dbProd.distribution_set = 1;
//data += "&distribution_set=1";
}
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 = "商品入库失败!请检查网络连接:" + BaseRegex.GetStringJson(ref html, "msg");
//Invoke(new Action(() =>
//{
// row.Cells["colOutMsg"].Value = msg;
//}));
return msg;
}
else
{
//var getProductMsg = "商品入库成功!";
//if (url == BaseClass.BuildPDDObjString("product/mdy_product"))
// getProductMsg = "商品覆盖成功!";
//Invoke(new Action(() =>
//{
// row.Cells["colOutMsg"].Value = getProductMsg;
//}));
}
}
catch (Exception ex)
{
//Invoke(new Action(() =>
//{
// row.Cells["colOutMsg"].Value = "商品入库失败" + ex.Message;
//}));
return "商品入库失败" + ex.Message;
}
return "";
}
}
}