Files
KJD/TEMUKJD/KJDForms/AdminForms/ShopBrowserObject.cs
T

374 lines
18 KiB
C#

using AllBase;
using AllBase.Helper;
using AllBase.Model.Result;
using NaiBa.Util.Extension;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using TemuKJD.BaseForms;
using TemuKJD.BLL;
using TemuKJD.KJDForms.ProductThirdSelectForms;
using TemuKJD.KJDForms.ShopForms;
using Work;
namespace TemuKJD.KJDForms.AdminForms
{
public class ShopBrowserObject
{
public delegate void InfoReceivedHandler(string information);
public event InfoReceivedHandler OnInfoReceived;
public string getProduct(string sProdId, long supplierId)
{
var prodId = sProdId.ParseToLong();
if (prodId <= 0)
{
BaseMsgForm.ShowError("商品Id不存在!");
return "failed";
}
var shop = AdminShopListForm.lstAdminShopInfo.FirstOrDefault(s => s.ShopId == supplierId.ToString());
if (supplierId <= 0 || shop == null)
{
BaseMsgForm.ShowError("店铺不存在!");
return "failed";
}
Task.Run(() =>
{
try
{
var shop1 = shop;
var prodId1 = prodId;
string success_err_msg = "";
var html = ProductQuery(shop1, prodId1.ToString());
var testHtml1 = GetHtml.UrlEncodeUtf8(html);
var testHtml2 = GetHtml.UrlDecode(testHtml1);
testHtml1 = HttpUtility.UrlEncode(html, Encoding.UTF8);
testHtml2 = HttpUtility.UrlDecode(testHtml1);
if (!html.Contains("\"success\":true") || !html.Contains("\"result\""))
{
OnInfoReceived("商品获取失败!" + BaseRegex.GetStringJson(ref html, "errorMsg"));
return;
}
JObject obj = JObject.Parse(html);
var result = JsonHelper.SerializeObject(obj["result"]);
var sizeRst = "";
TemuDetailProductInfo product = JsonHelper.DeserializeJsonToObject<TemuDetailProductInfo>(result);
if (product.sizeTemplateId > 0)
{
html = SizeSpecQuery(shop1, prodId1.ToString(), product.sizeTemplateId.ToString());
if(!html.Contains("\"success\":true"))
{
success_err_msg += " 尺码表获取失败!" + BaseRegex.GetStringJson(ref html, "errorMsg");
}
else
{
obj = JObject.Parse(html);
sizeRst = JsonHelper.SerializeObject(obj["result"]);
}
}
// 读取数据库是否有相同商品
var url = BaseClass.BuildObjString("product/get_product_list");
var data = "";
data = UserLogin.GetSignaturex() +
"&page=" + 1 +
"&page_size=" + 1;
data += "&search_spu=" + product?.productId;
if (BaseClass.SaLevel == 1) // 店铺非空管理状态允许查看 后台采集 和 前端采集 的所有商品
{
data += "&product_get_type=all";
}
//data += "&search_skc=" + product?.productSkcList?.FirstOrDefault()?.productSkcId;
int dbId = 0;
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"))
html = GetHtml.PostUtf8(url, data);
if (!string.IsNullOrEmpty(html) && html.Contains("\"code\":200"))
{
dbId = BaseRegex.GetIntJson(ref html, "id");
}
if (dbId > 0 && BaseMsgForm.ShowConfirm("数据库已存在相同 Spu Id 的商品,是否覆盖?(选择 取消 将新增一条数据)").DialogResult == DialogResult.OK)
{
url = BaseClass.BuildObjString("product/mdy_db_product");
data = UserLogin.GetSignaturex() +
"&db_id=" + dbId;
data += "&product_json=" + HttpUtility.UrlEncode(result, Encoding.UTF8);
data += "&size_json=" + HttpUtility.UrlEncode(sizeRst, Encoding.UTF8);
//data += "&original_json=" + HttpUtility.UrlEncode(JsonHelper.SerializeObject(clientProdInfo), Encoding.UTF8);
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");
OnInfoReceived(msg);
}
else
{
OnInfoReceived("选品商品更新保存成功!" + success_err_msg);
}
}
else
{
url = BaseClass.BuildObjString("product/add_product");
data = Work.UserLogin.GetSignaturex() +
"&spu_id=" + product?.productId +
"&skc_id=" + product?.productSkcList?.FirstOrDefault()?.productSkcId +
"&cat_id=" + GetCat(product).catId +
"&cat_name=" + HttpUtility.UrlEncode(GetCat(product).catName, Encoding.UTF8) +
"&ext_code=" + HttpUtility.UrlEncode(product?.productSkcList?.FirstOrDefault()?.extCode, Encoding.UTF8) +
"&product_name=" + HttpUtility.UrlEncode(product?.productName, Encoding.UTF8) +
"&product_json=" + HttpUtility.UrlEncode(result, Encoding.UTF8) +
"&size_json=" + HttpUtility.UrlEncode(sizeRst, Encoding.UTF8) +
"&main_img=" + HttpUtility.UrlEncode(product?.carouselImageUrls?.FirstOrDefault(), Encoding.UTF8);
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"))
html = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
{
string msg = "选品商品保存失败!请检查网络连接:" + BaseRegex.GetStringJson(ref html, "msg");
OnInfoReceived(msg);
}
else
{
OnInfoReceived("选品商品保存成功!" + success_err_msg);
}
}
//// 创建 SaveFileDialog 的实例
//SaveFileDialog saveFileDialog = new SaveFileDialog();
//// 单线程单元(STA)模式运行文件对话框,否则会报错。
//System.Threading.Thread InvokeThread = new System.Threading.Thread(new System.Threading.ThreadStart(()=> {
// // 设置对话框的属性
// saveFileDialog.Title = "保存商品";
// saveFileDialog.Filter = "商品文件 (*.prd)|*.prd|所有文件 (*.*)|*.*"; // 过滤文件类型
// saveFileDialog.FileName = product.productId.ParseToString(); // 默认文件名
// saveFileDialog.DefaultExt = "txt"; // 默认文件扩展名
// // 显示对话框并获取结果
// if (saveFileDialog.ShowDialog() == DialogResult.OK)
// {
// // 用户点击了“保存”按钮,此时可以获取文件的路径
// string filePath = saveFileDialog.FileName;
// // 在这里处理文件保存逻辑,例如写入数据到文件
// System.IO.File.WriteAllText(filePath, result);
// //BaseMsgForm.ShowInfo("商品保存成功!");
// }
//}));
//InvokeThread.SetApartmentState(System.Threading.ApartmentState.STA);
//InvokeThread.Start();
//InvokeThread.Join();
}
catch (Exception ex)
{
}
});
return "success";
}
/// <summary>
/// 第三方获取商品并直接提交到第三方待上传列表
/// </summary>
/// <param name="sProdId"></param>
/// <param name="supplierId"></param>
/// <returns></returns>
public string getThirdProduct(string sProdId, long supplierId)
{
var prodId = sProdId.ParseToLong();
if (prodId <= 0)
{
BaseMsgForm.ShowError("商品Id不存在!");
return "failed";
}
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == supplierId.ToString());
if (supplierId <= 0 || shop == null)
{
BaseMsgForm.ShowError("店铺不存在!");
return "failed";
}
Task.Run(() =>
{
try
{
var sourceShop = shop;
var sourceProdId = prodId;
string success_err_msg = "";
string errorMsg = "";
var html = ProductQuery(sourceShop, sourceProdId.ToString());
if (!html.Contains("\"success\":true") || !html.Contains("\"result\""))
{
OnInfoReceived("商品获取失败!" + BaseRegex.GetStringJson(ref html, "errorMsg"));
return;
}
JObject obj = JObject.Parse(html);
var result = JsonHelper.SerializeObject(obj["result"]);
var sizeRst = "";
TemuDetailProductInfo product = JsonHelper.DeserializeJsonToObject<TemuDetailProductInfo>(result);
if (product.sizeTemplateId > 0)
{
html = SizeSpecQuery(sourceShop, sourceProdId.ToString(), product.sizeTemplateId.ToString());
if (!html.Contains("\"success\":true"))
{
success_err_msg += " 尺码表获取失败!" + BaseRegex.GetStringJson(ref html, "errorMsg");
}
else
{
obj = JObject.Parse(html);
sizeRst = JsonHelper.SerializeObject(obj["result"]);
}
}
List<ShopLoginInfo> shopLst = new List<ShopLoginInfo>();
ShopListForm.Instance.Invoke(new Action(() =>
{
ProductThirdSelectAddShopForm shopForm = new ProductThirdSelectAddShopForm();
shopForm.ShowDialog();
shopLst.AddRange(shopForm.lstSelectShop);
}));
var url = BaseClass.BuildObjString("product_third/add_product");
var data = UserLogin.GetSignaturex() +
"&spu_id=" + product?.productId +
"&skc_id=" + product?.productSkcList?.FirstOrDefault()?.productSkcId +
"&cat_id=" + GetCat(product).catId +
"&cat_name=" + HttpUtility.UrlEncode(GetCat(product).catName, Encoding.UTF8) +
"&ext_code=" + HttpUtility.UrlEncode(product?.productSkcList?.FirstOrDefault()?.extCode, Encoding.UTF8) +
"&product_name=" + HttpUtility.UrlEncode(product?.productName, Encoding.UTF8) +
"&product_json=" + HttpUtility.UrlEncode(result, Encoding.UTF8) +
"&size_json=" + HttpUtility.UrlEncode(sizeRst, Encoding.UTF8) +
"&main_img=" + HttpUtility.UrlEncode(product?.carouselImageUrls?.FirstOrDefault(), Encoding.UTF8);
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"))
html = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
{
errorMsg = "选品商品保存失败!请检查网络连接:" +
BaseRegex.GetStringJson(ref html, "msg").Replace("'", "\\'").Replace("\"", "\\\"");
}
var id = BaseRegex.GetLongJson(ref html, "id");
if (id == 0)
goto end;
foreach (var addProdShop in shopLst)
{
url = BaseClass.BuildObjString("product_third/add_user_select_product");
data = UserLogin.GetSignaturex() +
"&out_product_id=" + id +
"&shop_id=" + addProdShop.ShopId +
"&shop_account=" + addProdShop.ShopAccount +
"&main_user_name=" + addProdShop.UserName +
"&sub_user_name=" + addProdShop.SubUserName +
"&add_product_remaining=" + addProdShop.AddProductRemaining +
"&status=待上传";
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"))
html = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
{
errorMsg += product?.productId + " " + BaseRegex.GetStringJson(ref html, "msg") + "; ";
}
else
{
addProdShop.AddProductRemaining = addProdShop.AddProductRemaining - 1;
}
}
end:;
if (!string.IsNullOrEmpty(errorMsg))
{
OnInfoReceived(errorMsg);
}
else
{
OnInfoReceived("库存上传保存成功!" + success_err_msg);
}
}
catch (Exception ex)
{
OnInfoReceived("发生错误:" + ex.Message);
}
});
return "success";
}
TemuCat GetCat(TemuDetailProductInfo product)
{
if (product == null)
return new TemuCat();
var cat = product.categories.cat10;
if (string.IsNullOrWhiteSpace(cat.catName))
cat = product.categories.cat9;
if (string.IsNullOrWhiteSpace(cat.catName))
cat = product.categories.cat8;
if (string.IsNullOrWhiteSpace(cat.catName))
cat = product.categories.cat7;
if (string.IsNullOrWhiteSpace(cat.catName))
cat = product.categories.cat6;
if (string.IsNullOrWhiteSpace(cat.catName))
cat = product.categories.cat5;
if (string.IsNullOrWhiteSpace(cat.catName))
cat = product.categories.cat4;
if (string.IsNullOrWhiteSpace(cat.catName))
cat = product.categories.cat3;
if (string.IsNullOrWhiteSpace(cat.catName))
cat = product.categories.cat2;
if (string.IsNullOrWhiteSpace(cat.catName))
cat = product.categories.cat1;
return cat;
}
private string ProductQuery(ShopLoginInfo shop, string prodId)
{
string url = "https://seller.kuajingmaihuo.com/bg-visage-mms/product/query";
url = "https://agentseller.temu.com/visage-agent-seller/product/query";
string body = @"{""productId"":" + prodId + @",""productEditTaskUid"":""""}";
string refere = "https://seller.kuajingmaihuo.com/goods/product-create/product-edit?from=productList&productId=" + prodId;
refere = "https://agentseller.temu.com/goods/edit?from=productList&productId=" + prodId;
return HttpResponseBLL.PostResponse2(shop, url, body, refere);
}
private string SizeSpecQuery(ShopLoginInfo shop, string prodId, string sizeSpecId)
{
string url = "https://seller.kuajingmaihuo.com/bg-anniston-mms/sizespec/query";
url = "https://agentseller.temu.com/anniston-agent-seller/sizespec/query";
string body = @"{""businessId"":" + sizeSpecId + @",""reusable"":false}";
string refere = "https://seller.kuajingmaihuo.com/goods/product-create/product-edit?from=productList&productId=" + prodId;
refere = "https://agentseller.temu.com/goods/edit?from=productList&productId=" + prodId;
return HttpResponseBLL.PostResponse2(shop, url, body, refere);
}
}
}