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(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 reqTag = new List(); 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 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 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 skuList = new List(); 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 ls = new List(); 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 res = JSONUtil.JsonToObject>(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 { /// /// 是否包邮 /// public bool IsPost { get; set; } public List SkuList { get; set; } } } }