using Operater.DTO.System;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using CommonUtil;
|
using Operater.DAL;
|
using YouZanSDKStandard.Api.Request;
|
using YouZanSDKStandard.Api;
|
using Operater.DbModel;
|
using ProductDistribution.Model;
|
using YouZanSDKStandard.Api.Domain;
|
using AlibabaSDK.Request;
|
using AlibabaSDK.Api;
|
using AlibabaSDK.Domain;
|
using System.Linq;
|
using Operater.Service.System;
|
|
namespace ProductDistribution.Handle
|
{
|
public class BatchUpdatePriceHandle
|
{
|
public static string _errFileName = "批量修改价格error";
|
public static void MainMethod(ProductDistributionMq msg)
|
{
|
try
|
{
|
var _Token = CommonHandle.GetToken();
|
//获取任务详情
|
var taskInfo = new BatchUpdateDAL().GetById(msg.TaskId);
|
if (taskInfo.IsNull() || taskInfo.TaskStatus != 0)
|
{
|
Console.WriteLine("未获取到可执行的任务");
|
return;
|
}
|
//修改任务执行中
|
BatchUpdate batchUpdate = new BatchUpdate()
|
{
|
TaskStatus = 1
|
};
|
new BatchUpdateDAL().Update(batchUpdate, i => new { i.TaskStatus }, t => t.Id == taskInfo.Id);
|
//执行规则
|
PriceUpdateRule rule = JSONUtil.JsonToObject<PriceUpdateRule>(taskInfo.TaskRule);
|
//获取有赞分类下的商品
|
string[] tagIds = taskInfo.Tagids.Split(',');
|
foreach (string tag in tagIds)
|
{//循环分组获取商品
|
if (tag.IsNullOrEmpty())
|
{
|
continue;
|
}
|
int totalPage = 1;
|
int currentPage = 0;
|
int pageSize = 50;
|
List<long> reqTag = new List<long>();
|
reqTag.Add(long.Parse(tag));
|
while (currentPage <= totalPage)
|
{
|
currentPage++;
|
YouZanItemCommonSearchRequest itemReq = new YouZanItemCommonSearchRequest()
|
{
|
page_size = pageSize,
|
page_no = currentPage,
|
tag_ids = reqTag
|
};
|
var itemRsp = YouZanClient.Execute(itemReq, _Token.YzToken);
|
if (itemRsp.IsNull() || !itemRsp.success)
|
{
|
string errMsg = "获取有赞商品失败:" + itemRsp.message;
|
Console.WriteLine(errMsg);
|
LogUtil.Info(errMsg, _errFileName);
|
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;
|
}
|
//计算有赞价格并更新
|
UpdateYzPrice(taskInfo, _Token, itemRsp.data.items, rule);
|
}
|
}
|
//修改任务状态
|
batchUpdate.TaskStatus = 2;
|
new BatchUpdateDAL().Update(batchUpdate, i => new { i.TaskStatus }, t => t.Id == taskInfo.Id);
|
}
|
catch (Exception e)
|
{
|
string errMsg = "主线程错误:" + e.ToString();
|
Console.WriteLine(errMsg);
|
LogUtil.Info(errMsg, _errFileName);
|
}
|
}
|
|
#region 修改有赞价格
|
private static void UpdateYzPrice(BatchUpdate taskInfo, TokenCach tokenInfo, List<YouZanItemCommonSearchDomainItems> yzItem, PriceUpdateRule rule)
|
{
|
try
|
{
|
foreach (var yzpro in yzItem)
|
{
|
try
|
{
|
//判断更新规则
|
if (rule.HistoryType == 0 && new BatchUpdatepriceHistoryDAL().IsExist(t => t.YzProductId == yzpro.item_id.ToString() && t.UpdateStatus == 1))
|
{//不覆盖历史改过的
|
LogUtil.Info($"{yzpro.item_id.ToString()}-不覆盖历史,任务id:[{taskInfo.Id}]", "批量修改价格log");
|
continue;
|
}
|
//根据有赞id获取关联的1688商品
|
var relation = new DistributionRelationDAL().ListGet(t => t.YzProduct == yzpro.item_id.ToString());
|
if (relation.IsNull() || relation.Count == 0)
|
{
|
LogUtil.Info($"{yzpro.item_id.ToString()}-未找到关联的1688商品", "批量修改价格log");
|
continue;
|
}
|
//获取1688商品详情
|
AliBatchItemInfo aliProductInfo = GetAliProductDetail(tokenInfo, relation[0].ProSource, relation[0].SourceProduct, yzpro.item_id.ToString());
|
if (aliProductInfo.IsNull() || aliProductInfo.SkuList.IsNull())
|
{
|
continue;
|
}
|
List<SkuInfosItem> aliProductSkuInfo = aliProductInfo.SkuList;
|
if (rule.RangeType == "1")
|
{ //判断价格区间
|
double aliMinPrice = relation[0].ProSource == 0 ? aliProductSkuInfo.Min(t => t.retailPrice) : aliProductSkuInfo.Min(t => t.consignPrice);
|
if (aliMinPrice <= rule.MinPrice || aliMinPrice > rule.MaxPrice)
|
{//不符合区间范围
|
LogUtil.Info($"taskid:{taskInfo.Id}-yzid:{yzpro.item_id}", "不符合区间");
|
continue;
|
}
|
}
|
//获取有赞商品详情
|
YouZanProductDetailGetRequest detailReq = new YouZanProductDetailGetRequest()
|
{
|
item_id = yzpro.item_id
|
};
|
var detailRs = YouZanClient.Execute(detailReq, tokenInfo.YzToken);
|
if (detailRs.IsNull() || !detailRs.success)
|
{
|
string errMsg = $"获取有赞商品详情错误[{yzpro.item_id.ToString()}]:" + detailRs.message;
|
Console.WriteLine(errMsg);
|
LogUtil.Info(errMsg, _errFileName);
|
continue;
|
}
|
//循环有赞商品sku修改价格
|
List<YouZanProductUpdateReqSkuList> skuList = new List<YouZanProductUpdateReqSkuList>();
|
|
foreach (var sku in detailRs.data.sku_list)
|
{
|
var aliSkuTar = aliProductSkuInfo.Where(t => t.skuId == long.Parse(sku.sku_no)).ToList();
|
if (aliSkuTar.IsNull() || aliSkuTar.Count == 0)
|
{
|
continue;
|
}
|
double finalPrice = relation[0].ProSource == 0 ? aliSkuTar[0].retailPrice : aliSkuTar[0].consignPrice;
|
//判断修改
|
switch (rule.UpType)
|
{
|
case "add_regular"://增加固定金额
|
finalPrice += rule.UpdateVale;
|
break;
|
case "add_scale"://按比例
|
finalPrice += Math.Round(finalPrice * Math.Round(rule.UpdateVale / 100, 2), 2);
|
break;
|
default:
|
continue;
|
}
|
if (!aliProductInfo.IsPost && rule.PostFee > 0)
|
{//不包邮 且 设置了邮费
|
finalPrice += rule.PostFee;
|
}
|
YouZanProductUpdateReqSkuList reqSkuItem = new YouZanProductUpdateReqSkuList()
|
{
|
price = long.Parse(Math.Round(finalPrice * 100, 0).ToString()),
|
sku_id = long.Parse(sku.sku_id)
|
};
|
skuList.Add(reqSkuItem);
|
|
}
|
if (skuList.IsNull() || skuList.Count == 0)
|
{
|
continue;
|
}
|
//增量修改有赞sku信息
|
YouZanProductUpdateReqDomain upDomain = new YouZanProductUpdateReqDomain()
|
{
|
item_id = yzpro.item_id
|
};
|
upDomain.sku_list = skuList;
|
YouZanProductUpdateRequest yzReq = new YouZanProductUpdateRequest()
|
{ param = upDomain };
|
var yzRsp = YouZanClient.Execute(yzReq, tokenInfo.YzToken);
|
if (yzRsp.IsNull() || !yzRsp.success)
|
{
|
string errMsg = $"有赞接口修改失败,请求参数:{JSONUtil.ObjectToJson(yzReq)}---" + yzRsp.message;
|
Console.WriteLine(errMsg);
|
LogUtil.Info(errMsg, _errFileName);
|
}
|
//修改成功记录日志
|
BatchUpdatepriceHistory batchUpdatepriceHistory = new BatchUpdatepriceHistory()
|
{
|
Id = Guid.NewGuid().ToString(),
|
YzProductId = yzpro.item_id.ToString(),
|
AliProductId = relation[0].SourceProduct,
|
UpdateTime = DateTime.Now,
|
UpdateStatus = 1,
|
TaskId = taskInfo.Id,
|
AliTxt = JSONUtil.ObjectToJson(aliProductSkuInfo),
|
YzTxt = "",
|
YzBeforeTxt = JSONUtil.ObjectToJson(detailRs.data.sku_list)
|
};
|
//获取有赞商品详情
|
var redetailRs = YouZanClient.Execute(detailReq, tokenInfo.YzToken);
|
if (!detailRs.IsNull() && detailRs.success)
|
{
|
string reYzSku = JSONUtil.ObjectToJson(redetailRs.data.sku_list);
|
batchUpdatepriceHistory.YzTxt = reYzSku;
|
//修改关系表里有赞sku信息
|
DistributionRelation distributionRelation = new DistributionRelation()
|
{
|
YzskuInfo = reYzSku
|
};
|
new DistributionRelationDAL().Update(distributionRelation, i => new { i.YzskuInfo }, t => t.Id == relation[0].Id);
|
}
|
new BatchUpdatepriceHistoryDAL().Insert(batchUpdatepriceHistory);
|
|
}
|
catch (Exception e)
|
{
|
string errMsg = "修改有赞价格循环错误:" + e.ToString();
|
Console.WriteLine(errMsg);
|
LogUtil.Info(errMsg, _errFileName);
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
string errMsg = "修改有赞价格主线程错误:" + e.ToString();
|
Console.WriteLine(errMsg);
|
LogUtil.Info(errMsg, _errFileName);
|
}
|
}
|
|
#endregion
|
|
#region 获取1688/精选货源商品详情
|
private static AliBatchItemInfo GetAliProductDetail(TokenCach tokenInfo, int proSource, string aliProductId, string yzId)
|
{
|
AliBatchItemInfo aliBatchItemInfo = new AliBatchItemInfo()
|
{
|
IsPost = false
|
};
|
if (proSource == 0)
|
{//精选货源
|
List<string> ls = new List<string>();
|
ls.Add(aliProductId);
|
PFTProductDetailRequest request = new PFTProductDetailRequest()
|
{
|
offerIds = ls
|
};
|
var response = AliabaClient.Execute(request, tokenInfo.AliToken);
|
if (response.IsNull() || !response.result.success || response.result.result.Count == 0)
|
{//获取商品详情失败
|
string errMsg = $"获取精选货源详情失败[{aliProductId}]:" + response.result.message;
|
Console.WriteLine(errMsg);
|
LogUtil.Info(errMsg, _errFileName);
|
if (response.result.message.Contains("该商品不是团长商品"))
|
{//有赞下架
|
DelistingYz(yzId, tokenInfo.YzToken);
|
ProductUpdateLog productUpdateLog = new ProductUpdateLog()
|
{
|
Id = TopUtil.GetId().ToString(),
|
CreateTime = DateTime.Now,
|
UpdateContent = "批量修改-系统下架有赞",
|
Memo="已退出精选",
|
ProductId = aliProductId,
|
ProcessingStatus = 0,
|
YzProductId = yzId,
|
IsSystemDown = 2
|
};
|
new ProductUpdateLogDAL().Insert(productUpdateLog);
|
}
|
return null;
|
}
|
aliBatchItemInfo.IsPost = true;
|
aliBatchItemInfo.SkuList = response.result.result[0].productInfo.skuInfos;
|
return aliBatchItemInfo;
|
}
|
else
|
{//1688代发
|
FenXiaoProductInfoGetRequest request = new FenXiaoProductInfoGetRequest()
|
{
|
offerId = long.Parse(aliProductId)
|
};
|
var response = AliabaClient.Execute(request, tokenInfo.AliToken);
|
if (response.IsNull() || !response.Success)
|
{//获取商品详情失败
|
string errMsg = $"获取代发商品详情失败[{aliProductId}]:" + response.ErrorMsg;
|
Console.WriteLine(errMsg);
|
LogUtil.Info(errMsg, _errFileName);
|
if(response.ErrorMsg.Contains("已下架"))
|
{
|
ProductUpdateLog productUpdateLog = new ProductUpdateLog()
|
{
|
Id = TopUtil.GetId().ToString(),
|
CreateTime = DateTime.Now,
|
UpdateContent = "批量修改-系统下架有赞",
|
Memo = "1688商品已下架",
|
ProductId = aliProductId,
|
ProcessingStatus = 0,
|
YzProductId = yzId,
|
IsSystemDown = 2
|
};
|
new ProductUpdateLogDAL().Insert(productUpdateLog);
|
}
|
return null;
|
}
|
List<SkuInfosItem> res = JSONUtil.JsonToObject<List<SkuInfosItem>>(JSONUtil.ObjectToJson(response.productInfo.productSkuInfos));
|
//是否包邮
|
aliBatchItemInfo.IsPost = new ItemDistributionService().IsPost(response.productInfo);
|
aliBatchItemInfo.SkuList = res;
|
return aliBatchItemInfo;
|
}
|
}
|
|
#endregion
|
|
#region 下架有赞商品
|
private static void DelistingYz(string yzId, string yzToken)
|
{
|
//下架有赞商品
|
YouZanItemDelistingRequest delistingReq = new YouZanItemDelistingRequest()
|
{
|
item_id = long.Parse(yzId)
|
};
|
var delistingRsp = YouZanClient.Execute(delistingReq, yzToken);
|
if (delistingRsp.IsNull() || !delistingRsp.success)
|
{
|
LogUtil.Info($"下架有赞商品失败[{yzId}]):" + (delistingRsp.IsNull() ? "null" : delistingRsp.message), "下架有赞商品");
|
}
|
else
|
{
|
LogUtil.Info($"下架有赞商品成功[{yzId}]()", "下架有赞商品");
|
|
|
}
|
}
|
|
#endregion
|
|
public class AliBatchItemInfo
|
{
|
/// <summary>
|
/// 是否包邮
|
/// </summary>
|
public bool IsPost { get; set; }
|
public List<SkuInfosItem> SkuList { get; set; }
|
}
|
}
|
}
|