854 lines
40 KiB
C#
854 lines
40 KiB
C#
using AllBase;
|
||
using AllBase.Model.Param.TemuProductManage;
|
||
using AllBase.Model.Result;
|
||
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.IO;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using TemuKJD.Extension;
|
||
using TemuKJD.KJDForms.BaseForms;
|
||
using TemuKJD.KJDForms.ShopForms;
|
||
using Work;
|
||
|
||
namespace TemuKJD.KJDForms.AdminForms
|
||
{
|
||
public partial class AdminShopForm : Form
|
||
{
|
||
public static List<ShopLoginInfo> lstAdminShopInfo = new List<ShopLoginInfo>();
|
||
|
||
public AdminShopForm()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
|
||
private void AdminShopForm_Load(object sender, EventArgs e)
|
||
{
|
||
this.ucSplitPage1.PageChange += UcSplitPage1_PageChange;
|
||
|
||
this.dgvShop.AddSelectorColumn("colSelect");
|
||
}
|
||
|
||
private void AdminShopForm_VisibleChanged(object sender, EventArgs e)
|
||
{
|
||
if (this.Visible == true)
|
||
{
|
||
this.pbLoading.Visible = true;
|
||
SearchShop(this.ucSplitPage1.CurrentPage);
|
||
}
|
||
}
|
||
|
||
private void UcSplitPage1_PageChange(object obj)
|
||
{
|
||
SearchShop(this.ucSplitPage1.CurrentPage);
|
||
}
|
||
|
||
public void SearchShop(int page)
|
||
{
|
||
if (InvokeRequired)
|
||
{
|
||
Invoke(new Action(() =>
|
||
{
|
||
this.pbLoading.Visible = true;
|
||
this.dgvShop.Rows.Clear();
|
||
lstAdminShopInfo.Clear();
|
||
}));
|
||
}
|
||
else
|
||
{
|
||
this.pbLoading.Visible = true;
|
||
this.dgvShop.Rows.Clear();
|
||
lstAdminShopInfo.Clear();
|
||
}
|
||
Task.Run(() =>
|
||
{
|
||
int pageCount;
|
||
var list = AdminGetServerShop(out pageCount, page);
|
||
lstAdminShopInfo.AddRange(list);
|
||
this.ucSplitPage1.TotalPage = pageCount;
|
||
|
||
foreach (var shop in lstAdminShopInfo)
|
||
{
|
||
Invoke(new Action(() =>
|
||
{
|
||
int rowIndex = this.dgvShop.Rows.Add(
|
||
false,
|
||
shop.LoginName,
|
||
shop.ShopId,
|
||
shop.ShopAccount,
|
||
shop.Notes,
|
||
shop.Cookies,
|
||
shop.UserName,
|
||
shop.SubUserName,
|
||
shop.GroupName,
|
||
shop.UploadAccount,
|
||
shop.BuyAccount,
|
||
shop.ChatAccount,
|
||
"",
|
||
"进入",
|
||
"检测",
|
||
string.IsNullOrWhiteSpace(shop.LoginStatus) ? "未登录" : shop.LoginStatus.Trim(),
|
||
"多重登录",
|
||
shop.ApiAuthStatus,
|
||
shop.BuyApiAuth.ApiAuthStatus,
|
||
"复制Cookies",
|
||
"上传",
|
||
"编辑",
|
||
"删除");
|
||
}));
|
||
}
|
||
|
||
Invoke(new Action(() =>
|
||
{
|
||
this.pbLoading.Visible = false;
|
||
}));
|
||
});
|
||
}
|
||
|
||
private void btnSearch_Click(object sender, EventArgs e)
|
||
{
|
||
if (this.ucSplitPage1.CurrentPage != 1)
|
||
this.ucSplitPage1.CurrentPage = 1;
|
||
else
|
||
SearchShop(1);
|
||
}
|
||
|
||
private void pnlEmpty_Click(object sender, EventArgs e)
|
||
{
|
||
this.txtUserName.Text = "";
|
||
this.txtLoginName.Text = "";
|
||
this.txtNotes.Text = "";
|
||
this.txtShopId.Text = "";
|
||
this.txtShopName.Text = "";
|
||
}
|
||
|
||
bool IsOperate = false;
|
||
private void btnLoginSelect_Click(object sender, EventArgs e)
|
||
{
|
||
IsOperate = true;
|
||
if (this.btnLoginSelect.Text == "登录选中")
|
||
{
|
||
List<string> shopLoginNameList = GetCheckedList();
|
||
if (!shopLoginNameList.Any())
|
||
{
|
||
BaseMsgForm.ShowError("请选择需要登录的店铺");
|
||
IsOperate = false;
|
||
return;
|
||
}
|
||
|
||
shopLoginNameList = shopLoginNameList.Distinct().ToList();
|
||
foreach (var loginName in shopLoginNameList)
|
||
{
|
||
if (IsOperate == false)
|
||
break;
|
||
|
||
var shopInfo = lstAdminShopInfo.FirstOrDefault(v => v.LoginName == loginName);
|
||
if (shopInfo != null && !string.IsNullOrEmpty(shopInfo.LoginName) && !string.IsNullOrEmpty(shopInfo.Password))
|
||
{
|
||
AdminShopLoginForm shopLoginForm = new AdminShopLoginForm(shopInfo);
|
||
shopLoginForm.openType = EnumOpenType.login;
|
||
shopLoginForm.ShowDialog();
|
||
}
|
||
}
|
||
if (shopLoginNameList.Count>0)
|
||
{
|
||
SearchShop(this.ucSplitPage1.CurrentPage);
|
||
}
|
||
}
|
||
IsOperate = false;
|
||
}
|
||
|
||
private void shopLoginForm_SaveComplete(object obj)
|
||
{
|
||
SearchShop(this.ucSplitPage1.CurrentPage);
|
||
}
|
||
|
||
private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||
{
|
||
if (e.ColumnIndex < 0 || e.RowIndex < 0)
|
||
return;
|
||
string headerText = dgvShop.Columns[e.ColumnIndex].HeaderText;
|
||
string loginName = dgvShop.Rows[e.RowIndex].Cells["colLoginName"].Value.ParseToString();
|
||
string accountId = dgvShop.Rows[e.RowIndex].Cells["colShopId"].Value.ParseToString();
|
||
var shop = lstAdminShopInfo.FirstOrDefault(v => v.LoginName == loginName && v.ShopId == accountId);
|
||
|
||
switch (headerText)
|
||
{
|
||
case "检测":
|
||
//CheckShopLoginAsync(new string[] { loginName });
|
||
break;
|
||
case "进入店铺":
|
||
IsOperate = true;
|
||
{
|
||
AdminShopLoginForm adminLoginForm = new AdminShopLoginForm(shop);
|
||
adminLoginForm.openType = EnumOpenType.manage;
|
||
adminLoginForm.WindowState = FormWindowState.Maximized;
|
||
adminLoginForm.Show();
|
||
}
|
||
IsOperate = false;
|
||
break;
|
||
case "复制Cookies":
|
||
string cook = shop.Cookies;
|
||
string cookJs = "";
|
||
foreach (var cookie in shop.Cookies.Split(';'))
|
||
{
|
||
cookJs += "\r\ndocument.cookie='" + cookie.Trim() + "';";
|
||
}
|
||
cookJs += "\r\nsetTimeout(() => { window.location.href='https://seller.kuajingmaihuo.com'; }, 200)";
|
||
Clipboard.SetDataObject(cookJs);
|
||
BaseMsgForm.ShowInfo("复制成功");
|
||
break;
|
||
case "删除":
|
||
if (BaseMsgForm.ShowConfirm("确定删除店铺吗?删除后不可恢复!").DialogResult == DialogResult.Cancel)
|
||
return;
|
||
AdminDelServerShop(shop);
|
||
break;
|
||
case "编辑":
|
||
ShopAddEditForm editForm = new ShopAddEditForm(shop);
|
||
editForm.SaveCompleteWithDescribe += EditForm_SaveCompleteWithDescribe;
|
||
editForm.ShowDialog();
|
||
break;
|
||
case "登录":
|
||
IsOperate = true;
|
||
{
|
||
AdminShopLoginForm shopLoginForm = new AdminShopLoginForm(shop);
|
||
shopLoginForm.openType = EnumOpenType.login;
|
||
shopLoginForm.SaveComplete += shopLoginForm_SaveComplete;
|
||
shopLoginForm.ShowDialog();
|
||
}
|
||
IsOperate = false;
|
||
break;
|
||
case "上传商品":
|
||
IsOperate = true;
|
||
{
|
||
UploadProduct(shop);
|
||
}
|
||
IsOperate = false;
|
||
break;
|
||
default:
|
||
dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = !(bool)dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value;
|
||
break;
|
||
}
|
||
}
|
||
|
||
private void EditForm_SaveCompleteWithDescribe(object obj, object isAdd)
|
||
{
|
||
var shopInfo = obj as ShopLoginInfo;
|
||
if (shopInfo != null)
|
||
{
|
||
if ((isAdd as bool?) == true)
|
||
{
|
||
var shop = lstAdminShopInfo.FirstOrDefault(v => v.LoginName == shopInfo.LoginName);
|
||
if (shop != null)
|
||
{
|
||
BaseMsgForm.ShowError("店铺" + shopInfo.LoginName + "已存在!");
|
||
}
|
||
else
|
||
{
|
||
AdminAddServerShop(shopInfo);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
AdminMdyServerShop(shopInfo);
|
||
}
|
||
SearchShop(this.ucSplitPage1.CurrentPage);
|
||
}
|
||
}
|
||
|
||
private List<string> GetCheckedList()
|
||
{
|
||
List<string> shopNameList = new List<string>();
|
||
for (int i = 0; i < dgvShop.Rows.Count; i++)
|
||
{
|
||
if (dgvShop.Rows[i].Cells["colSelect"].Value.ParseToBool())
|
||
{
|
||
string shopName = dgvShop.Rows[i].Cells["colLoginName"].Value.ParseToString();
|
||
shopNameList.Add(shopName);
|
||
}
|
||
}
|
||
return shopNameList;
|
||
}
|
||
|
||
public List<ShopLoginInfo> AdminGetServerShop(out int pageCount, int page = 1, int pageSize = 50)
|
||
{
|
||
List<ShopLoginInfo> list = new List<ShopLoginInfo>();
|
||
pageCount = 1;
|
||
|
||
var url = BaseClass.BuildObjString("shop/admin_get_shop_list");
|
||
var data = UserLogin.GetSignaturex() +
|
||
"&page=" + page +
|
||
"&page_size=" + pageSize +
|
||
"&search_user_name=" + txtUserName.Text.Trim() +
|
||
"&search_login_name=" + txtLoginName.Text.Trim() +
|
||
"&search_notes=" + txtNotes.Text.Trim() +
|
||
"&search_id=" + txtShopId.Text.Trim() +
|
||
"&search_name=" + txtShopName.Text.Trim();
|
||
var 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("shop_id") || !html.Contains("shop_account") || !html.Contains("login_pass"))
|
||
{
|
||
return list;
|
||
}
|
||
|
||
int count = BaseRegex.GetIntJson(ref html, "count");
|
||
pageCount = Math.Ceiling(1.0 * count / pageSize).ParseToInt();
|
||
pageCount = Math.Max(pageCount, 1);
|
||
|
||
var jArr = JObject.Parse(html)["data"];
|
||
if (jArr.Count() == 0)
|
||
return list;
|
||
foreach (JObject jObj in jArr)
|
||
{
|
||
string shopStr = jObj.ToString();
|
||
ShopLoginInfo shop = new ShopLoginInfo();
|
||
shop.DbId = BaseRegex.GetStringJson(ref shopStr, "id");
|
||
if (shop.DbId == null)
|
||
continue;
|
||
shop.LoginName = BaseRegex.GetStringJson(ref shopStr, "login_name");
|
||
shop.Password = BaseRegex.GetStringJson(ref shopStr, "login_pass");
|
||
shop.ShopId = BaseRegex.GetStringJson(ref shopStr, "shop_id");
|
||
shop.ShopAccount = BaseRegex.GetStringJson(ref shopStr, "shop_account");
|
||
shop.UserName = BaseRegex.GetStringJson(ref shopStr, "user_name");
|
||
shop.SubUserName = BaseRegex.GetStringJson(ref shopStr, "sub_user_name");
|
||
shop.GroupName = BaseRegex.GetStringJson(ref shopStr, "shop_group");
|
||
shop.Cookies = BaseRegex.GetStringJson(ref shopStr, "cookie");
|
||
shop.Cookies = shop.Cookies.Replace("&", "&").Replace("%", "%").Replace("+", "+");
|
||
shop.CompanyName = BaseRegex.GetStringJson(ref shopStr, "company_name");
|
||
shop.Notes = BaseRegex.GetStringJson(ref shopStr, "notes");
|
||
shop.LoginStatus = BaseRegex.GetStringJson(ref shopStr, "login_status");
|
||
|
||
list.Add(shop);
|
||
}
|
||
return list;
|
||
}
|
||
|
||
public static string AdminAddServerShop(ShopLoginInfo _shop)
|
||
{
|
||
var url = BaseClass.BuildObjString("shop/admin_add_shop");
|
||
var data = UserLogin.GetSignaturex()
|
||
+ "&shop_user_name=" + _shop.UserName
|
||
+ "&login_name=" + _shop.LoginName
|
||
+ "&login_pass=" + GetHtml.UrlEncodeUtf8(_shop.Password)
|
||
+ "&shop_id=" + _shop.ShopId
|
||
+ "&shop_account=" + _shop.ShopAccount
|
||
+ "&cookie=" + _shop.Cookies
|
||
+ "&shop_group=" + GetHtml.UrlEncodeUtf8(_shop.GroupName)
|
||
+ "&sub_user_name=" + GetHtml.UrlEncodeUtf8(_shop.SubUserName)
|
||
+ "¬es=" + GetHtml.UrlEncodeUtf8(_shop.Notes)
|
||
+ "&login_status=" + _shop.LoginStatus;
|
||
|
||
var result = GetHtml.PostUtf8(url, data);
|
||
if (!result.Contains("\"code\":200") && !result.Contains("已达上限") && !result.Contains("已存在"))
|
||
result = GetHtml.PostUtf8(url, data);
|
||
if (!result.Contains("\"code\":200") && !result.Contains("已达上限") && !result.Contains("已存在"))
|
||
result = GetHtml.PostUtf8(url, data);
|
||
if (!result.Contains("\"code\":200"))
|
||
{
|
||
var msg = BaseRegex.GetStringJson(ref result, "msg");
|
||
if (string.IsNullOrEmpty(msg))
|
||
msg = "店铺保存失败!";
|
||
BaseMsgForm.ShowError(msg);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
public static string AdminMdyServerShop(ShopLoginInfo _shop)
|
||
{
|
||
var url = BaseClass.BuildObjString("shop/admin_mdy_shop");
|
||
var data = UserLogin.GetSignaturex()
|
||
+ "&shop_user_name=" + _shop.UserName
|
||
+ "&login_name=" + _shop.LoginName
|
||
+ "&login_pass=" + GetHtml.UrlEncodeUtf8(_shop.Password)
|
||
+ "&shop_group=" + GetHtml.UrlEncodeUtf8(_shop.GroupName)
|
||
+ "&sub_user_name=" + GetHtml.UrlEncodeUtf8(_shop.SubUserName)
|
||
+ "¬es=" + GetHtml.UrlEncodeUtf8(_shop.Notes);
|
||
|
||
var result = GetHtml.PostUtf8(url, data);
|
||
if (!result.Contains("\"code\":200") && !result.Contains("已达上限") && !result.Contains("已存在"))
|
||
result = GetHtml.PostUtf8(url, data);
|
||
if (!result.Contains("\"code\":200") && !result.Contains("已达上限") && !result.Contains("已存在"))
|
||
result = GetHtml.PostUtf8(url, data);
|
||
if (!result.Contains("\"code\":200"))
|
||
{
|
||
var msg = BaseRegex.GetStringJson(ref result, "msg");
|
||
if (string.IsNullOrEmpty(msg))
|
||
msg = "店铺保存失败!";
|
||
BaseMsgForm.ShowError(msg);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
public void AdminDelServerShop(ShopLoginInfo _shop)
|
||
{
|
||
var url = BaseClass.BuildObjString("shop/admin_del_shop");
|
||
var data = UserLogin.GetSignaturex() + "&login_name=" + _shop.LoginName
|
||
+ "&shop_user_name=" + _shop.UserName;
|
||
var result = GetHtml.PostUtf8(url, data);
|
||
if (!result.Contains("\"code\":200"))
|
||
BaseMsgForm.ShowError("删除失败:" + BaseRegex.GetStringJson(ref result, "msg"));
|
||
else
|
||
{
|
||
SearchShop(this.ucSplitPage1.CurrentPage);
|
||
}
|
||
}
|
||
|
||
private void btnCheck_Click(object sender, EventArgs e)
|
||
{
|
||
if (this.btnCheck.Text == "检测选中")
|
||
{
|
||
List<string> shopNameList = GetCheckedList();
|
||
if (!shopNameList.Any())
|
||
{
|
||
BaseMsgForm.ShowError("请选择需要检测的店铺");
|
||
return;
|
||
}
|
||
|
||
Task.Run(() =>
|
||
{
|
||
CheckShopListLogin(shopNameList.Distinct().ToArray());
|
||
SearchShop(this.ucSplitPage1.CurrentPage);
|
||
});
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 检测店铺授权状态
|
||
/// </summary>
|
||
/// <param name="shopNames"></param>
|
||
/// <param name="isShowProgress"></param>
|
||
public void CheckShopListLogin(string[] shopNames, bool isShowProgress = true)
|
||
{
|
||
if (isShowProgress)
|
||
{
|
||
Invoke(new Action(() =>
|
||
{
|
||
this.pbLoading.Visible = true;
|
||
this.statusBar.lblTaskStatus.Text = "正在检测...";
|
||
this.statusBar.pgbTaskProgress.Value = 0;
|
||
this.statusBar.pgbTaskProgress.Maximum = shopNames.Length;
|
||
this.statusBar.pgbTaskProgress.Text = "0" + "/" + shopNames.Length;
|
||
}));
|
||
}
|
||
|
||
CheckShopLogin(shopNames, isShowProgress);
|
||
|
||
if (this.Created && isShowProgress)
|
||
{
|
||
this.Invoke(new Action(() =>
|
||
{
|
||
this.pbLoading.Visible = false;
|
||
this.statusBar.lblTaskStatus.Text = "检测完毕";
|
||
}));
|
||
}
|
||
}
|
||
|
||
public void CheckShopLogin(string[] shopNames, bool isShowProgress = true)
|
||
{
|
||
for (int i = 0; i < shopNames.Length; i++)
|
||
{
|
||
var shop = lstAdminShopInfo.FirstOrDefault(v => v.LoginName == shopNames[i]);
|
||
var campanys = lstAdminShopInfo.Where(v => v.LoginName == shopNames[i]).ToList();
|
||
if (shop != null)
|
||
{
|
||
//var loginResult = "\"code\":0";//GetShopStatus(shop);
|
||
var loginResult = ShopListForm.GetShopStatus(shop);
|
||
if (loginResult.Contains("\"success\":true"))
|
||
{
|
||
foreach (var sc in campanys)
|
||
{
|
||
sc.LoginStatus = "登录成功";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
foreach (var sc in campanys)
|
||
{
|
||
sc.LoginStatus = "未登录";
|
||
}
|
||
}
|
||
ShopListForm.UpdateServerShopCookies(shop, shop.Cookies); // 店铺cookie写入服务端,多店共用一个登录账号一组cookie
|
||
}
|
||
if (this.Created && isShowProgress)
|
||
{
|
||
this.Invoke(new Action(() =>
|
||
{
|
||
this.statusBar.lblTaskStatus.Text = "正在检测...";
|
||
this.statusBar.pgbTaskProgress.Value = (i + 1);
|
||
this.statusBar.pgbTaskProgress.Text = (i + 1) + "/" + shopNames.Length;
|
||
}));
|
||
}
|
||
}
|
||
}
|
||
|
||
private void chkShowDelete_CheckedChanged(object sender, EventArgs e)
|
||
{
|
||
if(chkShowDelete.Checked)
|
||
{
|
||
this.dgvShop.Columns["colEdit"].Visible = true;
|
||
this.dgvShop.Columns["colDelete"].Visible = true;
|
||
}
|
||
else
|
||
{
|
||
this.dgvShop.Columns["colEdit"].Visible = false;
|
||
this.dgvShop.Columns["colDelete"].Visible = false;
|
||
}
|
||
}
|
||
|
||
void UploadProduct(ShopLoginInfo shop)
|
||
{
|
||
if (shop==null || string.IsNullOrEmpty(shop.ShopId) || shop.LoginStatus != "登录成功")
|
||
{
|
||
BaseMsgForm.ShowError("店铺为空或未登录!");
|
||
return;
|
||
}
|
||
|
||
string text = "";
|
||
OpenFileDialog openFileDialog = new OpenFileDialog();
|
||
// 设置过滤条件,只显示文本文件
|
||
openFileDialog.Filter = "Text files (*.prd)|*.prd|All files (*.*)|*.*";
|
||
// 显示对话框并获取结果
|
||
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
||
{
|
||
try
|
||
{
|
||
// 读取文件内容
|
||
text = File.ReadAllText(openFileDialog.FileName);
|
||
// 显示文件内容
|
||
//Console.WriteLine(text);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
//Console.WriteLine("An error occurred: " + ex.Message);
|
||
BaseMsgForm.ShowError(ex.Message);
|
||
return;
|
||
}
|
||
}
|
||
if (!string.IsNullOrEmpty(text))
|
||
{
|
||
TemuProductInfo prodInfo = JsonHelper.DeserializeJsonToObject<TemuProductInfo>(text);
|
||
TemuProductParam prodParam = new TemuProductParam();
|
||
prodParam.carouselImageI18nReqs = prodInfo.carouselImageI18nVOList;
|
||
prodParam.carouselImageUrls = prodInfo.carouselImageUrls;
|
||
prodParam.cat1Id = prodInfo.categories.cat1.catId;
|
||
prodParam.cat2Id = prodInfo.categories.cat2.catId;
|
||
prodParam.cat3Id = prodInfo.categories.cat3.catId;
|
||
prodParam.cat4Id = prodInfo.categories.cat4.catId;
|
||
prodParam.cat5Id = prodInfo.categories.cat5.catId;
|
||
prodParam.cat6Id = prodInfo.categories.cat6.catId;
|
||
prodParam.cat7Id = prodInfo.categories.cat7.catId;
|
||
prodParam.cat8Id = prodInfo.categories.cat8.catId;
|
||
prodParam.cat9Id = prodInfo.categories.cat9.catId;
|
||
prodParam.cat10Id = prodInfo.categories.cat10.catId;
|
||
prodParam.goodsAdvantageLabelTypes = prodInfo.goodsAdvantageLabelVOList != null ?
|
||
prodInfo.goodsAdvantageLabelVOList : new List<object>();
|
||
prodParam.goodsLayerDecorationCustomizeI18nReqs = prodInfo.goodsLayerDecorationCustomizeI18nVOList;
|
||
prodParam.goodsLayerDecorationReqs = new List<GoodsLayerDecorationReqsItem>();
|
||
foreach (var goodsLayerDecorationVOInfo in
|
||
(prodInfo.goodsLayerDecorationVOList == null ? new List<TemuGoodsLayerDecorationVO>() : prodInfo.goodsLayerDecorationVOList))
|
||
{
|
||
var goodsLayerDecorationItem = new GoodsLayerDecorationReqsItem()
|
||
{
|
||
floorId = goodsLayerDecorationVOInfo.floorId,
|
||
key = goodsLayerDecorationVOInfo.key,
|
||
lang = goodsLayerDecorationVOInfo.lang,
|
||
priority = goodsLayerDecorationVOInfo.priority,
|
||
type = goodsLayerDecorationVOInfo.type,
|
||
contentList = new List<ContentListItem>(),
|
||
};
|
||
foreach (var contentInfo in goodsLayerDecorationVOInfo.contentList)
|
||
{
|
||
var contentItem = new ContentListItem()
|
||
{
|
||
width = contentInfo.width,
|
||
height = contentInfo.height,
|
||
imgUrl = contentInfo.imgUrl,
|
||
};
|
||
goodsLayerDecorationItem.contentList.Add(contentItem);
|
||
}
|
||
prodParam.goodsLayerDecorationReqs.Add(goodsLayerDecorationItem);
|
||
}
|
||
prodParam.goodsModelReqs = prodInfo.goodsModelList != null? prodInfo.goodsModelList : new List<object>();
|
||
prodParam.materialImgUrl = prodInfo.materialImgUrl;
|
||
prodParam.materialMultiLanguages = prodInfo.productLocalExtAttr.materialMultiLanguages != null ?
|
||
prodInfo.productLocalExtAttr.materialMultiLanguages : new List<object>();
|
||
prodParam.personalizationSwitch = prodInfo.productWhExtAttr.personalizationSwitch.ParseToInt();
|
||
|
||
var carouseVideoVOList = JsonHelper.SerializeObject(prodInfo.carouseVideoVOList);
|
||
prodParam.productCarouseVideoReqList = JsonHelper.DeserializeJsonToList<productCarouseVideoReqItem>(carouseVideoVOList);
|
||
if (prodParam.productCarouseVideoReqList == null)
|
||
prodParam.productCarouseVideoReqList = new List<productCarouseVideoReqItem>();
|
||
//此处打开商品编辑详情无法获取到,如何查询存疑
|
||
prodParam.productComplianceStatementReq = new ProductComplianceStatementReq
|
||
{
|
||
protocolVersion = "V1.0",
|
||
protocolUrl = "https://bdl.cdnfe.com/upload_bdl/seller-protocol/00f56a69-7bee-4768-8cef-e1682ffd58e3.html",
|
||
};
|
||
prodParam.productDetailVideoReqList = prodInfo.detailVideoVOList;
|
||
//是否需要存疑
|
||
prodParam.productDraftId = 0;
|
||
prodParam.productGuideFileI18nReqs = prodInfo.productGuideFileI18nList;
|
||
prodParam.productGuideFileNewReqList = prodInfo.productGuideFileNewVOList;
|
||
prodParam.productName = prodInfo.productName;
|
||
prodParam.productNonAuditExtAttrReq = new ProductNonAuditExtAttrReq()
|
||
{
|
||
california65WarningInfoReq = new California65WarningInfoReq()
|
||
{
|
||
california65ChemicalNames = prodInfo.productNonAuditExtAttr.california65WarningInfoVO.california65ChemicalNames,
|
||
},
|
||
cosmeticInfoReq = new CosmeticInfoReq()
|
||
{
|
||
},
|
||
};
|
||
//内容存疑
|
||
prodParam.productOriginCertFileReqs = new List<object>();
|
||
prodParam.productOuterPackageImageReqs = new List<ProductOuterPackageImageReqsItem>();
|
||
foreach (var picInfo in prodInfo.outerPackageImages)
|
||
{
|
||
prodParam.productOuterPackageImageReqs.Add(new ProductOuterPackageImageReqsItem()
|
||
{
|
||
imageUrl = picInfo.imageUrl,
|
||
});
|
||
}
|
||
prodParam.productOuterPackageReq = new ProductOuterPackageReq()
|
||
{
|
||
packageShape = prodInfo.productWhExtAttr.productOuterPackage.packageShape,
|
||
packageType = prodInfo.productWhExtAttr.productOuterPackage.packageType,
|
||
};
|
||
prodParam.productPropertyReqs = new List<ProductPropertyReqsItem>();
|
||
foreach (var propInfo in prodInfo.productPropertyList)
|
||
{
|
||
prodParam.productPropertyReqs.Add(new ProductPropertyReqsItem
|
||
{
|
||
numberInputValue = propInfo.numberInputValue,
|
||
pid = propInfo.pid,
|
||
propName = propInfo.propName,
|
||
propValue = propInfo.propValue,
|
||
refPid = propInfo.refPid,
|
||
templatePid = propInfo.templatePid,
|
||
valueExtendInfo = propInfo.valueExtendInfo,
|
||
valueUnit = propInfo.valueUnit,
|
||
vid = propInfo.vid,
|
||
});
|
||
}
|
||
prodParam.productSaleExtAttrReq = new ProductSaleExtAttrReq
|
||
{
|
||
bodyShape = prodInfo.productSaleExtAttr.bodyShape,
|
||
};
|
||
prodParam.productSpecPropertyReqs = new List<ProductSpecPropertyReqsItem>();
|
||
foreach(var specPropInfo in prodInfo.productSpecPropertyVOS)
|
||
{
|
||
try
|
||
{
|
||
var jStr = JsonHelper.SerializeObject(specPropInfo);
|
||
ProductSpecPropertyReqsItem specItem = JsonHelper.DeserializeJsonToObject<ProductSpecPropertyReqsItem>(jStr);
|
||
prodParam.productSpecPropertyReqs.Add(specItem);
|
||
}
|
||
catch (Exception ex) {
|
||
BaseMsgForm.ShowError(ex.Message);
|
||
}
|
||
}
|
||
prodParam.productWhExtAttrReq = new ProductWhExtAttrReq()
|
||
{
|
||
outerGoodsUrl = prodInfo.productWhExtAttr.outerGoodsUrl,
|
||
productOrigin = new ProductOrigin
|
||
{
|
||
countryShortName = prodInfo.productWhExtAttr.productOrigin.countryShortName,
|
||
region2Id = prodInfo.productWhExtAttr.productOrigin.region2Id,
|
||
},
|
||
};
|
||
prodParam.sensitiveTransNormalFileReqs= prodInfo.productWhExtAttr.sensitiveTransNormalFiles;
|
||
prodParam.showSizeTemplateIds = prodInfo.showSizeTemplateIds != null ? prodInfo.showSizeTemplateIds : new List<long?>();
|
||
prodParam.sizeTemplateIds = prodInfo.sizeTemplateIds != null ? prodInfo.sizeTemplateIds : new List<long?>();
|
||
|
||
prodParam.productSkcReqs = new List<ProductSkcReqsItem>();
|
||
foreach(var skcInfo in prodInfo.productSkcList)
|
||
{
|
||
ProductSkcReqsItem skcItem = new ProductSkcReqsItem();
|
||
skcItem.extCode = skcInfo.extCode;
|
||
skcItem.isBasePlate = 0;
|
||
skcItem.mainProductSkuSpecReqs = new List<MainProductSkuSpecReqsItem>();
|
||
foreach(var skuSpecInfo in skcInfo.productSkcSpecList)
|
||
{
|
||
skcItem.mainProductSkuSpecReqs.Add(new MainProductSkuSpecReqsItem
|
||
{
|
||
parentSpecId = skuSpecInfo.parentSpecId,
|
||
parentSpecName = skuSpecInfo.parentSpecName,
|
||
specId = skuSpecInfo.specId,
|
||
specName = skuSpecInfo.specName,
|
||
});
|
||
}
|
||
skcItem.previewImgUrls = skcInfo.previewImgUrls;
|
||
skcItem.productSkcCarouselImageI18nReqs = skcInfo.productSkcCarouselImageI18nVOList;
|
||
skcItem.productSkcId = 0;
|
||
skcItem.productSkuReqs = new List<ProductSkuReqsItem>();
|
||
foreach (var skuInfo in skcInfo.productSkuList)
|
||
{
|
||
ProductSkuReqsItem skuItem = new ProductSkuReqsItem();
|
||
skuItem.currencyType = skuInfo.currencyType;
|
||
skuItem.extCode = skuInfo.extCode;
|
||
skuItem.productSkuAccessoriesReq = new ProductSkuAccessoriesReq()
|
||
{
|
||
productSkuAccessories = skuInfo.productSkuSaleExtAttr.productSkuAccessories?.productSkuAccessories,
|
||
};
|
||
skuItem.productSkuId = 0;
|
||
skuItem.productSkuMultiPackReq = new ProductSkuMultiPackReq()
|
||
{
|
||
numberOfPieces = skuInfo.productSkuMultiPack.numberOfPieces,
|
||
pieceUnitCode = skuInfo.productSkuMultiPack.pieceUnitCode,
|
||
productSkuNetContentReq = JsonHelper.DeserializeJsonToObject<ProductSkuNetContentReq>(
|
||
JsonHelper.SerializeObject(skuInfo.productSkuMultiPack.productSkuNetContent)),
|
||
skuClassification = skuInfo.productSkuMultiPack.skuClassification,
|
||
};
|
||
skuItem.productSkuNonAuditExtAttrReq = JsonHelper.DeserializeJsonToObject<ProductSkuNonAuditExtAttrReq>(
|
||
JsonHelper.SerializeObject(skuInfo.productSkuNonAuditExtAttr));
|
||
if (skuItem.productSkuNonAuditExtAttrReq == null)
|
||
skuItem.productSkuNonAuditExtAttrReq = new ProductSkuNonAuditExtAttrReq();
|
||
skuItem.productSkuSpecReqs=new List<ProductSkuSpecReqsItem>();
|
||
int groupId = 0;
|
||
foreach(var skuSpecInfo in skuInfo.productSkuSpecList)
|
||
{
|
||
groupId++;
|
||
ProductSkuSpecReqsItem skuSpecItem = new ProductSkuSpecReqsItem()
|
||
{
|
||
groupId = groupId,
|
||
parentSpecId = skuSpecInfo.parentSpecId,
|
||
parentSpecName = skuSpecInfo.parentSpecName,
|
||
specId = skuSpecInfo.specId,
|
||
specName = skuSpecInfo.specName,
|
||
vid = prodParam.productSpecPropertyReqs.FirstOrDefault(p => p.specId == skuSpecInfo.specId)?.vid,
|
||
};
|
||
skuItem.productSkuSpecReqs.Add(skuSpecItem);
|
||
}
|
||
skuItem.productSkuSuggestedPriceReq = JsonHelper.DeserializeJsonToObject<ProductSkuSuggestedPriceReq>(
|
||
JsonHelper.SerializeObject(skuInfo.productSkuSuggestedPrice));
|
||
// 建议售价不能为空
|
||
if (skuItem.productSkuSuggestedPriceReq == null)
|
||
{
|
||
skuItem.productSkuSuggestedPriceReq = new ProductSkuSuggestedPriceReq();
|
||
}
|
||
if (skuItem.productSkuSuggestedPriceReq.suggestedPrice == null && skuItem.productSkuSuggestedPriceReq.specialSuggestedPrice == null)
|
||
{
|
||
skuItem.productSkuSuggestedPriceReq.specialSuggestedPrice = "NA";
|
||
}
|
||
skuItem.productSkuThumbUrlI18nReqs = skuInfo.productSkuThumbUrlI18nVOList;
|
||
skuItem.productSkuUsSuggestedPriceReq = JsonHelper.DeserializeJsonToObject<ProductSkuUsSuggestedPriceReq>(
|
||
JsonHelper.SerializeObject(skuInfo.productSkuUsSuggestedPrice));
|
||
skuItem.productSkuWhExtAttrReq = new ProductSkuWhExtAttrReq()
|
||
{
|
||
productSkuBarCodeReqs = skuInfo.productSkuWhExtAttr.productSkuBarCodes,
|
||
productSkuSensitiveAttrReq = new ProductSkuSensitiveAttrReq()
|
||
{
|
||
isSensitive = skuInfo.productSkuWhExtAttr.productSkuSensitiveAttr.isSensitive,
|
||
sensitiveList = skuInfo.productSkuWhExtAttr.productSkuSensitiveAttr.sensitiveList,
|
||
},
|
||
productSkuSensitiveLimitReq = JsonHelper.DeserializeJsonToObject<ProductSkuSensitiveLimitReq>(
|
||
JsonHelper.SerializeObject(skuInfo.productSkuWhExtAttr.productSkuSensitiveLimit)),
|
||
productSkuVolumeReq = JsonHelper.DeserializeJsonToObject<ProductSkuVolumeReq>(
|
||
JsonHelper.SerializeObject(skuInfo.productSkuWhExtAttr.productSkuVolume)),
|
||
productSkuWeightReq = JsonHelper.DeserializeJsonToObject<ProductSkuWeightReq>(
|
||
JsonHelper.SerializeObject(skuInfo.productSkuWhExtAttr.productSkuWeight)),
|
||
};
|
||
skuItem.supplierPrice = skuInfo.supplierPrice;
|
||
skuItem.thumbUrl = skuInfo.thumbUrl;
|
||
|
||
skcItem.productSkuReqs.Add(skuItem);
|
||
}
|
||
prodParam.productSkcReqs.Add(skcItem);
|
||
}
|
||
|
||
long catId = prodParam.cat10Id.ParseToLong();
|
||
if (catId == 0) catId = prodParam.cat9Id.ParseToLong();
|
||
if (catId == 0) catId = prodParam.cat8Id.ParseToLong();
|
||
if (catId == 0) catId = prodParam.cat7Id.ParseToLong();
|
||
if (catId == 0) catId = prodParam.cat6Id.ParseToLong();
|
||
if (catId == 0) catId = prodParam.cat5Id.ParseToLong();
|
||
if (catId == 0) catId = prodParam.cat4Id.ParseToLong();
|
||
if (catId == 0) catId = prodParam.cat3Id.ParseToLong();
|
||
if (catId == 0) catId = prodParam.cat2Id.ParseToLong();
|
||
if (catId == 0) catId = prodParam.cat1Id.ParseToLong();
|
||
|
||
var html = AddDraft(shop, catId.ToString());
|
||
if (html.Contains("{\"success\":true"))
|
||
prodParam.productDraftId = BaseRegex.GetLongJson(ref html, "productDraftId");
|
||
else
|
||
{
|
||
var error = BaseRegex.GetStringJson(ref html, "errorMsg");
|
||
BaseMsgForm.ShowError("上传失败" + error);
|
||
return;
|
||
}
|
||
|
||
if (prodParam.productDraftId <= 0)
|
||
{
|
||
BaseMsgForm.ShowError("上传失败" + html);
|
||
return;
|
||
}
|
||
|
||
string upLoadRst1 = "";
|
||
string upLoadRst2 = "";
|
||
html = SaveDraft(shop, prodParam.productDraftId.ToString(), prodParam);
|
||
if (html.Contains("{\"success\":true"))
|
||
upLoadRst1 = "上传草稿箱成功";
|
||
else
|
||
{
|
||
var error = BaseRegex.GetStringJson(ref html, "errorMsg");
|
||
BaseMsgForm.ShowError("上传草稿箱失败" + error);
|
||
return;
|
||
}
|
||
|
||
Thread.Sleep(Randomx.GetId(2000, 3000));
|
||
html = AddProduct(shop, prodParam.productDraftId.ToString(), prodParam);
|
||
if (html.Contains("{\"success\":true"))
|
||
BaseMsgForm.ShowInfo("上传商品成功");
|
||
else
|
||
{
|
||
var error = BaseRegex.GetStringJson(ref html, "errorMsg");
|
||
if (string.IsNullOrWhiteSpace(error))
|
||
error = BaseRegex.GetStringJson(ref html, "error_msg");
|
||
BaseMsgForm.ShowError(("上传商品失败\r\n" + error + "\r\n请在草稿箱查找商品!").Replace("\r\n\r\n","\r\n"));
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
private string AddDraft(ShopLoginInfo shop, string catId)
|
||
{
|
||
string url = "https://seller.kuajingmaihuo.com/bg-visage-mms/product/draft/add";
|
||
string refere = "https://seller.kuajingmaihuo.com/goods/product-create/category?from=productList";
|
||
string body = @"{""catId"":" + catId + "}";
|
||
return KJDHttpResponse.PostResponse(shop, url, body, refere);
|
||
}
|
||
|
||
private string SaveDraft(ShopLoginInfo shop, string draftId, TemuProductParam prodParam)
|
||
{
|
||
string url = "https://seller.kuajingmaihuo.com/bg-visage-mms/product/draft/save";
|
||
string body = JsonHelper.SerializeObject(prodParam);
|
||
string refere = "https://seller.kuajingmaihuo.com/goods/product-create/product-edit?productDraftId=" +
|
||
draftId + "&from=productDraftList";
|
||
return KJDHttpResponse.PostResponse(shop, url, body, refere);
|
||
}
|
||
|
||
|
||
private string AddProduct(ShopLoginInfo shop, string draftId, TemuProductParam prodParam)
|
||
{
|
||
string url = "https://seller.kuajingmaihuo.com/bg-visage-mms/product/add";
|
||
string body = JsonHelper.SerializeObject(prodParam);
|
||
string refere = "https://seller.kuajingmaihuo.com/goods/product-create/product-edit?productDraftId=" +
|
||
draftId + "&from=productDraftList";
|
||
return KJDHttpResponse.PostResponse(shop, url, body, refere);
|
||
}
|
||
}
|
||
}
|