上货类目识别改为使用接口

This commit is contained in:
wule committed 2026-09-16 16:14:45 +08:00
1 parent 52bb9973b9
commit b9c756b561
2 files changed
+131 -94

No files matched your search

@@ -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<string> mainImgLst3 = new List<string>();
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<PDDProductInfo>(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);
}
}
@@ -2771,99 +2771,118 @@ namespace TemuKJD.WXForms.ProductForms
}
else
{
//-------------------------------------------------------------------------------------------------------------------------------------
// ai识别类目暂存主图位置
int imgId = 0;
string tempImgPath = Path.GetTempPath().Trim('\\') + "\\" + Randomx.GetWordWithNumber(8).ToLower();
List<string> tempImgFullPathLst = new List<string>();
//-------------------------------------------------------------------------------------------------------------------------------------
// 生成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<WXGetProdCateInfo>(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<string> tempImgFullPathLst = new List<string>();
////-------------------------------------------------------------------------------------------------------------------------------------
//// 生成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<WXGetProdCateInfo>(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