diff --git a/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs b/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs index 2805b920..2fab3607 100644 --- a/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs +++ b/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs @@ -1,5 +1,4 @@ -using BBWY.Common.Extensions; -using BBWY.Common.Http; +using BBWY.Common.Http; using BBWY.Common.Models; using BBWY.Server.Model; using BBWY.Server.Model.Db; @@ -11,7 +10,6 @@ using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; -using System.Security.Cryptography; using System.Text; using System.Threading; using System.Threading.Tasks; diff --git a/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs b/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs index 67510544..ccc91a07 100644 --- a/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs +++ b/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs @@ -7,6 +7,7 @@ using BBWY.Server.Model.Dto; using FreeSql; using Microsoft.Extensions.Options; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; @@ -517,7 +518,61 @@ namespace BBWY.Server.Business if (!string.IsNullOrEmpty(dbPromotionTask.MainProductSku)) CheckRepeatSkuInRuningTask(runingTaskList, dbPromotionTask.MainProductSku); + var host = GetPlatformRelayAPIHost(Enums.Platform.京东); + var haveGiftTemplateSku = giftTemplateSkuList != null && giftTemplateSkuList.Count() > 0; + string barCode = string.Empty, categoryId = string.Empty; + IList multiCateProps = null; + var mainProductSkuInStore = false; + if (haveGiftTemplateSku) + { + var mainSkuResult = restApiService.SendRequest(host, "api/PlatformSDK/GetProductSkuList", new SearchProductSkuRequest() + { + AppKey = request.AppKey, + AppSecret = request.AppSecret, + AppToken = request.AppToken, + IsContainSource = true, + Platform = request.Platform, + Spu = dbPromotionTask.MainProductSpu + }, GetYunDingRequestHeader(), HttpMethod.Post); + if (mainSkuResult.StatusCode != System.Net.HttpStatusCode.OK) + throw new BusinessException($"获取主商品sku失败 {mainSkuResult.Content}"); + var mainSkuListResponse = JsonConvert.DeserializeObject>>(mainSkuResult.Content); + if (!mainSkuListResponse.Success) + throw new BusinessException($"获取主商品sku失败 {mainSkuListResponse.Msg}"); + + barCode = mainSkuListResponse.Data[0].Source.Value("barCode"); + categoryId = mainSkuListResponse.Data[0].Source.Value("categoryId"); + multiCateProps = mainSkuListResponse.Data[0].Source["multiCateProps"] != null ? mainSkuListResponse.Data[0].Source["multiCateProps"].ToList() : null; + + var jyStoreIdList = fsql.Select().Where(s => s.Type == Enums.StockType.京仓 || s.Name.Contains("云仓")).ToList(s => s.Id); + + foreach (var sku in mainSkuListResponse.Data) + { + var stockNumApiResult = restApiService.SendRequest(host, "api/platformsdk/GetStockNumBySku", new SearchProductSkuRequest() + { + AppKey = shop.AppKey, + AppSecret = shop.AppSecret, + AppToken = shop.AppToken, + Platform = shop.PlatformId, + Sku = sku.Id + }, GetYunDingRequestHeader(), HttpMethod.Post); + if (stockNumApiResult.StatusCode != System.Net.HttpStatusCode.OK) + throw new Exception($"{sku} {stockNumApiResult.Content}"); + var stockNumListResponse = JsonConvert.DeserializeObject>(stockNumApiResult.Content); + + var skuStockNumList = stockNumListResponse.Data.Select(j => new + { + StockNum = j.Value("stockNum"), + StoreId = j.Value("storeId"), + SkuId = sku + }); + mainProductSkuInStore = skuStockNumList.Any(s => jyStoreIdList.Contains(s.StoreId)); + if (mainProductSkuInStore) + break; + } + } + var httpApiResult = restApiService.SendRequest(host, "api/PlatformSDK/StartJDPromotionTask", new StartPromotionTaskRequest2() { Id = dbPromotionTask.Id, @@ -535,7 +590,12 @@ namespace BBWY.Server.Business MainProductSpu = dbPromotionTask.MainProductSpu, Platform = Enums.Platform.京东, ShopId = dbPromotionTask.ShopId.Value, - TaskCount = dbPromotionTask.TaskCount + TaskCount = dbPromotionTask.TaskCount, + MainProductBarCode = barCode, + MainProductCategoryId = categoryId, + MainProductMultiCateProps = multiCateProps, + MainProductSkuInStore = mainProductSkuInStore + }, GetYunDingRequestHeader(), HttpMethod.Post); if (httpApiResult.StatusCode != System.Net.HttpStatusCode.OK) diff --git a/BBWY.Server.Business/PlatformSDK/JDBusiness.cs b/BBWY.Server.Business/PlatformSDK/JDBusiness.cs index e0025c72..583de442 100644 --- a/BBWY.Server.Business/PlatformSDK/JDBusiness.cs +++ b/BBWY.Server.Business/PlatformSDK/JDBusiness.cs @@ -894,36 +894,36 @@ namespace BBWY.Server.Business if (haveGiftTemplateSku) { #region 上架赠品 - string barCode = string.Empty, categoryId = string.Empty; - IList multiCateProps = null; - - #region 获取主商品sku信息 barCode,categoryId,multiCateProps - { - stepText = "获取主商品sku信息"; - var mainSkuList = GetProductSkuList(new SearchProductSkuRequest() - { - AppKey = request.AppKey, - AppSecret = request.AppSecret, - AppToken = request.AppToken, - IsContainSource = true, - Platform = request.Platform, - Spu = request.MainProductSpu - }); - if (mainSkuList.Count() == 0) - throw new BusinessException($"获取主商品sku信息-未查询到sku信息"); - - barCode = mainSkuList[0].Source.Value("barCode"); - categoryId = mainSkuList[0].Source.Value("categoryId"); - multiCateProps = mainSkuList[0].Source["multiCateProps"] != null ? mainSkuList[0].Source["multiCateProps"].ToList() : null; - } - #endregion + //string barCode = string.Empty, categoryId = string.Empty; + //IList multiCateProps = null; + + //#region 获取主商品sku信息 barCode,categoryId,multiCateProps + //{ + // stepText = "获取主商品sku信息"; + // var mainSkuList = GetProductSkuList(new SearchProductSkuRequest() + // { + // AppKey = request.AppKey, + // AppSecret = request.AppSecret, + // AppToken = request.AppToken, + // IsContainSource = true, + // Platform = request.Platform, + // Spu = request.MainProductSpu + // }); + // if (mainSkuList.Count() == 0) + // throw new BusinessException($"获取主商品sku信息-未查询到sku信息"); + + // barCode = mainSkuList[0].Source.Value("barCode"); + // categoryId = mainSkuList[0].Source.Value("categoryId"); + // multiCateProps = mainSkuList[0].Source["multiCateProps"] != null ? mainSkuList[0].Source["multiCateProps"].ToList() : null; + //} + //#endregion #region 获取销售属性 stepText = "获取销售属性"; IList colorSaleAttrs = null; { var req = new CategoryReadFindAttrsByCategoryIdUnlimitCateRequest(); - req.cid = long.Parse(categoryId); + req.cid = long.Parse(request.MainProductCategoryId); req.attributeType = 4; req.field = "attrValueList,attrGroup"; var response = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); @@ -955,7 +955,7 @@ namespace BBWY.Server.Business //skuId = long.Parse(sku.Id), jdPrice = giftSku.Price ?? 0, stockNum = 9999, - barCode = barCode, + barCode = request.MainProductBarCode, saleAttrs = new List() { new SkuWriteUpdateSkusItemSaleAttrs() @@ -969,9 +969,9 @@ namespace BBWY.Server.Business }; p.multiCateProps = new List(); - if (multiCateProps != null && multiCateProps.Count() > 0) + if (request.MainProductMultiCateProps != null && request.MainProductMultiCateProps.Count() > 0) { - foreach (var multiCateProp in multiCateProps) + foreach (var multiCateProp in request.MainProductMultiCateProps) { var m = new SkuWriteUpdateSkusItemSaleAttrs(); m.type = "com.jd.pop.ware.ic.api.domain.Prop"; @@ -1060,24 +1060,27 @@ namespace BBWY.Server.Business #region 设置sku全国仓库存 { - stepText = "设置sku全国仓库存"; - try + if (request.MainProductSkuInStore) { - foreach (var giftSkuId in giftSkuIdList) + stepText = "设置sku全国仓库存"; + try { - var req = new StockWriteUpdateSkuStockRequest(); - req.skuId = long.Parse(giftSkuId); - req.stockNum = 9999; - req.storeId = 0; - var res = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); - if (res.IsError) - throw new BusinessException($"设置全国仓库存失败-{(string.IsNullOrEmpty(res.ErrorMsg) ? res.ErrMsg : res.ErrorMsg)}"); + foreach (var giftSkuId in giftSkuIdList) + { + var req = new StockWriteUpdateSkuStockRequest(); + req.skuId = long.Parse(giftSkuId); + req.stockNum = 9999; + req.storeId = 0; + var res = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); + if (res.IsError) + throw new BusinessException($"设置全国仓库存失败-{(string.IsNullOrEmpty(res.ErrorMsg) ? res.ErrMsg : res.ErrorMsg)}"); + } + } + catch (Exception ex) + { + RollBackWhenStartPromotionError(request.AppKey, request.AppSecret, request.AppToken, giftSkuIdList, request.MainProductSpu, request.FullTitle, brandName, true); + throw ex; } - } - catch (Exception ex) - { - RollBackWhenStartPromotionError(request.AppKey, request.AppSecret, request.AppToken, giftSkuIdList, request.MainProductSpu, request.FullTitle, brandName, true); - throw ex; } } #endregion diff --git a/BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs b/BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs index 8908a072..da8190bf 100644 --- a/BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs +++ b/BBWY.Server.Model/Dto/Request/PromotionTask/StartPromotionTaskRequest.cs @@ -1,4 +1,5 @@ -using System; +using Newtonsoft.Json.Linq; +using System; using System.Collections.Generic; using System.Text; @@ -60,6 +61,17 @@ namespace BBWY.Server.Model.Dto /// 任务量 /// public int TaskCount { get; set; } + + public string MainProductBarCode { get; set; } + + public string MainProductCategoryId { get; set; } + + public IList MainProductMultiCateProps { get; set; } + + /// + /// 主商品Sku是否入仓 + /// + public bool MainProductSkuInStore { get; set; } } public class StartPromotionTaskDelayRequest : PlatformRequest diff --git a/BBWY.Test/Program.cs b/BBWY.Test/Program.cs index 652be87e..0b783f2c 100644 --- a/BBWY.Test/Program.cs +++ b/BBWY.Test/Program.cs @@ -18,33 +18,52 @@ namespace BBWY.Test static void Main(string[] args) { - var appkey = "E1AA9247D5583A6D87449CE6AB290185"; - var appSecret = "e479558ddd9e40f8929cfc00c6cbbc9c"; + //var appkey = "E1AA9247D5583A6D87449CE6AB290185"; + //var appSecret = "e479558ddd9e40f8929cfc00c6cbbc9c"; + + var appkey = "120EA9EC65AB017567D78CC1139EEEA5"; + var appSecret = "8a42bc2301e8439b896e99f5475e0a9b"; + ////0e61c4a8ec3e4df4b5836e10884db9220yth 齐盛 - ////2ace3023200c4ea9aa682bbf8bffee18jztm 布莱特玩具 - //var token = "01f5be2cb4d741dda66bce2356941597mdfm"; //布莱特玩具 token2 - //var token = "01dc6f6e7fc34dcd99090d690312556cmdfk"; //齐盛 - //var token = "9fffa982da23446fb035499ae5622f49odjk"; //腾奇 - //var token = "c22ff4d37b6c4bbd82cd9e8d0dab42dbziyz"; //森王车品 - var token = "44c19a1c1fbd4641957e6e8985ed1358jmtl"; //森王玩具 - - //var appkey = "120EA9EC65AB017567D78CC1139EEEA5"; - //var appSecret = "8a42bc2301e8439b896e99f5475e0a9b"; - //var token = "2ace3023200c4ea9aa682bbf8bffee18jztm"; - - //var path = @"C:\Users\pengcong001\Desktop\含赠品SKU.txt"; - //var j = JToken.Parse(System.IO.File.ReadAllText(path, System.Text.Encoding.UTF8)); - //var firstJ = j["Json"]["jingdong_sku_read_searchSkuList_responce"]["page"]["data"].Children().FirstOrDefault(); - //var saleAtters = firstJ.Value("saleAttrs").Select(s => new - //{ - // attrId = s.Value("attrId"), - // attrValues = s.Value("attrValues").Select(x => x.ToString()).ToList() - //}).ToList(); + var token = "2ace3023200c4ea9aa682bbf8bffee18jztm"; //布莱特玩具 + //var token = "01f5be2cb4d741dda66bce2356941597mdfm"; //布莱特玩具 token2 + //var token = "01dc6f6e7fc34dcd99090d690312556cmdfk"; //齐盛 + //var token = "9fffa982da23446fb035499ae5622f49odjk"; //腾奇 + //var token = "c22ff4d37b6c4bbd82cd9e8d0dab42dbziyz"; //森王车品 + //var token = "44c19a1c1fbd4641957e6e8985ed1358jmtl"; //森王玩具 + IJdClient client = GetJdClient(appkey, appSecret); - var p = new JDPromotionAPITest(); - p.GetPromotionDetailById(client,token, 5629024225); + { + + var skuList = new List() { +10025658468477, +10026219782038, +10026279996161, +10026279996162, +10026279996163, +10026463915671, +10029572468081, +10029572468082, +10029572468083, +10029572468084, +10030302993587, +10063391438691, +10063391438692, +10063391438693, +10063391438694 + }; + + foreach (var sku in skuList) + { + var jdClient = GetJdClient(appkey, appSecret); + var req = new StockReadFindSkuStockRequest(); + req.skuId = sku; + var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); + } + } + Console.ReadKey(); } }