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 lstAdminShopInfo = new List(); 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 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 "导入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 GetCheckedList() { List shopNameList = new List(); 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 AdminGetServerShop(out int pageCount, int page = 1, int pageSize = 50) { List list = new List(); 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) + "¬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 shopNameList = GetCheckedList(); if (!shopNameList.Any()) { BaseMsgForm.ShowError("请选择需要检测的店铺"); return; } Task.Run(() => { CheckShopListLogin(shopNameList.Distinct().ToArray()); SearchShop(this.ucSplitPage1.CurrentPage); }); } } /// /// 检测店铺授权状态 /// /// /// 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(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(); prodParam.goodsLayerDecorationCustomizeI18nReqs = prodInfo.goodsLayerDecorationCustomizeI18nVOList; prodParam.goodsLayerDecorationReqs = new List(); foreach (var goodsLayerDecorationVOInfo in (prodInfo.goodsLayerDecorationVOList == null ? new List() : prodInfo.goodsLayerDecorationVOList)) { var goodsLayerDecorationItem = new GoodsLayerDecorationReqsItem() { floorId = goodsLayerDecorationVOInfo.floorId, key = goodsLayerDecorationVOInfo.key, lang = goodsLayerDecorationVOInfo.lang, priority = goodsLayerDecorationVOInfo.priority, type = goodsLayerDecorationVOInfo.type, contentList = new List(), }; 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(); prodParam.materialImgUrl = prodInfo.materialImgUrl; prodParam.materialMultiLanguages = prodInfo.productLocalExtAttr.materialMultiLanguages != null ? prodInfo.productLocalExtAttr.materialMultiLanguages : new List(); prodParam.personalizationSwitch = prodInfo.productWhExtAttr.personalizationSwitch.ParseToInt(); var carouseVideoVOList = JsonHelper.SerializeObject(prodInfo.carouseVideoVOList); prodParam.productCarouseVideoReqList = JsonHelper.DeserializeJsonToList(carouseVideoVOList); if (prodParam.productCarouseVideoReqList == null) prodParam.productCarouseVideoReqList = new List(); //此处打开商品编辑详情无法获取到,如何查询存疑 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(); prodParam.productOuterPackageImageReqs = new List(); 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(); 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(); foreach(var specPropInfo in prodInfo.productSpecPropertyVOS) { try { var jStr = JsonHelper.SerializeObject(specPropInfo); ProductSpecPropertyReqsItem specItem = JsonHelper.DeserializeJsonToObject(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(); prodParam.sizeTemplateIds = prodInfo.sizeTemplateIds != null ? prodInfo.sizeTemplateIds : new List(); prodParam.productSkcReqs = new List(); foreach(var skcInfo in prodInfo.productSkcList) { ProductSkcReqsItem skcItem = new ProductSkcReqsItem(); skcItem.extCode = skcInfo.extCode; skcItem.isBasePlate = 0; skcItem.mainProductSkuSpecReqs = new List(); 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(); 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( JsonHelper.SerializeObject(skuInfo.productSkuMultiPack.productSkuNetContent)), skuClassification = skuInfo.productSkuMultiPack.skuClassification, }; skuItem.productSkuNonAuditExtAttrReq = JsonHelper.DeserializeJsonToObject( JsonHelper.SerializeObject(skuInfo.productSkuNonAuditExtAttr)); if (skuItem.productSkuNonAuditExtAttrReq == null) skuItem.productSkuNonAuditExtAttrReq = new ProductSkuNonAuditExtAttrReq(); skuItem.productSkuSpecReqs=new List(); 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( 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( 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( JsonHelper.SerializeObject(skuInfo.productSkuWhExtAttr.productSkuSensitiveLimit)), productSkuVolumeReq = JsonHelper.DeserializeJsonToObject( JsonHelper.SerializeObject(skuInfo.productSkuWhExtAttr.productSkuVolume)), productSkuWeightReq = JsonHelper.DeserializeJsonToObject( 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().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().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().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(); } } } }