using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using AlibabaSDK.Api; using AlibabaSDK.Domain; using AlibabaSDK.Request; using BaiDuSdk; using CommonUtil; using CommonUtil.RabbitMQ; using HtmlAgilityPack; using Operater.DAL; using Operater.DbModel; using Operater.DTO.System; using YouZanSDKStandard.Api; using YouZanSDKStandard.Api.Domain; using YouZanSDKStandard.Api.Request; using YouZanSDKStandard.Api.Response; namespace Operater.Service.System { public class ItemDistributionService : IItemDistributionService { /// /// 精选货源铺货 /// /// public async Task RunDistribution(DistributionHistory taskInfo, string aliToken, string yzToken, List filter) { DistributionHistory finalHis = new DistributionHistory(); try { //任务状态改成执行中 DistributionHistory distributionHistory = new DistributionHistory() { DisStatus = 1, RunTime = DateTime.Now }; new DistributionHistoryDAL().Update(distributionHistory, t => new { t.DisStatus, t.RunTime }, t => t.Id == taskInfo.Id); //获取1688商品详情 List ls = new List(); ls.Add(taskInfo.ProductId); PFTProductDetailRequest request = new PFTProductDetailRequest() { offerIds = ls }; var response = AliabaClient.Execute(request, aliToken); if (response.IsNull() || !response.result.success || response.result.result.Count == 0) {//获取商品详情失败 LogUtil.Info($"获取商品详情失败:{taskInfo.Id}", "铺货错误"); finalHis.DisStatus = 3; finalHis.Memo = "获取商品详情失败:" + (response.IsNull() ? "null" : response.ErrorMsg); new DistributionHistoryDAL().Update(finalHis, t => new { t.DisStatus, t.Memo }, t => t.Id == taskInfo.Id); return false; } //判断1688商品状态 if (response.result.result[0].productInfo.status != "published") {//不可铺货 LogUtil.Info($"商品状态不对:{response.result.result[0].productInfo.status}", "铺货错误"); finalHis.DisStatus = 3; finalHis.Memo = "商品状态不对:" + (response.result.result[0].productInfo.status); new DistributionHistoryDAL().Update(finalHis, t => new { t.DisStatus, t.Memo }, t => t.Id == taskInfo.Id); return false; } if (!response.result.result[0].productInfo.saleInfo.supportOnlineTrade) { LogUtil.Info($"不支持网上交易:{response.result.result[0].productInfo.saleInfo.supportOnlineTrade}", "铺货错误"); finalHis.DisStatus = 3; finalHis.Memo = "商品不支持网上交易"; new DistributionHistoryDAL().Update(finalHis, t => new { t.DisStatus, t.Memo }, t => t.Id == taskInfo.Id); return false; } StringBuilder imgError = new StringBuilder(); //商品图片 finalHis.ProImg = "https://cbu01.alicdn.com/img/" + response.result.result[0].productInfo.image.images[0]; //string imgMsg = FilterImg(filter, finalHis.ProImg); //if (!imgMsg.IsNullOrEmpty()) //{ // imgError.Append($"主图:[{imgMsg}]"); //} //商品title finalHis.ProTitle = response.result.result[0].productInfo.subject; //根据规则调整字段 var aliPro = response.result.result[0].productInfo; //是否包邮 精选货源默认包邮 finalHis.IsFreeShipping = 1; //调用有赞新增商品接口 youzan.item.add.1.0.1 YouZanItemAddRequest yzReq = new YouZanItemAddRequest(); yzReq.param = GetAliInfoToYz(aliPro, yzToken, filter, ref imgError); var yzRsp = YouZanClient.Execute(yzReq, yzToken); if (yzRsp.IsNull() || !yzRsp.success) {//新增失败 finalHis.DisStatus = 3; finalHis.Memo = yzRsp.IsNull() ? "有赞接口错误" : yzRsp.message; LogUtil.Info($"有赞错误:{finalHis.Memo}--request:" + JSONUtil.ObjectToJson(yzReq), "铺货错误"); } else { //有赞返回商品id string yzProductId = yzRsp.data.item_id; //修改任务状态 finalHis.DisStatus = 2; finalHis.YzItemId = yzProductId; finalHis.YzAlias = yzRsp.data.alias; string yzskuInfo = UpdateYzSku(yzProductId, yzToken); if (!imgError.IsNull() && imgError.Length > 0) { finalHis.Memo = imgError.ToString(); } yzskuInfo = yzskuInfo.IsNullOrEmpty() ? JSONUtil.ObjectToJson(yzReq.param.sku_list) : yzskuInfo; //记录1688id与有赞id的关系 DistributionRelation distributionRelation = new DistributionRelation() { Id = TopUtil.GetId().ToString(), SourceProduct = taskInfo.ProductId, YzProduct = yzProductId, YzAlias = yzRsp.data.alias, ReStatus = 1, InstanceCode = response.result.result[0].instanceCode, CreateTime = DateTime.Now, AliskuInfo = JSONUtil.ObjectToJson(response.result.result[0].productInfo.skuInfos), YzskuInfo = yzskuInfo, ProSource = 0 }; new DistributionRelationDAL().Insert(distributionRelation); //关注商品 AlibabaProductFollowRequest followReq = new AlibabaProductFollowRequest() { productId = long.Parse(taskInfo.ProductId) }; var followRsp = AliabaClient.Execute(followReq, aliToken); if (followRsp.IsNull() || followRsp.message != "success") { LogUtil.Info($"关注商品{taskInfo.ProductId}失败,错误:" + (followRsp.IsNull() ? "null" : followRsp.message), "铺货错误"); } } } catch (Exception e) { finalHis.DisStatus = 3; finalHis.Memo = e.Message; LogUtil.Info($"错误:{e.ToString()}", "铺货错误"); new DistributionHistoryDAL().Update(finalHis, t => new { t.DisStatus, t.Memo }, t => t.Id == taskInfo.Id); return false; } new DistributionHistoryDAL().Update(finalHis, t => new { t.DisStatus, t.Memo, t.ProImg, t.ProTitle, t.YzAlias, t.YzItemId, t.IsFreeShipping }, t => t.Id == taskInfo.Id); return true; } /// /// 精品货源商品属性赋值给有赞 /// /// /// public static YouZanItemAddDomain GetAliInfoToYz(PFTProductDetailDomainProInfo aliPro, string yzToken, List filter, ref StringBuilder imgError) { YouZanItemAddDomain yzPara = new YouZanItemAddDomain(); yzPara.item_no = aliPro.productID.ToString(); string desc = FilterMsg(filter, aliPro.description); // desc = FilterDesc(filter, desc); yzPara.desc = desc; //yzPara.start_sale_num = aliPro.saleInfo.minOrderQuantity; yzPara.start_sale_num = 1; DeliverySetting deliverySetting = new DeliverySetting() { express = true }; //售后信息 PostSaleParam postSaleParam = new PostSaleParam() { is_support_barter = 0 }; postSaleParam.support_unconditional_return = aliPro.sevenDaysRefunds; yzPara.post_sale_param = postSaleParam; //获取默认运费模板 var appset = new AppsetDAL().ListGet(t => t.Id != null); ItemDeliveryParam itemDeliveryParam = new ItemDeliveryParam { delivery_setting = deliverySetting, delivery_template_id = long.Parse(appset[0].YzPostMould) }; yzPara.item_delivery_param = itemDeliveryParam; switch (aliPro.saleInfo.invReduceType) { case "1"://下单减库存 yzPara.stock_deduct_mode = 0; break; case "2"://付款减库存 yzPara.stock_deduct_mode = 1; break; } yzPara.title = FilterMsg(filter, aliPro.subject); yzPara.is_display = 0; //商品库存, 无sku情况下库存必填,如果有sku则无效 yzPara.quantity = long.Parse(aliPro.saleInfo.amountOnSale.ToString()); List skuLists = new List(); List skuValues = new List(); Dictionary imgDic = new Dictionary(); bool isImgShow = false; long replaceImgId = 0; foreach (var aliSkuItem in aliPro.skuInfos) { if (aliSkuItem.retailPrice <= 0) { continue; } List skuPropsList = new List(); aliSkuItem.attributes = aliSkuItem.attributes.OrderBy(t => t.skuImageUrl.IsNullOrEmpty()).ToList(); int index = 0; foreach (var attr in aliSkuItem.attributes) {//属性信息 index++; SkuProps skuProps = new SkuProps() { prop_value_name = attr.attributeValue, prop_name = attr.attributeName, prop_name_id = attr.attValueID, prop_value_id = attr.attributeID }; skuPropsList.Add(skuProps); if (index == 1 && !attr.skuImageUrl.IsNullOrEmpty()) { isImgShow = true; //处理有赞sku图片信息 long imgId = 0; if (imgDic.ContainsKey(attr.skuImageUrl)) { imgId = imgDic[attr.skuImageUrl]; } else { imgId = UploadImg(yzToken, attr.skuImageUrl); //string imgstr = ImgCheck(filter, attr.skuImageUrl); //if (!imgstr.IsNullOrEmpty()) //{ // imgError.Append($"sku:[{imgstr}]"); //} imgDic.Add(attr.skuImageUrl, imgId); } SkuValueProps skuValueProps = new SkuValueProps() { name = attr.attributeValue, id = attr.attributeID }; if (imgId > 0) { replaceImgId = replaceImgId == 0 ? imgId : replaceImgId; skuValueProps.img_id = imgId; } skuValues.Add(skuValueProps); } } //价格计算。上涨50% long price = long.Parse(Math.Ceiling(aliSkuItem.retailPrice * 100 + aliSkuItem.retailPrice * 100 * 0.5).ToString()); SkuList skuitem = new SkuList() { //price = long.Parse((Math.Round(aliSkuItem.price * 100, 2)).ToString()), price = price, sku_no = aliSkuItem.skuId.ToString(), stock_num = aliSkuItem.amountOnSale, sku_props = skuPropsList }; skuLists.Add(skuitem); } if (!skuValues.IsNull() && skuValues.Count > 0) { yzPara.sku_value_props = skuValues; yzPara.sku_picture_display_config = isImgShow; } //sku信息 yzPara.sku_list = skuLists; ItemPriceParam itemPriceParam = new ItemPriceParam() { price = long.Parse(Math.Round(aliPro.saleInfo.priceRanges[0].price * 100, 2).ToString()) }; yzPara.item_price_param = itemPriceParam; //处理商品图片 int currentIndex = 0; List imageIds = new List(); foreach (var img in aliPro.image.images) { currentIndex++; long imgId = 0; if (currentIndex==1) { //检测第一张主图 string imgstr = ImgCheck(filter, aliPro.image.images[0]); if (!imgstr.IsNullOrEmpty()) { imgError.Append($"主图:[{imgstr}]"); imgId = replaceImgId; imageIds.Add(imgId); continue; } } if (imgDic.ContainsKey(img)) { imgId = imgDic[img]; } else { imgId = UploadImg(yzToken, img); imgDic.Add(img, imgId); } if (imgId == 0) {//上传失败 continue; } imageIds.Add(imgId); } yzPara.image_ids = imageIds; return yzPara; } /// /// 代发方案铺货 /// /// /// /// /// /// public async Task DaiFaRunDistribution(DistributionHistory taskInfo, string aliToken, string yzToken, string yzShopId, List filter) { DistributionHistory finalHis = new DistributionHistory(); try { //任务状态改成执行中 DistributionHistory distributionHistory = new DistributionHistory() { DisStatus = 1, RunTime = DateTime.Now }; new DistributionHistoryDAL().Update(distributionHistory, t => new { t.DisStatus, t.RunTime }, t => t.Id == taskInfo.Id); //获取1688商品详情 FenXiaoProductInfoGetRequest request = new FenXiaoProductInfoGetRequest() { offerId = long.Parse(taskInfo.ProductId) }; var response = AliabaClient.Execute(request, aliToken); if (response.IsNull() || !response.Success) {//获取商品详情失败 LogUtil.Info($"获取商品详情失败:{taskInfo.Id}", "铺货错误"); finalHis.DisStatus = 3; finalHis.Memo = "获取商品详情失败:" + (response.IsNull() ? "null" : response.ErrorMsg); new DistributionHistoryDAL().Update(finalHis, t => new { t.DisStatus, t.Memo }, t => t.Id == taskInfo.Id); return false; } //判断1688商品状态 if (response.productInfo.status != "published") {//不可铺货 LogUtil.Info($"商品状态不对:{response.productInfo.status}", "铺货错误"); finalHis.DisStatus = 3; finalHis.Memo = "商品状态不对:" + (response.productInfo.status); new DistributionHistoryDAL().Update(finalHis, t => new { t.DisStatus, t.Memo }, t => t.Id == taskInfo.Id); return false; } if (!response.productInfo.productSaleInfo.supportOnlineTrade) { LogUtil.Info($"不支持网上交易:{response.productInfo.productSaleInfo.supportOnlineTrade}", "铺货错误"); finalHis.DisStatus = 3; finalHis.Memo = "商品不支持网上交易"; new DistributionHistoryDAL().Update(finalHis, t => new { t.DisStatus, t.Memo }, t => t.Id == taskInfo.Id); return false; } StringBuilder imgError = new StringBuilder(); //商品图片 finalHis.ProImg = response.productInfo.productImage.images[0]; //string imgMsg = FilterImg(filter, finalHis.ProImg); //if (!imgMsg.IsNullOrEmpty()) //{ // imgError.Append($"主图:[{imgMsg}]"); //} //商品title finalHis.ProTitle = response.productInfo.subject; //根据规则调整字段 var aliPro = response.productInfo; //是否包邮 bool isPost = IsPost(aliPro); finalHis.IsFreeShipping = isPost ? 1 : 0; //调用有赞新增商品接口 youzan.item.add.1.0.1 YouZanItemAddRequest yzReq = new YouZanItemAddRequest(); yzReq.param = DaiFaGetAliInfoToYz(aliPro, yzToken, filter, ref imgError); var yzRsp = YouZanClient.Execute(yzReq, yzToken); if (yzRsp.IsNull() || !yzRsp.success) {//新增失败 finalHis.DisStatus = 3; finalHis.Memo = yzRsp.IsNull() ? "有赞接口错误" : yzRsp.message; LogUtil.Info($"有赞错误:{finalHis.Memo}--request:" + JSONUtil.ObjectToJson(yzReq), "铺货错误"); } else { //有赞返回商品id string yzProductId = yzRsp.data.item_id; //添加分销商品关系 FenXiaoOutproductRelationAddRequest relaReq = new FenXiaoOutproductRelationAddRequest() { channel = "youzan", offerId = long.Parse(taskInfo.ProductId), outItemCode = yzProductId, outShopCode = yzShopId }; var relaRsp = AliabaClient.Execute(relaReq, aliToken); if (relaRsp.IsNull() || !relaRsp.Success) { finalHis.DisStatus = 3; finalHis.Memo = "添加分销商品关系失败:" + (relaRsp.IsNull() ? "null" : relaRsp.ErrorMsg); LogUtil.Info($"添加分销商品关系失败:{JSONUtil.ObjectToJson(relaReq)}--返回:" + (relaRsp.IsNull() ? "null" : relaRsp.ErrorMsg), "铺货错误"); new DistributionHistoryDAL().Update(finalHis, t => new { t.DisStatus, t.Memo }, t => t.Id == taskInfo.Id); return false; } //修改任务状态 finalHis.DisStatus = 2; finalHis.YzItemId = yzProductId; finalHis.YzAlias = yzRsp.data.alias; string yzskuInfo = UpdateYzSku(yzProductId, yzToken); if (!imgError.IsNull() && imgError.Length > 0) { finalHis.Memo = imgError.ToString(); } yzskuInfo = yzskuInfo.IsNullOrEmpty() ? JSONUtil.ObjectToJson(yzReq.param.sku_list) : yzskuInfo; //记录1688id与有赞id的关系 DistributionRelation distributionRelation = new DistributionRelation() { Id = TopUtil.GetId().ToString(), SourceProduct = taskInfo.ProductId, YzProduct = yzProductId, YzAlias = yzRsp.data.alias, ReStatus = 1, InstanceCode = response.productInfo.sellerId.ToString(), CreateTime = DateTime.Now, AliskuInfo = JSONUtil.ObjectToJson(response.productInfo.productSkuInfos), YzskuInfo = yzskuInfo, ProSource = 1 }; new DistributionRelationDAL().Insert(distributionRelation); //关注商品 AlibabaProductFollowRequest followReq = new AlibabaProductFollowRequest() { productId = long.Parse(taskInfo.ProductId) }; var followRsp = AliabaClient.Execute(followReq, aliToken); if (followRsp.IsNull() || followRsp.message != "success") { LogUtil.Info($"关注商品{taskInfo.ProductId}失败,错误:" + (followRsp.IsNull() ? "null" : followRsp.message), "铺货错误"); } //修改代发商品表铺货状态 DaifaProduct daifaProduct = new DaifaProduct() { IsDistribute = 1 }; new DaifaProductDAL().Update(daifaProduct, i => new { i.IsDistribute }, t => t.Id == taskInfo.ProductId); } } catch (Exception e) { finalHis.DisStatus = 3; finalHis.Memo = e.Message; LogUtil.Info($"错误:{e.ToString()}", "铺货错误"); new DistributionHistoryDAL().Update(finalHis, t => new { t.DisStatus, t.Memo }, t => t.Id == taskInfo.Id); return false; } //修改任务状态 new DistributionHistoryDAL().Update(finalHis, t => new { t.DisStatus, t.Memo, t.ProImg, t.ProTitle, t.YzAlias, t.YzItemId, t.IsFreeShipping }, t => t.Id == taskInfo.Id); return true; } #region 是否包邮 public bool IsPost(FenXiaoProductInfoGetDomain productInfo) { if (productInfo.productShippingInfo.freightTemplateID == 1) { return true; } double PfMinPrice = productInfo.productSaleInfo.priceRanges.Max(t => t.price); double FxMinPrice = productInfo.productSkuInfos.Min(t => t.consignPrice); if (FxMinPrice > PfMinPrice && FxMinPrice - PfMinPrice > 2) { return true; } return false; } #endregion public static YouZanItemAddDomain DaiFaGetAliInfoToYz(FenXiaoProductInfoGetDomain aliPro, string yzToken, List filter, ref StringBuilder imgError) { YouZanItemAddDomain yzPara = new YouZanItemAddDomain(); yzPara.item_no = aliPro.productID.ToString(); yzPara.desc = FilterMsg(filter, aliPro.description); //yzPara.start_sale_num = aliPro.saleInfo.minOrderQuantity; yzPara.start_sale_num = 1; DeliverySetting deliverySetting = new DeliverySetting() { express = true }; //售后信息 PostSaleParam postSaleParam = new PostSaleParam() { is_support_barter = 0 }; //是否支持7天无理由退货 //postSaleParam.support_unconditional_return = aliPro.sevenDaysRefunds; bool support_unconditional_return = false; foreach (var m in aliPro.productExtendInfos) { if (!"buyerProtection,buyerProtectionDistribution".Contains(m.key) || m.value.IsNullOrEmpty()) { continue; } List arr = JSONUtil.JsonToObject>(m.value); foreach (var a in arr) { if (a.Contains("wlybt")) { support_unconditional_return = true; break; } } if (support_unconditional_return) break; } postSaleParam.support_unconditional_return = support_unconditional_return; yzPara.post_sale_param = postSaleParam; //获取默认运费模板 var appset = new AppsetDAL().ListGet(t => t.Id != null); ItemDeliveryParam itemDeliveryParam = new ItemDeliveryParam { delivery_setting = deliverySetting, delivery_template_id = long.Parse(appset[0].YzPostMould) }; yzPara.item_delivery_param = itemDeliveryParam; //默认付款减库存 yzPara.stock_deduct_mode = 1; yzPara.title = FilterMsg(filter, aliPro.subject); yzPara.is_display = 0; //商品库存, 无sku情况下库存必填,如果有sku则无效 yzPara.quantity = long.Parse(aliPro.productSkuInfos.Min(t => t.amountOnSale).ToString()); List skuLists = new List(); List skuValues = new List(); Dictionary imgDic = new Dictionary(); bool isImgShow = false; long replaceImgId = 0; foreach (var aliSkuItem in aliPro.productSkuInfos) { if (aliSkuItem.consignPrice <= 0) { continue; } List skuPropsList = new List(); aliSkuItem.attributes = aliSkuItem.attributes.OrderBy(t => t.skuImageUrl.IsNullOrEmpty()).ToList(); int index = 0; foreach (var attr in aliSkuItem.attributes) {//属性信息 index++; SkuProps skuProps = new SkuProps() { prop_value_name = attr.attributeValue, prop_name = attr.attributeName, prop_name_id = 0, prop_value_id = attr.attributeID }; skuPropsList.Add(skuProps); if (index == 1 && !attr.skuImageUrl.IsNullOrEmpty()) { isImgShow = true; //处理有赞sku图片信息 long imgId = 0; if (imgDic.ContainsKey(attr.skuImageUrl)) { imgId = imgDic[attr.skuImageUrl]; } else { imgId = UploadImg(yzToken, attr.skuImageUrl); //string imgstr = ImgCheck(filter, attr.skuImageUrl); //if (!imgstr.IsNullOrEmpty()) //{ // imgError.Append($"sku:[{imgstr}]"); //} imgDic.Add(attr.skuImageUrl, imgId); } SkuValueProps skuValueProps = new SkuValueProps() { name = attr.attributeValue, id = attr.attributeID }; if (imgId > 0) { replaceImgId = replaceImgId == 0 ? imgId : replaceImgId; skuValueProps.img_id = imgId; } skuValues.Add(skuValueProps); } } //价格计算。上涨50% long price = long.Parse(Math.Ceiling(aliSkuItem.consignPrice * 100 + aliSkuItem.consignPrice * 100 * 0.5).ToString()); SkuList skuitem = new SkuList() { //price = long.Parse((Math.Round(aliSkuItem.price * 100, 2)).ToString()), price = price, sku_no = aliSkuItem.skuId.ToString(), stock_num = aliSkuItem.amountOnSale, sku_props = skuPropsList }; skuLists.Add(skuitem); } if (!skuValues.IsNull() && skuValues.Count > 0) { yzPara.sku_value_props = skuValues; yzPara.sku_picture_display_config = isImgShow; } //sku信息 yzPara.sku_list = skuLists; ItemPriceParam itemPriceParam = new ItemPriceParam() { price = long.Parse(Math.Round(aliPro.productSaleInfo.priceRanges[0].price * 100, 2).ToString()) }; yzPara.item_price_param = itemPriceParam; //处理商品图片 List imageIds = new List(); int currentIndex = 0; foreach (var img in aliPro.productImage.images) { currentIndex++; long imgId = 0; if (currentIndex == 1) { //检测第一张主图 string imgstr = ImgCheck(filter, aliPro.productImage.images[0]); if (!imgstr.IsNullOrEmpty()) { imgError.Append($"主图:[{imgstr}]"); imgId = replaceImgId; imageIds.Add(imgId); continue; } } if (imgDic.ContainsKey(img)) { imgId = imgDic[img]; } else { imgId = UploadImg(yzToken, img); //string imgstr = ImgCheck(filter, img); //if (!imgstr.IsNullOrEmpty()) //{ // imgError.Append($"主图:[{imgstr}]"); //} imgDic.Add(img, imgId); } if (imgId == 0) {//上传失败 continue; } imageIds.Add(imgId); } yzPara.image_ids = imageIds; return yzPara; } #region 更新有赞信息 private string UpdateYzSku(string yzItemId, string yzToken) { ////获取有赞商品详情 YouZanProductDetailGetRequest detailReq = new YouZanProductDetailGetRequest() { item_id = long.Parse(yzItemId) }; var detailRs = YouZanClient.Execute(detailReq, yzToken); if (detailRs.IsNull() || !detailRs.success) { return null; } else { return JSONUtil.ObjectToJson(detailRs.data.sku_list); } } #endregion /// /// 图片上传有赞 /// /// /// private static long UploadImg(string yzToken, string url) { if (url.IsNullOrEmpty()) { return 0; } string[] urlArr = url.Split('.'); string fileName = "D://Img/" + Guid.NewGuid().ToString() + $".{urlArr[urlArr.Length - 1]}"; WebClient MyWebClient = new WebClient(); if (!url.StartsWith("http")) { url = "https://cbu01.alicdn.com/img/" + url; } MyWebClient.DownloadFile(url, fileName); //上传至有赞 UploadImageResponse response = YouZanUploadeImg.UploadImage(yzToken, fileName); if (!response.IsNull() && response.success) { return response.data.image_id; } return 0; } /// /// 添加铺货任务 /// /// /// public async Task AddDistributionTask(ProductDistributionRequest request) { //判断是否有生成中的 var history = new DistributionHistoryDAL().ListGet(t => request.ProductId.Contains(t.ProductId) && (t.DisStatus == 0 || t.DisStatus == 1)); List tasks = new List(); string taskId = TopUtil.GetId().ToString(); foreach (var pid in request.ProductId) { if (history.Any(t => t.ProductId == pid)) {//正在执行中或未执行的跳过 continue; } DistributionHistory distributionHistory = new DistributionHistory() { Id = TopUtil.GetId().ToString(), ProductId = pid, CreateTime = DateTime.Now, TaskId = taskId, DisStatus = 0, ProSource = request.ProSource }; tasks.Add(distributionHistory); } if (!tasks.IsNull() && tasks.Count > 0) { //插入记录表 new DistributionHistoryDAL().InsertRange(tasks); //发执行mq ProductDistributionMq productDistributionMq = new ProductDistributionMq() { TaskId = taskId }; string ret = MQClientFullChannel.SendMessageStatic(0, "product_distribution", JSONUtil.ObjectToJson(productDistributionMq)); if (ret != "ok") { LogUtil.Info($"发MQ失败:{taskId}", "铺货任务mq失败"); return false; } return true; } return false; } /// /// 解除商品关联 /// /// /// /// public bool RemoveRelatProduct(string aliProductId, string aliToken, string yzToken, DistributionHistory history, string yzShopId) { try { //取消关注商品 AlibabaProductUnFollowRequest request = new AlibabaProductUnFollowRequest() { productId = long.Parse(aliProductId) }; var response = AliabaClient.Execute(request, aliToken); if (response.IsNull() || response.message != "success") { return false; } if (history.ProSource == 1) {//代发方案商品,需额外解除分销关系 FenXiaoOutproductRelationDeleteRequest deReq = new FenXiaoOutproductRelationDeleteRequest() { channel = "youzan", offerId = long.Parse(history.ProductId), outItemCode = history.YzItemId, outShopCode = yzShopId }; var relaRsp = AliabaClient.Execute(deReq, aliToken); if (relaRsp.IsNull() || !relaRsp.Success) { return false; } DaifaProduct daifaProduct = new DaifaProduct() { IsDistribute = 0 }; new DaifaProductDAL().Update(daifaProduct, i => new { i.IsDistribute }, t => t.Id == history.ProductId); } //表里关系解除关注 DistributionRelation distributionRelation = new DistributionRelation() { ReStatus = 0 }; new DistributionRelationDAL().Update(distributionRelation, i => new { i.ReStatus }, t => t.SourceProduct == aliProductId); //删除有赞商品 YouZanItemDeleteRequest youZanItemDeleteRequest = new YouZanItemDeleteRequest() { item_id = long.Parse(history.YzItemId) }; var youZanItemDeleteRsp = YouZanClient.Execute(youZanItemDeleteRequest, yzToken); if (youZanItemDeleteRsp.IsNull() || !youZanItemDeleteRsp.success || !youZanItemDeleteRsp.data.is_success) { LogUtil.Info($"id:{history.YzItemId}--error:{youZanItemDeleteRsp.message}", "有赞商品删除error"); } return true; } catch (Exception e) { LogUtil.Info("aliProductId:" + aliProductId + "--" + e.ToString(), "解除商品关联error"); return false; } } public static string FilterMsg(List filter, string msg) { try { foreach (var fi in filter) { string replaceStr = fi.Replace.IsNullOrEmpty() ? "" : fi.Replace; msg = msg.Replace(fi.KeyWord, replaceStr); } } catch (Exception e) { LogUtil.Info(e.ToString(), "过滤关键词error"); } return msg; } public static string ImgCheck(List filter, string imgUrl) { if (!imgUrl.StartsWith("http")) { imgUrl = "https://cbu01.alicdn.com/img/" + imgUrl; } string imgMsg = FilterImg(filter, imgUrl); if (!imgMsg.IsNullOrEmpty()) { return imgMsg; } return null; } #region 处理商品详情图片 public static string FilterDesc(List filter, string desc) { 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 = ImgCheck(filter, imgsrc); if (!imgError.IsNullOrEmpty()) { imgItem.Remove(); } } return doc.DocumentNode.OuterHtml; } #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.Contains(t.KeyWord)).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 处理sku不对应的情况 private List ResetSkuInfo(List aliSkuinfo, List youzanSkuInfo) { try { Dictionary> attrbuteDic = new Dictionary>(); } catch (Exception e) { } return null; } #endregion public List GetYzItemIdByTag(ListGetDistributionHistoryRequest request, string yzToken) { List itemList = new List(); int pageSize = 50; int currentPage = 1; int totalPage = 1; while (currentPage <= totalPage) { YouZanItemCommonSearchRequest itemReq = new YouZanItemCommonSearchRequest() { page_size = pageSize, page_no = currentPage, tag_ids = request.TagIds, is_display = request.IsDisplay }; var itemRsp = YouZanClient.Execute(itemReq, yzToken); currentPage++; if (itemRsp.IsNull() || !itemRsp.success) { continue; } //计算总页数 if (totalPage == 1) { totalPage = itemRsp.data.paginator.total_count % pageSize == 0 ? itemRsp.data.paginator.total_count / pageSize : (itemRsp.data.paginator.total_count / pageSize) + 1; } foreach (var yzpro in itemRsp.data.items) { if (!itemList.Contains(yzpro.item_id.ToString())) { itemList.Add(yzpro.item_id.ToString()); } } } return itemList; } //public void Dispose() //{ // return base.dis //} } }