diff --git a/BBWY.JDSDK/Request/SellerPromotionV2CountRequest.cs b/BBWY.JDSDK/Request/SellerPromotionV2CountRequest.cs index 95a4673e..7db00ee7 100644 --- a/BBWY.JDSDK/Request/SellerPromotionV2CountRequest.cs +++ b/BBWY.JDSDK/Request/SellerPromotionV2CountRequest.cs @@ -6,85 +6,85 @@ namespace Jd.Api.Request { public class SellerPromotionV2CountRequest : JdRequestBase { - public string - ip - {get; set;} - - public string - port - {get; set;} - - public Nullable - promoId - {get; set;} - - public string - name - {get; set;} - - public Nullable - type - {get; set;} - - public Nullable - favorMode - {get; set;} - - public string - beginTime - {get; set;} - - public string - endTime - {get; set;} - - public Nullable - promoStatus - {get; set;} - - public Nullable - wareId - {get; set;} - - public Nullable - skuId - {get; set;} - - public Nullable - srcType - {get; set;} - - public override string ApiName - { - get{return "jingdong.seller.promotion.v2.count";} - } - protected override void PrepareParam(IDictionary parameters) - { - parameters.Add("ip", this. ip + public string +ip + { get; set; } + + public string +port + { get; set; } + + public Nullable +promoId + { get; set; } + + public string +name + { get; set; } + + public Nullable +type + { get; set; } + + public Nullable + favorMode + { get; set; } + + public string + beginTime + { get; set; } + + public string + endTime + { get; set; } + + public Nullable + promoStatus + { get; set; } + + public Nullable + wareId + { get; set; } + + public Nullable + skuId + { get; set; } + + public Nullable + srcType + { get; set; } + + public override string ApiName + { + get { return "jingdong.seller.promotion.v2.count"; } + } + protected override void PrepareParam(IDictionary parameters) + { + parameters.Add("ip", this.ip ); - parameters.Add("port", this. port + parameters.Add("port", this.port ); - parameters.Add("promo_id", this. promoId + parameters.Add("promo_id", this.promoId ); - parameters.Add("name", this. name + parameters.Add("name", this.name ); - parameters.Add("type", this. type + parameters.Add("type", this.type ); - parameters.Add("favor_mode", this. favorMode + parameters.Add("favor_mode", this.favorMode ); - parameters.Add("begin_time", this. beginTime + parameters.Add("begin_time", this.beginTime ); - parameters.Add("end_time", this. endTime + parameters.Add("end_time", this.endTime ); - parameters.Add("promo_status", this. promoStatus + parameters.Add("promo_status", this.promoStatus ); - parameters.Add("ware_id", this. wareId + parameters.Add("ware_id", this.wareId ); - parameters.Add("sku_id", this. skuId + parameters.Add("sku_id", this.skuId ); - parameters.Add("src_type", this. srcType + parameters.Add("src_type", this.srcType ); - } + } } } @@ -92,6 +92,6 @@ namespace Jd.Api.Request - - + + diff --git a/BBWY.JDSDK/Request/SkuWriteDeleteSkuRequest.cs b/BBWY.JDSDK/Request/SkuWriteDeleteSkuRequest.cs index 13a3626e..be237551 100644 --- a/BBWY.JDSDK/Request/SkuWriteDeleteSkuRequest.cs +++ b/BBWY.JDSDK/Request/SkuWriteDeleteSkuRequest.cs @@ -6,19 +6,19 @@ namespace Jd.Api.Request { public class SkuWriteDeleteSkuRequest : JdRequestBase { - public Nullable - skuId - {get; set;} - - public override string ApiName - { - get{return "jingdong.sku.write.deleteSku";} - } - protected override void PrepareParam(IDictionary parameters) - { - parameters.Add("skuId", this. skuId + public Nullable +skuId + { get; set; } + + public override string ApiName + { + get { return "jingdong.sku.write.deleteSku"; } + } + protected override void PrepareParam(IDictionary parameters) + { + parameters.Add("skuId", this.skuId ); - } + } } } @@ -26,6 +26,6 @@ namespace Jd.Api.Request - - + + diff --git a/BBWY.JDSDK/Request/SkuWriteUpdateSkusRequest.cs b/BBWY.JDSDK/Request/SkuWriteUpdateSkusRequest.cs new file mode 100644 index 00000000..806435d7 --- /dev/null +++ b/BBWY.JDSDK/Request/SkuWriteUpdateSkusRequest.cs @@ -0,0 +1,46 @@ +using Jd.Api.Response; +using System; +using System.Collections.Generic; + +namespace Jd.Api.Request +{ + public class SkuWriteUpdateSkusRequest : JdRequestBase + { + public override string ApiName => "jingdong.sku.write.updateSkus"; + + public Nullable wareId { get; set; } + + public IList skus { get; set; } + //public string skus { get; set; } + + protected override void PrepareParam(IDictionary paramters) + { + paramters.Add("wareId", wareId); + paramters.Add("skus", skus); + } + } + + public class SkuWriteUpdateSkusItem + { + public Nullable wareId { get; set; } + + public Nullable skuId { get; set; } + + public List saleAttrs { get; set; } + + public decimal jdPrice { get; set; } + + public int stockNum { get; set; } + + public string barCode { get; set; } + + public List multiCateProps { get; set; } + } + + public class SkuWriteUpdateSkusItemSaleAttrs + { + public string attrId { get; set; } + + public List attrValues { get; set; } + } +} diff --git a/BBWY.JDSDK/Response/ActivityStatisticsReadServiceGetShoppingCartActivityStatisticsResponse.cs b/BBWY.JDSDK/Response/ActivityStatisticsReadServiceGetShoppingCartActivityStatisticsResponse.cs index 94938911..daf08efb 100644 --- a/BBWY.JDSDK/Response/ActivityStatisticsReadServiceGetShoppingCartActivityStatisticsResponse.cs +++ b/BBWY.JDSDK/Response/ActivityStatisticsReadServiceGetShoppingCartActivityStatisticsResponse.cs @@ -2,15 +2,16 @@ using System; using System.Xml.Serialization; using System.Collections.Generic; using Newtonsoft.Json; - using Jd.Api.Domain; - namespace Jd.Api.Response +using Jd.Api.Domain; +namespace Jd.Api.Response { -public class ActivityStatisticsReadServiceGetShoppingCartActivityStatisticsResponse:JdResponse{ - [JsonProperty("returnType")] -public ActivityStatistics + public class ActivityStatisticsReadServiceGetShoppingCartActivityStatisticsResponse : JdResponse + { + [JsonProperty("returnType")] + public ActivityStatistics - returnType - { get; set; } - } + returnType + { get; set; } + } } diff --git a/BBWY.JDSDK/Response/SkuWriteUpdateSkusResponse.cs b/BBWY.JDSDK/Response/SkuWriteUpdateSkusResponse.cs new file mode 100644 index 00000000..3af602da --- /dev/null +++ b/BBWY.JDSDK/Response/SkuWriteUpdateSkusResponse.cs @@ -0,0 +1,10 @@ +using Jd.Api.Domain; +using Newtonsoft.Json; + +namespace Jd.Api.Response +{ + public class SkuWriteUpdateSkusResponse: JdResponse + { + + } +} diff --git a/BBWY.Server.Model/Dto/Response/Product/ProductResponse.cs b/BBWY.Server.Model/Dto/Response/Product/ProductResponse.cs index 9a25de8f..4d9ad01a 100644 --- a/BBWY.Server.Model/Dto/Response/Product/ProductResponse.cs +++ b/BBWY.Server.Model/Dto/Response/Product/ProductResponse.cs @@ -59,7 +59,7 @@ namespace BBWY.Server.Model.Dto public DateTime? CreateTime { get; set; } - public JToken? Source { get; set; } + public JToken Source { get; set; } } public class SimpleProductSkuResponse diff --git a/BBWY.Test/JDProductAPITest.cs b/BBWY.Test/JDProductAPITest.cs index d9252936..2b86855e 100644 --- a/BBWY.Test/JDProductAPITest.cs +++ b/BBWY.Test/JDProductAPITest.cs @@ -1,8 +1,11 @@ -using Jd.Api; +using BBWY.Server.Model.Dto; +using Jd.Api; using Jd.Api.Request; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; +using System.Linq; using System.Text; namespace BBWY.Test @@ -21,5 +24,167 @@ namespace BBWY.Test var response = client.Execute(req_skuList, token, DateTime.Now.ToLocalTime()); Console.WriteLine(JsonConvert.SerializeObject(response)); } + + public void QueryTouTu(IJdClient client, string token, string spu) + { + var req = new TransparentImageReadFindByWareIdAndColorIdRequest(); + + req.wareId = long.Parse(spu); + req.colorId = "0000000000"; + + var response = client.Execute(req, token, DateTime.Now.ToLocalTime()); + Console.WriteLine(JsonConvert.SerializeObject(response)); + } + + /// + /// 查询SKU细节图 + /// + public void FindImageByColor(IJdClient client, string token, string spu) + { + var req = new ImageReadFindImagesByColorRequest(); + + req.wareId = long.Parse(spu); + req.colorId = "0000000000"; + + var response = client.Execute(req, token, DateTime.Now.ToLocalTime()); + + Console.WriteLine(JsonConvert.SerializeObject(response)); + } + + public void ShangJiaTest(IJdClient client, string token) + { + var mainSpu = "10022515718131"; + var giftSpu = "10023500913672"; + + var barCode = ""; + var categoryId = ""; + IList saleAttrs = null; + IList multiCateProps = null; + + var selectGiftSkuList = new List(); + + #region 取主商品信息 + { + var req = new SkuReadSearchSkuListRequest() + { + pageSize = 50,//50 + field = "logo,saleAttrs,status,created,barCode,categoryId,multiCateProps" + }; + + req.wareId = mainSpu; + var res = client.Execute(req, token, DateTime.Now.ToLocalTime()); + + var skuList = ((JArray)res.Json["jingdong_sku_read_searchSkuList_responce"]["page"]["data"]).Select(s => new ProductSkuResponse() + { + Id = s.Value("skuId"), + ProductId = s.Value("wareId"), + Price = s.Value("jdPrice"), + Title = s["saleAttrs"] != null ? string.Join("-", s["saleAttrs"].Select(a => a["attrValueAlias"][0].ToString())) : string.Empty, + Logo = $"https://img13.360buyimg.com/n9/s80x80_{s.Value("logo")}", + State = s.Value("status"), + //CreateTime = s.Value("created").StampToDateTime(), + Source = s + }).ToList(); + + barCode = skuList[0].Source.Value("barCode"); + categoryId = skuList[0].Source.Value("categoryId"); + saleAttrs = skuList[0].Source["saleAttrs"] != null ? skuList[0].Source["saleAttrs"].ToList() : null; + multiCateProps = skuList[0].Source["multiCateProps"] != null ? skuList[0].Source["multiCateProps"].ToList() : null; + } + #endregion + + #region 取赠品信息 + { + var giftTitleList = new List() { "粉丝价", "放心购", "闪电退款", "免费", "价格保护", "极速审核", "质量保护", "运费险" }; + var req = new SkuReadSearchSkuListRequest() + { + pageSize = 50,//50 + field = "logo,saleAttrs,status,created,barCode,categoryId,multiCateProps" + }; + req.wareId = giftSpu; + var res = client.Execute(req, token, DateTime.Now.ToLocalTime()); + + var skuList = ((JArray)res.Json["jingdong_sku_read_searchSkuList_responce"]["page"]["data"]).Select(s => new ProductSkuResponse() + { + Id = s.Value("skuId"), + ProductId = s.Value("wareId"), + Price = s.Value("jdPrice"), + Title = s["saleAttrs"] != null ? string.Join("-", s["saleAttrs"].Select(a => a["attrValueAlias"][0].ToString())) : string.Empty, + Logo = $"https://img13.360buyimg.com/n9/s80x80_{s.Value("logo")}", + State = s.Value("status"), + //CreateTime = s.Value("created").StampToDateTime(), + Source = s + }).ToList(); + + foreach (var sku in skuList) + { + if (!giftTitleList.Contains(sku.Title)) + continue; + selectGiftSkuList.Add(sku); + } + } + #endregion + + #region 增量保存sku + { + var skusParamList = new List(); + foreach (var sku in selectGiftSkuList) + { + var p = new SkuWriteUpdateSkusItem() + { + wareId = long.Parse(mainSpu), + skuId = long.Parse(sku.Id), + //saleAttrs = sku.Source["saleAttrs"].Select(s => new SkuWriteUpdateSkusItemSaleAttrs() + //{ + // attrId = s.Value("attrId"), + // attrValues = s.Value("attrValues").Select(x => x.ToString()).ToList() + //}).ToList(), + jdPrice = sku.Price, + stockNum = 5000, + barCode = barCode, + //multiCateProps = multiCateProps.Select(mp => new SkuWriteUpdateSkusItemSaleAttrs() + //{ + // attrId = mp.Value("attrId"), + // attrValues = mp.Value("attrValues").Select(x => x.ToString()).ToList() + //}).ToList() + }; + + p.saleAttrs = new List(); + foreach (var saleAttr in saleAttrs) + { + var m = new SkuWriteUpdateSkusItemSaleAttrs(); + m.attrId = saleAttr.Value("attrId"); + m.attrValues = saleAttr.Value("attrValues").Select(x => x.ToString()).ToList(); + p.saleAttrs.Add(m); + } + + p.multiCateProps = new List(); + if (multiCateProps != null && multiCateProps.Count() > 0) + { + foreach (var multiCateProp in multiCateProps) + { + var m = new SkuWriteUpdateSkusItemSaleAttrs(); + m.attrId = multiCateProp.Value("attrId"); + m.attrValues = multiCateProp.Value("attrValues").Select(x => x.ToString()).ToList(); + p.multiCateProps.Add(m); + } + } + skusParamList.Add(p); + } + + var req = new SkuWriteUpdateSkusRequest(); + req.wareId = long.Parse(mainSpu); + req.skus = skusParamList; + + Console.WriteLine("请求参数"); + Console.WriteLine(JsonConvert.SerializeObject(req)); + var res = client.Execute(req, token, DateTime.Now.ToLocalTime()); + + Console.WriteLine(); + Console.WriteLine("返回内容"); + Console.WriteLine(JsonConvert.SerializeObject(res)); + } + #endregion + } } } diff --git a/BBWY.Test/Program.cs b/BBWY.Test/Program.cs index c62bc59b..c374d9e0 100644 --- a/BBWY.Test/Program.cs +++ b/BBWY.Test/Program.cs @@ -1,5 +1,8 @@ using Jd.Api; +using Newtonsoft.Json.Linq; using System; +using System.Collections.Generic; +using System.Linq; namespace BBWY.Test { @@ -18,17 +21,36 @@ namespace BBWY.Test //2ace3023200c4ea9aa682bbf8bffee18jztm 布莱特玩具 var token = "0e61c4a8ec3e4df4b5836e10884db9220yth"; //"b46065ef5b894f2297686e28d39cb37a2mdy";//""; + //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(); + //10023500913672 含赠品SPU //10022515718131 需要进行赠品上架的SPU IJdClient client = GetJdClient(appkey, appSecret); - var test1 = new JDProductAPITest(); - test1.GetSkus(client,token, "10023500913672"); + var test1 = new JDProductAPITest(); + + //Console.WriteLine("-------------获取包含赠品的sku-------------"); + //test1.GetSkus(client,token, "10023500913672"); + + + //Console.WriteLine("-------------获取需要进行赠品SKU上架的本款产品的sku-------------"); + //test1.GetSkus(client, token, "10022515718131"); - Console.WriteLine(); + //Console.WriteLine("-------------查询本款产品透图-------------"); - test1.GetSkus(client, token, "10022515718131"); + //test1.QueryTouTu(client,token, "10022515718131"); + + //Console.WriteLine("-------------查询本款产品细节图-------------"); + + //test1.FindImageByColor(client, token, "10022515718131"); //var testService = new JDServiceAPITest(); //testService.GetServiceDetail(client, token); @@ -36,6 +58,8 @@ namespace BBWY.Test //var ddTest = new DingDingAPITest(); //ddTest.Send(); + test1.ShangJiaTest(client, token); + Console.ReadKey(); } }