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

935 lines
44 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 : BaseForm
{
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");
if (BaseClass.SaLevel != 1)
{
this.chkShowDelete.Visible = false;
dgvShop.Columns["colSubSa"].Visible = false;
btnSetSubSa.Visible = false;
}
}
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",
"复制Cookies",
"上传",
shop.OperateSubSaName,
"编辑",
"删除");
}));
}
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 cookJs = "";
foreach (var shopCook in shop.Cookies.Split(';'))
{
var cookie = shopCook.Trim();
if (cookie.StartsWith("mc-pc-cookie-captcha-token="))
continue;
//if (!cookie.StartsWith("SUB_PASS_ID") && !cookie.StartsWith("_nano_fp"))
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 shop.Cookies.Split(';'))
{
var cookie = shopCook.Trim();
if (cookie.StartsWith("mc-pc-cookie-captcha-token="))
continue;
if (!cookie.StartsWith("SUB_PASS_ID") && !cookie.StartsWith("_nano_fp"))
cookJs += "\r\ndocument.cookie='" + cookie + "; domain=.kuajingmaihuo.com;';";
else
cookJs += "\r\ndocument.cookie='" + cookie + "; domain=seller.kuajingmaihuo.com;';";
}
cookJs += "\r\nwindow.localStorage.setItem('" + "mall-info-id" + "', '" + shop.ShopId + "');";
cookJs += "\r\nsetTimeout(() => { window.location.href='https://seller.kuajingmaihuo.com'; }, 200)";
Clipboard.SetDataObject(cookJs);
BaseMsgForm.ShowInfo("复制成功");
break;
case "导入Cookies":
ShopUpdateCookieForm updateCookieForm = new ShopUpdateCookieForm(shop, SetCookieFromEnum.sa);
updateCookieForm.SaveComplete += UpdateCookieForm_SaveComplete;
updateCookieForm.ShowDialog();
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 UpdateCookieForm_SaveComplete(object obj)
{
Task.Run(() =>
{
//CheckShopListLogin(new string[] { (obj as DouShopLoginInfo).LoginName });
//RefreshDataGridView(false);
SearchShop(this.ucSplitPage1.CurrentPage);
});
}
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();
if (BaseClass.SaLevel > 1)
data += "&operate_sub_sa_name=" + BaseClass.UserName;
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");
shop.OperateSubSaName = BaseRegex.GetStringJson(ref shopStr, "operate_sub_sa_name");
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)
+ "&notes=" + 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)
+ "&notes=" + 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.Maximum = shopNames.Length;
this.statusBar.UpdateProgressBar(0);
}));
}
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;
}
}
#region 上传商品 旧
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);
}
#endregion
private void btnSetSubSa_Click(object sender, EventArgs e)
{
var lstLoginName = dgvShop.Rows.Cast<DataGridViewRow>().Where(row
=> row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colLoginName"]?.Value.ToString()).ToList();
var shopList = lstAdminShopInfo.Where(p => lstLoginName.Contains(p.LoginName)).ToArray();
if (shopList.Count() <= 0)
{
BaseMsgForm.ShowError("请选择要分配二级超管的店铺!");
return;
}
AdminShopAddSubSaForm subSaForm = new AdminShopAddSubSaForm(
shopList.Select(p => p.LoginName.ToString()).ToList()
);
subSaForm.SaveComplete += SubSaForm_SaveComplete;
subSaForm.ShowDialog();
}
private void SubSaForm_SaveComplete(object subSaName)
{
// 同店铺下商品分配给同一个二级超管
var lstLoginName = dgvShop.Rows.Cast<DataGridViewRow>().Where(row
=> row.Cells["colSelect"]?.Value.ParseToBool() == true).Select(r => r.Cells["colLoginName"]?.Value.ToString()).ToList();
var prodList = lstAdminShopInfo.Where(p => lstLoginName.Contains(p.LoginName)).ToArray();
var rows = dgvShop.Rows.Cast<DataGridViewRow>().Where(row => lstLoginName.Contains(row.Cells["colLoginName"]?.Value.ParseToString()));
foreach (var row in rows)
{
row.Cells["colSubSa"].Value = subSaName.ParseToString();
}
foreach (var p in prodList)
{
p.OperateSubSaName = subSaName.ParseToString();
}
}
}
}