diff --git a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.cs b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.cs index ce1db89..fd6e57a 100644 --- a/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.cs +++ b/TEMUKJD/PDDForms/ProductSelectForms/PDDDBProdListForm.cs @@ -26,6 +26,7 @@ using System.Windows.Forms; using TemuKJD.BaseForms; using TemuKJD.BLL; using TemuKJD.Extension; +using TemuKJD.KJDForms.ProductForms.TemuJitSubForms; using TemuKJD.ToolForms; using TemuKJD.WXForms.ProductForms; using Work; @@ -1586,9 +1587,13 @@ namespace TemuKJD.PDDForms.ProductSelectForms } } - public static void GetProdWxCat(KJDDBProduct prod, DataGridViewRow row) + public static void GetProdWxCat(KJDDBProduct prod, DataGridViewRow row, ShopLoginInfo _shop = null) { - var shop = GlobalConfig.ShopLoginList.OrderBy(x => Guid.NewGuid()).FirstOrDefault(); + ShopLoginInfo shop = null; + if (_shop != null) + shop = _shop; + else + shop = GlobalConfig.ShopLoginList.OrderBy(x => Guid.NewGuid()).FirstOrDefault(); WXShopTokenInfo token = WXDBProdUploadForm.lstWXShopTokenInfo.FirstOrDefault(t => t.shopId == shop.ShopId); for (int i = 0; i < 5; i++) { @@ -1610,10 +1615,10 @@ namespace TemuKJD.PDDForms.ProductSelectForms } } // 如果店铺token不可用,随机获取一个上传图片的accessToken - if (token == null || token.isExpire || string.IsNullOrEmpty(token.accessToken)) + if (_shop == null && (token == null || token.isExpire || string.IsNullOrEmpty(token.accessToken))) { // 获取微信accessToken - //token = new WxApiBLL().GetRandomWxToken(); + token = new WxApiBLL().GetRandomWxToken(); shop = GlobalConfig.ShopLoginList.OrderBy(x => Guid.NewGuid()).FirstOrDefault(); token = WXDBProdUploadForm.lstWXShopTokenInfo.FirstOrDefault(t => t.shopId == shop.ShopId); @@ -1631,13 +1636,17 @@ namespace TemuKJD.PDDForms.ProductSelectForms obj["req_type"] = 1; obj["head_imgs"] = new JArray(); - var dbProd = PDDDBProdEditForm.GetPddProductDetail(prod.id.ParseToString()); + KJDDBProduct dbProd = null; + if (prod.db_type == "云端数据") + dbProd = prod; + else + dbProd = PDDDBProdEditForm.GetPddProductDetail(prod.id.ParseToString()); List mainImgLst3 = new List(); string productTitle = ""; if (dbProd.product_get_type_text == "厂商直采" || dbProd.product_get_type_text == "1688厂家" || dbProd.product_get_type_text == "1688外部数据" || dbProd.product_get_type_text == "微信小店" || dbProd.product_get_type_text == "微信店采" || dbProd.product_get_type_text == "机会商品" || - dbProd.product_get_type_text == "多多外部数据" || dbProd.product_get_type_text == "微信外部数据") + dbProd.product_get_type_text == "多多外部数据" || dbProd.product_get_type_text == "微信外部数据" || dbProd.db_type == "云端数据") { if ((dbProd.product_get_type_text == "微信小店" || dbProd.product_get_type_text == "微信店采") && dbProd.wx_cat_leaf != null) { @@ -1717,7 +1726,8 @@ namespace TemuKJD.PDDForms.ProductSelectForms mainImgLst3 = pInfo.detail.galleries.Where(g => g.type == 1).Take(3).Select(s => s.url).ToList(); productTitle = pInfo.detail.goods_name; } - if (dbProd.product_get_type_text == "机会商品" || dbProd.product_get_type_text == "多多外部数据" || dbProd.product_get_type_text == "微信外部数据") + if (dbProd.product_get_type_text == "机会商品" || dbProd.product_get_type_text == "多多外部数据" || dbProd.product_get_type_text == "微信外部数据" || + dbProd.db_type == "云端数据") { string convertRst = ""; var pInfo = JsonHelper.DeserializeJsonToObject(dbProd.product_json); @@ -1757,6 +1767,8 @@ namespace TemuKJD.PDDForms.ProductSelectForms var html = GetHtml.PostUtf8(url, data); if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) html = GetHtml.PostUtf8(url, data); + + throw new Exception("商品图片链接失效"); } } // 上传图片识别 @@ -1804,6 +1816,10 @@ namespace TemuKJD.PDDForms.ProductSelectForms data1 += "&post_data=" + GetHtml.UrlEncodeUtf8(post_data); var html1 = GetHtml.PostUtf8(url1, data1); var catId = BaseRegex.GetStringJson(ref html1, "cat_id"); + if (string.IsNullOrEmpty(catId)) + { + throw new Exception(BaseRegex.GetStringJsonByRegs(ref html1, html1, "errMsg", "err_msg", "errorMsg", "error_msg")); + } var jCatFirstLst = JsonHelper.JObjectParse(html1)["categories"].FirstOrDefault()["cats"] as JArray; int index = 0; @@ -1934,6 +1950,8 @@ namespace TemuKJD.PDDForms.ProductSelectForms } catch (Exception ex) { + if (row == null) + throw new Exception(ex.Message); } } diff --git a/TEMUKJD/WXForms/ProductForms/WXDBProdUploadForm.cs b/TEMUKJD/WXForms/ProductForms/WXDBProdUploadForm.cs index 701099d..78212ef 100644 --- a/TEMUKJD/WXForms/ProductForms/WXDBProdUploadForm.cs +++ b/TEMUKJD/WXForms/ProductForms/WXDBProdUploadForm.cs @@ -2771,99 +2771,118 @@ namespace TemuKJD.WXForms.ProductForms } else { - //------------------------------------------------------------------------------------------------------------------------------------- - // ai识别类目暂存主图位置 - int imgId = 0; - string tempImgPath = Path.GetTempPath().Trim('\\') + "\\" + Randomx.GetWordWithNumber(8).ToLower(); - List tempImgFullPathLst = new List(); - //------------------------------------------------------------------------------------------------------------------------------------- - // 生成ai识别类目所需图片 - var aiGalleries = prodInfo.detail.galleries.Where(g => g.type == 1).Take(3).ToList(); - foreach (var gallery_item in aiGalleries) // 9张主图 - { - imgId++; - string getImgError; - var imgUrl = gallery_item.url; - { - if (!imgUrl.Contains("wxapp") && imgUrl.Contains("mmecimage.cn")) - imgUrl = imgUrl.Replace("https://", "http://"); - } - var image = GetHtml.GetUrlImg(imgUrl, out getImgError); - var imageBg = new Bitmap(800, 800); - if (!string.IsNullOrEmpty(getImgError) || image == null) - { - return "{\"success\":false,\"draftId\":0,\"status\":\"未上传\",\"errMsg\":\"初始化主图上传失败\"}"; - } - using (Graphics g = Graphics.FromImage(imageBg)) - { - g.DrawImage(image, new Rectangle(0, 0, imageBg.Width, imageBg.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel); - } - - // 取前三张图片保存到系统temp路径,配合商品标题获取商品类目 - if (imgId <= 3) - { - if (!Directory.Exists(tempImgPath)) - Directory.CreateDirectory(tempImgPath); - string imgFullPath = tempImgPath + "\\图片" + imgId + ".jpg"; - tempImgFullPathLst.Add(imgFullPath); - if (imgId == 1) - { - try - { - image.Save(imgFullPath, System.Drawing.Imaging.ImageFormat.Jpeg); - } - catch - { - // 真实图像失败传假图也能识别 - int fileSize = Randomx.GetId(1024, 10240); - using (BinaryWriter writer = new BinaryWriter(File.Create(imgFullPath))) - { - for (int i = 0; i < fileSize; i++) - { - writer.Write((byte)Randomx.GetId(256)); // 生成0到255之间的随机字节 - } - } - } - } - else - { - // 只需要传一张真实图像即可 - int fileSize = Randomx.GetId(1024, 10240); - using (BinaryWriter writer = new BinaryWriter(File.Create(imgFullPath))) - { - for (int i = 0; i < fileSize; i++) - { - writer.Write((byte)Randomx.GetId(256)); // 生成0到255之间的随机字节 - } - } - } - } - } - Thread.Sleep(Randomx.GetId(100, 300)); - //------------------------------------------------------------------------------------------------------------------------------------- - // 根据Ai分类,获取类目信息 - //{"code":0,"predInfo":{"firstCatRes":[{"catId":10000111,"catName":"服饰内衣","level":1},{"catId":10000111,"catName":"服饰内衣","level":1},{"catId":10000111,"catName":"服饰内衣","level":1}],"secondCatRes":[{"catId":10000113,"catName":"女装","level":2},{"catId":10000113,"catName":"女装","level":2},{"catId":10000113,"catName":"女装","level":2}],"thirdCatRes":[{"catId":547705,"catName":"牛仔裤","level":3,"modelVersion":""},{"catId":547704,"catName":"加绒裤","level":3,"modelVersion":"商品标题含'加绒加厚、保暖'等关键词,这表示裤子具备加绒保暖功能。主图展示了加绒内衬,也符合【服饰内衣:女装:裤子:加绒裤】类目特征。"},{"catId":547701,"catName":"休闲裤","level":3,"modelVersion":""}],"singleSecondCatRes":[],"singleFirstCatRes":[],"isSupportedCate":1},"aiCategoryList":[{"id":547705,"paths":[{"id":"10000111","name":"服饰内衣","sonIdList":["10000397","10000115","10000112","10000113","10000114"],"fId":"0","level":1,"leaf":false},{"id":"10000113","name":"女装","sonIdList":["546810","546811","530041","547706","6090","6089","6088","6087","6083","6076","6073","6070","6065","6063","6058","10000672","10000671","10000670","10000669","10000668","10000667","10000666","10000665","10000664","10000663","10000662","10000661","10000660","10000659","10000658","10000657","10000656","10000655"],"fId":"10000111","level":2,"leaf":false},{"id":"10000672","name":"裤子","sonIdList":["547699","547700","547701","547702","547703","547704","547705"],"fId":"10000113","level":3,"leaf":false},{"id":"547705","name":"牛仔裤","fId":"10000672","level":4,"leaf":true,"state":0,"hasTrialCategory":false,"isTrialCategory":false,"isLocalLife":false}],"depositAmount":0,"catAuth":true,"limitSubjectTypes":[]},{"id":547704,"paths":[{"id":"10000111","name":"服饰内衣","sonIdList":["10000397","10000115","10000112","10000113","10000114"],"fId":"0","level":1,"leaf":false},{"id":"10000113","name":"女装","sonIdList":["546810","546811","530041","547706","6090","6089","6088","6087","6083","6076","6073","6070","6065","6063","6058","10000672","10000671","10000670","10000669","10000668","10000667","10000666","10000665","10000664","10000663","10000662","10000661","10000660","10000659","10000658","10000657","10000656","10000655"],"fId":"10000111","level":2,"leaf":false},{"id":"10000672","name":"裤子","sonIdList":["547699","547700","547701","547702","547703","547704","547705"],"fId":"10000113","level":3,"leaf":false},{"id":"547704","name":"加绒裤","fId":"10000672","level":4,"leaf":true,"state":0,"hasTrialCategory":false,"isTrialCategory":false,"isLocalLife":false}],"depositAmount":0,"catAuth":true,"limitSubjectTypes":[]},{"id":547701,"paths":[{"id":"10000111","name":"服饰内衣","sonIdList":["10000397","10000115","10000112","10000113","10000114"],"fId":"0","level":1,"leaf":false},{"id":"10000113","name":"女装","sonIdList":["546810","546811","530041","547706","6090","6089","6088","6087","6083","6076","6073","6070","6065","6063","6058","10000672","10000671","10000670","10000669","10000668","10000667","10000666","10000665","10000664","10000663","10000662","10000661","10000660","10000659","10000658","10000657","10000656","10000655"],"fId":"10000111","level":2,"leaf":false},{"id":"10000672","name":"裤子","sonIdList":["547699","547700","547701","547702","547703","547704","547705"],"fId":"10000113","level":3,"leaf":false},{"id":"547701","name":"休闲裤","fId":"10000672","level":4,"leaf":true,"state":0,"hasTrialCategory":false,"isTrialCategory":false,"isLocalLife":false}],"depositAmount":0,"catAuth":true,"limitSubjectTypes":[]}],"version":"ProductClsRAG","noQualificationCatIds":[547705,547704,547701],"depositCatInfos":[{"catId":547705,"amountToPay":0,"error":false},{"catId":547704,"amountToPay":0,"error":false},{"catId":547701,"amountToPay":0,"error":false}],"visionCallMethod":"ProductClsRAG"} - var productClassifyRst = WXUpload.getProductClassify(shop, upProdInitParam.product.info.title, tempImgFullPathLst); - if (!productClassifyRst.Contains("\"code\":0")) - { - var error = BaseRegex.GetStringJson(ref productClassifyRst, "msg"); - if (string.IsNullOrEmpty(error)) - error = productClassifyRst; - return "{\"success\":false,\"draftId\":0,\"status\":\"未上传\",\"errMsg\":\"获取类目失败 " + error + "\"}"; - } - WXGetProdCateInfo cateInfo = new WXGetProdCateInfo(); try { - cateInfo = JsonHelper.DeserializeJsonToObject(productClassifyRst); - foreach (var catePath in cateInfo.aiCategoryList.FirstOrDefault().paths) - { - aiCateIdLst.Add(catePath.id.ParseToLong()); - } + PDDDBProdListForm.GetProdWxCat(dbProd, null, shop); + + if (!dbProd.wx_cat_1.IsNullOrZero()) + aiCateIdLst.Add(dbProd.wx_cat_1.ParseToLong()); + if (!dbProd.wx_cat_2.IsNullOrZero()) + aiCateIdLst.Add(dbProd.wx_cat_2.ParseToLong()); + if (!dbProd.wx_cat_3.IsNullOrZero()) + aiCateIdLst.Add(dbProd.wx_cat_3.ParseToLong()); + if (!dbProd.wx_cat_leaf.IsNullOrZero()) + aiCateIdLst.Add(dbProd.wx_cat_leaf.ParseToLong()); + aiCateIdLst = aiCateIdLst.Distinct().ToList(); } catch (Exception ex) { - return "{\"success\":false,\"draftId\":0,\"status\":\"未上传\",\"errMsg\":\"" + "根据图片获取类目失败 " + ex.Message + "\"}"; + return "{\"success\":false,\"draftId\":0,\"status\":\"未上传\",\"errMsg\":\"获取类目失败 " + ex.Message + "\"}"; } + + ////------------------------------------------------------------------------------------------------------------------------------------- + //// ai识别类目暂存主图位置 (模拟接口暂时废弃) + //int imgId = 0; + //string tempImgPath = Path.GetTempPath().Trim('\\') + "\\" + Randomx.GetWordWithNumber(8).ToLower(); + //List tempImgFullPathLst = new List(); + ////------------------------------------------------------------------------------------------------------------------------------------- + //// 生成ai识别类目所需图片 + //var aiGalleries = prodInfo.detail.galleries.Where(g => g.type == 1).Take(3).ToList(); + //foreach (var gallery_item in aiGalleries) // 9张主图 + //{ + // imgId++; + // string getImgError; + // var imgUrl = gallery_item.url; + // { + // if (!imgUrl.Contains("wxapp") && imgUrl.Contains("mmecimage.cn")) + // imgUrl = imgUrl.Replace("https://", "http://"); + // } + // var image = GetHtml.GetUrlImg(imgUrl, out getImgError); + // var imageBg = new Bitmap(800, 800); + // if (!string.IsNullOrEmpty(getImgError) || image == null) + // { + // return "{\"success\":false,\"draftId\":0,\"status\":\"未上传\",\"errMsg\":\"初始化主图上传失败\"}"; + // } + // using (Graphics g = Graphics.FromImage(imageBg)) + // { + // g.DrawImage(image, new Rectangle(0, 0, imageBg.Width, imageBg.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel); + // } + + // // 取前三张图片保存到系统temp路径,配合商品标题获取商品类目 + // if (imgId <= 3) + // { + // if (!Directory.Exists(tempImgPath)) + // Directory.CreateDirectory(tempImgPath); + // string imgFullPath = tempImgPath + "\\图片" + imgId + ".jpg"; + // tempImgFullPathLst.Add(imgFullPath); + // if (imgId == 1) + // { + // try + // { + // image.Save(imgFullPath, System.Drawing.Imaging.ImageFormat.Jpeg); + // } + // catch + // { + // // 真实图像失败传假图也能识别 + // int fileSize = Randomx.GetId(1024, 10240); + // using (BinaryWriter writer = new BinaryWriter(File.Create(imgFullPath))) + // { + // for (int i = 0; i < fileSize; i++) + // { + // writer.Write((byte)Randomx.GetId(256)); // 生成0到255之间的随机字节 + // } + // } + // } + // } + // else + // { + // // 只需要传一张真实图像即可 + // int fileSize = Randomx.GetId(1024, 10240); + // using (BinaryWriter writer = new BinaryWriter(File.Create(imgFullPath))) + // { + // for (int i = 0; i < fileSize; i++) + // { + // writer.Write((byte)Randomx.GetId(256)); // 生成0到255之间的随机字节 + // } + // } + // } + // } + //} + //Thread.Sleep(Randomx.GetId(100, 300)); + ////------------------------------------------------------------------------------------------------------------------------------------- + //// 根据Ai分类,获取类目信息 + ////{"code":0,"predInfo":{"firstCatRes":[{"catId":10000111,"catName":"服饰内衣","level":1},{"catId":10000111,"catName":"服饰内衣","level":1},{"catId":10000111,"catName":"服饰内衣","level":1}],"secondCatRes":[{"catId":10000113,"catName":"女装","level":2},{"catId":10000113,"catName":"女装","level":2},{"catId":10000113,"catName":"女装","level":2}],"thirdCatRes":[{"catId":547705,"catName":"牛仔裤","level":3,"modelVersion":""},{"catId":547704,"catName":"加绒裤","level":3,"modelVersion":"商品标题含'加绒加厚、保暖'等关键词,这表示裤子具备加绒保暖功能。主图展示了加绒内衬,也符合【服饰内衣:女装:裤子:加绒裤】类目特征。"},{"catId":547701,"catName":"休闲裤","level":3,"modelVersion":""}],"singleSecondCatRes":[],"singleFirstCatRes":[],"isSupportedCate":1},"aiCategoryList":[{"id":547705,"paths":[{"id":"10000111","name":"服饰内衣","sonIdList":["10000397","10000115","10000112","10000113","10000114"],"fId":"0","level":1,"leaf":false},{"id":"10000113","name":"女装","sonIdList":["546810","546811","530041","547706","6090","6089","6088","6087","6083","6076","6073","6070","6065","6063","6058","10000672","10000671","10000670","10000669","10000668","10000667","10000666","10000665","10000664","10000663","10000662","10000661","10000660","10000659","10000658","10000657","10000656","10000655"],"fId":"10000111","level":2,"leaf":false},{"id":"10000672","name":"裤子","sonIdList":["547699","547700","547701","547702","547703","547704","547705"],"fId":"10000113","level":3,"leaf":false},{"id":"547705","name":"牛仔裤","fId":"10000672","level":4,"leaf":true,"state":0,"hasTrialCategory":false,"isTrialCategory":false,"isLocalLife":false}],"depositAmount":0,"catAuth":true,"limitSubjectTypes":[]},{"id":547704,"paths":[{"id":"10000111","name":"服饰内衣","sonIdList":["10000397","10000115","10000112","10000113","10000114"],"fId":"0","level":1,"leaf":false},{"id":"10000113","name":"女装","sonIdList":["546810","546811","530041","547706","6090","6089","6088","6087","6083","6076","6073","6070","6065","6063","6058","10000672","10000671","10000670","10000669","10000668","10000667","10000666","10000665","10000664","10000663","10000662","10000661","10000660","10000659","10000658","10000657","10000656","10000655"],"fId":"10000111","level":2,"leaf":false},{"id":"10000672","name":"裤子","sonIdList":["547699","547700","547701","547702","547703","547704","547705"],"fId":"10000113","level":3,"leaf":false},{"id":"547704","name":"加绒裤","fId":"10000672","level":4,"leaf":true,"state":0,"hasTrialCategory":false,"isTrialCategory":false,"isLocalLife":false}],"depositAmount":0,"catAuth":true,"limitSubjectTypes":[]},{"id":547701,"paths":[{"id":"10000111","name":"服饰内衣","sonIdList":["10000397","10000115","10000112","10000113","10000114"],"fId":"0","level":1,"leaf":false},{"id":"10000113","name":"女装","sonIdList":["546810","546811","530041","547706","6090","6089","6088","6087","6083","6076","6073","6070","6065","6063","6058","10000672","10000671","10000670","10000669","10000668","10000667","10000666","10000665","10000664","10000663","10000662","10000661","10000660","10000659","10000658","10000657","10000656","10000655"],"fId":"10000111","level":2,"leaf":false},{"id":"10000672","name":"裤子","sonIdList":["547699","547700","547701","547702","547703","547704","547705"],"fId":"10000113","level":3,"leaf":false},{"id":"547701","name":"休闲裤","fId":"10000672","level":4,"leaf":true,"state":0,"hasTrialCategory":false,"isTrialCategory":false,"isLocalLife":false}],"depositAmount":0,"catAuth":true,"limitSubjectTypes":[]}],"version":"ProductClsRAG","noQualificationCatIds":[547705,547704,547701],"depositCatInfos":[{"catId":547705,"amountToPay":0,"error":false},{"catId":547704,"amountToPay":0,"error":false},{"catId":547701,"amountToPay":0,"error":false}],"visionCallMethod":"ProductClsRAG"} + //var productClassifyRst = WXUpload.getProductClassify(shop, upProdInitParam.product.info.title, tempImgFullPathLst); + //if (!productClassifyRst.Contains("\"code\":0")) + //{ + // var error = BaseRegex.GetStringJson(ref productClassifyRst, "msg"); + // if (string.IsNullOrEmpty(error)) + // error = productClassifyRst; + // return "{\"success\":false,\"draftId\":0,\"status\":\"未上传\",\"errMsg\":\"获取类目失败 " + error + "\"}"; + //} + //WXGetProdCateInfo cateInfo = new WXGetProdCateInfo(); + //try + //{ + // cateInfo = JsonHelper.DeserializeJsonToObject(productClassifyRst); + // foreach (var catePath in cateInfo.aiCategoryList.FirstOrDefault().paths) + // { + // aiCateIdLst.Add(catePath.id.ParseToLong()); + // } + //} + //catch (Exception ex) + //{ + // return "{\"success\":false,\"draftId\":0,\"status\":\"未上传\",\"errMsg\":\"" + "根据图片获取类目失败 " + ex.Message + "\"}"; + //} } #endregion