|
|
@ -14,6 +14,7 @@ using NLog; |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Linq; |
|
|
|
using System.Text; |
|
|
|
|
|
|
|
namespace BBWY.Server.Business |
|
|
|
{ |
|
|
@ -641,5 +642,252 @@ namespace BBWY.Server.Business |
|
|
|
|
|
|
|
return (JArray)res.Json["jingdong_stock_read_findSkuStock_responce"]["skuStocks"]; |
|
|
|
} |
|
|
|
|
|
|
|
public override void DeleteSku(DeleteSkuRequest request) |
|
|
|
{ |
|
|
|
var jdClient = GetJdClient(request.AppKey, request.AppSecret); |
|
|
|
var req = new SkuWriteDeleteSkuRequest(); |
|
|
|
req.skuId = long.Parse(request.Sku); |
|
|
|
var res = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); |
|
|
|
} |
|
|
|
|
|
|
|
public override int StartJDPromotionTask(StartPromotionTaskRequest2 request) |
|
|
|
{ |
|
|
|
var stepText = string.Empty; |
|
|
|
//stepText.AppendLine($"任务Id {request.Id} 店铺Id {request.ShopId}");
|
|
|
|
try |
|
|
|
{ |
|
|
|
var jdClient = GetJdClient(request.AppKey, request.AppSecret); |
|
|
|
string barCode = string.Empty, categoryId = string.Empty; |
|
|
|
IList<JToken> multiCateProps = null; |
|
|
|
long wareId = long.Parse(request.MainProductSpu); |
|
|
|
List<string> giftSkuList = new List<string>(); |
|
|
|
|
|
|
|
#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<string>("barCode"); |
|
|
|
categoryId = mainSkuList[0].Source.Value<string>("categoryId"); |
|
|
|
multiCateProps = mainSkuList[0].Source["multiCateProps"] != null ? mainSkuList[0].Source["multiCateProps"].ToList() : null; |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 设置精简标题
|
|
|
|
{ |
|
|
|
stepText = "设置精简标题"; |
|
|
|
var req = new WareWriteUpdateWareTitleRequest(); |
|
|
|
req.wareId = wareId; |
|
|
|
req.title = request.SimpleTitle; |
|
|
|
var response = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); |
|
|
|
if (response.IsError) |
|
|
|
throw new BusinessException($"设置精简标题出错-{(string.IsNullOrEmpty(response.ErrorMsg) ? response.ErrMsg : response.ErrorMsg)}"); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(request.GiftTemplateSku)) |
|
|
|
{ |
|
|
|
stepText = "上架赠品"; |
|
|
|
|
|
|
|
#region 上架赠品
|
|
|
|
|
|
|
|
#region 获取赠品sku信息
|
|
|
|
stepText = "获取赠品sku信息"; |
|
|
|
var selectGiftSkuList = GetProductSkuList(new SearchProductSkuRequest() |
|
|
|
{ |
|
|
|
AppKey = request.AppKey, |
|
|
|
AppSecret = request.AppSecret, |
|
|
|
AppToken = request.AppToken, |
|
|
|
IsContainSource = true, |
|
|
|
Platform = request.Platform, |
|
|
|
Sku = request.GiftTemplateSku |
|
|
|
}); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 获取销售属性
|
|
|
|
stepText = "获取销售属性"; |
|
|
|
IList<JToken> colorSaleAttrs = null; |
|
|
|
{ |
|
|
|
var req = new CategoryReadFindAttrsByCategoryIdUnlimitCateRequest(); |
|
|
|
req.cid = long.Parse(categoryId); |
|
|
|
req.attributeType = 4; |
|
|
|
req.field = "attrValueList,attrGroup"; |
|
|
|
var response = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); |
|
|
|
if (response.Json == null) |
|
|
|
response.Json = JObject.Parse(response.Body); |
|
|
|
var colorProperty = response.Json["jingdong_category_read_findAttrsByCategoryIdUnlimitCate_responce"]["findattrsbycategoryidunlimitcate_result"].FirstOrDefault(j => j.Value<string>("name") == "颜色"); |
|
|
|
if (colorProperty == null) |
|
|
|
throw new Exception("获取销售属性-缺少颜色属性"); |
|
|
|
colorSaleAttrs = colorProperty["attrValueList"].ToList(); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 组装上架/改名/设置细节图参数
|
|
|
|
stepText = "组装上架/改名/设置细节图参数"; |
|
|
|
var takeColorIndex = colorSaleAttrs.Count() - 1; |
|
|
|
var skusParamList = new List<SkuWriteUpdateSkusItem>(); |
|
|
|
var updateSkuTitleParamList = new List<WareWriteUpdateWareSaleAttrvalueAliasRequestItem>(); |
|
|
|
var imageWriteUpdateRequestList = new List<ImageWriteUpdateRequest>(); |
|
|
|
|
|
|
|
for (var i = 0; i < selectGiftSkuList.Count(); i++) |
|
|
|
{ |
|
|
|
var giftSku = selectGiftSkuList[i]; |
|
|
|
var colorProperty = colorSaleAttrs[takeColorIndex]; |
|
|
|
|
|
|
|
var p = new SkuWriteUpdateSkusItem() |
|
|
|
{ |
|
|
|
type = "com.jd.pop.ware.ic.api.domain.Sku", |
|
|
|
wareId = wareId, |
|
|
|
//skuId = long.Parse(sku.Id),
|
|
|
|
jdPrice = giftSku.Price, |
|
|
|
stockNum = 500, |
|
|
|
barCode = barCode, |
|
|
|
saleAttrs = new List<SkuWriteUpdateSkusItemSaleAttrs>() |
|
|
|
{ |
|
|
|
new SkuWriteUpdateSkusItemSaleAttrs() |
|
|
|
{ |
|
|
|
type = "com.jd.pop.ware.ic.api.domain.Prop", |
|
|
|
attrId = colorProperty.Value<string>("attId"), |
|
|
|
attrValues = new List<string>() { colorProperty.Value<string>("id") }, |
|
|
|
index = takeColorIndex |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
p.multiCateProps = new List<SkuWriteUpdateSkusItemSaleAttrs>(); |
|
|
|
if (multiCateProps != null && multiCateProps.Count() > 0) |
|
|
|
{ |
|
|
|
foreach (var multiCateProp in multiCateProps) |
|
|
|
{ |
|
|
|
var m = new SkuWriteUpdateSkusItemSaleAttrs(); |
|
|
|
m.type = "com.jd.pop.ware.ic.api.domain.Prop"; |
|
|
|
m.attrId = multiCateProp.Value<string>("attrId"); |
|
|
|
m.attrValues = multiCateProp.Value<JArray>("attrValues").Select(x => x.ToString()).ToList(); |
|
|
|
p.multiCateProps.Add(m); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//修改标题参数
|
|
|
|
updateSkuTitleParamList.Add(new WareWriteUpdateWareSaleAttrvalueAliasRequestItem() |
|
|
|
{ |
|
|
|
attrId = p.saleAttrs[0].attrId, |
|
|
|
attrValues = p.saleAttrs[0].attrValues, |
|
|
|
attrValueAlias = new List<string>() { giftSku.Title } |
|
|
|
}); |
|
|
|
|
|
|
|
//修改商品细节图参数
|
|
|
|
var imgUrlBuilder = new StringBuilder(); |
|
|
|
var imgIndexBuilder = new StringBuilder(); |
|
|
|
imgUrlBuilder.Append($"{giftSku.Logo.Substring(giftSku.Logo.IndexOf("jfs"))},"); |
|
|
|
imgIndexBuilder.Append("1,"); |
|
|
|
imageWriteUpdateRequestList.Add(new ImageWriteUpdateRequest() |
|
|
|
{ |
|
|
|
wareId = wareId, |
|
|
|
colorId = colorProperty.Value<string>("id"), |
|
|
|
imgUrl = imgUrlBuilder.ToString().Trim(','), |
|
|
|
imgIndex = imgIndexBuilder.ToString().Trim(',') |
|
|
|
}); |
|
|
|
|
|
|
|
takeColorIndex--; |
|
|
|
skusParamList.Add(p); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 上架sku
|
|
|
|
{ |
|
|
|
stepText = "上架sku"; |
|
|
|
var req = new SkuWriteUpdateSkusRequest(); |
|
|
|
req.wareId = wareId; |
|
|
|
req.skus = skusParamList; |
|
|
|
var res = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); |
|
|
|
|
|
|
|
if (res.Json == null) |
|
|
|
res.Json = JObject.Parse(res.Body); |
|
|
|
if (res.IsError) |
|
|
|
throw new BusinessException($"上架sku失败-{(string.IsNullOrEmpty(res.ErrorMsg) ? res.ErrMsg : res.ErrorMsg)}"); |
|
|
|
var newSkuList = res.Json["jingdong_sku_write_updateSkus_responce"]["skuList"].ToList().Select(x => x.Value<string>("skuId")).ToList(); |
|
|
|
giftSkuList.AddRange(newSkuList); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region sku改名
|
|
|
|
{ |
|
|
|
stepText = "sku改名"; |
|
|
|
var req = new WareWriteUpdateWareSaleAttrvalueAliasRequest() |
|
|
|
{ |
|
|
|
wareId = wareId, |
|
|
|
props = updateSkuTitleParamList |
|
|
|
}; |
|
|
|
var res = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); |
|
|
|
if (res.Json == null) |
|
|
|
res.Json = JObject.Parse(res.Body); |
|
|
|
if (res.IsError) |
|
|
|
throw new BusinessException($"sku改名失败-{(string.IsNullOrEmpty(res.ErrorMsg) ? res.ErrMsg : res.ErrorMsg)}"); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region sku修改细节图
|
|
|
|
stepText = "sku修改细节图"; |
|
|
|
foreach (var imageWriteUpdateRequest in imageWriteUpdateRequestList) |
|
|
|
{ |
|
|
|
var res = jdClient.Execute(imageWriteUpdateRequest, request.AppToken, DateTime.Now.ToLocalTime()); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
var skuList = request.MainProductGiftSku.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); |
|
|
|
giftSkuList.AddRange(skuList); |
|
|
|
} |
|
|
|
|
|
|
|
#region 创建活动
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 添加活动sku
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 审核活动
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 下架赠品sku
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 设置完整标题
|
|
|
|
{ |
|
|
|
stepText = "设置完整标题"; |
|
|
|
var req = new WareWriteUpdateWareTitleRequest(); |
|
|
|
req.wareId = long.Parse(request.MainProductSpu); |
|
|
|
req.title = request.FullTitle; |
|
|
|
var response = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime()); |
|
|
|
if (response.IsError) |
|
|
|
throw new BusinessException($"设置完整标题出错-{(string.IsNullOrEmpty(response.ErrorMsg) ? response.ErrMsg : response.ErrorMsg)}"); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
nLogManager.Default().Error(ex, $"任务Id {request.Id} 店铺Id {request.ShopId} 执行步骤 {stepText}"); |
|
|
|
throw ex; |
|
|
|
} |
|
|
|
return base.StartJDPromotionTask(request); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|