using BaiDuSdk;
using CommonUtil;
using HtmlAgilityPack;
using Operater.DAL;
using Operater.DbModel;
using Operater.DTO.System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using YouZanSDKStandard.Api;
using YouZanSDKStandard.Api.Request;
namespace ProductDistribution.Handle
{
public class ProductCheckHandle
{
public static string _errFileName = "检测关键词error";
public static void MainMethod(ProductDistributionMq msg)
{
try
{
var appSet = (new AppsetDAL().ListGet(t => t.Id != null))[0];
var proList = new DistributionRelationDAL().ListGet(t => t.ReStatus == 1);
int totalCount = 0;
// var proList = new DistributionRelationDAL().ListPageGet(t => t.ReStatus == 1, 1, 100, ref totalCount);
//获取过滤关键词
var filter = new ProductFilterDAL().ListGet(t => t.Id != null);
int index = 0;
foreach (var pro in proList)
{
index++;
Console.WriteLine($"{index}/{proList.Count}");
try
{
////获取有赞商品详情
YouZanProductDetailGetRequest detailReq = new YouZanProductDetailGetRequest()
{
item_id = long.Parse(pro.YzProduct)
};
var detailRs = YouZanClient.Execute(detailReq, appSet.YzToken);
if (detailRs.IsNull() || !detailRs.success)
{
Console.WriteLine("获取有赞商品详情失败");
LogUtil.Info("获取有赞商品详情失败:" + detailRs.message, "错误");
continue;
}
string checkResult = "";
//检测title
string titleErr = FilterMsg(filter, detailRs.data.title);
checkResult += titleErr.IsNullOrEmpty() ? "" : ($"标题:[{titleErr}];");
//检测详情
string descErr = FilterMsg(filter, detailRs.data.desc);
checkResult += descErr.IsNullOrEmpty() ? "" : ($"详情文字:[{descErr}];");
//检测主图
//只检第一张
string imgErr = FilterImg(filter, detailRs.data.images[0].image_url);
checkResult += imgErr.IsNullOrEmpty() ? "" : ($"主图:[{imgErr}];");
//StringBuilder imgErr = new StringBuilder();
//foreach (var img in detailRs.data.images)
//{
// string err = FilterImg(filter, img.image_url);
// if (!err.IsNullOrEmpty())
// {
// imgErr.Append(err + ",");
// }
//}
//if (!imgErr.IsNull() && imgErr.Length > 0)
//{
// checkResult += ($"主图:[{imgErr.ToString()}];");
//}
//检测sku图片
//StringBuilder skuErr = new StringBuilder();
//foreach (var sku in detailRs.data.sku_value_props)
//{
// if (sku.img_url.IsNullOrEmpty())
// {
// continue;
// }
// string err = FilterImg(filter, sku.img_url);
// if (!err.IsNullOrEmpty())
// {
// skuErr.Append(err + ",");
// }
//}
//if (!skuErr.IsNull() && skuErr.Length > 0)
//{
// checkResult += ($"sku图片:[{skuErr.ToString()}];");
//}
//检测商品详情图片
//string descImgErr = FilterDesc(filter, detailRs.data.desc);
//checkResult += descImgErr.IsNullOrEmpty() ? "" : ($"详情图片:[{descImgErr}];");
if (checkResult.IsNullOrEmpty())
{
continue;
}
ProductCheckRecord productCheckRecord = new ProductCheckRecord()
{
Id = Guid.NewGuid().ToString(),
YzProductId = pro.YzProduct,
AliProductId = pro.SourceProduct,
CheckTime = DateTime.Now,
TaskId = msg.TaskId,
Memo = checkResult,
YzAlias = detailRs.data.alias,
YzImg = detailRs.data.images[0].image_url,
YzTitle = detailRs.data.title
};
new ProductCheckRecordDAL().Insert(productCheckRecord);
}
catch (Exception e)
{
LogUtil.Info("循环错误:" + e.ToString(), "检测关键词error");
continue;
}
}
}
catch (Exception e)
{
LogUtil.Info("错误:" + e.ToString(), "主线程错误");
}
}
#region 检测关键词
public static string FilterMsg(List filter, string msg)
{
StringBuilder errMsg = new StringBuilder();
try
{
foreach (var fi in filter)
{
if (msg.ToLower().Contains(fi.KeyWord.ToLower()))
{
errMsg.Append(fi.KeyWord + ",");
}
}
}
catch (Exception e)
{
LogUtil.Info(e.ToString(), "过滤关键词error");
}
if (!errMsg.IsNull() && errMsg.Length > 0)
{
return errMsg.ToString();
}
return "";
}
#endregion
#region 图片关键词过滤
public static string FilterImg(List filter, string imgUrl)
{
try
{
StringBuilder keyError = new StringBuilder();
//百度ai图片识别
var res = BaiDuClient.WebImageUrl(imgUrl);
if (!res.IsSuccess)
{
LogUtil.Info($"百度ai错误:{res.error_msg}--图片:{imgUrl}", "过滤关键词error");
}
if (res.words_result_num <= 0)
{
return null;
}
var msgList = res.words_result.Select(t => t.words).ToList();
string msg = string.Join(',', msgList);
var filterKey = filter.Where(t => msg.ToLower().Contains(t.KeyWord.ToLower())).ToList();
if (!filterKey.IsNull() && filterKey.Count > 0)
{
var filterList = filterKey.Select(t => t.KeyWord).ToList();
return string.Join(',', filterList);
}
}
catch (Exception e)
{
LogUtil.Info(e.ToString(), "过滤关键词error");
}
return null;
}
#endregion
#region 检测商品详情图片
public static string FilterDesc(List filter, string desc)
{
StringBuilder errMsg = new StringBuilder();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(desc);
var imgNode = doc.DocumentNode.SelectNodes("//img");
foreach (var imgItem in imgNode)
{
var imgsrc = imgItem.Attributes["src"].Value;
string imgError = FilterImg(filter, imgsrc);
if (!imgError.IsNullOrEmpty())
{
errMsg.Append(imgError + ",");
}
}
if (!errMsg.IsNull() && errMsg.Length > 0)
{
return errMsg.ToString();
}
return "";
}
#endregion
}
}